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.3k
チーム開発において 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
500
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
28
8.6k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
1k
いかにして GraphQL を組織に導入するか (新規開発編) / how we introduce GraphQL on scratch development
qsona
6
4.1k
Well-organized Transaction Script - リファクタリングの妥協的手法 -
qsona
4
1.5k
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.5k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5.5k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
16k
Other Decks in Technology
See All in Technology
Webアクセシビリティ入門
recruitengineers
PRO
1
270
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
30k
7月のガバクラ利用料が高かったので調べてみた
techniczna
3
450
人を動かすことについて考える
ichimichi
2
330
AIドリブンのソフトウェア開発 - うまいやり方とまずいやり方
okdt
PRO
9
630
DeNA での思い出 / Memories at DeNA
orgachem
PRO
3
1.6k
ECS モニタリング手法大整理
yendoooo
1
120
OpenAPIから画面生成に挑戦した話
koinunopochi
0
160
イオン店舗一覧ページのパフォーマンスチューニング事例 / Performance tuning example for AEON store list page
aeonpeople
2
290
どこで動かすか、誰が動かすか 〜 kintoneのインフラ基盤刷新と運用体制のシフト 〜
ueokande
0
190
第4回 関東Kaggler会 [Training LLMs with Limited VRAM]
tascj
12
1.8k
小さなチーム 大きな仕事 - 個人開発でAIをフル活用する
himaratsu
0
120
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
338
57k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
900
4 Signs Your Business is Dying
shpigford
184
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
How to train your dragon (web standard)
notwaldorf
96
6.2k
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 リリースに 乾杯!!!!!!