2018年7月27日金曜日

gemを作って公開する

若干古い記事、かつbundleを使うような記事しか見当たらなかったので、もう少し簡単にできる方法を書く。

といっても、公式の以下のページをなぞるだけ。
https://guides.rubygems.org/make-your-own-gem/

まずはクラス化するなりモジュール化するなり、ライブラリとして使えそうな状態のツールを作成する。
拙作だが、以下のようなイメージ。
https://github.com/syamoji/getInstagram
この中のgetInstagramDataWithTag.rbをリネームしてgem化する。
今回は、 instagram-tag-searchとした。 

ツールができたら、gem化する作業に入る。
ライブラリ名としたいディレクトリを作り、その中に
  • ライブラリ名.gemspec 
  • libフォルダ
    • ライブラリ名.rb
とする。
ライブラリ名は、他のgemとバッティングしていないか、予め検索しておくこと。

プロジェクトフォルダのイメージ
 


gemspecファイルを以下のように編集する。

Gem::Specification.new do |s| s.name = 'ライブラリ名' s.version = '0.0.1' s.date = '2018-07-24' s.summary = "gemの要約" s.description = "gemの説明" s.authors = ["作者の名前"] s.email = 'メールアドレス' s.files = ["lib/ライブラリ名.rb"] s.homepage = 'Webページのアドレス。githubページなどにしても良い。' s.license = 'MIT' s.add_runtime_dependency '依存ライブラリ', '~> 1.5', '>= 1.5.6' # バージョンは依存ライブラリのものに合わせること end


準備はできたので、gemファイルを作る。
$ gem build ライブラリ名.gemspec
  Successfully built RubyGem
  Name: ライブラリ名
  Version: 0.0.1
  File: ライブラリ名-0.0.1.gem
gemファイルができたので、試しにローカルでインストールする。  
環境によってはsudoが必要かもしれない。
$ gem install ./ライブラリ名-0.0.1.gem
Successfully installed ライブラリ名-0.0.1
Parsing documentation for ライブラリ名-0.0.1
Done installing documentation for ライブラリ名 after 0 seconds
1 gem installed
 ローカルでインストールできたかは、irbなどで試すと良い。
$ irb
> require 'ライブラリ名'
=> true
gem公開の準備は以上。
次はrubygem上の準備を行う。

https://rubygems.org/ こちらで登録を済ませておく。
認証メールが届くので、リンクをクリックしたら登録完了。

サインイン後のページで、右上のユーザ名とアイコンが有るエリアをクリックする。




 
遷移後のページで、Edit Profileをクリックする。 
ページの真ん中あたりに API ACCESS の項目があるので、そこの curl コマンドをコピーし、ターミナルで実行する。


rubygemのパスワードが求められるので入力すると、
以下のような表示が出て、終了する。

Enter host password for user 'syamoji':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56    0    56    0     0    115      0 --:--:-- --:--:-- --:--:--   115

先程ローカルで作ったgemがアップロードできるようになるので、アップロードする。

$ gem push ライブラリ名-0.0.1.gem
  Pushing gem to https://rubygems.org...
  Successfully registered gem: ライブラリ名 (0.0.1)

rubygemsのプロファイルページにgemが増えていると思うが、コマンドでも確認する。
プロファイルページの表示例。


$ gem list -r instagram-tag(ライブラリ名の一部)

*** REMOTE GEMS ***

instagram-tag-search (0.0.1)

検索可能なことを確認できたら、実際にインストールしてみる。
ローカルからインストールしたものがまだ残っているかもしれないので、念の為uninstallしておくこと。

$ gem uninstall ライブラリ名

通常のgemと同じくインストールする。

$ gem install instagram-tag-search
Fetching: mini_portile2-2.3.0.gem (100%)
Successfully installed mini_portile2-2.3.0
Fetching: nokogiri-1.8.4.gem (100%)Fetching: nokogiri-1.8.4.gem
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.8.4
Fetching: instagram-tag-search-0.0.1.gem (100%)
Successfully installed instagram-tag-search-0.0.1
3 gems installed
自作gemが公開できた。

当然本来はテストコードなどを書くべき(公式でも In short: TEST YOUR GEM! Please! と悲痛な叫びが書かれている)だが、 最もお手軽にする方法は以上。