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

RubyでのZeitwerkとモジュールの自動読み込み(明確に説明)

この記事では、Rubyでのクラスとモジュールの自動ロードについて説明します。 Rails6の一部である新しい「Zeitwerk」ジェムを含みます。

質問から始めましょう…

複数のソースコードファイルを1つにまとめるにはどうすればよいですか?

require それら。

ファイルを要求すると、Rubyはそれを読み取り、内部のコードを実行します。ただし、必要なファイルのリストがある場合は、おそらくすべてをロードする必要はありません

少なくともすぐには…

必要な場合にのみファイルを読み込むにはどうすればよいですか? アプリケーションをより速く起動できるようにしますか?

そこで自動読み込みが登場します!

自動読み込みの使用方法

Rubyには自動読み込み機能が組み込まれています。

定数に基づいています。

Coconutのような定数の場合 が初めて検出されると、Rubyは関連するファイルを読み込もうとします。

しかし最初に

この定数をファイル名で登録する必要があります。

このように

autoload :Coconut, "lib/coconut.rb"

これで、Rubyは、Coconutを使用するときにどこを見ればよいかを認識します。 クラスまたはモジュール。

しかし、何がさらに良いか知っていますか?

定数を手動で登録する必要がなく、Rubyがすべてを見つける場所を正確に知っていたと想像してみてください。

ええと…

これはRailsが行うことですが、 Rails6はこのautoloadを使用しませんでした メカニズム。

Rails6より前のRailsでの自動ロード

それがどのように機能するかを完全には理解していませんが、Railsはconst_missingを使用しています 、autoloadの代わりに ファイルを自動的に検索してプロジェクトにロードします。

なぜそれが役立つのですか?

requireを使用する必要がないことを意味するため Railsプロジェクトで。

設定より規約…

ルールに従えば、すべて自動的に行われます。

ルールは

  1. ファイルを見つけられる場所に配置します(ActiveSupport::Dependencies.autoload_pathsで定義されているとおり) )
  2. ファイルごとに1つのクラス/モジュールを定義する
  3. アンダースコア(UsersControllerを使用して、クラス名にちなんでファイルに名前を付けます => users_controller

次に…

コードがこれらのクラス名のいずれかを参照するときはいつでも、Railsはそれらを見つける場所を知っています。

とても役に立ちました。

Rails6以降のRailsでの自動ロード

Rails 6には、新しい一定の自動読み込みメカニズムが導入されています。

Zeitwerkと呼ばれています。

これは「クラシック」レールの自動読み込みとどのように異なりますか?

const_missingとは異なり モジュールのネストなどの情報が不足している古いバージョンのRailsで使用されていたアプローチでは、いくつかの制限があります。

ZeitwerkはRubyのautoloadを使用しています 。

この新しい実装は、同様のファイル命名規則に従います。

実際

Zeitwerkはファイル名を使用して、クラス名users_controllerを推測します。 => UsersController

これは以前とは正反対です。

ところで、引き続きautoload_pathsを使用できます 、ただし、"/lib"のようなBASEパスのみを追加する必要があります 、"/lib/**"の代わりに 。

なぜですか?

これは、名前空間とネストで機能する方法です。

  • "lib"がある場合 自動読み込みで、"Fruit::Orange"を定義したい 、ファイル名は"lib/fruit/orange.rb"である必要があります 。
  • ただし、"lib/fruit"がある場合 自動ロードでは、別のフォルダを使用する必要があるため、ファイル名は"lib/fruit/fruit/orange.rb"になります。 同じクラスの場合。

最良の部分は?

この新機能はRailsに接着されていないため、Rails以外のプロジェクトで使用できます!

概要

Rubyでのモジュールの自動読み込み、正確にはそれが何であるか、そしてどのように機能するかについて学びました!

この新しい理解により、Rubyプロジェクトを最も効果的な方法で構成できるようになります。

あなたの番です。編集者を開いて楽しんでください。

読んでくれてありがとう! 🙂


  1. Ruby on Railsとは何ですか?なぜそれが役立つのですか?

    Ruby on Rails(RoRの場合もある)は、最も人気のあるオープンソースのWebアプリケーションフレームワークです。 Rubyプログラミング言語で構築されています。 Railsを使用すると、単純なものから複雑なものまで、アプリケーションの構築に役立ちます。Railsで実行できることには制限がありません。 フレームワークとは何ですか? フレームワークは、ソフトウェアを作成するときに使用する特定の構造を提供するコード、ツール、およびユーティリティのコレクションです。 この構造により、コードがより整理されます。 正しく使うことを学ぶと、作業が簡単になります。 レールは正確に何を

  2. Ruby開発者向けのラックの説明

    すべてのRails、Sinatra、およびその他のRuby Webフレームワークの舞台裏で何が起こっていますか? 答えは、これを可能にする重要なコンポーネントであるラックです。 しかし、ラックとは正確には何ですか? Rackは、フレームワーク(Rails)とアプリケーションサーバー(Puma)の間のレイヤーです。 彼らがコミュニケーションをとることを可能にするのは接着剤です。 なぜラックを使用するのですか? さまざまなフレームワークとサーバーを交換できるため、Rackを使用しています。 それらはプラグインできるコンポーネントになります 。 これは、Rails、Sinatr