2
1

More than 3 years have passed since last update.

Goのプロジェクトでもタスクランナーとしてnpmを使う

Posted at

Go のタスクランナーとして npm を使ってみたら案外よかった。Go に限った話ではないけど、Go が特に開発ツールチェーン周りの管理がしにくいので噛み合いやすいのではないかと思う。

npmNode.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 を作成する。

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 に書く (別ファイルにもできる)。

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 と組み合わせればコミットフックで上記ファイルのフォーマットもできる。

package.json
{
  // ...
  "lint-staged": {
    "*.go": "go fmt",
    "*.{md,yml,json}": "prettier --write"
  }

その他

他にも導入すると便利かもしれないツール。マルチプラットフォームで動作するようにさせるものも多い。参考: npm-scripts で使える便利モジュールたち - Qiita

  • commitlint
    • コミットメッセージの linter
  • cross-env
    • マルチプラットフォームで環境変数を設定しつつ npm-scripts を使えるようにする
  • rimraf
    • マルチプラットフォームの rm -rf
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1