「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のリリースアセットの配置を自動化したい