本文へスキップ
キャスターアプリケーションズ

ユーザーのデバイスにゴミを残したくなかった ― AIがlocalStorageを提案してきた話

hero

先日リリースした業務効率AI診断を実装していたとき、ちょっと引っかかった出来事がありました。

回答の保持方法について、AIが提案してきたコードが localStorage を使っていたんです。普通に動くし、Web開発のベストプラクティスとしては妥当な選択です。でも、受け入れませんでした。最終的に sessionStorage に書き換えています。

この記事は、その1行の判断の話です。同時に、AIにコードを書かせる機会が増えた今、人間がどこで線を引くべきかについて、自分の考えを残しておきます。

引っかかった1行のコード

業務効率AI診断は、14〜17問の選択式に答えると、AIが業務効率の現状と課題を分析して表示するツールです。回答内容を画面遷移をまたいで保持する必要があるので、ブラウザ側のストレージを使います。

AIが書いてきたのは、おおむねこういうコードでした。

localStorage.setItem('diagnosis-answers', JSON.stringify(answers));

ブラウザのWebストレージにJSONで回答を保存するだけのコードです。リロードしても回答が消えないし、ユーザーが途中で離脱して後から戻ってきても続きから答えられる。一見、親切な実装です。

実際、AIの選択は「Web開発の一般的なベストプラクティス」としては正しいです。フォーム回答を保持する典型例として、ドキュメントやチュートリアルでも localStorage がよく出てきます。

でも、このコードは取り込みませんでした。

何が引っかかったのか

理由はシンプルです。ユーザーのデバイスにゴミを残したくなかったから。

localStorage は、明示的に削除するか、ユーザーが手動でブラウザのデータを消さない限り、ずっと端末に残り続けます。タブを閉じても、ブラウザを閉じても、PCを再起動しても残ります。

業務効率AI診断のユーザー像を改めて考えてみました。

  • 想定ユーザーは経営者、業務責任者、情シス担当
  • 利用シーンは社内PC、出先のカフェ、共用PCもあり得る
  • 扱う内容は自社の業務体制、Excel依存度、属人化の度合いといった、他人に見られたくない情報
  • 利用頻度は「1回診断したら終わり」が基本。再訪して続きから書きたい需要は薄い この要件で localStorage を使うと何が起きるか。診断を終えた後も、その人の会社の業務課題に関する回答が、端末のブラウザに残り続けます。共用PCなら、次に使う人がDevToolsを開けば普通に読めます。

これは技術的なセキュリティの話というより、ユーザーに対する態度の話です。自分が使い終わったツールが、自分の知らないところで端末に痕跡を残し続ける。それを「クリアの責任はユーザー側にある」で済ませるのは、設計として誠実じゃないと感じました。

なぜAIは localStorage を選ぶのか

AIの提案が悪かったわけではありません。AIは学習データから「最もよくある正解」を出してきます。Webフォームで回答を保持するパターンとして、localStorage を使う例は世の中に大量にあります。リロード耐性も高い。AIにとっては自然な選択です。

ただ、AIが見ていないものがあります。

  • このプロダクトが誰のために作られているか
  • その人たちがどんな環境で使うか
  • 扱うデータの機微性はどの程度か
  • そもそも長期保持が必要な機能か これらは要件の重み付けの問題で、コードからは読み取れません。プロダクトオーナーの判断が必要な領域です。

AIは「動くコード」を書きます。「このユーザーにとって正しいコード」かどうかは判断していません。

sessionStorage に書き換えた

最終的に採用したのはこっちです。

sessionStorage.setItem('diagnosis-answers', JSON.stringify(answers));

違いは1単語ですが、挙動は大きく違います。

sessionStorage は、タブを閉じた瞬間にデータが消えます。ブラウザ全体ではなく、そのタブだけのスコープです。ユーザーが「終わった」と思ってタブを閉じれば、回答も一緒に消える。クリアの責任が、利用者からシステム側に移ります。

トレードオフはあります。ユーザーが誤ってタブを閉じたら回答は戻りません。途中離脱して後で続きを、というユースケースは捨てることになる。でも診断ツールの性格上、3分で終わる前提なので、許容できる範囲だと判断しました。

これは「セキュリティを上げた」というより「ゴミを残さないようにした」が正しい表現です。同一オリジン内のJSから見えるかどうかという点では、localStoragesessionStorage も変わりません。違うのは保持期間とスコープです。だから「セキュア度が上がった」と言うと厳密には不正確で、本質はデータの残存リスクを最小化したという設計判断です。

業務効率AI診断のリリース記事で「回答内容はブラウザのタブ内のみに保持され、タブを閉じた時点で消去されます」と書いているのは、このコード変更の結果です。

AIコーディング時代に、人間は何をするのか

ここから先は、もう少し広い話です。

2026年現在、AIにコードを書かせるエンジニアは爆発的に増えました。私自身、業務でAIをガッツリ使う側です。提案されたコードをそのまま採用することもよくあります。

その上で、AIに任せきれない領域があると感じています。

AIは一般解を出す。要件への適合は人間が判断する

これが本記事を書く一番の動機です。AIは賢いし、生産性は確実に上がります。ただ、AIの提案は「学習データの中央値」であって、「目の前のプロダクトの正解」ではありません。

業務効率AI診断の localStorage 問題でいうと、AIは間違っていません。一般的なWebアプリのフォーム保存として、最適に近い選択をしています。問題があったとすれば、AIが見ていない要件 ―― ユーザー像、利用環境、データの機微性、再訪頻度 ―― を踏まえて、提案を自分の要件に翻訳する作業が必要だった、ということです。

この翻訳作業は、コードを書くことより、要件を見抜くことに近い。AIに任せきりにすると、ここがすっぽり抜けます。動くものはできますが、誰のためのコードなのかが曖昧になる。

「AIで作れる時代」と「AIに任せていい時代」は別物だと、最近よく考えます。

1行の判断が、長く残る

業務システムは長期運用が前提です。当社のサイトのキャッチコピーが「長期運用を前提としたシステム」なのも、これが受託開発の本質だと考えているからです。

1行のコードの判断が、何年もユーザーに残り続けます。localStoragesessionStorage か、たった1単語の違いですが、診断を受けた何百人、何千人の端末に、その判断が反映されます。

「動けばいい」で済ませない設計が、長く使われるシステムを作る。AIが書いたコードでも、その判断は人間がやる。これは、AIに置き換わらない仕事だと思っています。


業務効率AI診断は無料・登録不要でご利用いただけます。今回のような設計判断を積み重ねた成果物として、よければ試してみてください。

業務効率AI診断はこちら

業務システム・AI活用・Webサービスの開発から保守まで、長期運用を前提とした設計でご支援しています。お問い合わせフォーム、またはLINE公式アカウントからお気軽にどうぞ。