◉CLAUDE LABEN
●2.1.310 — Bedrock・Vertex・Foundry でも Monitor ツールが使え、ゲートウェイの失敗を修正しました(10/23)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り36日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●API — 新しい API バージョン 2026-10-21 では temperature・top_p・top_k を渡すと 400 になります●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.310 — Bedrock・Vertex・Foundry でも Monitor ツールが使え、ゲートウェイの失敗を修正しました(10/23)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り36日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●API — 新しい API バージョン 2026-10-21 では temperature・top_p・top_k を渡すと 400 になります●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Cowork
◈ Cowork/2026-10-25中級

ビルドが「リソース重複」で止まった朝、競合コピー80個の出どころは同期フォルダの生成物でした

Dropbox 配下の Android プロジェクトで、ビルドが「リソース重複」で止まりました。原因の競合コピーを数える走査スクリプト、ビルド前に生成物だけを掃除する守り、同期から外す属性の付け方をまとめた記録です。

Dropbox4Cowork55ビルド同期フォルダbash7Python24

✦ プレミアム記事

壁紙アプリの Android 版を更新しようとして、ビルドを走らせました。返ってきたのは「リソースが重複している」という、見覚えのないエラーです。

ソースは触っていません。それなのに、重複する名前のファイルがビルドの出力先にずらりと並んでいました。数えると、競合コピーが80個以上できていました。

結論から書きます。原因はコードではなく、同期ソフトが「毎回作り直されるファイル」を別の端末の変更とみなして複製したことでした。

競合コピーは、作り直されるファイルから生まれます

Dropbox は、同じファイルが複数の場所で変わったと判断すると、(◯◯'s conflicted copy 2026-10-21) のような名前の複製を残します。

人が編集する文書なら、それは親切な動きです。ところがビルドの生成物は事情が違います。クラッシュ解析のプラグインは、ビルドのたびにあるファイルを作り直します。その作り直しと同期の書き戻しが重なると、同じ場所に「別の版」が現れ、複製が増えていきます。

ビルドツールは出力先のファイルをすべて取り込みます。複製も例外ではありません。同じリソース名が2つ並んで、「重複」で止まります。

整理すると、次の表のようになります。

置き場所誰が書くか競合コピーが出たとき
ソース(src など)自分消さずに中身を見て判断する
build / .gradleビルドツール消してよい(次のビルドで作り直される)
Pods / xcuserdataパッケージ管理・Xcode消してよい(再生成できる)

この線引きが、あとの二つのスクリプトの骨組みになります。

まず数える:どこに何個あるかを知る

掃除の前に、現状を数えます。消す前に数えるのは、消してはいけない場所に競合コピーが混ざっていないかを知るためです。

#!/usr/bin/env python3
"""Dropbox の競合コピーを数える。生成物の下にあるものは別枠で集計する。"""
import os, re, sys, collections
 
CONFLICT = re.compile(
    r"\((?:.+?)['’]s conflicted copy \d{4}-\d{2}-\d{2}(?: \d+)?\)|\(.*競合コピー.*\)"
)
GENERATED = {"build", ".gradle", "Pods", ".swiftpm", "xcuserdata", "node_modules", ".next"}
 
def scan(root):
    total, scanned = 0, 0
    by_dir = collections.Counter()
    for dirpath, dirnames, filenames in os.walk(root):
        dirnames[:] = [d for d in dirnames if d != ".git"]   # .git は読まない
        for name in filenames:
            scanned += 1
            if CONFLICT.search(name):
                total += 1
                parts = set(os.path.relpath(dirpath, root).split(os.sep))
                hit = sorted(parts & GENERATED)
                by_dir[hit[0] if hit else "(source)"] += 1
    return scanned, total, by_dir
 
if __name__ == "__main__":
    scanned, total, by_dir = scan(sys.argv[1])
    print(f"scanned={scanned} conflicts={total}")
    for k, v in by_dir.most_common():
        print(f"  {k}: {v}")
    sys.exit(1 if total else 0)

何を解決するかというと、「競合コピーがあるか」ではなく「どの種類の場所に、いくつあるか」を1回で出すことです。末尾の終了コードは、のちほどビルド前の守りや定期点検から使えます。

なぜこう書くか。名前の正規表現は英語版と日本語版の両方に合わせています。Dropbox の表記は環境の言語で変わるためです。

試しに、ビルドの出力先に似せた小さなフォルダで動かしました。

scanned=5 conflicts=4
  build: 3
  (source): 1

私の作業フォルダ全体(9万7千ファイル余り)にも走らせてみました。競合コピーは0件で、所要は17秒ほどでした。ファイル数が多い場所では数十秒かかる前提で、ビルドのたびではなく「朝に1回」や「ビルド対象のフォルダだけ」に絞るほうが現実的です。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦同期フォルダ上のプロジェクトで、競合コピーが増えている場所を走査スクリプトの1コマンドで数えて特定できるようになる
✦ビルドが「重複」で止まる前に、生成物の競合コピーだけを消し、ソース側の競合は消さずに止める守りをビルド前に入れられるようになる
✦どのフォルダを同期から外すべきか、自分のプロジェクトで「毎回作り直されるもの」を基準に線引きできるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ Cowork2026-10-22
定期タスクの完了ログを半分読めなかった夜、正規表現を広げず最終行に印を1行足しました
日次ログ 1,076 件のうち結果を読めたのは約半数でした。正規表現を広げても回収は35件で誤報も出たため、最終行に決まった形の印を残す関数と、毎朝の点検スクリプトを作った記録です。
◈ Cowork2026-10-15
一覧には見えているのに、名前で探すと0件——日本語ファイル名の「濁点が分かれている」問題を数えました
Cowork に渡した作業フォルダで、日本語名のファイルが名前検索に当たらない。約1.9万件を数えると、濁点・半濁点が分かれた名前が17件ありました。数え方と直し方を書き残します。
◈ Cowork2026-10-21
共有 /tmp の clone に書き込めなかった定期タスクで、古いリポジトリを借りず毎回 clone し直すと決めた理由
定期タスクが /tmp のクローン先を作れずに止まりました。原因の切り分け、借りられた古いクローンが約9.6時間遅れていた事実、毎回 clone し直した場合の費用、作業場所を選ぶスクリプトをお伝えします。