技術メモ Ruby on RailsにおけるControllerの"@"と、エンジニア的な葛藤の面白さ
@マークの正体は?
結論から言うと「Viewに表示したいものには@ って付けるルール」があるだけらしい。
Ruby on Railsは勿論、Rubyにおける一種のフレームワークに過ぎないわけだが、Rubyにおける @ マークの意味とは全く異なっているわけだ。
因みにRubyにおける @ マークのルールは「インスタンス変数の先頭につける」だ。つまりRubyにおいては変数のScopeを変える行為を意味する。
この知識から「RailsでViewファイルがControllerの値を使用できるのは、その値がインスタンス変数だからだ」と誤解していたが、答えは下記に書いてあった。
何故 @ マークを使うのか
Rails は比較的小規模なプログラムの開発のしやすさに定評がある(大規模になるとRails の強みが活かせない、という声もチラホラ聞く)。
Railsの基本思想であるCOC (Convention over Configuration = 設定よりも規約) に則ると、ControllerからViewに値を渡す行為も簡略化されて然るべきだ、という発想があったとのことだ。
そこで、Controllerではあまり使われない @ マークの仕様を変更するという着想に至ったというのだ。
細かい仕様をめぐる開発者の葛藤
上で引用した翻訳記事の後半において、@マークによる変数のハックについて考察がされている。
before_actionによるコールバックを用いる方法ではコードの動きが追いにくいし、テストがしにくい。けれども同じコードを書くのは如何なものだろうか。
プログラミング言語による開発には常に、コーディング規約や開発スタイルといった問題が頭をもたげる。
そもそもシステムとは人間が楽をするためのものだ。人間を効率的に活動させる本職であるエンジニアは、必然的に「如何に楽が出来るか」を考え続けることになる。
こういった答えのない論争を楽しめる人は、技術屋の素質があるのではないかと勝手に思っている(まだ新卒エンジニアの身だが・・・)。
新卒目線で語る、Rails の活用法
Railsを用いた大きなプログラムを職場で扱っていて感じたことは、Railsは暗黙の了解が多すぎてよくわからん、ということ。
沢山のController、Model、View、その基本的なパーツはDirectory単位で分類されているのでわかりやすいものの、データのやり取りが非常に見えにくい。
先述のbefore_action や、継承しているHelper、暗黙の了解で実は継承されているHelperやModule、などなど、目に見えないところで色んなものが動いている。
勿論、筆者の経験不足も大きな原因の一つではあるが、目に見えないものを動かそうと思うなら、それだけの明文化されたルールが必要なんじゃないかと思うのだ。
人間社会を運営するために無数の法律が、無数の専門家が必要なのは論を俟たないだろう。人間には決まり事が必要なのだ。それはシンプルに、そして明文化されていることが望ましい。
ハイコンテクストな日本社会では実感しにくいのかもしれないが、今普通に生きていけるのは、長い時間をかけてよくわからんルールが体に染みついているからではなかろうか。