Skip to content

fix(plateau): OSM のレイヤー消灯の理由をダイアログで伝える - #53

Closed
nyampire wants to merge 9 commits into
mainfrom
feature/plateau-osm-layer-off-notice
Closed

nyampire wants to merge 9 commits into
mainfrom
feature/plateau-osm-layer-off-notice

Conversation

@nyampire

@nyampire nyampire commented Sep 9, 2026

Copy link
Copy Markdown
Owner

何を直したか

OSM のデータのレイヤーが消えているために PLATEAU の候補を伏せたとき、その理由を画面中央のダイアログで伝えます。
これまでは画面下端に 5 秒だけ出る通知でした。

利用者から 2 つの指摘がありました。
レイヤーを戻しても文言がその場で消えないことと、通知が見落としやすいことです。

前者を実機で確かめたところ、文言は 5 秒後に消えていました。
残り続ける不具合ではなく、表示の寿命がレイヤーの状態と結び付いていないことが原因です。
一時的な通知のままでは「戻したら消す」と「見落としにくくする」を同時に満たせないため、ダイアログに置き換えました。

決めたこと

ダイアログはページを開き直すごとに 1 回だけ出します。
レイヤーの切り替えは Shift + O の 1 打で起きるため、毎回出すと意図して消した人の作業が毎回止まります。

「次から表示しない」を選んだ場合は、以後ずっと出しません。

構成

PlateauService は「候補を伏せた理由がレイヤーの消灯である」ことを osmlayeroff として 1 回だけ知らせます。
画面に何を出すかは決めません。

新しく足した UiPlateauOsmLayerOffDialog がこれを受け取り、既存の uiConfirm でダイアログを組み立てます。
「次から表示しない」の状態は StorageSystem に記録します。

出来事の発生は 1 拍遅らせています。
getData は Pixi の描画の途中で呼ばれるため、受け取り側で例外が起きると描画の繰り返しがそのページの間止まります。

変更したもの

ファイル 変更
modules/services/PlateauService.js 通知を出す処理を削除し、osmlayeroff を発生させる
modules/ui/UiPlateauOsmLayerOffDialog.js 新規。出来事を受け取ってダイアログを開く
modules/ui/index.js 上を公開する
modules/core/UiSystem.js 部品を 1 度だけ組み立てる
data/core.yamldata/l10n/core.en.jsondata/l10n/core.ja.json 見出しとチェックボックスの文言を追加
test/browser/services/PlateauService.test.js 通知の試験 3 件を出来事の試験 4 件に置き換え
test/browser/ui/UiPlateauOsmLayerOffDialog.js 新規。5 件

設計文書と実装計画も docs/superpowers/ に入れてあります。

確認したこと

npx eslint modules test はエラー 0 件、警告 42 件です。
警告の数は起点と変わりません。

試験は 776 件成功、5 件スキップ、失敗 0 件です。
起点の 770 件に、置き換えの差 1 件と新しい 5 件が足されています。

作った配信物をローカルで配信し、次を実測しました。
UiSystem が部品を組み立てていること、出来事でダイアログが開き見出しと本文とチェックボックスと OK ボタンが正しく出ること、チェックを入れると設定が保存され外すと消えること、保存済みの状態では開かないことです。

残っている制約

Shift + O から描画を経て出来事が起きるまでの通し確認は、実機での操作が残っています。
検証に使ったブラウザで Rapid の描画処理が動かず、判定の関数が呼ばれなかったためです。
経路はコード上で追ってあり、キー割り当てからレイヤーの切り替え、再描画の要求、判定、出来事の発生まで、すべて同期の直接呼び出しです。

対応エリアの外や日本国外でレイヤーを消した場合も、ダイアログが出ます。
表示範囲に PLATEAU の建物が 1 棟も無いときは出さない、という案も検討しましたが、今回は入れていません。

ページを開いているあいだに 2 回目以降レイヤーを消しても、何も出ません。
「次から表示しない」を選んだあとに戻す操作は、画面上にありません。

動作確認のお願い

対応エリアの中を開き、Shift + O でレイヤーを消してダイアログが出ることを確かめてください。
OK で閉じたあと、同じページでもう一度消しても出ないこと、ページを開き直すとまた出ることも合わせて確認できます。

🤖 Generated with Claude Code

nyampire and others added 9 commits September 8, 2026 22:40
画面下端の一時的な通知をやめ、ページを開き直すごとに 1 回だけ
ダイアログで理由を伝える。「次から表示しない」で以後止められる。

判定の側は出来事を 1 回だけ発生させるだけにし、画面に何を出すかは
新しい画面部品が決める。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3 つの課題に分ける。判定の側を出来事に変え、ダイアログの部品を作り、
UiSystem に組み込む。それぞれ試験を先に書く手順で進める。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
show() の force は製品の動作では使わない。ダイアログの中でチェックを
入れてから外せば同じ分岐を通るので、引数なしで試験できる。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
画面下端の通知を出す処理を削除し、候補を伏せた理由がレイヤーの消灯で
あることを osmlayeroff として 1 回だけ発生させる。何を画面に出すかは
受け取る側が決める。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
osmlayeroff を受け取り、見出しと理由と「次から表示しない」を持つ
ダイアログを開く。印は StorageSystem に保存し、選ばれていれば開かない。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
UiSystem で 1 度だけ組み立てる。描画処理には手を入れない。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
no-new は文として置かれた new だけを対象にする。関数から返せば規則に
触れないので、eslint-disable の 5 行が要らなくなる。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
getData は Pixi の描画の途中で呼ばれる。受け取り側の例外で描画が止まら
ないよう、出来事の発生を 1 拍遅らせる。試験も 1 拍待つ形に直す。

説明欄に osmlayeroff を足し、本文の Plateau を PLATEAU に揃えて見出しと
同じ表記にする。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
試験を足す課題では静的検査も実行する。初版は Task 2 に入れておらず
no-new の違反 5 件を見逃した。試験の生成は mountDialog 経由に直す。

UiSystem の持ち物の null 初期化を Task 3 に書き足す。同ファイルの
既存の慣習で、初版に書き漏らしていた。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@nyampire

Copy link
Copy Markdown
Owner Author

#54 に置き換えたため close します。

この Pull Request は、OSM のデータのレイヤーが消えているときに PLATEAU の候補を伏せる理由を、ダイアログで伝えるものでした。

その後、伏せること自体をやめる方針に変えました。
レイヤーが消えているあいだも建物は表示したままにし、OSM への追加だけを止めます。
理由は候補の縞模様と、追加のボタンの無効化と説明で伝わるため、ダイアログは不要になりました。

#54 をマージし、公開中のサイトへ反映済みです。

@nyampire nyampire closed this Sep 10, 2026
@nyampire
nyampire deleted the feature/plateau-osm-layer-off-notice branch September 11, 2026 05:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant