はじめに
2022年からのWebエンジニアをしているえいちゃもです。
現在は自社開発企業でエンジニアとして勤めています。
今回は業務をしていく上で便利だったMakeファイル
を紹介しようと思います。
Makeファイル
は私がはじめてアサインされたプロジェクトで使われているのを見かけ、それをきっかけにどのプロジェクトでも使っています。
この記事を見てまだ使ったことない人は便利なのでぜひ使ってみて欲しいです。また、リポジトリにまだないって人はぜひチームメンバーを巻き込んで提案してみてください。
Makeファイルとは
Makeファイル
とは、ビルドプロセスを自動化するための設定ファイルです。
MacやLinuxではGNU Make
が標準でインストールされているのですが、Windowsではされていないので、choco install make
などでインストールすることで使用することができます。
ディレクトリ直下にMakefile
というファイルを作成することで使用することができます。
Makefileを使うメリット
いろんなメリットはあると思うのですが、初学者にとってのメリットを紹介します。
1. コマンドの簡略化
長くて覚えにくいコマンドって多いですよね。
そんな時にMakeコマンド
を使ってください。
Makeコマンドを作る際に勉強にもなるので自作することをおすすめします。
私は特にDockerコマンドを簡略化するために使ってます。
例)コンテナ内でのコマンド実行したい時に使うコマンド
通常
$ docker compose exec #{container} ${command}
Makeコマンドを実行する場合
$ make up
Makefileでどのように記述するか
.PHONY: up
up:
docker compose --profile all up
2. 複数のコマンドを同時に実行できる
セットで使うコマンド多くて大変ですよね。
そんな時にMakeコマンド
を使ってください。
環境構築のドキュメントを作る時やチームメンバーにこのコマンド実行しといてください
など伝える時に便利です。
Railsを使っております
例)初回のデータベースを作成、更新などをしたい時に使うコマンド
通常
$ docker-compose exec #{container} bin/rails db:create
$ docker-compose exec #{container} bin/rails db:migrate
$ docker-compose exec #{container} bin/rails db:seed
Makeコマンドを実行する場合
$ make db
Makefileでどのように記述するか
.PHONY: db
db:
docker-compose exec web bin/rails db:create
docker-compose exec web bin/rails ridgepole:apply
docker-compose exec web bin/rails db:seed
3. コマンドの辞書として使うことができる
コマンドを忘れた時ってGoogle検索かChatGPTなどに聞かないといけなくてめんどくさいですよね。
そんな時にMakeコマンド
を使ってください。
実際に私が業務で使用しているMakefile
を載せておきます。(Rails)
.PHONY: up ps app migrate seed console routes rubocop rspec db sql redis remove-all-containers
install:
docker network create fs-network
docker compose run --rm frontend yarn
docker compose --profile all up -d
docker-compose exec web bin/rails db:create
docker-compose exec web bin/rails ridgepole:apply
docker-compose exec web bin/rails db:seed
docker-compose exec web bin/rails ridgepole:apply RAILS_ENV=test
docker-compose exec web bin/rails db:seed RAILS_ENV=test
up:
docker compose --profile all up
ps:
docker compose ps
app:
docker compose exec web /bin/sh
ridgepole:
docker compose exec web bin/rails db:ridgepole
seed:
docker compose exec web bin/rails db:seed
console:
docker compose exec web bin/rails console
routes:
docker compose exec web bin/rails routes
rubocop:
docker compose exec web rubocop
rspec:
docker compose exec web bin/rspec
db:
docker compose exec mysql /bin/sh
sql:
docker compose exec mysql /bin/sh -c 'mysql -u $$MYSQL_USER -p$$MYSQL_ROOT_PASSWORD $$MYSQL_DATABASE'
create-dump-%:
# ex: make create-dump-20201231
docker compose exec mysql bash -c 'mysqldump -u $$MYSQL_USER -p$$MYSQL_ROOT_PASSWORD $$MYSQL_DATABASE' > "${@:create-dump-%=%}_dump.sql"
redis:
docker compose exec redis redis-cli
remove-all-containers:
docker rm $$(docker ps -aq)
task-%:
docker compose exec web bin/rails ${@:task-%=%}
おわりに
Makeファイル
を一通り説明したのですが、いかがだったでしょうか?
使ってみると恩恵がわかるので、まずは触ってみて使用感を確かめてみてください。