ほとんどの人が聞いたことのない7つの素晴らしいRubyGems
Railsプロジェクトで使用できる最高のRubygemは何ですか?
それがこの記事でわかることです!
私はあなたに7つの宝石を与えるつもりですが、あなたが百万回見たのと同じ古い宝石ではありません 、非常に役立つがあまり知られていない宝石をいくつか紹介します。
しかし、それを行う前に…
警告。
ほぼすべてのことのために宝石を引き込む開発者を見てきました。
リモートで役立つと思われる場合。
その宝石が彼らが抱えている問題を解決するかどうか、それが最良の選択肢であるかどうか、よく維持され、文書化されているかどうかなどを考える時間をとらずに。
それは間違いです。
なぜですか?
プロジェクトが依存するものが多いほど、状況が変わったときに壊れてしまう可能性が高くなります。
そして、物事は常に変化します。
新しいRailsバージョン、新しいRubyバージョン、新機能など
そうは言っても…
Gemsを使用すると、多くの作業を節約し、コードをクリーンアップし、セキュリティの問題を回避できるため、賢明に使用してください。
今 :
リストに入りましょう。
1。コードをクリーンに保つためのデッドルートを見つける
Railsアプリケーションが大きくなるにつれて、ますます多くのルートが蓄積されます。
コードを変更すると、これらのルートの一部が古くなります 。
もう必要ありません…
ただし、config/routes.rb
に残ります 、管理が難しくなります。
削除するルートをどのように見つけますか?
traceroute
という宝石があります 。
ルートを読み込み、定義したコントローラーアクションと比較します。
ただし、現時点では2つの制限があります :
- Rails6では機能しません
- 暗黙のコントローラーアクションは検出されません
Rails 6のサポートを追加するためのプルリクエストを送信しましたが、これらの制限がない独自のバージョンも作成しました。
ここで見つけることができます。
2。問題を回避できるように、移行をより安全にします
Railsの移行は、間違って行われると多くの問題を引き起こす可能性があります。
例 :
Railsには列のキャッシュがあり、移行を実行してもこのキャッシュはリセットされないため、列を削除すると問題が発生する可能性があります。
別の例 :
インデックスを追加してPostgreSQLを実行している場合、操作が完了するまでテーブル全体がロックされます。
ユーザーには良くありません。
アプリケーションは、ロックされたテーブルを操作する必要があるリクエストに応答できなくなります。
良いニュースですか?
これらすべてを覚えておく必要はありません。
strong_migrations
の助けを借りて 宝石、本番環境に移行する前に、これらの安全でない移行の1つがいつ発生したかがわかります。
3。安全でないトランザクションの防止
Railsトランザクションは、「オールオアナッシング」操作であると想定されています。
このように見えます :
Book.transaction do # ... end
ただし、transaction
以外のことを行う場合 ファイルへの書き込みやAPIリクエストの作成などの制御を行うと、この「オールオアナッシング」の効果はもはや当てはまりません。
ご想像のとおり、これはあらゆる種類の問題につながります。
解決策は何ですか?
それほどハイテクではありませんが、実際には、「副作用」や、トランザクションの「外の世界」に影響を与えることを避けるだけです。
アイソレーターの宝石はこれを助けることができます。
すべてのトランザクションを監査して、安全であることを確認します。
あなたがしなければならないのはgemをインストールすることです、そしてそれが悪いtransaction
を検出したとき 例外が発生します。
試してみてください!
4。遅いテストを見つけて、より速くする
遅いテストは楽しいものではありません。
ただし、テストが遅い理由を見つけて修正できるようにするためのツールがあります。
これらのツールの1つは、test-prof
の組み合わせです。 + ruby-prof
。
使用方法は次のとおりです :
TEST_RUBY_PROF=1 rake
出力 :
%self total self wait child calls name 43.21 2.001 2.001 0.000 0.000 1 Kernel#sleep 2.97 0.184 0.138 0.000 0.046 1640 Array#permutation 1.39 0.064 0.064 0.000 0.000 144 PG::Connection#async_exec
ここで、sleep
への呼び出しをはっきりと見ることができます 、しかし、これは簡単にAPI呼び出し、大きなファイルの読み取り、遅いSQLクエリなどである可能性があります。
もう1つできることは、イベントプロファイラーを使用することです。
このように :
EVENT_PROF='sql.active_record' EVENT_PROF_EXAMPLES=1 rake
これは、最も遅いクエリを実行しているテストを見つけるのに役立ちます。
ところで、Rails 6は並列テストを追加しました。これは、test/test_helpers.rb
で有効にする必要があります。 現在のプロジェクトをアップグレードする場合。
5。データの一貫性を高める
検証は素晴らしいです。
ただし、Webアプリケーションの構築に使用しているフレームワークは関係ありません。
データをデータベースに直接インポートするか、生のSQLを使用してレコードを作成するか、検証をスキップするORMのメソッドを使用することで、いつでも検証をバイパスできます。
言い換えれば…
検証はユーザーエラーからのみ保護し、開発者エラーからは保護しません。
これらの開発者エラーにより、データに一貫性がなくなる可能性があります。
良いニュースですか?
すべてではないにしても、ほとんどの最新のSQLデータベースは、検証などの一連のルールである「制約」をデータベースレベルで実装しています。
したがって、データの一貫性を高めたい場合は、これらの制約を実装する必要があります。
あなたを助けることができる1つの宝石はdatabase_consistencyです。
この宝石の使い方は?
まず、インストールする必要があります。謎はありません。
次に、bundle exec database_consistency
を実行します ターミナルで、確認したいプロジェクト内。
このようなレポートが作成されます :
fail Comment title column should be required in the database fail Comment author column should be required in the database
次は何ですか?
change_column_null
を使用して、欠落しているデータベース制約(この場合はnullではない)を追加します。 移行。
6。リファクタリング時間!あなたのコードで最悪の犯罪者は誰ですか?
コードを改善したいが、どこから始めればよいかわからない場合は
いくつかの指標を取得してください!
循環的複雑度やチャーンなど、多くのコード指標があります。チャーンは、コードの経時変化率を調べます。
どのように?
gitの変更履歴を使用します。
結果は?
最も変更が多いファイルのリスト。
時間の90%をUser
の変更に費やしている場合 モデル…おそらくLONGメソッドを含むBIGファイルです。リファクタリングの素晴らしい候補です!
これらの絶えず変化するファイルを見つけるのに役立つ1つの宝石は、attractor
と呼ばれます。 。
このように実行します :
attractor report -p app
HTMLレポートと、リファクタリングの取り組みに集中するために使用できる解約率の高いファイルのリストを生成します。
いいね!
7。本番環境で使用されているコードと使用されていないコードを確認する
コードの改善に役立つ別のツールで終了しましょう。
coverband
と呼ばれます 。
このgemを本番環境で実行すると(オーバーヘッドが少ない)、実行されているコードのカバレッジレポートが表示されます。
未使用のビューを追跡することもできます!
これは、コードを削除してプロジェクトをクリーンアップするときに決定を下すのに役立ちます。
未使用のコードを蓄積させないでください!
概要
テストを高速化し、コードを改善し、安全性を高めるために(主にRails)プロジェクトで使用できる7つの強力であまり知られていないRubygemについて学習しました。
宝石の乱用についてのちょっとした警告を覚えておいてください。ただし、新しい宝石を試すことを妨げないようにしてください。
Rubyのスキルを向上させ、ブログをサポートしたい場合は、私のRubyの本であるRubyDeepDiveのコピーを購入することを検討してください。 🙂
読んでくれてありがとう!
-
Ruby on Railsとは何ですか?なぜそれが役立つのですか?
Ruby on Rails(RoRの場合もある)は、最も人気のあるオープンソースのWebアプリケーションフレームワークです。 Rubyプログラミング言語で構築されています。 Railsを使用すると、単純なものから複雑なものまで、アプリケーションの構築に役立ちます。Railsで実行できることには制限がありません。 フレームワークとは何ですか? フレームワークは、ソフトウェアを作成するときに使用する特定の構造を提供するコード、ツール、およびユーティリティのコレクションです。 この構造により、コードがより整理されます。 正しく使うことを学ぶと、作業が簡単になります。 レールは正確に何を
-
私はRubyonRailsポッドキャストに参加していました!
私は先週、Ruby on Railsポッドキャストに招待されました。そこでは、ここやリストに書いた記事、本の執筆、習慣の形成、人々の行き詰まりなど、さまざまなことについて少し話しました。 まだ聞いていない場合は聞いてください!