console.blog(self);

技術、読んだ本、いろいろ。

ng-mtg#6 AngularJS勉強会に行ってきた

AngularJS使ってないのに、ng-mtg#6 AngularJS勉強会に行ってきた。

年に1回はAngularJSの勉強会に参加してるみたい。いつか使う日が来るかなぁと思いつつ、まだその日が来ない。

行ってみたら、スタッフが足りないみたいだったので、受付のお手伝いしながら話を聴いた。なのでところどころ聴けてない。

セッションはこんな感じ。

  • ディレクティブパターン - 株式会社LIG 林 優一 氏
  • Directiveで実現できたこと - 株式会社ピースオブケイク 今 雄一 氏
  • そろそろ押さえておきたい AngularJSのセキュリティ html5j Webプラットフォーム部 にしむねあ 氏

Togetterもあった。いいね。

Togetterや、他の参加者のかたのエントリもたくさん。いいね。

ディレクティブパターン

受付のお手伝いで、ほとんど聞けなかった…。ので資料を見た感想になってしまうんだけど、実際に使っているひとのデータやコードが公開されているのがうれしい。

スライドに載っているサンプルコードも公開されてる。すてきだ。

Directiveで実現できたこと

noteもcakesも大好きなので、楽しみにしていたセッション。cakesは喜多村みかさんと渡邊有紀さんのTWO SIGHTS PASTが読みたい、写真を観たいためだけに有料会員になってる。

最近は対談のコンテンツもあって、こっちは最新のものは無料(無料会員登録)で読めるみたい。この人達の文章も写真もほんとうに好き。

で、AngularJSの話に戻る。noteのシステム構成はこんな感じ。

  • Rails 4.1 + nginx + MySQL + AngularJS
  • coffeeで6500Lくらい
  • 14 Controller, 33 Service, 36 Directive

note、機能は少ないけど、それでもcoffeeで6500Lってすごく少ないと思う。

RailsAPIとしてJSONを返すだけの構成にしているとのこと。やっぱりそうしたほうが、AngularJSの恩恵を受けやすいよね、と思った。

そろそろ押さえておきたい AngularJSのセキュリティ

AngularJS使っている人も、使っていない人も、目を通すといいと思う。最後にこんな謝辞があって、もうなんだかすごいなと。

謝辞 本資料は竹迫良範様(サイボウズ・ラボ)、佐藤鉄平様(サイボウズ)、 国分裕様(MBSD)に技術レビューをして頂きました。 心より感謝いたします。

セッションでは主にDOM Based XSSとCross-Site Request Forgery (CSRF)について解説されていた。

AngularJSではStrict Contextual Escaping(SCE)という機能が提供されていて、この機能がコンテキストに応じたエスケープ機能を提供してくれるそう。って書いてもわかりにくいけど、あれこれ空気読んでエスケープしてくれるすてきな機能だった。

これがものすごく高機能でびっくりした。詳細はスライドを見ていただければ。ただSCEはビルトインのディレクティブに最適化されていて、カスタムディレクティブではSCEによる保護はあまり期待できないそうなので、注意が必要とのこと。

DOM Based XSSについてはIPAからレポートが出ている。DOM Based XSSについてまとまった情報はそんなに多くないと思うのでおすすめ。

またJPCERTからはこんな報告書がでていて、DOM Based XSSCSRFについても解説されている。

基本的なXSSや、Webアプリケーション全体としては「安全なウェブサイトの作り方」や「体系的に学ぶ 安全なWebアプリケーションの作り方」がおすすめ。

CodeGridを購読している人なら、こちらもいいね。

まとめ

AngularJSのディレクティブがこれだけ使われているんだから、Web ComponentsやPolymerに対する期待が高まるのもわかる気がする。まあ、僕はどっちも使ってないんだけど、そのうち使う日が来るかもなーと思い、心の準備として勉強会で話を聴いたりしている。

AngularJSとは関係ないんだけど、フロントエンドのMVCフレームワークと、サーバサイドのMVCフレームワークをどう使っていくのかが難しい。

懇親会とかでいろいろな方にお話を伺ったら、サーバサイドはAPIJSONを返すだけって構成にしている人が多かった。フロントエンドでMVCフレームワークを使うなら、その構成がいいよね。

普段Railsを使っていて、Backbone.jsを使おうと思ったけど挫折した。RailsでやることとBackbone.jsでやることを、うまく分離できなくて、設計ができなかった。もちろんRailsからはJSONを返すだけって割り切れば、設計できるし、実装もできたと思う。

でも、そうすることが正しいのか、確信が持てなかった。Railsに既存のViewやControllerがある。RailsのViewを使えばJSでテンプレートをレンダリングする必要はない。AngularJSやBackbone.jsを使うってことは、そこになにかメリットがあるからで、そのメリットが少ないなら使わなくてもいいと思う。そのほかにもあれこれ考えて、そのときは普通にRailsjQueryを使って実装した。また違う機会に使ってみたい。