how to develop a huge single page application

65
- How to develop a Huge SPA using TypeScript & AngularJS - Developers Summit 2016 2016.02.18

Upload: naoki-yamada

Post on 21-Apr-2017

2.118 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: How to develop a huge Single Page Application

- How to develop a Huge SPA using TypeScript & AngularJS -

Developers Summit 2016

2016.02.18

Page 2: How to develop a huge Single Page Application

自己紹介

俺の名前を言ってみろ

- Introduce myself -

Page 3: How to develop a huge Single Page Application

山田 直樹 @wakamsha

自己紹介

株式会社リクルートマーケティングパートナーズ ( 2014年7月 ~ ) フロントエンドエンジニア

Naoki YAMADA

Page 4: How to develop a huge Single Page Application

http://tech.recruit-mp.co.jp

NET BIZ DIV. TECH BLOG

Page 5: How to develop a huge Single Page Application
Page 6: How to develop a huge Single Page Application
Page 7: How to develop a huge Single Page Application

リクルートマーケティングパートナーズの エンジニア、デザイナー、スクラムマスターたちが

発信する Web 開発情報メディア

http://tech.recruit-mp.co.jp

NET BIZ DIV. TECH BLOG

Page 8: How to develop a huge Single Page Application

https://eigosapuri.jp

英語サプリ

Page 9: How to develop a huge Single Page Application

https://eigosapuri.jp

英語サプリ

• 『聴く力』『話す力』の向上に特化した学習サービス

• ドラマ仕立てのストーリーに登場するキャラになりきって会話の練習

• 音声認識機能により発音の解析・フィードバックをリアルタイムに表示

• 聞き取れなかった発音とその原因を自動検知し、一人ひとりの原因に合ったトレーニングを提供

Page 10: How to develop a huge Single Page Application

2015年 4月上旬- April 2015 early -

Page 11: How to develop a huge Single Page Application

新規サービス作るんですよ。 しかも iOS、Android、Web のマルチプラットフォーム展開で!エンジニア A

wakamsha

 へぇ~…

せっかくなので Swift、Kotlin、Scala、TypeScript と全部型推論な言語で作ってやろうかなと考えて

都内某所 とある呑み会にて

Page 12: How to develop a huge Single Page Application

せっかくなので Swift、Kotlin、Scala、TypeScript と全部型推論な言語で作ってやろうかなと考えています!

エンジニア A

あ、サーバーサイドは API しか返さないような仕様にしたいので、Web は SPA になっちゃいますね

wakamsha

へー、すごいじゃないですか。 完全 SPA なんて実現したらリクルート史上初なんじゃないですかね?

都内某所 とある呑み会にて

Page 13: How to develop a huge Single Page Application

じゃ、Web 版のフロントエンド開発 おねがいしますね

エンジニア A

wakamsha

 ファッ!?

都内某所 とある呑み会にて

Page 14: How to develop a huge Single Page Application

当時の   スキルセット

HTML CSS ( SCSS )

JavaScript ( CoffeeScript ) Vue.js GRUNT MIDDLEMAN RoR

Page 15: How to develop a huge Single Page Application

当時の   スキルセット

HTML CSS ( SCSS )

JavaScript ( CoffeeScript ) Vue.js GRUNT MIDDLEMAN RoR

• HTML、CSS はそれなりに自信あり

• JavaScript は人並み程度 ( CoffeeScript をメインに使う )

• JavaScript フレームワークは Vue.js を実務で使ったことあり

• 元々 Flash ディベロッパーだったが、ActionScript は殆ど忘れてしまっている

Page 16: How to develop a huge Single Page Application

当時の   スキルセット

HTML CSS ( SCSS )

JavaScript ( CoffeeScript ) Vue.js GRUNT MIDDLEMAN RoR

SPA やったことない

Page 17: How to develop a huge Single Page Application

2015年 5月- May 2015 -

Page 18: How to develop a huge Single Page Application

リリース日は決まっているが仕様は白紙状態

あるのは PO ( プロダクトオーナー ) の 壮大な夢が書かれた社内 Wiki くらい

- これまでに無い新しい英語学習サービス - リスニング力とスピーキング力の訓練に特化 - 音声認識テクノロジーを使いたい - 著名な先生方にも出演いただきたいよね! - ユーザーごとに最適な学習方法を提案しよう - その他にもたくさん…

Page 19: How to develop a huge Single Page Application

とりあえず SPA を作るための

技術調査をはじめることに

Page 20: How to develop a huge Single Page Application

SinglePageApplication なので JavaScript が大規模になるのは必然

- Too Fat Front-end Code -

Page 21: How to develop a huge Single Page Application
Page 22: How to develop a huge Single Page Application
Page 23: How to develop a huge Single Page Application

• Microsoft が開発した AltJS ( トランスパイラ )

• JavaScript のスーパーセット ( 完全上位互換 )

• 静的型付け言語

• 型推論あり

• 圧倒的多機能 • Class, Interface, Arrow func, Generic, Module, Namespace …

TypeScript

Page 24: How to develop a huge Single Page Application
Page 25: How to develop a huge Single Page Application
Page 26: How to develop a huge Single Page Application

• Google が開発したフルスタック JS フレームワーク

• 圧倒的多機能 • Data binding, Routing, Custom directive, D.I, Promise, and more…

• 特に強力なルーティング機能は SPA にうってつけ

AngularJS

Page 27: How to develop a huge Single Page Application
Page 28: How to develop a huge Single Page Application
Page 29: How to develop a huge Single Page Application

• 軽量・高速なタスクランナー

• チェーンメソッド風にタスクを定義するのが特徴

• GRUNT と違い、よりプログラマブルに定義できる

• 複雑なタスクもプロダクションコードを書くノリで押し切る事ができる

Gulp

Page 30: How to develop a huge Single Page Application

etc …

Page 31: How to develop a huge Single Page Application

• 調査した内容はすべて弊社ブログにて公開済み

• 情報の出し惜しみはしない

• アウトプットまでやってはじめて技術調査

http://tech.recruit-mp.co.jp

NET BIZ DIV. TECH BLOG

Page 32: How to develop a huge Single Page Application

これでいこう ( かな )

Page 33: How to develop a huge Single Page Application

2015年 6月上旬- June 2015 early -

Page 34: How to develop a huge Single Page Application

仕様が一向に決まらない…

Page 35: How to develop a huge Single Page Application

どうして仕様が決まらない?

• PO はとある事情から現場と距離を置いてしまっている

• 現場リーダーがチーム内の意向をまとめて PO に報告するにも、微妙にお互いの認識が合わず衝突の繰り返し

• 日に日に憔悴していく現場リーダー (́・ω・`)

• 傍観する

Page 36: How to develop a huge Single Page Application

2015年 6月下旬- June 2015 in late -

Page 37: How to develop a huge Single Page Application

仕様が一向に決まらない…

シャレになってないので二回言いました

Page 38: How to develop a huge Single Page Application
Page 39: How to develop a huge Single Page Application
Page 40: How to develop a huge Single Page Application

• 全員で仕様策定のためのカンヅメを敢行

• 朝から晩まで会議室に篭もり、全員で仕様を決める

• PO にも会議に参加してもらい、スクラム開発の一員として動いてもらう

• およそ 2週間で 80% ほどの仕様が固まる

Page 41: How to develop a huge Single Page Application

2015年 7月- July 2015 -

Page 42: How to develop a huge Single Page Application

メンバーも増えていよいよ本開発スタート

- Two man cell Front-end engineers -

New Comer

Page 43: How to develop a huge Single Page Application

2 DAYS

1 WEEK

極めた!

フロントエンド

Page 44: How to develop a huge Single Page Application

この仕組みだとダメっすね…

wakamsha

 え…?

New Comer

設計は何度でも見直す

Page 45: How to develop a huge Single Page Application

これがヤバイ1

New Comer

これがヤバイ2

これがヤバイ3

設計は何度でも見直す

Page 46: How to develop a huge Single Page Application

ちょっと先輩 そんなんで大丈夫っすかwwwNew Comer

wakamsha

 がががが、頑張ります!

設計は何度でも見直す

Page 47: How to develop a huge Single Page Application

UI Router 導入

The companion suite(s) to the AngularJS framework.

Page 48: How to develop a huge Single Page Application

コードの品質に妥協しない

プルリクエストは優先的に対応

分からなければ即座に教えを請う

開発ポリシー

Page 49: How to develop a huge Single Page Application

2015年 10月下旬- October 2015 in late -

Page 50: How to develop a huge Single Page Application

放置していた細かいバグが大量に積み上がる

iOS & Android エンジニアも Web に参戦

分からないところがあれば、 プルリクレビュー や ペアプロでカバー

佳境に差し掛かったので総力戦

Page 51: How to develop a huge Single Page Application

2015年 11月下旬- November 2015 in late -

Page 52: How to develop a huge Single Page Application

リリース直前になって問題発生

IE よ、お前はどれだけ我々を苦しめれば気が済むんだ…

IE 9 のみで発生するクロスドメイン問題

API 疎通がどうしても出来ない…

Page 53: How to develop a huge Single Page Application

これもう無理っすよ。 時間もないことですし、 IE9 のサポート切りましょうよ!

wakamsha

 くっ、もはやこれまでか…

New Comer

マジか~。

IE9 のみで発生するクロスドメイン問題

Page 54: How to develop a huge Single Page Application

PO

データ解析班

マジか~。 ちなみにさ、他の弊社サービスにおける IE9 の 利用率ってどれくらいなの?

えーと…

現在 約 8% ですね

IE9 のみで発生するクロスドメイン問題

Page 55: How to develop a huge Single Page Application

PO

んじゃ、 ひとまず切り捨てよう!

wakamsha

うおおおおおおおおおおおおおおおおおおおおおおおーっ!!!!

New Comer

うおおおおおおおおおおおおおおおおおおおおおおおーっ!!!!

IE9 のみで発生するクロスドメイン問題

Page 56: How to develop a huge Single Page Application

PO

んじゃ、 ひとまず切り捨てよう!

wakamsha

うおおおおおおおおおおおおおおおおおおおおおおおーっ!!!!

New Comer

うおおおおおおおおおおおおおおおおおおおおおおおーっ!!!!

IE9 のみで発生するクロスドメイン問題

• 一応この問題はリリース後に改修済み

• ただし Windows7 ~ 10 の場合、IE11 未満はサポート対象外となるため、今後 IE9 のサポートは消極的になると思われ

Page 57: How to develop a huge Single Page Application

2015年 11月30日- November 30, 2015 -

Page 58: How to develop a huge Single Page Application

https://eigosapuri.jp

英語サプリ

Out Now!!

Page 59: How to develop a huge Single Page Application

英語サプリ Web 版リリース

• リリース2日前までは何かとアーキテクチャの見直しを敢行

• リファクタリングの手も最後まで止めなかった

• リリース直前は比較的穏やか

• この頃になると残業もほぼナシ

• 振り返ってみれば開発期間中の休日出勤はゼロ

Page 60: How to develop a huge Single Page Application

数字で振り返ってみる

36CUSTOM

DIRECTIVEARCHITECTURE

8 2 171 5STEP COUNT

,

Page 61: How to develop a huge Single Page Application

学び 1/3

• TypeScript に救われた • 型は正義

• 冗長・コード量が増えるというのであれば、それは使用しているテキストエディタを見直すチャンス

• JavaScript が苦手という人にこそオススメしたい

Page 62: How to develop a huge Single Page Application

学び 2/3

• AngularJS の採用は正解だった • 学習コストは高いが、その代償を払う価値は充分にある

• ハードルが高いというのであれば、Vue.js から入るのもアリ

• UI Router は積極的に採用していきたい

Page 63: How to develop a huge Single Page Application

学び 3/3

• コードの品質に満足せず、絶えずリファクタリングを

• プルリクエストは溜め込まず優先的に捌く

• どんな小さなことでも分からなければ訊く

• PO ( ステークホルダー ) とはいつでもどこでもコミュニケーションを取れるようなチーム体制を築く

Page 64: How to develop a huge Single Page Application

最後に

• Twitter やブログなどで感想をいただけると非常に励みになります

• 弊社のテックブログを御覧いただいた方はシェアなどしていただけると最高に嬉しいです

Page 65: How to develop a huge Single Page Application

Thank you :)