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
- マルチプラットフォームの