Oreでgemのひな形を作る
Rubyのライブラリーは、RubyGemとして配布されます。自分でこのRubyGemを作るにあたり、いつも必要になるファイルを作成するのに、多くの人はBundlerというgemのbundle gem
コマンドを使っていると思います。 Bundlerもいいのですが、最近(ここ三年くらい)僕はOreという別のgemを使っているので、紹介してみたいと思います。
Oreを使うには
% gem install ore
します。ツールの性質上、Gemfileに書いたりすることはなく、グローバル(やchruby、rbenvなどの環境下)にインストールします。するとmine
コマンドが使えるようになるので、これでgemのひな形を作ります。
% mine --bsd \
--homepage=https://gitlab.com/KitaitiMakoto/pathname-temporary \
--rubygems-tasks \
--test-unit \
--yard \
pathname-temporary
Generating /Users/ikeda/src/gitlab.com/KitaitiMakoto/pathname-temporary
create lib
create lib/pathname/temporary
create test
create .document
create .yardopts
create test/helper.rb
create test/test_pathname-temporary.rb
create LICENSE.txt
create Gemfile
create .gitignore
create ChangeLog.md
create README.md
create Rakefile
create pathname-temporary.gemspec
create lib/pathname/temporary/version.rb
create lib/pathname/temporary.rb
run git init from "."
すごいたくさんオプションを付けているけど、必須な部分だけだと次の通り。
% mine pathname-temporary
ここでのオプションは次のような意味になります。
--bsd
- 二条項BSDライセンスにする。gemspecファイルのライセンスの所が
"BSD"
となり、具体的なライセンス内容がLISENCE.txt
ファイルに書かれるようになる。 --homepage=...
- ホームページのURI。gemspecファイルの
homepage
の所がここで指定したURIになるほか、README.md
にも使われる。 --rubygems-tasks
rake build
とかrake release
とか、gemパッケージを扱うRakeタスク用に、rubygems-tasks gemを使う。gemspecファイルの依存gemにrubygems-taskが追加され、Rakefile
内でそれが使われる。--no-rubygems-tasks
にすると、Rakefile
ではbundler/gem_tasks
が読み込まれて、Bundlerが提供する各タスクが定義される。--test-unit
- テスティングフレームワークにtest-unitを使う。
Rakefile
でtest-unit用のタスクが定義され、test
ディレクトリーとヘルパーファイルが作成される。これを指定しない場合は、デフォルトでRSpecが使われる。 --yard
- ドキュメンテーションツールとしてYARDを使う。依存gemに(略)、
Rakefile
で(略)、.yardopts
ファイルも作成される。これを指定しない場合、RDocが使われる。
他にも色々あるので、--help
オプションで見てみてください。
% mine --help
Usage:
mine PATH
Options:
[--markup=markdown|textile|rdoc]
# Default: markdown
[--markdown], [--no-markdown]
[--textile], [--no-textile]
-T, [--templates=TEMPLATE [...]]
-n, [--name=NAME]
-n, [--name=NAME]
-N, [--namespace=NAMESPACE]
-V, [--version=VERSION]
# Default: 0.1.0
-s, [--summary=SUMMARY]
# Default: TODO: Summary
-D, [--description=DESCRIPTION]
# Default: TODO: Description
-A, [--author=NAME]
-a, [--authors=NAME [...]]
-e, [--email=EMAIL]
-U, --website, [--homepage=HOMEPAGE]
-B, [--bug-tracker=BUG_TRACKER]
Template options:
[--apache], [--no-apache]
[--bin], [--no-bin]
[--bsd], [--no-bsd]
[--bundler], [--no-bundler]
# Default: true
[--code-climate], [--no-code-climate]
[--gem-package-task], [--no-gem-package-task]
[--gemspec-yml], [--no-gemspec-yml]
[--git], [--no-git]
# Default: true
[--gpl], [--no-gpl]
[--hg], [--no-hg]
[--lgpl], [--no-lgpl]
[--minitest], [--no-minitest]
[--mit], [--no-mit]
# Default: true
[--rdoc], [--no-rdoc]
# Default: true
[--rspec], [--no-rspec]
# Default: true
[--rubygems-tasks], [--no-rubygems-tasks]
# Default: true
[--test-unit], [--no-test-unit]
[--travis], [--no-travis]
[--yard], [--no-yard]
gemspecファイルを、RubyじゃなくてYAMLファイルで管理する--gemspec-yml
オプションとか、面白いですね。
更に、(mine
ではなくて)ore
コマンドで各種テンプレートをインストールすることで、このオプションを増やすこともできます。
% ore install git://github.com/ruby-ore/rbenv.git
を実行すると、mine
コマンドで--rbenv
オプションが使えるようになります。
毎回このオプションを指定るするのは覚えられないので、~/.ore/options.yml
に、毎回使うオプションを指定して置くことができます。著者名やメールアドレスなんかもデフォルトを指定しておけます。
gemspec_yml: true
rubygems_tasks: true
rspec: true
yard: true
markdown: true
authors:
- Alice
email: alice@example.com