Makefileで作業タスクを実行する


はじめに

最近、仕事で複数のレポジトリを扱うことが多く、すこし時間がたってから再び作業を行うことも多い
そういうときに、Makefileを使ってみたら便利だったので、簡単にその使い方について紹介する

Makefileについて

  • ビルド手順を書くもの
    • あるファイル、拡張子を作るための手順を書いておく
    • 更新日時をみながら手順を実行してくれる

何が便利なのか?

  • 現在開発使っているちょっとしたコマンドをまとめておく
    • まとめておくことで久しぶりに開発に戻ったときのコンテキストスイッチを減らせる
  • Linux,Unix,OSXあたりなら動かないことはほとんどない
  • Railsで開発していると、Rakefileは使っているけどMakefileは空いている事が多い
  • 任意のタスクも実行できる⭐

任意のタスクも実行できる⭐

今回はコレに注目して、タスクランナーとして使うやり方を紹介する

サンプル

まずは簡単なサンプルから
ファイル名: Makefile

VALUE1='world'
.PHONY: deploy build
build:
	@echo 'build hello $(VALUE1)'

deploy: build
	@echo 'deploy hello $(VALUE1)'

実行してみる

$ make deploy

build hello world
deploy hello world

説明

build:, deploy:

: までがタスク名(ビルドターゲット名)で、次の行からタブでインデント後、実行したいコマンドを書く
: のあとに他のタスク名を書くと、そのタスク実行前に依存するタスクとして実行してくれる

.PHONY

ビルド手順を書くものなので、: の左側は、.c (拡張子)やファイル名を書くことになってる
なので、タスク名と同じファイルが有るとタスクを実行してくれなくなる。
.PHONY: のあとにタスク名を書いておくと同名のファイルがあったとしても指定したタスクを実行してくれるようになる

@echo

実行するコマンドの前に@ をつけておくと実行するコマンドを表示しないようになる。外すと表示してくれる。

$(VALUE1)

VLAUE1 = 'world' はMakefileのなかでの変数宣言
変数を展開するには、$(VALUE1)のように書く。環境変数を展開するときも使える

グローバルな.gitignoreに入れてみるのも良さそう

プロジェクト等で、すでにMakefileがある場合 make -f MyMakefile のようにすると別のファイル名を使える。
あわせて自分が使う限定のファイル名を決めておいて、グローバルな.gitignoreでプロジェクトのgit管理に
入らないようにしておくのも良い

注意も必要

  • とりあえずの場所として作る
    • 定常的に使うのであればのちのち Rakefile に移動するとかも考えたほうがよい

まとめ

というわけで、Makefile簡単な使い方と利点について書いてみたけど、
同じようにMakefileを活用して誰かの作業効率が少しでも作業効率が改善すると嬉しい