SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Componentization 
for Reality 
アメーバ事業本部 
フロントエンドディベロッパー 五藤 佑典
@ygoto3_ 
ygoto3.com
フロントエンドの 
コンポーネントベース開発の話
app 
├─ js 
│ ├─ main.js 
│ ├─ sideMenu.js 
│ └─ ….js 
├─ css 
│ ├─ sideMenu.css 
│ ├─ header.css 
│ └─ ….css 
├─ images 
│ ├─ banner.png 
│ └─ ….png 
. 
.
最初は整理されていたのに 
Sira Anamwong / FreeDigitalPhotos.net
いつの間にか汚なくなり 
Bill Longshaw / FreeDigitalPhotos.net
あるコードに 
修正を入れたら 
marin / FreeDigitalPhotos.net
全然知らない場所が壊れた 
Witthaya Phonsawat / FreeDigitalPhotos.net
この画像、差し替えで 
お願いしまーす!!って言われ 
stockimages / FreeDigitalPhotos.net
どこにあるんやろ、これ?ってなる 
stockimages / FreeDigitalPhotos.net
最初は小さいプロジェクトだと 
思っていても 
Serge Bertasius Photography / FreeDigitalPhotos.net
思ってたより 
大きくなってしまった時の 
弊害は大きい 
David Castillo Dominici / FreeDigitalPhotos.net
やがてコードが 
人が認識できる単位ではなくなり 
整理できなくなる 
app 
├─ js 
│ ├─ main.js 
│ ├─ sideMenu.js 
│ └─ ….js 
├─ css 
│ ├─ sideMenu.css 
│ ├─ header.css 
│ └─ ….css 
├─ templates 
│ ├─ header.html 
│ ├─ sideMenu.html 
│ └─ ….html 
├─ images 
│ ├─ banner.png 
│ └─ ….png 
. 
.
人が認識できる単位 
= ディレクトリ
人が認識できる単位 
 コンポーネント化
概念的なこと
コンポーネントとして大事なこと 
• 再利用が可能 
• 交換が可能
さらにプロダクト開発においては 
• 機能のカプセル化が可能 
• コンポーネントの組み合わせで新たなコンポーネント作成が可能 
• コンポーネント間のコミュニケーションが可能
コンポーネント化の対象 
• UI = コンポーネント 
• サービスとしてのロジック = モジュール
Web Component ?
platform.js ?
しかし 
• ブラウザによって挙動が異なる 
• Shadow DOM の CSS はカプセル化できない 
• パフォーマンス的な懸念 
• 外部依存コンポーネントの重複ロードによるリクエスト増加
UI の完璧なコンポーネント化は 
(まだ)難しい
現実的な 
コンポーネントベース開発
リソース管理だけでもいい 
• コンポーネントに必要なリソースを1つの場所で管理できればいい 
• コンポーネント単位でユニットテストも管理できればいい 
• 別のプロジェクトを始めるときに再利用しやすければいい
ディレクトリ構造の強制 
リソースのロード 
スタイルの適用 
ビューの生成 
JS
これを比較的簡単に行うために 
ツールを活用する
ディレクトリ構造の強制
基本となる JavaScript と共に 
Style / Template / 画像などのリソースも 
一緒に管理 
components 
├─ menu 
│ ├─ menu.js 
│ ├─ menuSpec.js 
│ ├─ style.css 
│ └─ template.html 
├─ user-list 
│ ├─ user-list.js 
│ ├─ user-listSpec.js 
│ ├─ style.css 
│ ├─ template.html 
│ └─ icon.png 
├─ sns-button 
│ ├─ banner.png 
. . 
. .
コンポーネントのパターンが複数ある。 
パターン分サブジェネレータを作る 
Test Spec も一緒にジェネレートする
button というパターンの 
コンポーネント用に 
1サブジェネレータ作成しておく 
$ yo my-proj:button upload-button 
components 
└─ upload-button 
├─ upload-button.js 
├─ upload-buttonSpec.js 
├─ style.css 
└─ template.html
リソースのロード
AMD も CommonJS もサポートする 
最強ローダー=
規模が大きくなるのでコードを分割したい。 
分離したい箇所だけ Chunk で分割する
Chunk を使用することによって 
エントリーポイントから辿って 
まとめる必要のないファイルを 
簡単に分割できる 
require.ensure([‘modal’], function (require) { 
var modal = require(‘modal’); 
modal.create(); 
});
スタイルの適用
insert-css restyle.js
substack が作った CSS の文字列を <head> に 
挿入するライブラリ= 
insert-css
コンポーネントが呼び出されたときに CSS を適用させたい。 
CSS Preprocessor に Stylus を使いたい。 
WebPack の style 系 loader と一緒使う 
insert-css 挿入した <style> を取り除く機能がないので、ラップする
WebPack で Stylus をロードし、 
insertCss() に渡すだけで 
コンポーネントのスタイルを 
適用できる 
var style = require(‘!raw!stylus!./button.styl’); 
insertCss(style);
ddpavumba / FreeDigitalPhotos.net
ビューの生成
コンポーネント単位でユニットテストしたい。 
テスト環境の充実 
カスタムエレメントでビューを扱いたい。 
Element Directive を活用
ディレクトリ構造の強制 
リソースのロード 
スタイルの適用 
ビューの生成 
JS
JS
Reference 
• Componentizing the Web 
http://code.tutsplus.com/tutorials/componentizing-the-web--cms-20602 
• The State of the Componentised Web 
http://www.futureinsights.com/home/the-state-of-the-componentised-web.html 
• The Problem With Using HTML Imports For Dependency Management 
http://tjvantoll.com/2014/08/12/the-problem-with-using-html-imports-for-dependency-management/ 
• Why Web Components Aren’t Ready for Production… Yet 
http://developer.telerik.com/featured/web-components-arent-ready-production-yet/ 
• Why Web Components Are Ready For Production 
http://developer.telerik.com/featured/web-components-ready-production/
ありがとうございました

Contenu connexe

Similaire à Componentization for Reality

20110824 gatracker-final
20110824 gatracker-final20110824 gatracker-final
20110824 gatracker-final
susumukatachi
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
Tomonori Yamada
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on Android
Yuki Anzai
 
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
Kunimasa Noda
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDと
sters
 

Similaire à Componentization for Reality (20)

プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
 
20110824 gatracker-final
20110824 gatracker-final20110824 gatracker-final
20110824 gatracker-final
 
空のテンプレートから始めるWindows 8 ストアアプリ
空のテンプレートから始めるWindows 8 ストアアプリ空のテンプレートから始めるWindows 8 ストアアプリ
空のテンプレートから始めるWindows 8 ストアアプリ
 
Game Jamで Asset Serverを使ってみよう♪
Game Jamで Asset Serverを使ってみよう♪Game Jamで Asset Serverを使ってみよう♪
Game Jamで Asset Serverを使ってみよう♪
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみようa-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
 
Railsやるやる_セキュリティ小話
Railsやるやる_セキュリティ小話Railsやるやる_セキュリティ小話
Railsやるやる_セキュリティ小話
 
Head First XML Layout on Android
Head First XML Layout on AndroidHead First XML Layout on Android
Head First XML Layout on Android
 
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】
 
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDと
 
Canvas勉強会
Canvas勉強会Canvas勉強会
Canvas勉強会
 
開発中 3Dプリント API for Flash の 紹介 【as3sculpteo】
開発中 3Dプリント API for Flash の 紹介 【as3sculpteo】 開発中 3Dプリント API for Flash の 紹介 【as3sculpteo】
開発中 3Dプリント API for Flash の 紹介 【as3sculpteo】
 
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
 
グリーにおけるスマホアプリ開発~HTML5編
グリーにおけるスマホアプリ開発~HTML5編グリーにおけるスマホアプリ開発~HTML5編
グリーにおけるスマホアプリ開発~HTML5編
 
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~
 
ニコニコ超デザイン-Metro考察編-
ニコニコ超デザイン-Metro考察編-ニコニコ超デザイン-Metro考察編-
ニコニコ超デザイン-Metro考察編-
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVC
 

Plus de Yusuke Goto

Plus de Yusuke Goto (20)

RUM と STM で実現する動画視聴における信頼性エンジニアリング
RUM と STM で実現する動画視聴における信頼性エンジニアリングRUM と STM で実現する動画視聴における信頼性エンジニアリング
RUM と STM で実現する動画視聴における信頼性エンジニアリング
 
Streaming Reliability Engineering
Streaming Reliability EngineeringStreaming Reliability Engineering
Streaming Reliability Engineering
 
2021 年春 ABEMA が Internet Explorer 11 の サポートを終了
2021 年春 ABEMA が Internet Explorer 11 の サポートを終了2021 年春 ABEMA が Internet Explorer 11 の サポートを終了
2021 年春 ABEMA が Internet Explorer 11 の サポートを終了
 
より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化
 
conte - ABEMA's Design System
conte - ABEMA's Design Systemconte - ABEMA's Design System
conte - ABEMA's Design System
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組み
 
ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術
 
Taipei Video Tech #5 talk : A Japanese Way to Maintain Constant Quality on St...
Taipei Video Tech #5 talk : A Japanese Way to Maintain Constant Quality on St...Taipei Video Tech #5 talk : A Japanese Way to Maintain Constant Quality on St...
Taipei Video Tech #5 talk : A Japanese Way to Maintain Constant Quality on St...
 
2019 年後半 海外動画技術動向
2019 年後半 海外動画技術動向2019 年後半 海外動画技術動向
2019 年後半 海外動画技術動向
 
A Japanese Way to Maintain Constant Quality on Streaming Chaotically Supplied...
A Japanese Way to Maintain Constant Quality on Streaming Chaotically Supplied...A Japanese Way to Maintain Constant Quality on Streaming Chaotically Supplied...
A Japanese Way to Maintain Constant Quality on Streaming Chaotically Supplied...
 
AbemaTV の課題と Demuxed 2019
AbemaTV の課題と Demuxed 2019AbemaTV の課題と Demuxed 2019
AbemaTV の課題と Demuxed 2019
 
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
 
AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場
 
Nab Show 2019 報告会 - ATSC 3.0 / MOS / Machine Learning / 映像合成技術 編
Nab Show 2019 報告会 - ATSC 3.0 / MOS / Machine Learning / 映像合成技術 編Nab Show 2019 報告会 - ATSC 3.0 / MOS / Machine Learning / 映像合成技術 編
Nab Show 2019 報告会 - ATSC 3.0 / MOS / Machine Learning / 映像合成技術 編
 
AbemaTV プロダクトデザイン 2.0
AbemaTV プロダクトデザイン 2.0AbemaTV プロダクトデザイン 2.0
AbemaTV プロダクトデザイン 2.0
 
Story-Assured Design で開発チーム全員でデザインする
Story-Assured Design で開発チーム全員でデザインするStory-Assured Design で開発チーム全員でデザインする
Story-Assured Design で開発チーム全員でデザインする
 
KPI から生まれるアクセシビリティ
KPI から生まれるアクセシビリティKPI から生まれるアクセシビリティ
KPI から生まれるアクセシビリティ
 
Atomic Design という名のデザイン整理術
Atomic Design という名のデザイン整理術Atomic Design という名のデザイン整理術
Atomic Design という名のデザイン整理術
 
既存のフローからアップデートするアジャイル・デザインフロー
既存のフローからアップデートするアジャイル・デザインフロー既存のフローからアップデートするアジャイル・デザインフロー
既存のフローからアップデートするアジャイル・デザインフロー
 
UI 開発をアジャイルに行うための Atomic Design
UI 開発をアジャイルに行うための Atomic DesignUI 開発をアジャイルに行うための Atomic Design
UI 開発をアジャイルに行うための Atomic Design
 

Dernier

Dernier (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Componentization for Reality