SlideShare ist ein Scribd-Unternehmen logo
1 von 53
わんくま同盟 大阪勉強会 #63
Firefox OSアーキテクチャクイックツアー
株式会社グローバルサイバーグループ
マネージャ
藪下 正美
わんくま同盟 大阪勉強会 #63
はじめに
わんくま同盟 大阪勉強会 #63
自己紹介
• 藪下正美
– わんくまでは普段あおいたんとか名乗ってる人
– 大阪は#45以来ですおひさしぶりです
• 株式会社グローバルサイバーグループから来ました
• Firefox OSコミュニティから来ました
• Codezineで記事書きました
– Firefox OSアプリ開発が楽しくなるハードウェアAPIの概要と、
センサーAPIや音声APIを使った楽器アプリの作例
– http://codezine.jp/article/detail/8540
わんくま同盟 大阪勉強会 #63
会社紹介
• 株式会社グローバルサイバーグループ
– 関西出身の組み込み系の会社
• 携帯電話とか業務用コピー機とかデジカメとかの中の人やってます
• 最近はAndroidのすごい下の方か各モバイルOS向けアプリを主にやって
ます
– Firefox OSの勉強会を支援する事業やってるので興味があればご
相談ください
• http://www.gcg.bz/labo_blog/?page_id=943
– 各種モバイルOSの質問も受け付けてます。ブログで回答します
• http://www.gcg.bz/labo_blog/?page_id=945
わんくま同盟 大阪勉強会 #63
コミュニティ紹介
• Firefox OSコミュニティで各種イベントのスタッフとかス
ピーカとかやってます
– FxOSコードリーディングというコミュニティのいいだしっぺ
• http://reading.fxos.org/
• 大体毎月Mozilla Japanのオフィスでソースコードを読む会やってます
• 年三回ぐらい成果発表会的なセミナーやってます
• ほかにもHTML5j Webプラットフォーム部とかWoT的なソ
フト/ハードを味見するコミュニティもやってます
わんくま同盟 大阪勉強会 #63
今日のアジェンダ1
• Firefox OSの全体像
– Gaia
– Gecko
– Gonk
わんくま同盟 大阪勉強会 #63
今日のアジェンダ2
• Gaiaについて少し詳しく
– Gaiaの全体像
– アプリの権限
– ChromeプロセスとContentプロセス
– Chromeプロセスで動くアプリ
– Contentプロセスで動くアプリ
わんくま同盟 大阪勉強会 #63
今日のアジェンダ3
• Geckoについて少し詳しく
– Gecko概要
– 三大機能と三つのツリー
わんくま同盟 大阪勉強会 #63
今日のアジェンダ4
• Gonkについて少し詳しく
– HAL
– AOSP Linux
• 全体まとめ
• さいごに
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
– Gaia
• UIやプリインアプリなど
ユーザに見える基本機能を
提供する
• すべてHTML5で書かれている
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
– Gecko
• Gaiaやユーザアプリが
使用するAPIやHTML5の
ランタイムを提供する
• C++、JS、IDLなど多くの
言語で実現されている
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
– Gonk
• OS、HALなどを含む層
• C/C++で書かれている
わんくま同盟 大阪勉強会 #63
Gaia
• UIやプリインアプリなどでデ
バイスの基本的な操作を提供
する
• すべてHTML5で書かれている
• Geckoに依存するがプラット
フォームに依存しない
– B2Gデバイス、デスクトップ、
シミュレータなどGeckoが動作
する環境であれば広く動作する
• Gaiaはプロファイルに応じて
提供する機能やUIの変更が多
い
わんくま同盟 大阪勉強会 #63
Gecko
• Gaiaやユーザアプリが使用す
るAPIやHTML5のランタイムを
提供する
• C++、JS、IDLなど多くの言語
で実現されている
• FirefoxやThunderbirdなどの
Mozilla製品で共通のランタイ
ム
わんくま同盟 大阪勉強会 #63
Gonk
• OS、HALなどを含む層
• WindowsやMac OS XなどのOS
と同等にGeckoの移植対象プ
ラットフォームの一つとして
定義されている
• Gonkは現状唯一B2Gの要求を
満たすプラットフォーム
– 他のOSでは必要な権限が得られ
ない
• Gonkで使用されるOSはAOSP
Linux
わんくま同盟 大阪勉強会 #63
GAIAについて少し詳しく
わんくま同盟 大阪勉強会 #63
Gaiaの全体像
• Gaiaのアプリ (以下内部アプ
リ) はUIや基本機能を提供する
• 内部アプリは大きく分けて
Chromeプロセスで動くアプリ
とContentプロセスで動くアプ
リに分けられる
わんくま同盟 大阪勉強会 #63
アプリの権限
• アプリには利用できるAPIの範
囲が異なる権限タイプが存在
する
– web権限 (ホスト型アプリ/単純
なパッケージ型アプリ)
– trusted権限 (信頼されたホスト型
アプリ)
– privileged権限 (特権型アプリ)
– certified権限 (内部アプリ)
権限 概要
Web権限
基本的な権限
ハードウェアにアクセスするAPIやプライ
バシーにかかわるAPIが使えない
Trusted権限
V2.1から追加された権限
一部のユーザに許可を求めるタイプの
APIを使用できる
Privileged権限
事業者に関わる課金、重大なプライバ
シー/セキュリティインシデントが予想さ
れるものを除いたAPIが使用できる権限
Certified権限
キャリアやメーカがプリインアプリでのみ
使用可能な権限
すべてのAPIを使用できる
わんくま同盟 大阪勉強会 #63
ChromeプロセスとContentプロセス
• 内部アプリは特権的な機能を
利用するため認証 (certified) 権
限を持つ
• Geckoの制約上特権的APIは特
権的なプロセスでないと実行で
きない
• この特権的なプロセスを
Chromeプロセスと呼ぶ
Gaia
Gecko
Chrome
プロセス
Content
プロセス
APIs
(Interface)
APIs
(Implement)
API呼び出し
わんくま同盟 大阪勉強会 #63
ChromeプロセスとContentプロセス
• 内部アプリの大部分を含む一
般的なアプリでは特権的でな
いContentプロセスで動作する
• Contentプロセスで動作するア
プリでもアプリマニフェスト
で宣言し、ユーザに許可され
た機能についてはAPIの使用を
許可される
Gaia
Gecko
Chrome
プロセス
Content
プロセス
APIs
(Interface)
APIs
(Implement)
わんくま同盟 大阪勉強会 #63
アプリのヒエラルキー
• Firefox OSのアプリは少数の
Chromeプロセスアプリと多数
のContentプロセスアプリから
なる
• Firefox OSで実行されるアプリ
はSystemアプリの子プロセス
として実行される
• 子プロセスはContentプロセス
として起動される
Gaia
Gecko
Chrome
プロセス
Content
プロセス
APIs
(Interface)
APIs
(Implement)
わんくま同盟 大阪勉強会 #63
Chromeプロセスで動くアプリ
• Chromeプロセスで動くアプリ
としては以下のものが挙げら
れる
– Systemアプリ
– Settingsアプリ
– ブラウザアプリ
– キーボードアプリ
– 検索アプリ
• これらのアプリにはSystemア
プリの一部として動作するも
のもある
System Settings
ブラウザ キーボード
検索
わんくま同盟 大阪勉強会 #63
Systemアプリ
• アプリの管理とか共通して使
われるUIを管理するアプリ
• Firefox OSで見た目のあるアプ
リすべての親
– 見た目がないアプリもいくつか
ぶら下がっている
• アプリ起動時のアニメーショ
ンやアプリの切り替えなども
Systemアプリの管轄
Settings
ブラウザ キーボード
検索
System
わんくま同盟 大阪勉強会 #63
Settingsアプリ
• 特定のアプリによらない設定
を行うアプリ
• 端末設定を変更するのは特権
的機能なのでChromeプロセス
で動作する
• Systemアプリが提供している
機能の設定はSettingsアプリの
仕事となる
ブラウザ キーボード
検索
System Settings
わんくま同盟 大阪勉強会 #63
ブラウザアプリ
• その名の通りブラウザアプリ
• webブラウズだけでなくアプ
リのインストール経路にもな
るので特権的な位置づけにあ
る
Settings
キーボード
検索
System
ブラウザ
わんくま同盟 大阪勉強会 #63
キーボードアプリ
• ユーザが文字入力を行うため
のアプリ
• ここではキーボードそのもの
ではなくキーボードが動作す
るフレームワークになる部分
を指している
• 実際操作される部分はユーザ
が選択可能であり作成可能で
ある
Settings
ブラウザ
検索
System
キーボード
わんくま同盟 大阪勉強会 #63
検索
• ホーム画面上部にある検索
ボックス
• v2.1からはアプリ起動中もス
テータスバーに常駐するよう
になった
• 検索ボックスもアプリのイン
ストール経路になるので特権
的な位置づけになる
Settings
ブラウザ キーボード
System
検索
わんくま同盟 大阪勉強会 #63
Contentプロセスで動くアプリ
• Contentプロセスで動くアプリ
は多数あるが大別すると以下
の二つ
– プリインアプリ (内部アプリ)
– ユーザアプリ
プリインアプリ
ユーザアプリ
わんくま同盟 大阪勉強会 #63
プリインアプリ
• ダイアラやメッセージングな
どの工場出荷状態でインス
トール済みのアプリ
• 一部の特権アプリを除いてほ
ぼ認証権限を持つ
• 一般の開発者によるアプリも
採用されることがある
ユーザアプリ
プリインアプリ
わんくま同盟 大阪勉強会 #63
ユーザアプリ
• ユーザアプリは出荷後にユー
ザによってインストールされ
るアプリ
• 基本的には検索やマーケット
プレイスを通して入手する
プリインアプリ
ユーザアプリ
わんくま同盟 大阪勉強会 #63
GECKOについて少し詳しく
わんくま同盟 大阪勉強会 #63
Geckoの全体像
• ざっくり分けてブラウザ機能、
通信系、レンダラ、描画系、
スクリプトエンジン、プラグ
インコンテナ、プラット
フォーム固有層、プラット
フォーム抽象化層で構成され
る
• 全部は話せないのでざっくり
分けた機能について一言ずつ
と代表的な機能の中でも密接
な関係を持っている部分につ
いて述べる
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
プラグインコンテナ スクリプトエンジン
レンダラ
通信系
ブラウザ機能
わんくま同盟 大阪勉強会 #63
Gecko概要
• ブラウザ機能
– 履歴やブラウザコンテキストの
管理、トップレベルオブジェク
トの提供などを行う
• 通信系
– 主にプロトコルに応じた処理へ
ディスパッチするプロトコルハ
ンドラ、サーバとの通信を行う
チャネル、URI文字列の構文
チェックや正規化を行うURIオブ
ジェクトを中心概念として構成
される
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
プラグインコンテナ スクリプトエンジン
レンダラ
通信系
ブラウザ機能
わんくま同盟 大阪勉強会 #63
Gecko概要
• レンダラ
– CSSやstyle属性、JSからの操作に
よって決定されるDOMツリーの
表示表現を作り描画系に指示を
与える
• 描画系
– プラットフォームに依存しない
抽象化された描画フレームワー
クMoz2D、旧フレームワークの
Thebes、レイヤシステム、APZ
(Asynchronous Pan and Zoom) な
どからなる
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
プラグインコンテナ スクリプトエンジン
通信系
ブラウザ機能
レンダラ
わんくま同盟 大阪勉強会 #63
Gecko概要
• スクリプトエンジン
– JavaScriptエンジン、XPConnect
(XPCOM)、WebIDLバインディン
グなど数種類の言語処理系を持
つ
• プラグインコンテナ
– Flashプレイヤーなどのサード
パーティプラグインやDRMシス
テム、ビデオハードウェア、そ
の他埋め込みオブジェクトなど
をブラウザ本体のプロセスから
切り離し影響を最小化するため
のコンテナ機能を提供する
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
レンダラ
通信系
ブラウザ機能
プラグインコンテナ スクリプトエンジン
わんくま同盟 大阪勉強会 #63
Gecko概要
• プラットフォーム抽象化層
– NSPR、XPCOMなどのクロスプ
ラットフォーム用抽象化ライブ
ラリや文字列、数などのプラッ
トフォームによらず表現を一定
にしたいプリミティブなデータ
表現を提供する
• プラットフォーム固有層
– ウィジェット、ファイル、ソ
ケット、ヒューマンインター
フェイスなど低レイヤ機能
Gecko
プラグインコンテナ スクリプトエンジン
レンダラ
通信系
ブラウザ機能
プラットフォーム固有層
プラットフォーム抽象化層
わんくま同盟 大阪勉強会 #63
三大機能と三つのツリー
• ここからはブラウザ機能、レ
ンダラ、描画系、スクリプト
エンジンにまたがるGeckoの
主要機能について述べる
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
プラグインコンテナ
通信系
スクリプトエンジン
レンダラ
ブラウザ機能
わんくま同盟 大阪勉強会 #63
三大機能と三つのツリー
• Geckoはブラウザの機能とし
てHTMLパーザ、JSエンジン、
CSSレンダラを持つ
• これらはそれぞれDOMツリー、
JSオブジェクトツリー、レン
ダリングツリーという密接に
関係した三つのツリー構造を
持つ
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
プラグインコンテナ
通信系
スクリプトエンジン
レンダラ
ブラウザ機能 HTMLパーザ
JSエンジン
CSSレンダラ
わんくま同盟 大阪勉強会 #63
三大機能と三つのツリー
• HTMLがパースされDOMツ
リーになると、DOMツリーと
対応したJSオブジェクトのツ
リー、DOMツリーにCSSやJS
による操作を適用して描画を
行うためのレンダリングツ
リーも連動して生成される
<html>
<head>
<title> <meta> …
<body>
<header>
…
<section>
… …
HTMLElement
HTMLHeadEle
ment
HTMLTitleEle
ment
HTMLMetaEle
ment
…
HTMLBodyEle
ment
Element
…
Element
… …
<html>
<body>
<head>
…
<section>
… …
わんくま同盟 大阪勉強会 #63
HTMLパーザとDOMツリー
• パーザはHTMLを解釈すると
DOMと呼ばれるツリー上の
データ構造を構築する
• DOMツリーはHTMLとして記
述された木構造とその構造上
のオブジェクトに対する操作、
状態を表したオブジェクト
– JavaScriptから操作することに
よってHTMLの状態や見た目の状
態を変更することができる
HTMLElement
HTMLHeadEle
ment
HTMLTitleEle
ment
HTMLMetaEle
ment
…
HTMLBodyEle
ment
Element
…
Element
… …
<html>
<body>
<head>
…
<section>
… …
<html>
<head>
<title> <meta> …
<body>
<header>
…
<section>
… …
わんくま同盟 大阪勉強会 #63
JSエンジンとJSオブジェクトツリー
• JSエンジンはHTMLから参照さ
れているJavaScriptのソース
コードやscriptタグ内に記述さ
れたJavaScriptを読み込んで実
行する
<html>
<head>
<title> <meta> …
<body>
<header>
…
<section>
… …
<html>
<body>
<head>
…
<section>
… …
HTMLElement
HTMLHeadEle
ment
HTMLTitleEle
ment
HTMLMetaEle
ment
…
HTMLBodyEle
ment
Element
…
Element
… …
わんくま同盟 大阪勉強会 #63
<html>
<body>
<head>
…
<section>
… …
JSエンジンとJSオブジェクトツリー
• この時DOMツリーとして構築
された木構造と関連して
JavaScriptから操作可能なオブ
ジェクトを構築していく
– その結果JavaScriptからDOMツ
リーを操作したり、何らかの要
因で変更されたDOMツリーに対
応してJavaScriptから参照できる
オブジェクトの状態も変化する
関係が作られる
<html>
<head>
<title> <meta> …
<body>
<header>
…
<section>
… …
HTMLElement
HTMLHeadEle
ment
HTMLTitleEle
ment
HTMLMetaEle
ment
…
HTMLBodyEle
ment
Element
…
Element
… …
わんくま同盟 大阪勉強会 #63
レンダラとレンダリングツリー
• レンダラはCSS、style属性、
JavaScriptによる操作などの結
果DOM要素がどのように描画
されるかを計算する
<html>
<head>
<title> <meta> …
<body>
<header>
…
<section>
… …
HTMLElement
HTMLHeadEle
ment
HTMLTitleEle
ment
HTMLMetaEle
ment
…
HTMLBodyEle
ment
Element
…
Element
… …
<html>
<body>
<head>
…
<section>
… …
わんくま同盟 大阪勉強会 #63
レンダラとレンダリングツリー
• レンダラやスタイルシステム
はDOMツリーをもとにスタイ
ルやJavaScriptによる操作を適
用した描画計算に基づくツ
リー構造を作る
– これをレンダリングツリーと呼
ぶ
• レンダラにはパイプライン構
造があり、各要素の矩形フ
レーム生成、レンダリングツ
リーの構築、レイアウト、リ
フロー、描画と進む
HTMLElement
HTMLHeadEle
ment
HTMLTitleEle
ment
HTMLMetaEle
ment
…
HTMLBodyEle
ment
Element
…
Element
… …
<html>
<body>
<head>
…
<section>
… …
<html>
<head>
<title> <meta> …
<body>
<header>
…
<section>
… …
わんくま同盟 大阪勉強会 #63
GONKについて少し詳しく
わんくま同盟 大阪勉強会 #63
Gonk概要
• GonkはOSや低レベル機能を含
む層
• 基礎的なOSとしてはAOSP
Linuxを使っている
• WindowsやLinux、Mac OS Xの
ようなGeckoの移植対象の一
つとして開発されている
Gonk
Daemon
Interfaces
HAL
Drivers
Linux
わんくま同盟 大阪勉強会 #63
Gonk概要
• 現状Geckoの移植対象OSの中
では唯一特権的機能にアクセ
スできるため、他のOSでは実
現不可能なAPIなども実装され
ている
• ここからHAL層とAOSP Linux
について少し述べる
Gonk
Daemon
Interfaces
Drivers
Linux
HAL
わんくま同盟 大阪勉強会 #63
HAL
• その名の通りハードウェアを
抽象化する層
– GeckoのHALラッパー層で上位に
提供するAPI仕様を満たす制御を
行い、GonkのHAL層はGeckoの
HALラッパーが要求するイン
ターフェイスを提供する
– 多くの場合GeckoのHALラッパー
層で非同期処理の制御を行い、
GonkのHAL層では同期的なAPIを
提供している
Gonk
Daemon
Interfaces
Drivers
Linux
HAL
わんくま同盟 大阪勉強会 #63
AOSP Linux
• Android Open Source Projectに
よってホストされているLinux
• GonkはAOSP Linuxから不要な
モジュール (SurfaceFlingerな
ど) を取り除きGeckoの要求す
るHALインターフェイスを実
装したOSである
Gonk
Daemon
Interfaces
HAL
Drivers
Linux
わんくま同盟 大阪勉強会 #63
AOSP Linux
• ブートの仕組みはAndroidと同
様にinitがinit.rcを読み込んで記
述にしたがって順次プロセス
を起動する
– Firefox OSの場合はinit.b2g.rcと
いう固有の設定ファイルがinit.rc
から参照されている
– init.b2g.rcの記述にしたがって
Geckoを起動しshell.jsという起動
用のスクリプトをGeckoに処理
させることでFirefox OSを起動す
る
Gonk
Daemon
Interfaces
HAL
Drivers
Linux
わんくま同盟 大阪勉強会 #63
全体まとめ
• Firefox OSはGaia、Gecko、Gonkの三層からなる
• Gaiaはユーザの目に触れる部分、ユーザが直接触れる体験
を提供する
• Geckoはデスクトップブラウザにも使われてるエンジン。
ブラウザに必要な機能を一通り備えた (=OSの要件を備え
た) エンジンをミドルウェアとして利用している
• GonkはFirefox OSのために作られたOSコア部分。Geckoの
移植対象OSでもある
わんくま同盟 大阪勉強会 #63
さいごに
• ものすごく駆け足でFirefox OSの全体を一攫いしました
• 各部分だけで何セッションかできる骨太機能の集まりなの
でどこを見ても楽しいですよ!
• Firefox OSコミュニティはまだ若い世界です
• あなたも一緒に盛り上げてみませんか?

Weitere ähnliche Inhalte

Ähnlich wie Firefox OSアーキテクチャクイックツアー

公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)
公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)
公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)Garyuten
 
自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のり自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のりStudy Group by SciencePark Corp.
 
できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16Masami Yabushita
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト健一 辰濱
 
できる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:WebからはじまるアプリMasami Yabushita
 
Application insights で行ってみよう
Application insights で行ってみようApplication insights で行ってみよう
Application insights で行ってみようKazushi Kamegawa
 
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介Ryo Iinuma
 
a-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazakia-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in OkazakiEtsushi Ishii
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04敦志 金谷
 
2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as codeYukihiko SAWANOBORI
 
Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介健一 辰濱
 
20150118 firefoxos-handson-helloworld
20150118 firefoxos-handson-helloworld20150118 firefoxos-handson-helloworld
20150118 firefoxos-handson-helloworldNoritada Shimizu
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門tsukasamannen
 
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門ryoheiseki1
 
さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]Yukihiko SAWANOBORI
 
20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみようTakuya Kawabe
 
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...SYUE-SIANG SU
 
Firefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジーFirefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジーdynamis
 
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すこれ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すStudy Group by SciencePark Corp.
 

Ähnlich wie Firefox OSアーキテクチャクイックツアー (20)

公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)
公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)
公開から4年間使ってきたbaserCMSをそろそろ本気でdisってみる(OSC2014福岡)
 
自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のり自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のり
 
Firefox OS アプリ開発
Firefox OS アプリ開発Firefox OS アプリ開発
Firefox OS アプリ開発
 
できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
 
できる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリ
 
Application insights で行ってみよう
Application insights で行ってみようApplication insights で行ってみよう
Application insights で行ってみよう
 
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
 
a-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazakia-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazaki
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04
 
2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code
 
Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介
 
20150118 firefoxos-handson-helloworld
20150118 firefoxos-handson-helloworld20150118 firefoxos-handson-helloworld
20150118 firefoxos-handson-helloworld
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
 
さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]
 
20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう
 
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
 
Firefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジーFirefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジー
 
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すこれ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
 

Mehr von Masami Yabushita

Idlリーディング xpidl編
Idlリーディング xpidl編Idlリーディング xpidl編
Idlリーディング xpidl編Masami Yabushita
 
Idlリーディング webidl編
Idlリーディング webidl編Idlリーディング webidl編
Idlリーディング webidl編Masami Yabushita
 
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみたFxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみたMasami Yabushita
 
FxOSコードリーディングミートアップ#16 Contacts API読んでみた
FxOSコードリーディングミートアップ#16 Contacts API読んでみたFxOSコードリーディングミートアップ#16 Contacts API読んでみた
FxOSコードリーディングミートアップ#16 Contacts API読んでみたMasami Yabushita
 
Meetup11 contacts api読んでみた
Meetup11 contacts api読んでみたMeetup11 contacts api読んでみた
Meetup11 contacts api読んでみたMasami Yabushita
 
20141018 osc tokyo_fall_firefox osってなぁに?
20141018 osc tokyo_fall_firefox osってなぁに?20141018 osc tokyo_fall_firefox osってなぁに?
20141018 osc tokyo_fall_firefox osってなぁに?Masami Yabushita
 
マンガで覚える視線誘導 おかわり
マンガで覚える視線誘導 おかわりマンガで覚える視線誘導 おかわり
マンガで覚える視線誘導 おかわりMasami Yabushita
 
ちょっとapiかいてみた
ちょっとapiかいてみたちょっとapiかいてみた
ちょっとapiかいてみたMasami Yabushita
 
Fx OS n2_aoitan_firefox osことはじめ
Fx OS n2_aoitan_firefox osことはじめFx OS n2_aoitan_firefox osことはじめ
Fx OS n2_aoitan_firefox osことはじめMasami Yabushita
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版Masami Yabushita
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかMasami Yabushita
 
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだったバッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだったMasami Yabushita
 
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話Masami Yabushita
 
N29 aoitan firefox osことはじめ
N29 aoitan firefox osことはじめN29 aoitan firefox osことはじめ
N29 aoitan firefox osことはじめMasami Yabushita
 
Fx osコードリーディングの紹介
Fx osコードリーディングの紹介Fx osコードリーディングの紹介
Fx osコードリーディングの紹介Masami Yabushita
 
ちょっとapiかいてみた
ちょっとapiかいてみたちょっとapiかいてみた
ちょっとapiかいてみたMasami Yabushita
 

Mehr von Masami Yabushita (16)

Idlリーディング xpidl編
Idlリーディング xpidl編Idlリーディング xpidl編
Idlリーディング xpidl編
 
Idlリーディング webidl編
Idlリーディング webidl編Idlリーディング webidl編
Idlリーディング webidl編
 
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみたFxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
 
FxOSコードリーディングミートアップ#16 Contacts API読んでみた
FxOSコードリーディングミートアップ#16 Contacts API読んでみたFxOSコードリーディングミートアップ#16 Contacts API読んでみた
FxOSコードリーディングミートアップ#16 Contacts API読んでみた
 
Meetup11 contacts api読んでみた
Meetup11 contacts api読んでみたMeetup11 contacts api読んでみた
Meetup11 contacts api読んでみた
 
20141018 osc tokyo_fall_firefox osってなぁに?
20141018 osc tokyo_fall_firefox osってなぁに?20141018 osc tokyo_fall_firefox osってなぁに?
20141018 osc tokyo_fall_firefox osってなぁに?
 
マンガで覚える視線誘導 おかわり
マンガで覚える視線誘導 おかわりマンガで覚える視線誘導 おかわり
マンガで覚える視線誘導 おかわり
 
ちょっとapiかいてみた
ちょっとapiかいてみたちょっとapiかいてみた
ちょっとapiかいてみた
 
Fx OS n2_aoitan_firefox osことはじめ
Fx OS n2_aoitan_firefox osことはじめFx OS n2_aoitan_firefox osことはじめ
Fx OS n2_aoitan_firefox osことはじめ
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
 
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだったバッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった
バッテリー監視の為にバックグラウンドタスクについて調べたらなくなってたから作ってみた話のはずだった
 
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
 
N29 aoitan firefox osことはじめ
N29 aoitan firefox osことはじめN29 aoitan firefox osことはじめ
N29 aoitan firefox osことはじめ
 
Fx osコードリーディングの紹介
Fx osコードリーディングの紹介Fx osコードリーディングの紹介
Fx osコードリーディングの紹介
 
ちょっとapiかいてみた
ちょっとapiかいてみたちょっとapiかいてみた
ちょっとapiかいてみた
 

Firefox OSアーキテクチャクイックツアー

  • 1. わんくま同盟 大阪勉強会 #63 Firefox OSアーキテクチャクイックツアー 株式会社グローバルサイバーグループ マネージャ 藪下 正美
  • 3. わんくま同盟 大阪勉強会 #63 自己紹介 • 藪下正美 – わんくまでは普段あおいたんとか名乗ってる人 – 大阪は#45以来ですおひさしぶりです • 株式会社グローバルサイバーグループから来ました • Firefox OSコミュニティから来ました • Codezineで記事書きました – Firefox OSアプリ開発が楽しくなるハードウェアAPIの概要と、 センサーAPIや音声APIを使った楽器アプリの作例 – http://codezine.jp/article/detail/8540
  • 4. わんくま同盟 大阪勉強会 #63 会社紹介 • 株式会社グローバルサイバーグループ – 関西出身の組み込み系の会社 • 携帯電話とか業務用コピー機とかデジカメとかの中の人やってます • 最近はAndroidのすごい下の方か各モバイルOS向けアプリを主にやって ます – Firefox OSの勉強会を支援する事業やってるので興味があればご 相談ください • http://www.gcg.bz/labo_blog/?page_id=943 – 各種モバイルOSの質問も受け付けてます。ブログで回答します • http://www.gcg.bz/labo_blog/?page_id=945
  • 5. わんくま同盟 大阪勉強会 #63 コミュニティ紹介 • Firefox OSコミュニティで各種イベントのスタッフとかス ピーカとかやってます – FxOSコードリーディングというコミュニティのいいだしっぺ • http://reading.fxos.org/ • 大体毎月Mozilla Japanのオフィスでソースコードを読む会やってます • 年三回ぐらい成果発表会的なセミナーやってます • ほかにもHTML5j Webプラットフォーム部とかWoT的なソ フト/ハードを味見するコミュニティもやってます
  • 6. わんくま同盟 大阪勉強会 #63 今日のアジェンダ1 • Firefox OSの全体像 – Gaia – Gecko – Gonk
  • 7. わんくま同盟 大阪勉強会 #63 今日のアジェンダ2 • Gaiaについて少し詳しく – Gaiaの全体像 – アプリの権限 – ChromeプロセスとContentプロセス – Chromeプロセスで動くアプリ – Contentプロセスで動くアプリ
  • 8. わんくま同盟 大阪勉強会 #63 今日のアジェンダ3 • Geckoについて少し詳しく – Gecko概要 – 三大機能と三つのツリー
  • 9. わんくま同盟 大阪勉強会 #63 今日のアジェンダ4 • Gonkについて少し詳しく – HAL – AOSP Linux • 全体まとめ • さいごに
  • 10. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される
  • 11. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される – Gaia • UIやプリインアプリなど ユーザに見える基本機能を 提供する • すべてHTML5で書かれている
  • 12. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される – Gecko • Gaiaやユーザアプリが 使用するAPIやHTML5の ランタイムを提供する • C++、JS、IDLなど多くの 言語で実現されている
  • 13. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される – Gonk • OS、HALなどを含む層 • C/C++で書かれている
  • 14. わんくま同盟 大阪勉強会 #63 Gaia • UIやプリインアプリなどでデ バイスの基本的な操作を提供 する • すべてHTML5で書かれている • Geckoに依存するがプラット フォームに依存しない – B2Gデバイス、デスクトップ、 シミュレータなどGeckoが動作 する環境であれば広く動作する • Gaiaはプロファイルに応じて 提供する機能やUIの変更が多 い
  • 15. わんくま同盟 大阪勉強会 #63 Gecko • Gaiaやユーザアプリが使用す るAPIやHTML5のランタイムを 提供する • C++、JS、IDLなど多くの言語 で実現されている • FirefoxやThunderbirdなどの Mozilla製品で共通のランタイ ム
  • 16. わんくま同盟 大阪勉強会 #63 Gonk • OS、HALなどを含む層 • WindowsやMac OS XなどのOS と同等にGeckoの移植対象プ ラットフォームの一つとして 定義されている • Gonkは現状唯一B2Gの要求を 満たすプラットフォーム – 他のOSでは必要な権限が得られ ない • Gonkで使用されるOSはAOSP Linux
  • 18. わんくま同盟 大阪勉強会 #63 Gaiaの全体像 • Gaiaのアプリ (以下内部アプ リ) はUIや基本機能を提供する • 内部アプリは大きく分けて Chromeプロセスで動くアプリ とContentプロセスで動くアプ リに分けられる
  • 19. わんくま同盟 大阪勉強会 #63 アプリの権限 • アプリには利用できるAPIの範 囲が異なる権限タイプが存在 する – web権限 (ホスト型アプリ/単純 なパッケージ型アプリ) – trusted権限 (信頼されたホスト型 アプリ) – privileged権限 (特権型アプリ) – certified権限 (内部アプリ) 権限 概要 Web権限 基本的な権限 ハードウェアにアクセスするAPIやプライ バシーにかかわるAPIが使えない Trusted権限 V2.1から追加された権限 一部のユーザに許可を求めるタイプの APIを使用できる Privileged権限 事業者に関わる課金、重大なプライバ シー/セキュリティインシデントが予想さ れるものを除いたAPIが使用できる権限 Certified権限 キャリアやメーカがプリインアプリでのみ 使用可能な権限 すべてのAPIを使用できる
  • 20. わんくま同盟 大阪勉強会 #63 ChromeプロセスとContentプロセス • 内部アプリは特権的な機能を 利用するため認証 (certified) 権 限を持つ • Geckoの制約上特権的APIは特 権的なプロセスでないと実行で きない • この特権的なプロセスを Chromeプロセスと呼ぶ Gaia Gecko Chrome プロセス Content プロセス APIs (Interface) APIs (Implement) API呼び出し
  • 21. わんくま同盟 大阪勉強会 #63 ChromeプロセスとContentプロセス • 内部アプリの大部分を含む一 般的なアプリでは特権的でな いContentプロセスで動作する • Contentプロセスで動作するア プリでもアプリマニフェスト で宣言し、ユーザに許可され た機能についてはAPIの使用を 許可される Gaia Gecko Chrome プロセス Content プロセス APIs (Interface) APIs (Implement)
  • 22. わんくま同盟 大阪勉強会 #63 アプリのヒエラルキー • Firefox OSのアプリは少数の Chromeプロセスアプリと多数 のContentプロセスアプリから なる • Firefox OSで実行されるアプリ はSystemアプリの子プロセス として実行される • 子プロセスはContentプロセス として起動される Gaia Gecko Chrome プロセス Content プロセス APIs (Interface) APIs (Implement)
  • 23. わんくま同盟 大阪勉強会 #63 Chromeプロセスで動くアプリ • Chromeプロセスで動くアプリ としては以下のものが挙げら れる – Systemアプリ – Settingsアプリ – ブラウザアプリ – キーボードアプリ – 検索アプリ • これらのアプリにはSystemア プリの一部として動作するも のもある System Settings ブラウザ キーボード 検索
  • 24. わんくま同盟 大阪勉強会 #63 Systemアプリ • アプリの管理とか共通して使 われるUIを管理するアプリ • Firefox OSで見た目のあるアプ リすべての親 – 見た目がないアプリもいくつか ぶら下がっている • アプリ起動時のアニメーショ ンやアプリの切り替えなども Systemアプリの管轄 Settings ブラウザ キーボード 検索 System
  • 25. わんくま同盟 大阪勉強会 #63 Settingsアプリ • 特定のアプリによらない設定 を行うアプリ • 端末設定を変更するのは特権 的機能なのでChromeプロセス で動作する • Systemアプリが提供している 機能の設定はSettingsアプリの 仕事となる ブラウザ キーボード 検索 System Settings
  • 26. わんくま同盟 大阪勉強会 #63 ブラウザアプリ • その名の通りブラウザアプリ • webブラウズだけでなくアプ リのインストール経路にもな るので特権的な位置づけにあ る Settings キーボード 検索 System ブラウザ
  • 27. わんくま同盟 大阪勉強会 #63 キーボードアプリ • ユーザが文字入力を行うため のアプリ • ここではキーボードそのもの ではなくキーボードが動作す るフレームワークになる部分 を指している • 実際操作される部分はユーザ が選択可能であり作成可能で ある Settings ブラウザ 検索 System キーボード
  • 28. わんくま同盟 大阪勉強会 #63 検索 • ホーム画面上部にある検索 ボックス • v2.1からはアプリ起動中もス テータスバーに常駐するよう になった • 検索ボックスもアプリのイン ストール経路になるので特権 的な位置づけになる Settings ブラウザ キーボード System 検索
  • 29. わんくま同盟 大阪勉強会 #63 Contentプロセスで動くアプリ • Contentプロセスで動くアプリ は多数あるが大別すると以下 の二つ – プリインアプリ (内部アプリ) – ユーザアプリ プリインアプリ ユーザアプリ
  • 30. わんくま同盟 大阪勉強会 #63 プリインアプリ • ダイアラやメッセージングな どの工場出荷状態でインス トール済みのアプリ • 一部の特権アプリを除いてほ ぼ認証権限を持つ • 一般の開発者によるアプリも 採用されることがある ユーザアプリ プリインアプリ
  • 31. わんくま同盟 大阪勉強会 #63 ユーザアプリ • ユーザアプリは出荷後にユー ザによってインストールされ るアプリ • 基本的には検索やマーケット プレイスを通して入手する プリインアプリ ユーザアプリ
  • 33. わんくま同盟 大阪勉強会 #63 Geckoの全体像 • ざっくり分けてブラウザ機能、 通信系、レンダラ、描画系、 スクリプトエンジン、プラグ インコンテナ、プラット フォーム固有層、プラット フォーム抽象化層で構成され る • 全部は話せないのでざっくり 分けた機能について一言ずつ と代表的な機能の中でも密接 な関係を持っている部分につ いて述べる Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ スクリプトエンジン レンダラ 通信系 ブラウザ機能
  • 34. わんくま同盟 大阪勉強会 #63 Gecko概要 • ブラウザ機能 – 履歴やブラウザコンテキストの 管理、トップレベルオブジェク トの提供などを行う • 通信系 – 主にプロトコルに応じた処理へ ディスパッチするプロトコルハ ンドラ、サーバとの通信を行う チャネル、URI文字列の構文 チェックや正規化を行うURIオブ ジェクトを中心概念として構成 される Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ スクリプトエンジン レンダラ 通信系 ブラウザ機能
  • 35. わんくま同盟 大阪勉強会 #63 Gecko概要 • レンダラ – CSSやstyle属性、JSからの操作に よって決定されるDOMツリーの 表示表現を作り描画系に指示を 与える • 描画系 – プラットフォームに依存しない 抽象化された描画フレームワー クMoz2D、旧フレームワークの Thebes、レイヤシステム、APZ (Asynchronous Pan and Zoom) な どからなる Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ スクリプトエンジン 通信系 ブラウザ機能 レンダラ
  • 36. わんくま同盟 大阪勉強会 #63 Gecko概要 • スクリプトエンジン – JavaScriptエンジン、XPConnect (XPCOM)、WebIDLバインディン グなど数種類の言語処理系を持 つ • プラグインコンテナ – Flashプレイヤーなどのサード パーティプラグインやDRMシス テム、ビデオハードウェア、そ の他埋め込みオブジェクトなど をブラウザ本体のプロセスから 切り離し影響を最小化するため のコンテナ機能を提供する Gecko プラットフォーム固有層 プラットフォーム抽象化層 レンダラ 通信系 ブラウザ機能 プラグインコンテナ スクリプトエンジン
  • 37. わんくま同盟 大阪勉強会 #63 Gecko概要 • プラットフォーム抽象化層 – NSPR、XPCOMなどのクロスプ ラットフォーム用抽象化ライブ ラリや文字列、数などのプラッ トフォームによらず表現を一定 にしたいプリミティブなデータ 表現を提供する • プラットフォーム固有層 – ウィジェット、ファイル、ソ ケット、ヒューマンインター フェイスなど低レイヤ機能 Gecko プラグインコンテナ スクリプトエンジン レンダラ 通信系 ブラウザ機能 プラットフォーム固有層 プラットフォーム抽象化層
  • 38. わんくま同盟 大阪勉強会 #63 三大機能と三つのツリー • ここからはブラウザ機能、レ ンダラ、描画系、スクリプト エンジンにまたがるGeckoの 主要機能について述べる Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ 通信系 スクリプトエンジン レンダラ ブラウザ機能
  • 39. わんくま同盟 大阪勉強会 #63 三大機能と三つのツリー • Geckoはブラウザの機能とし てHTMLパーザ、JSエンジン、 CSSレンダラを持つ • これらはそれぞれDOMツリー、 JSオブジェクトツリー、レン ダリングツリーという密接に 関係した三つのツリー構造を 持つ Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ 通信系 スクリプトエンジン レンダラ ブラウザ機能 HTMLパーザ JSエンジン CSSレンダラ
  • 40. わんくま同盟 大阪勉強会 #63 三大機能と三つのツリー • HTMLがパースされDOMツ リーになると、DOMツリーと 対応したJSオブジェクトのツ リー、DOMツリーにCSSやJS による操作を適用して描画を 行うためのレンダリングツ リーも連動して生成される <html> <head> <title> <meta> … <body> <header> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … …
  • 41. わんくま同盟 大阪勉強会 #63 HTMLパーザとDOMツリー • パーザはHTMLを解釈すると DOMと呼ばれるツリー上の データ構造を構築する • DOMツリーはHTMLとして記 述された木構造とその構造上 のオブジェクトに対する操作、 状態を表したオブジェクト – JavaScriptから操作することに よってHTMLの状態や見た目の状 態を変更することができる HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … … <html> <head> <title> <meta> … <body> <header> … <section> … …
  • 42. わんくま同盟 大阪勉強会 #63 JSエンジンとJSオブジェクトツリー • JSエンジンはHTMLから参照さ れているJavaScriptのソース コードやscriptタグ内に記述さ れたJavaScriptを読み込んで実 行する <html> <head> <title> <meta> … <body> <header> … <section> … … <html> <body> <head> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … …
  • 43. わんくま同盟 大阪勉強会 #63 <html> <body> <head> … <section> … … JSエンジンとJSオブジェクトツリー • この時DOMツリーとして構築 された木構造と関連して JavaScriptから操作可能なオブ ジェクトを構築していく – その結果JavaScriptからDOMツ リーを操作したり、何らかの要 因で変更されたDOMツリーに対 応してJavaScriptから参照できる オブジェクトの状態も変化する 関係が作られる <html> <head> <title> <meta> … <body> <header> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … …
  • 44. わんくま同盟 大阪勉強会 #63 レンダラとレンダリングツリー • レンダラはCSS、style属性、 JavaScriptによる操作などの結 果DOM要素がどのように描画 されるかを計算する <html> <head> <title> <meta> … <body> <header> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … …
  • 45. わんくま同盟 大阪勉強会 #63 レンダラとレンダリングツリー • レンダラやスタイルシステム はDOMツリーをもとにスタイ ルやJavaScriptによる操作を適 用した描画計算に基づくツ リー構造を作る – これをレンダリングツリーと呼 ぶ • レンダラにはパイプライン構 造があり、各要素の矩形フ レーム生成、レンダリングツ リーの構築、レイアウト、リ フロー、描画と進む HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … … <html> <head> <title> <meta> … <body> <header> … <section> … …
  • 47. わんくま同盟 大阪勉強会 #63 Gonk概要 • GonkはOSや低レベル機能を含 む層 • 基礎的なOSとしてはAOSP Linuxを使っている • WindowsやLinux、Mac OS Xの ようなGeckoの移植対象の一 つとして開発されている Gonk Daemon Interfaces HAL Drivers Linux
  • 48. わんくま同盟 大阪勉強会 #63 Gonk概要 • 現状Geckoの移植対象OSの中 では唯一特権的機能にアクセ スできるため、他のOSでは実 現不可能なAPIなども実装され ている • ここからHAL層とAOSP Linux について少し述べる Gonk Daemon Interfaces Drivers Linux HAL
  • 49. わんくま同盟 大阪勉強会 #63 HAL • その名の通りハードウェアを 抽象化する層 – GeckoのHALラッパー層で上位に 提供するAPI仕様を満たす制御を 行い、GonkのHAL層はGeckoの HALラッパーが要求するイン ターフェイスを提供する – 多くの場合GeckoのHALラッパー 層で非同期処理の制御を行い、 GonkのHAL層では同期的なAPIを 提供している Gonk Daemon Interfaces Drivers Linux HAL
  • 50. わんくま同盟 大阪勉強会 #63 AOSP Linux • Android Open Source Projectに よってホストされているLinux • GonkはAOSP Linuxから不要な モジュール (SurfaceFlingerな ど) を取り除きGeckoの要求す るHALインターフェイスを実 装したOSである Gonk Daemon Interfaces HAL Drivers Linux
  • 51. わんくま同盟 大阪勉強会 #63 AOSP Linux • ブートの仕組みはAndroidと同 様にinitがinit.rcを読み込んで記 述にしたがって順次プロセス を起動する – Firefox OSの場合はinit.b2g.rcと いう固有の設定ファイルがinit.rc から参照されている – init.b2g.rcの記述にしたがって Geckoを起動しshell.jsという起動 用のスクリプトをGeckoに処理 させることでFirefox OSを起動す る Gonk Daemon Interfaces HAL Drivers Linux
  • 52. わんくま同盟 大阪勉強会 #63 全体まとめ • Firefox OSはGaia、Gecko、Gonkの三層からなる • Gaiaはユーザの目に触れる部分、ユーザが直接触れる体験 を提供する • Geckoはデスクトップブラウザにも使われてるエンジン。 ブラウザに必要な機能を一通り備えた (=OSの要件を備え た) エンジンをミドルウェアとして利用している • GonkはFirefox OSのために作られたOSコア部分。Geckoの 移植対象OSでもある
  • 53. わんくま同盟 大阪勉強会 #63 さいごに • ものすごく駆け足でFirefox OSの全体を一攫いしました • 各部分だけで何セッションかできる骨太機能の集まりなの でどこを見ても楽しいですよ! • Firefox OSコミュニティはまだ若い世界です • あなたも一緒に盛り上げてみませんか?

Hinweis der Redaktion

  1. Gecko以下はプロファイルに対してほぼ差がない v2.2時点でphone、tablet、tvのプロファイルが存在する
  2. ブラウザアドオンなどの世界ではUIを制御したりブラウザ内部でのみ使用を許されているAPIを実行するためのプロセスをChromeプロセスと呼んでいる
  3. 権限については後述 この場合も実際にはChromeプロセスへの要求であり、APIの実行はChrome権限を持ったプロセス上で行われる この構造はContentプロセスのアプリがプラグインコンテナのような仕組みで動いていることに由来する
  4. マーケットにプリインアプリとして使用していいアプリとして申請するとメーカーへの採用がPRできる
  5. 通信系:Neckoとも呼ばれる
  6. 描画系:詳しい話をするとここだけでセッション一つできちゃう楽しい機能 描画系:非同期描画向けの部分にいろいろあって闇が深い
  7. プラットフォーム抽象化層:NSPRはプラットフォーム固有機能をラップし抽象化された低レベル操作を提供するライブラリ プラットフォーム抽象化層:XPCOMはMSCOMのようなオブジェクトモデルを提供する。オブジェクトの検索、ガーベージコレクトなどの機能を備える プラットフォーム固有層:ここで言うウィジェットはwindowオブジェクトの汎化概念
  8. HTMLはツリー構造のシリアライゼーションでありDOMはそのメモリ上の表現
  9. Firefox OSでは多くのハードウェアアクセスAPIを提供しているのでGeckoのHALラッパー、プラットフォーム固有のHALのお決まりの作りを知っておくのは悪いことではない