雀巽の日記帳

雀巽が綴る日常の記録

超シンプルな列挙型 (enum) を実現する gem 作ってみた

ふらっと gem 作り初体験してみました。

Rails 4.1 で ActiveRecord に導入された enum どころか、Rails 3.2 以上で使える enumerize という gem すら使えないという、とっても素敵な環境で戦うことになってしまったので、実用に耐え得るかどうかはわかりませんが、似たような機能を提供する gem を勢いで作ってみました。

github.com

おそらく現存する列挙型 gem で最もシンプルなんじゃないかと思います。

寝る前にベルギービール飲んでたら完成してたレベルのシンプルさです。

経緯

冒頭でも書きましたが、まともな列挙型 (enum) が存在しない厳しい世界に飛び込むことになってしまいました。

Railsenum を使って、グローバルに生えまくってる定数をぶっ殺す*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 も取得できる

バッジ貼るとそれっぽくて良い感じです。

f:id:necojackarc:20151111042758p:plain

全く gem 作りについて知らなくても数時間で公開まで漕ぎ着けれるお手軽さでした。

morizyun.github.io

このタイトルに偽りなしです。勢いでやってみてよかった。

メタプログラミング

Rails っぽい機能の再現ということで、ひたすら TDD & メタプログラミングしてました。

最近読んだメタプログラミング Ruby の知識が活用できて普通に楽しかったです。

necojackarc.hatenablog.com

機能だけでなく、ソースもテストも突貫工事でイケてない部分が多々あるので、気が向いたら改良していこうと思います。

完全に車輪の再発明でしたが、Rails の再発明は結構面白い気がします。

まとめ

近所のローソンにベルギービールとかドイツビールとか売っててアツい。

*1:適切なモデルに移設する

*2:要: RubyGems のアカウント