Go のタスクランナーとして npm を使ってみたら案外よかった。Go に限った話ではないけど、Go が特に開発ツールチェーン周りの管理がしにくいので噛み合いやすいのではないかと思う。
npm は Node.js 用のパッケージマネージャだが、npm-scripts という簡易なタスクランナー機能がついている。また、Node.js 用の便利な開発ツールをそのまま利用できて、開発ツールのインストールも一括で管理できる。
npm をタスクランナーとして使う利点
- Node.js のインストールだけで利用できる
- 簡易なタスクランナーが利用できる
-
Node.js 用の開発ツールが利用できる
- husky + lint-staged, Prettier, etc
- 開発ツールのインストールが 1 コマンド (
npm install
) で完了する
導入手順
npm のインストール
Node.js をインストールすれば npm も標準で付属する。
package.json の作成
npm で管理したいプロジェクトに package.json
を作成する。
{
"name": "go-project",
"private": true,
"scripts": {
"test": "go test -v ./...",
// ...
}
}
"scripts"
フィールドに "スクリプト名": "コマンド..."
の形でタスクを書くと、npm run スクリプト名
の形で実行できる。
Node.js 用の開発ツールの追加
Node.js 用の開発ツールといえど、JavaScript 以外でも使える便利なツールが多数存在する。npm install -D パッケージ名
でパッケージの追加ができる。下記の点に注意する。
-
node_modules
を.gitignore
に追加 -
package-lock.json
も必要なファイルなので git 上にコミット
package.json
に追加したパッケージは、別環境でも npm install
で一括インストールできるようになる。
husky + lint-staged
husky はコミットフックを管理できるようにするツール、lint-staged は git でステージングされているファイルに linter を走らせるためのツール。
$ npm install -D husky lint-staged
設定は package.json に書く (別ファイルにもできる)。
{
// ...
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.go": "go fmt"
}
}
上記のようにするとコミット前の go のソースコードに自動で go fmt
できる。
Prettier
Prettier といえば JavaScript 用のフォーマッタだが、それ以外のファイルタイプのフォーマットにも対応している。
- Markdown
- JSON
- YAML
$ npm install -D prettier
上記の husky、lint-staged と組み合わせればコミットフックで上記ファイルのフォーマットもできる。
{
// ...
"lint-staged": {
"*.go": "go fmt",
"*.{md,yml,json}": "prettier --write"
}
その他
他にも導入すると便利かもしれないツール。マルチプラットフォームで動作するようにさせるものも多い。参考: npm-scripts で使える便利モジュールたち - Qiita
-
commitlint
- コミットメッセージの linter
-
cross-env
- マルチプラットフォームで環境変数を設定しつつ npm-scripts を使えるようにする
-
rimraf
- マルチプラットフォームの
rm -rf
- マルチプラットフォームの