web-dev-qa-db-ja.com

Gemfileで未使用のgemを見つける方法

Gemfileで未使用のgemを見つけて、使用されなくなった参照をクリーンアップできるようにする方法。

33
Joe

Gemfileで未使用のgemを自動的に見つける方法があるかどうかは疑問です。

時間をかけてアプリケーションを構築してきた人にとっては、何らかの理由で途中で破棄された宝石を手動で簡単に特定できるはずです。

他の誰かから継承されたレガシーアプリケーションの場合、未使用のgemを手動で識別することは非常に困難な作業です。システムに包括的なテストカバレッジがある場合は、Gemfileを変更するたびにテストに合格することを保証しながら、試行錯誤によって未使用のgemを削除するのに役立ちます。

8
Prakash Murthy

Linuxのファイルアクセス時間を使用して、実際に使用されているものを確認します。

これには以下が必要です。

  1. rvmgemsetで分離されたプロジェクトのgem
  2. atime(ubuntu 12.04のstrictatime)オプションでマウントされたパーティションにインストールされたgem:

    Sudo mount -o remount、strictatime /

  3. 完全なテストカバレッジ(つまり、ファイルアクセス時間を更新するためにテスト実行に依存します)

時間を記録して、テストを実行します。次に、gemdirから次の手順を実行します。

ls --time-style long-iso -ltud1 $PWD/*/lib/** | grep "21:44" | sed s/.*gems.// | sed s/.lib.*// | sort -u

21:44を、テストを実行した時間に変更します。

36
fakeleft

すべてのテストに合格した場合は、宝石の除去を検討する必要があります。

テストカバレッジ(特に高レベルの機能テスト)が良好であると仮定すると、一度に1つのgemを選択的に削除するスクリプトを作成できます。つまり、すべてのテストをN回実行します。ここで、NはGemfile内のgemの数であり、各テストには1つの欠落しているgemがあります。それは彼らの体重を引っ張らない宝石を取り除くのを助けるでしょう。

12
mahemoff

gem_bench gemを使用して、Gemfileを分析し、起動時に必要のないgemを特定できます。そこから、どの宝石を完全に取り除くことができるかを決定するために少しの分析が必要です。

起動時に削除できるgemのリストを生成するには:

  1. _gem 'gem_bench', :group => :console_をGemfileに追加します。
  2. _bundle install_を実行します
  3. 次のコマンドで_bundle exec Rails console_を実行します。
  4. a = GemBench.check({verbose: true})
10
Mike

bundle clean --force定義外のgemを削除するためのGemfile.lockコマンドがあります。

bundle-clean を参照してください。

8
iltempo

テストを実行してから:

gem stale

これは次のことを行います。

Staleコマンドは、インストールされているgem内のすべてのファイルの最新のアクセス時間を一覧表示します。

このコマンドを使用して、使用しなくなったgemおよびgemバージョンを検出できます。

2
L.R.