Rubotyのplugin gemを作った〜!

どんなgem

ruboty-snack
「お腹すいた」という言葉に反応してご飯系の絵文字を返してくれる。
ruboty-snack.gif (1.6 MB)

以下、説明を書いたのだが、読みづらすぎるので、丁寧に書き直したい。
「理系の作文技術」を読み返そう、「数学文章作法」も読みたい。

gemの作り方

  1. gemの名前を決める
  2. bundle gemでgemの雛形を作る
  3. gemspecを編集する
  4. gemの中身を書く
  5. gemのパッケージを作る
  6. リリースする

名前を決める

まず、gemの名前をきめる。
rubygemsで名前がかぶっていないか確認する。
今回のgemは、Rubotyがおやつを投げてくれるので ruboty-snackにした。candy

bundle gemする

gemの雛形をつくるために、 bundle gem ruboty-snack する。

🌸 bundle gem ruboty-snack
🌸 tree
.
└── ruboty-snack
    ├── Gemfile
    ├── LICENSE.txt
    ├── README.md
    ├── Rakefile
    ├── bin
    │   ├── console
    │   └── setup
    ├── lib
    │   └── ruboty
    │       ├── snack
    │       │   └── version.rb
    │       └── snack.rb
    ├── ruboty-snack.gemspec
    └── spec
        ├── ruboty
        │   └── snack_spec.rb
        └── spec_helper.rb

gemspecを書く

生成された ruboty-snack.gemspec をひらいて、TODO と書かれている箇所を編集する。
gemを公開するなら以下の箇所は消す。

  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
  # to allow pushing to a single host or delete this section to allow pushing to any host.
  if spec.respond_to?(:metadata)
    spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
  else
    raise "RubyGems 2.0 or newer is required to protect against " \
      "public gem pushes."
  end

rubotyのgemだったら、spec.add_dependency "ruboty" を書き忘れないようにする point_up

gemの中身を書く

Rubotyのgemはディレクトリにお作法がある。
ハンドラーはlib/ruboty/handlers/snack.rb に記述する。
lib/ruboty/snack.rb の中で、ハンドラーのファイルを require する。

releaseする

GitHubにディレクトリを作ってプッシュする。
rubygems.orgにアカウントを作っておく。
bundle exec rake build すると、.gem package を作ってくれる

最終的なディレクトリはこんな感じ

🌸 tree
.
├── Gemfile
├── Gemfile.lock
├── LICENSE.txt
├── README.md
├── Rakefile
├── bin
│   ├── console
│   └── setup
├── lib
│   └── ruboty
│       ├── handlers
│       │   └── snack.rb
│       ├── snack
│       │   └── version.rb
│       └── snack.rb
├── pkg
│   └── ruboty-snack-0.1.0.gem
├── ruboty-snack.gemspec
└── spec
    ├── ruboty
    │   └── snack_spec.rb
    └── spec_helper.rb

bundle exec rake release する tada
何かを修正したら、lib/ruboty/snack/versions.rb でバージョン数を上げてコミットして、buildとreleaseすればおけ。

感想

はじめてgem releaseしたので嬉しかった! relaxed
はじめてのPull Requestももらった! heart_eyes
このgemをつかってkombu_botを作ったらリアクションしてくれる人がいて嬉しい。pploggerの皆様、宣伝ありがとうございます。