ふらっと gem 作り初体験してみました。
Rails 4.1 で ActiveRecord に導入された enum どころか、Rails 3.2 以上で使える enumerize という gem すら使えないという、とっても素敵な環境で戦うことになってしまったので、実用に耐え得るかどうかはわかりませんが、似たような機能を提供する gem を勢いで作ってみました。
おそらく現存する列挙型 gem で最もシンプルなんじゃないかと思います。
寝る前にベルギービール飲んでたら完成してたレベルのシンプルさです。
経緯
冒頭でも書きましたが、まともな列挙型 (enum) が存在しない厳しい世界に飛び込むことになってしまいました。
Rails の enum を使って、グローバルに生えまくってる定数をぶっ殺す*1予定が完全に狂ってしまったので、これはいい機会だとベルギービール片手に gem を作りを開始しました。
使い方
スッカスカな README から一部抜粋。
require "simpler_enum" class Person include SimplerEnum simpler_enum mood: { awesome: 0, excellent: 1, great: 2, good: 3, fine: 4 } end
これで enum なメソッドがにょきにょき生えます。
学び
完全に初体験だったので、ひたすら調べながらの作業でした。
bundle gem GEM_NAME -t
でぷりっと雛形が産まれるgem build GEM_NAME.gemspec
でぷりっと gem が産まれるrake release
でぷりっと世間に公開される*2- TravisCI を使って各 Ruby バージョンでテストできる
- CodeClimate と連携させれば Coverage も取得できる
バッジ貼るとそれっぽくて良い感じです。
全く gem 作りについて知らなくても数時間で公開まで漕ぎ着けれるお手軽さでした。
このタイトルに偽りなしです。勢いでやってみてよかった。
メタプログラミング
Rails っぽい機能の再現ということで、ひたすら TDD & メタプログラミングしてました。
最近読んだメタプログラミング Ruby の知識が活用できて普通に楽しかったです。
機能だけでなく、ソースもテストも突貫工事でイケてない部分が多々あるので、気が向いたら改良していこうと思います。
完全に車輪の再発明でしたが、Rails の再発明は結構面白い気がします。
まとめ
近所のローソンにベルギービールとかドイツビールとか売っててアツい。