分12国内では微妙な立ち位置にずいぶん間が空いてしまいましたが,今回はデータベース話の3回目として,DBICことDBIx::Classについてまとめてみます。DBICは,海外ではMooseやCatalystと並ぶモダンPerl界の三種の神器のひとつとしていまも広く宣伝されていますが,国内では,当初こそClass::DBIからの乗り換えを強力に推進する流れが見られたものの,最近ではあまり名前を聞くこともなくなり,むしろDBICからの脱却が潮流になっているかの印象を受けることさえあります。何がどうなっているのか,例によって歴史を追いかけながら見ていきましょう。オブジェクトを永続化するためのものDBICの立ち位置を理解するには,まずはその先駆けとなったClass::DBIがどういうものであったかを理解しておく必要があります。Schwern)氏が1999年12月にリリースしたClass::DBIは,その前年にリリースされたDBIx::Recordsetなどと並んで,DBIの拡張としては最初期のものにあたります。Perl(オブジェクト指向Perlマスターコース⁠)⁠』が出版されたのは1999年8月(邦訳は2001年)のことでした⁠)⁠,インタフェースの改善にとどまらず,取り出したデータもオブジェクトになっているのがひとつの特徴でした。正確にいうと,初期のClass::DBIは,連載第19回で取り上げたKiokuDBと同じく,あくまでもオブジェクトを永続化するための手段としてデータベースを使っていただけで,主眼はあくまでもオブジェクトにありました。KiokuDBと違ってテーブルとクラス,カラムとアクセサ/ミューテータは一対一で対応していましたが,Class::DBIを継承するパッケージに書くのはあくまでもオブジェクトの内部データをいじるためのアクセサ/ミューテータであって,テーブルのスキーマそのものではありませんでしたし,背後にあるIma::DBIを通じて生のSQLを発行する仕組みこそあったものの,通常は極力SQLを意識させないようになっていました(実際,生のSQLを発行する場合はDBIとほぼ同レベルのことしかできなかったため,Class::DBIのうまみはほとんど享受できませんでした⁠)⁠。名前こそDBIとついていましたが,これはあくまでもクラスにDBIとの連携機能を追加したもの,という位置づけであって,既存のデータベースを自由に操るためのものではなかったわけです。ウェブのフォームから送られてきたデータをそのまま保存したいだけなら,リレーショナルデータベースの力はそれほど必要としません。リレーショナルデータベースの皮をかぶったカード型(簡易)データベース的な使い方しかしていないのであれば,Class::DBIに用意されている基本的なメソッドだけですべての処理をまかなうこともできました(実際,Class::DBIの初期の実装はDBD::CSVでテストされていました。想定されていた用途はそれで足りるくらいのものだったわけです⁠)⁠。Class::DBIはあまり作り込まれていなかった分,拡張の余地もたくさんありました。Bowden)氏がClass::DBI::mysqlと題してMySQL用の拡張をリリースしたのを皮切りに,宮川達彦氏のClass::DBI::ExtensionやClass::DBI::Replicationなど,Class::DBIとデータベースの連携を強化するモジュールが少しずつ増えていきます。この傾向は2001年9月にボウデン氏がメンテナを引き継いでからはさらに顕著になりました。Abstraction(簡単なデータベースの抽象化⁠)⁠」に変わったのは2002年11月にリリースされた0.90でのことでしたが,それと前後してリレーションまわりの対応が大幅に強化されていますし,カラムの型制約を指定したり,複数の条件をくみあわせたフィルタリングができるようにもなりました。最初にデータベースありきという流れのひとつの象徴として,2002年8月には池邉智洋氏のClass::DBI::Loaderというデータベースのスキーマから自動的にクラス定義を行ってくれるモジュールも登場しています。その後もユーザ数の増加にともなって次々に新しいモジュールが登録され,2004年頃までにClass::DBIはこの分野におけるデファクトスタンダードとして,CPANでもっとも人気のあるモジュールのひとつに数えられるようになっていました。モデル層を抽象化する重要なパーツとなっています。NEXTの時代Maypoleは,よくある管理画面のように,お決まりのフォームにお決まりのデータベース,テンプレートも基本的な構造はほとんど同じ,というものを,お決まりのモデル,お決まりのテンプレートエンジンを使ってさくっと仕上げる場合にもっとも力を発揮するように書かれていました。Riedel)氏が,保守管理だけしてくれればというカズンズ氏の意向に反して,Maypoleに連載第2回でも紹介したNEXTを組み込んでより汎用的な,拡張性の高いものにしようとしたため,カズンズ氏らから「その変更は適切なデフォルトを重視するMaypoleの本質を変えてしまう」と猛反発を受け,改造版のMaypoleにCatalystという別の名前をつけて独立せざるをえなくなる,という事件が起こります。その騒動の余波をまともにかぶったのがClass::DBIでした。Class::DBIはもともとそれほど複雑なことができるようには作られていなかったため,銘々がプラグインを書いて必要な機能を追加していたのは先にも書いた通りですが,Class::DBIは多重継承をよしとする時代の産物であったため,多いときでは本体だけで5つものクラスを継承していたうえ,初期の拡張のなかには機能を追加するために本体を継承するものもあれば,継承関係は無視して特定のメソッドをミックスインするものもある,という具合で,利用したいプラグインの数が増えていくにつれ安全確実な機能拡張がむずかしくなる,という問題が知られていました。ボウデン氏がメンテナに就任した理由のひとつにはこの多重継承の軽減があったそうで,実際,2001年10月にリリースされたバージョン0.35ではフック(トリガ)機構を導入して継承に頼らない拡張を可能にしたほか,2004年4月にリリースされた0.96で一通りの機能追加が終わったあとは内部をさらにリファクタリングしてプラグインを書きやすくする計画もあったようなのですが,こちらはなかなか実現されず,結果的には1年以上もリリースが滞ることになってしまいます。Trout)氏がClass::DBI::Sweetというベタープラクティス集的なパッケージに続いて(2005年5月⁠)⁠,実験的なプロジェクトとして,Class::DBIとの互換性を維持しつつもNEXTを使って拡張性を高めたDBIx::Classの開発を始めます(2005年8月⁠)⁠。DBICへの乗り換えが始まります。リーデル氏はやがてCatalystチームからも追われて,トラウト氏を中心とした集団指導体制に移ることになるのですが,その頃にはもうCatalystとDBICはほとんど不可分のペアとして宣伝されるようになっていました。国内でもこの頃はまだClass::DBI時代のバッドノウハウを解消するものとしてDBICへの好意的な発言がよく見られたものです。DBI著者プロフィール石垣憲一(いしがきけんいち)あるときは翻訳家。あるときはPerlプログラマ。先日『カクテルホントのうんちく話』(柴田書店)を上梓。最新刊は『ガリア戦記』(平凡社ライブラリー)。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。