# Noterich P2P Syncチュートリアル:クラウドを介さないクロスデバイス同期 > **デバイス間でノートを安全に同期する——クラウドストレージは不要** データプライバシーがこれまで以上に重要になっている今、Noterichはクロスデバイス同期の革新的な方法を提供しています。私たちの**P2P(ピアツーピア)同期**機能により、クラウドサーバーを利用せずにデバイス間でノートをシェアできます。データは常にあなたのものです。 ## なぜP2P同期を選ぶのか? 従来のノートアプリはデータを集中型サーバーに保存します。これにより、プライバシーのリスク、サブスクリプション費用、第三者インフラへの依存が生じます。Noterichは異なる道を歩みます: ```mermaid graph LR A[Your Device] <-->|Direct Connection| B[Your Other Device] C[Cloud Server] -.->|Not Required| A C -.->|Not Required| B style A fill:#4CAF50,color:#fff style B fill:#4CAF50,color:#fff style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5 ``` ### 主な利点 - **🔒 プライバシー優先**:ノートは第三者サーバーに触れません - **⚡ 高速かつ直接**:デバイスは直接通信し、同期が高速になります - **💰 サブスクリプション不要**:プレミアム層なしの無料P2P同期 - **🌐 どこでも利用可能**:ローカルネットワークまたはインターネットを通じて同期 - **📱 クロスプラットフォーム**:デスクトップ、ノートパッド、タブレット、モバイル間で動作 ## P2P同期の仕組み Noterichは**WebRTC技術**と**PeerJS**を組み合わせて、デバイス間の直接接続を確立します。同期を開始すると: ```mermaid sequenceDiagram participant D1 as Device A (送信者) participant S as Signaling Server participant D2 as Device B (受信者) D1->>S: 接続IDの要求 S-->>D1: ルームIDの生成 D1->>D2: 接続リンクの共有(QR/URL) D2->>S: ルームIDを使って接続 S-->>D2: ピア接続の確立 D1->>D2: 暗号化してノートを送信 D2->>D2: 暗号化解除してノートをインポート Note over D1,D2: 直接暗号化された転送<br/>データはサーバーに保存されません ``` ### 背後にある技術 NoterichのP2P実装では以下が利用されています: 1. **PeerJSライブラリ**:ブラウザ間の通信の複雑さを処理します 2. **AES-GCM暗号化**:ノートデータの軍用級暗号化 3. **PBKDF2キー生成**:安全なパスワードベースの暗号化キー生成 4. **MessagePackシリアライズ**:高速転送のための効率的なバイナリデータエンコーディング 5. **IndexedDBストレージ**:オフラインアクセス用のローカルファーストのデータベース ## P2P同期の開始 ### 前提条件 始める前に、以下を確認してください: - ✅ 両方のデバイスにNoterichがインストールされていること - ✅ 両方のデバイスがインターネットに接続されていること(または同じローカルネットワーク内) - ✅ 最新のウェブブラウザ(Chrome、Firefox、Edge、Safari) ### ステップ1:ソースデバイスからシェアを開始 1. Noterichでシェアしたいノートを開きます 2. ツールバーの**Share**ボタンをクリックします 3. **"P2P Share"**オプションを選択します 4. (オプション)セキュリティを強化するためにパスワードを設定します - パスワードは少なくとも8文字以上でなければなりません - AES-256-GCM暗号化を使用します 5. P2Pサーバーが初期化するのを待ちます ```mermaid graph TD A[Open Note] --> B[Click Share Button] B --> C[Select P2P Share] C --> D{Set Password?} D -->|Yes| E[Enter Password ≥8 chars] D -->|No| F[Skip Encryption] E --> G[Initialize P2P Server] F --> G G --> H[Generate Share Link & QR Code] ``` ### ステップ2:接続リンクをシェア P2Pサーバーが起動すると、Noterichは以下を生成します: - **接続パラメータを含むユニークなシェアリンク** - **モバイル端末でのスキャンが簡単なQRコード** リンクの形式は以下の通りです: ``` https://noterich.com/#dbshare=<infoHash>&server=<signaling-server> ``` **シェア方法**: | 方法 | 最適な用途 | 方法 | |--------|----------|--------| | 🔗 リンクのコピー | メール、メッセージアプリ | 「リンクのコピー」ボタンをクリック | | 📱 QRコード | モバイルデバイス | デバイスのカメラでスキャン | | 📧 メール | リモートの共同作業者 | リンクをメールに貼り付ける | ### ステップ3:受信デバイスで受け取る 受信デバイス上で: 1. **シェアリンクを開く** - 直接リンクをクリックするか、または - モバイルデバイスでQRコードをスキャンする 2. **受信したノートを確認する** - ノートのタイトルとメタデータをプレビューする - 送信者情報を確認する 3. **パスワードを入力する**(暗号化されている場合) - 送信者が指定したパスワードを入力する - データはデバイス上で暗号化解除される 4. **目的のワークスペースを選択する** - 既存のワークスペースを選択するか、または - インポートされたノートのために新しいワークスペースを作成する 5. **インポートを確認する** - ノートは暗号化され、IndexedDBに保存される - 検索インデックスは自動的に再構築される ```mermaid graph LR A[Open Link] --> B[Connect to Sender] B --> C{Encrypted?} C -->|Yes| D[Enter Password] C -->|No| E[Receive Metadata] D --> E E --> F[Preview Notes] F --> G[Select Workspace] G --> H[Import & Index] H --> I[Sync Complete!] style I fill:#4CAF50,color:#fff ``` ## 高度な機能 ### 暗号化された転送 重要なノートの場合、Noterichはオプションのエンドツーエンド暗号化を提供します: **暗号化プロセス:** ```javascript // パスワード → 暗号化キー(PBKDF2) password + salt → deriveKey() → AES-256-GCM key // ノートデータ → 暗号化されたバッファ noteData + key + iv → encrypt() → encryptedBuffer // 転送パッケージ { encryptedBuffer: ArrayBuffer, salt: Uint8Array, // キー導出のため iv: Uint8Array // 初期化ベクトル } ``` **セキュリティ機能:** - 🔐 キー導出のための100,000 PBKDF2イテレーション - 🔐 各転送ごとにランダムなsaltとIV - 🔐 AES-256-GCM認証付き暗号化 - 🔐 パスワードは送信されず、ローカルでのみ使用される ### バッチノート同期 複数のノートを効率的に転送する: 1. 設定から**Database Transfer**を利用する 2. **"P2P Sync"**モードを選択する 3. 同期するノートを選択する 4. 受信者は選択オプション付きのバッチプレビューを受け取る **パフォーマンス最適化:** - ノートは512KB単位で転送される - 非ブロッキングの非同期処理によりUIの凍結を防ぐ - バイトレベルでの進捗追跡 - データの破損なしでいつでもキャンセル可能 ### 衝突解決 両方のデバイスに存在するノートを同期する際: ```mermaid graph TD A[Detect Conflict] --> B{Compare Timestamps} B -->|Local Newer| C[Keep Local Version] B -->|Remote Newer| D[Show Conflict Dialog] D --> E[Choose Version] E --> F[Local] E --> G[Remote] E --> H[Merge Manually] B -->|Both Deleted| I[Skip] style C fill:#2196F3,color:#fff style F fill:#2196F3,color:#fff style G fill:#4CAF50,color:#fff ``` **衝突の種類の処理:** - `local-newer`:あなたのバージョンが新しい - `remote-newer`:受信バージョンが新しい - `local-deleted`:このノートをローカルで削除した - `remote-deleted`:送信者のデバイスでノートが削除された - `remote-restored`:以前に削除されたノートが復元された ## トラブルシューティング ### 一般的な問題と解決策 #### ❌ “PeerJSライブラリが読み込まれない” **原因**:ネットワークのブロックによりPeerJS CDNまたはシグナリングサーバーが読み込めない **解決策:** 1. インターネット接続を確認する 2. ファイアウォールがWebRTC接続を許可しているか確認する 3. 代替ネットワーク(モバイルホットスポット)を試す 4. ブラウザがWebRTCをサポートしていることを確認する #### ❌ “接続タイムアウト” **原因**:NAT/ファイアウォールが直接接続を防ぐ **解決策:** 1. 両方のデバイスが同じネットワーク上にあること 2. VPNを一時的に無効にする 3. ルーターのWebRTC設定を確認する 4. モバイル接続のためのQRコードを使用する #### ❌ “暗号化が失敗した” **原因**:正しいパスワードがないか、転送が破損している **解決策:** 1. パスワードが正確に一致していることを確認する(大文字小文字を区別する) 2. 送信者から新しいシェアリンクを要求する 3. 転送中に安定した接続があることを確認する 4. より小さなバッチサイズを試す #### ❌ “同期中”エラー **原因**:同時の同期試行が複数ある **解決策:** 1. 現在の同期が完了するまで待つ 2. 他のNoterichタブ/ウィンドウを閉じる 3. ページを更新して再試行する 4. 持続する場合はブラウザキャッシュをクリアする ### 接続状態の指示 | 状態 | 意味 | 行動 | |--------|---------|--------| | 🔵 接続中 | ピア接続が確立されている | 5-10秒待つ | | 🟡 比較中 | ノートの違いを分析中 | 通常のプロセス | | 🟠 ユーザー確認が必要 | パスワードまたは確認が必要 | モーダルダイアログを確認する | | 🟢 アップロード中 | ノートをデータベースにインポート中 | タブを閉じずにいる | | ✅ 成功 | 同期が正常に完了 | ノートを使用できる | | 🔴 エラー | 接続または転送に失敗 | トラブルシューティングを確認する | ## セキュリティのベストプラクティス ### データの保護 P2P同期は本来安全ですが、以下のガイドラインに従ってください: 1. **強力なパスワードを使用する** - 最低8文字(12文字以上推奨) - 大文字、小文字、数字、記号を混ぜる - 他のサービスからのパスワードを再利用しない 2. **受信者を確認する** - 信頼できるデバイスとのみリンクを共有する - 物理的に近い場合はQRコードを使用する - 公開チャンネルでリンクを投稿しない 3. **アクティブな接続を監視する** - 同期中に接続しているピアを確認する - 転送が成功した後は切断する - 共有リンクが侵害された場合はリセットする 4. **定期的なバックアップ** - 重要なノートを定期的にエクスポートする - バックアップを別の安全な場所に保存する - 定期的に復元手順をテストする ### 暗号化の制限を理解する **暗号化されているもの:** - ✅ ノートの内容(テキスト、フォーマット、メタデータ) - ✅ 添付ファイルや埋め込みメディア - ✅ 転送中のデータベース構造 **暗号化されていないもの:** - ⚠️ 接続メタデータ(タイミング、データサイズ) - ⚠️ IPアドレス(シグナリングサーバーに表示される) - ⚠️ デバイス識別子(接続ルーティングのため) ## パフォーマンスのヒント ### 同期速度を最適化する 1. **ネットワーク条件** - 同じローカルネットワークで最速の転送 - 5GHz Wi-Fiは2.4GHzより推奨 - デスクトップデバイスには有線イーサネットを使用する 2. **バッチサイズ** - 大量の転送の場合:小さなバッチに分割する - 進捗インジケータを監視する - 停止した場合はキャンセルして再試行する 3. **ブラウザのパフォーマンス** - 同期中はNoterichタブをアクティブに保つ - 不要なブラウザタブを閉じる - 最新のブラウザバージョンにアップデートする 4. **デバイスのリソース** - 十分なストレージスペースを確保する - メモリを消費するアプリを閉じる - 同期が遅くなった場合はブラウザを再起動する ### メモリ管理 Noterichはスマートなバッチ処理を実装してブラウザのクラッシュを防ぎます: ```javascript // setTimeoutで非同期バッチ処理を行う async function asyncBatchProcessor(items, processor, batchSize = 10) { // 10ずつバッチで処理 // 10msごとに制御を渡すことでUIが応答的に動作 // 大量のインポート時のメインスレッドのブロックを防ぐ } ``` **推奨事項:** - 単一の転送は最大100ノートまで - 大規模なバッチ同期の間は30秒以上待つ - 定期的にブラウザキャッシュをクリアする ## よくある質問 ### Q: 2つ以上のデバイスで同期できますか? **A:** はい!各デバイスペアで別のP2Pセッションを開始できます。複数デバイスワークフローの場合: 1. デバイスA → デバイスB 2. その後、デバイスB → デバイスC 3. または、デバイスAを他のすべてのデバイスの中央ハブとして使用する ### Q: P2P同期はオフラインでも動作しますか? **A:** P2Pはシグナリングサーバーの初期接続が必要です。接続が確立された後: - ✅ ローカルネットワークでの転送はインターネットなしで可能 - ✅ デバイス間のデータ転送は直接行われる - ❌ 初期接続にはシグナリングサーバーのアクセスが必要 ### Q: 同期が中断された場合はどうなりますか? **A:** Noterichは中断をスムーズに処理します: - 部分的に転送されたノートは破棄される - 破損したデータはデータベースに入れられない - 単に同期プロセスを再開始する - 既に同期されたノートは影響を受けない ### Q: 他のNoterichインスタンスと同期できますか? **A:** もちろん!P2P同期は任意のNoterichユーザー間で動作します: - 共同作業者と個々のノートを共有する - アカウントのリンクは必要とされない - 各転送は独立して安全に行われる - 一度のノート共有に最適 ### Q: ファイルサイズに制限がありますか? **A:** 実用的な制限は以下の通りです: - ブラウザのメモリ利用可能性 - ネットワークの安定性 - 推奨最大値:セッションあたり50MB - より大きな転送の場合:複数のバッチに分割する ### Q: シェアリンクはどれくらい有効ですか? **A:** シェアリンクはセッションベースです: - 送信者のNoterichタブが開いている間有効 - 送信者がタブ/ブラウザを閉じると有効期限切れ - セキュリティのため一度使用で終了することを推奨 - 各転送セッションごとに新しいリンクを生成する ## 比較:P2P vs クラウド同期 ```mermaid quadrantChart title "同期方法の比較" x-axis "低いプライバシー" --> "高いプライバシー" y-axis "低い制御" --> "高い制御" quadrant-1 "Noterich P2P" quadrant-2 "避ける" quadrant-3 "従来のクラウド" quadrant-4 "集中型サービス" "Noterich P2P": [0.9, 0.9] "従来のクラウド": [0.3, 0.4] "集中型サービス": [0.4, 0.3] ``` | 機能 | Noterich P2P | クラウド同期 | |--------|--------------|------------| | **データストレージ** | デバイスのみ | 第三者サーバー | | **プライバシーレベル** | 最高 | プロバイダーに依存 | | **コスト** | 無料 | 通常サブスクリプションベース | | **設定の複雑さ** | 中 | 簡単 | | **同期速度** | 非常に速い(直接) | 中(サーバー経由) | | **オフラインアクセス** | 完全 | 限定的 | | **ベンダーロックイン** | なし | 高い | | **データのポータビリティ** | 完全 | 制限されている | ## 実際の使用例 ### 📚 個人知識ベース 以下のものをクロスデバイスで同期する: - 家庭用デスクトップで深い作業 - ノートパッドでカフェでの作業 - タブレットで読書やアノテーション - スマートフォンで即時記録 ### 👥 チーム協力 チーム内で研究ノートを安全に共有する: - ITインフラが不要 - エンドツーエンド暗号化された転送 - 転送ログによる監査履歴 - プライバシー規制に準拠 ### 🎓 学術研究 論文や文献レビューで共同作業する: - 注釈付きPDFやノートを共有 - ローカルでバージョン履歴を維持 - 大学や個人デバイス間で作業 - 未公開研究を保護 ### 🏢 企業導入 プライバシーを重視する組織でNoterichを導入する: - データは会社ネットワークから出ません - ファイアウォールを通じて設定可能なサービス - 既存のセキュリティポリシーと統合 - クラウドサービスの依存を減らす ## 技術的な詳細(開発者向け) ### アーキテクチャの概要 ```mermaid graph TB subgraph Sender["Sender Device"] A1[Note Data] --> A2[MessagePack Serialize] A2 --> A3{Encrypted?} A3 -->|Yes| A4[AES-256-GCM Encrypt] A3 -->|No| A5[Plain Binary] A4 --> A6[Chunk into 512KB] A5 --> A6 A6 --> A7[WebRTC Data Channel] end subgraph Receiver["Receiver Device"] B1[WebRTC Data Channel] --> B2[Reassemble Chunks] B2 --> B3{Encrypted?} B3 -->|Yes| B4[AES-256-GCM Decrypt] B3 -->|No| B5[Plain Binary] B4 --> B6[MessagePack Deserialize] B5 --> B6 B6 --> B7[IndexedDB Storage] B7 --> B8[Search Index Rebuild] end A7 -.->|Direct P2P| B1 style A4 fill:#FF5722,color:#fff style B4 fill:#FF5722,color:#fff style A7 fill:#4CAF50,color:#fff style B1 fill:#4CAF50,color:#fff ```