個人開発をしていると、毎回同じような作業を繰り返している自分に気付く瞬間があります。
新しいプロジェクト用のディレクトリ作成、テンプレートのコピー、依存関係の追加、設定ファイルの初期化、よく使うコードの生成など、機械的な作業が案外多いものです。
そこで思い切って Node.js で自作の CLI ツール を作ってみたところ、開発スピードが想像以上に上がったので、その内容をまとめます。
Node.js で CLI ツールを作るメリット
Node.js は以下の点で CLI と非常に相性が良いと感じました。
- インストールされている環境が多く、配布しやすい
- npm script や npx からすぐ呼べる
- 標準ライブラリのファイル操作が強力
- 外部ライブラリ(commander / inquirer / execa)が豊富
- TypeScript で型安全に開発できる
CLI を実装するまでのハードルが低く、ちょっとしたユーティリティを書くのに最適です。
実際に作った CLI の機能
今回自作した CLI では、個人開発でよくやる作業の自動化を入れ込みました。
プロジェクトのひな型生成
テンプレートを複製し、必要な名称をまとめて置換する機能です。
mycli init my-app
実行すると、以下を自動化します。
- プロジェクトディレクトリの作成
- package.json へのプロジェクト名反映
- 共通 eslint / tsconfig のコピー
- Git 初期化
- README の生成
毎回コピペしていた作業が 1 コマンドで済むように。
よく使うコードのスニペット生成
例えば React のカスタムフックや API クライアントのテンプレートを CLI で生成できます。
mycli g hook useUser
指定した名称で雛形ファイルを出力し、パスも自動で補完するため、手書きの手間がかなり減りました。
決まりきったコマンドのラップ
開発で毎回使う複数のコマンドを、1 つにまとめて実行できます。
例:
mycli dev
内部では
- env ファイルコピー
- Prisma のコード生成
- Next.js の dev サーバ起動
などをまとめて実行しています。
バージョン更新と CHANGELOG 自動生成
個人開発でもバージョン管理を丁寧に行いたいので、自動更新スクリプトを CLI に組み込みました。
mycli release minor
これで以下が自動化されます。
- package.json の version 更新
- CHANGELOG の追加
- Git タグ付与
実装に使ったライブラリ
以下のライブラリが非常に便利でした。
commander
CLI のコマンド・オプション定義をシンプルに書ける。
import { Command } from "commander";
const program = new Command();
program
.name("mycli")
.version("1.0.0")
.command("init <name>")
.action((name) => {
console.log("init project:", name);
});
program.parse();
inquirer
対話的 CLI を作れるため、設定項目の選択を UI で補助できます。
execa
外部コマンドの実行に便利。Git 操作や npm install を実行するのに重宝。
fs-extra
ファイル操作(コピー、ディレクトリ作成)が標準の fs より扱いやすい。
実際にどれくらい時間が短縮されたか
CLI 導入前後での体感をまとめると:
- 新規プロジェクト構築:20分 → 30秒
- React Hooks の作成:5分 → 10秒
- リリース作業:5分 → 2秒
- dev 起動前の準備:毎回 1〜2分 → 0秒
トータルで毎日 30 分以上は削減できています。
1 週間で 3 時間以上、1 年で 150 時間ほどの削減になる計算です。
まとめ
Node.js で自作した CLI を導入したことで、単純作業が激減し、個人開発の集中時間を大幅に増やすことができました。
特に良かった点は次の通りです。
- 作業の再現性が高くなる
- タスク間の抜け漏れ防止
- プロジェクト開始までの心理的ハードルが下がる
- ターミナル 1 コマンドで複数の処理が完了する
もしあなたが個人開発で「いつも同じ作業をしている」と感じるなら、
小さな CLI を 1 つ作るだけで世界が変わるかもしれません。

