Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
terurou
12,117 views
大規模なJavaScript開発の話
大なごやJS#3(2012/07/21)で使ったスライドです。割と「当たり前のこと」をまとめなおしただけな感じです。
Technology
◦
Read more
70
Save
Share
Embed
Embed presentation
Download
Downloaded 118 times
1
/ 30
2
/ 30
3
/ 30
4
/ 30
5
/ 30
6
/ 30
7
/ 30
8
/ 30
9
/ 30
10
/ 30
11
/ 30
12
/ 30
13
/ 30
14
/ 30
15
/ 30
16
/ 30
17
/ 30
18
/ 30
19
/ 30
20
/ 30
21
/ 30
22
/ 30
23
/ 30
24
/ 30
25
/ 30
26
/ 30
27
/ 30
28
/ 30
29
/ 30
30
/ 30
More Related Content
PDF
各種データベースの特徴とパフォーマンス比較
by
株式会社オプト 仙台ラボラトリ
PDF
SharePoint goes Microsoft Graph
by
Markus Moeller
PDF
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
by
Satoshi Takami
PDF
MagicOnion~C#でゲームサーバを開発しよう~
by
torisoup
PPTX
Nmapの真実(続)
by
abend_cve_9999_0001
PDF
MagicOnion入門
by
torisoup
PDF
Siber İstihbarat Eğitim Dokümanı
by
BGA Cyber Security
PDF
3分でわかるAzureでのService Principal
by
Toru Makabe
各種データベースの特徴とパフォーマンス比較
by
株式会社オプト 仙台ラボラトリ
SharePoint goes Microsoft Graph
by
Markus Moeller
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
by
Satoshi Takami
MagicOnion~C#でゲームサーバを開発しよう~
by
torisoup
Nmapの真実(続)
by
abend_cve_9999_0001
MagicOnion入門
by
torisoup
Siber İstihbarat Eğitim Dokümanı
by
BGA Cyber Security
3分でわかるAzureでのService Principal
by
Toru Makabe
What's hot
PDF
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
by
Preferred Networks
PPTX
第15回JSSUG「Azure SQL Database 超入門」
by
裕之 木下
PPTX
お絵かきのお話(~nw構成図ってどんな感じで書いてます?~)
by
Tatsuya Maruno
PPTX
軽量Kubernetes環境 K3Sのご紹介
by
Tetsurou Yano
PPTX
Nmapの真実
by
abend_cve_9999_0001
PPTX
NGSI によるデータ・モデリング - FIWARE WednesdayWebinars
by
fisuda
PPTX
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
by
Shinya Yamaguchi
PDF
Ingress on Azure Kubernetes Service
by
Toru Makabe
PPTX
SharePoint Framework の最新情報をキャッチアップしよう!
by
Ai Hirano
PDF
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
by
Preferred Networks
PPTX
PenTesterが知っている危ないAWS環境の共通点
by
zaki4649
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
by
Yoshifumi Kawai
PDF
AWSのログ管理ベストプラクティス
by
Akihiro Kuwano
PDF
Azure Infrastructure as Code 体験入隊
by
Toru Makabe
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
by
naoki koyama
PDF
nioで作ったBufferedWriterに変えたら例外になった
by
chibochibo
PPTX
Azure Key Vault
by
junichi anno
PDF
日本OpenStackユーザ会 第37回勉強会
by
Yushiro Furukawa
PPTX
HamaCTF WriteUp (Unpack category)
by
Shota Shinogi
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
by
Preferred Networks
第15回JSSUG「Azure SQL Database 超入門」
by
裕之 木下
お絵かきのお話(~nw構成図ってどんな感じで書いてます?~)
by
Tatsuya Maruno
軽量Kubernetes環境 K3Sのご紹介
by
Tetsurou Yano
Nmapの真実
by
abend_cve_9999_0001
NGSI によるデータ・モデリング - FIWARE WednesdayWebinars
by
fisuda
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
by
Shinya Yamaguchi
Ingress on Azure Kubernetes Service
by
Toru Makabe
SharePoint Framework の最新情報をキャッチアップしよう!
by
Ai Hirano
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
by
Preferred Networks
PenTesterが知っている危ないAWS環境の共通点
by
zaki4649
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
by
Yoshifumi Kawai
AWSのログ管理ベストプラクティス
by
Akihiro Kuwano
Azure Infrastructure as Code 体験入隊
by
Toru Makabe
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
by
naoki koyama
nioで作ったBufferedWriterに変えたら例外になった
by
chibochibo
Azure Key Vault
by
junichi anno
日本OpenStackユーザ会 第37回勉強会
by
Yushiro Furukawa
HamaCTF WriteUp (Unpack category)
by
Shota Shinogi
Similar to 大規模なJavaScript開発の話
PDF
わかるコードを書くために For writing clean code
by
Eyes, JAPAN
PDF
大規模なギョームシステムにHaxeを採用してみた話
by
terurou
PDF
Browser Computing Structure
by
Shogo Sensui
PDF
Agile japan2010 rakuten様プレゼン資料
by
Akiko Kosaka
PDF
最新アドテク×Java script実践活用術
by
Nagao Shun
PDF
10+1 Things you should know about JavaScript testing
by
Takuto Wada
PPTX
ProductManagement / front-endin Sansan( & remote work)
by
Iwashita Hironori
PPTX
Javascriptのデザインパターン【勉強会資料】
by
株式会社キャッチアップ
PDF
Aiming study#6pdf
by
Koutaro Chikuba
PDF
Windows ストアアプリのつくりかた (JS + HTML + CSS)
by
Yu Nobuoka
PDF
JavaScript ライブラリーを使い倒そう #buildinsider
by
Tsuyoshi Yasunishi
PDF
Hyper → Highspeed → Development
by
aktsk
PDF
第4回品川Redmine勉強会資料「チケット駆動開発のフレームワーク~現場の経験知からパターン言語へ(ベータ版)」
by
akipii Oga
PPTX
ウォーターフォールとアジャイル開発の比較
by
Unicast Inc.
PDF
第1回SIA研究会(例会)プレゼン資料
by
Tae Yoshida
PDF
JavaScript.Next Returns
by
dynamis
PDF
Weekend Androidのススメ
by
Suzuki Junko
PDF
Unification of the middle scale services by Nuxt.js
by
HajimeSasanuma
PPTX
Java fx勉強会lt 第8回
by
Taiji Miyabe
PDF
大(中)規模Java script開発について
by
Yuki Tanaka
わかるコードを書くために For writing clean code
by
Eyes, JAPAN
大規模なギョームシステムにHaxeを採用してみた話
by
terurou
Browser Computing Structure
by
Shogo Sensui
Agile japan2010 rakuten様プレゼン資料
by
Akiko Kosaka
最新アドテク×Java script実践活用術
by
Nagao Shun
10+1 Things you should know about JavaScript testing
by
Takuto Wada
ProductManagement / front-endin Sansan( & remote work)
by
Iwashita Hironori
Javascriptのデザインパターン【勉強会資料】
by
株式会社キャッチアップ
Aiming study#6pdf
by
Koutaro Chikuba
Windows ストアアプリのつくりかた (JS + HTML + CSS)
by
Yu Nobuoka
JavaScript ライブラリーを使い倒そう #buildinsider
by
Tsuyoshi Yasunishi
Hyper → Highspeed → Development
by
aktsk
第4回品川Redmine勉強会資料「チケット駆動開発のフレームワーク~現場の経験知からパターン言語へ(ベータ版)」
by
akipii Oga
ウォーターフォールとアジャイル開発の比較
by
Unicast Inc.
第1回SIA研究会(例会)プレゼン資料
by
Tae Yoshida
JavaScript.Next Returns
by
dynamis
Weekend Androidのススメ
by
Suzuki Junko
Unification of the middle scale services by Nuxt.js
by
HajimeSasanuma
Java fx勉強会lt 第8回
by
Taiji Miyabe
大(中)規模Java script開発について
by
Yuki Tanaka
More from terurou
PDF
Webブラウザ上で動作する帳票エンジンを作る話
by
terurou
PDF
自社サービスでDurable Functionsを採用した話
by
terurou
PDF
Computation Expressions for Haxe
by
terurou
PDF
デンキヤギの採用の考え方
by
terurou
PDF
Vue.jsをhaxeで
by
terurou
PDF
MQTTとAMQPと.NET
by
terurou
PDF
altJSの選び方
by
terurou
PDF
DataGridを自前実装する話
by
terurou
PDF
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
by
terurou
PDF
動的なILの生成と編集
by
terurou
PDF
FIRST STEP to Haxe/JavaScript
by
terurou
PDF
Metro Style AppsでMSILver.2012/06/09
by
terurou
PDF
Metro Style AppsでMSIL
by
terurou
PDF
Yet Another DLR for Silverlightの試作
by
terurou
PDF
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
by
terurou
PDF
CommonJSの話
by
terurou
PDF
Scala×silverlight
by
terurou
PDF
DLR言語によるSilverlightプログラミング
by
terurou
PDF
Iron Python / Iron Ruby で .NET Programming
by
terurou
PDF
クラウドGPS(仮)
by
terurou
Webブラウザ上で動作する帳票エンジンを作る話
by
terurou
自社サービスでDurable Functionsを採用した話
by
terurou
Computation Expressions for Haxe
by
terurou
デンキヤギの採用の考え方
by
terurou
Vue.jsをhaxeで
by
terurou
MQTTとAMQPと.NET
by
terurou
altJSの選び方
by
terurou
DataGridを自前実装する話
by
terurou
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
by
terurou
動的なILの生成と編集
by
terurou
FIRST STEP to Haxe/JavaScript
by
terurou
Metro Style AppsでMSILver.2012/06/09
by
terurou
Metro Style AppsでMSIL
by
terurou
Yet Another DLR for Silverlightの試作
by
terurou
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
by
terurou
CommonJSの話
by
terurou
Scala×silverlight
by
terurou
DLR言語によるSilverlightプログラミング
by
terurou
Iron Python / Iron Ruby で .NET Programming
by
terurou
クラウドGPS(仮)
by
terurou
大規模なJavaScript開発の話
1.
大規模な JavaScript開発の話 terurou/YAGI.Teruo
2.
自己紹介
2
3.
terurouです。 • Web・GUI・分散処理を手広くやってます –
Windows 8(Metro Style Apps), Silverlight, JavaScript, Android, … – Cassandra, 自作KVS, AWS, … – DataGridの自作に定評があるらしいです • フロントエンド寄りのアーキテクチャの設計が 割と得意です – MVC/MVVM, Client-side Cache, 通信, … 3
4.
大規模なJavaScript開発とは?
4
5.
私の大規模プロジェクト経験 • 大規模なJavaScriptプロジェクト経験は2回 –
似たところではSilverlightの大規模プロジェクトも • 全て業務系システム開発プロジェクト – Web/ゲーム系のことはわからないです – 基本的なことは同じだと思いますが… 5
6.
私の関わった大規模JavaScript開発(1) • SaaS セルフカスタマイズエンジン
– Salseforce.comみたいなやつ • 5人体制(JS担当者は2名) – プロジェクト全体では50名体制 • 開発規模:数万行(記憶があいまい) – ライブラリ未使用、フルスクラッチ – 現在のスキルであれば25K行程度で作れそう 6
7.
私の関わった大規模JavaScript開発(2) • SaaS フレームワーク
– 現在進行中 • 6人体制(JS担当者は3名) – プロジェクト全体では最大30名程度になる? • 開発規模は30K行程度に収まる? – Ext.JS利用、DataGrid自作 7
8.
「大規模」の定義が難しいですが… • 単純にステップ数が多いアプリケーション –
並みの規模だとJS単体で10K行は超えない – cybozu.comがJS単体で65K行程度らしい • http://b.hatena.ne.jp/articles/201112/6709 • 開発人員が多い – プロジェクト全体では数十名規模とか… 8
9.
大規模プロジェクトでのチーム構成 • PMO(Project Management
Office) – プロジェクト管理 • 共通基盤チーム – フレームワーク開発、インフラ整備など • アプリケーションチーム(業務チーム) – 機能設計、実装など – このチームが一番人数が多くなるはず • その他に企画、品質管理、保守運営など 9
10.
大規模プロジェクトでのチーム構成 • PMO(Project Management
Office) – プロジェクト管理 • 共通基盤チーム ← 今回話す範囲 – フレームワーク開発、インフラ整備など • アプリケーションチーム(業務チーム) – 機能設計、実装など – このチームが一番人数が多くなるはず • その他に企画、品質管理、保守運営など 10
11.
大規模プロジェクトでの 基盤開発で意識すべきこと
11
12.
大規模プロジェクトならでは「急所」 • どうしても「変更」に対して弱くなりがち –
チーム制による分業のため、変更発生時には 関係各所との調整が必要 • 人数が多い分だけオーバーヘッドが大きくなる – 問題の発覚が遅くなるほど影響が大きくなり、 最悪のケースはプロジェクトが頓挫することも • プロジェクトメンバのスキルのばらつき – 対策をしなければ、生産性、品質、保守性に 大きな影響が出てしまう 12
13.
どのように「急所」に向き合うか • 早期の技術検証/プロトタイピング –
プロジェクトの序盤に問題点をクリアしておけば、 後から変更をする必要がない • 「できていいことだけができる」環境を作る – コードの品質(保守性・可読性)がメンバーの スキルに影響されないようにする – 品質が高レベルで安定していれば、もし変更が 必要になっても対応しやすい 13
14.
技術検証/プロトタイピングで注意すること • 些細なことでも必ず検証するのが理想 –
「実現できるはず」という思い込みをしていても、 実は実現できないことは多々ある • あまり作りこみ過ぎない – 所詮は検証用、書き捨てコードでOK • 目的(何を検証したいのか)を見失わない – 実装可能? パフォーマンス? 生産性? ユーザビリティ? … 14
15.
「できていいことだけができる」環境 • プロジェクトに特化したフレームワークを作り、
実装パターンを単一化/テンプレート化する – 「穴埋め実装すればアプリが作れます!」 – 必要な機能を提供しつつ、不要な機能は隠す • 汎用化≒複雑化、保守性・学習性が落ちる • OSSのフレームワークを導入しただけではダメ • 規約での制限は最後の手段 – コードの品質が実装スキル、規約の理解度に 依存してしまう 15
16.
ちょっと難しく書きすぎた… • 一人プロジェクトと大差はない –
「画面ごとに実装方法やクラス構成が違う」とか わざわざやらないよね • 大規模開発は小規模開発のサブセット – と、前に誰かが言っていたような気がする – 「自分ならこう書く」を分業体制でやるためには 段取りが必要 – どれだけうまく環境構築しても、基盤チームの 実力以上の品質にはならない 16
17.
JavaScriptでの大規模開発
17
18.
JavaScriptは大規模開発に向いていない • 言語仕様が柔軟すぎる –
「クラス的なもの」ですら書き方がいくらでもある – prototypeを拡張/改変できる • ECMAScript 5なら制限できるけど… • モダンな書き方をするとコードが冗長に – var前置、stacktrace対策(function名を明記) • そもそもGUIを作るにはAPIが貧弱 – jQuery UIやExt.JS等の範囲内ならよいが… 18
19.
JavaScriptエンジニアが少ない問題 • 「jQueryできます!」とか言われましても… –
案件によってはそれでもいいのだけど… – それで済む時はJavaScript部分は小規模… • そもそもJavaScriptは難しい – prototype型のオブジェクト指向言語 – HTML/CSS、クロスブラウザ、ブラウザハック – GUI実装パターン(MVC)の知識 – など、覚えないといけないこと沢山 19
20.
柔軟すぎる言語仕様への対策 • JavaScriptを生成する言語の採用 –
CoffeeScript, Haxe(, JSX, and more) – 個人的にはHaxe押し • JavaScriptで開発する場合、モジュールや クラスの書き方は必ず統一する – 開発ガイドやコーディング規約書が必須 – jsdocコメントも必須にすべき • Closure Compilerがコメントを元にチェックしてくれる 20
21.
Haxe • 静的型付けのオブジェクト指向言語 –
C#やActionScript3(ECMAScript4)に似た構文 – 型安全、コンパイル時の型チェック – 型推論や構造的部分型などの機能のおかげで JavaScriptより簡潔にコードを書ける • インライン展開やマクロにより、現実的には 人の手では行えない最適化が可能 • コンパイルが速い 21
22.
Haxeで解決できるJavaScriptあるある 1. ライブラリの関数の定義変更が発生 2. 呼び出し側を1か所だけ直し忘れる 3.
忘れたころにバグに遭遇… – 原因がわかりにくいパターン 一方Haxeはコンパイラが修正漏れを検出した 22
23.
JavaScript MVC • ViewとModelを分離することで分業しやすい
– デザイナとプログラマ – JavaScriptハッカーとプログラマ • 難しいViewはJavaScriptハッカーに委ねる • 保守性・可読性の向上 • MVCライブラリはいろいろある – Backbone.js, Ember.js, Spine, AngularJS, … 23
24.
MVCライブラリだけでは足りない部分 • Modelのモジュール構成 –
Template Methodパターン – Facade/Mediatorパターン – Factory Method/Abstract Factoryパターン – Observerパターン(MVCライブラリ未使用時) • プロジェクト固有の処理 – 入力チェック – 通信処理(特にエラー処理) 24
25.
View(GUIコンポーネント)の細かいテクニック • invalidate(遅延描画) –
GUIコンポーネントを作るときに必須 – 描画パフォーマンスが改善 • 不要な描画処理を走らせないようにする • 部分描画と組み合わせるとなお良い – ActionScript, iOS, Android, Windows, …など、 どれでも用意されている – JavaScriptでの解説を見かけたことがない… 25
26.
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
27.
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.
まとめ
28
29.
まとめ • 一人開発でも複数人開発でもやることには
大差はない – ただし人数が多い分だけ修正する際のコストが 増加するので、段取りには注意する • JavaScriptは柔軟すぎる言語仕様の割には 冗長なコードになりがち – 可能であれば、JavaScriptを生成する言語の 採用を検討したほうが良い(Haxeとか) 29
30.
ご清聴ありがとうございました
30
Download