実装

プロセスが死んでも残る — いちばん賢くない方法で

著者: makemind · 2026年3月6日

4 編目まで待ち人数はこう生きていた。

var waiting = 3;

プロセスが死ねば 3 に戻る。デスクの画面を抜き差しすれば行列が無かったことになる。

書き留める

const _statePath = 'desk-state.json';

int _load() {
  final f = File(_statePath);
  if (!f.existsSync()) return 3;
  final m = jsonDecode(f.readAsStringSync()) as Map<String, dynamic>;
  return (m['waiting'] as num).toInt();
}

void _save(int waiting) =>
    File(_statePath).writeAsStringSync(jsonEncode({'waiting': waiting}));

そして値が変わるときに呼ぶ。

waiting -= n;
_save(waiting);

なぜ全体を書き直すのか

値ひとつが変わるのにファイル全体を書き直す。非効率だ。ところがこの方式には性質がひとつある。

書きかけの記録が生まれない。 書き込みが起きたか起きなかったかのどちらかだ。途中で死ねば古いファイルがそのまま残る。

部分更新はそうではない。レコードひとつをその場で直していて死ねば どちらでもないファイル が残り、次の起動でパースが壊れる。そこからは復旧が仕事になる。

記録が数万件になればこの方式は使えない。そこが DB を使う場所だ。ただしそれまではこれがいちばん安全だ。

どの層に置くか

状態が置かれうる場所は三つある。

複数の画面が同じ値を見るかプロセスが死ぬと
画面の中いいえ — 画面ごとに別の値消える
サーバープロセスはい消える
サーバーの外(ファイル・DB)はい残る

4 編目までは二つ目だった。この編が三つ目へ移す。

決めなければ二つ目になる。 そしてそれが問題になる日はたいてい夜だ。

このコンテンツは開発者以上が必要です

サインインしてプランをアップグレードすると続きを読めます。

プランを見る
Twitter