Edited at

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

More than 3 years have passed since last update.

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に出てきます。

とっても簡単でした!