プロジェクトテンプレート作成コマンドの実装
2025年 02月 10日 月曜日
背景
プロジェクト作成時に以下のような課題がありました
- プロジェクト間での設定の統一がしたい
- リンターなどの設定のコピペが手間
- GitHub Templatesでは柔軟な構成が作りづらい
これらを解決するため、カスタムnpxコマンドを作成しました。
実装方法
1. プロジェクト構成
run.ts
にコマンドを実装していきますtemplates
ディレクトリにサブモジュールを作成します- サブモジュールにしておくことで各テンプレートでの依存関係のアップデートなどを行いやすくしています
├── package.json # パッケージ設定
├── run.ts # コマンド実行ファイル
└── templates/ # テンプレート格納
2. コマンドの作成
対話式のプロンプトで必要な情報を収集します。 今回はプロジェクト名とテンプレートを選択するようにします
const response = await prompts([
{
type: "text",
name: "projectName",
message: "プロジェクト名を入力:",
initial: "my-project",
},
{
type: "select",
name: "template",
message: "使用するテンプレート:",
choices: [
{title: "Vite-React-Typescript", value: "react-ts"},
{title: "Remix", value: "remix"},
],
},
])
入力されたプロジェクト名
, 選択されたフレームワーク
を元に、必要なファイルをコピーします。
const templateDir = path.join(__dirname, "templates", `${response.template}`)
const targetDir = path.resolve(process.cwd(), response.projectName)
try {
fs.mkdirSync(targetDir, {recursive: true})
execSync(`cp -r ${templateDir}/. ${targetDir}`)
} catch (error) {
console.error("Error during copy:", error)
}
3. パッケージの公開
package.jsonを以下のように設定:
{
"name": "@username/create-project",
"version": "1.0.0",
"description": "プロジェクトテンプレート作成ツール",
"bin": {
"create-project": "./bin/run.js"
},
"repository": {
"type": "git",
"url": "https://github.com/username/create-project"
},
"scripts": {
"build": "rimraf dist && ncc build ./run.ts -o dist/ && rimraf dist/templates && cp -r templates dist/templates" // 普通にビルドしてしまうと隠しファイルがコピーされずに必要なファイルがコピーされないため無理やりコピーする
}
}
npm publish
で公開後、npm install @username/create-project@version
することでnpx @username/create-project
で利用可能になります。
まとめ
- 自分専用のコマンドを作成することで、プロジェクト作成時の手間が省けました
- フロントエンドに限らず気になるフレームワークがあるのでそちらについても追加していこうと思っています
この記事をシェア