Gemfileで未使用のgemを見つけて、使用されなくなった参照をクリーンアップできるようにする方法。
Gemfileで未使用のgemを自動的に見つける方法があるかどうかは疑問です。
時間をかけてアプリケーションを構築してきた人にとっては、何らかの理由で途中で破棄された宝石を手動で簡単に特定できるはずです。
他の誰かから継承されたレガシーアプリケーションの場合、未使用のgemを手動で識別することは非常に困難な作業です。システムに包括的なテストカバレッジがある場合は、Gemfileを変更するたびにテストに合格することを保証しながら、試行錯誤によって未使用のgemを削除するのに役立ちます。
Linuxのファイルアクセス時間を使用して、実際に使用されているものを確認します。
これには以下が必要です。
atime(ubuntu 12.04のstrictatime)オプションでマウントされたパーティションにインストールされたgem:
Sudo mount -o remount、strictatime /
完全なテストカバレッジ(つまり、ファイルアクセス時間を更新するためにテスト実行に依存します)
時間を記録して、テストを実行します。次に、gemdirから次の手順を実行します。
ls --time-style long-iso -ltud1 $PWD/*/lib/** | grep "21:44" | sed s/.*gems.// | sed s/.lib.*// | sort -u
21:44を、テストを実行した時間に変更します。
すべてのテストに合格した場合は、宝石の除去を検討する必要があります。
テストカバレッジ(特に高レベルの機能テスト)が良好であると仮定すると、一度に1つのgemを選択的に削除するスクリプトを作成できます。つまり、すべてのテストをN回実行します。ここで、NはGemfile内のgemの数であり、各テストには1つの欠落しているgemがあります。それは彼らの体重を引っ張らない宝石を取り除くのを助けるでしょう。
gem_bench gemを使用して、Gemfileを分析し、起動時に必要のないgemを特定できます。そこから、どの宝石を完全に取り除くことができるかを決定するために少しの分析が必要です。
起動時に削除できるgemのリストを生成するには:
gem 'gem_bench', :group => :console
_をGemfileに追加します。bundle install
_を実行しますbundle exec Rails console
_を実行します。a = GemBench.check({verbose: true})
bundle clean --force
定義外のgemを削除するためのGemfile.lock
コマンドがあります。
bundle-clean を参照してください。
テストを実行してから:
gem stale
これは次のことを行います。
Staleコマンドは、インストールされているgem内のすべてのファイルの最新のアクセス時間を一覧表示します。
このコマンドを使用して、使用しなくなったgemおよびgemバージョンを検出できます。