このブログもある程度記事を書き慣れてきたので現在使っている Makefile を公開してみます。

なぜ make を使うのか

Golang ベースのプロジェクトでは make が利用されることが多い, と みんなの Go 言語 に書かれていました。そのため, このブログでは Golang 製の Hugo を使っているため build や新しい記事を追加する場合には make を利用しています。

このところ Ruby をお仕事で多用しているので rake を使うのも手なのですが, 勉強も兼ねて make を採用しています。これまであまり make を使ってこなかったので細かい部分で時々ハマったりしています。

Makefile の内容

make でコマンドを実行するためには Makefile が必要です。IssueOverflow 執筆時には次のコマンドを用意しています。

  • setup: 必要なコマンド等をインストール
  • server: ローカルサーバを起動
  • build: 記事をビルド
  • article: 新しい記事ファイルを追加
    • アセット用ディレクトリを用意
    • branch を article/something-title に変更
  • help: Makefile に用意されたコマンド一覧を表示

Makefile 自体は次の内容になります。

## setup
setup:
	go get -u -v github.com/kardianos/govendor
	go get -u -v github.com/spf13/hugo
	cd $(GOPATH)/src/github.com/spf13/hugo && govendor sync && go install
	go get github.com/Songmu/make2help/cmd/make2help
	go get -u -v github.com/mattn/go-colorable
	pip install Pygments
	git submodule sync
	git submodule update --init --recursive

## local server
server:
	hugo server --buildDrafts --watch

## build
build:
	hugo -v

## article ex: make article TITLE="title"
article:
	git checkout master
	hugo new articles/`echo $(TITLE) | tr '[:upper:]' '[:lower:]' | sed -e 's/ /-/g'`.md
	mkdir -p content/articles/`date +"%Y"`/`date +"%m"`/`date +"%d"`/`echo $(TITLE) | tr '[:upper:]' '[:lower:]' | sed -e 's/ /-/g'`
	git checkout -b article/`echo $(TITLE) | tr '[:upper:]' '[:lower:]' | sed -e 's/ /-/g'`

## help
help:
	@make2help $(MAKEFILE_LIST)

$ make help を実行した場合, 次の内容が表示されます。

make help の結果

工夫しているところ

$ make article TITLE='Something New Article' する場合に TITLE に与えられた文字列を小文字化し, スペースを - に置換しています。これにより日本語タイトルをそれっぽく翻訳した英語タイトルをそのまま TITLE に渡せばファイルが用意され, article/something-new-article ブランチに git checkout されます。