Makefileを自己文書化する `make2help`
近年「タスクランナー」という言葉をよく耳にするようになりました。近年のWeb開発では、開発環境のセットアップ、依存ライブラリの管理、テストの実行、開発サーバーの起動、ビルド、デプロイ等等、とにかく気にしないといけないことが多いため、そういったタスクを一元管理してくれるタスクランナーは便利なやつです。
新しくプロジェクトに参加した際に、タスクランナーを見れば何をやれば良いのかだいたい分かるようになっているのが理想的だと思っています。
タスクランナーという言葉は主にJS界隈で使われており、そもそもタスクランナーなのかビルドツールなのかという話はありますが、ここでは便宜上それらをひっくるめてタスクランナーと呼ぶことにします。 gulp
も本質的にはビルドツールですし。
Goの開発においては、タスクランナーとして、古き良きビルドツールであるところの make
が主に使われます。 make
も使ってみると、案外これはこれで悪くないな、と思うようになりました。大体の環境に入っていますし、実は基本のルールもシンプルで素朴に使う分にはそれほど難しくありません。
ただ、 rake -T
のようにタスク一覧を出してくれる機能は make
にはないため、それと同等の機能が欲しいと常々思っていました。
そんなところに、 Makefileを自己文書化する という記事があり、感銘を受けました。それと同時に、2016年にもなって結局こういう泥臭い方法しかないことに軽くショックを受けました。
ということで、これにインスパイアされて、Goでツールを作ってみました。その名も make2help
です。
https://github.com/Songmu/make2help
インストール
https://github.com/Songmu/make2help/releases からバイナリをダウンロードできます。go get
も可能です。
% go get github.com/Songmu/make2help/cmd/make2help
使い方
Makefileが配置してあるディレクトリで make2help -all
タスクの一覧が、ターゲットの一覧が表示されます。-all
を付けない場合は、説明が書かれているターゲットのみがリストアップされます。説明は、ターゲット定義の直前に ##
から始まるコメントの形で記述します。
例
折角なので、 make help
を実行するとヘルプを表示するようにしてみましょう。以下の様な Makefile
を用意します。
.DEFAULT_GOAL := help
## Run tests
test: deps
go test ./...
## Install dependencies
deps:
go get -d -v -t ./...
## Show help
help:
@make2help $(MAKEFILE_LIST)
.PHONY: test deps help
helpターゲットで make2help
を実行するように定義してあります。また、 .DEFAULT_GOAL
に helpを代入して、これが標準のターゲットになるようにもしてあります。これで make
を実行すると make help
を実行したのと同じ効果が得られるようになります。実行結果は以下のとおりです。
ということで非常に便利なので是非ご利用ください。