Skip to content

feat: next版 — カレンダー削除・ローカルAPI/MCP・Google連携・操作音 - #16

Merged
riiimparm merged 12 commits into
mainfrom
v1.3.0
Nov 2, 2026
Merged

riiimparm merged 12 commits into
mainfrom
v1.3.0

Conversation

@riiimparm

Copy link
Copy Markdown
Owner

概要

next版の7項目を実装。機能ごとに7コミットに分けています。

コミット 内容
remove: カレンダー機能を全削除 パネル・設定・i18n・react-day-picker 依存を除去。期日管理は従来どおり
feat: ローカルAPI + MCP 127.0.0.1 + Bearerトークン必須のHTTP API、依存ゼロのMCP stdioブリッジ
feat: Googleカレンダー/Tasks連携 PKCE + ループバックOAuth、一方向push
feat: 生成後にアイテムへフォーカス 入力欄を blur してアイテムへDOMフォーカス
fix: 赤インジケータの常時表示 期限超過がホバー時しか見えなかった
fix: タグ表示順のバグ 編集時にタグ順が壊れ手動タグも消えていた
feat: 操作音 Web Audio合成、音源ファイル・依存なし、既定OFF

確認

  • tsc → vite build 成功
  • cargo build / cargo test --lib 成功
  • node --test src/utils/*.test.ts → pass 2 / fail 0
  • ローカルAPIは実機スモークテスト済み(トークン無し→401、作成→一覧に出る)

レビューしてほしい点

  1. Google連携は実アカウントでの疎通が未検証です。自動テストは終日イベントの日付計算・差分hash・PKCE S256・シークレット非漏洩の4点のみ。docs/google-sync.md の手順でクライアントIDを発行してからの実機確認が必要です。
  2. Google設定UIの文言は i18n.ts ではなく GoogleSyncSettings.tsx 内のローカル辞書にあります(20キー超の競合回避のため)。統一するか要判断。
  3. OAuthスコープに userinfo.email が含まれます(接続中アカウント表示のため)。不要なら外せます。
  4. docs/ が .gitignore 対象のため docs/google-sync.md を -f で追加しています。ignore ルールを見直すか要判断。

既知の割り切り(ponytail: コメントで明記)

  • ローカルAPIの書き込みとアプリ本体の保存が重なると後勝ち
  • FastTask側での削除はGoogleに伝播しない
  • トークンファイルの 0600 は unix のみ(Windows未対応)

右側カレンダーパネルとその設定・i18n・react-day-picker依存を取り除く。
期日(dueDate)の入力・表示・パース・通知・並び替えは従来どおり。
127.0.0.1にバインドし、Bearerトークン必須のHTTP APIを追加。
GET/POST/PATCH/DELETE /tasks でタスクを操作でき、変更は
external-data-changed イベントでフロントに反映される。
依存ゼロのMCP stdioブリッジを mcp/ に同梱。
PKCE + ループバックのOAuthで接続し、期日付きタスクを終日イベントとして、
タスク本体をGoogle Tasksに作成・更新する一方向push。
トークンは app_data_dir に 0600 で保存し、data.json には混ぜない。
セットアップ手順は docs/google-sync.md。

docs/ は .gitignore 対象のため -f で追加している。
作成直後は入力欄を blur し、描画を待ってから生成されたアイテムに
DOMフォーカスを移す。アイテム側に data-task-id と tabIndex を付与。
期限超過タスクのチェックボックスが opacity-0 group-hover のままで、
マウスを乗せないと赤が見えなかった。isOverdue を表示条件に加える。
updateTask が autoTagsFor でタグを丸ごと再計算していたため、タグ順が
タグマスタの登録順に並び替わり、手動で付けたタグも消えていた。
既存順を保持し新規マッチのみ末尾に足す mergeAutoTags を追加。
タスクの作成・完了・削除・取り消しに短い効果音を追加。音源ファイルも
npm依存も使わず、オシレータと指数減衰エンベロープで合成する。
設定 soundEnabled は既定OFF、OFFの間は AudioContext を生成しない。
同種音は60msスロットルで連打時の重なりを防ぐ。
docs/google-sync.md を gh api /markdown(GitHubと同じGFMレンダラ)で
HTMLにビルドする scripts/build-docs.sh を追加。npm依存は増やさない。
設定画面から手順ページを開けるようにした。
docs/ の .gitignore ルールは配信のため削除。
@riiimparm

Copy link
Copy Markdown
Owner Author

追記: セットアップ手順を GitHub Pages で配信

  • docs/google-sync.md → docs/index.html を scripts/build-docs.sh でビルド(gh api /markdown = GitHub と同じ GFM レンダラ。npm 依存ゼロ、bash scripts/build-docs.sh でローカル再生成可)
  • Pages を main ブランチ /docs で有効化済み → https://riiimparm.github.io/FastTask/ (main マージ後に表示されます)
  • 設定画面の Google 連携セクションから「セットアップ手順を開く」で上記URLを開く
  • .gitignore の docs/ ルールは削除(PRの要確認4点目は解消)
  • docs/.nojekyll を置いてビルド済みHTMLをそのまま配信

ローカルで python3 -m http.server + ブラウザ描画を確認済み(ダークモード対応、見出し9・テーブル3が正しく描画)。

docs/<name>.md -> docs/<name>/index.html に出力し、公開URLを
/FastTask/<name>/ にする。ルートは各mdのH1と冒頭段落から
自動生成する一覧ページ。ドキュメントはmdを足すだけで増やせる。
自前の build-docs.sh とコミット済みHTMLを削除し、zensical.toml と
docs/index.md を追加。出力パスは従来どおり /google-sync/。
docs/ か zensical.toml の変更をトリガにCIでビルドし、mainへの
pushのみ GitHub Pages にデプロイする(PRはビルド確認だけ)。
Pages の公開元は GitHub Actions に変更済み。
完了音は C6-E6-G6 のアルペジオにバンドパスを上へ掃引する
ノイズを重ね、スカッと抜ける質感にした。
キー入力ごとに鳴る type 音を追加(12ms・ごく小音量・毎回ピッチを
わずかに散らす)。タイプは速度に追従するようスロットルを18msにし、
修飾キー単独とショートカット操作では鳴らさない。
zensical はCIで pip install、ローカルでは uvx 実行なので
リポジトリに uv プロジェクトは持たない。
@riiimparm
riiimparm merged commit ad6b394 into main Nov 2, 2026
2 checks passed
@riiimparm
riiimparm deleted the v1.3.0 branch November 9, 2026 04:03
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