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
350
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
28
8.1k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
840
いかにして 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.1k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
15k
Other Decks in Technology
See All in Technology
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
110
Terraform Stacks入門 #HashiTalks
msato
0
360
日経電子版のStoreKit2フルリニューアル
shimastripe
1
150
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
170
The Role of Developer Relations in AI Product Success.
giftojabu1
0
140
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
130
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
670
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
260
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
630
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
10
1.3k
Featured
See All Featured
Visualization
eitanlees
145
15k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Docker and Python
trallard
40
3.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Documentation Writing (for coders)
carmenintech
65
4.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Done Done
chrislema
181
16k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
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 リリースに 乾杯!!!!!!