Rarmani - Dumpファイルからスキーマクラスを作ってくれるツール
わいとんです。まずはこちらの動画をご覧ください。
要するにこれはDumpファイルの中からCREATE TABLE文を抜き出して、それらを全て Moo
basedなスキーマファイルにしてしまうというものです。
インストール方法
まだMetaCPANに上げるようなクオリティではないので、github止まりモジュールとなっています。
そのため、まずは git clone
してくる必要があります。
$ git clone https://github.com/ytnobody/Rarmani.git
あとは cpanm
等をつかってインストールすればOK。
$ cd Rarmani
$ cpanm .
無事にインストールが完了すると rarmani
コマンドが使えるようになります。
rarmaniコマンドの使い方とオプション
動画でも実際に rarmani
コマンドの使い方を解説していましたが、改めて説明しておきますと、概ね以下のような使い方をします。
1 | $ rarmani --driver=[ドライバー名] --namespace=[スキーマクラスの名前空間] < [ダンプファイル] |
一応、全てのオプションについて解説しておきます。動画に登場しなかったオプションもあります。
driver
: SQLの構文には細かい方言のようなものがあります。Rarmaniでは、DBMSごとのSQLの方言をdriverというもので吸収しております。現時点ではMySQL
,Pg
,SQLite
のいずれかを指定することができます。namespace
: 生成されるスキーマファイルの名前空間を指定する必要があります。動画内ではMyApp::Schema
としていましたが、ご自由に設定していただくとよろしいでしょう。path
: スキーマファイルをどのディレクトリに生成するかを指定できます。指定しない場合は現在のディレクトリを基準にスキーマファイルが出力されます。roles
: スキーマファイルはMooのクラスとなりますが、各スキーマクラスにてMoo::Role
に準拠したロールクラスを複数指定することができます。例えば、DBIx::Mint::Table
とMoo::Role::ToJSON
を指定する、等が可能です。
コードファーストとDBファースト
最近では「コードでスキーマを表現して、それをもとにDBにテーブルをつくる」というアプローチの「コードファースト」が流行しているようです。これ自体は開発速度の向上やDBのバージョニングの観点でメリットがあり、採用できるならしたほうが良いかな、というのが私の意見です。代表的なところですと、TypeScriptにおけるPrismaなどが該当するでしょう。
一方で、既存DBがある(しかも顧客情報満載である)場合やDBが軸となって設計されたシステム等、いつもコードファーストが最善とは言えないだろう、というのもまた私の意見です。その場合は旧来の「DBファースト」を選択せざるを得ません。
RarmaniはDBファーストのアプローチを、もう少し良い開発体験で進められるようにしたい、という思いから開発が始められました。Go言語では結構有名なORMapperであるSQLBoilerから少なからず影響をうけています。
さいごに
Rarmaniはまだまだテストコードが足りず、ドキュメンテーションが貧弱です。ドライバーも3種類しかありません。有志のご協力をいただけるととてもありがたいです。
そして、このエントリはPerl Advent Calendar 2022の10日目のエントリとなります。明日11日目はまだ埋まっていませんが、きっとどなたかPerlに愛のある方が書いてくださるのではないか、と期待しております。