2026/07/20AI業務効率化
AI活用導入・運用

複数プロジェクトのファイル共有|symlinkと同期設計

複数プロジェクトのファイル共有|symlinkと同期設計

「このロゴ画像、どのプロジェクトに置いたっけ」——複数のプロジェクトを1台のMacで並行して回していると、同じファイルがあちこちに散らばり、どれが最新なのか分からなくなります。

結論から言うと、共有ファイルは「1箇所に集約し、symlinkで参照し、gitから除外する」の3点をつなぐと破綻しません。コピーを増やさないことが、そのまま管理のラクさになります。

株式会社Fyveは十数個のプロジェクトを1つのモノレポ(複数プロジェクトを1つのリポジトリで管理する構成)で運用しており、画像や動画などのアセットはこの設計で共有しています。本記事では、私が実際に使っている手順をそのまま公開します。

なぜ「各プロジェクトにコピーして置く」は破綻するのか

複数プロジェクトで同じ画像やロゴ、共通の設定ファイルを使う場面は珍しくありません。もっとも素朴なやり方は、必要なプロジェクトそれぞれにファイルをコピーして置くことです。最初はこれで動きます。問題は数が増えてからです。

コピーで運用すると、次の3つが同時に効いてきます。

  • 最新がどれか分からなくなる:同じファイルが5箇所にあると、どれが最新版か追えなくなります。1つを直しても、残りは古いままです。
  • 更新が手作業になる:ロゴを差し替えるたびに、置いてある全プロジェクトを手で上書きすることになります。1箇所忘れると、そこだけ古いロゴが残ります。
  • リポジトリが重くなる:画像や動画のような重いファイルをgit(変更履歴を記録する仕組み)に載せると、プロジェクトごとに実体が積み上がり、履歴がどんどん膨らみます。

私が実際に困ったのはこの「最新はどれ問題」でした。プロジェクトが十数個に増えた段階で、コピー運用は現実的に回らなくなります。そこで、複製そのものをやめる設計に切り替えました。

全体像——3点セットで「1つの実体」を共有する

考え方はシンプルです。ファイルの実体(原本)は1箇所だけに置き、各プロジェクトからはそこを「参照」します。そのうえで、実体を守る仕組みと、リポジトリに載せない仕組みを重ねます。役割分担は次の3つです。

  • symlink(シンボリックリンク)で参照する:各プロジェクトには実体への「近道」だけを置きます。中身は1箇所のままです。
  • 同期フォルダに載せる:実体をクラウド同期フォルダに置けば、自動バックアップと別Macへの持ち運びを同時に満たせます。
  • gitから除外する:重い実体はリポジトリに載せず、`.gitignore` で除外します。履歴を軽く保てます。
共有ファイルの実体を1箇所に集約し、symlinkで参照・同期フォルダで保全・gitから除外する3点セットの役割分担図

ポイントは、この3つが別々の話ではなく、「実体は1箇所」という同じ前提の上に乗っていることです。参照・保全・除外がすべて1つの原本を指すので、管理する対象が1つに減ります。

モノレポ全体のディレクトリ構成をどう切るか、という上位の設計は別記事にまとめています。本記事はその中で「ファイルをどう共有するか」に絞った実装編です。

個人事業主のモノレポ運営術|1人会社のディレクトリ構成
Claude Code個人事業主のモノレポ運営術|1人会社のディレクトリ構成

手順1|共有ファイルを1箇所の実ディレクトリに集める

まず、共有したいファイルの置き場所を1箇所だけ決めます。私はモノレポの直下に `assets/` を作り、その中をプロジェクト名でフォルダ分けしています。

projects/
├── assets/            ← 共有ファイルの実体はここだけ
│   ├── projectA/
│   ├── projectB/
│   └── shared/        ← ロゴなど全体共通のもの
├── projectA/
└── projectB/

大事なのは「原本はここにしか無い」という状態を作ることです。以降、各プロジェクトが画像を使うときは、コピーではなくこの `assets/` を指すようにします。フォルダの切り方は、プロジェクト単位+全体共通の `shared/` を1つ、くらいの粒度で十分です。

手順2|各プロジェクトからsymlinkで参照する

次に、各プロジェクトから実体への「近道」を張ります。これがsymlink(シンボリックリンク)です。ファイルの実体は動かさず、そこへのショートカットだけをプロジェクト内に置くイメージです。

macOS・Linuxなら `ln -s` コマンド1行で作れます。プロジェクトのフォルダに移動し、実体を相対パスで指すのがコツです。

# projectA の中に assets という名前で近道を作る
cd projects/projectA
ln -s ../assets/projectA assets

# 確認(-> の右側が実体を指していればOK)
ls -l assets
# assets -> ../assets/projectA

これで、`projectA/assets/logo.png` を開くと、実際には `projects/assets/projectA/logo.png` が開きます。中身の実体は1つのままなので、原本を差し替えれば全プロジェクトに一度で反映されます。

絶対パス(`/Users/...` から始まる指定)ではなく相対パスで張るのがおすすめです。フォルダごと別の場所に移動しても、位置関係が保たれていればリンクが切れません。絶対パスにすると、Macを変えたり置き場所を変えたりした瞬間に全リンクが切れます。

手順3|同期フォルダに載せてバックアップと持ち運びを兼ねる

実体を1箇所にまとめた効果は、バックアップにも効きます。その1箇所(`assets/`)を、クラウド同期フォルダの中に置くだけでよいからです。私はデスクトップ用の同期アプリを使い、`assets/` の実体だけを同期対象にしています。

これで得られるものは2つです。

  • 自動バックアップ:ファイルを更新すれば、同期フォルダが自動でクラウドへ退避します。重いアセットほど、消えたときの痛手が大きいので効きます。
  • 別Macへの持ち運び:同じアカウントで同期すれば、別のMacでも同じ実体がそろいます。symlinkは相対パスで張ってあるので、リンク関係もそのまま生きます。

ここで重要なのは、同期設定は「実体のある1箇所」だけに絞ることです。各プロジェクトに散らばったコピーを個別に同期しようとすると、設定も容量も二重三重になります。集約しておけば、同期の設定も1箇所で済みます。

なお、クラウド同期とgitの自動コミットを併用すると、状態のズレが起きやすくなります。この住み分けは別記事で詳しく扱っています。

launchd自動コミット × クラウドAIの状態同期問題
Claude Codelaunchd自動コミット × クラウドAIの状態同期問題

手順4|symlink先の実体をgitから除外する

最後に、重い実体をgitのリポジトリから外します。画像や動画をそのままコミットすると履歴が膨らみ、クローンや同期が重くなるためです。除外は `.gitignore` に1行足すだけです。

# .gitignore
# assets という名前のフォルダを、どの階層でも除外する
**/assets/

これで、各プロジェクトに張ったsymlinkの参照先(実体)はgit管理の外に置かれます。リポジトリには「どこを指しているか」というリンク情報だけが残り、重いファイルそのものは入りません。実体のバックアップは手順3の同期フォルダが担うので、gitに載せなくても失われません。

各プロジェクトにコピーして置く方式と、1箇所に集約してsymlinkで参照する方式のBefore/After比較図

コピー方式と比べると、更新もバックアップも「1箇所」で完結する点が決定的に違います。触る対象が1つに減るほど、抜け漏れは起きにくくなります。

運用でつまずく3つの落とし穴

この設計はシンプルですが、最初に踏みやすい落とし穴が3つあります。私が実際にはまったものを共有します。

1. symlink自体がgitに乗ってしまう

`.gitignore` で除外するのは実体のあるフォルダです。各プロジェクトに張ったsymlink(近道)は、リンク情報として小さくコミットされます。これは意図どおりで問題ありません。逆に、実体側の除外を忘れると重いファイルが載ってしまうので、`git status` で「重い実体が追跡対象になっていないか」を一度確認しておくと安心です。

2. 絶対パスで張ってリンクが切れる

手順2でも触れましたが、`ln -s` を絶対パスで張ると、フォルダを移動したり別Macに持っていったりした瞬間にリンクが全滅します。必ず相対パスで、実体との位置関係が保たれる形で張ってください。

3. 同期の競合で「重複ファイル」が生まれる

複数のMacで同時に同じ実体を編集すると、同期アプリが「競合コピー」を作ることがあります。実体を1箇所にした恩恵が薄れるので、編集するMacはできるだけ1台に寄せ、作業前に同期が完了しているかを確認する習慣にすると事故が減ります。

この設計が効くプロジェクト・効かないプロジェクト

すべてのケースでsymlink集約が最適なわけではありません。判断の軸を整理します。

  • 効くケース:同じ画像・動画・共通アセットを複数プロジェクトで使い回す。1台〜数台のMacで自分(少人数)が回す。実体をリポジトリに載せたくない。
  • 慎重に考えるケース:チームで大人数が触る/WindowsとMacが混在する環境。symlinkの扱いはOSやツールで差が出るため、この場合は共有ストレージや専用のアセット管理サービスも選択肢になります。

1人〜少人数でMac中心にプロジェクトを回すなら、追加ツールを増やさずOSとgitの標準機能だけで組めるこの3点セットは、費用対効果が高い選択です。プロジェクト管理の全体像やバックアップ戦略と合わせて設計すると、より抜けが減ります。

Claude Code複数プロジェクト管理とバックアップ戦略
Claude CodeClaude Code複数プロジェクト管理とバックアップ戦略

まとめ

複数プロジェクトのファイル共有は、「実体は1箇所・symlinkで参照・同期で保全・gitから除外」の3点セットで破綻を防げます。複製を増やさないことが、そのまま「最新はどれ問題」と更新漏れの解消につながります。

最初に置き場所を1箇所に決め、相対パスでsymlinkを張り、`.gitignore` に1行足す。この最小構成から始めれば、プロジェクトが増えても管理コストはほとんど増えません。

私たちは、こうした「小さく始めて崩れない仕組み」を、業務全体の自動化・効率化の設計としてご相談いただくことも多くあります。ファイル管理やプロジェクト運用のAI活用でお困りなら、AI活用顧問サービスもご活用ください。

AIを使う会社と、使わない会社。
その差は、開き始めています

ここ数年でAIは急速に進化し、正しく導入できている企業とそうでない企業とでは、業務効率や人件費に大きな差が生まれ始めています。「AI導入に興味はあるが、実際に何ができて、どこから手をつければいいか分からない」——そんな方は、まずこの無料プレゼントに目を通してみてください。

無料プレゼント:様々な業種にAIを導入して分かった、成功の型と失敗パターン ― 無料でダウンロードする
← 記事一覧に戻る