「docker-composeで開発して結局本番環境なし」みたいなことが続いたので流石にそれは卒業しようと思い、作って書いてみました。
モバイル系はあんまり参考にならないと思います。
目標
- 開発環境どまりをやめる
基礎の基礎
自作アプリケーションを動かすには
- (ビルド)
- インストール
- 実行に必要なファイルの配置(assets等)
をする必要がある。
※ ビルド不要な場合はインストール(配置)のみ
よくあるパターン
tingtt/prometheus_sh_exporter
自分のリポジトリだけど、よく見るパターンを真似して作ってみました。
Makefileではインストールの処理が書いてあり、使いたい人は、
- リリースページから使いたいOSやCPUアーキテクチャに当てはまるファイルをダウンロードし、解凍
-
make installコマンドの実行
だけでインストールできます。
(windowsの場合はexeファイルを実行するだけ)
基礎
Makefile
C言語だけの話ではない。
シェルスクリプト(コマンド)を書いておいて簡単に呼び出せるようにできる。
言語・フレームワークに関わらず
- lint(コードの質チェック)
- ビルド
- テスト
- インストール
- アンインストール
等のスクリプトが必要になってくると思います。
これらの処理をMakefileに書いておくことで、「実行する前にビルドが必要」などのコマンド同士の依存関係や複数のコマンドを実行しないといけない場合のコマンドの簡素化などができます。
(Makefileに書いた処理はmakeコマンドで呼び出せます。)
※ linuxの場合、systemdのサービスとしてインストールできるようにしておくと実用的かと
おすすめ記事:Makefile ことはじめ
あとはオープンソースのリポジトリのMakefileを覗いてみるのもいいですよ!
※ 複雑なものは絶望したので自分はそっと目をつむりました。
Dockerfile(dockerの場合)
本番環境もコンテナを利用する場合(K8sなど)はMakefileは無しで、Dockerfileにビルドとインストールの処理を書くだけでも良いと思う。(得意な方で書きましょ)
そのDockerfileからイメージを作成し、DockerHubなどのレジストリに置いたり使ったり。
本番環境がコンテナではないが、テスト環境・開発環境用にdockerを使いたい場合はMakefileも用意して、Dockerfile内でmakeコマンドを実行するように作成すれば良いと思います。(本番環境ではmakeコマンドでインストール)
自動化(簡単)
簡単です。(Makefileに必要な処理をたくさん書けば) ![]()
GitHub ActionsやGitLab CI/CDでmakeコマンドを活用することで、.github/workflow/*.yml, .gitlab-ci.ymlを書くのも楽になるよ!
自分の場合同じプロジェクトでGitHub Actions、GitLab CI/CDを両方同時に使うことが多いのでMakefileを頑張って書いてmakeコマンドだけでいろいろできるようにしてます。
例に上げたリポジトリではGitHubのリリースに置くアーカイブの作成もMakefileに処理を書いています。
こんどこれについてもう1つ書くつもり
書きました。 Goのリリースアセットの配置を自動化したい