apache logをパースするgemを作ってrubygems.orgに公開してみた

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

common形式とcombined形式のapache logをパースするgemを作ってrubygems.orgに公開しました。
https://rubygems.org/gems/apache_log-parser

gem作ってrubygemsで公開までのざっくりした流れを書いときます。誰かの役に立てばと。

gemの名前決める

まず、gemの名前を決めましょう。
当然ですが、既存でrubygems.orgに上がっている名前と同じものは登録出来ないので、
先に確認しておくと良いです。

-(ハイフン)と_(アンダーバー)の使い分け

これ多分明確なルールってなくて結構微妙なんですが、
基本アンダーバーで単語区切った名前にすればよいかと思います。

既存モジュールの拡張とかの場合は、-(ハイフン)で区切ってつなげると良いらしいです。
基本的に、-(ハイフン)で区切った場合は、ディレクトリ構造もそこで階層が一つ下がります。

今回の私のapache_log-parserのようにアンダーバーと-(ハイフン)を両方入れることももちろん可能です。
で、今回、本当は全部アンダーバーにしてapache_log_parserとしたかったのですが、すでにrubygemsに公開されていました。(apache_log_parser)
なのでまあ、「apache_logっていうパッケージの中のParser」っていう感じで、apache_log-parserとしました。

ローカルでgemを作る

gemの作成

bundle gemコマンドですぐ雛形が作れます。

$ bundle gem apache_log-parser

下記のように.gemspecファイル内にTODOとなっている箇所が幾つかあるので、埋めておきましょう。

apache_log-parser.gemspec
  spec.summary       = %q{TODO: Write a short summary. Required.}
  spec.description   = %q{TODO: Write a longer description. Optional.}

githubリポジトリの作成

あと、rubygemsに公開する際にも必要となるので、githubにリポジトリを作ってpushしておきましょう。

$ cd apache_log-parser
$ git commit -m "initial commit"
$ git remote add origin git@github.com:${user_name}/apache_log-parser.git
$ git push origin master

後はlibディレクトリの中などに、どんどんコードを書いていく感じです。

gemをrubygems.orgに公開する

gemのバージョニング

実装が終わったら、バージョンファイルに記載されているバージョンを必要に応じて更新しておくと良いと思います。

version.rb
module ApacheLog
  module Parser
    VERSION = "1.0.0"
  end
end

バージョニングのポリシーは個人の自由です。
今回私の場合は、公開するタイミングで1.0.0にしてみました。

rubygems.orgのapi keyを取得する

rubygems.orgからapi keyを取得して設定ファイルに書きます。
rubygems.orgのユーザ登録がまだの場合は、先に登録してください。

$ curl -u takady https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials
Enter host password for user 'takady':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56    0    56    0     0     38      0 --:--:--  0:00:01 --:--:--    38

実はこのコマンドは、パスワードが間違ってても警告とか出ないんで、
僕は気付かず次の作業に行っちゃったんですが、
それだと次のリリースコマンドがいつまでたっても終わらないです。


間違ってると、ファイルは下記のようになります。

$ cat ~/.gem/credentials
HTTP Basic: Access denied.

正しくは、下記のようにちゃんとapi keyが書き出されている状態です。

$ cat ~/.gem/credentials                                                                                     
---
:rubygems_api_key: aaaaaaaaaaaaaaaaaaaaa

公開する

いよいよ公開ですが、面倒なことはなくコマンドを叩くだけで公開出来ます。
ちなみに、--traceオプションをつけて実行すると詳細出力されるのでつけてます。

$ cd apache_log-parser
$ bundle exec rake release --trace                                                                           
** Invoke release (first_time)
** Invoke build (first_time)
** Execute build
apache_log-parser 1.0.0 built to pkg/apache_log-parser-1.0.0.gem.
** Execute release
Tag v1.0.0 has already been created.
Pushed apache_log-parser 1.0.0 to rubygems.org.

無事終わると、rubygems.orgに出てきます。
とっても簡単でした!