アペフチ

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