納品用のZIPをサッと作れるシェルスクリプト(.DS_Store削除&除外つき)

※本記事のコードは参考用です。使用前にご自身で動作確認をお願いします。

はじめに

Web制作の納品で、ファイルをZIPでまとめることは常日頃あります。
でもそのたびに毎回 .DS_Store を消したり、node_modules を除外したりするのは地味に面倒です。

ということで、自分用に「納品ZIPをきれいに作ってくれるシェルスクリプト」をchatGPTに用意してもらいました。
シンプルなものですが、これが思った以上に便利なので備忘録として残しておきます。

やり方

スクリプトの内容

ファイル名は何でもOKですが、ここでは例として make-clean-zip.sh としておきます。

#!/bin/bash

TARGET_DIR=${1:-.} # 1つ目の引数がなければ"."(カレント)
ARCHIVE_NAME=${2:-archive.zip} # 2つ目の引数がなければ archive.zip

echo "📁 対象ディレクトリ: $TARGET_DIR"
echo "📦 出力ファイル名: $ARCHIVE_NAME"

# .DS_Store を削除
echo "🧹 .DS_Store を削除しています..."
find "$TARGET_DIR" -name ".DS_Store" -delete

# zipファイルを作成(.git や node_modules は除外)
echo "📦 ZIPファイルを作成しています..."
zip -r "$ARCHIVE_NAME" "$TARGET_DIR" -x "*.git*" "*/node_modules/*" "*/.DS_Store"

echo "✅ 完了しました!"

使い方

基本的な使い方は以下のとおり。

./make-clean-zip.sh ./myproject myproject.zip
  • 第一引数:対象のディレクトリ(省略するとカレントディレクトリ)
  • 第二引数:出力するzipファイル名(省略すると archive.zip

これで ./myproject を、.DS_Store を削除しつつ .gitnode_modules を除外して、myproject.zip にまとめてくれます。
引数を省略すれば、現在のディレクトリを archive.zip という名前でまとめてくれます。

PATHに登録してどこからでも使えるようにする(zshの場合)

このスクリプト、何度も使うなら「毎回パスを指定して実行する」のは面倒です。
PATH を通しておけば、どこにいても make-clean-zip.sh で呼び出せて便利です。

以下、zshの例です。

1. スクリプト専用フォルダを作成

ホームディレクトリにscriptsフォルダを用意し、そこにmake-clean-zip.shを配置します。

2. 実行権限付与

chmod +x ~/scripts/make-clean-zip.sh

3. .zshrc にPATHを追記

echo 'export PATH="$HOME/scripts:$PATH"' >> ~/.zshrc

4. 設定を反映

source ~/.zshrc

これで、どこにいても make-clean-zip.sh と打てばスクリプトが実行できるようになります。

おまけ

作ったzipに何が入っているか確認するコマンドが便利です。

unzip -l archive.zip
  • unzip … ZIPファイルを扱うコマンド
  • -l(list)… 展開せずに中のファイル一覧だけ表示
  • archive.zip … 対象のZIPファイル