ガジェットXMLやリソースの更新について
ここからは、最初のアプリを作って、「さぁ自分なりに機能アップしていくぞ」と思った時にかなりの確率ではまってしまう問題について説明します。トラブルが起きてドキュメントを探し回る前に、ぜひ目を通しておいてください。
ガジェットXMLの更新
mixiアプリ開発の際にはガジェットXMLを何度も修正し、動作確認する必要があるでしょう。ところがmixiアプリ作成の際に登録したURLに、更新したガジェットXMLを置いても、mixiアプリの動作は変わりません。これは前回説明したとおり、mixiがガジェットXMLをキャッシュしているためです。ガジェットXMLを更新した場合は、以下のどちらかの方法でキャッシュをクリアまたは無効化する必要があります。
(1)「アプリ設定変更」画面でキャッシュをクリアする方法(全体に影響)
まず「アプリトップ」ページの「アプリ設定変更」(
)をクリックし、アプリ設定変更画面に移動します。
アプリ作成時と似た画面になりますが、ガジェットURL部分に「キャッシュ消去」リンクが追加されています。このリンクをクリックすることでキャッシュが消去され、改めてガジェットURLからガジェットXMLが読み込まれるようになります。
(2)URLで一時的にキャッシュを無効化する方法(そのリクエストのみに影響)
mixiアプリの実行時にURLのパラメータにnocache=1をつけることで、ガジェットXMLのキャッシュを一時的に無効にすることができます。例えば通常のオープンβ環境のポータルページのURLは
http://platform001.mixi.jp/home.pl
ですが、nocache=1というパラメータを付けた
http://platform001.mixi.jp/home.pl?nocache=1
というURLでアクセスすることで、ガジェットXMLのキャッシュが無効化されます。ただし、これはnocache=1というパラメータを付けたリクエストにだけキャッシュが無効化されますので、他のユーザーがこのパラメータを付けずにアクセスした場合、既にmixi上に存在するキャッシュが使用されます。
他のユーザーも含めてアプリを更新する場合は、先ほどの「キャッシュ消去」リンクをクリックしてください。
リソースの更新
mixiアプリでは、ガジェットXML、CSSファイル、JavaScriptファイル、画像ファイルがそれぞれキャッシュされますが、前項で記した方法でキャッシュがクリアされるのはガジェットXMLのキャッシュのみです。それ以外のファイルは前回説明したように「Content Rewrite」と呼ばれる機能でキャッシュされており、別の方法でキャッシュを無効化する必要があります。
(1)ガジェットXMLで設定する方法
キャッシュを無効化する1つの方法は、ガジェットXMLにて、Content Write機能を制御する設定値を記述することです。以下に、mixiの開発者向けページで紹介されている設定例を示します。
<Module>
<ModulePrefs title="Hello, mixi">
<Require feature="opensocial-0.8" />
<Optional feature="content-rewrite">
<Param name="expires">86400</Param>
<Param name="include-urls"></Param>
<Param name="exclude-urls">.*</Param>
</Optional>
</ModulePrefs>
……
上記のように、ガジェットXMLの/Module/ModulePrefs/直下に、"content-rewrite"という値のfeature属性を持つOptional要素を定義し、その下にParam要素を用いてContent Write機能を制御するための設定値を記述します。
ここでは、name属性にそれぞれexpires、include-urls、exclude-urlsの値を持つ設定項目を記しています。それぞれの設定値の意味は次のとおりです。
| 設定名(name属性) | 意味 |
| expires | キャッシュの有効時間を秒単位で指定する。ここで指定された秒数が「最小の」キャッシュ時間となる。つまり、最低限この秒数の間はキャッシュが有効となる。デフォルトは86400秒(=1日) |
| include-urls | キャッシュを有効化する対象をURLで指定する。ここで値が指定されない場合、あるいはデフォルトの場合は、すべてのURLをキャッシュする |
| exclude-urls | キャッシュを無効化する対象をURLで指定する。「.*」とした場合、すべてのキャッシュを無効化する |
つまり、上に記した設定例は、「最低86400秒(=1日)キャッシュを保持し、すべてのURLのキャッシュを有効化する。ただし、すべてのURLのキャッシュを無効化する」となり、exclude-urlsの設定が優先され「すべてのURLのキャッシュを無効化する」となります。
なお、この機能はOpenSocial v0.8.1では定義されていませんが、OpenSocial v0.9で「Content Rewriter Feature」として規定されました。mixiアプリはOpenSocial v0.8.1準拠ですが、Content Rewriter Featureに対応しています(ただし、mixiではinclude-urls, exclude-urlsとなっている部分がOpenSocial v0.9ではinclude-url, exclude-urlに名称変更されるなど、少し仕様が異なるようです。正規表現の扱いにも差がある模様です)。同じように他のOpenSocial v0.8.1準拠のSNSでも使える場合があるようです。
(2)リソースのURLを変更する方法
上記の方法以外に、リソースのURLにバージョン管理用のダミーの文字列をパラメータとして付けて、mixiに対して異なるURLと認識させることで、キャッシュが働かないようにすることができます。
例えば日付や時間、バージョン番号などをパラメータに付けて
http://someserver/sample.js?version=200907131305
などのURLとし、このファイルを更新した場合には後ろのパラメータを変更して
http://someserver/sample.js?version=200907141200
とするなど、更新の度にURLを変えていく方法です。
ただしこの方法を使う場合、このファイルを読み込むガジェットXML側も、適宜URLの修正を行う必要があります。もちろんガジェットXMLを更新しますので、前項に従ってガジェットXMLのキャッシュのクリアないしは無効化をする必要があります。作業の手間という観点から考えると、開発段階ではガジェットXMLでContent Rewrite機能を無効化しておき、リリース前にキャッシュを有効化するのがオススメです。
mixiアプリのプログラムやリソースを更新し、アップロードしてからアプリを読み込んでも意図通りの動作をしない、というケースは多々ありますので、その際は上記の手順を確認してみてください。前回解説した、mixiアプリがどのように実行されるかのイメージが描けていれば、以上の点の理解に役立つでしょう。
まとめ
今回はmixiアプリの作成の流れと、作成後にはまりやすい更新についての注意点を扱いました。次回はガジェットXMLの仕様と、OpenSocialアプリのビューの概念について解説します。

