ウェブ標準とChrome拡張入門

Chrome拡張の作り方とウェブ標準との付き合い方

Shogo Ohta, 2010-9-27

自己紹介

テーマ

Google Chromeとは、Chrome拡張とは

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

Chromeのリリース

stable(安定版)、beta(テスト版)、dev(開発版)の3つのチャンネルとCanary buildと呼ばれるリリースがある

Early Access Release Channels - The Chromium Projectsからインストール可能。

安定版は名前の通り、一般ユーザーが使用するリリース、(セキュリティフィックスを除いて)6週間おきのリリースを目標

テスト版は、主に安定版のリリース前に、安定化のためにリリースされる、時期によってはstableと同時に更新される

開発版は、安定版のリリース後、次のバージョンに向けた新機能追加を主目的(そのため不安定になることも多々)にリリースされる、1週間に1回程度のリリース

Canary版はChromeとは別のアプリケーションとしてインストールされる。Chromiumから自動的に作られているので、誰もテストしていない状態でアップデートされる。実験的なバージョンなのでデフォルトブラウザにすることはできない。

WebKit Chromium
Safari Google Chrome
WebCore
Web Inspector
JavaScriptCore
V8
オープンソース

Web Inspector

Chromeではデベロッパーツールという名前

いわゆるFirebug

特集:Google Chrome版Firebug:デベロッパーツール取扱説明書|gihyo.jp … 技術評論社

第一部完

Chrome拡張とは

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

とにかく作るのは簡単、でも実現が難しいことも多い

Chrome拡張の例

Web Developer - Google Chrome extension gallery

Chrome拡張でできること

APIはまだまだ少ないが、バックグラウンド処理、クロスドメイン通信、データの永続化だけで多くのことが可能

Chrome拡張のセキュリティ

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

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

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

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

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

manifest.json

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

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

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

Chrome拡張の作り方

Twitterのハッシュタグなどの検索結果をNotifications APIを使って通知する拡張

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

manifest.json

日本語はそのまま記述できるが、文字コードはUTF-8(BOMなし)にする必要がある。

background.html

Twitterで検索して結果をNotifications APIで表示させるなど、メイン処理を行う

popup.html

任意のハッシュタグを入力するインターフェースとして使用

note.html

Notifications APIで表示される小窓用のHTML

options.html

オプション設定用html

Twitter-icon.png

Twitterのアイコン

BrowserAction、PageActionにはアイコンが必須

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

TweetNotifyから実際にインストールできます

第二部完

HTML5関連APIと拡張

グラフィック系
  • canvas
  • SVG(インラインSVGはChrome7から)
  • video, audio
  • Web Fonts
データ系
  • Web Storage
  • Web SQL Database(標準化は停止)
  • Indexed Database API(実装途中)
通信系
  • postMessage
  • Web Sockets
  • XMLHttpRequest Level 2
その他
  • Web Workers
  • Geolocation API
  • Application Cache
  • Drag & drop
  • HTML Forms(UI系は実装途中)
  • File API
  • Desktop notifications(Chromeのみ)
  • Web Timing

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

Chrome拡張とHTML5

Chrome拡張はHTML/CSS/JavaScriptで作る

ベースとなるのはJavaScriptであり、多少の専用APIはあるものの主にJavaScriptで実現可能なことに制限される

JavaScript/ウェブ標準で実現可能なこと

JavaScriptで実現可能なことはどんどん増えている

大抵のことはブラウザで完結する→Chrome OS

2つのHTML5

本来ならHTML5は仕様であり、それ以上の意味を持たないが、「HTML5」という言葉は場合によってより大きい意味で使われている

いわゆるバズワードとしてのHTML5

バズワードとしてのHTML5

バズワードとして使われることは決して悪いことではない。むしろ、HTML5が成功するかどうかはそういった幅広く普及するかどうかに掛かっているはず

まとめ

Appendix

Chrome Extensionsの参考URL