先取り! Google Chrome Extensions

第1回Google Chrome Extensionsとは

この記事で取り上げているAPIは現在と使い方が異なっていたり、使用できなくなったものを含んでいます。

特にToolstrips APIは最新のChromeでは使用できなくなっています。詳しくは続・先取り! Google Chrome Extensionsをご覧ください。

はじめまして。株式会社ALBERTの太田と申します。Google Chromeのベータ版公開から早1年が経ち、開発版には待望の Extensions が実装されています。今回から4回にわたって、この Extensions の導入や開発手順について、解説させていただきます。

Google Chromeの開発版とExtensions

Google Chrome には3つのバージョンがあります。一般ユーザー向けの正式リリースであるstable版、テスター向けのbeta版、開発者向けのdev版の3つです。

さらに、ChromiumというChromeのベースになっているオプーンソースのWebブラウザがあります。誤解されがちですが、Chromiumの開発元はChromium Authorsとなっており、⁠形式上)Googleの名前はありません。

stable版は2008年12月12日に正式リリース(version1⁠⁠、2009年5月21日にGoogle Chrome 2としてリリースと、今のところ半年程度の頻度でアップグレードされています(セキュリティフィックスは随時行われています⁠⁠。

これに対して、beta版は月に1回、dev版は週に1回程度の頻度でアップデートされます。beta版は正式版の公開に向けたテスト用のリリースで、次期stable版の候補となります。dev版は新機能の開発がメインになっていますので、新機能が搭載されている代わりに不具合が出る可能性が高くなります。これらのバージョンはEarly Access Release Channels から それぞれのバージョンのインストーラーを使用するか、Channel Changerで使用するチャンネルを切り替えることで利用できます。

図1 Google Chrome Channel Changer
図1 Chrome Channel Changer

Channel Changerのインターフェースは非常にシンプルで、3つのラジオボタンから1つを選んでUpdateボタンを押すだけです。あとはChromeを起動し、⁠Google Chromeについて」を表示し、必要に応じてアップデートを行えば、そのチャンネルにおける最新版のChromeに更新されます。

2009年8月末時点で、このbeta版とdev版では Extensions が搭載されており、実際にその機能を試すことが可能となっています。

【2009/9/17追記】2009年9月16日にstable版のChrome 3(3.0.195.21)がリリースされましたが、このバージョンではExtensionsを有効にすることができないように修正されました。このためバージョン3系統ではbeta版を含めてExtensionsを試すことはでき なくなりました。

Extensions のインストール

パッケージ化されたExtensionsを利用するには前述のbeta版かdev版をインストールした上で、起動オプションで --enable-extensions をつけてChromeを起動する必要があります(dev版では、このオプションは不要になる予定です。代わりにdisable-extensionsオプションというextensionsを無効にするオプションが追加されます⁠⁠。

Windows XP
"C:\Documents and Settings\[username]\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" --enable-extensions
Windows Vista
"C:\Users\[username]\AppData\Local\Google\Chrome\Application\chrome.exe" --enable-extensions

Windowsで起動オプションを指定するには、コマンドプロンプトからアプリケーションを起動するか、ショートカットに起動オプションを記述しておくなどの方法があります。ほかのアプリなどから関連付けで起動した場合などは起動オプションを指定できない点に注意が必要です。

このほかにも、 Chrome は開発中の機能などを起動オプションで指定する方法を取っています。具体的には、 User Scripts を有効にする --enable-user-scripts や、デバッグログを出力する --enable-logging などがあります。

なお、いずれもテスター、開発者向けの機能のため、これらの機能についてサポートはありません。バグを発見した場合はフィードバックすることが望まれます。

Extensions の構成

Extensionsを構成するのは、一般的なウェブサイトのようにJavaScript、CSS、HTML(と画像ファイルなど)です。これらに加えて、manifest.json という名前のJSONファイルで、その Extension の仕様を定義します。

これらのファイルを、Chrome本体の機能を使ってzip形式でパッケージしたファイル(拡張子は crx)がExtensionsの本体になります(パッケージング方法は次回に解説します⁠⁠。

なお、NPAPIプラグイン(FlashPlayer などで利用されているNetscape由来のプラグインインターフェース)を利用することも可能ですが、本稿では取り上げません。

できること、できないこと

続いて、Extensionsで出来ること、出来ないことを見ていきたいと思います。

Extensions のプログラムは JavaScript で書くことになるので、必然的にJavaScriptで出来ないこと、苦手なことはExtensionsの弱点にもなりえます。HTML5、ECMAScript5のサポートが進む現在では JavaScript だけでも出来ることは増えていますが、例えばバイナリファイルの扱いなどは難があります。

FirefoxのAdd-on、Greasemonkeyとの違い

ここで多くの方にとって馴染みのあるFirefoxのAdd-on、Greasemonkeyと機能比較をしてみます。

Chrome ExtensionsFirefox Add-onFirefox Greasemonkey
クロスドメイン通信可能可能可能
ローカルファイルの読み書き現在は不可(APIが用意される予定)可能不可
データベース、Storagedev版(Chrome 4)ではWebDatabase、WebStorageが使用可能SQLiteを使用可能DOM Storage(WebStorage)と独自Storage(GM_getValue, GM_setValue)を使用可能
バックグラウンドタスク可能可能不可
ブックマークへのアクセスAPIを通して限定的に可能可能不可
タブ、ウィンドウ操作APIを通して限定的に可能可能JavaScriptで可能な範囲のみ
ネイティブコンテキストメニューの操作不可(APIが用意される可能性はあります)可能不可
メニューコマンド可能
Page Action
可能可能
GM_registerMenuCommand
自動更新可能(Chrome4 から)可能不可(ただし、wescriptなどの拡張で更新をサポートすることは出来ます)

FirefoxのAdd-onは大抵のことができてしまう拡張性の高さが魅力ですが、その自由さと比べてしまうとChromeの Extensions はやや拡張性に欠ける面があります。

Chromeでは本体側で様々なAPIを用意し、APIを通して様々な機能を実現します。安全性、保守性に優れる一方で、APIで用意されていないことは不可能ということになってしまいます。

ただし、Extensions の仕様は策定途中で、APIのアイデアは積極的に募集されています。Chromium Extensionsグループなどで要望を出してみれば、採用されるかもしれません。また、現在提案中のAPIはAPI Wish Listにまとめられています。

Extensions の得手不得手

Greasemonkey用スクリプトとして公開されているものを、ChromeのExtensionsで実現することは多くの場合で可能です。しかも、CSSやHTMLをより自由に扱えますので、多くの場合でGreasemonkeyよりも手軽に実装できると思われます。

また、バックグラウンドでタスクを実行することや、データベースの利用(Chrome 4以降)ができるので、Twitterクライアントのような、高機能なクライアントアプリケーションを実現できます。

対して、ブラウザの挙動を変えるようなAdd-onをChromeで実現するのは難しい面があります。例えば、タブを操作するAPIは用意されているので、タブの移動や切り替えなどは実現できますが、タブの表示方法を大きく変えるようなこと(TreeStyleTab のようなAdd-on)をChromeで実現することはできません。

また、マウスジェスチャーやショットカットキーを実現するExtensionsは現状でも実現可能ですが、ネイティブに割り当てられたキーを再割り当てするようなことはできません。この点は、やはりAPIが用意される予定となっていますが、詳細は未定です。

Chrome 3でサポートされる機能、Chrome 4でサポートされる機能

2009年8月末現在、stable版は2系、beta版は3系、dev版は4系となっています。近いうちにstableが3系統になる見込みで、Chrome 3の目玉機能は「テーマ」です。よって、4系統で実装されている(される予定の)機能は3系のstableには載らないということになります。

具体的には、WebDatabase、WebStorageのほか、ブックマークの同期機能などが該当しています。そのほかにも、ExtensionsのAutoUpdateなども4系から搭載される見込みです。

Extensions自体のリリース時期は明らかにされていませんが、起動オプションのenable-extensionをオプションのUIに組み込む案(つまり、Extensionsを動かす際に起動オプションが不要になる)がバージョン5の課題として挙がっていますので、残念ながら正式リリースまではまだ時間がかかるかもしれません。

【2009/9/17追記】Google Chrome ReleasesのAnthony氏は、⁠ExtensionsはChrome 4でのリリースを目標としている』とコメントされています。

まとめ

今回はChrome Extensionsの導入から概要を説明しました。次回からはExtensionsの仕様とサンプルを解説していきます。

おすすめ記事

記事・ニュース一覧