# 開発概要 #### 目的 PR #259 (backend N+1修正) の過程で、GASディレクトリに対して CodeRabbit が指摘したバグ群をスコープ外として削除・resolve した。運用上は動作確認で問題が出ていないが、本物のバグが混ざっているため精査して対応する。 #### 開発期間 - 開始日: - 締切日: # 考えられる開発内容 ## 🔴 本物のバグ(優先度高) - [ ] `gas/shift/サイドバー動作.js:86` 演算子優先順位バグ - `if(swappingSheetName == null || !swappingCellRange == null)` は `(!swappingCellRange) == null` と評価され、常に `false` になる - 隣の `swappingSheetName == null` チェックで偶然弾けているだけで、片方だけnullのケースをガードできない - 修正: `|| swappingCellRange == null` - [ ] `gas/shift/サイドバー動作.js:29` 型の曖昧さ - `getValues()` は2D配列を返すので `shift` は `[value]` 形式。`shift == selectedShift` は JS の型強制で偶然動くが脆弱 - 修正: `shift[0] == selectedShift` ## 🟡 実害は小さいが要修正 - [ ] `gas/shift/コード.js:99` `console.log(changes[j - 1])` は j=0 で undefined を参照(log文なので実害なし) - 修正: `changes[changes.length - 1]`(他の関数と揃える) - [ ] `gas/shift/条件付き書式.js:40` `ui` 変数がこのファイルでは未定義で、別ファイル `コード.js` の top-level `var ui = SpreadsheetApp.getUi()` に暗黙依存 - GAS の全ファイルが同一グローバルスコープを共有する挙動に頼っていて脆い - 修正: このファイル内でも `const ui = SpreadsheetApp.getUi()` を用意する - [ ] `gas/task/タスク塗り分け.js:61` 重複変数 `suitable` と `properPeople` が両方 K列 (`srcData[row][10]`) を読んでいる - [ ] `gas/task/タスク塗り分け.js:7` エラーメッセージがシート名と不一致 (`'44thTask'` vs 実際 `'44thTask_準備日'`) ## 💅 マイナー改善 - [ ] `gas/rescue/onChange.js:16` / `gas/user/コード.js:10` `baseUrl` が null のときの早期バリデーション追加 - [ ] `gas/shift/Sidebar.html:105` `<使い方>` のHTMLエスケープ - [ ] `gas/shift/サイドバー動作.js:92` `getSheetByName` が null を返すケースの guard - [ ] `gas/shift/条件付き書式.js:27` `sheets` 配列を使う前に `.filter(s => s != null)` - [ ] `gas/task/(内田)タスク適当色割り当て.js:50` 空シート時のエッジケース # 備考 - PR #259 では GASディレクトリを丸ごと削除して N+1 修正のスコープに戻した。本issue対応時は develop から別ブランチを切って、GAS一式を取り戻して修正する運用を想定 - 関連 PR コメント: https://github.com/NUTFes/SeeFT/pull/259 (resolve済み、`Outdated` 状態)
開発概要
目的
PR #259 (backend N+1修正) の過程で、GASディレクトリに対して CodeRabbit が指摘したバグ群をスコープ外として削除・resolve した。運用上は動作確認で問題が出ていないが、本物のバグが混ざっているため精査して対応する。
開発期間
考えられる開発内容
🔴 本物のバグ(優先度高)
gas/shift/サイドバー動作.js:86演算子優先順位バグif(swappingSheetName == null || !swappingCellRange == null)は(!swappingCellRange) == nullと評価され、常にfalseになるswappingSheetName == nullチェックで偶然弾けているだけで、片方だけnullのケースをガードできない|| swappingCellRange == nullgas/shift/サイドバー動作.js:29型の曖昧さgetValues()は2D配列を返すのでshiftは[value]形式。shift == selectedShiftは JS の型強制で偶然動くが脆弱shift[0] == selectedShift🟡 実害は小さいが要修正
gas/shift/コード.js:99console.log(changes[j - 1])は j=0 で undefined を参照(log文なので実害なし)changes[changes.length - 1](他の関数と揃える)gas/shift/条件付き書式.js:40ui変数がこのファイルでは未定義で、別ファイルコード.jsの top-levelvar ui = SpreadsheetApp.getUi()に暗黙依存const ui = SpreadsheetApp.getUi()を用意するgas/task/タスク塗り分け.js:61重複変数suitableとproperPeopleが両方 K列 (srcData[row][10]) を読んでいるgas/task/タスク塗り分け.js:7エラーメッセージがシート名と不一致 ('44thTask'vs 実際'44thTask_準備日')💅 マイナー改善
gas/rescue/onChange.js:16/gas/user/コード.js:10baseUrlが null のときの早期バリデーション追加gas/shift/Sidebar.html:105<使い方>のHTMLエスケープgas/shift/サイドバー動作.js:92getSheetByNameが null を返すケースの guardgas/shift/条件付き書式.js:27sheets配列を使う前に.filter(s => s != null)gas/task/(内田)タスク適当色割り当て.js:50空シート時のエッジケース備考
Outdated状態)