Skip to content

Repository files navigation

Tide

Tide は、複数台の Mac 間でファイルを同期するための macOS 向けツールです。 バックエンドは自分自身の AWS S3 バケットを使います。メニューバーに常駐し、Finder サイドバー「場所」に現れる Tide フォルダ(File Provider ドメイン)を通じてファイルを読み書きすると、その変更が S3 と各 Mac に反映されます。クリーンインストール後の環境復旧にも利用できます。

個人利用前提のツールです。既存のファイル同期サービスに頼らず、自分の AWS アカウント(S3)の中だけで完結します。


特徴

  • 📁 ファイルオンデマンド: ファイルは dataless プレースホルダとして一覧され、開いた瞬間に S3 からダウンロードされる(ディスクを圧迫しない)。実体化状態はバッジで表示され、「ダウンロードを削除」でいつでもオンラインのみに戻せる
  • 🖥 複数台の Mac 間で同期: 各 Mac で同じ S3 バケットを指定すると、Tide フォルダの内容が揃う(フォルダ ⇄ バケットは 1 対 1)
  • 🔁 即時アップロード: Tide フォルダでの作成・編集・削除・リネームを File Provider 拡張が S3 へ直接反映
  • リモート反映: 起動時・スリープ/ネットワーク復帰時・定期チェック(既定 3 分・マニフェストの ETag 比較による軽量検知)
  • 🚫 柔軟な除外ルール: .syncignore(gitignore 文法のサブセット)で不要な新規ファイルを同期対象から外せる。ディレクトリごとのネスト(git 風の階層オーバーライド)にも対応(node_modules/ などの既定テンプレートを新規バケット時に自動生成)
  • 🧷 データ損失より重複を優先: 競合時は両方を保持してリネーム
  • 🕰 S3 バージョニング前提: 削除・上書きは S3 のバージョニングで復元可能(ライフサイクルルールを自動投入)。過去バージョン・削除済みファイルの復元 UI あり
  • 💾 クリーンインストール復旧: S3 と AWS 認証情報だけで完全復旧(ローカル状態は不要)
  • 🔒 機密ファイルの既定除外.env / id_rsa / *.pem など)+ パストラバーサル・シンボリックリンク対策

クライアント側暗号化・複数ユーザー間コラボ・iOS 版などは対象外です。


動作要件

  • macOS 26.0 (Tahoe) 以降(それ未満は非対応)
  • 自分の AWS アカウントと、書き込み可能な S3 バケット(無い場合はアプリから作成も可能)
  • ビルド用に Xcodexcodegenbrew install xcodegen

プレビルドの配布物はありません。興味を持たれた場合は手元の環境でビルドしてご利用ください(コード署名・Notarization は不要)。


必要な AWS 権限(IAM)

セットアップで入力する AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY には、同期対象バケットへの読み書きに加え、初回プロビジョニング(バケット作成・バージョニング有効化・ライフサイクル / Public Access Block の設定)を行う権限が必要です。

最も簡単なのは、AWS マネージドポリシー AmazonS3FullAccess を Tide 専用の IAM ユーザーにアタッチする方法です(上記の操作をすべて含みます)。

権限を絞りたい場合は、対象バケットだけに限定した最小権限ポリシー(s3:ListBucket / s3:GetObject / s3:PutObject / s3:DeleteObject / s3:GetBucketVersioning / s3:PutBucketVersioning / s3:GetLifecycleConfiguration / s3:PutLifecycleConfiguration / s3:PutBucketPublicAccessBlock ほか、アプリからバケットを作成する場合は s3:CreateBucket)を docs/06-SETUP-AND-BUILD.md に用意しています。

⚠️ 静的アクセスキーは流出時の被害が大きい(バケット内ファイルの全消去まで可能)ため、Tide 専用の IAM ユーザーに付与し、可能なら対象バケットに限定したポリシーを推奨します。


セットアップ & ビルド

開発タスクはすべて Makefile 経由です。make help で一覧を表示できます。

make build     # Debug ビルド
make test      # ユニットテスト
make run       # ビルドして起動
make run-ja    # 日本語ロケールで起動
make run-en    # 英語ロケールで起動
make reset     # ローカル状態を全消去(設定 / Keychain / キャッシュ等)
make fresh     # reset してから起動(新規セットアップ検証用)

初回のみ、Keychain の entitlement とデバイス登録のため Xcode GUI から一度ビルドする必要があります。 詳細な手順(IAM ポリシー雛形、トラブルシュート含む)は docs/06-SETUP-AND-BUILD.md を参照してください。


使い方

  1. make run でアプリを起動するとメニューバーにアイコンが出ます。
  2. 初回はセットアップウィザードで、AWS 認証情報・リージョン・バケット名を入力します(ローカルの同期フォルダ選択はありません)。
    • バケットが無ければアプリから作成(バージョニング有効化・Public Access Block・ライフサイクルルールを自動設定)。
    • 既存バケットを指定すれば、そこから復元できます(別 Mac での再セットアップやクリーンインストール復旧)。
  3. ウィザードの案内に従い、システム設定 > ログイン項目と機能拡張 > ファイルプロバイダで Tide の拡張を有効にします(OFF のままだと同期が始まりません。稼働後に OFF になった場合はメニューバー表示と通知で警告されます)。
  4. Finder サイドバー「場所」の Tide フォルダが同期面です。ここでのファイル操作が S3 へ反映され、リモートの変更も自動で現れます。ファイルは開いた瞬間にダウンロードされ、「ダウンロードを削除」でオンラインのみに戻せます。
  5. 除外したいものは Tide フォルダ内の .syncignore に記述します(新規ファイルにのみ適用。サブディレクトリにも .syncignore を置けば、その配下に階層適用されます)。

保存場所

種別 パス
同期面(Tide フォルダ) ~/Library/CloudStorage/Tide-Tide/(Finder では「場所」の Tide)
設定・状態 App Group コンテナ(~/Library/Group Containers/G5G54TCH8W.org.izukawa.Tide/
AWS 認証情報 Keychain(Data Protection Keychain)
S3 マニフェスト バケット内 .tide/index.json + .tide/shards/

実装ステータス

マイルストーン 内容 状態
M1 ローカル → S3 一方向アップロード ✅ 完了
M2 ダウンロード / 復元 / ポーリング(MVP: クリーンインストール復旧 ✅ 完了
M3 双方向同期 / 競合解決 / マルチパート ✅ 完了(サブ A〜E)
M4 復元 UI・過去バージョン参照・Sync Activity・通知・パフォーマンス最適化 ✅ 完了
M5 ファイルオンデマンド(File Provider・双方向書込・実体化バッジ・evict) ✅ 完了
v0.3.0 File Provider モードへの一本化(旧 FSEvents モードをユーザー目線から削除) ✅ 完了

このほか、About / バージョン情報ウィンドウと診断エクスポート(サポート用)を備えています。

既知の制限

  • 1 フォルダ ⇄ 1 バケットのシングルユーザ運用。複数フォルダや複数ユーザ間コラボは対象外。
  • クライアント側暗号化は無し(S3 の SSE-S3 によるサーバ側暗号化のみ)。
  • 並行更新の競合解決は両側で対称。複数 Mac が同じファイルを同時編集すると、 リモート版が正規パスに残り、自分の編集は (local copy …) として保持される(後勝ちでの無音消失は無い)。
  • .syncignore はディレクトリごとのネストに対応(git 風の階層オーバーライド。深い階層が浅い階層を上書き)。
  • 複数 Mac 同時運用の長期耐久(2 台 soak)は未実施(1 台・1 週間のライブ soak は合格済み)。
  • 旧 FSEvents(folderSync)モードは v0.3.0 でユーザー目線から削除(コードは温存・復帰は git revert のみ)。

ドキュメント

設計仕様は docs/ にまとまっています(docs/README.md が概観と索引の入口)。 セキュリティレビューと対応状況は security/ を参照してください。


ライセンス

MIT License © Takanobu Izukawa

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages