deploymentとCIに関する個人的思想.md

H1rono_K
·

「GitHub Actions意味ないでしょ」って言説を目にして、それに対してdeploymentを舐めるなという意思のもとにポエムを書いたので供養

---

そもそもdeploymentとは「目的のプログラムが目的の計算機で動くようにすること」であり、それはOSの有無なんぞで変わる問題ではない。deploymentは本が一冊書ける、それ専用のツールがある程度に奥が深くて立ち向かうべき問題が多い:

- CPUアーキテクチャ(およびOS)がプログラムの意図するものと合致しているか

- プログラムの実行ファイルひとつだけで動かない場合、要求されるものは準備できているか

- 環境変数

- 動的ライブラリ

- 参照するファイル

- インターネット接続

- GPIOの接続

- 並行して動作するプログラムの実行状態

こういうやつを全て依存関係と呼ぶけど、これらが全て揃わないとdeploymentが成功することはない、成功したとしても実行時にバグが生まれる。対象のプログラムだけではなく依存関係にももちろんバージョンがあるのでそれらが違ってもいけない。

また、OS, およびその上で動作する依存プログラム、依存ファイルの状態は時間、コンピューターによって変わる。これらを踏まえた上で、deploymentには再現性を持たせる必要がある。GitHub Actionsは再現性を担保するためのあくまで一環に過ぎず、GHAが動作しても気休め程度の再現性しか保証できないことも多い。

---

というようにdeploymentだけでも多様な問題があるにも関わらず、現実はさらにより多くのことを要求してくる:

- バグが起こらないこと

- 複数人で齟齬なく開発ができること

- 後方互換性を維持すること

- ...

無限の問題が存在するdeploymentおよびその他諸問題に対応する武器の一つがGHA(一般にCI)であり、それを侮ることは†エンジニア†の風上にもおけない。まる

---

以上、しがない大学生の主張でした