From 301f5b3a20d3536252ae3caa84cc8bf68ee63bb6 Mon Sep 17 00:00:00 2001 From: kojira Date: Tue, 4 Aug 2026 00:32:05 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E3=81=8A=E3=81=BF=E3=81=8F=E3=81=98?= =?UTF-8?q?=E3=81=8C=E5=BC=95=E3=81=91=E3=82=8B=E3=81=8B=E3=81=A9=E3=81=86?= =?UTF-8?q?=E3=81=8B=E3=82=92=E9=96=8B=E3=81=8F=E5=89=8D=E3=81=AB=E5=88=86?= =?UTF-8?q?=E3=81=8B=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 次に引ける時刻は前回引いた瞬間に確定しているのに、どこにも覚えていなかった。 そのため「おみくじ」を開くたびに トークン取得 → omikujiGo(peek) の往復を 待たされ、そのあとで初めて「まだ引けない」と分かっていた。押してから待たされた 末に引けないと知らされるのが体感として一番つらい。 - 次に引ける時刻を localStorage に覚える(utils/omikujiCooldown.js)。 キーに github_id を含め、アカウント切替で前の人の残り時間を見せない - おみくじページはそれを読んで、通信を待たずにクールダウン表示から始める。 peek の応答が来たら上書きする(正はサーバー) - ヘッダのリンクは引けないとき「前回のおみくじ」になる。開く前に、引けるのか 前回の結果を見に行くだけなのかが分かる 表示を先出しするだけで、実際に引けるかは常にサーバーが決める。端末の時計は 信用せず8時間で頭打ちにする。 Co-Authored-By: Claude Opus 5 --- docs/backend.md | 17 ++++++ web/components/CommonHeader.vue | 45 ++++++++++++-- web/pages/omikuji.vue | 37 +++++++++++- web/scripts/test-omikuji-cooldown.js | 50 ++++++++++++++++ web/utils/omikujiCooldown.js | 88 ++++++++++++++++++++++++++++ 5 files changed, 232 insertions(+), 5 deletions(-) create mode 100644 web/scripts/test-omikuji-cooldown.js create mode 100644 web/utils/omikujiCooldown.js diff --git a/docs/backend.md b/docs/backend.md index ae211dc..3e5279d 100644 --- a/docs/backend.md +++ b/docs/backend.md @@ -444,6 +444,23 @@ Node版との差分(意図的な改善): 「引く」ボタン押下時に peek 無しで実際に抽選する。おみくじには参拝のようなポイント等の ゲーム報酬は無く、フレーバー(占い)のみ。 +### 引けるかどうかを開く前に伝える + +peek はサーバー往復(トークン取得 + `omikujiGo`。関数がコールドなら数秒)を伴うため、 +これだけに頼ると**「おみくじ」を開くたびにスピナーを見せられ、待った末に +「まだ引けない」と分かる**。次に引ける時刻は前回引いた瞬間に確定しているので、 +覚えておけば待たせる必要が無い。 + +- `web/utils/omikujiCooldown.js` が次に引ける時刻を localStorage に持つ + (キーに `github_id` を含め、アカウント切替で前の人の残り時間を見せない)。 + 純関数で `storage` を注入でき、`web/scripts/test-omikuji-cooldown.js` で検証する。 +- おみくじページはマウント時にこれを読み、残っていれば**通信を待たずに** + クールダウン表示から始める。peek の応答が来たら上書きする(正はサーバー)。 +- ヘッダのリンクは引けないと分かっているとき「前回のおみくじ」になる。 + 開く前に、引けるのか前回の結果を見に行くだけなのかが分かる。 +- あくまで表示を先出しするだけで、**実際に引けるかは常にサーバーが決める**。 + 端末の時計は信用せず、8時間(最長のクールダウン)で頭打ちにする。 + ### フロント - `web/pages/omikuji.vue`(状態管理・API呼び出し)と `web/components/OmikujiResult.vue` diff --git a/web/components/CommonHeader.vue b/web/components/CommonHeader.vue index 2734b76..b335903 100644 --- a/web/components/CommonHeader.vue +++ b/web/components/CommonHeader.vue @@ -38,7 +38,9 @@