Padrino 黒ミサ in 京都 (#padrino_sabbath) で言いたかったこと

The essentials of developing a web application

そんなに大層な話じゃないです。

速くて軽くてどこでも動く (セットアップが特殊じゃない) ものにしておけばメンテナンス、チューニングをするモチベーションは下がりにくいとおもいます。

それらの具体的な方法論については既に知見が溜まっていますし、僕の専門分野ではないし、今回の主旨から離れるので割愛。

確認程度です。

The history of web application framework

これも簡単なおさらいです。CGIはウェブアプリケーションというレイヤに縛られないものですが、WSGIなどの源流ともいえるのでさらっと紹介。
しかし資料にそれらを盛り込むのを忘れていた。WSGI, PSGI, Rackといった走りはCGIをウェブアプリケーションに一歩近づいたプロトコルです、という紹介をしました。

RailsSinatraのようにサクッと作るにはぜんぜん向いていないし、Sinatraで大規模開発をやろうとすると混沌としてくるし、まったく別ものです。言うまでもないよね。

Padrino and Sinatra

Sinatraは (Web) DSLとか呼ばれたりするわけですが、ではSinatraが定義するDomain, 世界とはなんなのか。

SinatraはHTTPアプリケーションを抽象化する言語・ライブラリで、HTTPプロトコルを抽象化したRackの上に被さっています。

そこにはいわゆるMVCのMは姿形もありませんが、MVCはあくまである種のウェブアプリケーションにおけるアーキテクチャのひとつでしかないので当然といえば当然です。

でもSinatraそれ自体に含まれていないからといって使えないわけではなく、むしろ組み合わせようとおもえばなんでも組み合わせられる。
組み合わせるコストはRailsなどのフルスタックと比べてずっと小さく済むはず。ただし、Railsはとてもコミュニティが巨大で、いろんなものが既に組み合わせようと試みられていたりする。
つまり、そもそも「自分でなんとかする」必要が少なかったりする。これはとても大きな強み。

また、SinatraはよりHTTPに肉薄したかたちでウェブアプリケーションを記述したいという潜在的な要求を見つけだし掬いあげた。これもまた重要。

今回は説明を省略したけど、Railsなどのフルスタックへのカウンターカルチャーとしてより疎結合フレームワークの流れもあって、しかしフルスタックに対する大きな流れたりえなかったのは、けっきょくアーキテクチャというか思想の大筋がフルスタックのそれらと近かったからなんじゃないかな、とおもっている。

ちなみに資料の中で "Specification beats Conventions" とあるけど、詳述は後にするとしてここでいう "Specification" とはHTTPのことです。

Padrino and Rails

Railsはいろいろな財産を築きあげました。正負清濁あわせて実に多くの。Padrinoは後発である強みを活かして、後世に継ぐべきものは継ぎ、そうすべきでないものは捨てよう、というかんじです。

"He guards Sinatra's World." とあるように、フレームワークとしての根本的な思想はSinatraのそれであり、その上にRailsの財産をうまく乗せてみよう、という試みであります。

PadrinoやSinatraRailsの違いはルーティングやコントローラの定義によく表れているとおもいます。
Railsはroutes.rbでURLとコントローラを関連づけるルーティングを行い、実際にリクエストが飛んできたら app/controllers/**/*_controller.rb へディスパッチされます。
PadrinoやSinatraはディスパッチャとコントローラがほぼ一体化しています。ルーティングが高速なのもこのあたりに拠るものでしょう。

また、Railsはコントローラをクラスとして表現しますが、PadrinoやSinatraではDSLで表現します。
RailsRubyの (OOP) アプリケーションをウェブアプリケーションとして動かすためのフレームワークであると言えるでしょうし、
PadrinoやSinatraは (抽象的な) サーバサイドHTTPアプリケーションをRubyに持ち込んだと言えるでしょう。

要するにパラダイムの違いです。

その他

僕がわりとくどめに「Railsといがみあう存在じゃないよ」って言ってるのは、べつに日和ってるわけではなくて、そもそもRailsを相手にしてもしかたないじゃん、ってことです。

Railsはいろいろな「規約」というレールがあって、それらにうまく乗れられればいいけど、乗れなかったら人身事故ものだよね、みたいなことはわりとよく言われることです。

またRailsは既に「それさえ覚えておけばメシ食える」ものになりつつあるかんじがしていて、コミュニティも成熟しています。
逆に言うと硬直しつつあるとも言えそうです。当然食い扶持がかかっている人も多いわけで、大きな変更を施すには一筋縄ではいかないでしょう。
Railsにはそういう「レール」もある、ということです。

個人などの小規模なウェブアプリケーション開発はモチベーションを維持するためにとにかく速く軽く作れないといけなくて、Padrinoは、そういう「おもしろそうなんだけど本人のモチベーションの傾きひとつで潰えてしまいそうなもの」を掬いあげる助けになれる、とおもっています。
活発ではありますがまだまだ若いプロジェクトです。Railsはコミュニティにすごい人たちが集まっていて、日本だけ見ても「Railsのすごい人」がいます。けど、Padrinoにはそういうコミュニティの熟成というか安心感みたいなものがなくて、逆にそれが僕にはとても魅力的に見えたのです。有り体に言えば「ここでなら活躍できそう!」みたいなの。

ここ数年、コードを書いてもあまり楽しくなかったのには、自分が困ったことや悩んでいることが既にインターネット上で解決案が公開されていて、なおかつ満足できるものばかりだったということがあります。
解決すべき問題、もっというとコードそれ自体を書くモチベーションに飢えていました。
そこに現れたPadrino, 実に食い尽きがいのあるものでした。

Padrino 黒ミサをやる、っていうのもほんとに自然な気持ちの流れでした。中部や中国、九州はわりとPadrinoコミュニティが手薄な印象があります。どんどん興しましょう。