技術メモ Ruby on RailsにおけるControllerの"@"と、エンジニア的な葛藤の面白さ

f:id:piyo_yeah:20181202190633j:plain


@マークの正体は?

 結論から言うと「Viewに表示したいものには@ って付けるルール」があるだけらしい。
 Ruby on Railsは勿論、Rubyにおける一種のフレームワークに過ぎないわけだが、Rubyにおける @ マークの意味とは全く異なっているわけだ。
 因みにRubyにおける @ マークのルールは「インスタンス変数の先頭につける」だ。つまりRubyにおいては変数のScopeを変える行為を意味する。
 この知識から「RailsでViewファイルがControllerの値を使用できるのは、その値がインスタンス変数だからだ」と誤解していたが、答えは下記に書いてあった。

techracho.bpsinc.jp

何故 @ マークを使うのか

 Rails は比較的小規模なプログラムの開発のしやすさに定評がある(大規模になるとRails の強みが活かせない、という声もチラホラ聞く)。
 Railsの基本思想であるCOC (Convention over Configuration = 設定よりも規約) に則ると、ControllerからViewに値を渡す行為も簡略化されて然るべきだ、という発想があったとのことだ。
 そこで、Controllerではあまり使われない @ マークの仕様を変更するという着想に至ったというのだ。

細かい仕様をめぐる開発者の葛藤

 上で引用した翻訳記事の後半において、@マークによる変数のハックについて考察がされている。
 before_actionによるコールバックを用いる方法ではコードの動きが追いにくいし、テストがしにくい。けれども同じコードを書くのは如何なものだろうか。
 プログラミング言語による開発には常に、コーディング規約や開発スタイルといった問題が頭をもたげる。
 そもそもシステムとは人間が楽をするためのものだ。人間を効率的に活動させる本職であるエンジニアは、必然的に「如何に楽が出来るか」を考え続けることになる。
 こういった答えのない論争を楽しめる人は、技術屋の素質があるのではないかと勝手に思っている(まだ新卒エンジニアの身だが・・・)。

新卒目線で語る、Rails の活用法

 Railsを用いた大きなプログラムを職場で扱っていて感じたことは、Railsは暗黙の了解が多すぎてよくわからん、ということ。
 沢山のController、Model、View、その基本的なパーツはDirectory単位で分類されているのでわかりやすいものの、データのやり取りが非常に見えにくい。
 先述のbefore_action や、継承しているHelper、暗黙の了解で実は継承されているHelperやModule、などなど、目に見えないところで色んなものが動いている。
 勿論、筆者の経験不足も大きな原因の一つではあるが、目に見えないものを動かそうと思うなら、それだけの明文化されたルールが必要なんじゃないかと思うのだ。
 人間社会を運営するために無数の法律が、無数の専門家が必要なのは論を俟たないだろう。人間には決まり事が必要なのだ。それはシンプルに、そして明文化されていることが望ましい。
 ハイコンテクストな日本社会では実感しにくいのかもしれないが、今普通に生きていけるのは、長い時間をかけてよくわからんルールが体に染みついているからではなかろうか。