6. PinSlip Git 同期ガイド

8/9/2026

6. 同期(Git Sync)

複数のデバイスで同じメモを使いたい場合は、Git 同期を有効にしてください。
任意の Git リポジトリ(GitHub / GitLab / cnb など)を使用して同期し、自動で commit + pull + push を行います。
主に技術ユーザー向けです(Obsidian Git ユーザー層を想定)。初心者向けのクラウド同期も準備中です。


6.1 これは何ですか

PinSlip の Git 同期は任意の追加機能です。

  • 仕組み:vault ディレクトリ内に Git リポジトリを保持し、定期的に自動で commit + pull + push を実行します

  • 連続変更の集約:変更後 3 分間新たな操作がなければ commit をトリガーします

  • コンフリクト解決:diff3 による 3-way マージ(異なる段落は自動マージ、同じ行は標準マーカーを記述)

  • 処理:Go サービス内で go-git による純 Go 実装で実行され、ローカルの git 実行ファイルに依存しません

デフォルトでは無効になっており、「設定 → Git 同期」で手動で有効化する必要があります。


6.2 セットアップ手順

準備

  1. GitHub / GitLab / cnb などのプラットフォームで空のリポジトリを作成します(README やライセンスにチェックを入れない空のリポジトリを推奨)

  2. 書き込み権限のある Personal Access Token(PAT)を作成します

    • GitHub:Settings → Developer settings → Personal access tokens → Fine-grained tokens

    • Contents: Read and write にチェック

    • トークンをコピー(表示されるのは 1 回だけです)

PinSlip で設定する

設定 → Git 同期 → 以下を入力します。

設定 → Git 同期フォーム:リポジトリ URL / ユーザー名 / Token / ブランチのフィールド

フィールド

リポジトリ URL

https://github.com/yourname/pinslip-notes.git

ユーザー名

yourname

Token

ghp_xxxxxxxxxxxxxxxxxxxx

ブランチ

デフォルト main

保存すると、PinSlip がローカルリポジトリを自動で初期化し、remote を設定して、最初の commit & push を実行します。

認証情報の保存場所

  • <vault>/.pinslip/git-sync.json に保存されます

  • <vault>/.pinslip/.gitignore に含まれているため、トークンがノートと一緒にリモートへプッシュされることはありません

  • 設定画面で Token フィールドを空のまま保存 = 変更しないという意味になります


6.3 自動同期

同期サイクル

変更 → 3 分間新たな操作がなければ → 自動で commit
  → pull (fetch + merge)
  → push
  • commit message:sync YYYY-MM-DD HH:mm (n files)

  • 定期 push 間隔:デフォルト 10 分(設定で 1〜1440 分の範囲で調整可能)

  • 「今すぐ同期」ボタンで手動トリガーも可能

  • アプリ終了前の最大 5 秒の猶予期間内で、できる限り push を実行します

失敗時の処理

  • ネットワーク / 認証の失敗 → 指数バックオフ:1 分 → 5 分 → 15 分

  • ステータス画面に lastError が表示されるため、原因の特定に役立ちます

同期対象

同期する

同期しない

notes/(すべてのメモ)

.trash/(ごみ箱)

inbox/(クイックキャプチャ)

.pinslip/(ランタイムファイル)

attachments/(画像)


6.4 複数デバイスでの同期

新しいデバイスを追加する

  1. 新しいデバイスに PinSlip をインストール

  2. vault ディレクトリを選択(空のディレクトリにします)

  3. 設定 → Git 同期 → 同じリポジトリ + 同じ Token を入力

  4. PinSlip が自動で clone → インデックスを再構築 → すべてのメモが表示されます

共同作業

PinSlip はファイルをロックしません。

  • 複数人が同時に同じ vault を編集 → 後勝ちのリスクがあります

  • ブランチ + PR の運用を推奨します

同期ステータス

設定ドロワー → Git 同期のエリアに次の情報が表示されます。

  • 最終同期時刻

  • 未 push の件数

  • エラーメッセージ(ある場合)


6.5 コンフリクト解決

これは Git 同期において最も重要な詳細の 1 つです。

どのように発生するか

  • 2 台のマシンが同じメモを同時に変更

  • pull 時にクリーンにマージできないことが判明 → コンフリクトマーカーが書き込まれる

3 つのケース

1. 異なる段落の自動マージ(最も一般的)

あなたが A 段落に 1 行追加
別のある人が B 段落を変更
​
→ 自動でマージ成功、邪魔しません

2. 同じ行のコンフリクト(まれ)

PinSlip は標準の git コンフリクトマーカーを書き込みます。

<<<<<<< HEAD
あなたが新しく追加した行
=======
別のある人が追加した行
>>>>>>> origin/main
  • タイトル抽出時はマーカー行をスキップ → ファイル名がマーカーで混入しません

  • メイン画面のメモリストの上部に「未解決コンフリクト」の通知が表示されます

  • API レスポンスには conflicted: true が含まれます

3. バイナリのコンフリクト(画像)

PinSlip は両方とも保持します。

  • リモート側の元の名前

  • ローカル側は name-コンフリクト-タイムスタンプ.ext

メモ内でコンフリクトを解決する

コンフリクトのあるメモを開くと、オレンジ色の警告バナーに置き換わります。

  • 等幅 textarea で原文を編集(Markdown レンダリングは通しません)

  • 「すべてローカルを使用」 でマーカーを一括で除去(ローカル版を保持)

  • 「すべてリモートを使用」 でマーカーを一括で除去(リモート版を保持)

  • 「解決を保存」 で手動保存(自動保存は走りません、確認してから保存する仕組み)

保存するとマーカーが消え、自動的に通常の Markdown エディタに戻ります。

外部変更の検知

  • 外部エディタ(Obsidian / VS Code)でディスク上のファイルが変更 → PinSlip の watcher が検知

  • 編集されていないとき → 自動で再読み込み + 「同期しました」トースト

  • 編集中(変更あり) → 「最新版を読み込む / 自分の編集を保持する」のバナーで選択

これは双方向同期の体験を守る仕組みです:2 台のマシンが互いに奪い合わない。


6.6 よくある問題

現象

確認ポイント

認証失敗

トークンの期限切れではないか、リポジトリ URL に .git が含まれているか、書き込み権限があるかを確認してください

同期が停滞する

ステータス画面の lastError を確認してください。指数バックオフ 1m → 5m → 15m は正常な挙動です

同期失敗が繰り返される

リポジトリ URL に .git が含まれていますか? トークンの権限は十分ですか? ネットワークは到達可能ですか?

無効化したい

設定 → Git 同期 → 「無効化」(.git/ ディレクトリは残りますため、別ツールへの切り替えが容易です)

関連記事

こちらもおすすめ