- まず結論:やることはこの3つ(迷ったらここから)
- なぜ起きる?どこで増える?(発生ポイントを先に知ると早い)
- 現状チェック:あなたのZIPに混ざってるか確認する
- よく混ざる4種類を超ざっくり解説(読者の不安を消すパート)
- 対策A:BlueHarvest系アプリで「作ったら即掃除」運用にする
- 対策B:ネットワーク/USBに .DS_Store を作らない(defaults設定)
- 対策C:できてしまった「._」をまとめて掃除(dot_clean)
- 対策D:ZIP作成時に「混入させない」— zip -X と -x を使う
- 対策E:Automatorで「右クリック一発のクイックアクション」にする
- おまけ:Git/SVNにも「混入させない」ガードを入れる
- 最後に:提出前チェックリスト(コピペ用)
- まとめ:僕のおすすめ運用(最短で事故らない)
MacでWordPressプラグイン審査に出すZIPを作ったり、USBメモリでファイルを受け渡ししたり、NAS/共有フォルダに置いたり……。
そんなときに意図せず混入する「._XXXX」「.DS_Store」「__MACOSX」「Icon?」に、何度も足をすくわれました。
しかもこの手のファイル、自分のMacでは見えにくいのに、Windows側・自動チェック・CI・ZIP展開先で急に目立つ。
「なにこれ?ウイルス?」と聞かれたり、プラグイン審査や納品で気まずくなったり……地味に削られるんですよね。
この記事の対象:Macで「ZIPを配布する/提出する」人(WordPressプラグイン審査、クライアント納品、チーム共有、USB受け渡し、NAS運用など)。
この記事で扱うこと:(1)そもそも何が混ざるのか、(2)混入を減らす設定、(3)増えてしまった分の掃除、(4)ZIP作成時の除外、(5)Automatorでワンクリック化。
最後に「提出前チェックリスト」も置いておきます。
この記事は、僕が実際に困ってきた体験をベースに、“混入させない / できた分を消す / ZIPに入れない”の3方向で、
再現性の高い対策をまとめたものです。最後にAutomatorで右クリック一発ZIPまで作ります。
まず結論:やることはこの3つ(迷ったらここから)
- 外付け/共有で作らない設定(.DS_Store対策)
- できてしまった「._」をまとめて掃除(dot_clean)
- ZIP作成時に除外(zip -X と -x)+ クイックアクション化
おすすめ運用:
普段は「(1) 設定」+「(3) ZIP除外」を標準にして、たまに「(2) 掃除」を回す。これが一番ラクで事故りにくいです。
なぜ起きる?どこで増える?(発生ポイントを先に知ると早い)
| よくある状況 | 増えやすいもの | ざっくり理由 |
|---|---|---|
| SMB/NAS/共有フォルダ | .DS_Store / ._* | Finder表示情報や拡張属性を保存しようとして生成される |
| USBメモリ(exFATなど) | .DS_Store / ._* | Mac固有メタデータを別ファイル(AppleDouble)に退避することがある |
| Finderの「圧縮」 | __MACOSX / ._* | ZIPにメタデータ(リソース/属性)を同梱するため |
| フォルダにカスタムアイコン | Icon? | アイコン情報が関連ファイルとして見えることがある |
「Macで必要な情報」でも、相手の環境では不要で、ZIPや共有でノイズになりやすいのが厄介ポイントです。
現状チェック:あなたのZIPに混ざってるか確認する
まずはZIPの中身を一覧して、混入しているか確認します。
unzip -l yourfile.zip | egrep '(__MACOSX|\.DS_Store|\._|Icon\?)'
表示が出たら混入しています(Windowsの人が見ると、だいたいここで混乱します)。
よく混ざる4種類を超ざっくり解説(読者の不安を消すパート)
- .DS_Store:Finderの表示状態(並び/表示方法など)を保存するファイル。
- ._ファイル(AppleDouble):拡張属性やリソースフォークなどの付帯情報を、非Mac系の場所に置くために別ファイルとして作られることがある。
- __MACOSX:ZIP内でメタデータを保持する目的で作られがちなフォルダ。
- Icon?:フォルダのカスタムアイコン等に関連して出てくることがある。
ポイントは「悪意あるもの」じゃなく、Macの都合で生まれる“おまけ”だということ。
でも配布/提出物に入るとノイズなので、対策します。
対策A:BlueHarvest系アプリで「作ったら即掃除」運用にする
外付けメディアやNASをよく使うなら、僕はBlueHarvest(表記ゆれがちですが “BlueHarvest” が正式)みたいなアプリが一番ラクでした。
- 外付け/SD/USB/NASなどの非Mac系ディスクに出がちな「.DS_Store」や「._(AppleDouble)」を自動で消す/掃除する用途
- ドライブ単位で「このボリュームは常に掃除」みたいな運用にしやすい
「作らない」のが理想ですが、現実はFinder・アプリ・コピー経路で混ざるので、“できたら即消す”が効く場面が多いです。
注意:アプリ導入を避けたい場合は、次の「対策B/C/D/E」だけでも充分戦えます。
対策B:ネットワーク/USBに .DS_Store を作らない(defaults設定)
macOS側で「ネットワークドライブに .DS_Store を作らない」設定ができます。
# ネットワーク共有(NAS/SMBなど)に .DS_Store を作らない
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
# USBなど外部ストレージに .DS_Store を作らない(環境によって効きにくい場合あり)
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool TRUE
# Finder再起動(反映)
killall Finder
元に戻すなら TRUE を FALSE にします。
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool FALSE
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool FALSE
killall Finder
ここ重要:
macOSのバージョンや状況によっては、特に外部ストレージ向けの設定が効きにくいケースが報告されています。
「効かないな?」と思ったら、次の dot_clean と ZIP除外に寄せるのが現実的です。
対策C:できてしまった「._」をまとめて掃除(dot_clean)
「._」はAppleDoubleという形式で、外部/共有に作られがちです。
この手の掃除で便利なのが macOS標準の dot_clean です。
たとえばUSB(ボリューム名が NO NAME の例)なら:
dot_clean /Volumes/NO\ NAME
フォルダ単位でもOKです(例:共有フォルダ配下だけ掃除)。
dot_clean /path/to/your/folder
ポイント:
- 外部/共有に大量に増えた「._」を一気に片付けたいときに向く
- 実行に時間がかかることがあるので、作業の合間に回すのがラク
「dot_cleanが効かない/怖い」場合の最低限(findで削除)
どうしても「._」だけを消したい場合は、まず一覧(-print)で確認してから削除します。
# まずは一覧(削除しない)
find /path/to/target -type f -name "._*" -print
# 問題なければ削除
find /path/to/target -type f -name "._*" -delete
※誤爆が怖いので、いきなり rm -rf しないのがコツです。
対策D:ZIP作成時に「混入させない」— zip -X と -x を使う
Finderの右クリック「圧縮」は便利ですが、ZIP内にメタデータが入り、__MACOSX や ._ を連れてきやすいのが難点です。
ここでおすすめなのが、ターミナルの zip コマンドで、除外パターン(-x)を指定して作る方法。
WordPressプラグインZIP向け(例:フォルダごとzip)
cd /path/to/parent
/usr/bin/zip -r -X rapls-pdf-image-creator.zip rapls-pdf-image-creator \
-x "Icon?" "*/Icon?" \
-x ".DS_Store" "*/.DS_Store" \
-x "__MACOSX" "*/__MACOSX" \
-x "._*" "*/._*" \
-x "*/.*"
作った後の確認もセットで:
unzip -l rapls-pdf-image-creator.zip | egrep '(__MACOSX|\.DS_Store|\._|Icon\?)' || echo "OK: 余計なファイルは見当たりません"
別案:ditto でZIPを作る(相性が良い場合あり)
環境によっては ditto を使う例もよく見かけます。
(zipより扱いやすい/メタデータの扱いが良いと感じる人も)
ditto -c -k --sequesterRsrc --keepParent /path/to/folder output.zip
どちらが正解というより、「最終的にZIPが汚れてないこと」が正義です。最後に unzip -l で確認しましょう。
対策E:Automatorで「右クリック一発のクイックアクション」にする
毎回ターミナルを開くのが面倒なら、Automatorのクイックアクションに登録してしまうのが最強です。僕はこれでミスが激減しました。
手順(Automator)
- Automator を起動 → 「新規書類」 → 「クイックアクション」
- 「ワークフローが受け取る現在の項目」:ファイルまたはフォルダ(Finder)
- アクションから「シェルスクリプトを実行」を追加
- 「入力の引き渡し」:引数として
- 下のスクリプトを貼り付けて保存(例:Clean Zip(Mac隠しファイル除外))
そのまま貼って使えるスクリプト
for f in "$@"; do
dir="$(dirname "$f")"
base="$(basename "$f")"
ts="$(date "+%Y%m%d")"
zipbase="${base// /_}_${ts}.zip"
(
cd "$dir" || exit 1
/usr/bin/zip -r -X "$zipbase" "$base" \
-x "Icon?" "*/Icon?" \
-x ".DS_Store" "*/.DS_Store" \
-x "__MACOSX" "*/__MACOSX" \
-x "._*" "*/._*" \
-x "*/.*"
)
done
これでFinderで対象フォルダ(例:プラグインのフォルダ)を右クリックして、作ったクイックアクションを叩くだけで、“汚れないZIP”が作れます。
おまけ:Git/SVNにも「混入させない」ガードを入れる
WordPressプラグイン開発なら、.gitignore などに最初から入れておくと安心です。
# macOS metadata
.DS_Store
._*
__MACOSX/
Icon?
.AppleDouble/
SVNでも ignore(svn:ignore)を設定しておくと、うっかり追加を防げます。
最後に:提出前チェックリスト(コピペ用)
- ZIP作成は Finder「圧縮」ではなく zip/ditto(除外あり)
- unzip -l で
__MACOSX/.DS_Store/._/Icon?が出ないか確認 - 共有/NASが多いなら DSDontWriteNetworkStores を入れる
- 既に散らかったら dot_clean を回す
- 作業を固定化するなら Automatorクイックアクション でワンクリック化
まとめ:僕のおすすめ運用(最短で事故らない)
- 普段:zip -r -X … -x … で作る(できればAutomator化)
- 共有/NASが多い:DSDontWriteNetworkStores を入れる
- 既に散らかった:dot_clean でまとめ掃除
- さらにラクしたい:BlueHarvest系で「作ったら消す」運用
「Macだから仕方ない」で終わりがちな話ですが、手順を固定すると、事故がほぼ消えます。
プラグイン審査も、チーム共有も、ZIP納品も、精神衛生がだいぶ良くなりました。


コメント