Scaffolding Extensions は素晴しいと思います!

Jeremy Evans さんが開発された Scaffolding Extensions はとても素晴しいと思います。このライブラリはRailsにおけるいわゆる"scaffolding"を汎用にしたものです。つまり、モデルに対する一覧、編集、追加、削除などを簡単に行なうことが出来るインターフェースを用意してくれます。インストールは gem っちゃうのが良いと思います。

sudo gem install scaffolding_extensions

なお http://scaffolding-extensions.jeremyevans.net/ にてデモがご覧になれます。

さて、では以下に、このライブラリの何が素晴しいのかをまとめてみます。

サポートする環境がとっても多彩

version 1.1.1のREADMEより引用しますが、このようにとにかくサポートする環境が多彩です。Railsはともかくとして、Ramaze/Camping/Sinatraのサポートはとても良いことだと思います。またORMに関してもActiveRecordはともかくとしてSequel/DataMapperの両方で動きます。素晴しいですね。

Scaffolding Extensions currently supports:

   * Web Frameworks
         o Rails 2.0
         o Ramaze 0.3.5
         o Camping 1.5
         o Sinatra 0.1.7
   * Object/Relational Mappers
         o ActiveRecord 2.0
         o DataMapper 0.2.5
         o Sequel 0.5.0
   * Javascript Libaries (used for Ajax/Autocompleting)
         o Prototype 1.6.0.1
         o JQuery 1.2.3

あ、そういや、Merbの名前がありませんね。でもコードを読む限り他のフレームワークでこのライブラリを使うのもとっても簡単だと思います。scaffolding_extensions/controller/ramaze.rb あたりを参照するとやり方は大体分かるんじゃないでしょうか。

Scaffolding Extensions という名前なのにコード生成をするわけじゃない

Railsのコード生成は野暮だよね!と思うRamaze派の人にとっては嬉しいことに、その名前とは裏腹にこのライブラリはRailsのようなコード生成を一切行ないません。モデルに直接設定を組み込んでやるわけです。

動作例

Ramaze(0.3.9) + Sequel(0.5.0.2) の例を以下に示します。

require "rubygems"
require "ramaze" # 必ず先にロードすること!
require "sequel" # 同様、後でロードするとうまく動きません
require "scaffolding_extensions"

File.delete("test.db") if File.exist?("test.db")
DB = Sequel.sqlite("test.db")

DB.create_table :person do
   primary_key :id
   varchar :name
   integer :age
end

class Person < Sequel::Model(:person)
   @scaffold_name = "person"
   @scaffold_fields = [:name, :age]
   @scaffold_select_order = :name
   # この指定が必要なのは Sequel の制限らしい
   @scaffold_column_types = {:name => :varchar, :age=> :integer}
end

ScaffoldingExtensions.all_models = [Person]

class MyController < Ramaze::Controller
   map '/'
   layout # これがないとエラー、ちょっとどうなのこれ
   scaffold_all_models
end

Ramaze.start

あとはブラウザで眺めてみたりいじってみたりして下さい。

感想

とても素晴しいライブラリなのでRamaze/Camping/Sinatraというマイナーなフレームワークに潜む人達は是非とも使うべきだと思います。敢えて無理矢理に難点を言うとすれば、コードが1行80文字を前提に書かれていないのでやや読みづらいかなー、と思うくらいです。あとちょっと設定方法が多少微妙感漂う気がしますが、これについてはいずれ作者さんにメールで聞いてみようかなぁと思います。

とにかく皆使ってみれば良いと思います。でも正直なところ現状では、ドキュメントが不十分だったり色々まずい所があるように思いますので、とってもとっても苦労するかも知れません。今回Ramaze+Sequelのサンプルを書くのにすら苦労しました。Ramazeのlayout指定に関してはパッチを送りたいと思います。