じゃんけんをする自作gemを作ってみた話

はじめに

今回は初めてrubygemsに自作gemを公開するまでの流れを記述していきます。

参照ページ

テンプレを作成

bundleが入っている前提で話を進めます。

bundle gem Janken -t

とターミナルに入力するとgemのテンプレができます。

ライセンスについて聞かれるので二つともyを入力しました。 ※ライセンスの詳細については参照ページを見てください

gemspecを設定

lib = File.expand_path("lib", __dir__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require "janken/version"

Gem::Specification.new do |spec|
  spec.name          = "janken"
  spec.version       = Janken::VERSION
  spec.authors       = ["KKZoo"]
  spec.email         = ["your@email.address"]

  spec.summary       = %q{janken program.}
  spec.description   = %q{can play janken.}
  spec.homepage      = "https://github.com/KKZoo/Janken"
  spec.license       = "MIT"

  # Specify which files should be added to the gem when it is released.
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
  spec.files         = Dir.chdir(File.expand_path('..', __FILE__)) do
    `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
  end
  spec.bindir        = "exe"
  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]

  spec.add_development_dependency "bundler", "~> 2.0"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec", "~> 3.0"
end

これを設定しないとbuild時にerrorが出る。

処理を書く

lib/janken.rbに処理を書いていきます。

細かいことはGitHubに処理を書いてあるのでそちらを見てください。

gemの動作をローカルで確認

cd ~/Desktop/janken
bundle install
bundle exec rake install
irb
require "janken"

Janken.judge("rock","paper","A","B")

gemのアカウントを作る

GitHubのrepositoryにpushした後にrubygemsでアカウントを作りedit profileページにて下記のコマンドがあるからそれをコピペしてパスワードを入力

$ curl -u アカウント名 https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials;  ~/.gem/credentials 

gemを公開する

rake build
rake release

とすると自作gemがremoteで公開されます。

gemをinstallして動作確認

gem install janken
irb
require "janken"

OnePlayer.janken("rock")

元々のソースがCPUが出したじゃんけんの手を外部のtxtに保存する形式だったのだがローカルだと正しく起動したけど、公開後だとパーミテーション系のエラーなのか上手く動作しなかったので、急遽デバッグした。

終わりに

大変だったけど、自作gemが公開されたわくわく感にもにた達成感がたまらなかった。

貧相なgemだけどみなさん使ってみてくれるとありがたいです。