はじめに
たまにしか触らないレポジトリを開いた際に、下記のような問題を抱えているのは私だけでしょうか。
- Webアプリケーション開発でSeederなどDBの初期データを投入するコマンドを忘れた
- 久々にDocker起動したらどうやってアクセスするか忘れた(どのポートやっけ)
- たまにしか使わないパッケージのオプションを忘れた
このような「あのコマンドなんやっけ〜!!」問題を解決する方法として、makeコマンドがあります。
makeコマンドとは
makeコマンドとは、UNIX系OSにおけるプログラム開発で標準的に用いられるコマンドの一つで、ソースコードからの実行ファイルの作成(ビルド)を自動化するもの。
引用元 : makeコマンド
このmakeコマンドで動かすファイルがMakefileです。
主にgccなどc
c++
のコンパイルの簡易化として利用されているケースが多いみたいですが、
Webアプリケーション開発でも使えますし便利です。(本来の使い方と若干違う気がしますが)
npmでいうnpm run
コマンドに近い感じですね。
Makefileのメリット
~/.bashrc
などのエイリアスと比べると下記のようなメリットがあるような気がします。
- gitで管理できる。
- レポジトリごとに設置でき、プロダクトごとにカスタマイズができる。
makeのインストール
macの場合すでにインストールされているので、下記のコマンドで確認してください。
(UNIX系OSであれば基本的に入ってそう)
$ make -h
Usage: make [options] [target] ...
Makefileの書き方
書き方
# Makefile
targets: prerequisites
command
command
command
targets
: makeコマンドでの呼び出し名
prerequisites
: スペース区切りで対象のファイル名を指定(この機能は利用しません)
command
: 実行したいコマンド
かなり色々なことができるようですが、今回は割愛して最小限の記載にします。
簡単な例
# Makefile
up:
docker-compose up -d
Makefileを設置したディレクトリでmakeコマンドを実行して呼び出します。
$ ll | grep Makefile
-rw-r--r-- 1 my staff 529 Apr 7 17:44 Makefile
$ make up
docker-compose up -d
Creating network "python_default" with the default driver
Creating jupyter ... done
設定したdocker-compose up -d
コマンドが実行されることが確認できました。
使用例:コマンド一つでJupyter Notebookにアクセスする
Jupyter NotebookはPython、RなどをWebブラウザ上で記述・実行できる統合開発環境です。
こちらをDockerで管理しているのですが、毎回ブラウザでのアクセス方法を失念するので、Makefileにまとめたいと思います。
Makefileを使わない場合の起動手順
1. コマンドからJupyter Notebookをアクセスする為のトークンを取得する
$ docker exec -it jupyter jupyter server list --jsonlist
[
{
"token": "549c294996a89dd9661a6a9111ddedd98e7881c987cc7b63",
}
]
※ 利用するもの以外は省略しています
2. 上記のtokenとDockerで指定したポート番号にURLを組み立ててアクセスする
http://localhost:10000?token=549c294996a89dd9661a6a9111ddedd98e7881c987cc7b63
にブラウザでアクセスする
上記の手順が必要な環境を作成したのですが、半年後には間違いなく手順を忘れています。
あとPC開いてから毎回上記のコマンドを入力するのは大変めんどくさいです。
Makefileを使って簡略化する
手動での手順をMakefileに記載します。
# Makefile
token = $(shell docker exec -it jupyter jupyter server list --jsonlist | jq -r '.[].token')
url = "http://localhost:10000?token=$(token)"
browse:
open -a '/Applications/Google Chrome.app' $(url)
作成したコマンドを呼び出します。
$ make browse
ちなみにこのレポジトリでJupyterを起動するコマンドは下記だけなので、数年後でもどうにかなりそうですね。
$ make build # ビルド
$ make up # コンテナ立ち上げ
$ make browse # ブラウザでアクセス
まとめ
以上、Makefileで半年後に忘れそうなコマンドを簡略化する方法でした。
忘れがちな私にとっては素晴らしいツールですね、これで数年後もレポジトリを動かすことができそうです。
まだまだmakefileには便利な機能があるっぽいので、もっと使ってみたいですね〜✨