Railsの特殊なところ

# はじめに
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コメントがコードに干渉するってこと！！？？？<br><br>👼「Be Openだよ、これがRailsだ。勉強だよ」<br>👿「ありえない実装だよなあ！受け入れられねえよなあ！！」<br>という戦いが常に起きてる・・・ <a href="https://t.co/woLwcVMIMk">pic.twitter.com/woLwcVMIMk</a></p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1751035773057646983?ref_src=twsrc%5Etfw">January 27, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Railsを学んでいると、特殊すぎる仕様にクラッとすることがあります。
そんな仕様たちを共有して消化しつつ、もし今後Railsを教えることがあれば見返せるように、記事にします。

フレームワークをしっかり学ぶのが初めてなので、
学習を続けるにあたって自分自身が変わっていくとは思いますが。
とりあえず今のところの所感を。
# 問題
ローカルルールが多いところ、いろんな記法があるところがめちゃくちゃ苦手です。
## コメントがコードに干渉する
個人的にはありえない仕様です。冒頭のこれですね
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コメントがコードに干渉するってこと！！？？？<br><br>👼「Be Openだよ、これがRailsだ。勉強だよ」<br>👿「ありえない実装だよなあ！受け入れられねえよなあ！！」<br>という戦いが常に起きてる・・・ <a href="https://t.co/woLwcVMIMk">pic.twitter.com/woLwcVMIMk</a></p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1751035773057646983?ref_src=twsrc%5Etfw">January 27, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## あまりにも変わりすぎる、等価な記法
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Railsのこのどうとでも書ける感、正直苦手。やりすぎだと思う。<br>でも慣れたら便利なんだろうし、慣れていきたいなあ <a href="https://t.co/nYpDm6PsYM">pic.twitter.com/nYpDm6PsYM</a></p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1751031504837517387?ref_src=twsrc%5Etfw">January 26, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

レンダー周りだと、これもそうですね。「`_user.html.erb`を呼び出す」って書きたい。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">`&lt;%= render <a href="https://twitter.com/User?ref_src=twsrc%5Etfw">@user</a> %&gt;`<br>これで`_user.html.erb`呼び出してるんすか・・・まじすか・・・忘れそう・・・</p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1749231312484098117?ref_src=twsrc%5Etfw">January 22, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 書いて無いことを読み取ってくる
便利でもあると思います。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">form_with(model: user)だけで`create`と`update`の振り分け自動化されてるのヤバ。これがRails・・・ <a href="https://t.co/DZwi2qe41z">pic.twitter.com/DZwi2qe41z</a></p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1749215543956320688?ref_src=twsrc%5Etfw">January 21, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

これもそうですね。「id」なんて書いて無いのに、自動でidにアクセスする。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">user_url（ヘルパー）<br>resource: usersで自動で提供される<br>与えられたインスタンスから自動で:idにアクセスし、showアクションにつなぐ <a href="https://t.co/8Umck2CwFw">pic.twitter.com/8Umck2CwFw</a></p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1749228175241166986?ref_src=twsrc%5Etfw">January 22, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">belongs_to nameでname_idとname_typeを参照するといういつものアレ（不文律が多すぎる）</p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1751397771691843714?ref_src=twsrc%5Etfw">January 28, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## あまりに魔法すぎる、省略されすぎる
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">routes.rbの`resources`って書き方、魔法すぎるww <a href="https://t.co/bKJUqdTlPc">pic.twitter.com/bKJUqdTlPc</a></p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1749199879770169742?ref_src=twsrc%5Etfw">January 21, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Rails特有の言い回し・他の言語と意味が違うもの
### 「フィルタ」
一般的には「集合からの抽出」という意味で使われるが、
Railsでは（コントローラにおける）「フィルタ」は、アクション前後に共通アクションのこと。
### 「レイアウト」
一般的には「配置・構成」といった意味で使われるが、
Railsでは共通して適用されるHTMLを指す。
### 「スコープ」
一般的には「変数・関数のアクセス可能範囲」を指すが、
Railsでは（モデルにおいて）データベースクエリを名前付きメソッドとして保存することを指す。
# 終わりに
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">まーじで魔法なんですよね。ブラックボックス。<br>「炎魔法！」で炎出てる感じですw</p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1749223452056449194?ref_src=twsrc%5Etfw">January 22, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

魔法使いになるのはやぶさかではないんですが、Rails以外に応用効きにくそうなのと、「記憶喪失になった自分が読んでもわかるコード」にはならなそうなのが苦手。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Railsの「設定より規約」ってよくわからなかったけど<br>「設定がほとんどの場合で共通ならば、その設定をアプリケーションのデフォルトにすべきである」<br>という言い換えはしっくり来た。苦手な理由もこれかあ<br>「共通する設定」について知識が弱い</p>&mdash; たま / RUNTEQ53A (@SamuraiStats) <a href="https://twitter.com/SamuraiStats/status/1751325449119309958?ref_src=twsrc%5Etfw">January 27, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

CoC（設定より規約）という概念についての一解釈ですね。
「共通すること、慣習的なことはまとめようよ」という理解。
そうなると、「共通」「慣習」を知らない人からすると？？？？なことが多いという。

まあ、慣れるにつれて、「Railsってただただ便利では・・・？」派になりつつある🙄🤗ので、このまま頑張ります。