Talk Information

DBIx::Schema::DSL ~ PerlによるDSLモジュール開発とその活用と実践

 
songmu
This talk is currently in 'Rejected' state
このエントリーをはてなブックマークに追加

Abstract

use DBIx::Schema::DSL;
create_table book => columns {
    integer 'id',   primary_key, auto_increment;
    varchar 'name', null;
    integer 'author_id', not_null;
    decimal 'price', 'size' => [4,2];

    add_index  'author_id_idx' => ['author_id'];
    belongs_to 'author';
};

これはなんとPerlのコードです。記号だらけで読みづらいと言われることもあるPerlですが、このコードは余計な記号も少なく、何をやろうとしているか明確です。これは、DBIx::Schema::DSLモジュールを用いてSQLのCREATE文を定義しているコードです。

RailsのActiveRecord::Migrationに記法が似ていると感じられると思う方もいらっしゃるかもしれません。実際参考にした部分も多々あります。Rubyには文化的にもDSLが好まれることもあり、多くのDSLライブラリがあります。ただ、実はPerlも言語内DSL定義に非常に向いている言語なのです。

DBIx::Schema::DSLはSQLのスキーマ定義のためのDSLを提供するモジュールです。スキーマを一元的に簡潔に管理することを主眼に開発されています。カヤックやMobileFactoryなどで採用実績があり、最近開発が進められているORMであるAnikiの中でも内部的に利用されています。

DBIx::Schema::DSLはスキーマ定義システム「しか」提供しません。だからこそ、各種ORMやマイグレーション(スキーマ定義変更)ツール、ERD描画ツールなどと簡単に柔軟な連携をおこなうことができるのです。これは非常にPerlらしいモジュールのあり方だとも言えるでしょう。

実際に、Perlの代表的なORMであるTengや、強力なマイグレーションツールであるGitDDL::Migratorなどとの連携例についてお話します。非常に簡潔でかつ少ない記述量でパワフルな開発ができることがお分かりいただけるかと思います。

例えば、データベースのマイグレーションを行う場合、多くのフレームワークは差分積み上げ式のスキーマ変更方法を採用しています。これは最終的なデータベース定義がわかりづらくなる上、リポジトリ上のファイルも増え、管理が煩雑になることが多いのではないでしょうか。しかし、DBIx::Schema::DSLとGitDDL::Migratorを組み合わせて利用することで、スキーマの現状を一元管理し、簡潔で分かりやすいスキーマ定義・管理が可能になるのです。詳しくはトークの中でご説明します。

また、現在Perl以外のプロジェクトでも利用可能なPerl製のDBスキーマ管理・マイグレーションツールを作成中なので、そちらについても紹介できればと思います。

本トークでは以下の様な内容を取り上げます。詳しく聞きたいことや他に聞きたいことなどがあれば内容に反映させたいと思いますので、お気軽にお知らせ下さい。

  • DBIx::Schema::DSLの内部実装
    • PerlによるDSL開発Tips
  • DSL利用における利点と欠点
    • 何故Perl界では以前ほどにはDSLが使われないのか
  • DBIx::Schema::DSLを用いたスキーマ管理方法
    • 何故DBIx::Schema::DSLを使うのか
    • 生SQLを用いた場合との比較
    • SQLを隠蔽しきらない工夫
  • ORMとの連携 ~ Teng
    • Tengのクラス定義の自動生成
  • マイグレーションツールとの連携 ~ GitDDL
    • DEMO
  • MySQLWorkbenchとの連携
    • ERDの自動生成
  • DBIx::Schema::DSLのこれから

Talk Details

Venue TBD
Starts On TBD
Talk Category Applications
Language Japanese
Slide Subtitles Japanese
Talk Duration 30 minutes
Material (Difficulty) Level Regular
May we take your photo? allow
May we record your talk? allow