「GitHub Actions意味ないでしょ」って言説を目にして、それに対してdeploymentを舐めるなという意思のもとにポエムを書いたので供養
---
そもそもdeploymentとは「目的のプログラムが目的の計算機で動くようにすること」であり、それはOSの有無なんぞで変わる問題ではない。deploymentは本が一冊書ける、それ専用のツールがある程度に奥が深くて立ち向かうべき問題が多い:
- CPUアーキテクチャ(およびOS)がプログラムの意図するものと合致しているか
- プログラムの実行ファイルひとつだけで動かない場合、要求されるものは準備できているか
- 環境変数
- 動的ライブラリ
- 参照するファイル
- インターネット接続
- GPIOの接続
- 並行して動作するプログラムの実行状態
こういうやつを全て依存関係と呼ぶけど、これらが全て揃わないとdeploymentが成功することはない、成功したとしても実行時にバグが生まれる。対象のプログラムだけではなく依存関係にももちろんバージョンがあるのでそれらが違ってもいけない。
また、OS, およびその上で動作する依存プログラム、依存ファイルの状態は時間、コンピューターによって変わる。これらを踏まえた上で、deploymentには再現性を持たせる必要がある。GitHub Actionsは再現性を担保するためのあくまで一環に過ぎず、GHAが動作しても気休め程度の再現性しか保証できないことも多い。
---
というようにdeploymentだけでも多様な問題があるにも関わらず、現実はさらにより多くのことを要求してくる:
- バグが起こらないこと
- 複数人で齟齬なく開発ができること
- 後方互換性を維持すること
- ...
無限の問題が存在するdeploymentおよびその他諸問題に対応する武器の一つがGHA(一般にCI)であり、それを侮ることは†エンジニア†の風上にもおけない。まる
---
以上、しがない大学生の主張でした