この記事は何?

rails console の劣化版みたいなやつの紹介です

それじゃ分かんないよ?

端末からインタラクティブに ORM のメソッド投げたりできます。便利

ってか REPL って何?

端末でインタラクティブにプログラムを実行する物体です。irb とかが有名ですね。Perl では Reply ってのがおすすめです。

良くわからない人は以下の記事読んで、実際に使ってみるのが良いと思う。

で、どうやるの?

まずは必要な物体をインストールしましょう。Reply と使いたい ORM を入れます

% cpanm Reply
% cpanm Otogiri
% cpanm Otogiri::Plugin::DeleteCascade

ORM はお好みのやつでいいですが、DeleteCascade が使えるとめっちゃ捗るので、Otogiri がおすすめ。

で、一度実行してみましょう。

% reply
0> my $aa = 1 + 1;
$res[0] = 2

1> exit

うん、便利ですね。

一度実行すると、.replyrcというファイルが出来るので、こいつをコピーして、ORM 呼ぶ用のコンフィグを作ります

cp .replyrc .replyrc_myservice

名前は適宜好きなのつけてください。その DB を使うサービス名が良いと思います。

で、.replyrc_myservice を書き換えます。こんな感じ。

line 4〜8が追加した分です。

で、

% reply --cfg ~/.replyrc_myservice

のように、cfg オプションでコンフィグを指定できるので、そんな感じで実行します。すると…

% reply --cfg ~/.replyrc_myservice
1> $db->select('detective', { id => 1 });
$res[1] = {
    id => 1,
    name => 'Sherlock Shellingford',
    age => 15,
    toys => 'psychokinesis'
}

こんな感じで、シャーロック・シェリンフォードちゃんの情報がゲットできて$db 変数から Otogiri のメソッドが呼べて、最高便利です。

これだけだと、いちいちコンフィグを指定しなくてはいけないのがめんどくさいので、alias とかに登録しとくのが良いと思います。

% vi .bashrc
...
alias otogiri-myservice='reply --cfg $HOME/.replyrc_myservice'
...

補足

Perl入学式の校長としても有名な、papix 氏が Reply のプラグイン書いてるみたいです。

ちょっと試したんだけど、うまく動かなかったので、うまくいったらコレの紹介も書こうと思います。

2014/03/22 追記

作者さんの紹介記事も出たのでリンクしときます。

なるほど。メソッドが大文字でエクスポートされてたのね…(小文字で呼んでて、エラーになって、アレ?ってなってた。。。)

(追記おわり)

FAQ?

便利?

便利ですよ。めっちゃ捗るので是非試して欲しい。

普通に SQL のコマンドラインで良くね?

みんなプログラマなんだから、 SQL より Perl の方が得意でしょ?あとお前それ Oracle 使ってても同じ事言えるの?

…ってのは半分本気で半分ジョークです。Otogiri::Plugin::DeleteCascade を有効にしているので、FK あるテーブルも上から消せるのが最高に気持ちいいです。

Teng で同じ事やりたいんだけど…

.replyrc_myservice の use Otogiri してる所の周辺を書き換えてください。僕最近 Teng 使ってないし。あとは初期化の時に Row Object を無効にしといた方がデータが見やすくて良いかも。

DBIC で同じ事やりたいんだけど…

.replyrc_myservice の(ry

CDBI で同じ事やりたいんだけど…

.replyrc_m(ry