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

09

iAPのルーティングへの反感

intra-mart Accel Platform jssp 開発

http://www.intra-mart.jp/developer/blog/entry/2012/10/003943.html

上記についた8ヶ月も前のコメントを今みたのだけど、まあ、そう思うよなー・・・。

ルーティングが存在することの利点:

  • ユーザに対してアクセスさせたいページに直接アクセスさせる、という事がシンプルに実現できる。 (v7系では結構面倒)
  • 上記の副次的なメリットになるけど、URLをユーザ間で共有したり、任意のページをブックマークしておくことができる。(v7系ではできなくはないけど運用考えると可能とは言いがたい)

これに認可がつく事で、URLごとの細かなアクセス制御が実現できるようになっている。が、これもこれで面倒感を上げてしまっているんだろう。

で、デメリットというか、嫌な点を挙げると:

  • XMLうざい。認可設定とか書くとさらにごちゃごちゃして本質的でない感じする
  • なんだかんだでパスとかURLとか関係考えるのだるい
  • HTMLとURLは密接なものなのに、ソースとルーティング設定は離れすぎている感
  • 再起動めんどい
  • csrf対策しないとなー

といったとこかな。開発者に取ったら負担の方が大きくなったかもしれん。

単純にそれぞれこうなれば良いを並べると

  • JSONかJSDocのアノテーション見たいな形だと楽そう。
  • ファイルシステムのパスがそのままurlにマッピングされる、でも良いのではないか
  • ルーティング設定をソースフォルダで書けると良いなあ
  • やはり変更はリアルタイムに再読み込みしてほしい。開発モードの時だけでも
  • csrf対策は自動的にはなんともならないけど解決手段は提供されている。

これにさらに認可設定がついてくる。

認可設定はルート毎にリソースとして定義していく。それが何を表すのかの意味論を追求してリソースURIを設計することをお勧めする。…が、実際アプリを作ってみると、最終的には「管理機能」「ユーザ機能」とかの枠のリソースを定義するだけでまあ良いかという感覚になってきている。あとからユーザが細かく権限をコントロールするというのであればきっちりやる必要があるのだけど、そこまで細かい権限設計をしても実際は有効活用されないのではないかという疑念がこのごろ大きくなってきている。

ルーティング設定ファイルにはルーティング設定ファイル毎のデフォルトの認可リソース/アクションを書く事ができるので、たとえばユーザ機能だけのルーティング定義と管理者機能だけのルーティング定義を分けてしまって、それぞれのファイル内での認可リソースはひとつにしてしまうとちょっと楽だ。

ルーティングにしてもURLをプログラムと1対1でマッピングするのではなく、フォルダでマッピングしてしまう機能がある。このフォルダマッピングを使ってしまえば個別のURL定義はなくて良い。なので、この例で言うとユーザ機能のフォルダと管理機能のフォルダを明確に分けておき、ルーティングもフォルダマッピングで2つだけ書く事にしたら、最初ちょっと書くだけでほぼ終わりだからだいぶ楽になるのではないか。(フォルダマッピングではパス変数がほぼ使えなくなるからダメかとおもったけど、まあ普通にリクエストパラメータでやれって話だ)

もっというと、実際のところはv7系のjsspの独特なパスも使えない訳ではなく、認可が効かないとはいえセキュリティもある程度担保される(それこそ上記の程度の認可しか行わないのなら十分といえる)はずなので、とりあえずユーザが頻繁にアクセスしそうな所だけルートを用意して、あとはv7系のjssp同様に実装する、という選択もありなのかもしれない。まあ、このやり方は明確に非推奨にされているのでおすすめはしないけど。

でもv7系のパスを使ってやる場合は細かい認可制御はできないし、ユーザの利便性を損なうとはいえ、起点となるパスだけxmlで定義して再起動すれば、それ以降はv7と同じノリで開発できると思われるので、それがいい人はそういうやり方もできるよ、という感じにした方が良かったのかもしれない。

ここまではこの記事を書いている2013年10月時点では少なくとも使うことができる情報(のはず)なので、残りはルーティング設定の書式と再起動無しの反映というところかな。個人的にはxmlといっても既に記載されている要素を複製して変える、の繰り返しなので対して問題とは思っていないし、今使ってる端末がSSDであるおかげか再起動もそれほど負担でもないのだけど、もちろん即時反映されると楽だろうなーとは思う。仮に jssp/src/routes*.json とかにすべてのルートを書くとして、jsonとして毎回評価してルーティングするとやっぱり重いと感じるのかな。

ん〜〜〜しかし。整理してみて思ったけど、ルーティングの利点ていまいち訴求しないのかもなあ。無きゃないで辛いんだけども。