From 2c338ad5030059e0297b2187ff47cfb1e95d690d Mon Sep 17 00:00:00 2001 From: taminororo <169162271+taminororo@users.noreply.github.com> Date: Wed, 30 Sep 2026 11:58:43 +0700 Subject: [PATCH 1/6] =?UTF-8?q?docs:=20GAS=20=E3=81=AE=E6=89=B1=E3=81=84?= =?UTF-8?q?=E3=83=BB=E3=83=9E=E3=83=8B=E3=83=A5=E3=82=A2=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E7=B4=90=E4=BB=98=E3=81=91=E3=83=BBWeb=20=E3=81=A0=E3=81=91?= =?UTF-8?q?=E3=81=AE=E9=85=8D=E5=B8=83=E3=83=BB=E6=9C=AC=E7=95=AA=E3=81=AE?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E5=BE=A9=E5=B8=B0=E3=81=AE=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E3=82=92=20ADR=EF=BC=880007=E3=80=9C0010=EF=BC=89=E3=81=AB?= =?UTF-8?q?=E6=AE=8B=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/decisions/0007-gas-live-is-source.md | 55 ++++++++++++++++++++++ docs/decisions/0008-manual-link-by-name.md | 52 ++++++++++++++++++++ docs/decisions/0009-mobile-web-only.md | 45 ++++++++++++++++++ docs/decisions/0010-prod-auto-restart.md | 49 +++++++++++++++++++ docs/decisions/README.md | 4 ++ 5 files changed, 205 insertions(+) create mode 100644 docs/decisions/0007-gas-live-is-source.md create mode 100644 docs/decisions/0008-manual-link-by-name.md create mode 100644 docs/decisions/0009-mobile-web-only.md create mode 100644 docs/decisions/0010-prod-auto-restart.md diff --git a/docs/decisions/0007-gas-live-is-source.md b/docs/decisions/0007-gas-live-is-source.md new file mode 100644 index 00000000..3b7bbfbf --- /dev/null +++ b/docs/decisions/0007-gas-live-is-source.md @@ -0,0 +1,55 @@ +# 0007: GAS はライブの Apps Script を元データとし、gas/ はある時点の写しとして扱う + +- 状態:採用 +- 決めた日:2026-08-31 +- 決めた人:45th の PM +- 確信度:記録なし +- 出典:#466、#467、#469、#481、#482 + +## 背景 + +SeeFT の GAS は、スプレッドシートに付いた Apps Script のプロジェクトとして、Google のクラウド上で動いている。スプレッドシートのエディタから直接書き換えられるので、誰かがそこで直すと、リポジトリの `gas/` は変わらないまま、動いているコード(ライブ)だけが変わる。 + +2026-08-27 に、`gas/task/` にあった 44th の送信用のファイルを今のコードだと思い込み、年度の値とシート名を直す issue(#466)と PR(#467)を作った。ところが、ライブの GAS は年度をスクリプトのプロパティから読んでいて、シートも1枚にまとまっていた。直そうとした問題は、ライブにはどちらも無かった。PR は閉じ、issue は書き直した。 + +この少し前(8/26)に、ライブの GAS にあってリポジトリに無かったファイル(名簿とタスクの送信、人数チェックなど)を #469 で取り込んでいた。その後もライブは変わり続け、#481(8/31)で取り込み直したときには、ライブのファイルは8つになっていた。 + +## 候補 + +| 候補 | 良い点 | 悪い点 | +| --- | --- | --- | +| 今のまま、決まりを作らない | 手間がない | リポジトリのコードを今のコードだと思い込む事故がまた起きる | +| リポジトリを元データにし、ライブへはリポジトリからだけ反映する | リポジトリを読めば今のコードが分かる | エディタから直接書き換えることは止められない。GAS を見る CI も無い | +| ライブを元データとし、リポジトリはある時点の写しとして扱う。作業はライブを取ってくることから始める | 事故の原因(写しを今のコードだと思うこと)を手順で防げる | リポジトリだけを読んでも今のコードは分からない | + +2つ目の案を具体的に比べた記録は無い。 + +## 決定 + +GAS の元データは、ライブの Apps Script とする。`gas/` は、ある時点でライブから取ってきた写しとして扱う(#481)。 + +`gas/README.md` に、次のことを書いた。 + +- `gas/` のコードを読んで「今はこう動いている」と判断しない +- GAS の作業は、`clasp clone` でライブを取ってくることから始める(リポジトリの外の一時ディレクトリで) +- `gas/task/` は 44th のもので、今は使っていない +- ライブに反映する前に、全ファイルをつなげて構文を確かめる +- ライブを取り込むコミットに、修正を混ぜない + +## 理由 + +リポジトリを元データにする案を選ばなかった理由の記録は無い。 + +確かめられる事実は2つある。スプレッドシートのエディタからの書き換えは止められない。`.github/workflows/` には GAS を見るワークフローが無く、リポジトリとライブがずれても何も知らせない。この2つがある限り、リポジトリを元データと決めても、ずれは起こりうる。そのため、ずれることを前提にして、作業の手順で事故を防ぐ方を選んだ、というのは推測である。 + +## 前提 + +- 手順の本体は `gas/README.md` +- GAS を見るワークフローが `.github/workflows/` に無いこと。GAS を CI から反映する仕組みを作るなら、この ADR を見直す +- 45th のシフトのスプレッドシートの GAS は `gas/shift/` に写してある + +## 結果 + +#481(2026-08-31)で、ライブの8ファイルを取り込み直した。その後も、ライブで直してからリポジトリに写す PR を出している(例:#550、レスキューの GAS)。 + +## 追記 diff --git a/docs/decisions/0008-manual-link-by-name.md b/docs/decisions/0008-manual-link-by-name.md new file mode 100644 index 00000000..db866f29 --- /dev/null +++ b/docs/decisions/0008-manual-link-by-name.md @@ -0,0 +1,52 @@ +# 0008: タスクとマニュアルの紐付けは、タスク一覧の URL の列と対応表で行い、キーはマニュアル名にする + +- 状態:採用 +- 決めた日:2026-08-27(キーをマニュアル名にそろえたのは 2026-09-01) +- 決めた人:45th の PM +- 確信度:記録なし +- 出典:#452、#465、#466、#473、#497、#498 + +## 背景 + +45th では、シフトのカードから、そのタスクのマニュアル(ドキュメント版とスライド版)を開けるようにしたかった。そのためには、タスクごとにマニュアルの URL を SeeFT に送る必要があった。 + +シフトのスプレッドシートのタスク一覧には、M列にそのタスクのマニュアル名が入っている(例:`45th_企画マニュアル_縁日`)。一方、マニュアルの割り当てを管理する別のスプレッドシートでは、マニュアル名が短い形(例:「配線マニュアル」)で、局ごとに付け方が違った。 + +## 候補 + +| 候補 | 良い点 | 悪い点 | +| --- | --- | --- | +| タスク一覧に URL の列(R列・S列)を足し、「マニュアルURL」シート(対応表)を M列のマニュアル名で引く | 対応表に1行足すと、同じマニュアル名のタスク全部に URL が入る。人が入力する場所が対応表だけになる | 列を足す手間がかかる。マニュアル名が変わると引けなくなる | +| GAS がマニュアルの割り当てのスプレッドシートを直接読んで、名前で突き合わせる | 列も対応表も要らない | 割り当て側の名前は局ごとに付け方が違い、M列の名前と機械的に突き合わせられない | +| マニュアルをアップロードするときに、タスクを指定して紐づける(#452) | 置いた瞬間に紐づく | 1つのマニュアルを使う複数のタスクを、1つずつ指定する必要がある | +| M列に入っている URL をそのままキーにする | 入っている値をそのまま使える | 入っていた URL は 44th のドキュメントを指していて、どのみち使えない | + +## 決定 + +シフトのスプレッドシートのタスク一覧に、R列(ドキュメント版の URL)と S列(スライド版の URL)を足す。どちらも「マニュアルURL」シートを、M列のマニュアル名で VLOOKUP して埋める。GAS のタスク送信が、この URL を SeeFT に送る(#465・#473)。 + +M列のキーはマニュアル名にそろえる。M列に URL が入っている行は、担当する局のタスクのファイル側で、45th のマニュアル名に書き換える(2026-09-01、#498)。 + +URL を直すときは、対応表を直して送り直す。SQL で `tasks` の URL を直接書き換えない。次の送信で、スプレッドシートの値に上書きされるためである。 + +## 理由 + +割り当て側の名前は、局ごとに付け方が違い、人が付けた名前に頼る突き合わせは当日まで不安が残る。M列のマニュアル名なら、タスク一覧の中で1つの形にそろっているので、対応表を1枚置けば引ける。対応表に1行足すだけで、同じマニュアルを使うタスクすべてに広がる(縁日なら1行で7タスク)。 + +2026-09-01 に確かめたとき、M列に URL が入っていた行は 66 行あり、どれも 44th のドキュメントを指していた(`docs/development/manual-html-operations.md`)。そのため、M列の URL はキーにしなかった。 + +## 前提 + +- URL の列を埋める GAS:`gas/shift/調査_マニュアルURL.js#fillManualUrlFormulas`、対応を確かめる GAS:`gas/shift/調査_マニュアルURL.js#checkManualUrlMapping` +- URL を送る GAS:`gas/shift/名簿タスク送信.js#buildTaskChanges_` +- 受け取る API:`api/lib/usecase/task_usecase.go#taskUseCase.UpdateTasksAndPlacesFromGAS`、`api/lib/internals/repository/task_repository.go#taskRepository.UpdateWithManualURL` +- 運用の手順は `docs/development/manual-html-operations.md`(「タスクへ紐付ける」と「どのタスクがどのマニュアルに対応するかの決め方」) +- マニュアルのドキュメント名を変えると、M列の値も変わり、対応表で引けなくなる。エラーは出ない + +## 結果 + +45th の技大祭では、この形でシフトのカードからマニュアルを開けるようにした。 + +アップロードするときに紐づける案の issue(#452)は、2026-09-30 の時点で閉じていない。 + +## 追記 diff --git a/docs/decisions/0009-mobile-web-only.md b/docs/decisions/0009-mobile-web-only.md new file mode 100644 index 00000000..0fb1117d --- /dev/null +++ b/docs/decisions/0009-mobile-web-only.md @@ -0,0 +1,45 @@ +# 0009: mobile は Flutter Web だけで配る + +- 状態:採用 +- 決めた日:不明(45th より前から。この扱いを確かめたのは 2026-07-11) +- 決めた人:不明 +- 確信度:記録なし +- 出典:#417 + +## 背景 + +mobile は Flutter で書いてあり、同じコードから、ブラウザで開く Web 版と、Android・iOS のアプリを作れる。SeeFT は、参加者がスマホのブラウザで開く Web 版だけを配っていて、アプリストアでは配っていない。 + +2026-07-11、マニュアル一覧に検索を足す PR(#417)に、CodeRabbit が指摘を付けた。「Android 11 以降は `AndroidManifest.xml` に `` が無いと、リンクを開く処理が失敗する」という内容だった。このとき、Web だけで配っていることを前提に、この指摘をどう扱うかを決める必要があった。 + +## 候補 + +| 候補 | 良い点 | 悪い点 | +| --- | --- | --- | +| Android・iOS のアプリとしても配る | ブラウザを開かずに使える。プッシュ通知などが使いやすい | ストアへの登録と、OS ごとのビルドと審査の手間がかかる | +| Web 版だけを配る | ビルドと配布が1つで済む。更新はサーバーの入れ替えだけで全員に届く | ブラウザの制限を受ける | + +## 決定 + +mobile は Flutter Web だけで配る。 + +そのため、Android や iOS のアプリにしか関わらない指摘(`AndroidManifest.xml` や `Info.plist` の設定など)は、対象外として扱う。Web 版では、これらのファイルは実行時に読まれず、ビルドした成果物にも入らない。 + +## 理由 + +Web 版だけにした当初の理由の記録は無い。 + +#417 の指摘を対象外にしたのは、Web 版でリンクを開く処理はブラウザの新しいタブを開くだけで、`AndroidManifest.xml` を読まないからである。PM がそう返信したあと、CodeRabbit は指摘を取り下げた。 + +## 前提 + +- mobile のビルドが Web 版だけであること:`mobile/Dockerfile` +- 本番の配信が、ビルドした Web 版のファイルを `mobile/python/server.py` で配る形であること:`docker-compose.prod.yml` +- `.github/workflows/` に、Android・iOS のアプリを作るワークフローが無いこと +- アプリとしても配ると決めたら、この ADR を置き換え、対象外にしていた指摘を見直す + +## 結果 + +45th の技大祭も、Web 版だけで運用した。 + +## 追記 diff --git a/docs/decisions/0010-prod-auto-restart.md b/docs/decisions/0010-prod-auto-restart.md new file mode 100644 index 00000000..16508f71 --- /dev/null +++ b/docs/decisions/0010-prod-auto-restart.md @@ -0,0 +1,49 @@ +# 0010: 本番のサーバーが止まったときに、自動で起動し直すようにする + +- 状態:提案 +- 決めた日:未定(提案したのは 2026-09-15) +- 決めた人:未定 +- 確信度:中(起動の順番を自動で守れるかを確かめていない。下の「前提」) +- 出典:#557、`docs/operations/deploy.md`(「自動では戻らない」)、`docs/operations/incidents-45th.md`(9/15) + +## 背景 + +2026-09-15 の未明、本番のサーバーが載っている物理ノードが、インフラ側のメンテナンスで止まった。本番は約3時間止まり、ノードが戻っても自動では戻らなかった。 + +本番は、コンテナ(CT)の中で Docker Compose を使って動いている。CT には、ノードが起動したときに一緒に起動する設定が無かった。`docker-compose.prod.yml` の4つのサービスにも、`restart:` の設定が無かった。そのため、ノードを起こす、CT を起こす、コンテナを起こす、の3段階すべてを人が手で行う必要があった。 + +ノードのメンテナンスは、SeeFT のコードやデプロイとは関係なく行われる。止まるたびに担当者が夜中に起きて復旧するのは、続けられない。 + +## 候補 + +| 候補 | 良い点 | 悪い点 | +| --- | --- | --- | +| 今のまま、止まったら人が起こす | 設定を変えなくてよい | 止まるたびに人手が要る。気づくまで止まったまま | +| CT の自動起動と、compose の `restart: unless-stopped` を設定する | ノードが戻れば、人がいなくても本番が戻る | 起動の順番(api を先に起こす)を自動で守れるかを確かめる必要がある | + +ほかの方法(監視して通知する、など)は比べていない。 + +## 決定 + +提案:次の2つを設定する。 + +- CT に、ノードの起動と一緒に起動する設定(`onboot: 1`)を足す +- `docker-compose.prod.yml` の4つのサービス(cloudflare・mobile・api・admin)に `restart: unless-stopped` を足す + +compose の DB のサービス(`nutfes-seeft-db`)は、本番では起こさない。本番は compose の外の DB を使っている。 + +## 理由 + +止まったのはインフラ側の都合で、SeeFT の側では止まること自体を防げない。防げない以上、止まっても人手なしで戻る方がよい。2つとも設定を1行ずつ足すだけで済む。 + +## 前提 + +- 本番の compose:`docker-compose.prod.yml`。2026-09-30 の時点で、どのサービスにも `restart:` は無い +- 手で復旧するときは、api を先に起こし、ログに `http server started` が出てから mobile などを起こしている(`docs/operations/deploy.md`)。api は起動のたびにインターネットからモジュールを取ってコンパイルし、DB につなぐ(`api/lib/externals/server/server.go#RunServer`、`api/lib/externals/db/db.go#ConnectMySQL`)。`restart:` だけで、この順番がなくても問題なく戻るかは確かめていない。設定したら、本番と同じ構成の検証環境で、CT ごと止めて戻るかを試す +- CT の設定はリポジトリの外にある。設定を変えられる人と手順は、非公開の別紙にある + +## 結果 + +2026-09-30 の時点で、どちらも設定していない(#557 のチェックリストに残っている)。 + +## 追記 diff --git a/docs/decisions/README.md b/docs/decisions/README.md index d44d99af..f181f030 100644 --- a/docs/decisions/README.md +++ b/docs/decisions/README.md @@ -102,3 +102,7 @@ python3 scripts/refcheck/refcheck.py docs/decisions/*.md | --- | --- | --- | | [0001](0001-record-decisions.md) | 判断の理由を ADR としてリポジトリに残す | 採用 | | [0002](0002-di-wiring-only.md) | di.go は部品の組み立てだけにし、定期実行などは externals の下に専用のパッケージを作って置く | 採用 | +| [0007](0007-gas-live-is-source.md) | GAS はライブの Apps Script を元データとし、gas/ はある時点の写しとして扱う | 採用 | +| [0008](0008-manual-link-by-name.md) | タスクとマニュアルの紐付けは、タスク一覧の URL の列と対応表で行い、キーはマニュアル名にする | 採用 | +| [0009](0009-mobile-web-only.md) | mobile は Flutter Web だけで配る | 採用 | +| [0010](0010-prod-auto-restart.md) | 本番のサーバーが止まったときに、自動で起動し直すようにする | 提案 | From ad1861416a78658bedf9b042af90420a76fe99ca Mon Sep 17 00:00:00 2001 From: taminororo <169162271+taminororo@users.noreply.github.com> Date: Wed, 30 Sep 2026 12:07:45 +0700 Subject: [PATCH 2/6] =?UTF-8?q?docs:=20ADR=20=E3=81=AE=E6=9B=B8=E3=81=8D?= =?UTF-8?q?=E6=96=B9=E3=82=92=E3=81=BB=E3=81=8B=E3=81=AE=20ADR=20=E3=81=A8?= =?UTF-8?q?=E3=81=9D=E3=82=8D=E3=81=88=E3=82=8B=EF=BC=88PR=20=E3=81=A8=20i?= =?UTF-8?q?ssue=20=E3=81=AE=E6=9B=B8=E3=81=8D=E5=88=86=E3=81=91=E3=80=81?= =?UTF-8?q?=E6=B1=BA=E3=82=81=E3=81=9F=E6=97=A5=E3=81=AE=E6=A0=B9=E6=8B=A0?= =?UTF-8?q?=E3=80=81=E4=BD=9C=E6=A5=AD=E3=83=A1=E3=83=A2=E3=81=AE=E5=87=BA?= =?UTF-8?q?=E5=85=B8=E3=80=81ADR=20=E3=81=A9=E3=81=86=E3=81=97=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=80=81=E3=82=A2=E3=82=AB=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AE=E5=91=BC=E3=81=B3=E6=96=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/decisions/0007-gas-live-is-source.md | 12 ++++++------ docs/decisions/0008-manual-link-by-name.md | 8 ++++---- docs/decisions/0009-mobile-web-only.md | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/decisions/0007-gas-live-is-source.md b/docs/decisions/0007-gas-live-is-source.md index 3b7bbfbf..00e5e10b 100644 --- a/docs/decisions/0007-gas-live-is-source.md +++ b/docs/decisions/0007-gas-live-is-source.md @@ -1,18 +1,18 @@ # 0007: GAS はライブの Apps Script を元データとし、gas/ はある時点の写しとして扱う - 状態:採用 -- 決めた日:2026-08-31 +- 決めた日:2026-08-31(PR #481 をマージした日) - 決めた人:45th の PM - 確信度:記録なし -- 出典:#466、#467、#469、#481、#482 +- 出典:#466、PR #467、PR #469、PR #481、#482 ## 背景 SeeFT の GAS は、スプレッドシートに付いた Apps Script のプロジェクトとして、Google のクラウド上で動いている。スプレッドシートのエディタから直接書き換えられるので、誰かがそこで直すと、リポジトリの `gas/` は変わらないまま、動いているコード(ライブ)だけが変わる。 -2026-08-27 に、`gas/task/` にあった 44th の送信用のファイルを今のコードだと思い込み、年度の値とシート名を直す issue(#466)と PR(#467)を作った。ところが、ライブの GAS は年度をスクリプトのプロパティから読んでいて、シートも1枚にまとまっていた。直そうとした問題は、ライブにはどちらも無かった。PR は閉じ、issue は書き直した。 +2026-08-27 に、`gas/task/` にあった 44th の送信用のファイルを、今のコードだと思い込んだ。そして、年度の値とシート名を直す issue(#466)と PR #467 を作った。ところが、ライブの GAS は年度をスクリプトのプロパティから読んでいて、シートも1枚にまとまっていた。直そうとした問題は、ライブにはどちらも無かった。PR は閉じ、issue は書き直した。 -この少し前(8/26)に、ライブの GAS にあってリポジトリに無かったファイル(名簿とタスクの送信、人数チェックなど)を #469 で取り込んでいた。その後もライブは変わり続け、#481(8/31)で取り込み直したときには、ライブのファイルは8つになっていた。 +この少し前(8/26)に、ライブの GAS にあってリポジトリに無かったファイル(名簿とタスクの送信、人数チェックなど)を PR #469 で取り込んでいた。その後もライブは変わり続け、PR #481(8/31)で取り込み直したときには、ライブのファイルは8つになっていた。 ## 候補 @@ -26,7 +26,7 @@ SeeFT の GAS は、スプレッドシートに付いた Apps Script のプロ ## 決定 -GAS の元データは、ライブの Apps Script とする。`gas/` は、ある時点でライブから取ってきた写しとして扱う(#481)。 +GAS の元データは、ライブの Apps Script とする。`gas/` は、ある時点でライブから取ってきた写しとして扱う(PR #481)。 `gas/README.md` に、次のことを書いた。 @@ -50,6 +50,6 @@ GAS の元データは、ライブの Apps Script とする。`gas/` は、あ ## 結果 -#481(2026-08-31)で、ライブの8ファイルを取り込み直した。その後も、ライブで直してからリポジトリに写す PR を出している(例:#550、レスキューの GAS)。 +PR #481(2026-08-31)で、ライブの8ファイルを取り込み直した。その後も、ライブで直してからリポジトリに写す PR を出している(例:PR #550、レスキューの GAS)。 ## 追記 diff --git a/docs/decisions/0008-manual-link-by-name.md b/docs/decisions/0008-manual-link-by-name.md index db866f29..6237ea85 100644 --- a/docs/decisions/0008-manual-link-by-name.md +++ b/docs/decisions/0008-manual-link-by-name.md @@ -1,10 +1,10 @@ # 0008: タスクとマニュアルの紐付けは、タスク一覧の URL の列と対応表で行い、キーはマニュアル名にする - 状態:採用 -- 決めた日:2026-08-27(キーをマニュアル名にそろえたのは 2026-09-01) +- 決めた日:2026-08-27(PM の作業メモ)。キーをマニュアル名にそろえたのは 2026-09-01(`docs/development/manual-html-operations.md`) - 決めた人:45th の PM - 確信度:記録なし -- 出典:#452、#465、#466、#473、#497、#498 +- 出典:#452、PR #465、#466、PR #473、#497、PR #498 ## 背景 @@ -23,9 +23,9 @@ ## 決定 -シフトのスプレッドシートのタスク一覧に、R列(ドキュメント版の URL)と S列(スライド版の URL)を足す。どちらも「マニュアルURL」シートを、M列のマニュアル名で VLOOKUP して埋める。GAS のタスク送信が、この URL を SeeFT に送る(#465・#473)。 +シフトのスプレッドシートのタスク一覧に、R列(ドキュメント版の URL)と S列(スライド版の URL)を足す。どちらも「マニュアルURL」シートを、M列のマニュアル名で VLOOKUP して埋める。GAS のタスク送信が、この URL を SeeFT に送る(PR #465・PR #473)。 -M列のキーはマニュアル名にそろえる。M列に URL が入っている行は、担当する局のタスクのファイル側で、45th のマニュアル名に書き換える(2026-09-01、#498)。 +M列のキーはマニュアル名にそろえる。M列に URL が入っている行は、担当する局のタスクのファイル側で、45th のマニュアル名に書き換える(2026-09-01、PR #498)。 URL を直すときは、対応表を直して送り直す。SQL で `tasks` の URL を直接書き換えない。次の送信で、スプレッドシートの値に上書きされるためである。 diff --git a/docs/decisions/0009-mobile-web-only.md b/docs/decisions/0009-mobile-web-only.md index 0fb1117d..48558054 100644 --- a/docs/decisions/0009-mobile-web-only.md +++ b/docs/decisions/0009-mobile-web-only.md @@ -4,13 +4,13 @@ - 決めた日:不明(45th より前から。この扱いを確かめたのは 2026-07-11) - 決めた人:不明 - 確信度:記録なし -- 出典:#417 +- 出典:PR #417 ## 背景 mobile は Flutter で書いてあり、同じコードから、ブラウザで開く Web 版と、Android・iOS のアプリを作れる。SeeFT は、参加者がスマホのブラウザで開く Web 版だけを配っていて、アプリストアでは配っていない。 -2026-07-11、マニュアル一覧に検索を足す PR(#417)に、CodeRabbit が指摘を付けた。「Android 11 以降は `AndroidManifest.xml` に `` が無いと、リンクを開く処理が失敗する」という内容だった。このとき、Web だけで配っていることを前提に、この指摘をどう扱うかを決める必要があった。 +2026-07-11、マニュアル一覧に検索を足す PR #417 に、CodeRabbit が指摘を付けた。「Android 11 以降は `AndroidManifest.xml` に `` が無いと、リンクを開く処理が失敗する」という内容だった。このとき、Web だけで配っていることを前提に、この指摘をどう扱うかを決める必要があった。 ## 候補 @@ -29,7 +29,7 @@ mobile は Flutter Web だけで配る。 Web 版だけにした当初の理由の記録は無い。 -#417 の指摘を対象外にしたのは、Web 版でリンクを開く処理はブラウザの新しいタブを開くだけで、`AndroidManifest.xml` を読まないからである。PM がそう返信したあと、CodeRabbit は指摘を取り下げた。 +PR #417 の指摘を対象外にしたのは、Web 版でリンクを開く処理はブラウザの新しいタブを開くだけで、`AndroidManifest.xml` を読まないからである。PM がそう返信したあと、CodeRabbit は指摘を取り下げた。 ## 前提 From 0c265f3194d53f341ee10a6b88875c2bb931005a Mon Sep 17 00:00:00 2001 From: taminororo <169162271+taminororo@users.noreply.github.com> Date: Wed, 30 Sep 2026 12:13:05 +0700 Subject: [PATCH 3/6] =?UTF-8?q?docs:=20ADR=200009=20=E3=81=AE=E6=B1=BA?= =?UTF-8?q?=E3=82=81=E3=81=9F=E6=97=A5=E3=81=A8=E6=B1=BA=E3=82=81=E3=81=9F?= =?UTF-8?q?=E4=BA=BA=E3=82=92=E3=80=8C=E8=A8=98=E9=8C=B2=E3=81=AA=E3=81=97?= =?UTF-8?q?=E3=80=8D=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/decisions/0009-mobile-web-only.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/decisions/0009-mobile-web-only.md b/docs/decisions/0009-mobile-web-only.md index 48558054..4b10bd87 100644 --- a/docs/decisions/0009-mobile-web-only.md +++ b/docs/decisions/0009-mobile-web-only.md @@ -1,8 +1,8 @@ # 0009: mobile は Flutter Web だけで配る - 状態:採用 -- 決めた日:不明(45th より前から。この扱いを確かめたのは 2026-07-11) -- 決めた人:不明 +- 決めた日:記録なし(45th より前から。この扱いを確かめたのは 2026-07-11) +- 決めた人:記録なし - 確信度:記録なし - 出典:PR #417 From 6c72f31977123e1dc144c2fa91ad0e17bdbee3fa Mon Sep 17 00:00:00 2001 From: taminororo <169162271+taminororo@users.noreply.github.com> Date: Wed, 30 Sep 2026 12:24:25 +0700 Subject: [PATCH 4/6] =?UTF-8?q?docs:=20ADR=20=E3=81=AE=E3=80=8C=E7=A2=BA?= =?UTF-8?q?=E4=BF=A1=E5=BA=A6=E3=80=8D=E3=81=AE=E6=AC=84=E3=82=92=E3=80=8C?= =?UTF-8?q?=E6=B1=BA=E3=82=81=E3=81=9F=E3=81=A8=E3=81=8D=E3=81=AE=E8=87=AA?= =?UTF-8?q?=E4=BF=A1=E3=80=8D=E3=81=AB=E6=94=B9=E3=82=81=E3=82=8B=EF=BC=88?= =?UTF-8?q?#590=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/decisions/0007-gas-live-is-source.md | 2 +- docs/decisions/0008-manual-link-by-name.md | 2 +- docs/decisions/0009-mobile-web-only.md | 2 +- docs/decisions/0010-prod-auto-restart.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/decisions/0007-gas-live-is-source.md b/docs/decisions/0007-gas-live-is-source.md index 00e5e10b..c44f0bc6 100644 --- a/docs/decisions/0007-gas-live-is-source.md +++ b/docs/decisions/0007-gas-live-is-source.md @@ -3,7 +3,7 @@ - 状態:採用 - 決めた日:2026-08-31(PR #481 をマージした日) - 決めた人:45th の PM -- 確信度:記録なし +- 決めたときの自信:記録なし - 出典:#466、PR #467、PR #469、PR #481、#482 ## 背景 diff --git a/docs/decisions/0008-manual-link-by-name.md b/docs/decisions/0008-manual-link-by-name.md index 6237ea85..7a58123f 100644 --- a/docs/decisions/0008-manual-link-by-name.md +++ b/docs/decisions/0008-manual-link-by-name.md @@ -3,7 +3,7 @@ - 状態:採用 - 決めた日:2026-08-27(PM の作業メモ)。キーをマニュアル名にそろえたのは 2026-09-01(`docs/development/manual-html-operations.md`) - 決めた人:45th の PM -- 確信度:記録なし +- 決めたときの自信:記録なし - 出典:#452、PR #465、#466、PR #473、#497、PR #498 ## 背景 diff --git a/docs/decisions/0009-mobile-web-only.md b/docs/decisions/0009-mobile-web-only.md index 4b10bd87..72349cbe 100644 --- a/docs/decisions/0009-mobile-web-only.md +++ b/docs/decisions/0009-mobile-web-only.md @@ -3,7 +3,7 @@ - 状態:採用 - 決めた日:記録なし(45th より前から。この扱いを確かめたのは 2026-07-11) - 決めた人:記録なし -- 確信度:記録なし +- 決めたときの自信:記録なし - 出典:PR #417 ## 背景 diff --git a/docs/decisions/0010-prod-auto-restart.md b/docs/decisions/0010-prod-auto-restart.md index 16508f71..b6a9ea0a 100644 --- a/docs/decisions/0010-prod-auto-restart.md +++ b/docs/decisions/0010-prod-auto-restart.md @@ -3,7 +3,7 @@ - 状態:提案 - 決めた日:未定(提案したのは 2026-09-15) - 決めた人:未定 -- 確信度:中(起動の順番を自動で守れるかを確かめていない。下の「前提」) +- 決めたときの自信:中(起動の順番を自動で守れるかを確かめていない。下の「前提」) - 出典:#557、`docs/operations/deploy.md`(「自動では戻らない」)、`docs/operations/incidents-45th.md`(9/15) ## 背景 From 26df63ef594bb752f7af12facd1ee7a050fd919d Mon Sep 17 00:00:00 2001 From: taminororo <169162271+taminororo@users.noreply.github.com> Date: Wed, 30 Sep 2026 12:33:57 +0700 Subject: [PATCH 5/6] =?UTF-8?q?docs:=20ADR=20=E3=81=AE=E6=AC=84=E3=82=92?= =?UTF-8?q?=E3=80=8C=E6=B1=BA=E5=AE=9A=E3=81=AE=E4=BF=A1=E9=A0=BC=E5=BA=A6?= =?UTF-8?q?=E3=80=8D=E3=81=AB=E6=94=B9=E3=82=81=E3=80=81=E6=A0=B9=E6=8B=A0?= =?UTF-8?q?=E3=82=92=E6=9B=B8=E3=81=8F=E8=A1=8C=E3=82=92=E8=B6=B3=E3=81=99?= =?UTF-8?q?=EF=BC=88#590=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/decisions/0007-gas-live-is-source.md | 3 ++- docs/decisions/0008-manual-link-by-name.md | 3 ++- docs/decisions/0009-mobile-web-only.md | 3 ++- docs/decisions/0010-prod-auto-restart.md | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/decisions/0007-gas-live-is-source.md b/docs/decisions/0007-gas-live-is-source.md index c44f0bc6..42ab4810 100644 --- a/docs/decisions/0007-gas-live-is-source.md +++ b/docs/decisions/0007-gas-live-is-source.md @@ -3,7 +3,8 @@ - 状態:採用 - 決めた日:2026-08-31(PR #481 をマージした日) - 決めた人:45th の PM -- 決めたときの自信:記録なし +- 決定の信頼度:記録なし + - 根拠:#466・#467・PR #469・PR #481・#482 には、決めたことと取り込みの手順は書かれているが、どれだけ確かだと思っていたかは書かれていない - 出典:#466、PR #467、PR #469、PR #481、#482 ## 背景 diff --git a/docs/decisions/0008-manual-link-by-name.md b/docs/decisions/0008-manual-link-by-name.md index 7a58123f..50a08b1d 100644 --- a/docs/decisions/0008-manual-link-by-name.md +++ b/docs/decisions/0008-manual-link-by-name.md @@ -3,7 +3,8 @@ - 状態:採用 - 決めた日:2026-08-27(PM の作業メモ)。キーをマニュアル名にそろえたのは 2026-09-01(`docs/development/manual-html-operations.md`) - 決めた人:45th の PM -- 決めたときの自信:記録なし +- 決定の信頼度:記録なし + - 根拠:#452・PR #465・#466・PR #473・#497・PR #498 と `docs/development/manual-html-operations.md` には、決めたことと理由は書かれているが、どれだけ確かだと思っていたかは書かれていない - 出典:#452、PR #465、#466、PR #473、#497、PR #498 ## 背景 diff --git a/docs/decisions/0009-mobile-web-only.md b/docs/decisions/0009-mobile-web-only.md index 72349cbe..e302167b 100644 --- a/docs/decisions/0009-mobile-web-only.md +++ b/docs/decisions/0009-mobile-web-only.md @@ -3,7 +3,8 @@ - 状態:採用 - 決めた日:記録なし(45th より前から。この扱いを確かめたのは 2026-07-11) - 決めた人:記録なし -- 決めたときの自信:記録なし +- 決定の信頼度:記録なし + - 根拠:Web だけで配ると決めたときの記録が見つかっていない。出典の PR #417 は、この扱いを確かめたときの記録で、決めたときの記録ではない - 出典:PR #417 ## 背景 diff --git a/docs/decisions/0010-prod-auto-restart.md b/docs/decisions/0010-prod-auto-restart.md index b6a9ea0a..ff750ac9 100644 --- a/docs/decisions/0010-prod-auto-restart.md +++ b/docs/decisions/0010-prod-auto-restart.md @@ -3,7 +3,8 @@ - 状態:提案 - 決めた日:未定(提案したのは 2026-09-15) - 決めた人:未定 -- 決めたときの自信:中(起動の順番を自動で守れるかを確かめていない。下の「前提」) +- 決定の信頼度:中 + - 根拠:2つの設定を足せば、ノードが戻ったときに CT とコンテナが起動するところまでは見込める。ただし、本番と同じ構成では試していない。とくに、api を先に起こす順番を `restart:` だけで守れるかを確かめていない(下の「前提」) - 出典:#557、`docs/operations/deploy.md`(「自動では戻らない」)、`docs/operations/incidents-45th.md`(9/15) ## 背景 From 8decab2953fad9bf300d16a737f050534db27e9f Mon Sep 17 00:00:00 2001 From: taminororo <169162271+taminororo@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:37:01 +0700 Subject: [PATCH 6/6] =?UTF-8?q?docs:=20ADR=200007=E3=80=9C0009=20=E3=81=AE?= =?UTF-8?q?=E6=97=A5=E4=BB=98=E3=83=BB=E7=A2=BA=E8=AA=8D=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=83=BB=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AE=E5=BC=95=E7=94=A8=E3=82=92=E5=87=BA?= =?UTF-8?q?=E5=85=B8=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/decisions/0007-gas-live-is-source.md | 2 +- docs/decisions/0008-manual-link-by-name.md | 3 ++- docs/decisions/0009-mobile-web-only.md | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/decisions/0007-gas-live-is-source.md b/docs/decisions/0007-gas-live-is-source.md index 42ab4810..8a9a946b 100644 --- a/docs/decisions/0007-gas-live-is-source.md +++ b/docs/decisions/0007-gas-live-is-source.md @@ -11,7 +11,7 @@ SeeFT の GAS は、スプレッドシートに付いた Apps Script のプロジェクトとして、Google のクラウド上で動いている。スプレッドシートのエディタから直接書き換えられるので、誰かがそこで直すと、リポジトリの `gas/` は変わらないまま、動いているコード(ライブ)だけが変わる。 -2026-08-27 に、`gas/task/` にあった 44th の送信用のファイルを、今のコードだと思い込んだ。そして、年度の値とシート名を直す issue(#466)と PR #467 を作った。ところが、ライブの GAS は年度をスクリプトのプロパティから読んでいて、シートも1枚にまとまっていた。直そうとした問題は、ライブにはどちらも無かった。PR は閉じ、issue は書き直した。 +2026-08-26 の夜(日本時間。以下同じ)に、`gas/task/` にあった 44th の送信用のファイルを、今のコードだと思い込んだ。そして、年度の値とシート名を直す issue(#466)と PR #467 を作った。ところが、ライブの GAS は年度をスクリプトのプロパティから読んでいて、シートも1枚にまとまっていた。直そうとした問題は、ライブにはどちらも無かった。日付が変わった直後(8/27 の 0 時半ごろ)に PR #467 を閉じ、#466 を書き直した。 この少し前(8/26)に、ライブの GAS にあってリポジトリに無かったファイル(名簿とタスクの送信、人数チェックなど)を PR #469 で取り込んでいた。その後もライブは変わり続け、PR #481(8/31)で取り込み直したときには、ライブのファイルは8つになっていた。 diff --git a/docs/decisions/0008-manual-link-by-name.md b/docs/decisions/0008-manual-link-by-name.md index 50a08b1d..18e5d13a 100644 --- a/docs/decisions/0008-manual-link-by-name.md +++ b/docs/decisions/0008-manual-link-by-name.md @@ -38,7 +38,8 @@ URL を直すときは、対応表を直して送り直す。SQL で `tasks` の ## 前提 -- URL の列を埋める GAS:`gas/shift/調査_マニュアルURL.js#fillManualUrlFormulas`、対応を確かめる GAS:`gas/shift/調査_マニュアルURL.js#checkManualUrlMapping` +- URL の列を埋める GAS:`gas/shift/調査_マニュアルURL.js#fillManualUrlFormulas` +- 対応を確かめる GAS は2つある。`gas/shift/調査_マニュアルURL.js#checkManualUrlMapping` は、タスクを送る前に、対応表に無いマニュアル名・空白や全角の違いで引けない名前・対応表の重複・URL の欠けを洗い出す。`gas/shift/調査_マニュアルURL.js#inspectManualUrlLookup` は、R列と S列の VLOOKUP が引けているかを見る一時的な調査用で、確認が済んだら消してよいとコメントに書いてある - URL を送る GAS:`gas/shift/名簿タスク送信.js#buildTaskChanges_` - 受け取る API:`api/lib/usecase/task_usecase.go#taskUseCase.UpdateTasksAndPlacesFromGAS`、`api/lib/internals/repository/task_repository.go#taskRepository.UpdateWithManualURL` - 運用の手順は `docs/development/manual-html-operations.md`(「タスクへ紐付ける」と「どのタスクがどのマニュアルに対応するかの決め方」) diff --git a/docs/decisions/0009-mobile-web-only.md b/docs/decisions/0009-mobile-web-only.md index e302167b..f25403a3 100644 --- a/docs/decisions/0009-mobile-web-only.md +++ b/docs/decisions/0009-mobile-web-only.md @@ -11,7 +11,7 @@ mobile は Flutter で書いてあり、同じコードから、ブラウザで開く Web 版と、Android・iOS のアプリを作れる。SeeFT は、参加者がスマホのブラウザで開く Web 版だけを配っていて、アプリストアでは配っていない。 -2026-07-11、マニュアル一覧に検索を足す PR #417 に、CodeRabbit が指摘を付けた。「Android 11 以降は `AndroidManifest.xml` に `` が無いと、リンクを開く処理が失敗する」という内容だった。このとき、Web だけで配っていることを前提に、この指摘をどう扱うかを決める必要があった。 +2026-07-11、マニュアル一覧に検索を足す PR #417 に、CodeRabbit が指摘を付けた。「Android 11 以降でリンクが無反応になる可能性があります」という指摘で、`AndroidManifest.xml` に `` が無いと `canLaunchUrl` が `false` を返しやすいので、`launchUrl` を直接呼ぶか `` を足すように、という内容だった。このとき、Web だけで配っていることを前提に、この指摘をどう扱うかを決める必要があった。 ## 候補