Skip to content

soundkitchen/Tide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tide

Tide は、複数台の Mac 間でフォルダを同期するための macOS 向けツールです。 バックエンドは自分自身の AWS S3 バケットを使います。メニューバーに常駐し、同期フォルダの変更を S3 へアップロード/S3 の変更を各 Mac へ反映します。クリーンインストール後の環境復旧にも利用できます。

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


特徴

  • 🖥 複数台の Mac 間で同期: 各 Mac で同じ S3 バケットを指定すると、同期フォルダの内容が揃う(フォルダ ⇄ バケットは 1 対 1)
  • 🔁 即時アップロード: FSEvents + デバウンスでローカル変更を検知
  • リモート反映: 起動時・スリープ/ネットワーク復帰時・定期ポーリング(既定 3 分)
  • 🚫 柔軟な除外ルール: .syncignore(gitignore 文法のサブセット)で不要なファイルを同期対象から外せる(node_modules/ などの既定テンプレートも自動生成)
  • 🧷 データ損失より重複を優先: 競合時は両方を保持してリネーム
  • 🕰 S3 バージョニング前提: 削除・上書きは S3 のバージョニングで復元可能(ライフサイクルルールを自動投入)
  • 💾 クリーンインストール復旧: ローカル DB がゼロでも、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     # ローカル状態を全消去(設定 / DB / 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. 以降は同期フォルダへの変更が自動でアップロードされ、リモートの変更も自動で取り込まれます。
  4. 除外したいものは同期フォルダ直下の .syncignore に記述します(node_modules/ などの既定テンプレートを新規バケット時に自動生成)。

保存場所

種別 パス
ローカル DB ~/Library/Application Support/Tide/db.sqlite
キャッシュ(DL 一時) ~/Library/Caches/Tide/
AWS 認証情報 Keychain(Data Protection Keychain)
S3 マニフェスト バケット内 .tide/index.json + .tide/shards/

実装ステータス

マイルストーン 内容 状態
M1 ローカル → S3 一方向アップロード ✅ 完了
M2 ダウンロード / 復元 / ポーリング(MVP: クリーンインストール復旧 ✅ 完了
M3 双方向同期 / 競合解決 / マルチパート ✅ 完了(サブ A〜E)
M4 復元 UI・バージョン参照・通知などの磨き込み 🚧 一部着手(削除済み復元 / 過去バージョン参照 UI 実装済み)

ドキュメント

設計仕様は docs/ にまとまっています(00-OVERVIEW.md から順に読むのが入口)。 セキュリティレビューと対応状況は security/ を参照してください。


ライセンス

MIT License © Takanobu Izukawa

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors