SlideShare a Scribd company logo
Componentization 
for Reality 
アメーバ事業本部 
フロントエンドディベロッパー 五藤 佑典
@ygoto3_ 
ygoto3.com
フロントエンドの 
コンポーネントベース開発の話
app 
├─ js 
│ ├─ main.js 
│ ├─ sideMenu.js 
│ └─ ….js 
├─ css 
│ ├─ sideMenu.css 
│ ├─ header.css 
│ └─ ….css 
├─ images 
│ ├─ banner.png 
│ └─ ….png 
. 
.
Componentization for Reality
最初は整理されていたのに 
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 ?
Componentization for Reality
platform.js ?
Componentization for Reality
しかし 
• ブラウザによって挙動が異なる 
• 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 
. . 
. .
Componentization for Reality
コンポーネントのパターンが複数ある。 
パターン分サブジェネレータを作る 
Test Spec も一緒にジェネレートする
button というパターンの 
コンポーネント用に 
1サブジェネレータ作成しておく 
$ yo my-proj:button upload-button 
components 
└─ upload-button 
├─ upload-button.js 
├─ upload-buttonSpec.js 
├─ style.css 
└─ template.html
リソースのロード
Componentization for Reality
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
ビューの生成
Componentization for Reality
コンポーネント単位でユニットテストしたい。 
テスト環境の充実 
カスタムエレメントでビューを扱いたい。 
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/
ありがとうございました

More Related Content

PPTX
Let's make quickly mock up by bootstrap.
PDF
Imas hackathon 2019_gotch
PDF
Fireworks Lover Advent calender 2013 1日目 Fireworks de Genetator
PDF
【管理画面チラ見せナイト #4】ヌリカエCSを支える技術
PDF
10分で覚えるvim講座 基本編
PDF
動画 公開
PDF
Slides for Nonverbal Communication
PDF
Make Your Presentations More Effective
Let's make quickly mock up by bootstrap.
Imas hackathon 2019_gotch
Fireworks Lover Advent calender 2013 1日目 Fireworks de Genetator
【管理画面チラ見せナイト #4】ヌリカエCSを支える技術
10分で覚えるvim講座 基本編
動画 公開
Slides for Nonverbal Communication
Make Your Presentations More Effective

Similar to Componentization for Reality (20)

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

More from Yusuke Goto (20)

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

Componentization for Reality