読者です 読者をやめる 読者になる 読者になる

jekyll-mentionsにプルリクしてみた

社内でRailsを教わっていた先生に見捨てられてから早1年半以上、 Rails力は一切向上していませんが、なけなしのRuby力を振り絞ってjekyll-mentionsにプルリクしてみました。Rubyのプロジェクトにプルリクするのはこれが初めてのことです。

github.com

事の発端はGitHubのJekyllが3.0系にバージョンアップしていくつかのエクステンションが使用できるようになったとのことなのでjekyll-mentionsを試してみたのですが、「@takezoe」はリンクになるのに「@McFoggy」はリンクにならなかったことです。

ソースを追いかけていくと「@ユーザ名」を抽出するために/[a-z0-9][a-z0-9-]*/という正規表現を使っており、ユーザ名に大文字を含むとリンクに変換されないという状況のようなのでiオプションを指定するようにしてみました。

もしこのプルリクエストがマージされて将来的にGitHub PagesのJekyllで使えるようになったらGitHubで自分の書いたコードが動くということになりますね!これは胸熱ですね!1行直しただけですが。*1

MacでのRubyプログラミング環境の構築

これだけではなんなので、Mac上でrbenvというバージョンマネージャ*2を使って開発環境を作るところまでのメモを貼っておきます。

まずはHomebrewでrbenvをインストール。

$ brew install rbenv ruby-build
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

一応バージョンを確認。

$ rbenv -v
rbenv 0.4.0

続いてrbenvでRubyをインストール(rbenv install -lでインストール可能なRubyのバージョンの一覧を確認できます)。

$ rbenv install 2.2.2

インストールが終わったら環境全体で使用するRubyのバージョンを設定します。

$ rbenv global 2.2.2

複数のバージョンのRubyをインストールしてある場合はこのコマンドで切り替えて使用することもできます(rbenv versionsでインストール済みのバージョンの一覧を確認できます)。一応Rubyのバージョンも確認しておきます。

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]

Bundlerと動作確認用のJekyllも入れておきます。*3

$ gem install bundler
$ gem install jekyll -v 3.0.3

以上で準備完了です。GitHubからプロジェクトをクローンしてbundle installを実行します。--pathをつけてgemをグローバルにインストールするのではなくプロジェクト内にインストールするようにします。

$ git clone https://github.com/takezoe/jekyll-mentions.git
$ cd jekyll-menstions
$ bundle install --path gems

テストを実行してみましょう。このとき、rake testではなく、bundle execで実行することでプロジェクト内のgemを参照することができます。

$ bundle exec rake test
...
Finished in 0.081885s, 170.9725 runs/s, 170.9725 assertions/s.

14 runs, 14 assertions, 0 failures, 0 errors, 0 skips

ここまで来たらあとはコードを直していくだけです。実際に動作を確かめてみたい場合は以下のようにしてgemをインストールします。*4

$ rake install
jekyll-mentions 1.0.1 built to pkg/jekyll-mentions-1.0.1.gem.
jekyll-mentions (1.0.1) installed.

この状態でJekyllを起動するとインストールしたgemが使用できるはずです。

なお、インストールしたgemは以下のようにして削除することができます。

$ gem uninstall jekyll-mentions -v 1.0.1
Successfully uninstalled jekyll-mentions-1.0.1

1年半前に教わったrbenvやbundler、rakeの使い方がちょっと役に立ったような気がします。ありがとう先生!!

*1:実際はテストケースも直したので7行ほど修正しました。

*2:複数Rubyをインストールして切り替えて使うことができるというもの。rvmという類似品も存在するが、最近はrbenvを使うのが主流らしい。

*3:今回のプルリクエストとはあまり関係ありませんが、Jekyllは最新の3.1系だとkramdownでGFMのFanced Code記法が使えないというバグがあるので3.0系を指定してインストールしました。

*4:bundle exec rake installでプロジェクト内にgemをインストールすることもできますが、動作確認用にグローバルにインストールしたJekyllを使うことを想定しているため、gemもグローバルにインストールしています。