Railsの2年半ぶりのメジャーバージョンアップである3.0の正式リリースがいよいよ間近に迫ってきました。2.3との互換性をなるべく保ちながらも,メジャーバージョンアップだけあってフレームワーク自体は隅々にまで徹底的なリファクタリングが施されて更なる洗練を遂げています。3では融通の効かないフルスタック構造を捨ててすっきりとしたモジュール独立性が実現されているのですが,この際に,Merbとの合併の影響もあってか,いくつかの新たな外部ライブラリに依存する形になっているのも興味深いところです。3の大改造の舞台裏を支える裏方さんにスポットライトを当ててみたいと思います。3今回のRailsのメジャーバージョンアップの中でも特にドラスティックに変身を遂げたのが,データベース層を司る,ご存知ActiveRecordです。3では,従来のO/Rマッパーとは一線を画した,O/Rマッピングの概念を一段高いステージに押し上げるような,全く新しい世界観が表現されています。3では,RubyのDSLで書かれた条件を最終的にSQLの文字列に変換する処理は「Arel」という中間ライブラリで行われるようになっています。3の新しいクエリインターフェイスの鍵は,このArelが握っているようです。そこで,このArelというライブラリについて,少々深く掘り下げて調べてみることにしましょう。Kallen氏(※1)が着想して作り始めたものです。この時の設計の意図については,彼自身のブログで以下のように語られています。昨年リリースされたTwitterのLists機能のリーダーを務めたことでも有名。Nickは,named_scopeをさらに汎用化させて関係代数における「関係(=Relation⁠)⁠」という概念をそのままオブジェクト化することによって,すべてのクエリをこの「関係」の「関係」で表した純粋で美しい世界が構築できるのではないかと考えたのです。この「関係」オブジェクトは,数学的には「クロージャ」であり,実装のアイデアは関数型言語に強くインスパイアされたものでした。ActiveRecord全体をnamed_scopeっぽいものに変えるためには,ActiveRecordの根幹からガラッと作り替える大手術を行う必要があったため,いきなり複雑に肥大化したActiveRecordの手術に挑むよりは,まずは特定のO/Rマッパーに依存しないような汎用的なクエリ言語の設計から始めた方が良いのではないか,という判断に至りました。して作り始められたのが汎用オブジェクト指向関係代数クエリ言語「Arel」です。Naikといった協力者たちによってActiveRecordへと組み込まれ,僕らのもとへと届けられることになりました。3で実際にクエリっぽいものを動的に組み立てて最後に遅延評価で実行させるコードをご紹介しますが,これは,「⁠すべてがscope」というビジョンに基づいて再設計が行われ,それが本当に実現されてしまったからこそ可能になっているわけです。Relation」の略で,その名前から想像がつくとおり,ActiveRecordから派生した,「⁠関係代数」をRubyのオブジェクトで取り扱うためのライブラリです。ドキュメントによれば,Arelは,面倒なSQLの生成を簡単にしてくれて,さまざまなデータベースシステムに対応している,「フレームワークのフレームワーク」を目指して作られています。Arelを使えば,DBの互換性やSQL文字列の生成などに惑わされることなく,大事な設計やモデリングに注力してO/Rマッピング処理を実装することができるようになっています。この仕組みは,WEB層でいうなら,ちょうどRackと同じ位置づけに当たります。RackがWebサーバーとWebアプリケーションの間を仲介してくれているのと同様に,ArelはデータベースとO/Rマッパーの間のごちゃごちゃとした部分を抽象化してすっきり整理してくれています。,「⁠さまざまなデータベースシステムに対応」というのは,単に複数のRDBMS製品の方言を吸収,というだけにとどまらず,SQLを使わないデータベース,インメモリのキャッシュ的なもの,さらにはYAML等のファイルへの永続化までを考慮して設計されています。Store⁠」⁠,「⁠クラウド⁠」⁠,はたまた「NoSQL」といった形で,永続化や問い合わせの手法がどんどん多様化してきています。バックエンドの多様性を吸収して抽象化してくれることによってアプリケーションコードの汎用性を高めてくれるArelという存在は,まさにこんな時代の流れを的確に捉えたライブラリと言えるでしょう。2010というイベントで来日を果たしており,筆者もArelについて直接質問をぶつける機会があったのですが,意外なことに,本人はArel自体の開発から手を引くと同時に既にArelというプロダクト自体に対してもさほど興味は残っていないようでした。本人も認めているとおり,彼はオープンソース活動を通じて自身の素晴らしいアイデアを世界にぶちまけることにやりがいを感じているのですが,その後のメンテナンスやら細かい作り込みにはそれほど熱心になれないようです(ある意味Rubyistらしいとは言えるかもしれませんね)。いずれにしろ,彼のような天才の仕事が,本人の手を離れてもコミュニティによって引き継がれて人類の共有財産になっていっている,というあたりは,オープンソースの世界の懐の広さを感じさせる現象ではないでしょうか。Kallen(右⁠)⁠。Tokyoのパーティにて撮影:角谷信太郎さんその後も彼はまた全く別の分野で新たなプロダクトを作り始めているとのことなので,今後とも彼の活躍には期待したいところです。Rails著者プロフィール松田明(まつだあきら)フリーランスのRailsプログラマー/Railsコンサルタント。現職は株式会社groovesフェロー。地域Rubyハッカーコミュニティ"Asakusa.rb"主催。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。