LoginSignup
2
4

More than 1 year has passed since last update.

コマンドが覚えられないので、Makefileを使って簡略化する

Posted at

はじめに

たまにしか触らないレポジトリを開いた際に、下記のような問題を抱えているのは私だけでしょうか。

  • 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

一発で開くようになりました。快適じゃぁあああ
test.gif

ちなみにこのレポジトリでJupyterを起動するコマンドは下記だけなので、数年後でもどうにかなりそうですね。

$ make build # ビルド
$ make up # コンテナ立ち上げ
$ make browse # ブラウザでアクセス

まとめ

以上、Makefileで半年後に忘れそうなコマンドを簡略化する方法でした。
忘れがちな私にとっては素晴らしいツールですね、これで数年後もレポジトリを動かすことができそうです。

まだまだmakefileには便利な機能があるっぽいので、もっと使ってみたいですね〜✨

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4