Gemをむやみに使うべきではない?
中身を完全に理解できないGemは負債化する
いつまでもメンテされる保証がないので、動かないときは自分で直せるようになっている必要がある。ソースコードを自分でフォークして修正するか、一生懸命開発者にプルリクを投げるか。
特に注意が必要なGemの特徴
- 巨大である
- スターが少ない
- コア部分を拡張している
- 標準を変更する
- asset系のgem
- 標準ライブラリでできることをやっている
継承とカプセル化のせいでカスタマイズしたい時に足かせになる
隠蔽され過ぎててどこをどういじればいいか分からない。結局、他人が書いたソースを一から読む羽目になって、自分で書いた方が早かったとなりガチ。
使わない機能まで一緒についてくる
依存関係で余計なgemまで引っ張ってきて重たくなる。
メンヘラな女の子の「きちゃった・・・」に通じるものがある。
標準の機能まで書き換えてくれちゃう奴がいる
標準メソッドをオーバーライドしてくれちゃう奴も・・・
こういう罠があることは十分に認識しておこう
kakurenboの重大な欠点はActiveRecordのdestroyを完全に置き換えようとして、ActiveRecordの深い箇所まで改変し、保守が高コスト・高頻度になっていることです。
rails既存の機能を置き換えるgemは地雷だと考える
rails既存の機能を置き換えるコードを絶対に書かない
自分で書けるけど、書く時間がもったいないときは使ってもいい
大前提として、自分でもその機能は時間をかければ実装することができるとかの場合にだけ積極的に使おう。自分がどういう風に実装すればいいのか説明できない場合は使うべきではない。少なくとも内部実装がどうなっているかは確認しよう。
十分検証しよう
何度か使ったことがあるgem、盛んに修正が行われているgem、コミニュティが活発なgemを使おう。そして、できるだけ小さい機能だけを提供しているgemにとどめておこう。なんでもやってくれるgemはコントロールが難しい。
Ruby on Rails の凄さは結局Rubygemsの凄さ(散々disったけど・・・)
基本的にはGemを積極的に使うことを推奨したいけど、基本がわからないうちは用心して使おう。Gem使わないRails開発なんて正直なんのメリットもないですしね。