Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The Future of Programming in Node.js
Search
Toshihiro Shimizu
October 26, 2013
Programming
3.5k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Future of Programming in Node.js
東京Node学園祭2013 基調講演
Toshihiro Shimizu
October 26, 2013
More Decks by Toshihiro Shimizu
See All by Toshihiro Shimizu
エンジニアのキャリアとOSSコミュニティ活動
meso
4
8.8k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
370
アクセシビリティから考える情報設計
high_g_engineer
0
370
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
190
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.9k
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
120
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
210
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
690
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
620
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
130
SREの越境 / SRE Collaboration
y0hgi
0
100
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.3k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
GraphQLとの向き合い方2022年版
quramy
50
15k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Optimizing for Happiness
mojombo
378
71k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
The browser strikes back
jonoalderson
0
1.7k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Transcript
The Future of Programming in Node.js 東京Node学園祭 2013 基調講演 東京Node学園祭実行委員長
清水 俊博@meso
about me { “name”: “清水 俊博”, “twitter”: “meso”, “github”: “meso”,
“communities”: [“nodejs_jp”, “java-ja”], “work”: “dwango” }
ドワンゴでは、 エンジニアを(ry
本題 • The Future of Programming in Node.js • Isaac
Schulueterが今年8月14日にMLに投げ たメール • 今のところ日本語に翻訳されてない!! ◦ 最近ワザノバさんでNodeの話題が翻訳されすぎててネ タに困ってた ▪ Node.jsをサーバサイドのUIレイヤに限定するのか? ▪ Issac Schlueterが語るNode.js v1.0へのロードマップ ◦ ドワンゴでのNode事例とか基調講演っぽくないし
ちなみに • ドワンゴでのNodeの活用事例 ◦ 社内システムで利用中 ◦ 新規サービスの開発で利用予定
Isaacs Schlueter • 言わずと知れた、Nodeの2代目リーダー • MLにメールを投稿した目的 ◦ 最近、NodeのコアAPIについての議論や意見、要望が 多い ◦
ここらで今後の計画についてハッキリさせておく • CallbackやStreamやAlt JSなど、11項目につ いて記述 ◦ それぞれの項目に対する反応も含めて紹介 ◦ 超訳入ります。特にメールで会話してるとこ
1. Callback • callbackは非同期処理を記述するデファクトの 方法であり続けます。 • generatorやpromiseは興味深いですが、あくま でもユーザ拡張の領域のものです。 ◦ generatorとは?
▪ 詳しくはConstなんとかさんのセッションで ▪ ECMAScript 6(Node.js v0.11.4以降)で使える ▪ https://github.com/visionmedia/co ▪ https://github.com/koajs/koa
1. Callback • Bert: callback地獄を根本的に解決するようなソ リューションがでてきたらどうすんの? • Isaac: もし、ユーザ拡張の何れかのライブラリ が明らかにデファクトとして使われるようになり、
なおかつ、それを後方互換性を損なうことなくコ アに取り込めるなら、そのとき検討しましょう。 • Isaac: っていうかこの話この前したじゃん
2. Stream • Streamはより早く、かつ一貫性のあるものにな ります。 • v0.10との後方互換性は100%保たれます。 ◦ 「互換モード」がAPIによってより隠蔽される ◦
ストリームをpause()した後に、安全にread()することが できる • StreamをコアAPIの中に隠蔽せずに外から見 える状態にすることで、Streamを拡張したクラス をユーザが作ることを推奨している、その姿勢 は変わりません。
2. Stream • Radford: `on(‘data’, …)`って書き方はそのまま 使えんの? • Isaac: 使えるよー。v0.10では`on(‘data’,
…)`が あると互換モードになって、v0.12では、flowを 開始するリスナが追加されるよ。
2. Stream • Nuno: 後方互換性あるって言ってるけど、v0.8 のStreamのコードがv0.10で動かないんだけど • Isaac: 互換性があるのはv0.10とv0.12の話 ね。この2つは一部例外(と早くなること)を除け
ば見分けがつかないはず。
3. Domain • Domainはリファクタリングすることで、より包括 的にエラーを継続追跡できる仕組みにしていき ます。 ◦ エラーハンドリングの仕組みをユーザ拡張で作れるよう に •
最終的にはDomainモジュールはユーザ拡張で 補えるものになるかもしれません。 ◦ けどまあとりあえずNodeにバンドルされたままであり続 けるよ
3. Domain • Bert: エラーハンドリングは本当に糞だよね • Issac: 糞だねー。何かいい感じに継続追跡出 来るのがでてきたらいいのに。 •
Nuno: エラーハンドリングは確かに糞だけど、 ぶっちゃけErlang以外の環境だとどこでも糞 じゃね。 • Arunoda: まあ、Callbackもエラーハンドリング も糞だけど、それでもアプリ作れるしまあいいん じゃん。
4. Module System • モジュールシステムには変更は加えません。 • 一切加えません。モジュールシステムは完成さ れたものです。一年以上も前に。 • 明らかに再現可能で、ドキュメントの修正程度
じゃ対処できないバグの場合のみ、変更の提案 を受け入れます。
5. Alt JS • TypeScriptやCoffeeScriptはコアには取り入れ ません。 • モジュールシステムが(前述のように)変更され ないので、現在動いているAlt JSで書かれたも
のは、今後も動作可能です。
6. Binary Addon • v0.12では、V8のAPIが*著しく*変わったため、 基本的には全てのバイナリアドオンが動きませ ん! • しかもopensslやzlibなどのライブラリと組み合 わせることもとても難しくなった。
• 今この問題に取り組んでいます。 ◦ 安定したCのAPI互換レイヤを追加します。 ▪ Cで書かれたバイナリアドオンがNodeの安定版のブ ランチ間で、同一コード(できれば同一バイナリ)で動 作するように
7. New Language Features • V8には新しい言語仕様が取り入れられ、それら はNodeにもやってきます。 • しかし、それらの仕様を自動的にenableにする つもりはありません。
• その代わり、何を必要としているのかを検知し て、わかりやすいエラーメッセージを投げるよう にします。
8. VM module • VMモジュールはリファクタリングされ、 contextifyモジュールの特長をコアに取り入れま す ◦ contextがみんなが望む形で動作するようになります ◦
マルチコンテキストもサポートされます
9. Child Process • ついに子プロセスの同期実行が可能になりま す。
10. Roadmap • v0.12は完成に近づいています。 • v0.12が出たらみんなに使ってもらいます(安定 版だからね)。 • v0.12の後、v1.0に向けてはAPIの変更は行わ ないつもりです。
• v0.12とv1.0の間では、パフォーマンス改善とバ グFixと安定性向上に注力します。 • 今動くものが来年も、しかもより早く安定して動 作するよう、最大限の努力をします。
11. OSS • これらの決定は民主主義的意思決定に基づくも のではありません。しかし、皆さんの意見を取り 込む多くの余地があります。 • もし、Nodeコアにダイナミックな変更を加えたい と思い、npmモジュールを書くのに満足できなく なれば、joyent/nodeをforkして、新しい名前とロ
ゴを作って、それに熱中すればいいのです。 • OSS FTW
11.1. StrongLoop • Bert: StrongLoopはさらなる改善を加えていく よ。それはNodeとは呼ばれなくなるかもだけ ど。 • Isaac: “StrongLoop
Nodeディストリビューショ ン”のことだよね。それはそれでOSSのあり方な んじゃない。 • Bert: それそれ。StrongLoopのがコアへの新機 能追加の実験場になるとは思ってないけど、何 か他のものにはなるかもね。
11.2. Meteor • Arunoda: Bertが言うように問題に対するソ リューションは必要で、でもそれはNodeとは別 物だ。Meteorもそのいい例だよね。 • Bert: というかユーザ拡張とかforkとかが正しい
なら、なんでみんなそんなにMeteorに腹立てて んの? • Isaac: え、個人的にはMeteorに腹立てたりして ないよ。MeteorがNodeに対して何かスポーツ マンシップに悖る不作法なことしたってのも聞い てないし。
11.2. Meteor • Isaac: 彼らのコミュニティの作り方については 批判的だけどね、もちろん。彼らはやり方を間 違った。けどそれは`悪い`とか`怒り`を含んだも のではなくて、「ネット上に間違ったことを書いて る奴がいる(から正さないと)」的な反応に過ぎ ないよ。
• Isaac: 彼らのmodule/packageシステムはnpm のデザインとは正反対なんだよね。Nodeのエコ システムが今のサイズまでになったのはそのデ ザインのおかげなのに。
11.3. 批判 • Eldar: forkすりゃいいじゃんっていうのはアン フェアだと思うんだよね。 • (色々とアンフェアじゃないと考える理由を挙げ ている)
11.3. Mikeal Rogers • コアAPIに対する何がしかの決定を嫌がるや つっていつもいるんだよね。結局、ML上で文句 言ってる奴らって大した奴らじゃないんだよ。 • 声のでかい少数のそういう奴らが貢献したコー ドなんてほんの少しだし、エコシステムを成長さ
せてる圧倒的多数の人たちはここでは文句い わないよね。 • なぜなら彼らはコードを書くのに忙しいから。
11.3. Mikeal Rogers • APIに対して文句いってる奴らがいる一方で、そ の何百倍ものライブラリをそのAPIを使って書い て、エコシステムやプラットフォームを成功に導 こうとしている人たちがいるんだよね。 • 批判的な姿勢はプロジェクトを前進させるのに
は重要だけど、批判があることが失敗を生むこ との指標になると思うのは間違いなんだ。成功 が批判を生んでるんだよ。
11.3. Mikeal Rogers • 声の大きい奴らの意見を聞くことにIsaacは時間 を費やすべきだといいたいようだが、あいにく彼 は世界で最も早く成長しているエコシステムを 作り上げていっている物言わぬ大衆や、全てが Node.jsで作られた巨大なスケールのソリュー ションをデプロイしている人たちの声に耳を傾け
ているんだよ。
11.4. 流れ変わったな • Rouan: Issac、そしてNodeのコントリビュータの 皆さん、ありがとう。 • Nuno: Isaacありがとう。そしてNodeチームも Node.jsの信念に対して正直で在り続けてくれ
てありがとう。ユーザとして、貴方たちが何を望 んでいるかをしれて嬉しいよ。
11.5. お調子者 • Fedor: ヒャッハー!新たな火種を起こすぜ!安 定性はいいことだよな?でもNodeのコアには明 らかに修正すべき問題がいくつかあるよな!で もいいや!ビッグリリースである1.0を優先しよう ぜ! •
Bert: いや、その火種全然熱くないんだけど。 Isaacに合理的に反対できるやつはもういなく ね。
そんなわけで • Nodeは民主主義的な意思決定をしているわけ ではない • が、それは当たり前で、MLで騒いでる声の大き い人達の意見を取り入れていたらAPIは安定な んてしないから • Isaacがgate
keeperでいる限り、NodeのAPIは 後方互換性を大切にしてくれる • さあ、安心してNodeを使いましょう
コミュニティのリーダー • コミュニティの段階に応じてリーダーが担うべき 役割が変化する ◦ Ryan -> Isaac • Node.js
日本ユーザグループも3年以上経ちま した ◦ そろそろ代表を交代しようと思います ◦ 立候補、推薦の方法をMLで周知します
おまけ
• 既に紹介したもの ◦ http://strongloop.com/strongloop-suite/strongnode/ ◦ https://github.com/visionmedia/co ◦ https://github.com/koajs/koa • その他
◦ ツール ▪ https://github.com/Unitech/pm2 ▪ http://commando.io/ ▪ http://www.opsmezzo.com/ ▪ https://github.com/creationix/jsgit ▪ http://brunch.io/ ▪ http://makebooth.com/i/1xkN1 Nodeの最近の面白い事例
Nodeの最近の面白い事例 ◦ Framework / Boilerplate ▪ https://github.com/airbnb/rendr ▪ http://actionherojs.com/ ▪
http://www.deployd.com/ ▪ http://www.mean.io/ ◦ Service ▪ http://glide.so/ ◦ Development Environment ▪ http://noflojs.org/ ◦ Hardware ▪ http://tessel.io/ ◦ OS ▪ http://nodeos.github.io/