エピローグ — 技術の進歩は振り子ではなく、螺旋である
技術の歴史は、往復して見える。メインフレームとタイムシェアリングに集中した計算は、ARPANET のパケット交換で分散した。商用 RDBMS と DBA に集中したデータは、PC で手元に分散した。DNS は階層委任で分散しながらルートは13台に集中し、2002年以降は anycast でその13台が数百の実体に分散した。Web はサーバーへ集め、P2P と CDN は端へ散らし、クラウドは計算を再び集め、エッジはまた散らす。そしてアーキテクチャも同じ拍子で揺れる。モノリス → SOA → マイクロサービス → モジュラーモノリス。
これを「流行の振り子」と呼ぶのは簡単だ。しかしその見方は、横軸しか見ていない。
横軸だけを見れば、これは振り子だ。高さと円の広さを見れば、同じ側に戻った点は一つも同じ場所にない。
往復のたびに、何かが蓄積している。ARPANET が残したプロトコルの上に Web が集中し、Web が残した HTTP の上に P2P と CDN が分散し、それらが残した運用の知見の上にクラウドが集中し、クラウドが残したコンテナと IaC の上にエッジが分散した。往復の方向は交互だが、道具の蓄積は一方向だ。 振り子は同じ弧を往復するが、螺旋は一周ごとに高度が上がる。その高度が、この文書のテーゼでいう「機械が守る範囲」である。
同じ側に戻っても、同じ場所ではない
Section titled “同じ側に戻っても、同じ場所ではない”アーキテクチャの一周で確かめる。2004年のモノリスと2024年のモジュラーモノリスは、円錐の同じ側(集中)にある。だが中身は違う。
| 2004年のモノリス | 2024年のモジュラーモノリス | |
|---|---|---|
| モジュールの境界 | ディレクトリとレビューと人の記憶 | モジュールグラフ、依存の宣言、CI の赤 |
| データの境界 | どのモデルもどのテーブルも触れる | GRANT で自分のスキーマしか見えない |
| 契約 | クラスを直接 import | 生成された client とスキーマ |
| デプロイ | 列車、操作1つ | 毎日、操作2つ(デプロイとリリース) |
| スキーマ変更 | 深夜の祈り | 互換性の窓の設計 |
| 守る主体 | 人 | 機械 |
同じ場所に戻ったのではない。境界を機械に守らせる道具を獲得した上で、太い粒度を選び直したのだ。間にあった第3部と第4部 — 分散モノリスの授業料、適応度関数、2つの操作、エラーバジェット — がなければ、2024年のモノリスは2004年のモノリスと同じものになっていた。
SOA の思想も同じだ。2004年の SOA は ESB と WSDL で実装され、ベンダーの匠になった。2024年のモジュラーモノリスは、同じテネットをパッケージ境界と GRANT で実装する。思想は同じで、実装の層が一つ下に降りた。集中と分散のどちらを選んだかより、その選択を人が守るのか機械が守るのかの方が、システムの寿命を決める。
4本の線の起点と現在
Section titled “4本の線の起点と現在”4本の線と契約記述の線を貫いて、進行方向は一度も変わっていない。
| 線 | 起点 | 寄り道 | 現在 |
|---|---|---|---|
| 言語 | 規約を人が守る(AR、動的) | 漸進的型付け | 構造が機械を縛る(型、生成) |
| データ | スキーマ変更=深夜の祈り | スキーマレスの寄り道 | 互換性の窓の設計(expand/contract) |
| アーキテクチャ | 境界=文書とレビュー | 分散オブジェクト、ESB、分散モノリス | 境界=コンパイル・GRANT・ルートの不在 |
| 組織 | 統制=申請書(CAB) | 文化を変えよう(DevOps) | 統制=apply 順序とゲート、判断=数値契約 |
| 契約記述 | 契約はドキュメント | XML で宣言 → JSON で諦める | 実行されている定義から生成 |
「寄り道」の列が、この文書で授業料と呼んだものである。寄り道は無駄ではなかった。分散オブジェクトの失敗がなければ SOA のテネットは書かれず、NoSQL の失敗がなければスキーマの価値は言語化されず、分散モノリスがなければ3軸の分離は見つからなかった。螺旋の高度は、寄り道の代金で買われている。
各時代の概念が傷の圧縮であるなら、この文書は傷の相続書である。
- expand/contract を「面倒な手順」と感じたら、第2部の深夜メンテナンスを思い出す
- 3分岐の質問表を「大げさ」と感じたら、第3部の分散モノリスと、第1部の分散オブジェクトを思い出す
- 生成された client しか共有しないことを「回りくどい」と感じたら、Don Box のテネット3と、それを破った ESB を思い出す
- SPACE の多次元を「回りくどい」と感じたら、単一指標がゲーム化した組織を思い出す
- OpenAPI からの生成を「大層」と感じたら、MDA の図とコードの乖離と、JSON 時代の「ドキュメントと実装のズレ」を思い出す
規約の一行一行に、それが無かった時代の夜がある。
移住者としての我々
Section titled “移住者としての我々”最後に、我々自身の位置について。ActiveRecord のモノリスから Go のサービス群への移行は、この文書の言葉で言えば第2部から第5部への移住である。途中の第3部と第4部を、我々は住まずに通過する。それは幸運であり、同時に危険である。幸運なのは、授業料を払わずに領収書だけを受け取れるから。危険なのは、授業料を払っていない人は領収書の重みを感じないからだ。第3部を読まずにサービスを割ると、分散モノリスを作る。螺旋を一周飛ばすと、飛ばした周の高度は手に入らない。
移住者は特別な世代だ。両方の時代を生きて知る唯一の世代であり、第2部の構成が「当時の最適解だった」ことへの敬意と、第5部の道具で境界を引き直す責任の、両方を持っている。afterSave の中に何が埋まっているかを読めるのは、それを書いた時代を知っている人だけだ。この文書は、その記憶が人に宿ったまま失われないよう、構造に変換する試みのひとつである。
歴史は繰り返さないが、韻を踏む。次の一周 — おそらく AI エージェントが主要な書き手になる周回 — でも、集中と分散はまた揺れるだろう。そして進行方向は同じはずだ。破られたら困るものは、破る操作が存在しない形にする。60年前、Conway と Parnas と Codd が同時に見つけた真理は、書き手が誰であっても変わらない。