おそらくはそれさえも平凡な日々

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 を実行したのと同じ効果が得られるようになります。実行結果は以下のとおりです。

ということで非常に便利なので是非ご利用ください。

created at
last modified at

2019-06-01T18:57:39+0900

comments powered by Disqus