LinkedIn Yevgeniy Brikman
Node.jsもヘビーに使っていた
express
Node.js vs Play 比較
Node.js
学習
- Node.jsの学習は簡単
- 6行書くだけでスタートできる
- express.jsは8行
- nodeを実行するだけでサーバが起動
- 本もいっぱいある
- APIのドキュメントも整備されている
- Stack Overflowもおすすめ
- Node.jsの学習曲線は緩やか
開発
- URLパラメータやパースパラメータを抽出出来る
- プラグインがある
- ただ、XML処理などはライブラリを自分で探す必要がある
- キャッシュに関しては内部でやるのでおすすめしない
- socket.ioは強い
- プラグインを揃えて使う
テスト
- テストは満点
セキュリティ
- CSRFはデフォじゃない
- Node.jsにはevalがあるが、evalとかsettimeoutには致命的な脆弱性がある
ビルド
- npm(コミュニティが大きい)
- 複雑なビルドの場合はGruntとかを使う
- 学習曲線は緩やか
デプロイ
- ホスティングサービスはすごい充実してる
- let it crash気味なので再起動は必須
- monitで死活監視したりする
- デプロイは一応全部Node.js内で出来る
- nginxなどのサポート
デバッグ
- 満点
- IDEでデバッグ可能
スケーリング
- ベンチマークは早い
- 複数のデータアクセスの場合はNode.jsのほうが早い
- non-blocking
- ひとつでもblockingな呼び出しがあれば死ぬかもしれない
メンテナンス
- JSはいたるところにあるので、情報やコードが入手しやすい
- JSも関数型書けるよ!
- ロボットでもJSをかけるよ
- ソースの共有も可能
- コアは安定している
- 型がはっきりしないのは地味にエグい
- メンテナンスは苦痛
- スコープのルールが壊れているし、block scopeなんてないからメンテ性ない
- コールバック地獄
- コアは安定していてもライブラリは不安定
- thisにいろんな意味があるのは悪夢
コミュニティ
- Node.jsのほうがStackOverflowの質問数は多いけど、それはNode.jsがわかりにくいため、かつユーザー数が多いため
- 雇用数は多い
Play
学習
- いきなり35行のファイルやらフォルダやら
- とにかくファイルがいっぱい
- サノバビッチ
- sbtがjarをいろいろとダウンロード
- Activatorテンプレートはサンプルコードも含む
- 学習曲線はNode.jsに劣る
- 本は少なめ
開発
- 静的型づけ
- Scalaにコンパイル
- SQLだとPlayに軍配が上がる
- DB系ライブラリの出来は良い(NoSQLだと同じ感じ)
- フルスタック
- クライアントサイドは自分で書かないといけない
テスト
- テストは満点
セキュリティ
- CSRFはデフォじゃない
- evalな脆弱性は少ない
ビルド
- sbt(インタラクティブなビルドツール)
- 学習曲線は厳しい
- Ivyで依存性を管理。でもIvyは遅い
- Rhinoはとても遅い
デプロイ
- ホスティングサービスは多くない
- (nginxをかます必要があるかも)
デバッグ
- ブラウザ上に表示
- ツールも豊富
スケーリング
- ベンチマークは早い
- non-blocking
- JDBCでブロック
メンテナンス
- 学習曲線は厳しいが高い生産性を維持できる
- 型システムはありがたい
- 表現がいい
- 20年選手JVMで動いている
- 同期か非同期か自分で選べる
- コンパイル遅い
- コールバックヘルもない
- sbtでインクリメンタルコンパイルができる
- Scalaは複雑
- Playは安定しているけど後方互換性がない
- 成熟しているとはいえない
- Playのバージョンアップはライブラリ群のバージョンアップを伴う
コミュニティ
- 第20位の言語(比較的マイナー)
- TypeSafeの運用サポート
- Javaのライブラリが使える
ただし、web frameworkの評価は総合的に行う必要がある