高速Rubocopレールアプリケーションの実行
最近、Native Berkopecは面白い観察を共有した
ネイトバーコペック
@ nateberkopec
私は巨大な宝石ファイルを持っていると言います.私はこのGemfileのグループを持っています.バンドルはなぜです.セットアップ(NameOfGroup)は、それらの5つの宝石でそれを別々のgemfileを維持するより非常に遅いです?
午後14時48分
それはBandlerが確認しなければならないという事実によって説明されるかもしれません
Rails開発者は通常、すべてのDEPSを
どうやってこれを克服できるのか?別の宝石ファイルを使用する!
私は長い間、gems開発のためにこのテクニックを使用してきました.こちらがtypical
Railsアプリケーションの開発については、次のようなトリックを実行してコマンドを実行するには、カスタムgemfiles
私たちも
それです.
P . S .なぜインラインジェムファイルを使用しないのですか?私たちは書くことができます
P . P . S .このアプローチの利点の1つは、他のツール、例えば他のツールを実行する能力です.Kuby ) 使用中ローカルDocker for application development ; RuboCOPを実行するコンテナをスピンする必要はありません.あなたがgitフックまたはエディタ統合を使いたいならば、それは特に役に立ちます.
bundle exec whatever
Gemfileが巨大であれば起動するまでに数秒かかる.ネイトバーコペック
@ nateberkopec
私は巨大な宝石ファイルを持っていると言います.私はこのGemfileのグループを持っています.バンドルはなぜです.セットアップ(NameOfGroup)は、それらの5つの宝石でそれを別々のgemfileを維持するより非常に遅いです?
午後14時48分
それはBandlerが確認しなければならないという事実によって説明されるかもしれません
Gemfile.lock
ファイルの一貫性(すべての宝石がインストールされます).したがって、それは我々がそれを改善しようとしてはならないということを意味しませんGel ).Rails開発者は通常、すべてのDEPSを
Gemfile
, などのdevツールを含むRuboCop . ルボコップはリンターであり、高速でなければなりません.RuboCop自体はこのステートメントに準拠していますが、バンドルを介して実行することはできません.どうやってこれを克服できるのか?別の宝石ファイルを使用する!
私は長い間、gems開発のためにこのテクニックを使用してきました.こちらがtypical
rubocop.gemfile
:# gemfiles/rubocop.gemfile
source "https://rubygems.org" do
gem "rubocop-md", "~> 1.0"
gem "rubocop-rspec"
gem "standard", "~> 1.0"
end
バンドルで使用するには、BUNDLER_GEMFILE
変数# first, install the deps
BUNDLE_GEMFILE=gemfiles/rubocop.gemfile bundle install
# then, run the executable
BUNDLE_GEMFILE=gemfiles/rubocop.gemfile bundle exec rubocop
この冗長なアプローチはマシン(CI)のために十分に機能します、しかし、人間のためにでなく:別々のlockfileを維持して、発展においてENV VARSを使うことは完全なユーザー経験から遠いです.Railsアプリケーションの開発については、次のようなトリックを実行してコマンドを実行するには、カスタムgemfiles
bin/whatever
ラッパー.こちらがbin/rubocop
:#!/bin/bash
cd $(dirname $0)/..
export BUNDLE_GEMFILE=./gemfiles/rubocop.gemfile
bundle check > /dev/null || bundle install
bundle exec rubocop $@
魔法$@
あなたが渡すすべての引数プロキシbin/rubocop
, したがって、Rubocopのようなこのラッパーのquackを作る.私たちも
bundle check || bundle install
すべてのdepsが存在することを確認するにはbundle install
あなた自身.それです.
P . S .なぜインラインジェムファイルを使用しないのですか?私たちは書くことができます
bin/rubocop
このように:require 'bundler/inline'
gemfile(true, quiet: true) do
gem "rubocop-md", "~> 1.0"
gem "rubocop-rspec"
gem "standard", "~> 1.0"
end
require 'rubocop'
RuboCop::CLI.new.run
しかし、このアプローチでは、lockfileが全くありません.私たちは、誰もが依存関係の同じバージョンを使用していることを確認したい(“私のコンピュータ上で動作する”状況を回避する).もちろん、我々は正確なバージョンを使用することができますgemfile do ... end
ブロック、しかし、IMOは、バンドルとDEPを管理するより便利ですbundle update
).P . P . S .このアプローチの利点の1つは、他のツール、例えば他のツールを実行する能力です.Kuby ) 使用中ローカルDocker for application development ; RuboCOPを実行するコンテナをスピンする必要はありません.あなたがgitフックまたはエディタ統合を使いたいならば、それは特に役に立ちます.
Reference
この問題について(高速Rubocopレールアプリケーションの実行), 我々は、より多くの情報をここで見つけました https://dev.to/palkan_tula/faster-rubocop-runs-for-rails-apps-10meテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol