マイペースなRailsおじさん

Ruby、Ruby on Rails、オブジェクト指向設計を主なテーマとして扱います。だんだん大きくなっていくRuby on Rails製プロダクトのメンテナンス性を損なわない方法を考えたり考えなかったりしている人のブログです。

"Ask Me Anything" by DHH での質問と答え part2

ここにいる全員にあなたのようにStimulusとturbolinksを使うことを薦めますか?

まず第一に、ブログ、カンファレンスあるいはtwitterで人気のあるものと、実際に作られているアプリケーションで人気のあるものには違いがあります。 私は、それらの間には大きな違いがあるということに気が付きました。 今のところのブログ、カンファレンス、Twitterで人気のあるものは、react.jsやvue.jsあるいは他のツールを使ってたくさんのJavaScriptを記述するものです。 これらは、私には人気があるわけではなくとても誇張されているようにみえるのです。

私はそういったことの見極めについておそらくエキスパートです。 なぜなら、かつてRubyRailsの利用についてまた誇張されていたからです。 2000年台中期に、RubyRailsが人気になったとき、みんながそれについて語っていました。 しかし、実際に書いていたのは一部の人々だけです。

たくさんの人と話をしてみて、turbolinksやstimulusや少ないJavaScriptのアプローチが好きな人がたくさんいるということに気がついたんです。 そういった人々はあまり声を大にして主張しません。 皆さんは彼らの主張を、重厚なJavaScriptフレームワークを使っている人たち程は聞かないでしょう。 ときどき人々は、声を大にして主張されているものが人気のあるものだと誤解してしまいます。 もう一つ言いたいことは、ほとんどのアプリケーションはturbolinksやstimulusのみを使ってシンプルにスタートし、必要性が高まったとき、より洗練された、あるいは複雑なフレームワークに移行したほうがいいということです。

たくさんのアプリケーションがごく僅かなフォームを扱うだけであっても、とても洗練されていて複雑なJavaScriptを備えてスタートしてしまっていることは残念に思います。 ほとんどのアプリケーションの基本的な要求は、10年前と変わっていません。すなわちデータベースを扱うCRUDアプリケーションを作ることです。 そう言うと、それは良くない、もっと洗練されたアプリケーションを作ろうという野望を持つべきだと考える人がいます。 私はそれはくだらないことだと思います。

我々が今日作っているような情報技術における大多数は、良い方法に向かっているとは言えません。 なぜなら、我々は良くしているのではなく、たくさんのアプリケーションにJavaScriptフレームワークを導入するなどの理由で複雑にしてしまっているからです。 多くのアプリケーションは、よりシンプルな方法で開発することで少数の開発者でのデリバリーを高速化した場合などは、良くなったと言っていいでしょう。

BaseCampでの経験で言えば、我々が作ったすべての要素の中で極稀にそういった種類のフレームワークを必要とします。 BaseCampはどちらかといえば、react.js, vue.jsのようなフロントエンドフレームワークを使いサーバがJSONだけを返すようなスタイルが完璧にはフィットしない大規模アプリケーションの典型です。 私は、そのようなスタイルがフィットするアプリケーションは人々が思っているよりも一般的でないと考えています。

あなたはajaxやcoffee scriptを広めました。それって過ちだったのでは?

そうですね。私の失敗です。

それは当初からの計画でしたか?(この辺質問よくわからない)

もっと簡単にしようという思いがありました。 そして、多くのWebアプリケーション、ほとんどのWebアプリケーションは、JavaScriptを使うことで改善できるということに気づきました。もしJavaScriptを全く使えないなら、アプリケーションは良くないものになってしまいます。ただ、どれくらい多く使うかについては選択の余地があります。私はJavaScriptは少量のふりかけとして使うなら、うまく作用すると思います。少しの塩が(料理の)うえに乗っているだけなら風味を与えてくれますが、もしお皿が塩でいっぱいになってしまったら美味しくありません。これは現実にいつも起こっていることです。

人々は、新しいアイディアや進歩を手にしたとき、そのアイディアでどこまでもやって行きたいと思ってしまいます。だってこんなに素晴らしいアイディアなんだから、もしこれをすべてのことに使ったらどうだろうかと考えてしまうのです。そして、すべてのことに使おうと試行錯誤したあとで、悪いアイディアだったということに気づくのです。

今朝、yamlと、yamlXMLと同じ轍を踏んで悪いプログラミング言語として使い始めてしまうかについての記事を読みました。 初めは設定ファイルとして使いますが、次第に条件分岐や変数をはじめプログラミング言語で使える要素を使おうとし、それにもかかわらず設定ファイルとして扱おうとしてしまうために巨大な化け物に変貌してしまうのです。 これは、一度良いと思ったものを使い始めてしまうときの状態とすこし似ています。

良いものは、限られた範囲での特定の運用ではうまくいきます。しかし、詰め込みすぎてしまうと途端に破綻します。

RubyRailsについても、同じようなことが言えます。 これは最高だ!と思うと、適していないことであっても全て同じものを使ってしまうのです。 もともと考えられていたよりも、Rubyrailsの適用範囲は広がっているように思います。 一部はアーキテクチャの優先事項の問題です。

必ずしもいつも正しい方法があるとは考えないほうが良いでしょう。 Webの美しさは、バックエンドでどんなプログラミング言語でも利用できる多様性にあるのです。 私がWebアプリケーションをRubyで書く一方で、他の人はPythonで、また他の人はGoでもJavaでも書くことができて、その上ユーザーはそんなことを気にしないのです。これはwebの固有かつとても特別な特徴です。ほとんどのソフトウェア開発プラットフォームは、特定の開発環境に大きく依存します。iosのアプリを作りたいならばswiftを使わなければならないし、 Androidのアプリを作ろうと思ったらJava を勉強しなければなりません。Web ならそんなことは気にしません。C でもBASICでも、HTMLを生成できる言語なら何でも使うことができます。だから、どれぐらいのJavaScript が使われていればいいのかっていうことだってユーザーは気にしません。シンプルに作ろうが複雑に作ろうが素早く作ろうがユーザは気にしません。Web の素晴らしいところはそういった多様性を許容できるところです。他の開発プラットフォームと違って、人が違えばアイディアも違います。そういったところが Web の本当に美しいところだったと考えています。