読者です 読者をやめる 読者になる 読者になる

リレーションモデルにはビューがない

たとえば Railsグループウェアをつくろうと思ったとき、ぼくなら、まずは

  • User
  • Group
  • Membership

みたいな3つのモデルから考えはじめて、次に

  • User has_many Groups through Memberships
  • Group has_many Users through Memberships

みたいな多対多のリレーションを組んで、任意のユーザを任意のグループに所属させて投稿・閲覧を制御できるようなアプリとして設計することだろう。実際のところは、グループウェアの要件次第でモデルの設計もリレーションの設計も変わるでしょうよ、ってそれはその通りで、なんだけれど、そこんところの詳細は以降のお話にとっては重要じゃないので、設計についてはいったん上記の案で FIX ということで。

さて、User モデルと Group モデルには show のビューがありそうだ。つまり「ユーザのページ」「グループのページ」がありそうで、きっと /users/june29 とか /groups/web-boyz とか、素直にやればそういうルーティングになるだろう。一方で、多くの場合、Membership モデルにはビューがないと思う。

「ユーザのページ」に「参加しているグループの一覧」があったとしても、そこに表示されるのは User のビューと Group のビューで、そこに Membership の存在もなんとなく感じることはできるけれど、直接的に目で見ることはできない。きっと /memberships/1 みたいな URL をアドレスバーに見かけることは、まず、ないだろう。

そうだ、リレーションは目に映らない。これが、今回のエントリの主題。

目に映らないものと向き合うのは本当にむつかしくて、なんだかんだで、先に、目に映るものにとらわれてしまいがちだと思う。だけれども、だからこそ、そこには「目に映らないものがある」と認識して、意識的にその「関係」を育てていくことで、よりよい状態を目指していけるんじゃないかなぁって思う。

http://instagram.com/p/b7cWiuKpLR/

自分の身近な人を誰かに紹介するとき、その人の点としての性質を順番に並べていくこともできるのだけれど、それだけでは、自分から語る意味が薄れてしまうような気がして。所属は、年齢は、出身は… 必ずしもぼくが言わなきゃいけないことじゃないもんね。だからぼくは、自分という点と、その人という点の、間に引かれる線の色や太さや形、そこに生じる場の雰囲気とか空気感について、話したくなる気持ちがある。「あいつと一緒にいると、こういうことが起こっておもしろいんだよね」なんてのは、ぼくの口からよく出るフレーズだと思うな。

ふたつの磁石の間に砂をまいて、磁場のカタチを確認するように。人と人の間にも、他の人を置いてみたり、いろんな出来事を置いてみたりして、そこにどんな関係があるのかを知ろうとするのは、とってもおもしろくて、ぼくはそういうのが大好きだ。