Go開発者への道 第3回 Makefileについて

GOコラム

Go初心者向けに始めた記事の第3回になります。
今回はMakefileについて解説します。直接Goとは関係ないのですが、Goの開発を進める上で必要になるので解説していきます。
この記事は、Go初学者向けにGoを本格的に使えるようになることをコンセプトに書いております。私はGoを仕事で2年半経験しておりまして、そこで学んだ知識を少しでも読者に提供できたらと思っております。

Makefileとは

プロダクト開発において、コードの自動生成、テスト実行、コードのビルド・デプロイなどで色んなコマンドを実行する中で、全てのコマンドを覚えるのが大変です。そのためにMakfileがありまして、Makefileに実行するコマンドを定義して、定義されたタスクはmakeコマンドで実行します。

Makefileの書き方

例として、「docker-compose up -d」をMakefileに定義してみます。
こうすることで、毎回コンテナ立ち上げる時にコマンドを思い出して実行する必要なく、「make containers-up」で実行できるようになります。

Makefile

.PHONY: containers-up
containers-up:
	docker-compose up -d

補足として、「.PHONY: containers-up」は何を意味しているかと言いますと、.PHONYをつけることで、現在のディレクトリにコマンド名と同じファイルがあっても、コマンドを実行できるようになります。containers-upというファイルがある場合に、「make containers-up」を実行するとコマンド実行に失敗します。

go-column % ls -l containers-up
-rw-r--r--  1 sanadayouhei  staff  0  5 14 21:52 containers-up
go-column % make containers-up
make: `containers-up' is up to date.

go-columnのリポジトリにMakefileを作成

今後の作業のためにgo-columnのリポジトリにもMakefileを作成していきます。
ここでgo-column配下にはコンテナ操作用のMakefile、src配下にはソースのビルドやテスト用と別々に、Makefileを作成していきます。
分ける理由として、docker上でsrc配下だけをマウントするためです。

./Makefile

コンテナの起動/終了を定義

.PHONY: containers-up
containers-up:
	docker-compose up -d

.PHONY: containers-down
containers-down:
	docker-compose down

src/Makefile

goのbuildを定義

.PHONY: build
build:
	go build .

最終的には以下のリポジトリのようになります

GitHub - SND1231/go-column at go-column-3
Go コラムのサンプルコードをこちらに残す. Contribute to SND1231/go-column development by creating an account on GitHub.

まとめ

今回はコマンドを定義するMakefileについて解説してきました。
次回はcobraというCLIフレームワークについて解説をしていますので、興味あればぜひ読んでください。
「Go開発者への道」の記事以外にもGoについて書いた記事がございますので、もし興味がありましたら、おすすめ記事も見てもらえたらと思います。

【次の記事】

【おすすめ記事のリンク】

コメント

タイトルとURLをコピーしました

Fatal error: Uncaught JSMin_UnterminatedStringException: JSMin: Unterminated String at byte 792: "Goの開発をする際に、ビルドやテストなど色々なコマンドを使って開発をしていくのですが、すべてのコマンドを覚えるのは大変です。 in /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:214 Stack trace: #0 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action(1) #1 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(257): JSMin::minify('{"@context":"ht...') #3 [internal function]: AO_Minify_HTML->_removeScriptCB(Array) #4 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/ao-m in /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 214