Skip to content

🌍 001 システム全体像 (Overview)

登場人物・技術スタック・データフロー・Vercelの役割

設計書 v1.2 / 2026-05-06

0 上位思想

このシステム全体像は、000-I Intention Layer を上位思想、000 要求仕様 を上位仕様として読む。

俺の付箋は、単なる付箋アプリではなく、AIエージェント時代の「意図の置き場」である。 PC、iPhone/PWA、Google Drive、Vercel、通知基盤は、すべて Capture -> Land -> Persist -> Surface -> Act -> Resolve の loop を支える構成要素として扱う。

1 登場人物

以下7つの登場人物でこのアプリは構成されています。

凡例ユーザーのもの(PC・iPhone・Drive)開発者のもの(Vercel)外部サービス(APNs・Google OAuth2)

図 1-1 システム全体関係図

登場人物の役割一覧

表 1-1 登場人物の役割一覧

No登場人物一言で言うと何のために使うか
11⃣ 🖥 PC アプリデスクトップ付箋アプリ付箋の表示・編集・保存。iPhone に通知付きで送信。iPhone から受け取った本文・画像・動画を付箋として開く
22⃣ 📱 iPhone PWAホーム画面に追加した Web アプリPC からのノートを受け取り閲覧。メモを書き、画像・動画を添付して PC に送る
33⃣ ⚙️ Service WorkeriPhone の常駐プログラムアプリを閉じていても Push を受信してノートを保存・通知表示。IndexedDB がデータの唯一の保存場所
44⃣ ☁️ Google DrivePC と iPhone の中継所ノートデータを一時的に置く場所。処理したら即削除。開発者はアクセス不可
No登場人物一言で言うと何のために使うか
55⃣ 🌐 Vercel開発者が置いた Web サーバーiPhone PWA を配信。開発者が守る client_secret を iPhone に入れず、Google OAuth のトークン交換・更新だけを行う
66⃣ 🔑 Google OAuth2Drive 操作の許可を受け取る仕組みユーザーが Google にログインし、「俺の付箋が Drive のアプリ用ファイルを扱ってよい」と許可する
77⃣ 📡 APNs / FCM通知配信サーバーPC からの「通知してください」を受け取り iPhone に届ける。APNs は iPhone/Mac、FCM は Chrome/Android

2 技術スタック

PCアプリ・iPhone PWA・共有インフラの3層に分けて使用技術を整理します。

表 2-1 技術スタック一覧

🖥 PC アプリ
No領域技術・役割
1フレームワークTauri v2(WebView + Rust)
2UINext.js 14 / React 18 / TypeScript / Tailwind
3エディタCodeMirror 6(Markdown ハイライト・検索)
4バックエンドRust(AppState・ファイル I/O・Win32 API)
5データ保存ファイルシステム(JSON / Markdown)
6テストVitest(ユニット)/ Playwright(E2E)
📱 iPhone PWA
No領域技術・役割
1ページNext.js 14 App Router(app/viewer/page.tsx)
2配信Vercel(API Routes も同居)
3バックグラウンドService Worker(worker/index.js)
4ローカル DBIndexedDB(fusen-drafts)
5認証Google OAuth2(Vercel API 経由)
6通知Web Push / APNs / FCM
🌐 共有インフラ
No領域技術・役割
1ホスティングVercel(PWA 配信・OAuth2 API)
2データ中継Google Drive API(ユーザー所有)
3通知基盤APNs / FCM(Apple / Google 運営)
4CI / CDGitHub Actions(ビルド・Winget 自動リリース)

3 データフロー概要(2つのフロー)

PCアプリ・iPhone・Driveを結ぶ2つのデータの流れを概観します。

3.1 ➡️ フロー① PC → iPhone(メモを受け取る)

PCで書いたメモが、ロック画面の通知として iPhone に届くまでの全工程です。

図 3.1-1 PC → iPhone データフロー概要

3.2 ⬅️ フロー② iPhone → PC(メモを送る)

図 3.2-1 iPhone → PC データフロー概要


4 なぜ Vercel が必要か

この節は、主に開発者・保守担当向けです。Google OAuth2 の client_secret を iPhone に入れず、Vercel で扱う理由を説明します。

守っている対象:俺の付箋アプリ開発者が Google に登録した「俺の付箋アプリ」そのもの。 ユーザーに守ってもらう値ではありません。詳細な 3 者関係は 005_GLOSSARY 「0 登場人物と関係」 を参照。

ここでいう client は、ユーザーの iPhone や PC のことではなく、Google Cloud Console に登録した「俺の付箋アプリ」のこと。 client_id は Google がそのアプリを見分けるための公開ID、client_secret はそのアプリが本物であることを Google に示すための秘密値。

client_secret は俺の付箋アプリ開発者が Google Cloud Console で発行した「このアプリが本物であることを示す秘密値」。漏れると、悪意ある第三者が俺の付箋の OAuth 設定を悪用し、俺の付箋アプリ開発者のアプリ名義でトークン交換を試みるリスクがある。iPhone PWA のコードに埋め込むと、端末上で読めてしまう。

表 4-1 client_secret 保護方式の比較

No手法client_secret の場所問題点・利点
1✕ iPhone 直接iPhone PWA のコードに埋め込む端末上で読めてしまうため、開発者のアプリ名義の OAuth 処理を悪用される恐れがある
2✔ Vercel 経由Vercel の環境変数に置くiPhone には届かない。Vercel のサーバー内で、トークン交換・更新の瞬間だけ使う

5 改版履歴

表 5-1 改版履歴

Noバージョン日付変更内容
11.026-04-19設計書を 001/002/003 に再編。本ファイル(001)は全体像を担当。旧 001_ARCHITECTURE_DESIGN・003_SYSTEM_OVERVIEW の該当部分を統合
21.126-04-24システム全体関係図を graph LR(横向き)に変更。スクロールなしで全体が見えるよう改善。
31.226-05-061 登場人物、2 技術スタック、4 なぜ Vercel が必要かを修正。技術スタック表に No を追加し、OAuth / Vercel の説明を開発者・保守担当向けとして明記。client_secret を誰が何のために守るのか分かる表現へ修正。
41.326-05-25iPhone → PC フローに VideoDrop を追加。画像・動画を添付メディアとして扱い、PC 側で動画を assets/video/ に保存する全体像を追記。
51.426-05-314「なぜ Vercel が必要か」の表現を 3 者語彙に統一。「アプリ作者」を「俺の付箋アプリ開発者」、「第三者」を「悪意ある第三者」に修正し、005「0 登場人物と関係」への参照を追加。