iアプリで何かのデータを永続的に携帯電話内に保存したい場合、ScratchPadと呼ばれる保存領域を利用する。今回はこのScratchPadの使い方について、サンプルコードを使って具体的に解説する。

ScratchPadとは?

 ScratchPadとは、iアプリごとに用意される永続的保存領域のことで、APIを使って領域にデータの読み書きができる。ScratchPadは、ひも付いたアプリ以外からはアクセスできないサンドボックスモデルとなっている。

 Starアプリでは、フルアプリ、フルアプリ+ミニアプリ、ミニアプリという3種類の構成が可能となっている(参考記事)。フルアプリとフルアプリ+ミニアプリの場合、ScratchPadとiアプリのJARサイズの合計は2048Kバイトである。例えば、iアプリのJARが1024Kバイトであれば、ScratchPadは1024Kバイトまで利用することができる。ミニアプリの場合、サイズが少なめで利用できるのは200Kバイトまでとなる()。

表●アプリ種別ごとのScratchPadサイズ
アプリ種別ScratchPadサイズ
フルアプリJARサイズと合わせて2048Kバイト
フルアプリ+ミニアプリJARサイズと合わせて2048Kバイト
ミニアプリ200Kバイト

 なお、ScratchPadは、一つのiアプリにつき16個まで分割して持つことができる。ミニアプリだけの場合は、一つのScratchPadのみ参照できる。ミニアプリ+フルアプリの場合は、複数分割して持つことができるが、ミニアプリからは一つ目のScratchPadだけが参照できる。

ScratchPadの設定

 ScratchPadを使用するには、ADF(jamファイル)にScratchPadの情報を追記する必要がある。

SPsize = <1番目のサイズ>[, <2番目のサイズ>]..[, <16番目のサイズ>]

 通常は1番目のサイズだけを指定して、ScratchPadを利用することがほとんどである。ただし、ScratchPadを分割して持ちたい場合は、2番目以降のサイズもカンマ区切りで羅列する。例えば分割なしの場合は、

SPsize = 10240

のように記載する。2分割する場合は、

SPsize = 10240,20480

のように記載する。

 ScratchPadを分割するメリットは、ScratchPad内のデータ管理をシンプルにできる点にある。一つのScratchPadに用途の異なる複数のデータを配置すると、ソースコード上管理が煩雑になるが、ScratchPadごと分けてしまうことでデータ配置が明確となる。ミニアプリ+フルアプリの場合には、双方で共有したいデータを一つ目のScratchPadに、フルアプリのみが利用するデータは二つ目以降に配置する、という使い方も有効である。

 ADFにSPsizeを指定したiアプリは、ダウンロード時に、ScratchPadサイズ分の保存領域が確保できるかどうかをチェックされる。確保できる状態であればその領域が確保され、ダウンロードが完了する。保存領域が足りない場合は、ダウンロードが失敗する。

 ScratchPad上の場所の指定には、専用のURLを指定する。URLのフォーマットは以下の通りである。

Scratchpad://<ScratchPadの番号>[;pos=<先頭からの開始位置>[,length=<アクセスしたい範囲>]]

 ScratchPadの番号は、0から15で指定する。分割した範囲外の番号を指定するとエラーとなる。先頭からの開始位置は、指定したScratchPadの先頭からのバイト数である。アクセスしたい範囲であるlengthは、posで指定した場所からのバイト数である。posとlengthを活用して本当に必要な範囲を指定することで、読み書き用のワークメモリーの使用量を極力抑えることができる。