Movatterモバイル変換


[0]ホーム

URL:


Uploaded byterurou
12,116 views

大規模なJavaScript開発の話

大なごやJS#3(2012/07/21)で使ったスライドです。割と「当たり前のこと」をまとめなおしただけな感じです。

Embed presentation

Downloaded 118 times
大規模なJavaScript開発の話terurou/YAGI.Teruo
自己紹介       2
terurouです。• Web・GUI・分散処理を手広くやってます – Windows 8(Metro Style Apps), Silverlight,   JavaScript, Android, … – Cassandra, 自作KVS, AWS, … – DataGridの自作に定評があるらしいです• フロントエンド寄りのアーキテクチャの設計が  割と得意です – MVC/MVVM, Client-side Cache, 通信, …                                               3
大規模なJavaScript開発とは?                      4
私の大規模プロジェクト経験• 大規模なJavaScriptプロジェクト経験は2回 – 似たところではSilverlightの大規模プロジェクトも• 全て業務系システム開発プロジェクト – Web/ゲーム系のことはわからないです – 基本的なことは同じだと思いますが…                               5
私の関わった大規模JavaScript開発(1)• SaaS セルフカスタマイズエンジン – Salseforce.comみたいなやつ• 5人体制(JS担当者は2名) – プロジェクト全体では50名体制• 開発規模:数万行(記憶があいまい) – ライブラリ未使用、フルスクラッチ – 現在のスキルであれば25K行程度で作れそう                           6
私の関わった大規模JavaScript開発(2)• SaaS フレームワーク – 現在進行中• 6人体制(JS担当者は3名) – プロジェクト全体では最大30名程度になる?• 開発規模は30K行程度に収まる? – Ext.JS利用、DataGrid自作                           7
「大規模」の定義が難しいですが…• 単純にステップ数が多いアプリケーション – 並みの規模だとJS単体で10K行は超えない – cybozu.comがJS単体で65K行程度らしい  • http://b.hatena.ne.jp/articles/201112/6709• 開発人員が多い – プロジェクト全体では数十名規模とか…                                                 8
大規模プロジェクトでのチーム構成• PMO(Project Management Office)  – プロジェクト管理• 共通基盤チーム  – フレームワーク開発、インフラ整備など• アプリケーションチーム(業務チーム)  – 機能設計、実装など  – このチームが一番人数が多くなるはず• その他に企画、品質管理、保守運営など                                   9
大規模プロジェクトでのチーム構成• PMO(Project Management Office)  – プロジェクト管理• 共通基盤チーム              ← 今回話す範囲  – フレームワーク開発、インフラ整備など• アプリケーションチーム(業務チーム)  – 機能設計、実装など  – このチームが一番人数が多くなるはず• その他に企画、品質管理、保守運営など                                   10
大規模プロジェクトでの基盤開発で意識すべきこと               11
大規模プロジェクトならでは「急所」• どうしても「変更」に対して弱くなりがち – チーム制による分業のため、変更発生時には   関係各所との調整が必要  • 人数が多い分だけオーバーヘッドが大きくなる – 問題の発覚が遅くなるほど影響が大きくなり、   最悪のケースはプロジェクトが頓挫することも• プロジェクトメンバのスキルのばらつき – 対策をしなければ、生産性、品質、保守性に   大きな影響が出てしまう                            12
どのように「急所」に向き合うか• 早期の技術検証/プロトタイピング – プロジェクトの序盤に問題点をクリアしておけば、   後から変更をする必要がない• 「できていいことだけができる」環境を作る – コードの品質(保守性・可読性)がメンバーの   スキルに影響されないようにする – 品質が高レベルで安定していれば、もし変更が   必要になっても対応しやすい                         13
技術検証/プロトタイピングで注意すること• 些細なことでも必ず検証するのが理想 – 「実現できるはず」という思い込みをしていても、   実は実現できないことは多々ある• あまり作りこみ過ぎない – 所詮は検証用、書き捨てコードでOK• 目的(何を検証したいのか)を見失わない – 実装可能? パフォーマンス? 生産性?   ユーザビリティ? …                         14
「できていいことだけができる」環境• プロジェクトに特化したフレームワークを作り、  実装パターンを単一化/テンプレート化する – 「穴埋め実装すればアプリが作れます!」 – 必要な機能を提供しつつ、不要な機能は隠す  • 汎用化≒複雑化、保守性・学習性が落ちる  • OSSのフレームワークを導入しただけではダメ• 規約での制限は最後の手段 – コードの品質が実装スキル、規約の理解度に   依存してしまう                             15
ちょっと難しく書きすぎた…• 一人プロジェクトと大差はない – 「画面ごとに実装方法やクラス構成が違う」とか   わざわざやらないよね• 大規模開発は小規模開発のサブセット – と、前に誰かが言っていたような気がする – 「自分ならこう書く」を分業体制でやるためには   段取りが必要 – どれだけうまく環境構築しても、基盤チームの   実力以上の品質にはならない                        16
JavaScriptでの大規模開発                    17
JavaScriptは大規模開発に向いていない• 言語仕様が柔軟すぎる – 「クラス的なもの」ですら書き方がいくらでもある – prototypeを拡張/改変できる  • ECMAScript 5なら制限できるけど…• モダンな書き方をするとコードが冗長に – var前置、stacktrace対策(function名を明記)• そもそもGUIを作るにはAPIが貧弱 – jQuery UIやExt.JS等の範囲内ならよいが…                                  18
JavaScriptエンジニアが少ない問題• 「jQueryできます!」とか言われましても… – 案件によってはそれでもいいのだけど… – それで済む時はJavaScript部分は小規模…• そもそもJavaScriptは難しい – prototype型のオブジェクト指向言語 – HTML/CSS、クロスブラウザ、ブラウザハック – GUI実装パターン(MVC)の知識 – など、覚えないといけないこと沢山                              19
柔軟すぎる言語仕様への対策• JavaScriptを生成する言語の採用 – CoffeeScript, Haxe(, JSX, and more) – 個人的にはHaxe押し• JavaScriptで開発する場合、モジュールや  クラスの書き方は必ず統一する – 開発ガイドやコーディング規約書が必須 – jsdocコメントも必須にすべき   • Closure Compilerがコメントを元にチェックしてくれる                                         20
Haxe• 静的型付けのオブジェクト指向言語 – C#やActionScript3(ECMAScript4)に似た構文 – 型安全、コンパイル時の型チェック – 型推論や構造的部分型などの機能のおかげで   JavaScriptより簡潔にコードを書ける• インライン展開やマクロにより、現実的には  人の手では行えない最適化が可能• コンパイルが速い                                    21
Haxeで解決できるJavaScriptあるある1. ライブラリの関数の定義変更が発生2. 呼び出し側を1か所だけ直し忘れる3. 忘れたころにバグに遭遇… –   原因がわかりにくいパターン一方Haxeはコンパイラが修正漏れを検出した                           22
JavaScript MVC• ViewとModelを分離することで分業しやすい  – デザイナとプログラマ  – JavaScriptハッカーとプログラマ    • 難しいViewはJavaScriptハッカーに委ねる• 保守性・可読性の向上• MVCライブラリはいろいろある  – Backbone.js, Ember.js, Spine, AngularJS, …                                                 23
MVCライブラリだけでは足りない部分• Modelのモジュール構成 – Template Methodパターン – Facade/Mediatorパターン – Factory Method/Abstract Factoryパターン – Observerパターン(MVCライブラリ未使用時)• プロジェクト固有の処理 – 入力チェック – 通信処理(特にエラー処理)                                         24
View(GUIコンポーネント)の細かいテクニック• invalidate(遅延描画) – GUIコンポーネントを作るときに必須 – 描画パフォーマンスが改善   • 不要な描画処理を走らせないようにする   • 部分描画と組み合わせるとなお良い – ActionScript, iOS, Android, Windows, …など、   どれでも用意されている – JavaScriptでの解説を見かけたことがない…                                           25
invalidateを使うと改善できる例• プロパティを変更する毎に描画処理が  呼ばれてしまい、パフォーマンスに影響が function Box() {/*省略*/ } Box.prototype = {    setWidth: function (width) {        this._width = width;        this._draw();    },    setHeight: function (height) { /*プロパティ更新後、描画*/ },    setFillColor: function (color) { /*プロパティ更新後、描画*/ },    setBorderColor: function (color) { /*プロパティ更新後、描画*/ },    _draw : function (style) { /*描画処理*/ } }                                                            26
invalidateを実装する function Box() {/*省略*/ } Box.prototype = {    setWidth: function (width) {      • setTimeoutで描画処理を        this._width = width;        this._invalidate();             遅延    },    /*中略*/                            • 何度invalidateを呼んでも    invalidate: function() {        if (!this._drawer) {                                        drawは一回だけ実行            var self = this;            this._drawer = function () {                this._draw();                this._drawer = null;            };            setTimeout(this._drawer , 0);        }    },    _draw : function (style) {/*描画処理*/ } }                                                            27
まとめ      28
まとめ• 一人開発でも複数人開発でもやることには  大差はない – ただし人数が多い分だけ修正する際のコストが   増加するので、段取りには注意する• JavaScriptは柔軟すぎる言語仕様の割には  冗長なコードになりがち – 可能であれば、JavaScriptを生成する言語の   採用を検討したほうが良い(Haxeとか)                               29
ご清聴ありがとうございました                 30

Recommended

PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
PDF
モダンJavaScript環境構築一歩目
PDF
JavaScript MVC入門
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
JavaScript基礎勉強会
PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
PDF
JavaScriptユーティリティライブラリの紹介
PPTX
モテる JavaScript
PDF
クライアントサイドjavascript簡単紹介
PPTX
AngularJS2でつまづいたこと
PDF
Web制作勉強会 #2
PDF
JavaScript 研修
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
PDF
Haxe で始める CreateJS
PDF
JavaScriptことはじめ
PDF
大規模なギョームシステムにHaxeを採用してみた話
PDF
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
PDF
プログラミング言語Clojureのニャンパスでの活用事例
 
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PDF
はじめよう Backbone.js
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
React.jsでクライアントサイドなWebアプリ入門
PPTX
.NET Compiler Platform
PDF
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PDF
GUI アプリケーションにおける MVC
PDF
Getting start with knockout.js
PDF
わかるコードを書くために For writing clean code
PDF
Browser Computing Structure
PDF
Agile japan2010 rakuten様プレゼン資料

More Related Content

PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
PDF
モダンJavaScript環境構築一歩目
PDF
JavaScript MVC入門
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
JavaScript基礎勉強会
PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
PDF
JavaScriptユーティリティライブラリの紹介
PPTX
モテる JavaScript
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
モダンJavaScript環境構築一歩目
JavaScript MVC入門
Javascriptのあれやこれやをまとめて説明してみる
JavaScript基礎勉強会
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
JavaScriptユーティリティライブラリの紹介
モテる JavaScript

What's hot

PDF
クライアントサイドjavascript簡単紹介
PPTX
AngularJS2でつまづいたこと
PDF
Web制作勉強会 #2
PDF
JavaScript 研修
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
PDF
Haxe で始める CreateJS
PDF
JavaScriptことはじめ
PDF
大規模なギョームシステムにHaxeを採用してみた話
PDF
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
PDF
プログラミング言語Clojureのニャンパスでの活用事例
 
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PDF
はじめよう Backbone.js
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
React.jsでクライアントサイドなWebアプリ入門
PPTX
.NET Compiler Platform
PDF
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PDF
GUI アプリケーションにおける MVC
PDF
Getting start with knockout.js
クライアントサイドjavascript簡単紹介
AngularJS2でつまづいたこと
Web制作勉強会 #2
JavaScript 研修
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Haxe で始める CreateJS
JavaScriptことはじめ
大規模なギョームシステムにHaxeを採用してみた話
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
プログラミング言語Clojureのニャンパスでの活用事例
 
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
はじめよう Backbone.js
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
React.jsでクライアントサイドなWebアプリ入門
.NET Compiler Platform
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
GUI アプリケーションにおける MVC
Getting start with knockout.js

Similar to 大規模なJavaScript開発の話

PDF
わかるコードを書くために For writing clean code
PDF
Browser Computing Structure
PDF
Agile japan2010 rakuten様プレゼン資料
PDF
最新アドテク×Java script実践活用術
PDF
10+1 Things you should know about JavaScript testing
PPTX
ProductManagement / front-end in Sansan( & remote work)
PPTX
Javascriptのデザインパターン【勉強会資料】
PDF
Aiming study#6pdf
PDF
Windows ストアアプリのつくりかた (JS + HTML + CSS)
PDF
JavaScript ライブラリーを使い倒そう #buildinsider
PDF
Hyper → Highspeed → Development
 
PDF
第4回品川Redmine勉強会資料「チケット駆動開発のフレームワーク~現場の経験知からパターン言語へ(ベータ版)」
PPTX
ウォーターフォールとアジャイル開発の比較 
PDF
第1回SIA研究会(例会)プレゼン資料
PDF
JavaScript.Next Returns
PDF
Weekend Androidのススメ
PDF
Unification of the middle scale services by Nuxt.js
PPTX
Java fx勉強会lt 第8回
PDF
大(中)規模Java script開発について
PDF
DDD 20121106 SEA Forum November
わかるコードを書くために For writing clean code
Browser Computing Structure
Agile japan2010 rakuten様プレゼン資料
最新アドテク×Java script実践活用術
10+1 Things you should know about JavaScript testing
ProductManagement / front-end in Sansan( & remote work)
Javascriptのデザインパターン【勉強会資料】
Aiming study#6pdf
Windows ストアアプリのつくりかた (JS + HTML + CSS)
JavaScript ライブラリーを使い倒そう #buildinsider
Hyper → Highspeed → Development
 
第4回品川Redmine勉強会資料「チケット駆動開発のフレームワーク~現場の経験知からパターン言語へ(ベータ版)」
ウォーターフォールとアジャイル開発の比較 
第1回SIA研究会(例会)プレゼン資料
JavaScript.Next Returns
Weekend Androidのススメ
Unification of the middle scale services by Nuxt.js
Java fx勉強会lt 第8回
大(中)規模Java script開発について
DDD 20121106 SEA Forum November

More from terurou

PDF
Webブラウザ上で動作する帳票エンジンを作る話
PDF
自社サービスでDurable Functionsを採用した話
PDF
Computation Expressions for Haxe
PDF
デンキヤギの採用の考え方
PDF
Vue.jsをhaxeで
PDF
MQTTとAMQPと.NET
PDF
altJSの選び方
PDF
DataGridを自前実装する話
PDF
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
PDF
動的なILの生成と編集
PDF
FIRST STEP to Haxe/JavaScript
PDF
Metro Style AppsでMSIL ver.2012/06/09
PDF
Metro Style AppsでMSIL
PDF
Yet Another DLR for Silverlightの試作
PDF
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
PDF
CommonJSの話
PDF
Scala×silverlight
PDF
DLR言語によるSilverlightプログラミング
PDF
Iron Python / Iron Ruby で .NET Programming
PDF
クラウドGPS(仮)
Webブラウザ上で動作する帳票エンジンを作る話
自社サービスでDurable Functionsを採用した話
Computation Expressions for Haxe
デンキヤギの採用の考え方
Vue.jsをhaxeで
MQTTとAMQPと.NET
altJSの選び方
DataGridを自前実装する話
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
動的なILの生成と編集
FIRST STEP to Haxe/JavaScript
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSIL
Yet Another DLR for Silverlightの試作
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
CommonJSの話
Scala×silverlight
DLR言語によるSilverlightプログラミング
Iron Python / Iron Ruby で .NET Programming
クラウドGPS(仮)

大規模なJavaScript開発の話


[8]ページ先頭

©2009-2025 Movatter.jp