LoginSignup
18
16

More than 5 years have passed since last update.

BundlerでRubygemsとGitHubに公開してみる

Posted at

BundlerでRubygemsとGitHubに公開してみる

この文章は こちらからの転載です。

はじめに

いつもお世話になっているRubygemsやGithubなどのエコシステムを体験してみたいという思いがありました。

RubygemsであればRubyのBundlerが楽だろうということで、
BundlerでRubygemsとGitHubでソフトウェアを公開するまでの流れを書いてみます。

何を作るか

何を作るか。
これが実は一番難しかったりするわけですが、今回は私自身が開発を行っていてたまに欲しくなるものにします。
普段、私はLinuxのサーバサイドのソフトウェアなどをよく開発しますが、その開発中にサーバ上で、あるツールやコマンドをバックグラウンドで起動させたり、任意のタイミングで停止させたり、デーモン化されていないものをデーモン化したいと思うことがあります。

例えば、サーバ上で負荷情報をモニタリングするときに、 vmstat で情報を書き出させ、別な作業を行い、任意のタイミングで停止させるようなケースです。

このとき、以下の様に起動停止が簡単にできれば、いいなぁと思うので、それをサポートするツールを作成してみたいと思います。

起動・停止のイメージ

$ nand start --out vmstat.log vmstat -n 3 
(ログアウトしたり、何か別のことをする)
$ nand stop vmstat

ここで、nand が開発するツールとします。以下で、nandを開発、公開する過程を説明してみます。

もちろん、psコマンドで確認してkillすればよいのですが、手順が多かったり、該当のプロセスを探したりするのが手間だったりするので、そのあたりも上手くサポートしてくれるツールを目指します。

Ruby/Bundlerを使った開発

RubyとBundlerを使ってnandを作成し、公開するまでの流れを説明します。

rbenvでターゲットのRubyバージョンを用意

Rubyのrbenvは複数のRubyのバージョンを共存、切替をディレクトリやシェルレベルで行える
非常に便利なツールです。
rbenvおよびRubyのダウンロードからビルド、インストールまで行うruby-buildについては、説明を割愛します。
今回はRuby 2.0以上をターゲットにすることにします。

$ rbenv install 2.0.0-p598
(以下略)

インストール完了後、ログインしている端末上でインストールしたRubyのバージョンを利用するようにしておきます。

$ rbenv shell 2.0.0-p598
$ rbenv rehash
$ ruby -v
ruby 2.0.0p598 (2014-11-13 revision 48408) [x86_64-darwin13.4.0]

Bundlerの準備

BundlerはインストールしたRubyのgemsディレクトリにインストールすることなく、
開発環境のローカルにgemパッケージをインストールして利用してくれる素敵パッケージです。
Bundlerはrubygemsで提供されていますので、これはインストールしたRubyのgemsディレクトリに
インストールします。

$ gem install bundler
(中略)
$ bundle version
Bundler version 1.9.1

雛形の作成

インストールしたBundlerで雛形を作成します。

$ bundle gem nand -b -t --coc --mit
Creating gem 'nand'...
      create  nand/Gemfile
      create  nand/.gitignore
      create  nand/lib/nand.rb
      create  nand/lib/nand/version.rb
      create  nand/nand.gemspec
      create  nand/Rakefile
      create  nand/README.md
      create  nand/bin/console
      create  nand/bin/setup
      create  nand/CODE_OF_CONDUCT.md
      create  nand/LICENSE.txt
      create  nand/.travis.yml
      create  nand/.rspec
      create  nand/spec/spec_helper.rb
      create  nand/spec/nand_spec.rb
      create  nand/exe/nand
Initializing git repo in /YOUR/PATH/nand

-bnand/exec/nand を作成 -tはテスト用のディレクトリ(rspec)作成です。
--mitはMITライセンス、--cocはContributor Code of Conductに関するテキストを出力するオプションです。
"Contribute Code of Conduct"についてはこちらなどを参考にしてください。

bundlerは1.9から雛形のディレクトリ構造が変わっています。
1.9以前は-bで生成される実行ファイルは、bin/nandに出力されていましたが、
1.9以降はexec/nand以下に生成されますので、
開発中に、bundle install --binstubsとするとbin/nandにbinstubが生成されます。
binにパスを通しておくことで、毎回bundle execを付けることなく、nand start...で試行できます。

同様に、依存性を解決してREPL(irbやpryなど)を利用したい場合、bin/consoleが出力されていますので、consoleで実行できます。
bin/setupbundle installを実行するもので、その他のセットアップ処理を追加する場合は、こちらを利用しましょう。

ここでは、混乱がないようにbinstubを利用せずに、必要なものは全てbundle execを付けています。

gemspecの編集

nand/nand.gempsecが生成されています。このファイルをまず編集します。TODOなどを適宜編集しましょう。
spec.homepage はGitHubのリポジトリにしておくと、RubygemsのページからGitHubのリポジトリに飛べて便利になります。

依存ライブラリ

nandはCLIツールです。RubyのCLIツールとしてとても便利なthorを利用しますので、nand.gemspecに依存性を追加しておきます。

nand.gemspec
(前略)
  spec.add_development_dependency "bundler", "~> 1.9"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec"

  spec.add_dependency "thor"
(後略)

依存するライブラリでシステムのgemにないものを開発環境にインストールします。

$ bundle install --path vendor/bundle
(後略)

開発していて、依存ライブラリが増えたら、都度nand.gemspecに追記して、bundle installを実行します。

このあたりで、GitHubに最初のコミットをしてみましょう。

GitHub にコミット

$ git commit -a -m "1st commit"
$ git remote add origin https://github.com/linkodehub/nand.git
$ git push origin master
(後略)

コミット用のブランチは"master"として、リモートのGitHubを"origin"としておいた方が rake releaseでトラブルが少なくてよいです。

開発

バックアップ用途やtypoなどログが汚くなるのを晒したくないので、
開発時はなるべくmasterブランチ以外で行った方が無難だと思います。
ブランチの命名など運用については、GitHub Flowなどを参考にするとよいでしょう。

$ git checkout -b dev

あとは、実際の開発を進めてください。
なお、ここまで説明に利用してきたNandのGitHubリポジトリはこちらになります。

ドキュメントの整備

Rubyで作成していますので、rdocなどを整備していくと利用者は助かると思いますが、
まずはREADME.mdを書きましょう。GitHubのリポジトリのページでも表示されるので、
説明や簡単な使い方などは載せておくべきかと思います。

日本語で書く場合はREADME.ja.mdREADME-ja.mdなどとするのを見かけます。

Gemの公開

開発がある程度進んで、動作するようになったら、gemをRubygems.orgに登録しましょう。
登録前にアカウントを作成する必要があります。

アカウント作成自体は以下のサイトなどを参考にしてください。

rake releaseは "master"ブランチであることを期待するようですので、開発ブランチから"master"ブランチへマージを事前にしておきます。

$ bundle exec rake release
(後略)

前述していますが、事前にbundle install --binstubsをして、./binをPATHに追加しておけば、bundle execは省略できます。

Rubygemsに登録するとダウンロードされた数が分かるので、少しずつでも増えていくダウンロード数を見るのは感慨深いモノがあります。

バッジ

公開されているREADME.mdには試験の結果やコードの品質チェックなど、様々なバッジが付いているのを見たことがあると思います。

gem version バッジ

Gem Version

Rubygems.orgに登録していれば、gemのページにある"LINKS"の"Badge"から、gemのバージョンを表示するバッジのURLを取得できます。

Markdownの内容をコピーしてREADME.mdに貼り付けてコミットしましょう。

[![Gem Version](https://badge.fury.io/rb/nand.svg)](http://badge.fury.io/rb/nand)

Gitterバッジ

GitterとはGitHubにあるOrginizationやリポジトリに対して、チャットルームを作成できるWebサービスです。

GitHubのアカウントで登録できるので簡単です。
サインインしてホームから"Create a room"でリポジトリのチャットルームを作ってみましょう。

create_room

create room to add badge

ここで、 "Add badge to README on GitHub(via pull request)"にチェックを入れておくと、
gitter-badgerからREADME.mdに対してバッジのURLが貼り付けられたプルリクエストが来るので、
取り込みます。

初めてのプルリクエストのマージには丁度いい練習になると思います。

その他、様々なサービスと連携することで、より 意識が高い リポジトリに見えるでしょう。
他の方のブログが参考になります。

最後に

以上で、説明は終了です。
この文章が誰かの参考になれば、幸いです。

また、この説明は後から思い出しながら書いたものなので、間違いがあるかもしれません。
間違いなどありましたら、ご指摘ください。

あとは、継続できるかどうかですね。(自戒)

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16