なぜRubyは楽しいのか。 なぜRubyをキメると気持ちいいか。 その理由が垣間見れたと思います。
binding.pry
に代表されるように、テキスト・shell・エディタと言ったCLIベースで完結する世界観や、
rake
や bundle
のような適切な粒度にわけられたツール1とシンプルなDSL、
guard
のようなソフトウェアを呼び出すソフトウェア2など、
UNIX哲学 に非常に親和性が高いといえます。
もちろんRuby自体も、AWKやPerlが果たしてきた役割の延長線上にいる、UNIX文化圏のプログラミング言語です。 標準入出力を簡単に扱え3、UNIXから見たらRubyは全く 奇をてらわない インターフェイスのソフトウェアなのではないでしょうか。
Rubyの世界は 異常に 名前にこだわる文化があります。
最近では then
の名前がなかなか決まらず喧々諤々の議論をしていた記憶があります。
メソッド名にエイリアスが付けられるのもRuby以外ではまず見たことがない特徴です。
また、予約語でも構わずメソッド名にできてしまうなど、自由度はかなり高くなっています。
この命名のこだわりのおかげで、Rubyではとても自然なコードが書けます。 メソッドが、メソッド名から動きが想像できなかったり、予想外の動きをしたり4、 というような経験はほとんどしたことがありません。
また、Gem という名前に代表されるように、世界観の構築も非常に上手いと言えます。 そもそも、 たのしいRuby という概念が成立していることそのものが最強の世界観なのです。
Rubyは基本的にカッコを省略し、空白で区切ってコードを書くことが多くなります。
区切りが空白になると、見た目の密度が下がり単純に美しさを感じるようになります。
自然言語のような雰囲気もあり、 RSpecに至っては まるで普通に英語の文章書いてるみたい だと言われるほどです5。
また、do-end
ブロックのおかげでカッコを使ったとしても対称性の高い綺麗な見た目になります。
見た目の美しさは想像以上に気持ちがよく、思考も明瞭になり、コードを書く楽しさに直結します。
とにかくオープンクラスはヤバイ。 既存の言語を弄ってしまえるという 万能感 は中毒になる可能性すら感じます。
また、オープンクラスというひとつ間違えればいとも簡単に世界が破滅する仕様のおかげで 他者のコードと協力する と言う文化が強く、 ツールの対立などが起こりにくくなっているのではないかと思います。 RSpecとminitest、Railsとsinatraのように、だいぶ好みの違うものや規模感が違うもが2種類という感じで、対立というよりは両立しているといっていい状態でしょう。 もちろん多様性が低く停滞しているのではなく、色々新しい挑戦が生まれては 有用性が認められRailsに取り込まれる という歴史を繰り返してきました。
不思議なことに、Rubyコミュニティでは常に 多様性は善 と言われ続けているのに、 一方で実際の状況を見てみると結構みんな 長いものに巻かれている んじゃないかなぁと思うことが多々あります。
一言で言うとRubyは呼吸をするように自然にコードが書けるから楽しいし気持ちいい。 あと世界観があって万能感も得られるので実は 俺TUEEE系異世界ファンタジー 6なのではないか?