アットウィキロゴ

データストア

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