ai-driven-development legacy-migration blazor
未実装ボタンを「動いている風」にしない — 偽の完成を防ぐ UI 戦略
移行途中のフッターボタン群を全部隠すと利用者が混乱します。かといって全部実装すると工数が爆発します。「導線だけ実装して、未対応メッセージで明示する」の中間解にしました。
W
渡邊 賢 なぜ書いたか
レガシー画面を移行するとき、フッターのボタン群(帳票出力、一括承認、CSVエクスポートなど)が 本体機能と比べて重い ことがよくあります。本体だけ移行して、フッターを「全部後回し」にすると、利用者にとっては「ボタンが消えた、機能が減った」に見えます。今回はその中間解の話です。
何が問題か
選択肢は3つあります。
- 全部実装してから移行: 工数が爆発する。本体機能のリリースが大幅に遅れる
- 未実装ボタンを完全に隠す: 利用者から「機能が消えた」と見える。問い合わせが増える
- 暫定実装でとりあえず動かす: スタブ実装で「動いている風」に見せる。最も危険
3つ目が一番事故ります。「動いている風」のボタンを利用者が押して、何も起きないか、変な結果が出ます。実体がないことを利用者は知らない。
やったこと
中間解として、「導線だけ実装して、押すと未対応メッセージを出す」 を採用しました。
<button class="btn-secondary" @onclick="ShowNotImplemented">
帳票出力
</button>
@code {
private void ShowNotImplemented()
{
// 移行未完了の機能であることを明示
ShowToast("この機能は次回リリースで対応予定です。", ToastLevel.Info);
}
}
ポイントは:
- ボタン自体は表示する: 利用者が「機能が消えた」と思わない
- 押せる: 押すと未対応であることを 明示的に 知らせる
- 誤操作にならない: 何かが処理されたフリをしない
なぜこれが「導線だけ実装」と呼べるか
mapping上では、このボタンは「導線あり、本処理は未対応」として扱います。本処理を実装するスライスを後で切るときに、ShowNotImplemented() を本処理に差し替えるだけで完了します。
「動いていないことが分かるボタン」がある状態は、利用者にとっては不便ですが、最も誠実な状態 です。
わかったこと
- 「動いている風」を作ると、開発者と利用者の認識ズレが必ず発生します。動いていないことを明示するほうが、結局は信頼されます
- 未対応メッセージは、「いつ対応予定か」も書けると尚良い。書けないなら「今後のリリースで対応します」程度でもOK
- AIに画面を作らせるとき、未実装機能を どう扱うか を最初に決めておかないと、勝手にスタブ実装で動いている風を作りがちです
関連
「未決を成果として残す」という考え方とつながります(未決をプロジェクトの進捗として残す)。未実装ボタンも、未決の一形態として 可視化したまま運用 する、という思想です。
次にやること / 未解決の問題
- 未対応メッセージのデザインがまだ画面ごとに揺れている。共通コンポーネント化したい
- 「いつ対応予定か」をmappingから自動的にメッセージに反映する仕組みを試したい
person
渡邊 賢
等差級数的Commit 運営 / ICD VIETNAM.LLC General Manager
AI駆動開発と段階的なレガシーモダン化をテーマに、日々の試行錯誤をこのブログに記録しています。
プロフィール詳細 arrow_forward似たような課題に困っている方、一緒に考えませんか。
AI駆動開発・Vibe Coding・レガシーマイグレーションに関するご相談を受け付けています。