こんにちは、Tech Samuraiです!
開発プロジェクトのバックアップを取ったり、他の人にファイルを共有したりする際、「圧縮」は欠かせない操作です。しかし、コマンドラインでの圧縮方法は形式ごとにコマンドが異なり、オプションも複雑で、WindowsやUbuntuからMacに移行した際、戸惑うことも多いですよね。
結論から言うと、**「何をしたいか」によって最適な形式とコマンドを使い分ける**のが一番です。
この記事では、MacとUbuntuのターミナル(zshやbash)で使う主要な圧縮形式について、その特徴と、私がよく使う便利なオプションを含めた実践的なコマンドを、備忘録としてまとめます。
💻 用途別のおすすめ圧縮形式
まずは、どの形式をいつ使うべきか。私の使い分けは以下の通りです。
- Windowsユーザーを含む不特定多数と共有する場合:
zip
理由: macOS、Windows、Linuxすべてで標準的にサポートされており、受け取った相手が困ることがほぼありません。互換性最強です。 - MacやLinuxユーザー間での共有 / 開発プロジェクトのバックアップ:
tar.gz
理由: Unix系のOSで古くから使われているデファクトスタンダード。ファイルのパーミッション(実行権限など)を正しく保持したまま圧縮できます。 - とにかく圧縮率を最優先したい場合:
tar.xzまたは7z
理由:gzip`よりも新しい圧縮アルゴリズムを使い、より高い圧縮率を実現します。大容量のデータをバックアップする際に有効です。
📦 各形式の比較と特徴
| 形式 | 特徴 | 圧縮率 | 互換性 | Mac/Ubuntu標準 |
|---|---|---|---|---|
zip | ファイルを個別に圧縮。互換性◎。 | 中 | ◎ 抜群 | ◎ (zip, unzip) |
tar.gz | 複数ファイルをtar`で束ねてからgzip`で圧縮。パーミッション維持◎。 | 中 | ○ (Unix系◎) | ◎ (tar) |
tar.xz | tar`で束ねてからxz`で圧縮。 | ◎ 高い | △ (比較的新しい) | ◎ (tar) |
7z | 独自の7z`形式。圧縮率◎。 | ◎ 高い | × (専用ソフト要) | × (要インストール) |
補足: tar`は「Tape Archive」の略で、元々は複数のファイルを1つにまとめる(アーカイブする)だけのコマンドです。tar.gz`はtar`でまとめたものをgzip`で圧縮したものです。
🚀 基本的なコマンド例(オプション解説付き)
macOSとUbuntuのターミナルには、zip`, `unzip`, `tar`が標準で入っています。7z`を使いたい場合は、Homebrewやaptでインストールが必要です。
# macOS (Homebrew) の場合
brew install p7zip
# Ubuntu (apt) の場合
sudo apt update
sudo apt install p7zip-full
1. zip (互換性重視)
# 圧縮: my_archive.zip に directoryA と fileB を圧縮 (-r: 再帰的)
zip -r my_archive.zip directoryA fileB
# 解凍: my_archive.zip を現在の場所に解凍
unzip my_archive.zip
便利なオプション:
unzip -l my_archive.zip # 解凍せずに、中身のファイル一覧を表示します。
unzip my_archive.zip -d ./unzip_here # -dオプションで、解凍先のディレクトリを指定できます。
2. tar.gz (Mac/Linux標準)
# 圧縮 (-c: create, -z: gzip, -f: file)
# archive.tar.gz に directoryA と directoryB を圧縮
tar -czf archive.tar.gz directoryA directoryB
# 解凍 (-x: extract, -f: file)
tar -xf archive.tar.gz
便利なオプション:
tar -czvf ...`:-v`(verbose) を付けると、圧縮・解凍中のファイル名をターミナルに表示します。tar -tf archive.tar.gz:-t`(list) で、中身のファイル一覧を表示します。tar -xf archive.tar.gz -C ./unzip_here:-C`オプションで、解凍先のディレクトリを指定できます。
3. tar.xz (圧縮率重視)
tar.gz`の-z` (gzip) を -J` (xz) に変えるだけです。
# 圧縮 (-c: create, -J: xz, -f: file)
tar -cJf archive.tar.xz directoryA directoryB
# 解凍 (tarが賢く自動判別してくれるので -xf だけでOK)
tar -xf archive.tar.xz
4. 7z (最高圧縮率・要インストール)
# 圧縮 (a: archive)
7z a archive.7z directoryA fileB
# 解凍 (x: eXtract with full paths)
7z x archive.7z
便利なオプション:
7z l archive.7z:l`(list) で、中身のファイル一覧を表示します。7z x archive.7z -o./unzip_here:-o`オプション(直後にパス)で、解凍先のディレクトリを指定できます。
🐍 Git管理プロジェクトでの最強の技:`git archive`
RyeやGitを使っている開発環境では、ターミナルの圧縮コマンドを直接使うよりも、git archive`コマンドを使うのが非常にスマートです。
これは、Gitリポジトリの現在の状態を、.git`ディレクトリや.gitignore`で無視されるファイル(Ryeが作る.venv`など)を**自動的に除外して**、zipやtar.gzとして直接書き出すコマンドです。
# 現在のブランチ(HEAD)をzip形式で書き出す
git archive -o ../my_project.zip HEAD
# mainブランチをtar.gz形式で書き出す
git archive --format=tar.gz -o ../my_project.tar.gz main
これにより、仮想環境や__pycache__`などの不要なファイルを含まない、クリーンなプロジェクトファイル一式を、誰かに配布するために素早く作成できます。
🪟【補足】Windowsユーザーの場合
最近のWindows 10/11では、標準でtar`コマンドやzip`コマンドが使えるようになっていますが、多くのユーザーはGUI操作に慣れています。
- 圧縮: フォルダやファイルを右クリックし、「送る」→「圧縮(zip 形式)フォルダー」を選択します。
- 解凍:
.zip`ファイルを右クリックし、「すべて展開」を選択します。.tar.gz`なども、最近のWindows 11では標準で解凍できるようになりました。 - `7z`:
7z`をインストールすると、右クリックメニューから高圧縮な.7z`形式も扱えるようになります。
まとめ
MacやLinuxのターミナル操作は、最初は戸惑うかもしれませんが、慣れると非常に強力です。まとめると、私の使い分けは以下の通りです。
- 普段Mac/Linux間で使うなら:
tar -czvf ...(tar.gz + 詳細表示) - Windowsの人に渡すなら:
zip -r ... - Git管理下のプロジェクトを配布するなら:
git archive ...
このチートシートが、あなたのコマンドライン操作の助けになれば幸いです!


コメント