概要
7月18日に July Tech Festa 2021 が開催されて『よみがえるMakefile』 というタイトルで15:20 から登壇した。今さら聞けないIT技術 というお題だったので今さら聞けないけど… みたいなものが議論の種になればとお題をMakefileに決めました。 docs.google.com
connpass はこちら techfesta.connpass.com
文章として大きく離散してるので雑多なまとめになります。
タイムアポン
完全に終わっていて一連のスライドからGo言語のMakefileを育てていくエピソードを登壇資料から抹消した。 正直、資料の中にあったものをシュッとMakefileに落とし込むだけなので特定の言語やツールに依存するかな?と思って排除してしまいました。
何故か、40分だと思ってたので20分資料に再編集した。
— nwiizo (@nwiizo) 2021年7月18日
資料は、
『よみがえるMakefile』 という完全にタイトルで勝ちが確定しているタイトルで発表しました。個人的にはMakefile はCI/CD時代においても最強の可搬性を持つ汎用有能ツールであると思っており、Go言語の利用が広がると共に復活したのかな〜って思うなどしてます。
ふとした、下書き
社内での発表の公開用、かつ発表しながらだったので文章としてどこか雑。
インフラエンジニアの作業環境はカオス
インフラエンジニアの作業環境はカオスである場合が多い。そのような環境に対応する場合にいくつかのツールが存在する
- 雑な環境を構築するときには自作Shellを整備する ShellScriptで環境構築を自動化 - Qiita
- 冪等な環境構築を行うときにはAnsible
- クラウドに環境を構築するときにはTerraform
- VMを提供するときにはVagrant
- コンテナで実施する時はDocker
上記のような様々なツールを使うことが多い。上記のツールは環境を構築できるがこれら自体を開発していく上での知見はリポジトリには溜まってなかったりする(どのリンターを使うか?確認方法についてなど)。
実際に開発や運用の作業する時には、環境構築だけではないやろ。普通に考えて!
運用や開発で得たいくつかのTipsを知見として保存及び継承するために選べる手段として1番最初にパッと出来てしまうのが自作のシェルスクリプトである。自作のシェルスクリプトは応用が効いくが具体的に何をするか一つ目の引数が何で二つ目はあれでみたいな感じで総じて不明瞭であり、それらは把握、保守する人間が必要で、自作のシェルスクリプトはよく古のオーパーツとして発掘されてしまう場合が多い。アーメン🙏🙏🙏
Makefile を使う理由としては開発には様々な理由がある。ビルドオプションを指定するのに都合がよく、バージョン情報などを埋め込んだりしやすい。事前にコードジェネレータで書き出す部分がある時はそれらに伴ったコマンドを補完できる。また、特殊に凝ったことも出来ないので古のオーパーツに比べて読める気がする
特にGo言語でプロダクトを作る時、Makefile を使ってビルドやツールを指定することが多いです(軽量プログラミング言語では使う機会がグッと少なかった。 )
Makefileはたまごっちほど容易く死ぬ。その中でMakefile を育てていけると良い、現場の人が永遠に居てくれていつでも対応できるのがいいけど余裕が無かったり、秘伝のタレ化されてて言語化が難しかったりみたいな事態は発生するよなーって思うなどしてます。この辺の知見の中心になれる会社やエンジニアになりてぇ
良い資料たち
GNU Make 第3版 日本語書籍としてGNU Make 第3版が存在している 正直、文法や意味はこれが最強。アンチパターンについてなど全面同意なので読んで!無料だし!オライリーは最強の書籍ですがそれらをはじめる動機にはなりにくいのかな?って思ってるので俺の登壇にも意味があったはず!
kubebuilder で用いられるMakefileは参考になるのでK8sを開発で利用するエンジニアは参考になるのでぜひ!
- Learning Go
- Go で使う Makefile の育て方
- Go generate
最後に
このブログを共有しながらGistでも貼ってくれた方のものに関しては全て転記しようと思うので皆様何卒よろしくお願いします!
個人的に今回の登壇は面白かった。要員としては登壇後の懇親会の gather.town でのフィードバックやごちゃごちゃ感、視聴されてる時の一体感があったような気がします。これらはひとえに運営様の努力だと思いました。