先取り! Google Chrome Extensions

第4回 Chrome Extensionsのこれから

この記事を読むのに必要な時間:およそ 7 分

開発途中のExtensions API

ここまでは,⁠2009年8月末時点で利用可能だった)比較的安定した機能を中心に説明してきました。ここからは2009年9月に実装されたばかりで不安定であったり,実装途中の最新APIについて見ていきます。以下の情報は2009年9月中旬時点での情報ですので,実装状況などは参考程度に見てください。

AutoUpdate

Extensionを自動でアップデートする仕組みが4.0.207.0から安定して動作するようになりました。さらに,4.0.211.4からは手動でアップデート行うこともできるようになっています。AutoUpdateを行うためには,manifest.jsonにアップデート情報を定義したXMLのURLを指定し,そのXMLでバージョンとcrxファイルの場所を指定します。

まず,manifest.jsonにupdate_urlを記述をします。

update_urlの定義

  "update_url": "http://ss-o.net/chrome_extension/sbm_counter/updates.xml",

次に,updates.xmlの中身を記述します。下記の通り,ExtensionのIDとcrxファイルの場所,バージョンを指定しています。

updates.xmlの記述

<?xml version="1.0" encoding="UTF-8"?>
<gupdate xmlns="http://www.google.com/update2/response" protocol="2.0">
  <app appid="pdoiecdfkkomendcbkpddhlklnompmbn">
    <updatecheck codebase="http://ss-o.net/chrome_extension/sbm_counter.crx" version="3.0.0" />
  </app>
</gupdate>

Extensionを更新した際は3.0.1のようにバージョンナンバーを上げ,⁠同じpemファイルで)パッケージングしたcrxファイルを所定の場所にアップし,updates.xmlを更新すればアップデートの対象となります。デフォルトでは1時間おきに更新チェックを行いますが,--extensions-update-frequencyオプションでチェック間隔を秒単位で指定できます。また, chrome://extensions/ ページの右上にあるUpdate extensions nowボタンで手動で更新チェックを行うことも可能です。

なお,SBMカウンタではパッケージ内にupdates.xmlが含まれていますが,本来は必要ありません。筆者のファイル管理の都合でそのようになっているだけですので,その点はご承知ください。

Icons

Extensionにはアイコンを指定でき,インストールの際などにそのアイコンを表示させることができます。128px, 64px, 32px, 16pxのアイコンを指定することができ,インストール時には128pxのアイコンが表示されます。2009年9月中旬時点では,アイコンが使用されるのはインストール時のみのようですが,今後 chrome://extensions/ ページなどでも使用されると思われます。

iconsの記述

  "icons": {
    "128": "sbm_icon_128.gif",
    "64": "sbm_icon_64.gif",
    "32": "sbm_icon_32.gif",
    "16": "sbm_icon.png"
  },

国際化(i18n)

i18n(Internationalization⁠⁠ APIはリファレンスにはchrome.i18n.getAcceptLanguagesしかありませんが,一部manifest.jsonの国際化にも対応しています。_localesというフォルダを作成し,その中にさらにja,en_USのように言語ごとのフォルダを作成し,その中にmessages.jsonという名前でjsonファイルを作成します。その中身は下記の通りです。

ja/messages.jsonの記述

{
  "chrome_extension_name": {
    "message": "SBMカウンタ"
  },
  "chrome_extension_description": {
    "message": "ソーシャルブックマークでのブックマーク数を表示するGoogle Chrome拡張です"
  }
}

en_US/messages.jsonの記述

{
  "chrome_extension_name": {
    "message": "SBM Counter"
  },
  "chrome_extension_description": {
    "message": "Social Bookmark Counter Extension"
  }
}

manifest.jsonでのデフォルトの指定

  "default_locale": "en_US",

言語設定を日本語にしていれば, chrome://extensions/ ページでの拡張の名前と説明が日本語が表示されます。対応するlocaleがない場合,manifest.jsonで指定するデフォルト指定が使用されます。ただし,執筆時点でこの動作が確認できたのはChromiumのDeveloper Buildの26664です。dev版ではこの記事が公開された時点では利用できていない可能性があります。

Mole API

こちらもまだドキュメントが揃っていないAPIですが,Moleと呼ばれるToolstripsの拡張APIがあります。Moleの呼び出し方は2通りあり,1つはToolstrip APIから呼び出します。

chrome.toolstrip.expandによるMoleの呼び出し

chrome.toolstrip.expand({height:300,url:'config_on_mole.html'},function(){})

図3 Moleの表示画面

図3 Moleの表示画面

このように,chrome.toolstrip.expandメソッドでToolstrip領域の上にhtmlを表示することができます。このMoleは設定画面などに使うのにちょうど良さそうです。Moleを閉じる際はExtension名の部分図3ではSBMカウンタの部分)をクリックすると閉じることができます。

manifest.jsonでのMoleの指定

  "toolstrips": [
    {
      "mole": "config_on_mole.html",
      "mole_height": 300,
      "path": "toolstrip.html"
   }
  ],

このように,manifest.jsonでMoleを指定することもできます。この場合,Toolstripにマウスを乗せた際に表示されるExtension名をクリックするとMoleが表示されます。ただし,執筆時点ではMoleはChromeのクラッシュを起こしやすい模様です。

show-extensions-on-top

--show-extensions-on-topという起動オプションをつけてChromeを起動すると,Toolstripsをブックマークバーと統合することができます。Toolstripsで表示領域が減ることを気にされている方には朗報といえます。ただし,2009年9月中旬時点では--show-extensions-on-topとMoleを組み合わせるとほぼ確実にクラッシュするので要注意です。バグの詳細はIssue 21271 - chromium - --show-extensions-on-top: moles don't work - Project Hosting on Google Codeで確認いただけます。

executeScript API

こちらも本稿の執筆時点ではdev版には実装されていないAPIです。動的にJavaScriptを実行・CSSを適用するAPIで,使い勝手のよいAPIになる見込みです。JavaScriptを実行するchrome.tabs.executeScriptとCSSを適用するchrome.tabs.insertCSSの2つのメソッドからなり,それぞれファイルをソースとして使用することも,コード片を使用することもできます。

chrome.tabs.executeScriptのサンプルコード

  chrome.tabs.executeScript(tabId, {file:'sample.js'},function() {
  }));
  chrome.tabs.insertCSS(tabId, {code:'a img{border:none;}'},function() {
  }));

なお,上記のtabIdは省略可能で,省略した場合はアクティブなタブで実行されます。また,executeScript・insertCSS自体はそのスクリプトの実行が成功したか否かをBooleanで返します。

Mac版,Linux版

Google ChromeのMac版,Linux版について少しだけ触れておきます。現在,どちらもdev版がリリースされており,Extensionsを含めて実際に試すことができるようになっています。予定では,Chrome 4のbeta版はMac版とLinux版もリリースされる見込みとなっています。また,Mac版,Linux版の正式リリースはChrome 4になる見込みです。

なお,Mac,Linux版のChromeではExtensionsのパッケージングが未実装Issue 20668Issue 20669ですが,crxmakeを使用してExtensionsの開発を行うことが可能です。

最後に,今回の特集で作成したSBMカウンタをパッケージしたファイルを下記に置きました。今後,こちらのファイルを自動更新の対象として更新しますので,是非ご利用頂ければと思います。

SBM Counter

まとめ

4回にわたって,Google Chrome Extensionsの仕様・実装を追ってきましたが,いかがでしたでしょうか? やや急ぎ足になってしまったかもしれませんが,最初の特集としては十分な内容を盛り込めたのではないかと思っています。また,ExtensionsはChrome 4でのリリースに向けて,急ピッチで開発が進んでいます(余談ですが,RSS Extensionがデフォルトで搭載される予定もあります⁠⁠。今回の内容はもしかするとすぐさま過去のものになってしまうかもしれません。今後もできる限り最新の情報を提供していきたいと思っておりますので,その際はまたよろしくお願いいたします。それでは,短い間でしたがお付き合い頂きまして誠にありがとうございました。

著者プロフィール

太田昌吾(おおたしょうご,ハンドルネーム:os0x)

1983年生まれ。JavaScriptをメインに,HTML/CSSにFlashなどのクライアントサイドを得意とするウェブエンジニア。2009年12月より、Google Chrome ExtensionsのAPI Expertとして活動を開始。

URLhttp://d.hatena.ne.jp/os0x/