Accueil
Explorer
Soumettre la recherche
Mettre en ligne
S’identifier
S’inscrire
Publicité
Node.js を選ぶとき 選ばないとき
Signaler
Ryunosuke SATO
Suivre
プログラマ
26 Oct 2013
•
0 j'aime
208 j'aime
×
Soyez le premier à aimer ceci
afficher plus
•
83,129 vues
vues
×
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Check these out next
Hello, Node.js
Shin Sekaryo
Node.js Hands-On
Akinari Tsugo
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
Node js 入門
Satoshi Takami
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Shunsuke Watanabe
Node.js×mongo dbで3年間サービス運用してみた話
leverages_event
Sails.jsのメリット・デメリット
Ito Kohta
1
sur
102
Top clipped slide
Node.js を選ぶとき 選ばないとき
26 Oct 2013
•
0 j'aime
208 j'aime
×
Soyez le premier à aimer ceci
afficher plus
•
83,129 vues
vues
×
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Télécharger maintenant
Télécharger pour lire hors ligne
Signaler
東京Node学園祭2013 での発表資料です。
Ryunosuke SATO
Suivre
プログラマ
Publicité
Publicité
Publicité
Recommandé
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
4.1K vues
•
63 diapositives
Nodeについて
Natsuki Yamanaka
15.9K vues
•
23 diapositives
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
7.2K vues
•
26 diapositives
TypeScriptへの入口
Sunao Tomita
22.2K vues
•
36 diapositives
Node.js入門
俊夫 森
30.7K vues
•
50 diapositives
Node.js で Web アプリ開発
Tatsumi Naganuma
2.3K vues
•
25 diapositives
Contenu connexe
Présentations pour vous
(20)
Hello, Node.js
Shin Sekaryo
•
1.4K vues
Node.js Hands-On
Akinari Tsugo
•
1.8K vues
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
•
16.3K vues
Node js 入門
Satoshi Takami
•
82.6K vues
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
•
7.8K vues
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Shunsuke Watanabe
•
5.4K vues
Node.js×mongo dbで3年間サービス運用してみた話
leverages_event
•
19.2K vues
Sails.jsのメリット・デメリット
Ito Kohta
•
2.6K vues
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
•
5K vues
サーバサイドNodeの使い道
pospome
•
10.7K vues
[大図解]ピグライフはこう動いている
Akihiro Kuwano
•
12.2K vues
AngularJS2でつまづいたこと
Takehiro Takahashi
•
4.5K vues
Bp study39 nodejs
Yohei Sasaki
•
1.5K vues
MVCフレームワーク Sails.jsについて機能紹介
kamiyam .
•
5.6K vues
20131012 nodejs
Amuro Nishizawa
•
1K vues
最近のフロントエンドツールの紹介
Ryo Iinuma
•
11.8K vues
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
•
49.2K vues
Hokuriku.net 2013 01-26 node.js
Tadahiro Ishisaka
•
1.1K vues
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
Ryunosuke SATO
•
4.6K vues
ビルド職人の朝は早い
Masashi MATSUI
•
3.7K vues
Similaire à Node.js を選ぶとき 選ばないとき
(20)
Nseg第32回勉強会
ko ty
•
762 vues
Nodeにしましょう
Yuzo Hebishima
•
294 vues
Node.jsで始める Modern JavaScript Framework
kamiyam .
•
2.7K vues
第7回鹿児島Node.jsの会勉強会資料
Koichi Uchimura
•
423 vues
ROS JAPAN Users Group Meetup 03
Daiki Maekawa
•
10.9K vues
Javaな人が気を付けるべきJavaScriptコーディングスタイル
Maaya Ishida
•
901 vues
Aiming study#6pdf
Koutaro Chikuba
•
21.7K vues
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Hiroyuki Kusu
•
60K vues
JavaEdge第3回ライブセッション
Yoichiro Tanaka
•
889 vues
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
•
7.9K vues
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
•
755 vues
インフォグラフィックス時代のD3.js入門
貴寛 益子
•
7.4K vues
僕の Serverless web application
祐樹 夏目
•
340 vues
OpenLayersで始める地図の操作
Yuki Yazaki
•
600 vues
javascript を Xcode でテスト
Yoichiro Sakurai
•
3.6K vues
120512 metro styleapp_javascript
Takayoshi Tanaka
•
507 vues
Jsのビルド環境
fourside
•
88 vues
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
Yusaku Kinoshita
•
415 vues
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
•
2.2K vues
Introduction of Rhodes
Hitoshi Kuroyanagi
•
1.8K vues
Publicité
Plus de Ryunosuke SATO
(17)
片手間JS on Rails
Ryunosuke SATO
•
6.3K vues
Ember コミュニティとわたし
Ryunosuke SATO
•
7.5K vues
gem の探し方
Ryunosuke SATO
•
12.4K vues
Rails あるある
Ryunosuke SATO
•
35.2K vues
はじめる Ember.js!! ~ Getting started with ember.js ~
Ryunosuke SATO
•
10.4K vues
How to relaunch "sapporojs.org" ~Introduction to middleman~
Ryunosuke SATO
•
2.8K vues
Introduction for Browser Side MVC
Ryunosuke SATO
•
3.6K vues
コミュニティのある風景
Ryunosuke SATO
•
2.7K vues
capybara で快適なテスト生活を
Ryunosuke SATO
•
14.7K vues
Testable JavaScript
Ryunosuke SATO
•
3.1K vues
Social coding をもっと楽しみたいあなたへ
Ryunosuke SATO
•
2.2K vues
Clean Javascript
Ryunosuke SATO
•
16.8K vues
Node.jsってどうなの?
Ryunosuke SATO
•
3K vues
アジャイル的アプローチから見えてきたこと
Ryunosuke SATO
•
1.8K vues
脱レガシー化計画
Ryunosuke SATO
•
1.7K vues
Pusherとcanvasで作るリアルタイムグラフ
Ryunosuke SATO
•
3.6K vues
ServerSideJavaScript
Ryunosuke SATO
•
1.9K vues
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき 東京Node学園祭 2013 2013.10.26 Sapporo.js 佐藤
竜之介(Ryunosuke SATO)
提供 Community for people
who like JavaScript. Sapporo.js
自己紹介
@tricknotes I am a
software developer who love JavaScript and Ruby. http://tricknotes.hateblo.jp/
I love OSS
I am a
contributer of Ember.js
Sapporo.js http://sapporojs.org/
/* * advertising * * !!Important!! *
2013.11.30 JavaScript 道場 http://connpass.com/event/3674/
n i 幌 札 2013.11.30 JavaScript 道場 http://connpass.com/event/3674/
Idobata https://idobata.io
*/
よろしく お願いします
Node.js を選ぶとき 選ばないとき 東京Node学園祭 2013 2013.10.26 Sapporo.js 佐藤
竜之介(Ryunosuke SATO)
今日の話 私が web アプリケーション
を作るときに、 Node.js を選んだ場面、選ばなかった場面があります そのときの背景を交えつつ、 Node.js と Rails を比較し Node.js の適切な使い所について考察 します
Why Rails?
Node.js ライブラリには Ruby
/ Rails の影響を 受けているものが多い * * * * Rails(generator)<-> Sinatra <-> Sprockets <-> Rails <-> yeoman Express Mincer Sails なので、有意義な比較ができそう
対象者 * Node.js 以外の選択肢を知らない方 *
Node.js をあまり使ったことがない方
注意 早く快適にアプリケーションを開発する、 ということに主眼を置いて考察していきます パフォーマンスやサーバリソースなどの 優先順位は低めです
さて、みなさんが web ア プリケーション
を作りはじ めるとき、どういう基準でそ の手段を選ぶでしょうか?
Node.js の場合
Node.js での web
アプリ ケーション開発について 確認してみましょう
http://nodejs.org/
まずは素の状態で始めてみる var http =
require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/'); $ curl http://localhost:1337 Hello World
Node.js の基本的な仕組みを理解する には大事な一歩 でも、これだけだとまだまだ簡単には作れそうにない
実際にはもっと複雑なアプリケーション を作ることになるでしょう 複雑さに立向うために ライブラリを使う
http://expressjs.com/
例えば、 express を使ってみる var
express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('Hello World'); }); app.listen(3000);
express はとてもシンプル コアが大きくないし、拡張も簡単 ただ、自由度が高いために整理するのに工夫が必要
確かに、express だと、 学習コストは低いかもしれない 学習コスト? 開発速度を維持するコスト? どっちが大事? もうすこし大きなフレームワークを好むひともいるか もしれない
http://sailsjs.org/
model 周りが貧弱 * 関連を扱えない *
マイグレーションがない データベースとつなげればいいんじゃなくて、 ドメインロジックの管理も適切に行いたい...!! そこまで大きな手助けしてくれるフレームワークでは ないのでは...?
最初に大長編 Gruntfile.js を生成する 生成されたコードはバージョンアップに 追従するのが面倒 デフォルトで上手いことやってほしい
http://gruntjs.com/
contlib で様々なタスクが配布され ているのはありがたい but...
設定を毎回書くのは手間 grunt.loadNpmTasks('grunt-contrib-coffee'); grunt.initConfig({ coffee: { compile: { files:
{ 'result.js': 'source.coffee' } } } });
もっと、スムーズに開発を進めたい...!!
Rails の場合
Asset pipeline * CoffeeScript
や Sass のコンパイル * asset ファイルの minify, concat * digest hash の付与 Grunt 使ってやりたくなるようなことは、 デフォルトでやってくれる
Asset pipeline * application.js //=
require jquery //= require underscore // //= require app application.js にリクエストを投げると、 すべて連結して取得できる ビルド時には minify + digest が付与される
ビルドタスク $ rake asset:precompile そもそもデフォルトで入っている
js のライブラリの管理 * jquery-rails *
underscore-rails * moment-rails ... assets のパスが追加される、だけ 静的なファイルをリポジトリに含めなくてOK
ActiveRecord * * * * validation relation migration ドメインロジックの管理
一本の道があるということ の良い所
その道に沿うように他のライブラリが成長していく Rails に乗る形で、まとまった単位の機能を提 供するライブラリが多い * 画像アップロード
-> carrierwave * 認証管理 -> devise * OAuth provider -> doorkeeper やりたいことを実現するまでの手数が少ない
ちょっと基本に立ち返る
そもそも、Node.js と Rails ではスタートが違う
“Evented I/O for
V8 javascript.” あくまで、非同期 IO の環境 web 開発以外でも活躍している
http://nodeos.github.io/
https://github.com/rogerwang/node-webkit
“Web development that
does’t hurt” web 開発のためのフレームワーク 7 年かけて環境が整備されてきている
フレームワーク ライブラリ 言語(実装) 言語(仕様)
Rails が開発効率に重点を置いているので、 使いやすいのは納得できる Node.js では、まだその大きさのフレーム ワークは出てきてなくて、
小回りが効くライ ブラリが多い
Node.js にも、 道を敷いてくれるような フレームワークがあるとよいの...? そうでもない、ような...
私の例
自分の例① ->
NotHub http://nothub.org/
NotHub * GitHub のイベントをリアルタイムに通知する Chrome
Extension * 受け取るイベントを設定可能 * public なリポジトリ限定
よくある使い方 * ライブラリのバージョンアップを早く知りたい * 自分のリポジトリが
star されたのを知りたい * 興味があるハッカーの活動を知りたい
GitHub API Pub Crawler Redis Sub Publisher Chrome Extension crawl
最初は Ruby で書き始めたが、 パフォーマンスでなくて
Node.js で書き直した * GitHub の API をとにかく叩く必要があった * Ruby でマルチスレッド処理するのは意外と面倒 * Ruby で非同期書くのも手間
そもそも、Rails が得意な 分野ではない
通知の部分は単純な push 通知なので、 Socket.IO
がフィットした
ビルドタスクは Rake 当時は Grunt
の開発が始まったばかり Chrome Extension をパッケージしたい 今だと Grunt を使うかも
自分の例② ->
starseeker http://starseeker.so/
starseeker * GitHub の
followings の star を daily メールでお知らせする web アプリ * リアルタイムじゃなくてアーカイブ
よくある使い方 * 良さそうなライブラリを知る手がかりに!! * 朝、仕事を始める前に
hot なリポジトリをチェック
GitHub API save Crawler MongoDB read Web Application PostgreSQL crawl
* * * * Crawl したデータを MongoDB
へ MongoDB なら Node.js と思って書き始めたが... ユーザ管理とか OAuth 周りが意外と面倒 Rails でやることに
Crawl する部分は Node.js
メール配信も、Rails がいい感じにフィットした * html/text
の multipart メール * html とのコード共有
<-> 両方ともそれぞれに良さがあるので、 それぞれに適切な場面がある!!
よくある誤解集
これだけで選択するのは まだ早い
‘ クライアントとサーバの 言語統一できて開発がはかどる
* DOM を扱う
JavaScript と、ネットワーク、 ドメインロジックを扱う JavaScript は違う * 確かに言語は統一できるけど、思考の スイッチングコストは発生する
イベント発火だけでも結構違う // DOM jQuery('form').trigger(‘form’); // Node.js stream.emit('fetch’,
data);
‘ クライアントとサーバで ロジックの共有がスムーズにできる
* サーバ側でもクライアント側でも使いたい ロジックはそこまでないのでは...? * utility
的な関数群だと、ありえるかも * underscore.js など既存のライブラリ を使いましょう
互換性のあるコードを維持するのは結構手間 関数定義の工夫 var exports =
typeof(module) === 'undefined' ? this : module.exports; exports.method = function() { // ... };
互換性のあるコードを維持するのは結構手間 対象ブラウザで使えないメソッドのチェック array.every(function() { // ... }); fn.bind(this);
‘ 簡単にスケールできる
* 採用するアーキテクチャに依存する * Node.js
を使っていてもある程度想定して おかないと、スケール出来ない設計になってしまう
Node.js 以外でも ある程度は課金で解決できることもある
‘ バージョン間の互換性が高い
* Node.js の
API 自体は安定している * しかしバージョンアップしたら意外と動かなくなる (パフォーマンス劣化/メモリリークしていることも) * 拡張ライブラリは全く動かなくなる場合もある
‘ サーバを API 化すれば、 JSON
を返すだけのサーバで OK
* ドメインロジックの管理のしやすさは ライブラリに依存する * サーバのデータをすべてクライアントに送れない 場合が多々あるので、その制御が必要 *
OAuth の認証トークン * 行動履歴 * ...
‘ リアルタイム通信 = Socket.IO
リアルタイム通信の手段はたくさんある * WebSocket * Server-Sent
Events * XHR polling * Socket.IO * Pusher ...
リアルタイムを扱わない部分とのバランス も考慮に入れる必要がある
まとめ
実際はこれに運用周りの話が加わってくるので、 もっと複雑 サービスの性質、規模やパフォーマンスによって、 落とし所はまた違ってくる
Node.js は大変素晴らしいけど、 適切に選択する必要がある Node.js 以外の文化も踏まえた上で Node.js
を選択できると選択の幅が広がるのでは いざというときに移行する判断ができるのも大事
で、これは常に変わっていくので、 バランスを見極めながら選択するんですかねー * エコシステム * ライブラリ *
自分の作ろうとしているもの 答えはない
for more information...
静的サイト開発ツールとしての MiddlemanとGrunt http://webtech-walker.com/archive/2013/09/middleman_vs_grunt.html
Node.jsをサーバサイドの UIレイヤに限定するのか? http://wazanova.jp/post/63449778024/node-js-ui
ダブルMVCの意味するところ [GoGaRuCo 2013] http://wazanova.jp/post/64057743910/mvc-gogaruco-2013
http://www.flickr.com/photos/sakura-kame/479871795/ 快適なweb開発を!
Publicité