概要
- Gem を作ったので、次以降のために覚えておきたいことをメモ
流れ
ひな形作成
-
bundle gem foo
を実行- Gem 名に応じてひな形の構成も変わる
- 推奨される命名規則: http://guides.rubygems.org/name-your-gem/
- この構成自体は仕様ではなく、あくまで慣例。後述する gemspec で各種パス名を設定しているので、もっとヘンテコな構成やフォルダ名にもできるが、無論そうするメリットはない
- Gem 名に応じてひな形の構成も変わる
gemspec を修正
- 以下、ポイントだけかいつまんで説明
spec.files
- Gem に含めたいファイルはここで全て指定する必要があるが、
bundle gem
でひな形を作るとデフォルトで git 管理しているファイルがすべて含まれるようになるので、あまり意識しなくてよい
spec.require_paths
- この Gem を
require
したときに実際にロードするファイルのパス。デフォルトだと lib が指定されており、それが慣例なので従っておくとよい。主にこのパス配下にコードを書いていくことになる
spec.executables
- rspec のようにコマンドラインから実行できるタイプの Gem を作る場合、実行したい Ruby スクリプトをここで指定する。これもデフォルトで exe 配下を全て含むように書かれているので、あまり意識しなくてよい
spec.bindir
- 上述した
spec.executables
で指定した ruby スクリプトを探索するためのパス。デフォルトだと exe が指定されている。bin ではないので注意。 bin には Gem 開発中に使うコマンドを入れるとよい
spec.add_runtime_dependency
- この Gem をインストールしたときに、ここで指定した依存 Gem があわせてインストールされる。不用意にバージョンを縛りすぎないように注意。個人的にはメジャーバージョンが変わらなければ OK くらいの指定がいいと思う
spec.add_development_dependency
- minitest など、開発中にだけ使う依存 Gem をここに書く。Gemfile に書かないように注意。Gemfile 中の
gemspec
がこれを読み込んでくれるので、bundle install
で普段通りインストールできる
lib を実装
- lib 配下に .rb ファイルは1つだけにする(Gem名.rb)
ダメな例
.
└── lib
├── foo
│ └── cgi.rb
├── erb.rb
├── foo.rb
└── set.rb
# http://guides.rubygems.org/patterns/#loading-code より引用
- 他のファイルを読み込むのに
__FILE__
は使わなくていい- 前述の通り
require
した時点で lib/ が$LOAD_PATH
に追加されているので、その前提に立って単純にrequire
できる。例えば上記の「ダメな例」のような構成のとき、foo.rb 内で foo/cgi.rb をロードしたければ、単純にrequire foo/cgi
と書けばよい
- 前述の通り
その他メモ
バージョン番号の付け方
-
Semantic Versioning に従う
-
MAJOR
.MINOR
.PATCH
-
MAJOR
: 後方互換のない機能追加があったらインクリメント -
MINOR
: 後方互換のある機能追加があったらインクリメント -
PATCH
: 後方互換のあるちょっとしたバグ修正があったらインクリメント
-