PHP JSON 個人開発

【PHP】データベース不要!JSONファイルだけで作る簡易ランキングシステムの作り方

個人でゲームサイトを作るとき、一番面倒なのが「データベース(MySQLなど)」の準備ではないでしょうか?
「サーバー代を安く抑えたい」「SQLの知識がない」…そんな悩みを持つ方へ。
当サイト(Play Spot)で実際に稼働している、「JSONファイルのみで管理する超軽量ランキングシステム」の仕組みを公開します。

スポンサーリンク

📂 仕組み:テキストファイルに保存するだけ

大掛かりなDBサーバーは使いません。
`ranking_data.json` というテキストファイルを用意し、そこに全員分のスコアを書き込んでいくだけです。
アクセス数が月間数万PV程度までなら、この方法で全く問題なく動作します。

💻 ソースコード解説

1. データの保存(書き込み)

新しいスコアが送られてきたら、一度ファイルを全て読み込み、配列に追加して、また保存します。
同時に `file_lock` を使うことで、同時に書き込みが起きてもデータが壊れないようにします。

$file = 'ranking.json';
$json = file_get_contents($file);
$data = json_decode($json, true);

// 新しいデータを追加
$data[] = [
    'name' => '名無しさん',
    'score' => 100,
    'time' => time()
];

// JSONに戻して保存(排他制御付き)
file_put_contents($file, json_encode($data), LOCK_EX);

2. データの取得(ソート)

読み込む時は、PHPの `usort` 関数を使って並び替えます。
点数の高い順(降順)なら `$b - $a`、タイムアタック(昇順)なら `$a - $b` です。

// スコアの降順(大きい順)に並び替え
usort($data, function($a, $b) {
    return $b['score'] - $a['score'];
});

// 上位10件だけ取り出す
$ranking = array_slice($data, 0, 10);

⚠️ 注意点とデメリット

この方法は手軽ですが、データが数万件を超えるとファイルサイズが大きくなり、動作が重くなります。
その場合は、古いデータを削除する処理を入れるか、大人しくデータベースへの移行を検討しましょう。
当サイトのような「カジュアルゲーム」には最適な構成です。

開発ブログ一覧に戻る