engineers_blogエンジニアの越川です。ActiveRecordを拡張するgemを作りたい。そんなときテストで使うダミーのモデルのテーブルをどう作るかに悩みますね。pluginコマンドを用いて開発することが多いと思います。その際は自動で作成されるspec/dummy配下のダミーアプリでmigrationを書くのが楽です。そこまで大きくないActiveRecordの拡張ではもっと手軽に書きたいですね。例として、protectedカラムがtrueのとき、destroyが出来ないようにするActiveRecordの拡張を考えてみましょう。(今回作成したgemは、github.com/ppworks/kienaideに置いてあります。<-本題はここですrubygemsにリリースと言った流れを見て行きましょう。kienaide出来上がったディレクトリ配下を見てみましょう。kienaide/自動的にgitのrepogitoryになっているので状態を確認してみます。statusこのようなファイルが出来ています。Commitを作成しておきましょう。commitする想定です。今回作るgemの依存gemを記述します。ActiveRecordの拡張なのでactiverecordを追加しました。続いて、開発用にテストを書きたいのでrspecとテスト用のデータベースとしてsqlite3を追加しました。end次にテスト用のディレクトリを用意します。specspec_helperは最小限にこんな感じで書いてみました。テスト用のデータベースの用意を書きます。ポイントはメモリ上にデータベースを用意することと、Railsのmigrationの仕組みを利用する事です。falseCreateAllTables.upがポイントです。用意することが出来ました。テスト用のデータベースの用意が出来ましたので、テストを書いていきましょう。protectedカラムがtrueのとき、destroyが出来ないようにするActiveRecordの拡張を作ります。モデル定義に、kienaideと書いておくと、protectedカラムがtrueの場合、destroyをキャンセルするようにしてみます。endendテストを書くことで仕様が決まったので実装していきます。Kienaideテストを通してみましょう。failures無事通りました。rubygemsにリリースリリースに備えて、TODOを書き換えます。-z`.split("\x0")gemのパッケージを作成します。kienaide-0.0.1.gemrubygemsに登録します。お持ちでない場合は、rubygemsの登録画面から登録しておきます。リリースは以下のように行います。kienaide-0.0.1.gemEmailとPasswordを求められたら登録したものを入力して下さい。(0.0.1)これでgemがrubygemsに登録できました。いかがだったでしょうか、ActiveRecordの拡張gemを書く際のテストの書き方に迷うこともあると思いますが今回のようなアプローチを使うと手軽にテスト用のデータベースを用意できるので開発が加速すると思います。今回作成したgemは、github.com/ppworks/kienaideに置いてあります。Requestもお待ちしております:)最後にマネーフォワードでは積極的にgemを開発してOSSに貢献していきたいエンジニアを募集しています。