Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1
Server Side
Dart
About me
Name
takyam
Twitter
twitter.com/takyam
Github
github.com/takyam-git
Qiita
qiita.com/takyam
About me
My favorite programming languages
• PHP
• JavaScript
• NodeJS
• Go
• Ruby
• Dart <- New!!
Agenda
Dartがクライアントサイドだけではなく、
サーバーサイドの機能も備えていることを紹介。
充分にサーバーサイドでも戦えるプラットフォームです。
サーバーサイドDartとは
01
サーバーサイドDartの比較対象になるのは、
JavaでもRuby...
Server Side Dart
01
Dartで一番ホットな話題は、クライアントサイド
• dart2js
• Dartium
• AngularDart
• PolymerDart
• Fletch
• dartpad
Server Side Dart
01
サーバーサイドもパワフル
• HTTP Server
• WebSocket Server
• Isolate
• Observatory (for profiling)
• Major database drivers (MySQL,Postg...
シンプルなHTTPサーバー
Server Side Dart
01
シンプルなHTTPサーバー (Redstone)
Server Side Dart
01
シンプルなWebSocketサーバー
Server Side Dart
01
Isolateによるマルチコア対応
Server Side Dart
01
Isolateによるマルチコア対応
Server Side Dart
01
shared:true にすると
同じhost/portでサーバーを作れる
細かいこと気にせずにspawnで、
サーバーを追加すれば良い
Isolateによるマルチコア対応
Server Side Dart
01
• 2つのHttpServerサーバーが立ち上がってます
Isolateによるマルチコア対応
Server Side Dart
01
$ wrk -H 'Host: localhost' -d 15 -c 256 -t 4 http://localhost:8080/
Running 15s test...
Isolateによるマルチコア対応
Server Side Dart
01
$ wrk -H 'Host: localhost' -d 15 -c 256 -t 4 http://localhost:8080/
Running 15s test...
Oveservatoryでらくらくデバッグ
Server Side Dart
01
Oveservatoryでらくらくデバッグ
Server Side Dart
01
• --enable-vm-service:{$portNumber} 付きで起動す
るとObservatoryが起動します
• すぐに終了するようなスクリプト...
Oveservatoryでらくらくデバッグ
• debugger
• class hierarchy
• cpu profile
• allocation profile
• heap map
• metrics
• code coverage
S...
Oveservatoryでらくらくデバッグ
Server Side Dart
01
Observatory live demo
データベース系pubパッケージ
• MySQL - pub.dartlang.org/packages/sqljocky
• PostgreSQL - pub.dartlang.org/packages/postgresql
• Redis -...
あらためて、サーバーサイドもパワフル
• サーバーサイドを実装するにあたって、必要最低限なものは既にある
• IsolateやObservatoryといった強力な機能やツールを備えている
• dart:io パッケージが、サーバーサイド開発に必...
vs NodeJS
02
Better NodeJS としての Dart
• NodeJSは一世を風靡したサーバーサイドJSプラットフォーム
• リアルタイムWEB(というかWebsocket)の実装に、

非常に適したプラットフォーム
• ただし、NodeJSでの開発...
Better NodeJS としての Dart
• 一方 Dartは、NodeJSができることは大抵でき、

そのうえでNodeJSを上回る言語仕様、機能、ツールを備えている
• 謎のメモリーリークに悩まされる必要もない
• クライアントサイド...
APIを比較
• https://nodejs.org/api/ と https://api.dartlang.org/ を目diff
して一部気づいたものを抜粋
• Dartに無いもの
• REPL, TTY, smalloc,punycode...
APIを比較
• できる、できないレベルでいうと大して違いない
• それぞれ別のアプローチだったり(isolate / child_process等)、コア
部分には無いけどエコシステムでカバーしてたりする
• そういった意味で、APIの比較は...
パフォーマンスを比較
• https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=json&p=9zlfk-cn4
vs NodeJS
02
パフォーマンスを比較
• https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=db&p=9zlfk-cn4
vs NodeJS
02
パフォーマンスを比較
• https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=query&p=9zlfk-cn4
vs NodeJS
02
パフォーマンスを比較
• https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=update&p=9zlfk-cn4
vs NodeJS
02
パフォーマンスを比較
• https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=plaintext&p=9zlfk-cn4
vs NodeJS
02
パフォーマンスを比較
• 本当にこのベンチマークがあってるか微妙(生よりフレームワーク経
由の方が速いなんて・・・)
• とはいえ、JSON Serialize と Plaintext という、コア部分の速度に
影響される部分でNodeより高い...
環境構築の比較
• Macでのローカル環境の構築という意味だとどっちも簡単
• Linux上での構築という意味だとNodeJSに軍配
• Ubuntu/Debian系はapt-getでインストールできるけど他は大変
• VersionManag...
エコシステムの比較
vs NodeJS
02
パッケージ数 先月のDL数 サイト
Pub 1,673 不明 とりあえず作った感
NPM 150,629 1,496,922,095 カッコイイ
主観的な比較
• pubが育ってないので、足りないパッケージは多い
• パフォーマンスは当初想像していたほどの差は無い
• が、そんな事関係ないレベルで書き心地が違う
• NodeJS vs Dart だとNodeに軍配上がりそうなもんだけど、...
Current and Future
03
サーバーサイドDartの現在
• 使ってる人が少ない(特に国内)
• フレームワークの選択肢が無い
• Webアプリケーションなら Redstone か Shelf
• RestfulAPI だけなら加えて RPC
• どれを選んでも絶対に足り...
サーバーサイドDartの現在(プロダクト投入状況)
• Dart summit で Moving from Node.js to Dart を発表した
Faisal Abid 氏の所属する Dynamatic社 がリリースした Market
W...
現状で趣味アプリ作ってみた感想
• start と shelf を使ってみた感想
• 楽しい と 辛い が半々
• 辛み成分でいうと、出たてのNodeJSみたいな感じ
• 書いてて、とてもキレイに書けるが、アレやコレが無い状態
• オンメモリ以...
現状で趣味アプリ作ってみた感想
• lib/src 以下のディレクトリ構成のベストプラクティスが無い
• pubに公開できるようなライブラリ単位ならともかく、どうディレク
トリ切って、どこから _impl.dart にすべきなのかがふわっとして...
現状で趣味アプリ作ってみた感想
• とか何かいろいろ愚痴っぽい事はあるものの、結局は楽しい。
• 「キレイに書く」ための方法がいくつも用意されてる。
• NodeJSで実現できなかった、「キレイに書かれた非同期処理」を非
常に簡単に実装する事が...
将来に向けての期待と希望
• 何はともあれDartisanが増えてほしいです
• Dartisanが増える -> pubが充実する -> 大勝利
• NodeJSの開発者もDartを触ってみると魅力に気づくはず
• そのためにも 日本Dartユ...
将来に向けての期待と希望
• DartSDK Roadmap を見ても、サーバーサイドで関係ありそうなの
は、「HTTP2 + gRPC」くらいですが、現時点で大抵の事は
「dart:io」使えばできますし、dart-ext で(C/C++)拡...
at the end…
99
最後に
• 日本Dartユーザー会の発足・主催と、

この会を開催していただき、本当にありがとうございました。
• 日本でのDartの盛り上がりが楽しみです。
at the end…
99
Thank you for
listening!!
00
Upcoming SlideShare
Loading in …5
×

Server Side Dart

3,105 views

Published on

#dart_meetup_tokyo http://dartisans-jp.connpass.com/event/15246/ で発表した資料です。
サーバーサイドダートについて@2015/06/06

Published in: Engineering
  • Be the first to comment

Server Side Dart

  1. 1. 1 Server Side Dart
  2. 2. About me Name takyam Twitter twitter.com/takyam Github github.com/takyam-git Qiita qiita.com/takyam
  3. 3. About me My favorite programming languages • PHP • JavaScript • NodeJS • Go • Ruby • Dart <- New!!
  4. 4. Agenda
  5. 5. Dartがクライアントサイドだけではなく、 サーバーサイドの機能も備えていることを紹介。 充分にサーバーサイドでも戦えるプラットフォームです。 サーバーサイドDartとは 01 サーバーサイドDartの比較対象になるのは、 JavaでもRubyでもなく、NodeJSです。 NodeJSよりもDartがパワフルである事を紹介。 NodeJSとの比較 02 いくつかDartでWebアプリケーションを作ってみた、 感想と、そこから考える今後の課題を紹介。 果たしてプロダクション投入は可能なのか。 サーバーサイドDartの現状と今後 03
  6. 6. Server Side Dart 01
  7. 7. Dartで一番ホットな話題は、クライアントサイド • dart2js • Dartium • AngularDart • PolymerDart • Fletch • dartpad Server Side Dart 01
  8. 8. サーバーサイドもパワフル • HTTP Server • WebSocket Server • Isolate • Observatory (for profiling) • Major database drivers (MySQL,Postgres,Redis…) Server Side Dart 01
  9. 9. シンプルなHTTPサーバー Server Side Dart 01
  10. 10. シンプルなHTTPサーバー (Redstone) Server Side Dart 01
  11. 11. シンプルなWebSocketサーバー Server Side Dart 01
  12. 12. Isolateによるマルチコア対応 Server Side Dart 01
  13. 13. Isolateによるマルチコア対応 Server Side Dart 01 shared:true にすると 同じhost/portでサーバーを作れる 細かいこと気にせずにspawnで、 サーバーを追加すれば良い
  14. 14. Isolateによるマルチコア対応 Server Side Dart 01 • 2つのHttpServerサーバーが立ち上がってます
  15. 15. Isolateによるマルチコア対応 Server Side Dart 01 $ wrk -H 'Host: localhost' -d 15 -c 256 -t 4 http://localhost:8080/ Running 15s test @ http://localhost:8080/ 4 threads and 256 connections Thread Stats Avg Stdev Max +/- Stdev Latency 20.47ms 13.14ms 610.85ms 99.46% Req/Sec 3.00k 341.77 3.96k 84.93% 173951 requests in 15.00s, 36.00MB read Socket errors: connect 0, read 249, write 0, timeout 0 Requests/sec: 11595.84 Transfer/sec: 2.40MB • 1つのコアを使った場合
  16. 16. Isolateによるマルチコア対応 Server Side Dart 01 $ wrk -H 'Host: localhost' -d 15 -c 256 -t 4 http://localhost:8080/ Running 15s test @ http://localhost:8080/ 4 threads and 256 connections Thread Stats Avg Stdev Max +/- Stdev Latency 11.41ms 3.07ms 112.37ms 84.89% Req/Sec 5.42k 772.33 7.30k 77.44% 309725 requests in 15.00s, 64.10MB read Socket errors: connect 0, read 249, write 0, timeout 0 Requests/sec: 20648.84 Transfer/sec: 4.27MB • 2つのコアを使った場合(約178%)
  17. 17. Oveservatoryでらくらくデバッグ Server Side Dart 01
  18. 18. Oveservatoryでらくらくデバッグ Server Side Dart 01 • --enable-vm-service:{$portNumber} 付きで起動す るとObservatoryが起動します • すぐに終了するようなスクリプトやライブラリでも使い たい場合は、--pause_isolates_on_exit オプションを 一緒に使います
  19. 19. Oveservatoryでらくらくデバッグ • debugger • class hierarchy • cpu profile • allocation profile • heap map • metrics • code coverage Server Side Dart 01
  20. 20. Oveservatoryでらくらくデバッグ Server Side Dart 01 Observatory live demo
  21. 21. データベース系pubパッケージ • MySQL - pub.dartlang.org/packages/sqljocky • PostgreSQL - pub.dartlang.org/packages/postgresql • Redis - pub.dartlang.org/packages/redis • MongoDB - pub.dartlang.org/packages/mongo_dart • RethinkDB - pub.dartlang.org/packages/rethinkdb • AMQP - pub.dartlang.org/packages/dart_amqp Server Side Dart 01
  22. 22. あらためて、サーバーサイドもパワフル • サーバーサイドを実装するにあたって、必要最低限なものは既にある • IsolateやObservatoryといった強力な機能やツールを備えている • dart:io パッケージが、サーバーサイド開発に必要な
 基礎機能を、ほとんど提供してくれる。 Server Side Dart 01
  23. 23. vs NodeJS 02
  24. 24. Better NodeJS としての Dart • NodeJSは一世を風靡したサーバーサイドJSプラットフォーム • リアルタイムWEB(というかWebsocket)の実装に、
 非常に適したプラットフォーム • ただし、NodeJSでの開発は 辛み を伴っている • Javascriptベースである事がメリットでもあり、デメリットになって いる(異論は認めます) vs NodeJS 02
  25. 25. Better NodeJS としての Dart • 一方 Dartは、NodeJSができることは大抵でき、
 そのうえでNodeJSを上回る言語仕様、機能、ツールを備えている • 謎のメモリーリークに悩まされる必要もない • クライアントサイドのDart->JSのように、コンパイル作業も必要ない • 型が欲しいからTypeScript使う、といったことも不要 • NodeJSを使うのかio.jsを使うのか悩む必要もない • パフォーマンスもNodeJSより多少良い vs NodeJS 02
  26. 26. APIを比較 • https://nodejs.org/api/ と https://api.dartlang.org/ を目diff して一部気づいたものを抜粋 • Dartに無いもの • REPL, TTY, smalloc,punycode,__dirname,__filename • Nodeに無いもの • mirrors, collection, coreのクラスいろいろ(Setとか) vs NodeJS 02
  27. 27. APIを比較 • できる、できないレベルでいうと大して違いない • それぞれ別のアプローチだったり(isolate / child_process等)、コア 部分には無いけどエコシステムでカバーしてたりする • そういった意味で、APIの比較はあまり意味をなさない vs NodeJS 02
  28. 28. パフォーマンスを比較 • https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=json&p=9zlfk-cn4 vs NodeJS 02
  29. 29. パフォーマンスを比較 • https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=db&p=9zlfk-cn4 vs NodeJS 02
  30. 30. パフォーマンスを比較 • https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=query&p=9zlfk-cn4 vs NodeJS 02
  31. 31. パフォーマンスを比較 • https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=update&p=9zlfk-cn4 vs NodeJS 02
  32. 32. パフォーマンスを比較 • https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=plaintext&p=9zlfk-cn4 vs NodeJS 02
  33. 33. パフォーマンスを比較 • 本当にこのベンチマークがあってるか微妙(生よりフレームワーク経 由の方が速いなんて・・・) • とはいえ、JSON Serialize と Plaintext という、コア部分の速度に 影響される部分でNodeより高いスコアが出てる。 vs NodeJS 02
  34. 34. 環境構築の比較 • Macでのローカル環境の構築という意味だとどっちも簡単 • Linux上での構築という意味だとNodeJSに軍配 • Ubuntu/Debian系はapt-getでインストールできるけど他は大変 • VersionManager(nodebrew/nvm)はNodeに軍配 • DartのVersionManagerは知らない・・・ • ググったら maksimr/dvm ってのがあるみたいです • PaaSやクラウドだとどっちも大して変わらない気がします vs NodeJS 02
  35. 35. エコシステムの比較 vs NodeJS 02 パッケージ数 先月のDL数 サイト Pub 1,673 不明 とりあえず作った感 NPM 150,629 1,496,922,095 カッコイイ
  36. 36. 主観的な比較 • pubが育ってないので、足りないパッケージは多い • パフォーマンスは当初想像していたほどの差は無い • が、そんな事関係ないレベルで書き心地が違う • NodeJS vs Dart だとNodeに軍配上がりそうなもんだけど、
 JavaScript vs Dart で圧倒的にDartに軍配があがる。 • 結果として、NodeJS vs Dart は、Dartの勝利 vs NodeJS 02
  37. 37. Current and Future 03
  38. 38. サーバーサイドDartの現在 • 使ってる人が少ない(特に国内) • フレームワークの選択肢が無い • Webアプリケーションなら Redstone か Shelf • RestfulAPI だけなら加えて RPC • どれを選んでも絶対に足りない機能がある • Ubuntu以外のオンプレに載せるの辛い • CentOS/RHELへのインストールが大変 • 情報が少ない Current and Future 03
  39. 39. サーバーサイドDartの現在(プロダクト投入状況) • Dart summit で Moving from Node.js to Dart を発表した Faisal Abid 氏の所属する Dynamatic社 がリリースした Market Wolf というAndroidAppのサーバーサイドはDartで書かれているよ うです。 • ソレ以外だと このサービス とか このサービス もサーバーサイドが Dartで書かれてるらしいです。 • 少なくともメジャーなサービスでの導入実績は知らないです
 (ご存知の方教えてください>< Current and Future 03
  40. 40. 現状で趣味アプリ作ってみた感想 • start と shelf を使ってみた感想 • 楽しい と 辛い が半々 • 辛み成分でいうと、出たてのNodeJSみたいな感じ • 書いてて、とてもキレイに書けるが、アレやコレが無い状態 • オンメモリ以外のセッション管理や、CSRFトークン&認証用のパッ ケージが見つからず結局自作 • 本当に pub はスカスカなんで、未来に向けて投資し放題 Current and Future 03
  41. 41. 現状で趣味アプリ作ってみた感想 • lib/src 以下のディレクトリ構成のベストプラクティスが無い • pubに公開できるようなライブラリ単位ならともかく、どうディレク トリ切って、どこから _impl.dart にすべきなのかがふわっとしてる • パッケージルートのファイルが、importとpart でどんどん肥大化し ていく Current and Future 03
  42. 42. 現状で趣味アプリ作ってみた感想 • とか何かいろいろ愚痴っぽい事はあるものの、結局は楽しい。 • 「キレイに書く」ための方法がいくつも用意されてる。 • NodeJSで実現できなかった、「キレイに書かれた非同期処理」を非 常に簡単に実装する事ができるのは気持ちいい。 • Stream / Future を使わざるを得ないので、使いこなすせると楽し い • 何やかんやゆーても新しい言語の習得は楽しい Current and Future 03
  43. 43. 将来に向けての期待と希望 • 何はともあれDartisanが増えてほしいです • Dartisanが増える -> pubが充実する -> 大勝利 • NodeJSの開発者もDartを触ってみると魅力に気づくはず • そのためにも 日本Dartユーザー会や日本のDartisansによる情報の増 加は非常に重要だと思っています Current and Future 03
  44. 44. 将来に向けての期待と希望 • DartSDK Roadmap を見ても、サーバーサイドで関係ありそうなの は、「HTTP2 + gRPC」くらいですが、現時点で大抵の事は 「dart:io」使えばできますし、dart-ext で(C/C++)拡張すればそれ こそ夢は無限大な感じだと思ってます。 Current and Future 03
  45. 45. at the end… 99
  46. 46. 最後に • 日本Dartユーザー会の発足・主催と、
 この会を開催していただき、本当にありがとうございました。 • 日本でのDartの盛り上がりが楽しみです。 at the end… 99
  47. 47. Thank you for listening!! 00

×