目次を表示する

コードの考古学 ── 設計思想に宿る哲学の源流

エピローグ ── 問いの形は再利用される

振り返り ── 10の系譜

10話を歩いた。アテネの港でテセウスが船を残し、ウィトゲンシュタインがケンブリッジで建設現場を想像し、パチョーリがヴェネツィアで帳簿を書き起こした。ラッセルは1901年の夜にフレーゲ宛の手紙を書き、ゲーデルは1930年のケーニヒスベルクで会場の隅から発言し、偽ディオニュシオスは5世紀のアレクサンドリアで神を否定によって描こうとした。プラトンは洞窟の影を語り、ヘラクレイトスは川を眺め、ウィリアム・オブ・オッカムはエンティティを切り、カントは認識の中心を主体側へ移した。

これらの問いは、いつかの誰かが解いて終わったわけではない。形を変えて、コードの中で今も動き続けている。

mindmap
  root((CS概念に\n宿る哲学))
    DDD
      第1話 テセウス → Entity
      第2話 ウィトゲンシュタイン → Bounded Context
      第3話 パチョーリ → Event Sourcing
    型と限界
      第4話 ラッセル → 型システム
      第5話 ゲーデル → CAP定理
      第6話 否定神学 → テスト
    抽象と方向
      第7話 プラトン → インターフェース
      第10話 カント → DIP・TDD
    時間と量
      第8話 ヘラクレイトス → 不変性
      第9話 オッカム → YAGNI

哲学から CS への 4 つの継承パターン

10の系譜を並べてみると、「哲学からCSへの翻訳」にはいくつかの異なる形があることが見えてくる。

パターン1:直接的な継承(Direct Lineage)

歴史的に明確な引用と継承の連鎖がある場合。

  • 第4話: ラッセルのパラドックス(1901)→ ラッセルの型理論(1908)→ チャーチの単純型付きラムダ計算(1940)→ Hindley-Milner 型推論(1969・1978)→ Haskell・ML・TypeScript・Rust
  • 第3話: パチョーリ『算術全書』(1494)→ 商人の慣行 → ファウラー「Event Sourcing」(2005)→ グレッグ・ヤングの形式化(2010頃)

このパターンの特徴:論文や書籍の引用関係で系譜を辿れる。CSの中で「これは何々の応用です」と明示的に語られることが多い。

パターン2:構造的並行(Structural Parallel)

直接の引用関係はないが、同じ問題が別の文脈で再発見されている場合。

  • 第1話: テセウスの船(古代ギリシャ)≈ Entity vs Value Object(DDD 2003)。エヴァンスはホッブズもプルタルコスも引用していない。
  • 第8話: ヘラクレイトスの川(紀元前6世紀)≈ イミュータブル設計。Rich Hickey は Clojure の哲学を語るときヘラクレイトスに触れたが、設計上の発想は独立に到達している。

このパターンの特徴:同じ問いの形が、別の文脈で別の人によって、同じ答えに辿り着く。問いの形そのものが普遍的だから起きる。

パターン3:方法論の転用(Methodological Transfer)

哲学・神学の方法論が、別領域に意図的に持ち込まれた場合。

  • 第6話: 否定神学(5世紀〜)→ ポパーの反証可能性(1934)→ プロパティベーステスト(1999)。「何でないかを語る」という方法そのものが工具として継承されている。
  • 第9話: オッカムの剃刀(14世紀)→ Unix 哲学(1970年代)→ KISS(1960年代)→ YAGNI(XP, 1999)。「必要以上のエンティティを増やすな」という認識論的節度が、エンジニアリング上の節度に転用されている。

このパターンの特徴:哲学が提示したのは方法であって、その方法は領域を選ばない。神学にも、科学にも、コードにも適用できる。

パターン4:哲学的転倒(Philosophical Inversion)

「方向」や「中心」を入れ替える発想自体が、設計に持ち込まれた場合。

  • 第7話・第10話: プラトンのイデア論(具体は抽象に従う)+ カントのコペルニクス的転回(対象は心に従う)→ 依存性逆転原則・TDD・ヘキサゴナルアーキテクチャ。設計の依存関係そのものを「逆向き」にする発想が、哲学から借りられている。

このパターンの特徴:哲学者が 何を中心に置くか を問い直したのと同じ問いを、設計者が 何が何に従うか として問い直す。問いの構造が転用されている。


まだ翻訳されていない哲学

10話を書き終えてもなお、CS に持ち込まれていない哲学的アイディアは多い。最後に、いくつか候補を残しておく。読者が次に「考古学」を始める起点になればいい。

物語論(Narratology)→ ユーザーフローの形式文法

ロシアの民俗学者 Vladimir Propp は1928年、民話の構造を「31の機能」と「7つの登場人物類型」に分解した。「主人公が欠乏を感じる」「助力者が現れる」「試練を経て解決する」。ユーザージャーニーマップが暗黙にやっていることを、形式文法として記述できる可能性がある。

ストア哲学の制御二分法 → 境界設計

「自分でコントロールできるものとできないものを分けよ」(マルクス・アウレリウス)。外部依存を「コントロール不能領域」として明示的に境界を引く設計哲学。Hexagonal Architecture が部分的に実践しているが、ストア的な枠組みとしては未整理。

修辞学(Rhetoric)→ AI 説明設計

アリストテレスの三要素(ロゴス:論理、エトス:信頼性、パトス:感情)。LLM がユーザーに何かを説明するとき、この三要素のバランスはほとんど無自覚に処理されている。Explainable AI の研究はあるが、修辞学の文脈での体系化は未整備。

パース記号論 → 型システム・プロトコル設計

二項モデル(記号と意味)ではなく三項モデル(記号・対象・解釈項)。型システムやプロトコル設計が「解釈項」を欠いていないか、という問いの起点になりうる。

複式簿記の保存則 → 権限管理の二重仕訳

第3話で取り上げた複式簿記の核心は「すべての取引には貸借両側の対応がある」という保存則だ。これを権限管理に適用できないか。権限の付与は常に「責任の付与」と対応していないか——監査ログを 借方/貸方の二重仕訳 として設計すれば、Confused Deputy Problem は「不正な転記」として検出可能になる。


一つの原則 ── 問いの形は再利用される

10話と4パターンが示しているのは、ひとつの単純な事実だ。

哲学・歴史・神学が解いてきた「問いの形」は普遍的で、新しい技術環境でも再現する。

人間が時間を扱うかぎり、ヘラクレイトスの川は必ず流れる。人間が同一性を扱うかぎり、テセウスの船は必ず板を取り換える。人間が形式体系を扱うかぎり、ラッセルの亀裂は必ず開く。これらは技術が変わっても消えない。技術はむしろ、これらの問いを 新しい場所で再現する装置 だ。

だから、設計で行き詰まったとき問うべきは「この問題を解いた人がもうどこかにいるんじゃないか」だ。たいていの場合、答えは「いる」だ。それは別の世紀の、別の言語を話す、別の問いの形をした人かもしれない——しかし、彼らが残した「問いの立て方」は、あなたの目の前のコードに翻訳できる。

考古学とは、そういう翻訳の作法だ。


参考文献・情報源

原典・思想史

  • Plutarch, Vita Thesei (テセウスの伝記、紀元1世紀末)
  • Heraclitus, Fragments (ディオゲネス・ラエルティオス『哲学者列伝』に収録、断片91)
  • Plato, Republic (Book VII:洞窟の比喩) / Meno (アナムネーシス)
  • Pseudo-Dionysius the Areopagite, Mystical Theology (5〜6世紀)
  • Luca Pacioli, Summa de arithmetica, geometria, proportioni et proportionalità (Venice, 1494)
  • William of Ockham, Summa Logicae (14世紀)
  • Thomas Hobbes, De Corpore (1655、テセウスの船への二隻問題の追加)
  • Immanuel Kant, Kritik der reinen Vernunft (Königsberg, 1781)
  • Bertrand Russell, “Letter to Frege” (1902年6月16日付)
  • Bertrand Russell, “Mathematical Logic as Based on the Theory of Types” (1908)
  • Kurt Gödel, “Über formal unentscheidbare Sätze…” (Monatshefte für Mathematik, 1931)
  • Alan Turing, “On Computable Numbers…” (Proc. London Math. Soc., 1936)
  • Karl Popper, Logik der Forschung (1934)
  • Ludwig Wittgenstein, Philosophische Untersuchungen (1953, 死後出版)

CS 側の文献

  • Eric Evans, Domain-Driven Design (Addison-Wesley, 2003)
  • Erich Gamma et al., Design Patterns (Addison-Wesley, 1994)
  • Robert C. Martin, “The Dependency Inversion Principle” (C++ Report, 1996)
  • Alistair Cockburn, “Hexagonal Architecture” (2005)
  • Martin Fowler, “Event Sourcing” (martinfowler.com, 2005)
  • Greg Young, CQRS Documents (2010前後)
  • Kent Beck, Test-Driven Development By Example (Addison-Wesley, 2002)
  • Kent Beck, Extreme Programming Explained (Addison-Wesley, 1999)
  • Koen Claessen and John Hughes, “QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs” (ICFP, 2000)
  • Tim Peters, “PEP 20 — The Zen of Python” (1999執筆 / 2004公式化)
  • Eric Brewer, “Towards Robust Distributed Systems” (PODC keynote, 2000)
  • Seth Gilbert and Nancy Lynch, “Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services” (ACM SIGACT News, 2002)
  • Rich Hickey, “Are We There Yet?” (JVM Languages Summit, 2009) — Clojure の時間と状態の哲学

関連する記事・シリーズ


最後の問い:あなたが次にコードで解こうとしている問題には、何百年も前にすでに名前が付いていないか。