
俺の関数型プログラミングは宇宙だ!スピノザの汎神論から読み解くコードと世界の神秘
関数に宿る宇宙:スピノザ哲学で読み解く関数型プログラミング
どうも、ビジネス哲学芸人のとよだです。
さて、今回の“ビジネスと哲学とITの交差点”では、「関数型プログラミング と スピノザの汎神論/汎自然観」という、ちょっと変わったテーマにトライしてみようと思います。前回の「ポリモーフィズム と ドゥルーズの『差異と反復』」も相当マニアックでしたが、今回も負けず劣らずディープでワクワクする領域ですよね。
さらに、オブジェクト指向との対比を絡めながら見ていくことで、関数型プログラミングの特徴とスピノザ的世界観の類似(あるいは面白ポイント)が、よりクリアに伝わるのではないかと思います。
もっとも、あくまでこれは「一種の比喩的思考実験」。
スピノザの哲学的概念とプログラミングの原理を直接かつ厳密に対応させようとすると、当然ながら無理が生じます。ここでは「ざっくり似た構造があるかも?」という発想で、読者の皆さんに新しい視点を提供できれば、というスタンスでお届けします!
1. オブジェクト指向と関数型プログラミングの違いをざっくり整理
オブジェクト指向(OOP:Object-Oriented Programming)の基本イメージ
世界を「モノ(オブジェクト)」として捉える
ソフトウェアを構成する要素をオブジェクト(概念上の“もの”)に分割。オブジェクトが状態(プロパティ)を持ち、メソッドで振る舞いを定義
たとえば「従業員オブジェクト」「注文オブジェクト」など、それぞれに状態や操作を持たせる。状態の変更とカプセル化
データをオブジェクト内部に隠蔽しつつ、メソッドを呼び出して状態を変化させる手法が中心。
関数型プログラミング(FP: Functional Programming)の基本イメージ
すべてを「関数」の合成として捉える
入力があって出力を返す“純粋関数”を軸に、プログラムのパーツを組み立てる。不変データ構造&副作用の排除
データは基本的に変更せず、新しい値を返す。外部状態を書き換えないので、テストが容易。決定論的な動きと合成可能性
同じ入力→常に同じ出力、という“数学的”な部分が多い。関数同士の合成もしやすい。
つまり、オブジェクト指向は「モノとその内部状態」を中心に考え、関数型は「入力→出力変換の連鎖」で世界を記述しようとするわけですね。
2. スピノザの“神即自然”とは? そこから何が見える?
さて、ここで登場するのがバールーフ・ド・スピノザ(17世紀の哲学者)です。彼は「神即自然」という独特の見方を提示しました。
唯一の実体
神(自然、宇宙)はただ一つの根源的な実体に他ならない、とする考え方。多様性は一者の表れ
たった一つの実体が多面的な属性・様相を持つので、私たちには多様な世界として知覚される。必然的因果律
宇宙に生起する出来事は、実体の本質から必然的に生じる。数学的・論理的に貫かれた構造を想定。
17世紀のヨーロッパでは、この「唯一の神 = 多様な自然」という捉え方は、当時の宗教観と衝突しやすく、とてもラディカルでした。
3. 関数型プログラミングとスピノザ的世界観をなぜ結びつけたくなるのか?
“一つの実体”vs“多様な現れ”
スピノザは「唯一の実体が、多様に姿を見せているだけ」と捉えます。
関数型プログラミングでは「すべてを関数(純粋変換)という統一原理で組み立てる」と考えるので、全体を大きな“関数ネットワーク”として見ることができる。
“必然的因果律”vs“決定論的な合成”
スピノザ的宇宙は、「ある要素が別の要素へと因果的につながっていくのは必然で、そこに曖昧さはない」と説く。
関数型プログラミングで副作用を排除すると、同じ入力が与えられれば常に同じ出力が得られる、という決定論の世界が生まれ、テストしやすさや並行処理のしやすさをもたらす。
ここではあくまでイメージの重ね合わせなので、「スピノザの哲学原理をそのままプログラミングに当てはめられる」というわけではない点はご留意ください。ただ、「一者からの多様展開」や「決定論的・数学的構造」というキーワードには、どこか通じる魅力があると思いませんか?
4. オブジェクト指向で考えがちな「状態」をどう扱うか
オブジェクト指向では「オブジェクト内部の状態を変化させる」のが基本スタイルです。プロパティを書き換えたり、メソッドの呼び出しで内部に何かを保持したりする。
例:myCar.speed = 60;
これは「myCarオブジェクトのspeedプロパティを60に更新」という状態変更。
一方、関数型プログラミングの世界では、この「myCar.speedを60に書き換える」のではなく、「speedが60になった新しいmyCarオブジェクト」を作って返す、といった発想をします。つまり“状態”という概念をできるだけ排除(あるいは明示的に管理)しようとするんですね。
「オブジェクト指向→モノを操作して状態を変える」「関数型→関数合成で常に新しい結果を得る」という対比を踏まえると、スピノザが説く「変化するように見えて実は一つの実体が持つ様相にすぎない」というイメージにも、何やら繋がりを感じないでしょうか?
5. “副作用を減らす”と“全体の秩序を保つ”——実利的なメリットは?
オブジェクト指向は「人間の感覚的な世界観(モノの塊)に近い」がゆえに分かりやすい反面、状態変化が乱立するとシステムが複雑化しやすいといわれます。
関数型は「入力と出力の変換を積み上げる」ので、デバッグやテストがしやすく、並行処理にも強い。その代わり、オブジェクト指向のように“自然とモノごとをモデリングする”のとはやや感覚が違う、とも言われます。
テストの容易性
関数単位で「同じ入力→同じ出力」を保証できるので、ユニットテストが組み立てやすい。並行処理との相性
不変データ構造のおかげで、複数のプロセスが同一のリソースにアクセスしようとする競合状態を抑制しやすい。デバッグの単純化
どの関数で何が起きているか追いやすい、というメリットがある。
スピノザ的に言えば(ちょっと大胆に言い換えるなら)「一つの原理(関数)に従う世界は、因果関係がクリアで混乱が少ない」。オブジェクト指向は「状態の変化を表現する」柔軟さがある一方、「副作用管理」が荒れると一気に収拾がつかなくなる危険もあります。
この“秩序を保ち、複雑性を抑える”という点に、関数型の魅力とスピノザの発想の「なんか似てるのでは?」を感じるわけですね。
6. ビジネス組織やプロセスに“関数的思考”を取り入れる?
オブジェクト指向的な組織運営は「各部署がそれぞれのプロパティや内部状態を持ち、連携して全体を動かしている」というイメージに近いかもしれません。
一方、関数型的な発想を採り入れるなら、以下のような工夫も面白いでしょう。
モジュール分割&明確な入出力
部署ごとに「入力(要求)→出力(成果物)」をハッキリ定義。状態を不用意に共有しない。不変データ的な記録管理
重要な決定やログは、原本を書き換えずにバージョン管理・履歴管理。後追いが楽で混乱も少ない。副作用(=不要な干渉)の最小化
お互いの責任範囲をしっかり区切って、調整が必要な部分だけインターフェース化する。
もちろん現実の組織は人間同士のコミュニケーションもあり、完全に関数的には割り切れません。ただ、「あちこちで状態が勝手に書き換えられて、誰が何をやっているか不明」といった状況を避けるためのヒントとしては、関数型的な発想は一考に値するはずです。
7. まとめ:オブジェクト指向と関数型、そしてスピノザ
最後に、この記事のポイントをざっくり整理します。
オブジェクト指向 vs 関数型
OOPは「モノ(オブジェクト)の状態変更」を中心に、現実世界をモデリングしやすい。
FPは「すべてを関数(入力→出力)で組み立てる」。不変データ&副作用排除で秩序を保つ。
スピノザの“神即自然”との類似点
スピノザの哲学では「唯一の実体」から多様な様相が生まれる。
関数型では「純粋関数」という一貫した仕組みが、多様なアプリケーションを形作る。
“必然的因果律”と“決定論的な関数合成”のイメージが、なんとなく重なる。
ビジネス現場への示唆
副作用(状態変化)の管理を慎重に行い、複雑性を増幅させない工夫をする。
明確なモジュール化や不変データの運用は、混乱を防いでテストもしやすい。
スピノザ的「一つの秩序を見出す」視点を借りれば、全体を俯瞰しやすくなるかも。
実際、オブジェクト指向と関数型のどちらが“より良い”という話ではなく、それぞれ得意な分野や表現力の強みが異なります。
ただ、「副作用や状態変化が増えすぎると、途端にシステムが複雑化してしまう」という悩みは多くの現場で共通ですよね。そこに“スピノザ的”に「秩序の一貫性」を求めるイメージを加えてみると、新しい発想やヒントが見えてくるかもしれません。
以上、“関数型プログラミング”と“スピノザの汎神論”を、オブジェクト指向との対比を交えつつ眺めるという回でした。ちょっと強引な比喩でもありますが、スピノザの「唯一の実体」という発想は、コードの世界を見直すきっかけとしてなかなか刺激的に働いてくれると思います。
次回もまた、色んな視点を縦横無尽に行き来しながら、ビジネスや哲学、ITの交差点を探検してみましょう!
参考文献・関連書籍
白米FMとは?
日米のIT業界で働く小学校からの友人2人が、最新トレンドから古の哲学思想まで気ままに語り合う人文知系雑談ラジオ。
コテンラジオ、超相対性理論、a scope等に影響を受け、一緒に考えたくなるような「問い」と、台本のない即興性の中で着地点の読めない展開が推しポイントです。
移り変わりの速い時代だからこそ、あえて立ち止まり疑ってみたい人。
他者の視点や経験を通して、物事に新しい意味づけや解釈を与えてみたい人。
自分の認知や行動を書き換えて、より良く生きる方法を一緒に探求しましょう。
※ポッドキャストの文字起こし版へのリンクはこちら(LISTEN)