パンくずGemをGretelからBuoysに置き換えた

いわゆるパンくずリストの実現をサポートする Gem の置き換えの話。

同僚の muryoimpl が Buoys という Gem を開発したので、もともと Gretel という Gem を使っていたところをそちらに置き換えた (作者プレゼンによると I18n も使える) 。

github.com

Buoys では Gretel への互換インターフェイス (エイリアスメソッド) が用意されてるくらいに Gretel を意識されいて割りと置き換えは楽だった。

Rails アプリケーションでの実際の置き換えを行なった際のざっくりした手順を次に記す。

手順1. Gemfile を書き換えて bunlde install

Gemfile の gem 'gretel'gem 'buoys' に置き換える。

- gem 'gretel'
+ gem 'buoys'

bundle install する。

% bundle install

手順2. 各種ファイル名を変える

パンくず表示となるパーシャルのファイル名を変更する。

% mv ./app/views/application/_breadcrumb.html.haml ./app/views/application/_buoy.html.haml

パン屑の設定ファイルを配置するディレクトリ名を変更する。

% mv ./config/breadcrumbs ./config/buoys

手順3. コードのテキスト置換をする。

config/buoys の crumb do ... endbuoy do ... end にした。このあたり、Gretel 互換の crumb メソッドというエイリアスが用意されているが、ものはついでなので buoy メソッドに変えておく。

このあたり CSS のクラス名なんかの当該箇所もあわせて文字列置換をしたかったので、ざっくりと自前で作った replace_text というシェルを使って行なった (ざっくり過ぎて使い方のサンプルすらない!) 。ディレクトリ配下にある文字列の一括置換を行なうので git 管理しているディレクトリでの実行を強く推奨する。

github.com

% replace_text breadcrumb buoy

ここまでの buoys への置き換えでだいたい動くと思われるが、RailsAdmin を使っている場合は少しだけ注意点がある。

おまけ. RailsAdmin を使っている場合

上記の手順3で文字列を一括置換した際に、RailsAdmin の breadcrumb メソッドまで buoys という文字列に置き換えている可能性がある。

そういったことのないように、RailsAdmin をエンハンスしているアプリケーションコード中にある breadcrumb メソッドに対しては buoys に文字列置換せず、そのままにしておく。

また、rails_admin.ja.yml などの I18n についても同様のことが言える、パンくずの位置に Translation missing が出ていれば YAML のキーを breadcrumb のままにしておく必要がある。

いまある知見はだいたいこんなところ。