Open3
railsのscopeなどはどうして関数的に定義しなくていいのか調べる
調べるとっかかりがないのでchatgptに聞いてみた。
Ruby on Railsの`scope`やアソシエーションメソッド(例: `belongs_to`)のようなDSL(Domain Specific Language)は、Railsの内部構造とRubyのメタプログラミング機能によって提供されています。
以下は、その背後にある主要な原理と概念を簡単に説明します:
1. **メタプログラミング**: Rubyはメタプログラミングが容易に行える言語です。これにより、コードが動的にメソッドを定義したり、オブジェクトの振る舞いを変更したりすることができます。Railsはこの機能を活用して、モデルやコントローラにDSLのような特性を追加しています。
2. **継承**: Railsの`ActiveRecord::Base`クラスや`ActionController::Base`クラスは、そのサブクラス(実際のモデルやコントローラ)に多くのメソッドや機能を提供します。たとえば、`belongs_to`や`has_many`といったメソッドは、`ActiveRecord::Base`クラスに定義されており、それを継承したモデルクラスから利用できるようになっています。
3. **クラスマクロ**: `scope`や`belongs_to`といったメソッドは、実際にはクラスレベルでのメソッド(クラスマクロとも呼ばれる)です。これらはクラスの定義時に評価され、その結果としてクラスやインスタンスに新しいメソッドや属性が追加されます。たとえば、`belongs_to :user`という記述は、`user`や`user=`といったメソッドをモデルに追加します。
4. **リフレクション**: Railsはリフレクションを使用して、モデル間の関連付けやデータベースのスキーマに関する情報を動的に取得します。これにより、モデルが実際のデータベースのスキーマに応じて適切なメソッドや振る舞いを持つことができます。
これらの概念と原理を組み合わせることで、Railsは非常にDRY(Don't Repeat Yourself)で直感的なAPIを提供しており、これによって開発者は効率的にアプリケーションを構築することができます。
ここら辺の語彙を調べていけばわかりそう
わからんので丁寧に読も、、、p21~
意味わからんかったけど参考文献読んでたらお気持ちわかってきた
Rubyの演算子はメソッドらしいはえ!