スポンサーサイト
投稿日時 : -------- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- | スポンサー広告
Firefox拡張『Dropfox』公開 - 共有プロファイルの設定を管理
投稿日時 : 2008-10-21 18:48
更新日時 : 2009-02-09 12:47
最新情報は以下のURLを参照してください。
http://itmst.blog71.fc2.com/blog-category-21.html
http://dropfox.no-ip.net/ja/

 
English page is here.
 
Dropfox Logo
 
Dropfox Screen Shot EN Dropfox Screenshot JP
 

Dropfoxとは

 DropfoxとはDropboxなどを利用した複数の異なる環境をまたがったプロファイル共有をサポートするFirefox拡張機能(アドオン)です。環境変数や通常のJavascriptコードなどが記述可能な言わば「拡張版user.js」がOS別に複数使用できるようになります。これにより、キャッシュフォルダの位置やダウンロードファイルの保存先、外部エディタのパスなど、一部の設定だけをその環境に適した値に変更できます。
 

■主な特徴

 「user.js と同じような設定ファイルをOSごとに個別に保持できる」というのがDropfoxが提供する最も基本的な機能です。

 それに加えて、設定値に環境変数が記述可能であったり、プロファイルフォルダ外部の任意の設定ファイルが使用可能であったりすることで、共有プロファイルを使いながらも一部の設定を環境に合わせて柔軟に変更することができます。

以下に主な特徴を列挙します。

  • Windows/Linux/Mac用に個別の設定ファイルが使用可能
  • 設定ファイルは基本的には prefs.js や user.js と同じ書式
  • 設定値に ${HOME} や ${USERPROFILE} のように環境変数が記述可能
  • 設定値に ${ProfD} のようにMozilla定義の特殊フォルダ変数が記述可能
  • プロファイルフォルダ外部の任意の設定ファイルもOSごとに指定可能
  • 外部設定ファイルを指定するパスにも変数が記述可能
  • 設定ファイルには if文 などのJavascriptコードも記述可能
  • 各設定ファイルはFirefox起動時にOSに応じてロードされ実行される
  • 変数は実行時に変換される
 

■インストール

 まだサンドボックス内でレビュー待ちの状態です。初めての拡張でレビューにどのぐらいの時間がかかるのかまったく分からないので一般公開されたら改めてアナウンスしたいと思います。
 
現在サンドボックス内にあるのでaddons.mozilla.orgのアカウントがないとインストールできません。が、アカウントの取得は簡単なのでぜひこの機会に。
追記(2008/12/21 12:30):サンドボックス内のアドオンはアップデートサービスが利用できないことが分かりました。以下の公式サイトからインストールした場合は自動アップデート機能が利用できます。
Dropfox公式サイト
 
 
以下はマニュアルのコピーです。
 

■Dropfoxの必要性

Dropboxでプロファイルを共有するときにキャッシュフォルダを除外したい場合などがあると思いますが、これは簡単にはできません。WindowsとLinuxでプロファイルを共有する場合を考えてみます。

 たとえばWindows上でprefs.jsまたはuser.jsを編集してキャッシュフォルダをデフォルトのパスから変更したとします。この設定情報はDropboxを 介してLinux上で同期されます。しかしLinuxのパスフォーマットはWindowsのものとは互換性がないため、Linux上でFirefoxを起 動するとデフォルトのキャッシュフォルダに強制的に戻されてしまいます。この結果Linux側のキャッシュファイルがWindows側に流れてくることに なります。

 もちろんこのOS間のパスフォーマットの違いによる問題だけに限らず、同一OS間や同一OSの複数ユーザ間での共有の場合であっても、完全なクローン環境でも構築しない限り「単純に設定を共有するだけ」では必ずどこかに不都合が生じてしまいます。

 要するにここで問題になっているのは、共有プロファイルに対してOSやマシンやユーザ固有の設定を適用する仕組みがないということです。

この仕組みを提供するのがDropfoxです。



■主な特徴

 「user.js と同じような設定ファイルをOSごとに個別に保持できる」というのがDropfoxが提供する最も基本的な機能です。

 それに加えて、設定値に環境変数が記述可能であったり、プロファイルフォルダ外部の任意の設定ファイルが使用可能であったりすることで、共有プロファイルを使いながらも一部の設定を環境に合わせて柔軟に変更することができます。

 以下に主な特徴を列挙します。

  • Windows/Linux/Mac用に個別の設定ファイルが使用可能
  • 設定ファイルは基本的には prefs.js や user.js と同じ書式
  • 設定値に ${HOME} や ${USERPROFILE} のように環境変数が記述可能
  • 設定値に ${ProfD} のようにMozilla定義の特殊フォルダ変数が記述可能
  • プロファイルフォルダ外部の任意の設定ファイルもOSごとに指定可能
  • 外部設定ファイルを指定するパスにも変数が記述可能
  • 設定ファイルには if文 などのJavascriptコードも記述可能
  • 各設定ファイルはFirefox起動時にOSに応じてロードされ実行される
  • 変数は実行時に変換される



■設定ファイルの書式

 基本的にはprefs.jsやuser.jsと同じ書式でJavascriptコードを書き、user_pref()メソッドの第2引数に変数を含めるという感じになります。たとえば次のようになります。

user_pref("foo.boo.bar", "${HOME}/fooBar");

もちろん変数を必ず使わなければいけないわけではありません。

 prefs.jsやuser.jsと大きく違う点としては、user_pref()以外のJavascriptコードも実行可能なことです。if文で条件分岐させることなども可能なので、プログラマブルで柔軟な設定が可能です(後述)。



■共有設定ファイル

 各OS用の設定ファイルはプロファイルフォルダ内に保存され、Dropboxなどによって他のマシンと共有されるので「共有設定ファイル」と呼んでいます。共有設定ファイルは以下のパスに保存されます。

<プロファイルフォルダ>/dropfox.<OS名>.js

OS名には「WINNT」「Linux」「Darwin」が入ります。



■外部設定ファイル

 プロファイルフォルダの外部に保存している設定ファイルを実行することもできます。この設定ファイルを「外部設定ファイル」と呼びます。外部設定ファイ ルは共有されないので共有プロファイルに対してマシン固有の設定を適用することができます。外部設定ファイルを使用するには設定ウィンドウでファイルパス を指定します。また、以下のようにファイルパスに変数を含めることができるので配置場所を各マシンで統一する必要はありません。

${USERPROFILE}\MyExternalPref.js

外部設定ファイルは共有設定ファイルと同じくFirefoxの起動時にロードされ実行されます。外部設定ファイルの書式は共有設定ファイルと全く同じです が、UTF-8(BOMなし)で保存するようにして下さい。



■環境変数と特殊フォルダ変数

 Dropfoxではシステム定義の環境変数とMozilla定義の特殊フォルダ変数を利用できます。システム定義の環境変数とはWindowsなら %USERPROFILE% や %WINDIR% などのことです。これに対してMozilla定義の特殊フォルダ変数とはFile I/O - MDCに記載されているような、FirefoxやThunderbirdなどのMozillaテクノロジーを使ったソフトウェアで利用可能な変数のことです。Dropfoxではこれらの変数を ${変数名} というUNIXライクな形式で統一的に扱うことができます。

 注意点は Mozilla定義特殊フォルダ変数 → システム定義環境変数 の順に変換が試みられるということです。両者に同名の変数が存在した場合はMozilla定義の特殊フォルダ変数が使用されることになります。



■テスト実行

 設定ウィンドウに「テスト」というボタンがあります。これを押すと共有設定ファイルの場合は現在のテキストボックスに入力されているコードをテストすることができます。外部設定ファイルの場合は実際に外部ファイルをロードして実行します。

Dropfox Test Execution Result

 テスト実行で変数の変換結果やエラー、設定の書き換えが発生するかどうかなどを確認することができます。注意しなくてはならないのは変数の変換はテスト を実行しているシステム環境に完全に依存するということです。現在テストを実行している環境で変数の変換がうまくいったからといって他の環境で同じ結果に なるとは限りません。基本的にテストは実際の環境で実行するようにしてください。



■各設定ファイルの実行順序

 Dropfoxを導入することで一般ユーザがFirefoxで利用できる設定ファイルが「prefs.js」「user.js」「共有設定ファイル」「外部設定ファイル」の4つになります。実行順序は

prefs.js → user.js → 共有設定ファイル → 外部設定ファイル

となります。prefs.jsの設定をベースに後に続くファイルがそれに上書きしていきます。後のファイルになるほどよりマシン固有の設定を書けばいいわけです。



■メタキャラクタ

 user_pref() 関数内では $ をメタキャラクタとして扱います。もし $ をエスケープしたい場合は $$ と2つ続けて記述します。例えば ${HOME} を変数ではなく、"${HOME}"という文字列自体として扱いたいときは $${HOME} と記述します。

user_pref("foo.boo.bar", "$${HOME}");

テスト実行して結果を確認するようにしてください。



■変数の展開後の値の型

 設定値に変数を含めるときは"${HOME}"のように文字列として変数を指定することにな ります。しかしその設定項目が整数値(Number型)や真偽値(Boolean型)でなければならない場合があると思います。こういった場合は user_pref関数の第3引数で変数展開後の値の型を「0(String型)」「1(Number型)」「2(Boolean型)」の3つの整数で指 定することができます。

user_pref("foo.bar.myString","${MYSTRING}",0); //String型
user_pref("foo.bar.myNumber","${MYNUMBER}",1); //Number型
user_pref("foo.bar.myBoolean","${MYBOOLEAN}",2); //Boolean型

デフォルトで文字列として扱うのでString型の場合は第三引数はなくても構いません。もちろん ${MYNUMBER}を展開した場合は数値、${MYBOOLEAN} を展開した場合は「true」か「false」になるように変数を定義していなければエラーになります。設定ウィンドウでテスト実行できるので前もって変 換結果を確認して下さい。



■user_pref()以外のコード

 Dropfoxは基本的にはuser_pref()関数の実行に特化した設計になっていますが、それ以外のJavascriptコードを設定ファイル内 に書いても構いません。if文などで分岐させることもできますし、XPCOMなどの特権コードも実行可能なので、従来のprefs.jsやuser.js よりもプログラマブルで柔軟な設定が可能になっています。

 極端な話、例えば少し改造が必要ですが、「Firefoxの右クリックメニューからSleipnirで開く」のようなコードを共有設定ファイルや外部設定ファイルに書けばちゃんと動作させることができます。

 要するにJavascriptの文法要件を満たしていれば基本的には何を書いても動作しますが、テスト実行時と実際の実行時とではスコープが異なるとい う点にだけ注意してください(後述)。



■実行時のスコープ

 設定ファイルのコードはXPCOMコンテキスト内の「dropfox」というObject型オブジェクトのスコープで実行されます。 user_pref()関数もdropfox.user_pref()として実行されています。設定ウィンドウでのテスト実行時はchromeウィンドウ コンテキスト内の「dropfox」というObject型オブジェクトのスコープで実行されます。user_pref()以外のコードを書くときはテスト 実行時のスコープと実際の実行時のスコープは違うということに注意してください。

 一応、実際の実行時のスコープになるXPCOMコンテキスト内のdropfoxオブジェクトにも「gDropfox.scope」としてアクセスできますが、今後仕様を変更する可能性もあります。



■実行のタイミング

 Dropfoxが実行されるタイミングはFirefox起動時の"profile-after-change"イベント発生時です。 user_pref()以外のコードを書く時はこれ以降のイベントに関与できます。処理結果のウィンドウ表示は"sessionstore- windows-restored"イベント発生時に実行されます。その他イベントに関してはObserver Notifications - MDCあたりを参照してください。

 
 
 
 
スポンサーサイト
2008-10-21 18:48 | Dropfox | Comment(1) | Trackback(0)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。