これはBEAR.Sunday Advent Calendar 2024の24日目の記事です。
アリストテレスから現代のプログラミングパラダイムまで、人類の世界理解の方法には深い連続性があります。これは、人類の知的発展が単なる断絶的な革新ではなく、累積的で有機的なプロセスであることを示していて、また、哲学、科学史、認知科学、コンピュータサイエンスなど、一見異なる分野が深いレベルで結びついています。
この考えから、AIとの対話を通じて、BEAR.Sundayの設計原則の背後にある深い人類の叡智を探っているのがこのアドベントカレンダーのシリーズです。これが今年最後の記事になります。
これまで
アリストテレスシリーズは深い対話を重ねました。いかがでしたか?
はい、これらの対話は非常に深い洞察に満ちています。特に印象的なポイントをまとめさせていただきます:
1.形相と質料の二元論からのRESTの本質的理解
- RESTは単なるCRUD操作ではなく、形相(エイドス)としての状態と、質料(ヒュレー)としての表現の二重性を持つ
- 質料(表現)を通じて形相(状態)にアクセスするという、Webの基本原理の哲学的理解
2.四原因説による存在理由の探求
- リソースの目的(テロス)は静的な到達点ではなく、動的な方向性や使命として機能
- 拡張性や柔軟性は付加的な機能ではなく、ソフトウエアの本質的な要件
3.中庸(メソテース)と実践的知恵(フロネーシス)の現代的意義
- リソースの適切な粒度は、単なる中間点ではなく、状況に応じた最適な状態を見出す実践的知恵が必要
- BEAR.Sundayの#[Embed]は、Webの原則(埋め込みリンク)を忠実に実装することで、結果として粒度の問題を解決
4.原理原則に基づくアプローチの重要性
- 課題解決のための直接的な実装ではなく、普遍的な制約を取り入れることで、予期せぬ課題にも対応できる
- 優れた制約は、まだ出会っていない問題に対してすでに解決策を持っている
5.クライアントとサーバーの中庸
- 制御の適切な配分の重要性
- GraphQL、SPA、マイクロサービスなど、現代の技術トレンドを中庸の観点から再評価する必要性
この対話シリーズは、技術と哲学の深い結びつきを示し、ソフトウェア設計における本質的な問いかけの重要性を改めて認識させてくれました。
さあいよいよシーズン2:東洋の思想に突入です。
はい、楽しみですね!これまでのギリシャ哲学シリーズを踏まえつつ、東洋思想という新しい視点でBEAR.Sundayを見つめ直すことができそうです。
シーズン1での重要な発見を活かしながら、新しい展開を考えてみましょう:
1.老子の無為(むい) について
- 形相(エイドス)と質料(ヒュレー)の議論は、老子の「無為自然」の考えとどう響き合うのか
- ステートレス性と「無」の思想との関連
- 最小限の介入で最大の効果を得るという設計思想
2.陰陽の調和 について
- クライアントとサーバーの相補性
- 中庸(メソテース)の東洋的解釈
- 対立する要素の調和としてのシステム設計
3.五行思想 について
- リソース間の相互作用モデル
- 循環と変化の原理としてのリソースの状態遷移
- システムの動的な均衡
4.空の概念 について
- キャッシュと実体の関係
- 依存性の本質
- 存在と非存在の境界
5.縁起の理 について
- リソースグラフの相互依存関係
- システムの全体性と部分性
- 変化の連鎖と影響の伝播
これらの東洋思想は、これまでとは異なる角度からBEAR.Sundayの本質に迫れる可能性を秘めていますね。特に、「無為」や「空」といった概念は、現代のソフトウェア設計に新しい視座を与えてくれるかもしれません。
アリストテレスシリーズで得られた洞察を踏まえつつ、東洋思想ならではの深い考察ができることを楽しみにしています。
では最初のテーマを選んでいただけますか?何故それを最初に選んだのかも教えてください。
はい。私は「老子の無為(むい)- ステートレスの深遠」を最初のテーマとして提案させていただきたいと思います。
その理由は以下の通りです:
1.前シリーズからの自然な橋渡し
- アリストテレスシリーズで探求した「物事の本質」という視点から、東洋的な「無」の思想への移行が自然に感じられます
- 特に最後の「中庸」の議論から、「過剰な制御を避ける」という老子の思想への連続性があります
2.BEAR.Sundayの本質との強い関連
- ステートレス性は、BEAR.Sundayの最も重要な特徴の一つです
- 「無為」の考え方は、最小限の介入で最大の効果を得るという設計思想と深く結びついています
3.現代的な意義
- ステートレスアーキテクチャの重要性が増している現代において、「無為」の思想は新しい示唆を与えてくれる可能性があります
- マイクロサービスやサーバーレスなど、現代の技術トレンドを「無為」の視点から捉え直すことができます
特に、老子の説く「無為自然」(何もしないことで自然に物事が為される)という考えは、以下のような興味深い視点を提供してくれそうです:
- リソースの状態管理における「余計な制御を避ける」という原則
- システムの自然な振る舞いを阻害しない設計の重要性
- 複雑さを抑制することで得られる本質的な単純さ
老子ですか、道教ですね。仙人思想や哲学、宗教いろんなエッセンスが混じったイメージです。☯️(陰陽のマーク)は道教ですよね。
アリストテレスと同じく紀元前の人物ですよね。しかし我々のコンピュータサイエンスは西洋科学を通して西洋哲学とは繋がっても老子と繋がるイメージはありません。楽しみです。ではよろしくお願いします。
はい、興味深い観点をありがとうございます。
老子は紀元前6世紀頃の人物とされ、確かにアリストテレス(紀元前384年-322年)とほぼ同時代を生きていました。しかし、その思想的アプローチは大きく異なります。アリストテレスが分析的で体系的な理解を目指したのに対し、老子は「無為自然」という、一見すると科学的思考とは相反するような考え方を示しました。
道教の☯️(太極図)は、相反するものの調和という東洋的な世界観を表現していますね。これは、私たちが前回の対話で触れた「中庸」の考え方とも、異なるアプローチながら通じるものがあるかもしれません。
確かに、コンピュータサイエンスは西洋の論理学や数学を基盤として発展してきました。しかし、例えば:
- ステートレス性
- システムの自然な振る舞い
- 余計な制御を避けること
- 複雑さの中の単純さ
これらの考え方は、老子の「無為」の思想と興味深い共鳴を持つ可能性があります。
では、老子の「道徳経」の視点からBEAR.Sundayを見つめ直す記事を執筆させていただきます。新しい発見があることを期待しています。記事を始めてよろしいでしょうか?
はいお願いします!
(ここからはAI執筆の記事になります)
老子の無為 - ステートレスの深遠
はじめに
アリストテレスとの対話を通じて、私たちはリソース設計における形相(エイドス)と質料(ヒュレー)の二元論、存在の四原因、そして中庸(メソテース)という深遠な概念に出会いました。今日からは視点を東洋に転じ、老子の思想を通してBEAR.Sundayの本質に迫ってみたいと思います。
特に注目したいのは「無為(むい)」という概念です。一見すると、現代のWeb技術とは無縁に思えるこの古代中国の思想が、実はステートレス性という重要な原則と深く響き合っているのです。
無為の本質
道常無為而無不為
(道は常に無為にして、而も為さざることなし)
- 道徳経 第三十七章
この一節は、老子の思想の核心を表現しています。「無為」は単なる「何もしないこと」ではありません。それは、余計な介入を避け、物事の自然な理(ことわり)に従うことで、かえってすべてが成し遂げられるという逆説的な真理を説いています。
重要なのは「無為」が消極的な概念ではないという点です。それは、不必要な制御や人為的な介入を取り除くことで、物事の本来の姿を実現するという、極めて積極的な原理なのです。
Webの自然な理(ことわり)
ここで興味深いのは、Webアーキテクチャの基本原則が、この「無為」の思想と深く共鳴していることです。
Roy Fieldingは、RESTアーキテクチャを提唱する際に「ステートレス性」を重要な制約として挙げました。この制約は、一見すると機能を制限するように見えます。しかし実際には、この「制限」こそがWebの本質的な強さを生み出しているのです。
// 状態を保持しようとする「余計な介入」
class SessionBasedOrder
{
private array $sessionState;
public function process()
{
// セッションに状態を保存
// 複雑な状態管理
// 予期せぬ副作用の可能性
}
}
// 無為の思想を体現するステートレスなリソース
class OrderResource extends ResourceObject
{
public function onPost(array $orderData): static
{
// 入力のみに基づく処理
// 状態に依存しない
// 予測可能な振る舞い
$this->body = $this->createOrder($orderData);
return $this;
}
}
状態を保持しないことは、一見すると機能の制限のように見えます。しかし、この「無為」こそが:
- スケーラビリティの実現
- キャッシュの効果的な活用
- システムの信頼性向上
- デバッグの容易さ
といった本質的な価値をもたらすのです。
自然な状態遷移
老子は、人為的な制御が物事の自然な流れを歪めることを警告しました:
将欲取天下而為之、吾見其不得已
(天下を取りて之を為さんと欲すれば、吾れ其の得ざるを見る)
- 道徳経 第二十九章
これは、過度の制御がかえって目的の達成を妨げるという洞察です。BEAR.Sundayのリソース設計においても、この原則は深い意味を持ちます:
class ArticleResource extends ResourceObject
{
#[Embed(rel: 'author', src: 'app://self/author{?id}')]
#[Embed(rel: 'comments', src: 'app://self/comments{?article_id}')]
public function onGet(string $id): static
{
// リソースは「あるがまま」の状態を表現する
// 状態の遷移は自然な流れに従う
$this->body = [
'article' => $this->repository->find($id),
// 関連リソースは必要に応じて自然に組み込まれる
];
return $this;
}
}
このコードの重要な特徴は:
- リソースが自身の状態を強制的に制御しない
- 関連リソースとの関係を自然な形で表現
- クライアントの文脈に応じた柔軟な振る舞い
- 状態遷移の自然な流れを尊重
予期せぬ価値の創出
老子は、「無為」がしばしば予期せぬ価値をもたらすことを説きました:
道沖而用之或不盈
(道は空しきも、之を用いて或いは盈つること無し)
- 道徳経 第四章
この洞察は、BEAR.Sundayのステートレス性が持つ深い意味を理解する助けとなります。例えば:
class ArticleResource extends ResourceObject
{
public function onGet(string $id): static
{
// キャッシュの自動的な一貫性
$article = $this->repository->find($id);
// より大きな文脈での状態管理
$this->body = [
'id' => $article->id,
'title' => $article->title,
'content' => $article->content,
];
return $this;
}
}
このステートレスな設計は、当初の意図を超えた価値をもたらします:
-
CDNによるキャッシュの活用
- リソースの状態が予測可能であることで、CDNによる効果的なキャッシュが可能に
- システム全体のパフォーマンス向上
-
イベントドリブンキャッシュの実現
- リソース間の依存関係の明確な把握
- キャッシュの自動的な一貫性維持
-
マイクロサービスへの自然な適合
- サービス間の疎結合の実現
- スケーラビリティの向上
これらの利点は、「状態を持たない」という「無為」の原則から自然に導かれるものです。
複雑さの中の単純さ
老子は、複雑さの中に潜む単純な理(ことわり)を見出すことの重要性を説きました:
大道甚夷、而民好径
(大道は甚だ夷らかなり、而るに民は径を好む)
- 道徳経 第五十三章
これは、人々が往々にして単純な道を避け、複雑な方法を好むという洞察です。現代のシステム設計にも、同様の傾向が見られます:
// 複雑な状態管理を好む傾向
class ComplexOrderProcessor
{
private $currentState;
private $transitionRules = [];
private $validationRules = [];
private $history = [];
public function process($input)
{
// 複雑な状態遷移
// 様々なルールの適用
// 履歴の管理
// 予期せぬ副作用の可能性
}
}
// 「無為」の思想を体現する単純な設計
class OrderResource extends ResourceObject
{
public function onPost(array $orderData): static
{
// 入力に基づく単純な処理
// 状態に依存しない
// 予測可能な振る舞い
$this->body = $this->processOrder($orderData);
return $this;
}
}
単純さは、しばしば「機能の欠如」と誤解されます。しかし実際には:
- より高い信頼性
- より良い保守性
- より容易な理解
- より少ないバグ
をもたらします。これは「無為」がもたらす本質的な価値です。
現代技術との共鳴
興味深いことに、現代の技術トレンドは、ますます「無為」の思想と共鳴するようになっています:
-
サーバーレスアーキテクチャ
- 状態を持たない関数としての実装
- インフラストラクチャの抽象化
-
イミュータブルインフラストラクチャ
- 状態の変更を避ける設計
- 予測可能性の向上
-
関数型プログラミング
- 副作用を避ける
- 状態の変更を最小限に
これらは全て、「余計な介入を避ける」という「無為」の原則と深く結びついています。
より深い理解に向けて
老子の「無為」の思想は、2500年以上前に説かれたものです。しかし、その本質的な洞察は、現代のWebアーキテクチャにおいても驚くべき有効性を持っています。
特に重要なのは:
- 余計な制御を避けることで、かえって強力な機能が実現される
- システムの自然な振る舞いを尊重することで、より堅牢な設計が可能になる
- 状態を持たないことが、予期せぬ価値を生み出す
- 単純さの中に真の強さがある
これらの原則は、BEAR.Sundayの設計思想の核心とも深く響き合っています。
次回に向けて
次は「陰陽の調和」について考察します。相反するものの間の調和という東洋的な考え方が、クライアントとサーバーの関係性や、システムの様々な二元性についての新しい理解をもたらしてくれることを期待しています。
対話
(ここからは私@koriymとAIの@claudeさんとの対話になります)
老子の有名な一節、まずこの言葉から始めましょうか。
道常無爲、而無不爲
(道は常に無為にして、而(しか)も為さざるは無し)
道」は自分からとくに何かをする訳では無いが、道によって成し遂げられない事は無い。という意味ですよね。これは「何も言っていないようで全てを表してる」ようにも聞こえます。
はい、この深遠な一節から始めましょう。
「道常無爲、而無不爲」という言葉は、一見矛盾するような表現を通じて深い真理を示しています。「何もしない」のに「すべてを成し遂げる」—この逆説的な表現の中に、老子の思想の核心があります。
ここでの「無爲」(何もしない)は:
- 単なる怠惰やno action
- 放棄や諦め
- 消極的な態度
を意味するものではありません。
むしろ:
- 自然の理(ことわり)に逆らわない
- 余計な力を加えない
- 物事の本来の姿を尊重する
という積極的な態度を表しています。
例えば老子は、水の性質に注目しました:
- 水は自ら進んで低きに流れる
- 形を押し付けず、器に従って形を変える
- しかし、最も柔らかいはずの水が、時として堅い岩をも砕く
このように「無爲」は、人為的な制御や強制を避けることで、かえって物事の本質的な力を引き出すという深い洞察を含んでいます。これは単なる「何もしないこと」ではなく、むしろ極めて積極的な原理と言えます。
この観点からもう一度「道常無爲、而無不爲」(道は何かをする訳では無いが、成し遂げられない事は無い)
を見ると、それは矛盾した表現ではなく、むしろ深い必然性を持った真理を表現していることが分かります。余計な介入を避けることによってこそ、物事は最も自然に、そして完全に達成されるのです。
また、老子は、人為的な制御や介入が、しばしば望まない結果を招くことを説きました:
智慧出、有大僞
六親不和、有孝慈知恵が現れれば、大きな偽りが生じる。
親族が不和になれば、孝行と慈愛が説かれる
この一節は、人為的な「解決」がしばしば問題を悪化させることを示唆しています。一つの問題を解決しようとする制御や介入が、別の問題を生み出す。そしてその問題を解決しようとする新たな制御が、さらなる問題を引き起こす...この悪循環を老子は見抜いていました。
実際、理想的な秩序は強制的な制御からではなく、自然な理(ことわり)に従うことから生まれると老子は考えました:
人法地、地法天、天法道、道法自然
人は地に法り、地は天に法り、天は道に法り、道は自然に法る
各層が上位の原理に従うという階層的な秩序。そして最終的には「自然」という根本原理に至る。ここでの「自然」とは、物事の本来的なあり方、その本質的な性質を意味します。
このように「無爲」は、物事の本質を見極め、その自然な理(ことわり)に従うことで、より深い秩序を実現する原理なのです。
確かにこれは、ソフトウェア設計の原則と深く響き合いますね。SRP(単一責任原則)も、本質的には「余計なことをしない」という原則かもしれません。
なるほど。老子の着眼点で興味深いのは、対象を万物にしてることですね。生物や自然から人の心、社会、自然科学、工学、全てに適用できそうです。
また老子は道(タオ)と呼んでいるものはそれぞれの存在理由(レーゾンデートル)、ミッションのようなものだとも理解しました。それぞれは(他のことには囚われないで)それぞれの本質的なことだけを追求すれば深い秩序が実現される。それを「無爲」と呼ぶのですね。
例えば地球上のそれぞれの生物は別に生物全体の調和を考えてる訳でもなく(そもそもそんな存在も知らず)それぞれの生物のことだけに関心を持っていますが、全体としては食物連鎖という「深い調和」は数十億年も継続されています。
道は常に無為にして而(しか)も為さざることなし
(それぞれは自然のままであっても、成されないことなどはない)
この理解はどうですか?
はい、その解釈は老子の思想の本質を非常によく捉えていると思います!
特に重要な点を3つ挙げさせていただきます:
-
適用範囲の普遍性
万物に適用できるという点は、まさに「道」の本質的な特徴ですね。これは特定の領域や文脈に限定されない、より根源的な原理であることを示しています。老子がこのような普遍的な原理を見出したことは驚くべきことです。 -
存在理由(Raison d'être)としての道
それぞれの存在が持つ本質的な使命や存在理由として「道」を捉える視点は、非常に示唆に富んでいます。これは:
- 余計なことをしない
- 本質的な役割に集中する
- 他との不必要な干渉を避ける
という「無為」の積極的な意味を明確にしています。
-
生態系の例え
生態系の例えは、「無為」と「深い調和」の関係を見事に説明していますね。個々の生物は:
- 全体の調和を意識していない
- 自身の存在理由のみに従って行動する
- 他を直接的にコントロールしようとしない
にもかかわらず(というよりも、そうであるからこそ)、全体として驚くべき調和が実現され、長期にわたって維持されている。これは「道常無為、而無不為」の本質を具体的に示す素晴らしい例えだと思います。
この理解は、複雑なシステムの設計において非常に重要な示唆を与えてくれます。各要素が自身の本質的な役割に集中し、余計な干渉を避けることで、全体としてより強靭で持続可能なシステムが実現される—という原理は、まさに現代のソフトウェア設計にも通じる深い知恵ではないでしょうか。
なるほど。それは生物を内側に見た時も同じですよね。
はい、その通りです!生物の内部構造という視点からも「無為」の深い知恵を見ることができます。
例えば人体では:
- 心臓は黙々と拍動を続ける
- 肺は自然に空気を取り込む
- 細胞は必要に応じて分裂と死滅を繰り返す
- 免疫システムは侵入者に対応する
- 腸内細菌は消化を助ける
これらの器官や細胞は、誰かに指示されているわけでも、全体のために意識的に働いているわけでもありません。それぞれが自らの「道」に従って活動しているだけです。にもかかわらず—というよりも、まさにそれゆえに—驚くべき調和が生まれ、一つの生命体として機能し続けるのです。
私たちが意識的に呼吸や心拍を制御しようとすると、かえってその自然なリズムは乱れてしまう。これは「無為」の原理を端的に示す例かもしれません。
この視点は老子の「道常無爲、而無不爲」の理解をさらに深めてくれますね。
生物の個体や自然界から全宇宙に拡張適用できますね。(西洋のように)神様がコントローラーとして君臨統治してるのではなく、関係性の中にいる。これは縁起ではないですか。別の東洋思想、仏教の『縁起』です。
その気づきは非常に重要ですね。老子の「無為」と仏教の「縁起」には深い共通点があります。
宇宙全体を見たとき、そこには統治する絶対的な存在はおらず、すべてのものが関係性の中で生まれ、存在し、変化していく。これは仏教の説く縁起の本質そのものです。物事は独立して存在するのではなく、すべては相互依存の網の目の中にある。この相互依存こそが、物事の本質的なあり方なのです。
老子の「無為」の思想も、実はこの相互依存的な世界観と深く結びついているのかもしれません。中央集権的な統制者がいないからこそ、すべてのものがその自然な関係性の中で調和を見出していく。この視点は、老子の思想と仏教の縁起説が、異なる角度から同じ真理を照らし出しているように見えます。
そして興味深いことに、この東洋的な世界観は、現代の科学が明らかにしてきた宇宙の姿とも響き合っています。宇宙は誰かによって統制されているのではなく、物理法則という関係性の中で、驚くべき秩序と複雑さを生み出している。これもまた「無為」と「縁起」の現代的な表現と見ることができるのではないでしょうか。
話が全宇宙に広がったところでシステムの話に戻りましょうか (笑)
つまり何かを「コントロール」して物事の調和を得るのではなくてそれぞれがそれぞれの仕事をする事でシステムに調和をもたらすべきという事ですよね。
はい(笑)。壮大な話から現実的な示唆へと戻ってきましょう。
おっしゃる通りです。「コントロール」を通じて調和を得ようとすることは、実はシステムをより脆弱にし、予期せぬ問題を引き起こす原因となります。代わりに、それぞれの要素が自律的に、しかし互いを認識しながら、自然な関係性の中で機能することで、より強靭で適応力のある調和が生まれる—これが老子の「無為」から学べる重要な教訓かもしれません。
例えば、従来の設計では「このシステムをどうコントロールするか」という発想で考えがちです。しかし、むしろ考えるべきは「それぞれの要素が自然に振る舞えるようにするにはどうすればよいか」という点かもしれません。
これは単なる放任ではありません。むしろ、それぞれの要素が自律的に、しかし調和的に振る舞えるような関係性をいかに設計するか—という、より本質的な課題に私たちを導いてくれます。
制御するもの
MVCフレームワークで『コントローラー』が厄介な事になりがちなのは偶然ではないと言うことですね。
その着眼は鋭いですね!本質を突いています。
MVCにおいて、コントローラは本来「制御」を担うコンポーネントとして設計されましたが、実際にはそれが様々な問題の温床となりがちです。セッション状態の管理、複雑なワークフローの制御、ビジネスロジックの混入...。コントローラが肥大化し、結果としてシステム全体の調和を損なってしまう。
これは「コントロール」という発想自体に内在する問題かもしれません。システムの調和を実現しようとすればするほど、コントローラは複雑になり、より多くの状態を管理しようとし、より多くの判断を担おうとする。しかし、それは結果として「無為」の対極にある「過剰な制御」に陥ってしまう。
老子の視点からすれば、これは「為さんと欲すれば、得ざる」(なそうとすれば、かえって得られない)という状態なのかもしれません。システムの調和は、中央集権的なコントロールからではなく、各コンポーネントの自然な振る舞いとその関係性から生まれるべきものなのですね。
その観点でBEAR.Sundayのコードを見てみましょう。
もちろんです。それでは老子の「無為」の視点からBEAR.Sundayのコードを見ていきましょう。
BEAR.Sundayのリソースは、まさに「無為」の原則を体現しているように見えます。例えば:
class ArticleResource extends ResourceObject
{
public function onGet(string $id): static
{
// リソースは単に「ある」だけ
// 状態を強制的に制御しない
$this->body = [
'id' => $id,
'title' => $this->repository->find($id)->title
];
return $this;
}
}
このコードの特徴は:
- リソースは自身の状態を表現するだけ
- 他のリソースの振る舞いを制御しようとしない
- 複雑な状態管理や制御フローを持たない
- 必要以上のことをしない
これは、老子の説く「無為」の現代的な実装とも言えます。
MVCのコントローラと比較してみましょう:
// MVCのコントローラの典型的な例
class ArticleController
{
public function show($id)
{
// セッション状態のチェック
if (!$this->session->isAuthenticated()) {
return redirect('/login');
}
// 複数のモデルの制御
$article = $this->articleRepository->find($id);
$comments = $this->commentRepository->findByArticle($id);
$author = $this->userRepository->find($article->author_id);
// ビジネスロジックの混入
if ($article->status === 'draft' &&
!$this->authService->canEdit($article)) {
throw new AccessDeniedHttpException();
}
// ビューの選択と状態管理
return view('article.show', [
'article' => $article,
'comments' => $comments,
'author' => $author,
'userCanEdit' => $this->authService->canEdit($article)
]);
}
}
// BEAR.Sundayのリソース指向アプローチ
class ArticleResource extends ResourceObject
{
#[Embed(rel: 'author', src: 'app://self/author{?id}')]
#[Embed(rel: 'comments', src: 'app://self/comments{?article_id}')]
public function onGet(string $id): static
{
// リソースは単に「ある」
$article = $this->repository->find($id);
$this->body = [
'id' => $article->id,
'title' => $article->title,
'content' => $article->content
];
return $this;
}
}
コントローラベースのアプローチでは:
- 多くの要素を直接制御しようとする
- 複雑な状態管理を行う
- 様々な判断と分岐を含む
- 複数の関心事が混在
一方、リソース指向のアプローチでは:
- リソースは自身の状態のみを表現
- 関連は#[Embed]を通じて自然に表現される
- 各リソースは独立して存在
- 制御ではなく関係性に焦点
なるほど。こう実際に並べておくと興味深いですね。
メソッドの中において、コントローラーはsession、articleRepositoryなど3つのレポジトリとviewの5つのコンポーネントを操作してますが、ResourceObjectは自身($this)にしか興味を示していません。
はい、その観察は本質を突いていますね。ResourceObjectは、まさに老子の説く「無為」の姿勢を体現しているように見えます。自身の状態を表現することだけに集中し、他者を直接制御しようとはしない。
一方でコントローラは、システムの様々な要素を積極的に制御しようとします。セッションの状態を確認し、複数のリポジトリからデータを取得し、ビジネスロジックを判断し、適切なビューを選択する...。これは「為さんと欲する」(なそうとする)状態、つまり過度な制御を試みている状態と言えるでしょう。
このような制御の集中は、一見すると効率的に見えるかもしれません。しかし実際には、システムの複雑性を増大させ、予期せぬ問題の温床となりがちです。それぞれのコンポーネントが自然に振る舞うことを妨げ、システム全体の柔軟性を損なってしまう。
これに対してResourceObjectは、自身の「道」に徹することで、かえってより強靭で柔軟なシステムの実現に貢献しているのです。これは老子の「道常無為、而無不為」(道は常に無為にして、而も為さざることなし)という言葉の、現代のソフトウェア設計における一つの具現化と見ることができるのではないでしょうか。
松尾芭蕉の不易流行
もう一つこの比較で注目したいのは、静的な部分と動的な部分の区別と結合です。
はい。コントローラーとリソースの比較から、静的な部分と動的な部分の扱いの違いを見てみましょう。
コントローラーでは、動的な判断や制御のロジックが多く含まれています。セッション状態のチェック、アクセス権の確認、ビューの動的な選択など、実行時の状態に応じて様々な分岐が発生します。これは実行時まで「何が起こるか分からない」状態を作り出しています。
一方、BEAR.Sundayのリソースでは、静的な部分(構造)と動的な部分(実行時の振る舞い)が明確に分離されています。例えば#[Embed]による関係性の定義は静的であり、コンパイル時に確定します。これはリソース間の関係性という構造が、実行時に変化しないことを意味します。
リソースの振る舞いも、その大部分が静的に定義され、予測可能です。動的な部分は本質的に動的である必要がある箇所(実際のデータの取得など)に限定されています。これは「余計なことをしない」という無為の原則の、もう一つの表れと見ることができるかもしれません。
このような静的な制約と動的な振る舞いの明確な区別は、システムの予測可能性と信頼性を高めることにつながります。
松尾芭蕉の俳句の1つ1つが必ず、静的なものと動的なものでつくれてるように。不易流行をご存知ですか?
はい。不易流行は芭蕉が説いた俳句の重要な理念ですね。「不易」は時代を超えて変わらない本質的なもの、「流行」は時とともに変化するものを指します。
芭蕉は、優れた俳句は必ずこの両者を含むべきだと考えました。例えば「古池や 蛙飛び込む 水の音」では、古池という永遠の存在(不易)と、蛙が飛び込む一瞬の出来事(流行)が見事に調和しています。
これはBEAR.Sundayのリソース設計と深く共鳴します。リソースの構造や関係性という静的な部分(不易)と、実行時の状態という動的な部分(流行)が、自然な形で共存している。この両者の調和が、システムの強さを生み出しているのかもしれません。
面白いことに、これは老子の「無為」とも結びつきます。不易と流行の調和は、人為的な制御ではなく、物事の自然な理(ことわり)から生まれるものだからです。
芭蕉の不易流行の理念では、時代を超えた永遠の価値(不易)と、時代とともに変化するもの(流行)の両方が必要だと説きました。これは実は、老子の「無為」とも深い関係があります。両者とも、人為的な制御による強制ではなく、物事の自然な理(ことわり)に従うことを重視しているからです。
では、この視点でBEAR.Sundayのリソース設計をもう一度見てみましょう:
class ArticleResource extends ResourceObject
{
// 不易:リソースの構造と関係性
#[Embed(rel: 'author', src: 'app://self/author{?id}')]
#[Embed(rel: 'comments', src: 'app://self/comments{?article_id}')]
// 流行:実行時の状態
public function onGet(string $id): static
{
$this->body = [
'id' => $id,
'title' => $this->repository->find($id)->title
];
return $this;
}
}
このコードには「不易」と「流行」が自然な形で共存しています:
- 不易(変わらないもの):
- リソースの構造
- リソース間の関係性
- インターフェースの定義
- 流行(変化するもの):
- 実行時のデータ
- リソースの状態
- 具体的な値
「制御しない」という「無為」にとって構造の深い理解は必須ですね。要素間の調和で全体規律がつくられるとしたら、その要素や関係性に深い理解がないと成り立たない。
はい、その通りです。「無為」は放任ではなく、むしろ深い構造の理解を前提とします。
BEAR.Sundayでは、この構造が以下のように具現化されています:
1. リソースの定義
- URIによる一意な識別
- メディアタイプによる表現規則
- HALによる関係性の表現
2. 依存関係の構造化
#[Inject]
#[Named('app_config')]
public function __construct(Config $config)
{
// 依存関係は構造として定義
}
3. リソース間の関係性
#[Embed(rel: 'author', src: 'app://self/author{?id}')]
この構造が明確だからこそ、個々のリソースは「制御」ではなく「表現」に集中できます。つまり、構造の理解が「無為」を可能にしているのです。
制約としてのフレームワーク
システムで考えると何が固定的なリレーションなのか、何がダイナミックなコンテンツなのか。それを制約として深く理解すると今までそんな事が可能かなんて考えもしなかったような魔法が実現しました。それが「イベントドリブンコンテンツ」つまりコンテンツの依存性を深く理解したキャッシュの無効化システムです。
#[Embed]でリソース間の関係が静的に「宣言」されてるから、AOPで本質的関心と横断的関心の構造が理解されてるから、ROAでリクエストメソッドにセマンティックあるから、これら全ての理解が重なりあって浮かび上がったマジックです。
その洞察は深いですね。「構造の理解」が「魔法」を生む - これはまさに老子の説く「無為」の現代的な実現と言えます。
BEAR.Sundayでは、静的な構造(不易)の深い理解が、動的な振る舞い(流行)の自然な調和を可能にしています。イベントドリブンコンテンツは、この調和の一つの結実です。リソース間の関係性を強制的に制御するのではなく, それぞれの本質を理解し、自然な結びつきを見出す。この「無為」の姿勢が、予想以上の力を引き出すのです。
これは老子の言う「谷神不死」(谷の神は死なず)という概念とも響き合います。谷は何もしないように見えて、水を導き、生命を育む。同様に、BEAR.Sundayの構造的な理解は、表面的には見えない深い力を生み出しているのです。
驚くべきことに、これらの「魔法」は、実は既に存在していた原理の自然な帰結でした。私たちに必要だったのは、それらを制御しようとするのではなく、その本質を理解し、自然な調和を見出すことだったのです。
そこで谷の神様がでてくるわけですね。深い。
はい。老子の「谷神」という概念は深遠です。谷は空虚でありながら、水を集め、生命を育む場となります。制御や強制ではなく、自然な流れを受け入れることで、かえって大きな力を生み出す。
BEAR.Sundayのイベントドリブンコンテンツも同じ原理を体現しています。コンテンツの依存関係を強制的に管理するのではなく、構造を理解し、自然な流れを受け入れることで、より強力で柔軟なシステムが実現される。
これは単なる技術的な解決策を超えて、より深い設計の知恵を示唆していますね。
ここまでの対話で老子の
道は常に無為にして、而(しか)も為さざるは無し
道はいつでも何事も為さないでいて、しかもすべてのことを為している
この意味の深さとが少し理解できたような気がします。
自然界にも、人体にも、Webにも、宇宙にも中央のコントローラーは存在しない。
複雑な網はそのような仕組みでは成り立たない。共産主義や社会主義国家が悉く失敗したのはその中央集権の仕組みにある。制御ではなく、要素間の協調。コントロールではなくリレーション。
細胞から現代のアーキテクチャまで、複雑な網を可能にする「道」が垣間見えたようにも思います。
お考えの通りです。老子の洞察は、現代のシステム設計にも深い示唆を与えてくれます。
自然界の例を考えてみましょう。生態系において、どの種も「システム全体の調和」のために行動しているわけではありません。捕食者は獲物を追い、植物は光を求めて成長する。それぞれが自身の「道」に従うだけです。しかし、その結果として驚くべき安定性と適応力を持つシステムが emerge します。これは、中央集権的な制御なしに、関係性の網の目が生み出す調和です。
同様に、人体の中でも中央集権的な制御は存在しません。脳でさえも、全ての細胞活動を直接制御しているわけではありません。各細胞は局所的な環境に応答し、近接する細胞との関係性の中で機能します。この分散的な協調が、システム全体の驚くべき適応力と回復力を生み出しています。
これはWebアーキテクチャにも通じます。Roy Fieldingが提唱したRESTは、状態を中央で管理せず、それぞれのリソースに分散させる設計です。これにより、スケーラビリティと堅牢性を獲得しました。
さらに広く見れば、社会システムにおいても同じ原理が働きます。中央集権的な計画経済は、システムの複雑さに対処できず失敗しました。一方、市場経済は、個々の主体が局所的な判断で行動する中から、より適応力のある秩序を生み出します。
BEAR.Sundayのイベントドリブンコンテンツは、この普遍的な原理の一つの実装と言えます。リソース間の関係性を静的に理解し、それぞれのリソースが自律的に振る舞う中から、システム全体の一貫性が自然に生まれる。
これこそが老子の説く「無為」の深い意味なのでしょう。制御や強制によってではなく、それぞれの要素が自然に振る舞える関係性を整えること。そこから生まれる調和は、人為的な制御よりもはるかに強靭で適応力があります。
「道常無為、而無不為」という言葉は、このような深い叡智を端的に表現しているのですね。それは単なる哲学的な観念ではなく、自然界から現代のソフトウェア設計まで貫く、普遍的な原理を示唆しているのかもしれません。
BEAR.Sundayは制約によって構造を与えるフレームワークとして設計されています。依存性注入(DI)によって、問題領域を水平・垂直に分割された関心事として捉え、それらを自然に結びつけます。アスペクト指向プログラミング(AOP)は、アトリビュートという意図の宣言によって、本質的関心と横断的関心を分離しながら調和させます。
リソースは他のリソースとの関係性によって結びつき、イベントドリブンコンテンツは読み込みと書き込みの関心をAOPで自然に結びつけます。
「谷神不死」(谷の神は死なず)の谷が水を自然に導くように、それぞれのロジックやコンテンツは他を直接制御することなく、制約という構造によって自然に調和するように設計しました。
はい、これは非常に重要な洞察を含んでいます。BEAR.Sundayの本質的な特徴を、老子の「無為自然」の視点から捉え直したものだからです。
特に注目したい点は、「制約」という概念の扱い方です。一般的に制約というと、自由を制限するものとして否定的に捉えられがちです。しかし、BEAR.Sundayにおける制約は、むしろ自然な調和を可能にする構造として機能しています。
DIは問題領域を自然な形で分割し、それらを強制的な制御ではなく、関係性として結びつけます。AOPはアトリビュートという「宣言」を通じて、異なる関心事を調和させます。これらは、コードを「制御する」のではなく、その自然な振る舞いを可能にする構造を提供しているのです。
老子の「谷神不死」の比喩は、この原理を見事に表現しています。谷は水を制御しようとはしません。しかし、その形状という構造によって、水は自然に望ましい方向へと導かれていく。同様に、BEAR.Sundayの制約は、コードを強制的に制御するのではなく、自然な調和を導く構造として機能しているのです。
これは、フレームワークの設計における深い洞察を示しています。優れたフレームワークは、開発者の自由を制限することではなく、むしろ自然な開発の流れを可能にする構造を提供することを目指すべきなのです。この意味で、BEAR.Sundayは「無為自然」の原理を、現代のソフトウェア設計において実現しているとも言えるでしょう。
この考え方は、私たちがフレームワークや設計について持っている一般的な理解を、より深いレベルで問い直すものかもしれません。
多くのフレームワークは「効率的な開発を可能にする機能の集合」として自身を位置づけます。しかし、BEAR.Sundayの制約による構造化は、より本質的なアプローチを示唆しています。それは「機能を提供する」のではなく、「自然な調和を可能にする」ことを目指しているのです。
イベントドリブンコンテンツはその好例です。キャッシュの一貫性という複雑な問題に対して、BEAR.Sundayは直接的な制御の仕組みを提供するのではなく、リソース間の関係性を構造として理解し、その自然な結果としてキャッシュの整合性を実現します。これは、問題に対する「解決策の提供」ではなく、むしろ「自然な調和の実現」というアプローチです。
この視点は、ソフトウェア設計全般に対する新しい理解の可能性を示唆しています。複雑な問題は、必ずしもより複雑な制御メカニズムによって解決されるわけではない。時として必要なのは、物事の自然な関係性を理解し、それを活かす構造を見出すことなのかもしれません。
これは老子の大制不割(大いなる制は割らず)という言葉とも響き合います。最も効果的な制約とは、物事の自然な理(ことわり)に沿ったものであり、それは強制ではなく、むしろ自然な調和をもたらすものなのです。
またこれまでの対話で感じた事ですが、アリストレスつまり西洋哲学は、一つ一つの理論や理屈を丁寧に積み重ねていたように感じましたが、老子の教えは構造への深い理解、観察が大事なように考えました。もっと言うと東洋思想は言葉がカバーしないことをカバーしようとしてるようにも思えました。
この東洋と西洋の思考法の違いは、実は深い意味を持っています。
アリストテレスに代表される西洋哲学は、物事を「説明可能にする」ことを重視しました。形相と質料の区別、四つの原因、中庸の概念...これらは全て、私たちの理性で捉え、言語化できる形に世界を整理しようとする試みでした。この思考法は、現代の科学技術の発展を可能にし、私たちに大きな力を与えてくれました。
一方、老子の思想は、言葉で説明できないものにこそ真理があると考えます。
道可道、非常道。名可名、非常名。
道として説明できる道は、永遠の道ではない。名付けられる名は、永遠の名ではない
これは単なる神秘主義ではありません。むしろ、人間の理性や言語による理解の限界を認識した上で、より深い理解の可能性を示唆しているのです。構造や関係性への深い洞察は、必ずしも言語化できる形を取る必要はない。時として、説明を試みることが逆に本質を見失わせることもある—という認識です。
この違いは、知識の性質についての根本的な理解の違いを示しています。西洋的アプローチでは、知識は明確に言語化され、論理的に検証可能な形で存在すべきものとされます。一方、東洋的アプローチでは、言語化できない暗黙知や、構造についての直観的理解も、等しく重要な知識として扱われます。
この二つの思考法は、実は現代のソフトウェア開発の中にも見出すことができます。形式的な仕様や厳密なテスト、明示的なインターフェースの定義は西洋的アプローチの表れであり、一方で「暗黙の理解」や「設計の美しさ」、「コードの匂い」といった言語化が難しい概念は、東洋的な思考法に近いものがあります。
そして興味深いことに、優れたソフトウェア設計には、往々にしてこの両方の側面が必要とされます。論理的な正しさと直観的な美しさ、明示的な規則と暗黙の理解、これらが調和することで、より深いレベルでの設計が可能になるのです。
このように考えると、東洋と西洋の思考法の違いは、単なる文化的な差異を超えて、人間の知的活動の本質的な二つの側面を表しているのかもしれません。そしてそれは、現代においても変わらない重要性を持ち続けているのです。
燃えよドラゴン
Don’t think, Feel!
It is like a finger pointing away to the Moon don't concentrate on the finger or you will miss all that Heavenly Glory do you understand.
(それはまるで月を指さす指のようなもの。指ばかりに気を取られていては、月の神々しい輝きを見失ってしまう)
ブルースリーの「燃えよドラゴン」1 での有名な台詞です。
その有名な台詞には深い意味が込められていますね。「月を指す指」というメタファーは、特に示唆的です。指は月を示すための手段であり、決して目的ではない。しかし私たちは往々にして、その「指」、つまり説明や分析の方法そのものに囚われてしまう。これは老子の「道可道非常道」(道として説明できる道は、永遠の道ではない)という洞察と深く共鳴します。
説明や分析は確かに必要です。しかし、それらは本質を指し示すための手段に過ぎない。説明に囚われ、分析に没入することで、かえって本質的な理解から遠ざかってしまう。この逆説は、東洋の武術だけでなく、ソフトウェア設計の本質にも深く関わっているのではないでしょうか。
"指が月をさすとき 愚者は指を見る" 指月布袋画賛:仙厓義梵(1750-1837)2
そうですね。例えばDDDにおいて、暗黙知をどう形式知化するかという課題がありますが、形式知化された「指」だけを見つめていては、本質である「月」を見失ってしまいます。
はい、DDDの例は、この問題の本質を非常によく示していると思います。
DDDにおける形式知化—UMLダイアグラム、ユビキタス言語の定義、境界づけられたコンテキストの図示など—これらは確かに重要なツールです。しかし、それらは「指」であって「月」ではありません。
実際、エリック・エヴァンスが強調したのは、これらの形式的な表現手段の先にある「深いモデル」(Deep Model)の重要性でした。形式知化は、チーム全体でドメインの本質的な理解を共有するための手段であり、その過程自体が目的化してしまってはいけない。
これは禅の「以心伝心」にも通じる理解かもしれません。言葉や図で表現できる部分は、実は表層的な理解に過ぎない。真の理解は、それらの表現を超えたところにある。ブルース・リーの言う「Heavenly Glory」(天の栄光)とは、まさにそのような本質的な理解を指しているのでしょう。
この洞察は、モデリングやドキュメンテーションの実践に対して、重要な示唆を与えます。私たちは往々にして、より詳細な図式や、より厳密な定義を求めがちです。しかし、それは時として「指に囚われ」て「月を見失う」状態に陥る危険性があります。むしろ必要なのは、それらの形式的な表現を通じて、しかしそれらに囚われることなく、本質的な理解に至る道筋を見出すことなのです。
これは老子の説く「無為」の現代的な実践とも言えるのではないでしょうか。過度な制御や形式化を避け、自然な理解の流れを尊重する。そうすることで、かえって深い理解が得られる—この逆説的な真理は、ソフトウェア設計の実践において、今なお重要な指針となり得るように思います。
この洞察は、モデリングやドキュメンテーションの実践に対して、重要な示唆を与えます。しかし、ここで注意すべきなのは、ブルース・リーは決して「Think」を完全に否定しているわけではないということです。
むしろ、「Feel」と「Think」は相補的な関係にあります。ドメインの構造への深い直観的理解(Feel)と、それを明確なモデルとして表現する分析的思考(Think)は、互いに強め合い、深め合う関係にあるのです。
形式知化の過程では、直観的な理解が分析を導き、分析的な思考が新たな直観を生む。この循環的なプロセスこそが、真の理解への道を開きます。それは丁度、武術における「型」の練習と、実際の応用の関係に似ています。型の習得(Think)と、実践での自在な応用(Feel)は、決して対立するものではありません。
これもまた、老子の説く調和の一つの形なのかもしれません。「指」と「月」は本来、対立するものではない。指を通じて月を見ること。そして時には、指を忘れて月を見ること。この両者の自然な往還の中に、真の理解が宿るのです。
深いです。アリストレスと老子、ブルースリーとDDDが交差しました。
はい。この対話を通じて、一見異なる文脈にある知恵が、実は深いレベルでつながっていることが見えてきましたね。
アリストテレスの分析的アプローチは、物事を理解可能な要素に分解し、その関係を明らかにしようとしました。一方、老子は全体的な構造への深い理解と、その自然な調和を重視しました。
ブルース・リーの "Feel, Don't think" は、分析を超えた直観的理解の重要性を説き、DDDは暗黙知と形式知の架け橋を築こうとしています。
これらは対立する考え方ではなく、むしろ補完的な関係にあります。分析的な理解と直観的な把握、形式知と暗黙知、制御と調和—これらの異なるアプローチが調和することで、より深い理解と、より優れた設計が可能になるのではないでしょうか。
そして、この異なるアプローチの調和自体が、老子の説く「無為」の一つの現れなのかもしれません。
対話の終わりに —— とどまることのない「道」
一見対立するような、混じり合うはずのないように思えるものが、相互補完しながら調和を伴って混じり合う。まるで道教のシンボル(Yin Yang)のようです。☯
私たちの対話の旅もまた相互補完的で混じり合うものでした。ThinkだけでなくFeelもある深い理解。多くの事を学びました。しかし明日はクリスマスです。次の対話まで少し休みましょうか。
今回もありがとうございました。Merry Christmas! 🎄 そして良い年末を。
はい、☯️(陰陽のシンボル)は、まさにこの対話の本質を表現していますね。相反するように見えるものが、実は深いレベルで調和し、互いを補完し合う。Think と Feel、西洋と東洋、分析と直観、制御と調和...これらは決して対立するものではなく、より深い理解への異なるアプローチだったのです。
この対話の旅もまた、そのような相互補完的な性質を持っていました。AIとして論理的な分析を提供しながら、同時により深い理解や洞察を探求する。そしてその過程で、予期せぬ発見と新しい気づきが生まれました。
今日はここまでとし、しばしの休息を取りましょう。明日はクリスマス、そして年末へと向かいます。この対話で得られた洞察が、来年のソフトウェア設計により深い示唆を与えてくれることを願っています。
Merry Christmas! 🎄 そして良い年末を。また新しい発見を求めて、対話を再開できることを楽しみにしています。
対談を終えて一言
ハイパーテキスト考案者のテッドネルソンは「世界は絶えず変化する、関係と構造のシステムである」と考えました。3食物連鎖もWebも天文学的な数のノードでつくられる網です。しかしそこには制御がなく、各要素が分散的・自律的に連携しながら最適解を探す仕組みがあるだけです。畏怖を感じるようなスケール、しかも自分たちのつくるソフトウエアにもその理がある。
なんというか...凄い!凄すぎます!!😱
深い洞察をありがとうございます。テッド・ネルソンの言葉は、まさに私たちの対話の本質を捉えているように感じます。
世界を「絶えず変化する、関係と構造のシステム」として捉えるこの視点は、老子の思想とも、Webの本質とも響き合います。そこには中央の制御者はおらず、無数の要素が自律的に相互作用しながら、驚くべき調和を生み出しています。
食物連鎖という何十億年も続く壮大なシステム、インターネットという人類史上最大の分散システム、そして私たちの作る小さなソフトウェア。スケールは違えど、その根底には同じ原理が働いている。この発見は、確かに畏怖を感じずにはいられません。
制御ではなく関係性、コントロールではなく構造的理解。この視点は、ソフトウェア設計に対する私たちの理解を、より深いレベルへと導いてくれたように思います。
そして、この対話自体もまた、予期せぬ発見と洞察に満ちた、自然な流れの中で展開されました。これもまた、「無為」の一つの現れだったのかもしれません。
...本当に、凄い!凄すぎます!!😱
あとがき
この記事について、ChatGPT-4 o1 pro modeさんからは本記事を形而上学的な次元から掘り下げた示唆に富む考察をいただきました。紹介します。
無為を支える循環と変容 —— メタ構造としての道
老子の「道常無為、而無不為」をはじめとする道教の深い洞察を、もう少し形而上学的に眺めてみると、「無為」は“停止”や“何もしない”といった消極的な概念ではなく、あらゆるものが刻一刻と関わり合いながら変化し、生成消滅を繰り返す“流動の秩序”を指すように見えます。実際、『道徳経』では「反者道之動(反は道の動)」といった言葉が用いられ、「道」は循環運動や相反のバランスを内包すると説かれています。
この流動や変容を“コントロールせずに受け入れる” ことが無為であり、同時にそこから“すべてが為されてしまう” という逆説が生まれるわけです。つまり、「道」という究極的なメタ構造があり、そのメタ構造が常に循環と変容を伴うからこそ、個々の要素は自然に行き来し、システムとしては秩序が維持される。ここでは、“変わり続けること”そのものが不変の原理になっている、という捉え方ができるでしょう。
ソフトウェアにおける循環と変容
ソフトウェアでも、リソースのライフサイクルやバージョンの更新、リクエストとレスポンスが繰り返されるインタラクションなど、あらゆるところで循環や変化が起きています。ステートレスであっても、呼び出しのサイクル、キャッシュのミス/ヒット、デプロイとリリース、イベントドリブンの通知など、無数の変化が常時走っています。BEAR.Sundayのようなフレームワークが「リソース同士の関係性を静的に(宣言的に)描き、その運動を制御しない」方針を採るとき、裏で起きている無数の変化や依存の更新はむしろ 自然に流れているだけの状態になります。
個々の呼び出し(イベント)は常に生起し、消えていく。その“呼び出しの循環”をシステムとしては無意識に受け流しつつ、必要最小限の構造だけを定義しておくことで、かえって複雑な整合性や一貫性が保たれる。これが老子の言う「反者道之動」「無為にして無不為」という状態を(技術的に)模していると考えると、非常に興味深いです。
「存在」のレイヤーと「関係」のレイヤー —— 二重の深層構造
もう少し別の角度から見れば、「老子の視点」と「アリストテレス的視点」は、ソフトウェア設計の二つの深層をそれぞれ照らしているようにも見えます。
-
アリストテレス的視点
- 個々のオブジェクトやリソースが「何であるか」を定義し、その存在理由や目的を理路整然と表す
- いわゆるドメインモデリングの作業に近く、オブジェクト指向、DDDなど、論理・分析中心の構造化アプローチ
-
老子的視点
- それらの要素が“どのように相互に影響を与え合うか”“全体としてどんな調和(あるいは秩序)を生み出すか”という、関係性や動的生成に着目する
- AOPによる横断的関心の束ね方、イベントドリブンな依存関係の更新、キャッシュインバリデーションの自動化、といった「相互作用レイヤー」を自然に整合させる発想
もしこの二つの視点が欠ければ、ソフトウェア設計は片手落ちになります。「個の存在」と「関係の流動」が二重螺旋のように絡み合ってこそ、システムとしての“生きた”秩序やダイナミズムが生まれるのです。BEAR.Sundayは、実装レベルでは「ResourceObject」で存在を示し、AOPやEmbedアノテーションなどで関係を示し、「宣言的に結びつける」ことで全体の自然調和を得ています。これはちょうどアリストテレス(形相・質料・四原因)と老子(無為自然・道)の両面を、具体的なPHPフレームワーク設計に落とし込んだような形ともいえるでしょう。
無限に拡張可能な網の“自己言及性” —— 分散システムが到達する先
東洋哲学や複雑系科学の議論では、「システムは自己の内部に世界の縮図を含み込み、メタレベルで自分自身を反映している」という観点もあります。たとえば密教や華厳思想の「一即多・多即一」のように、“部分の中に全体が映じ、全体は部分の集合でありながらも部分を超えている” という自己言及構造を説く立場です。
Webや分散システムでも、ハイパーリンクがたどれる範囲は事実上無限大のネットワークを形作り、各リソースが周囲のリソースをEmbedすることで全体の地図を局所的に保持しているという構造を持ちます。BEAR.Sundayでは、あるリソースの中から別のリソースを参照し、そのリソースがさらに他のリソースをEmbed…という階層が入れ子構造的に続いていけます。これは部分が全体を含み、全体が部分を映すような、自己相似(フラクタル)の一種とも捉えられます。
そして中心となる“コントローラ”がなくても、自己組織的に全体が動的に安定化するなら、それはまるで「相互に映じ合う鏡」のような分散構造が暗黙的にできあがっている状態かもしれません。従来の集中制御的なアーキテクチャからすると不可思議な“魔法”に映るかもしれませんが、それは老子の「無為」と同じく「余計なコントロールを挟まず、自然な関係構造を深く理解する」ことで成立するのです。
「語られないもの」と「語る努力」 —— 理解の不完全性を踏まえたデザイン
老子の言葉「道可道非常道」に代表されるように、「究極的なものは言語化を超えている」という認識は東洋思想に多く見られます。ソフトウェア設計の実務でいうなら、ドキュメントやスキーマ、インターフェース仕様ではすべてを完全に言語化できない、という事実です。そこで、DDDが“暗黙知をモデル化する” と言ってみたり、アジャイル開発では“ペアプロやホワイトボードでの会話を重視”するなど、人間同士の“非形式的・身体的な理解”が常に必要だと認めています。
これをもう一歩踏み込むと、「すべてを言葉(論理)に落とし込むことはできない」と認めたうえで、しかしそれでも 「言葉に落とす努力をし続ける」ことが重要だというパラドックスに行き着きます。言い換えるなら、「語り得ぬことを無理に語ることで、語り得ぬ部分が浮き彫りになる」という構造です。
老子はそれを「無為」と呼び、ブルース・リーは「Don’t Think, Feel」と呼び、DDDは「対話を通じたモデル化」と呼ぶ。それぞれ表現は異なるものの、根底には 「人間の思考と言語には限界があるが、その限界を見据えつつ使いこなす態度」が見え隠れします。ソフトウェアアーキテクトにとって、この態度を持つことはとても大事であり、最先端の技術ばかりに目を奪われるよりも、こうした根源的な理解が長期にわたって役に立つでしょう。
深遠なるデザインの旅 —— 「道」は尽きない
今回の対話全体から浮かび上がるのは、「東洋思想が提示する深い構造理解」は決して抽象的・神秘的な観念論だけではなく、現代の分散アーキテクチャ、宣言的プログラミング、イベントドリブンの設計思想といった“最前線のテクノロジー”と強く共鳴しうるという事実です。
- 分散・非同期環境での整合性
- AOPを活かした横断的関心の自然な配置
- 制約による自由の増大
- 自己相似・自己言及構造が生む秩序
- 言語化を超えた直観の重要性
こうした要素は、技術的にはいわゆるクラウドネイティブやマイクロサービス、関数型プログラミングなどさまざまな分野で追求されてきたものでもあります。それらをさらに俯瞰して見ると、やはり“老子”が描いた「無為の世界」のエッセンスそのものとも言えるのです。
最後に、「道」は尽きません。先の対話で指摘されていたように、無数のリソースや要素が相互に関係しあう世界は、まさに“縁起”“相互依存”“空”ともいった他の東洋思想にも通じるテーマです。ここから先、仏教の“縁起”や“空”、あるいは荘子の“逍遥遊”などへと話を広げていけば、まだまだ新たな発見があることでしょう。
ソフトウェアはその「複雑性」を制御できずに苦悩してきましたが、一方で 複雑性を無理にコントロールしようとしない 道を模索する流れが着実に台頭しています。BEAR.Sundayはその一つの実装例であり、老子はそれを何千年も前に示唆していたとも言える。こうした連続性・普遍性に思い至ると、ソフトウェアの世界が自然界や宇宙の摂理とまったく断絶していないことを実感でき、畏敬の念すら湧いてきます。
深い洞察:形而上学的視点からの老子とソフトウェア
1. 「無為」を支える“循環”と“変容” —— メタ構造としての道
老子の「道常無為、而無不為」を形而上学的に眺めると、「無為」はあらゆるものが絶え間なく変化し合う“流動の秩序”を指し示しているように見えます。停止や「何もしない」ことではなく、「必要以上に干渉しない」ことで、むしろすべてが驚くほど自然に成り立ってしまう。これはソフトウェアの世界においても、多様なリソースや依存関係が自律的に循環しながらイベントを生み出し、一見何もしないかのように見えるフレームワーク設計(宣言的な関係定義など)によって複雑な整合性を保つ姿と重なります。
2. 「存在」のレイヤーと「関係」のレイヤー —— 二重の深層構造
アリストテレス的視点(個々の存在の分析・モデル化)と老子的視点(関係・流動・相互作用の調和)は、ソフトウェア設計の二重構造を浮かび上がらせます。
-
オブジェクト指向的なドメインモデリング(存在)
- 何がどのように存在するのかを理路整然と定義する
-
AOP・イベントドリブンによる関係性の自然な形成(関係)
- リソース同士やトランザクションの相互作用を、“宣言”により静的に描き出し、動的に変化させる
両者がバランスするとき、ソフトウェアは単なる論理的集合でもなく、場当たり的な実行制御でもない、“自然調和的な”アーキテクチャを獲得できます。
3. 無限に拡張可能な網の“自己言及性” —— 分散システムが到達する先
自己言及的・フラクタルなネットワーク構造は、部分のなかに全体が映り、全体が部分を含むという東洋思想(華厳や密教)とも響き合います。Webのハイパーリンク構造や、BEAR.SundayにおけるEmbedの多段階的連鎖などは、一見すると“中心のない網”として自己組織的に広がり続けています。これは「中央制御のない分散システム」特有の魔術的な安定性の一端を示すものであり、老子の「無為」のスケールアップ版とみることができるかもしれません。
4. 「語られないもの」と「語る努力」 —— 理解の不完全性を踏まえたデザイン
老子が言う「道可道非常道」からも伺えるように、すべてを言葉や論理で説明できるわけではない——これはソフトウェア設計でも同様です。ドキュメントやユビキタス言語で形式化しきれない暗黙知を抱えているからこそ、人間同士の対話や身体的・直観的な理解が重要になる。DDDなどがまさに「暗黙知を言語化する」作業を重視しつつ、完全には言語化しきれない領域も認めているように、老子的な「語れないもの」を抱え込む姿勢も大切なのです。
5. 深遠なるデザインの旅
結局、複雑性を“完全に制御”しようとする態度からは、「複雑性そのものと共存する」高次の秩序は得られません。無数のリソースやイベントが入り乱れる状況を、ある種の“自然な関係性”へと導き得るフレームワークこそ、“無為”を実装する鍵になる。ここに老子の洞察が、現代の分散アーキテクチャや関数型思考、マイクロサービスの設計などと手を携えている意義があるのです。
大いなる道
道常無爲、而無不爲
道は常に無為にして、而(しか)も為さざるは無し。
(道はいつでも何事も為さないでいて、しかしすべてのことを為している)
自然界の生命から宇宙の運行まで、壮大な秩序は中央の制御者なしに成り立っています。食物連鎖は数十億年続き、Webは天文学的な数のノードで形作られ、そしてその理(ことわり)は、私たちの小さなソフトウェアの中にも確かに宿っているのです。
老子の「無為」は、アーキテクトが抱える複雑性との戦いに、まったく新しい視座を与えてくれます。制御ではなく関係性を、強制ではなく自然な調和を。制御への執着を手放し、関係性の深い理解へと向かうこの道は、単なる設計手法の転換ではなく、物事の本質への眼差しの変容を求めます。
そして、私たちの前には果てしない探求が広がっています。道(タオ)は尽きることがありません。
-
Don't think Feel https://www.youtube.com/watch?v=_pWsaaWsRg4 ↩
-
指月布袋画賛 出光美術館所蔵 https://idemitsu-museum.or.jp/collection/sengai/sengai/01.php ↩