streampack の Tana です。
アプリケーションが増え、マイクロサービス化されてくると、
アプリケーション固有なコマンドや環境によってそれぞれ実行方法が異なります。
また、何回もコマンドを叩かないといけないケースだとハードルが上がりますし、
コマンドを忘れたりもして悩ましい時がたまにあります。
- セットアップ・インストール
- アプリ起動
- コンパイル
- リリース(デプロイ)
上記の振る舞いを Makefile を使って共通化する方法です。
Makefile といえば、以前は C++ とかのコンパイルとかに
よく使われていたかと思いますが、コマンドの統一化などには便利です。
例えば、Rails と Golang のアプリケーションがあったとします。
それぞれの Makefile を準備します。
Makefile(Rails用)
help: ## Usage @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) install: ## install gems bundle install db: ## database create & migrate rails db:create rails db:migrate rails db:seed run: ## start the app rails server build: ## build image docker build push: ## push to somewhere docker push xxx release: build push ## build&pushしてリリース
Makefile(Golang用)
help: ## Usage @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) install: ## install packages go get github.com/golang/xxx run: ## start the app go run main.go build: ## build image docker build push: ## push to somewhere docker push xxx release: build push ## build&pushしてリリース
あとは、make help でコマンドを確認して、叩くだけです。
help Usage install install packages run start the app build build image release push to somewhere
install したければ、
$ make install
リリースしたければ、
$ make release
コマンドを統一することにより
誰もが同じコマンドを叩くことによって
環境を構築したり、起動したり、リリースすることも可能です。
README.md の手順もシンプルになります。
$ make all で全てできればクールですね。
もっと汎用的に docker関連でいろんなことをやりたいのであれば、
こちらが便利なので、参考にしてみてください。
https://gist.github.com/mpneuried/0594963ad38e68917ef189b4e6a269db
ではでは。