このブログもある程度記事を書き慣れてきたので現在使っている 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 article TITLE='Something New Article'
する場合に TITLE に与えられた文字列を小文字化し, スペースを -
に置換しています。これにより日本語タイトルをそれっぽく翻訳した英語タイトルをそのまま TITLE に渡せばファイルが用意され, article/something-new-article
ブランチに git checkout されます。