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
460
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
28
8.4k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
930
いかにして GraphQL を組織に導入するか (新規開発編) / how we introduce GraphQL on scratch development
qsona
6
4k
Well-organized Transaction Script - リファクタリングの妥協的手法 -
qsona
4
1.4k
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.3k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5.3k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
15k
Other Decks in Technology
See All in Technology
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
0
110
技術者はかっこいいものだ!!~キルラキルから学んだエンジニアの生き方~
masakiokuda
2
270
От ручной разметки к LLM: как мы создавали облако тегов в Lamoda. Анастасия Ангелова, Data Scientist, Lamoda Tech
lamodatech
0
750
新卒エンジニアがCICDをモダナイズしてみた話
akashi_sn
2
250
Стильный код: натуральный поиск редких атрибутов по картинке. Юлия Антохина, Data Scientist, Lamoda Tech
lamodatech
0
740
LangfuseでAIエージェントの 可観測性を高めよう!/Enhancing AI Agent Observability with Langfuse!
jnymyk
1
240
勝手に!深堀り!Cloud Run worker pools / Deep dive Cloud Run worker pools
iselegant
2
410
アセスメントで紐解く、10Xのデータマネジメントの軌跡
10xinc
1
440
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
coconala_engineer
1
290
今日からはじめるプラットフォームエンジニアリング
jacopen
3
200
ブラウザのレガシー・独自機能を愛でる-Firefoxの脆弱性4選- / Browser Crash Club #1
masatokinugawa
1
490
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
Fireside Chat
paigeccino
37
3.4k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Automating Front-end Workflow
addyosmani
1369
200k
How to train your dragon (web standard)
notwaldorf
90
6k
Navigating Team Friction
lara
184
15k
Practical Orchestrator
shlominoach
186
11k
For a Future-Friendly Web
brad_frost
176
9.7k
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 リリースに 乾杯!!!!!!