Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
チーム開発において Node未経験者の学習コストを下げるための工夫 / node.js #tn...
Search
qsona
October 08, 2015
Technology
3
2.2k
チーム開発において Node未経験者の学習コストを下げるための工夫 / node.js #tng18 LT
東京Node学園 18時限目 LTです。
qsona
October 08, 2015
Tweet
Share
More Decks by qsona
See All by qsona
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
4
380
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
27
8.2k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
860
いかにして GraphQL を組織に導入するか (新規開発編) / how we introduce GraphQL on scratch development
qsona
6
3.9k
Well-organized Transaction Script - リファクタリングの妥協的手法 -
qsona
4
1.3k
GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri
qsona
25
14k
最高のマスターデータ管理手法考察 & VSCode Extension を活用した話 / developing masterdata management tool by using vscode extension
qsona
9
6.2k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5.1k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
15k
Other Decks in Technology
See All in Technology
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.2k
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
240
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
390
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
180
Wvlet: A New Flow-Style Query Language For Functional Data Modeling and Interactive Data Analysis - Trino Summit 2024
xerial
1
110
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
120
Amazon SageMaker Unified Studio(Preview)、Lakehouse と Amazon S3 Tables
ishikawa_satoru
0
150
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
160
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
2
250
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
150
Postman と API セキュリティ / Postman and API Security
yokawasa
0
200
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
740
Featured
See All Featured
Facilitating Awesome Meetings
lara
50
6.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Optimizing for Happiness
mojombo
376
70k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
For a Future-Friendly Web
brad_frost
175
9.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Designing for humans not robots
tammielis
250
25k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
How GitHub (no longer) Works
holman
311
140k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
A better future with KSS
kneath
238
17k
Transcript
チーム開発において Node未経験者の学習コストを下げる工夫 株式会社サイバーエージェント 森 久太郎 (もり きゅうたろう) Twitter/Github: @qsona 2015/10/8
Node学園 18時限目 「Node.js v4.0の話」 LT
Node v4 リリース おめでとうございま す!!!!!!!111
提案。 「フツウ」の サーバサイド開発に Node.jsを採用しませんか? - 例えば、PHPの代わりにNode.js
「フツウに良い」Node.js 「一旦Nodeでいいじゃん」の流れをつくりたい - 国内の採用事例はまだまだ少ない • npmになんでもある • フロントエンドと同じ言語 • 開発盛ん
• etc • 速い • 楽しい • 導入が楽 • 単体でサーバ立つ
仮説 Node.js未経験者にとっての 学習コストが高いため フツウに採用しにくいのではないか?
弊社のNode.js活用事例 • 2011 「ピグライフ」 (0.4系) ◦ ※ 「アメーバピグ」はJava • 2012〜現在
スマホゲームの一部 ◦ 「ガールフレンド(仮)」などはJava 弊社で多いパターン • Javaエンジニア => Node.jsエンジニア • 新卒でいきなりNode.jsエンジニア 学習コストの問題は弊社でも重要
直近の成功事例 • フツーのゲームサーバAPI • 開発・運用期間 約1年 • 関わったサーバエンジニア(延べ): 10人 ◦
Node経験者: 3人 ◦ Node未経験者: 7人 (うち6人はJSも未経験) - 滞り無く開発に入れている
いかにして、Node.js未経験者は Node.jsでのコーディングを手に入れるのか? 未経験者の立場になってみる
未経験者がNode.jsを手に入れるまでの道のり例 (1) • シングルスレッド・イベントループの説明を受ける • JavaScriptの基本的な文法を覚える • 簡単なコードを書いてみる
未経験者がNode.jsを手に入れるまでの道のり例(1) xがなぜかundefined...
- 2, 3回間違えれば覚える
未経験者がNode.jsを手に入れるまでの道のり例(2) 実際に、機能を実装する • JavaScriptのイディオムやthisと格闘 • こみいったロジックを書く • 長い非同期処理のコードを書く この フェーズが
重要
弊社の事例を俯瞰して得た 学習コスト↓↓↓DOWN↓↓↓のための 「4つの極意」
極意その1 lodash を利用する (極意って言えるのか・・・?)
lodashを利用する こみいった処理を書くのを楽にするためのモジュール • 高機能だがシンプルさを重視 • APIに一貫性がある ◦ jdalton による強力で一貫性のある意思決定 -
今から開発始めるなら、packge.jsonのlodashの向き先をgithubの最新にしてお き、もうすぐ出そうな4.xを待つのがオススメです
極意その2 (neo-)async を利用する
(neo-)asyncを利用する 非同期コードのフロー制御モジュールの1つ • Nodeのコールバックスタイルをそのまま扱える • lodashに近い機能・API (特にneo-async) • async.waterfallで直列の非同期コードをキレイに書ける ◦
順々(直列)に処理していくことが(フツウの場合には)一番多い ◦ neo-async#angelFall: async.waterfallの改良版
None
名前はひどいけど動きは better!!
極意その3 コーディングスタイル(広義)を 統一する
コーディングスタイルを統一する • プロジェクトの全てのコードが教師になる • 余計なことで悩まないですむ - ビギナーにとって良いことずくめ
コーディングスタイルを統一する [再掲]未経験者がNode.jsを手に入れるまでの道のり例(2) • JavaScriptのイディオムやthisと格闘 • こみいったロジックを書く • 長い非同期処理のコードを書く - 共通点:
いろんな書き方ができる
いろんな書き方ができる(例1 JavaScript) undefinedであるかのチェック 1. x === undefined 2. x ===
void 0 3. typeof x === 'undefined' 4. _.isUndefined(x)
いろんな書き方ができる(例2 lodash) lodashのメソッド findの使い方 var objs = [{ x: 1,
y: 2 }, { x: 2, y: 1 }]; 1. _.find(objs, function(obj) { return obj.x === 2; }); 2. _.find(objs, { x: 2 }); 3. _.find(objs, ‘x’, 2);
いろんな書き方ができる(例3 async) 非同期の直列コードのasyncを使った書き方 plain (asyncを使わない) async.series async.waterfall 1 (採用) async.waterfall
2
None
None
いろんな書k 数値の切り捨て var x = 1.4; • Math.floor(x); • x
| 0; • _.floor(x); • ~~x; • parseInt(x); • x & x; • x >> 0; • x - x % 1; • x << 0; • x >>> 0; • +/(.*?)\./.exec(x+'.')[1];
全部思いつくのに1時間かかった
None
いろんな書き方ができる。 • Best 100点の書き方で統一 • Better 70点の書き方で統一 • Bad 100点の書き方と70点の書き方が混在
- 100点に近いルールに近づけるには?
極意その4 書き方オタクを養成する
書き方オタクとは やたらとコードの書き方にこだわりがあり、詳しい人 • JavaScript オタク • lodash オタク • async
オタク
ルール作りと知識 ルール作りにはある程度の知識が必要 • x === undefined ◦ var undefined =
1; される危険性 • x === void 0 • typeof x === 'undefined' ◦ ReferenceErrorを握りつぶす危険性 • _.isUndefined(x) 「短い・分かりやすい」が基本
開発リーダー !== 書き方オタク 開発リーダー • 大方針・設計を決める • 設計のレビュー 書き方オタク •
書き方の提案・共有 (積極的に!) • JavaScript自体のコードレビュー
ルールを徹底する(1) 開発初期が非常に重要 • 書き方を揃える文化の醸成 • 書き方の共有 • 良い書き方の議論 • 徹底したコードレビュー
ルールを徹底する(2) 未経験者の初PRは徹底的にレビュー JavaScriptについての レビュー 非同期コードについての レビュー
ルールを徹底する(2) 未経験者の初PRは徹底的にレビュー lodashの使い方 についてのレビュー
ルールを徹底する(3) Q. x === undefined がチームの慣例。 _.isUndefined(x) と書かれたPRが来た。 あなたは突っ込みますか?
ゆずってくれ たのむ!!
ルールを自動化する • Lint (jshint/eslint) • jscs • コードフォーマッター (js-beautify/esformatter) ◦
(多少難があっても)入れたほうがいい!
Q. 書き方オタクになって 何かメリットあった?
JavaScriptオタクになってよかったこと • 基盤的な機能の整備で小回り(hack)が利く ◦ ログ、エラー処理、テスト、etc… • 各種モジュールのソースコードを読むのが楽に
lodash/asyncオタクになってよかったこと • OSS活動の きっかけに ◦ 苦手な英語も 少し上達
まとめ • lodash使う • neo-async使う • (広義の)コーディングスタイルを統一する • 書き方オタクを養成する 自信を持って、フツウのサーバサイド開発に
Node.jsを選択しよう!!
で、締めたいが・・?
疑問 学習コスト以外の問題はないの?
苦労・悩み話を深掘りして話します@東京Node学園祭 Nodeでサーバサイド開発を検討されてる方、是非どうぞ!
Node.js v4 リリースに 乾杯!!!!!!