データストア
Playdateにおけるデータストアは、ゲームの進行状況や設定などのデータを永続的に保存するための仕組みです。
主にLua SDKの
playdate.datastoreモジュールを通じて利用されます。
概要
1. データストアの基本概念
Playdateのデータストアは、Luaのテーブル(連想配列)を
JSON形式でシリアライズして保存・読み込みする仕組みです。
- 保存場所
- デバイス内の "/Data/<bundle_id>/" フォルダに保存されます。
- サンドボックス
- 各ゲームは自分の "bundle_id"に基づいた専用フォルダにのみアクセスでき、他のゲームのデータには干渉できません。
- ファイル形式
- 基本的にJSON形式で書き出されます。
2. 主要な関数と使い方 (Lua)
- データの保存: playdate.datastore.write()
- Luaテーブルをファイルに書き出します。
local gameData = {
highScore = 1200,
playerName = "Arno",
unlockedLevels = {1, 2, 3}
}
-- "data.json" という名前で保存(拡張子は省略可能)
playdate.datastore.write(gameData, "save_file")
- 注意点: ファイル名に `.json` を含める必要はありません。SDKが自動的に付与します
- 第3引数に "true" を渡すと、人間が読みやすい形式(インデントあり)で保存されます (ただし冗長データとなります)
- データの読み込み: playdate.datastore.read()
- 保存されたファイルを読み込み、Luaテーブルとして復元します。
local loadedData = playdate.datastore.read("save_file")
if loadedData then
highScore = loadedData.highScore
else
-- ファイルが存在しない場合の初期化処理
highScore = 0
end
- 画像の保存: playdate.datastore.writeImage()
- スクリーンショットやユーザーが描いた絵などを保存する際に使用します。
playdate.datastore.writeImage(screenImage, "screenshot")
3. 設定ファイル (pdxinfo) の重要性
データストアが正しく動作するためには、プロジェクト内の
pdxinfo ファイルに "bundleid" が正しく設定されている必要があります。
bundleid=com.yourname.gamename
- このIDがないと、シミュレータや実機でデータの保存先が特定できず、エラーや予期せぬ動作の原因となります
4. 推奨される運用方法(ベストプラクティス)
- 保存のタイミング
- ゲームが終了する直前やスリープに入る直前に保存するのが一般的です。以下のシステムコールバックを利用します。
- ファイル分割
- 全てのデータを1つのファイルに入れず、「システム設定(音量など)」と「ゲームのセーブデータ」でファイルを分けると管理がしやすくなります。
- エラーハンドリング
- playdate.datastore.read() はファイルが存在しない場合に "nil" を返すため、必ず if文でチェックするか、デフォルト値を用意するようにしてください。
5. C言語でのデータストア
C SDKを使用する場合、"playdate.datastore" という直接のモジュールはありません。
代わりに、標準の File API (playdate->file) を使用して、独自にバイナリやテキスト(
JSONなど)として書き出す必要があります。
関連ページ
最終更新:2026年04月27日 00:01