本を読む

読書やコンピュータなどに関するメモ

Bash on Railsを作る(1) メタプログラミングでDSL

 Bash on Railsとでもいうようなソフトを作っています。Ruby on Railsのパチもんを、bashの内蔵コマンドだけで作ろうという計画です。

 と書くとカッコいいですが、実用性はハナから無視していて、いかにRuby on Railsっぽいことをマネできるかという、まったくのネタソフトです。古い人には「Ah! SKI」誌に掲載されたOS「uni+」(ユニックロス)みたいなノリを連想していただければよいかと。

 とりあえず、ActiveRecord風のO/Rマッパーもどきを、最小限の機能まで試作してみたので、ぼちぼちブログで書いてみます。

 第1回は、DSL(Domain Specific Language)をメタプログラミングで書く話です。

内蔵コマンド縛りの限界

 bashの内蔵コマンドだけで作るといっても、さすがにRDBMSをいちから作る根性はありません。そこで、RDBMSのクライアントプログラムは使うことにします。

 ほか、作ってみて代替手段がないことがわかったのは、mkdirやrmでした。これは困った。

データベースの設定ファイル

 Bash on Railsでは、config/database.shファイルにデータベースの設定を書きます。

# database configuration
development:
    adapter: sqlite3
    database: db/development.sqlite3
    timeout: 5000

test:
    adapter: sqlite3
    database: db/test.sqlite3
    timeout: 5000

production:
    adapter: sqlite3
    database: db/production.sqlite3
    timeout: 5000

 これは、YAMLのように見えますが、シェルスクリプトです。

スキーマの定義ファイル

 もう1つ。Bash on Railsでは、いまのところ、db/schema.shファイルにスキーマの定義を書きます。「members」というテーブルを定義してみます。

create_table members t
      t.column name string
      t.column mailaddress string
      t.column comment string
elbat_etaerc

 当然これもシェルスクリプトです。ちなみに、「elbat_etaerc」というのは、「create_table」の逆綴りです。

 もちろん、「t」のかわりに「tbl」とかほかの名前を使って、「tbl.column」のようにも書けます。複数のテーブルのスキーマ定義を書くこともできます。ただし、いまのところ、リレーションには対応していません。

テーブルを作る

 では、上の定義を元にテーブルを作ってみましょう。

% make db-schema-load
vendor/SHar/migrate/migrator
-- create_table(members)
%

 これだけです。makeの部分は、bash内蔵コマンドで作ってもよかったのですが、ここはRails気分を優先してmakeを使ってみました。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/342-e34efaf5

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad