Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyプロジェクトに最適なGemの選び方:失敗しないライブラリ選定ガイド

Rubyで何かを実現したいとき、それに対応するGemはたいてい存在します。いや、正確には「数十個」存在すると言うべきでしょう。中には洗練されていて機能豊富、しかも活発にメンテナンスされているものもありますが、作者が一度だけ直面した特定のユースケースを解決するために書かれたものもあります。選択肢が豊富にあるからこそ、「どれが正解なのか」を見極めるのが難しいのです。そしてこの選択は非常に重要です。プロジェクトに導入してから後悔しても、あとで取り除くのは容易ではありません。

まずは数字で絞り込む

問題を解決するライブラリが必要になったとき、私はまずRuby Toolboxを確認します。Ruby Toolboxはカテゴリごと(例:「Subscription Management」など)にGemの一覧を調べられる便利なサイトで、次のような情報がひと目でわかります。

  • どれだけ使われているか?

    人気のあるGemには、それなりの理由があります。世界中の開発者が同じGemを使っていれば、困ったときに助けを得やすくなるのも大きなメリットです。

  • 更新は最近・頻繁に行われているか?

    継続的にメンテナンスされているか、それとも古いフレームワークへの対応プルリクエストが放置されたままか。最後のリリースが数年前なら、そのGemは避けたほうが無難です。そもそも現在のアプリ環境と互換性がない可能性が高いからです。

Ruby Toolboxで見つけたGemをこの2つの基準でふるいにかければ、本格的に検討すべき候補リストが完成します。さらにRuby Toolboxはソースコード、ドキュメント、公式サイト、バグトラッカーへのリンクも提供しているので、次のステップでも役立ちます。

コードとドキュメントを精査する

  • ドキュメントは充実しているか?

    公式サイトがあれば必ず確認しましょう。ドキュメントの質はどうか?RDocは用意されているか?必要なときに必要な答えを見つけられるか?

  • テストは書かれているか?

    テストコードを覗いてみましょう。test/spec/ディレクトリはそもそも存在するのか?test_truth程度の中身のないテストしかないのか?作者はリグレッション(退行)に気づけるのか?

  • Issueやプルリクエストの動向を見る

    バグは素早く修正されているか?Issueやプルリクエストに活発な議論があり、きちんと対応されているか?それとも放置されたままか?

  • Google、Stack Overflow、RedditでGem名を検索する

    開発者コミュニティはそのGemをどう評価しているか?どのGemが推奨され、どれが避けられているか?

  • GitHubでGemが提供するクラス名を検索する

    実際のアプリでどう使われているか?使いやすい設計か?それとも他の開発者がGemの問題を回避するためにハックを重ねているか?

ここまで進めれば、候補は数個にまで絞り込めているはずです。

感覚的な判断基準

ここからの基準はやや主観的です。だからこそ「あなたのプロジェクト」に合ったGemを見つける必要があります。ただし、この部分をおろそかにすると、後で必ず後悔することになります。

  • ドキュメントのサンプルコードから、Rubyらしい設計かどうか感じ取る

    Rubyのイディオム(慣用的な書き方)が使われているか?それともJavaやPHPを書いているような感覚になるか?これはAPIラッパー系のGemで驚くほど頻繁に起こります。

  • 小さな部品がうまく組み合わさって構成されているか?

    作者が提供したオブジェクトを組み合わせて、作者すら想像していなかったものを作れるか?おそらく、そんな場面は必ず訪れます。

  • プロジェクトに既にある別のGemが依存していないか?

    もし既に依存関係があるならラッキーです。統合作業の手間が省け、Bundlerとのバージョン競合にも悩まされずに済みます。

  • Gemはあなたのアプリについて何か前提を置いていないか?その前提は今も将来も成り立つか?

    ActiveResourceのように、通信先サーバーのAPI仕様について前提を置くGemもあります。ResourceControllerのように、コントローラーの挙動を決めつけるGemもあるでしょう。前提を置くGemは、その前提が成り立っている間は開発速度を大きく向上させ、コードをシンプルにしてくれます。しかし前提がアプリと食い違うようになった瞬間、何日もモンキーパッチを当てたりデバッグしたりし、結局Gemを丸ごと引き剥がす羽目になりかねません。

「基準が多すぎる!」と思ったあなたへ

そう、プロジェクトに最適なGemを選ぶための基準は山ほどあります。とはいえ、毎回すべてを確認する必要はありません。多くの場合、Ruby Toolboxを開いて一番人気のGemを選べばそれで十分です。

しかし、アプリの中核を担うGemというものが存在します。HTTPライブラリ、データベースライブラリ、あるいはコントローラーをきれいに保つことを謳うものなどがそうです。こうした重要なGemについては、余分な時間をかけてでも、クリーンで、活発にメンテナンスされ、ドキュメントが整備され、自分の考える「あるべき動作」と一致しているかを確認する価値があります。

これらの基準はすべてGoogleスプレッドシートにまとめました。似たようなGemが多すぎて比較に困ったとき、手軽に評価できます。スプレッドシートはこちらから入手できます。

  1. Ruby開発者のための時間計算量とBig O記法 徹底解説ガイド

    時間計算量は、コンピュータサイエンスの中でも最も興味深い概念のひとつです。しかも、特別な学位がなくても十分に理解できます。 この概念が面白いのは、あるアルゴリズムやプログラムがなぜ遅いのかを見抜き、どうすれば高速化できるのかを明確にしてくれる点にあります。 もちろん、自分が書いたコードにもすぐに応用できます。 さらに、教科書に載っているような高度なアルゴリズムだけではなく、日常的に書くコードにも役立つのがポイントです。本記事の後半で実際に確認していきます。 まずは、「遅い」と「速い」の定義から整理しましょう。 「遅い」と「速い」の定義 100万個の数字を150ミリ秒(ms)でソートするのは、果

  2. Apple Watchを最大限に活かすおすすめアプリ厳選ガイド

    スマートウォッチは、単なる時計の枠を超えた多機能デバイスです。特にApple Watchは、豊富なアプリと組み合わせることで、その可能性を大きく広げられるのが魅力。せっかく手に入れたマルチユースなガジェットを、より快適に使いこなすためにも、アプリ選びはとても重要です。 ランニング・水泳・サイクリングといったカロリー消費系のワークアウトを記録できるアプリや、1日の歩数をカウントしてくれるアプリ、日々のタスク管理やパスワードなどの覚えておきたい情報を記録しておけるアプリまで、ラインナップは実に多彩です。 また、iPhoneをお持ちの方なら、Apple Watchと同期させることでさらに便利な連携が