Chrome Extension meets HTML5

Chrome拡張とHTML5の蜜月

Shogo Ohta, 2010-3-17

自己紹介

名前:
太田 昌吾
ID:
os0x(blog, Twitter)
肩書?:
Chrome ExtensionsのAPI Expertで、Chromium-Extensions-Japanグループの管理人
お仕事:

今年に入ってからお休み中…
Chrome拡張について記事を書いたり、JavaScriptの記事を書いたりしています

2010/3/25にGoogle Chrome OS 最新技術と戦略を完全ガイド: 小池良次, 中島聡, 伊藤千光, 太田昌吾, まえだひさこ, 向井領治が発売されます!

得意分野:
ほぼJavaScript専門、なかでもクロスブラウザや高速化が得意です
簡単な経歴:
元々、OperaのUserJavaScriptやGreasemonkeyを良く書いていた(oAutoPagerizeとか)
ChromeでもUserScriptsが動くらしい→拡張もできる(ようになる)らしい→UserJavaScriptより色々できて楽しい!→拡張作ったり、記事を書いていたらgihyo.jpで連載をすることに→そのまま勢いでAPI Expertに

Google Chromeとは、Chrome拡張とは

Chromium
レンダリングエンジンにWebKitを、JavaScriptエンジンにV8を採用したオープンソースのウェブブラウザ
Google Chrome
ChromiumをGoogleがカスタムして公開しているブラウザ
Chrome拡張
Chrome/Chromium上で動く、ウェブブラウザに特定の機能を追加するアプリケーション

Chrome vs Chromium

Google ChromeChromium補足
ロゴ
開発者Googler誰でも(多くはGoogler)
障害報告あり(ONにした場合)なし
利用統計あり(ONにした場合)なし
HTML5のVideo、AudioH.264、AAC、MP3、Vorbis、Theora デフォルトではVorbisとTheoraのみFFmpegを使用しているので、自己責任においてこれを差し替えれば対応フォーマットを変えることができる
ページ翻訳機能ありなし※日本語圏での評判はいまひとつ
サンドボックス(セキュリティ機構)常にON場合によってはOFFになっていることも非公式なパッケージなどは要注意
品質保証事前にテストされてからリリースされるNightly Buildsのみ

Chromiumの特徴

オープンソースなので、すべてのソースが読める。カスタムしてビルドを作れる。

オープンソースコミュニティのパワーで、日々開発が進んでいる。また、Chromiumのカスタム版が数多く存在する。

今すぐ開発に参加できる chromium - Project Hosting on Google Codeへ!

Chromeの特徴

stable(安定版)、beta(テスト版)、dev(開発版)の3つのリリースがある

安定版は名前の通り、一般ユーザーが使用するリリース、(セキュリティフィックスを除いて)半年に1回程度のリリース

テスト版は、主に安定版のリリース前に、安定化のためにリリースされる、時期によってはまったくリリースされないが、1ヶ月に1回程度のリリース

開発版は、安定版のリリース後、次のバージョンに向けた新機能追加を主目的(そのため不安定になることも多々)にリリースされる、1週間に1回程度のリリース
※開発版もリリース前は安定する。修正が多く適用されている分だけテスト版より安定することも。

Chromeの構成

JavaScriptエンジンはV8というChromeのために開発したオープンソースのエンジンを搭載

レンダリングエンジンはWebKitのWebCoreを採用

WebCoreは、WebKitのレンダリング周りの実装(JavaScript部分はJavaScriptCore)

実は、V8とWebCoreを繋ぐ部分にバグが多い…(Safariでは正常なのに、Chromeだとなんかおかしくなるなぁという現象はここに起因することがほとんど)

最近はChromiumチームが積極的にWebKitにコミットするようになっていて、かなり改善しつつある

Chrome拡張とは

HTML/CSS/JavaScriptで作る、ブラウザをもっと便利にするモノ

とにかく作るのは簡単、でも制約は多い

Chrome拡張の例

実物を見てもらうのが一番

Google Mail Checker - Google Chrome 拡張機能ギャラリー

Chrome Stylist - Google Chrome 拡張機能ギャラリー

Hatena Bookmark GoogleChrome extension - Google Chrome 拡張機能ギャラリー

Chrome拡張でできること

APIはまだまだ少ないが、バックグラウンド処理、クロスドメイン通信、データの永続化をベースに、可能性は無限

Chrome拡張のセキュリティ

拡張コンテキスト、コンテントコンテキスト、ページコンテキストの3つのコンテキストが存在し、それぞれは完全に分かれているので、お互いが干渉してしまうことはない。さらに、拡張同士も独立したコンテキストで実行される。

拡張コンテキストはタブ操作やクロスドメイン通信などの特権を実行でき、コンテントコンテキストと通信したり、スクリプトを実行したりといったことができます。

コンテントコンテキスト(ContentScripts)は特権を持っていませんが、読み込んだページのDOMを操作することができ、拡張コンテキストと相互に通信できます。

ページコンテキストは通常のウェブページで実行されるコンテキストで、コンテントコンテキストとはDOM経由でしかやり取りできませんし、拡張コンテキストとは完全に分断されています

「悪意のあるページで拡張の特権を利用されてしまう」といったことが起こりにくい仕様になっているが、開発者から見ると面倒に感じる部分も…

manifest.json

拡張を定義するjsonファイル。名前、バージョンのほか、アイコンや拡張の持つ権限、ContentScriptsを実行するURLの定義など。

manifest.jsonで宣言していない機能は使用できない。

セキュリティを高めつつ、機械的にその拡張の権限を判断して、インストールするユーザーに警告を出すことができる。

Chrome拡張で使えるHTML5

ChromeのHTML5対応:関連API

canvas
対応済み
video, audio
対応済み(対応フォーマットは前述の通り)
Web Workers
対応済み
Web Storage
Chrome4ではlocalStorageのみ対応、Chrome5でsessionStorageも対応予定
コミュニケーションAPI
対応済み(ただし、Chrome4ではテキストのみの送受信)
Web Sockets
対応済み(ただし、WokerからのSocketsはChrome5で対応予定)
HTML Ruby
対応済み
Web Fonts
対応済み
Web SQL Database
対応済み(残念ながら標準化はストップしてしまいましたが…)
Desktop notifications
Chrome5で正式対応予定
HTML Forms
一部のみ対応、Chrome5ではAPIを実装、バリデーションやUIはChrome6以降
Application Cache
Chrome5で対応予定
Geolocation API
Chrome5で対応予定
Drag & drop
一部実装されているが、Chrome5で完全に対応する予定
File API
Chrome5で対応予定
Indexed Database API
Chrome6で対応予定、2010/3/11に動作したとの第一報あり

最新の情報は、Web Platform Status (The Chromium Projects)にまとまっています

ChromeのHTML5対応:HTMLパーサー

<p>第1パラグラフ
<section>セクション</section>
<p>第2パラグラフ

わざとらしい例ですが、パーサーがsectionに対応しているか否かで、下記のように解釈が変わります。

ChromeFirefox
section要素未対応
Chrome4

Firefox3.6
section要素対応
Chrome5

Firefox3.6(html5.enable)

Chrome拡張からHTML5へ

元々、Chrome拡張のAPIの仕様だったDesktop Notificationsが、2010年1月にW3C Editor's Draftとして(Web Notifications)公開されました。

このように、Chrome拡張は各種APIがHTML5をベースとしており、同時に、Chrome拡張からHTML5にフィードバックする、という相互作用の関係があります

HTML5を使いたい!という方は、是非Chrome拡張を!!

Chrome拡張の作り方

Twitterのハッシュタグなどの検索結果をNotifications APIで表示してみます

まず、manifest.jsonと各ファイルを用意します。

manifest.json
日本語はそのまま記述できるが、文字コードはUTF-8(BOMなし)にする必要がある。
background.html
Twitterのtokenの取得、ハッシュタグを検索して結果をNotifications APIで表示させるなど、メイン処理を行う
popup.html
任意のハッシュタグを入力するインターフェースとして使用
note.html
Notifications APIで表示される小窓用のHTML
Twitter-icon.png
Twitterのアイコン

以上のファイルを1つのフォルダに置き、拡張機能ページで「デベロッパーモード」選択し、パッケージ化されてない拡張の読み込みを行います

追記(2010/03/18 18:43):Chrome5以降の方は、TweetNotifyから実際にインストールできるようにしました(まだ作りこみが甘いので、長時間使用しているとメモリを消費するのでご注意ください…)

Appendix

Chrome Extensionsの参考URL

また、2010年4月9日(金)にChrome Extension TechTalkを行います。Chrome Extension TechTalkのご案内、ライトニングトーク発表者の募集もしていますので、是非ご応募ください!

この資料についてのお話

この資料自体がHTML5のサンプルとなるよう作ってあります。

HTML5 Validator
Validator.nu (X)HTML5 Validator
(X)HTML5 validation results for http://ss-o.net/chrome/extension/html5.html
HTML5 Outliner
HTML 5 Outliner
Outline
Outlineと目次
HTML5 のセクションアウトラインを生成してみよう! - IT戦記のOutliner.jsを使用して、右上の目次を自動生成しています。

Creative Commons License
This work is in the Public Domain.