エンジニアリング哲学:まつもとゆきひろ(Matz)

要点
- 機械ではなく人間のために設計する。 Matzはプログラマーの喜びを目的関数に据え、その代償はシリコンに払わせました。あらゆる構文上の選択は、「バイトがどれだけ速く動くか」よりも先に「読む人がどう感じるか」に答えています。
- 驚き最小とは「私」の驚きが最小であること。 この原則は初心者の期待を集計したものではありません。一人の熟達した作者が自分自身のいら立ちを最小化したものであり、その尺度はRubyをよく学んだ「後で」測られます。
- MINASWAN——文化は設計の成果物である。 「Matzは優しい、だから私たちも優しい」という言葉は、言語のコミュニティが文法から下流に偶然生まれるものではなく、設計できる表層であることを示しています。
- Rubyは一つの趣味を徹底して貫いたもの。 その一貫性は統合から生まれています——Perl、Smalltalk、Lisp、Ada、Eiffelを委員会の平均値ではなく単一の声へと調和させたのです。
原則
「私にとって人生の目的の一つは喜びを得ることです。プログラマーはプログラミングの創造的な側面に集中できるときにしばしば喜びを感じます。だからRubyはプログラマーを幸せにするように設計されています。」——Yukihiro Matsumoto1
ほとんどの言語設計は機械に最適化されています。コンパイル速度、メモリ配置、命令数——シリコンが気にかけることばかりです。Matzはその優先順位を逆転させました。キーボードの前にいる人間こそが重要な対象であり、機械の仕事はその人間に仕えることだと決めたのです。「機械は人間に仕えるべきです」と彼は言います。「プログラマーはしばしば無意識に機械に仕えてしまいます。機械にあなたへ仕えさせましょう。」2
ここでいう喜びは、工学を装った曖昧な感情ではなく、厳しい設計上の制約です。人間の喜びが目的関数であるなら、あらゆる構文の選択、あらゆるメソッド名、あらゆるデフォルトは、「バイトがどれだけ速く動くか」ではなく「読み書きする人がどう感じるか」という問いになります。Matzはこのトレードオフを明示的かつ正直に示しました——Rubyは機械のサイクルを費やしてプログラマーの快適さを買う、と。同じ信念が趣味を装飾ではなく構造的なシステムにするのです——作業をする人の体験が、最後に取って付けたものではなく、荷重を支える中心的な関心事になります。
一つの決定がその後のすべてを支配しています——機械ではなく人間のために設計する。 構文も、文化も、コミュニティのモットーも、すべてその下流にあります。本稿の残りでは、一人の人間が自分自身の幸福を追い求めた営みが、いかにして揺るぎない工学的立場へと固まっていったか——そしてなぜ「人間に仕える」ことが「機械に仕える」ことからの後退ではなく、それと同じくらい厳格でありうるのか——をたどっていきます。
背景
Yukihiro Matsumotoは1965年4月14日に日本の大阪府で生まれ、4歳のときから鳥取で育ちました。3 彼は自分を言語オタクだと述べています——言語学者ではなく、「プログラミング」言語のオタクです。高校卒業まで独学のプログラマーであり、筑波大学で情報科学の学位を取得し、そこでプログラミング言語とコンパイラを専門とする研究室に在籍していました。3 まず魅了が先にあり、Rubyはそこから生まれた成果でした。
彼は1993年2月にRubyと名付けました——その名前は、コードが一行も書かれる前に、同僚の石塚圭樹とのオンラインチャットで浮かんだものです——そして以後数年かけて作り上げていきました。13 動機は不満でした。「私は本当に、純粋なオブジェクト指向で使いやすいスクリプト言語が欲しかったのです」と彼は説明します。「探してみましたが、見つかりませんでした。」4 Perlは強力でしたが、彼の趣味からすると真にオブジェクト指向とは言えませんでした。Pythonはオブジェクト指向でしたが、彼の趣味からすると十分に心地よくありませんでした。そこで彼は自分自身が使いたい言語を作ったのです。最初の公開版を1995年12月21日にリリースしました。3
その名前はちょっとした冗談でした。二人は宝石としてのRubyに落ち着きました——Rubyが部分的に応えていた言語であるPerlへの目配せです。パール(真珠)、そしてルビー——増分的なアップグレードのように名付けられた後継者です。4 長年、Rubyは主に日本国内の現象であり、メーリングリストもドキュメントも日本語でした。世界的な躍進は後になって、外部からやってきました——David Heinemeier HanssonがRubyの上にRuby on Railsを構築し、Railsが2000年代半ばにRubyを世界の残りの地域へと運んだのです。4 一人の人間が自分自身の幸福のために作った言語が、ある世代のWebアプリケーションの基盤となりました。
仕事
Rubyの設計——喜びと驚き最小の原則

Rubyについて最も多く引用される考え方が「驚き最小の原則」です——言語は期待どおりに振る舞うべきであり、そうすれば道具ではなく問題に注意を注げます。Matzはこの原則を支持しつつも、よくある誤読を正します。「驚き最小の原則とは、『私』の驚きが最小という原則を意味します」と彼は言います。「そしてそれは、Rubyを非常によく学んだ後での驚き最小の原則を意味するのです。」5
その訂正が、哲学のすべてを一文に凝縮しています。彼はプログラマーにアンケートを取って期待値を平均したわけではありません。「私」のいら立ちを最小化するように言語を設計したのです——自分自身の作者を喜ばせる言語、つまり流暢で要求の厳しい一人の利用者を喜ばせる言語なら、他の人も流暢さに達すれば喜ぶだろうという賭けに出たのです。「私はプログラミング中の自分のいら立ちを最小にしたかった、だからプログラミングの労力を最小にしたいのです」と彼は言います。「私自身がプログラミングを楽しみたいのです。」5 Rubyは、規模を拡大した個人的な言語です。その一貫性は委員会の一貫性ではありません——一つの趣味を徹底して貫いた一貫性です。
機械ではなく人間のために設計する
Matzはソフトウェアを、ハードウェアへの命令の集まりではなく、人のためのメディアとして扱います。「人間という要因を甘く見てはいけません」と彼は言います。「私たちはコンピューターの前にいますが、それはメディアです。私たちは人間のために、人間とともに働いているのです。結局のところ、私たちの作業のほとんどは人間に関わっています。」5 彼はこの主張をスローガンの先まで押し進めます——Matzにとって、インターフェースこそが製品そのものなのです。「もしシステムのインターフェースが悪ければ、誰も使いません。ですから、ユーザーに対してであれ他の機械に対してであれ、システムのインターフェースや表層は非常に重要なのです。」2
その帰結が、機械の都合に従属することへの拒否です。人間と計算機の関係について問われたとき、Matzはずばりこう答えました——「私たちが主人です。彼らは奴隷です。」6 機械はプログラマーの意図に仕えるために存在するのであり、人間にCPUのように考えることを強いる言語は、その関係を逆さまにしています。Rubyのブロック、すべてがオブジェクトであるというモデル、読みやすいメソッド名——Array#each、Integer#times、String#upcase——これらはすべて実装の複雑さを費やすことで、表層が意図のように読めるようにしているのです。
MINASWAN——設計の成果物としての文化
Rubyの最も珍しい産物は機能ではありません——コミュニティの規範です。Matzは優しく忍耐強い物腰で知られており、その気質が一つのモットーへと広がりました——MINASWAN——「Matzは優しい、だから私たちも優しい。」7 Rubyの初期、メーリングリストで議論が白熱したとき、コミュニティのメンバーはこの言葉を持ち出して、より温かい調子に整えようとしました。それは広がり、やがてアイデンティティになりました。8
ほとんどの言語設計者が見落とす教訓は、「文化」もまた設計の表層だということです。言語は文法以上のものです——質問をすれば寛大な答えが返ってくる体験であり、あなたに理解してほしいと気にかけた作者によるライブラリを読む体験です。Matzは構文を設計し、そして自らの手本によって、その周りの社会的な姿勢もまた設計しました。プログラマーを幸せにするために作られた言語が、優しくあることに尽くすコミュニティを育てた——同じ価値観が両方を駆動していたからです。コミュニティとは、人に適用された驚き最小の原則なのです。
mruby——制約された空間における哲学
2012年4月、Matzはmrubyをオープンソース化しました——フルセットのRubyでは重すぎる場所、すなわちマイクロコントローラー、組み込みシステム、民生機器などで動くように作られた、軽量で組み込み可能なRubyの実装です。9 これはISO/IEC 30170 Ruby仕様のサブセットに準拠し、バイトコードコンパイラと仮想マシンを備えた小さなインタープリターとして提供され、Luaと同じようにCやC++に組み込めます。10
mrubyが興味深いのは、まさに哲学を圧力下で試すからです。RAMが数キロバイトしかなく、サイクルに余裕がないとき、「人間のために設計する」は生き残れるのか。Matzの答えは、Rubyの表現力を保ちつつランタイムの重さをそぎ落とすこと——組み込み開発者をCのレベルまで引きずり下ろすのではなく、Rubyを書く喜びをファームウェアの層へと持ち込むことでした。人間中心の賭けは、それに最も敵対的な場所においてさえ成り立ったのです。
手法
Matzの手法は、共感を設計の規律へと形式化したものです。繰り返し現れる動きは、「機械にとって何が正しいか」ではなく「その人は何を感じるか」を問い——そしてその答えが要求する実装コストを、いくらであれ支払うことです。
二つ目の動きは統合です。Rubyは公然と派生的です——Perlの実践性と正規表現、Smalltalkの純粋オブジェクトモデルとメッセージパッシング、Lispの柔軟性、AdaとEiffelの断片。4 Matzは新しいパラダイムを発明したわけではありません。彼は敬愛する言語から最良のアイデアを盗み、それらを一つの首尾一貫した声へと調和させました。その趣味を発揮できる設計者はわずかです——発明するのではなく取ってくる規律、そして借りてきた部品を衝突させるのではなく調和させるという、さらに難しい規律。驚き最小の原則は、部分的には「内的な」一貫性なのです——Rubyのある一角を学べば、次の一角は最初の一角が教えたとおりに振る舞います。
三つ目の動きは、トレードオフについての正直さです。Matzはベンチマークをひそかに最適化しながら温かさをうたうのではなく、Rubyが速い選択肢だと装ったことは一度もなく、それをはっきりと口にしました。コストは現実的で具体的です——Rubyではすべてがオブジェクトであり、整数でさえ第一級のオブジェクトなので、算術は生の機械命令を実行するのではなく、それに+というメッセージを送ることで行われます。14 5.timesや(1..n).mapの便利さ——数を、話しかけられる相手であるオブジェクトとして扱うこと——は、Cのintなら決して負わないディスパッチとアロケーションのオーバーヘッドという形で支払われます。Matzは読みやすい表層を選び、その勘定はランタイムに引き受けさせました——これこそ、はっきりと述べられた賭けそのものです。
影響の連鎖
彼を形づくった人々
Larry WallとPerl。 RubyはPerlの実践的でやり遂げる感覚と、その正規表現のDNAを受け継ぎました。Matz自身、RubyをPerlへの応答として位置づけています——実用性を保ちつつ、彼が見て取った真のオブジェクト指向の欠如を正すものとして。(直接的な影響)4
Smalltalk。 「すべて」がオブジェクトであり——整数も、クラスも、nilも——計算はメッセージを送ることで起こるという信念は、Smalltalkから来ています。これはRubyのオブジェクトモデルにおける最も深い構造的な継承です。(直接的な影響)4
Lisp、Ada、Eiffel。 Lispは柔軟性と、言語はプログラマーに合わせて曲がるべきだという感覚をもたらしました。AdaとEiffelは、構文と設計の他の具体的な断片をもたらしました。Rubyはその統合です。(形成的な影響)4
彼が形づくった人々
Rails時代のWeb。 Ruby on Railsは、Rubyをある世代のスタートアップの標準言語にし、「開発者の幸福」に商業的な論拠を与えました——幸せなプログラマーはより速く出荷するので、人間中心の言語は感触だけでなく経済性でもプロジェクトを勝ち取ったのです。
ある世代の基準となる期待。 Rubyの後、プログラマーは言語が「心地よい」ことを期待するようになりました——散文のように読め、許容してくれ、喜ばせてくれること。その期待は、新しい言語が真剣に受け止められるために越えなければならない基準を作り直しました。
CrystalとElixir。 Crystalは、LLVMバックエンドを通じてネイティブコードへコンパイルしながら、Rubyの構文をほぼそっくり借りています。11 José ValimによるBEAM向けの関数型言語Elixirは、Rubyのエルゴノミックな感覚を並行処理の世界へと運んでいます。Valimは、その借用された構文の多くについて自身の「Rubyでの以前の経験」を挙げています。12 Rubyの美学は、そのランタイムよりも長く生き延びたのです。(様式的な系譜)
一貫した筋
ここに生産的な緊張があります。Matzは人間の幸福に最適化し、そのために機械のサイクルを費やしていると正直に認めています。工学のもう一方の極は機械に最適化します——John Carmackはフレームが予算に収まるまでサイクルを数え、Linus Torvaldsは特殊ケースを消し去るデータ構造としての「良い趣味」を擁護します。CarmackとTorvaldsはハードウェアが何に値するかを問い、Matzは人間が何に値するかを問います。どちらの極も間違ってはいません。最良のシステムは両者のあいだの論争の中に宿ります——人が書いて楽しいほど表現力豊かであり、かつ機械を侮辱しないほど規律正しい。Matzは、「人間のために設計する」が単なる慰めではなく、正当で厳格な工学的立場であることの証明なのです。(シリーズの橋渡し)
私がここから受け取るもの
私は開発者向けのツールやAIエージェントの基盤を作っており、Matzの賭けこそ私が繰り返し行っているものです——ループの中にいる人間こそが重要な対象だ、と。コーディングエージェントは、プログラミング言語と同じく、人の意図と機械の実行のあいだのインターフェースです。もしそれがあなたを驚かせ、抗い、問題についてではなく機械のように考えさせるなら、内部がどれほど巧妙であろうと、それは失敗しています——内部の存在意義は、体験を人にとって読み解けるものにすることそのものなのですから。だからこそ私は、表層を正直に保ち、スタックを薄く保ちます——ノービルド宣言は、ツールチェーンに適用された驚き最小の原則です。そしてMatzがRubyを速いと装うことを拒んだように、私もトレードオフを隠すよりは正直でありたい——品質こそが唯一の変数であり、プログラマーの幸福は品質に対立するものではなく、その一部なのです。
FAQ
Yukihiro Matsumotoの工学哲学とは何ですか?
Matzは、機械の効率ではなく、人間の幸福と生産性のためにプログラミング言語を設計します。彼が掲げる目的はこうです——「Rubyはプログラマーを幸せにするように設計されています。」1 彼はプログラマーの体験——読みやすさ、喜び、驚き最小——を第一の設計上の制約として扱い、それに仕えるための正直な代償として、より遅いランタイムを受け入れます。「機械は人間に仕えるべきです」と彼は言います。「機械にあなたへ仕えさせましょう。」2
Rubyにおける驚き最小の原則とは何ですか?
それは、言語が熟練した利用者の期待どおりに振る舞い、摩擦を最小化すべきだという考え方です。Matzはそれが「『私』の驚きが最小という原則」を意味すると明確にしています——彼は流暢な利用者としての自分自身のいら立ちを最小化するようにRubyを設計したのであり、初日の初心者にとっての驚きではなく、「Rubyを非常によく学んだ後での驚き最小の原則」なのです。5
MINASWANとは何を意味しますか?
MINASWANは「Matzは優しい、だから私たちも優しい」を表します——Matsumotoの優しく忍耐強い物腰から育った、Rubyコミュニティのモットーです。初期のRubyistたちは、メーリングリストで寛大な調子を整えるためにこれを持ち出し、やがてRubyの文化的アイデンティティの一部となりました。78 それは、言語のコミュニティそれ自体が設計の表層であるという考えを反映しています。
Rubyに影響を与えた言語は何ですか?
Rubyは意図的な統合です。Perlの実践的な感覚と正規表現、Smalltalkの純粋オブジェクトモデルとメッセージパッシング、Lispの柔軟性、そしてAdaとEiffelの要素を取り入れました。Matzは新しいパラダイムを発明するのではなく、敬愛する機能を一つの首尾一貫した言語へと組み合わせたのです。4
出典
-
Bill Venners, “The Philosophy of Ruby: A Conversation with Yukihiro Matsumoto, Part I.” Artima Developer, 2003年9月29日。「私にとって人生の目的の一つは喜びを得ることです……だからRubyはプログラマーを幸せにするように設計されています。」 ↩↩
-
Bill Venners, “Matz on Craftsmanship: A Conversation with Yukihiro Matsumoto, Part III.” Artima Developer, 2003年。「機械は人間に仕えるべきです……機械にあなたへ仕えさせましょう。」また、システムの表層としてのインターフェースについて。 ↩↩↩
-
“Yukihiro Matsumoto.” Wikipedia。1965年4月14日に大阪府で生まれ、4歳から鳥取で育つ。筑波大学情報科学。最初のRubyリリースは1995年12月21日。mruby(2012年4月)。 ↩↩↩
-
Sinclair Target, “The Ruby Story.” Two-Bit History, 2017年11月19日。1993年に開始。「私は本当に、純粋なオブジェクト指向で使いやすいスクリプト言語が欲しかったのです」。宝石にちなんで/Perlへの目配せとして石塚圭樹と命名。Perl、Smalltalk、Lisp、Ada、Eiffelからの影響。「世界中のすべてのプログラマーが生産的になり、プログラミングを楽しみ、幸せになる手助けをRubyができることを願っています」。Rails主導の世界的躍進。 ↩↩↩↩↩↩↩↩
-
Bill Venners, “The Philosophy of Ruby, Part I.” Artima Developer, 2003年。「驚き最小の原則とは『私』の驚きが最小という原則を意味します」。「私はプログラミング中の自分のいら立ちを最小にしたかった」。「人間という要因を甘く見てはいけません……私たちは人間のために、人間とともに働いているのです。」 ↩↩↩↩
-
“Yukihiro Matsumoto.” Wikiquote, The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I(Bill Venners, Artima Developer, 2003年)を引用。「私たちが主人です。彼らは奴隷です。」 ↩
-
“Yukihiro Matsumoto.” Wikipedia。「Matzの物腰は、Rubyコミュニティに一つのモットーをもたらした——『Matzは優しい、だから私たちも優しい』、一般にMINASWANと略される。」 ↩↩
-
“MINASWAN.” Wiktionary。「Matz is nice and so we are nice」の頭字語。Rubyの初期におけるコミュニティの調子の規範としての起源と用法。 ↩↩
-
“Mruby.” Wikipedia。mrubyはMatsumotoの指揮の下、2012年4月にオープンソース化された。制約された環境向けの軽量で組み込み可能な実装。ISO/IEC 30170のサブセットに準拠。 ↩
-
“mruby – Lightweight Ruby.” mruby.org。組み込み可能なインタープリター、バイトコードコンパイラ(mrbc)、仮想マシン。Luaと同様の方法でC/C++に組み込み可能。ISO/IEC 30170:2012準拠。 ↩
-
“Crystal (programming language).” Wikipedia。「Ruby言語にインスパイアされた構文を持ち……LLVMバックエンドを用いてはるかに効率的なネイティブコードへコンパイルする。」 ↩
-
José Valim, “Elixir Design Goals.” elixir-lang.org, 2013年8月8日。「Rubyでの私の以前の経験を踏まえれば、追加された構文の一部がRubyから借用されたのは自然なことです。」また、ElixirはBEAM(Erlang VM)上で動作する。“Elixir (programming language),” Wikipediaより。 ↩
-
“Ruby (programming language).” Wikipedia。「『Ruby』という名前は、1993年2月24日のMatsumotoと石塚圭樹のオンラインチャットの最中に、言語のコードが一行も書かれる前に生まれた。」 ↩
-
“class Integer.” Ruby Core Reference。「Integerオブジェクトは整数値を表す。」
self + otherのような算術演算子は公開インスタンスメソッドとして文書化されており、整数の算術は生の機械命令ではなく、オブジェクトに対するメソッドディスパッチを介して実行されることを意味する。 ↩