タイトル: Cygwin
SEOタイトル: Cygwin とは? WSL2 / Git Bash / MinGW との違いと現代的な選び方
| この記事の要点 |
|
Cygwin とは
Cygwin は、Windows 上で POSIX(Unix 系)の API を提供するソフトウェアです。1995 年に Cygnus Solutions(後の Red Hat)が開発を始め、現在も OSS として継続開発されています。中核は cygwin1.dll という共有ライブラリで、Linux などのシステムコール(fork、open、fcntl 等)を Win32 API に翻訳します。これにより、bash / grep / awk / sed / vim / ssh / make / gcc 等の Unix ツールがほぼそのまま Windows で動きます。
インストール手順
- cygwin.com から setup-x86_64.exe をダウンロード
- setup.exe を実行 → ミラーサイトを選択(日本なら ftp.jaist.ac.jp など)
- 必要なパッケージを「Package」画面で選択(bash は標準、git/ssh/make/gcc/vim/curl 等は別途指定)
- インストール完了後、スタートメニューの Cygwin Terminal を起動
- パッケージ追加は同じ setup.exe を再実行
ディレクトリ構造
| Cygwin パス | Windows パス | 説明 |
|---|---|---|
/ | C:\cygwin64\ | ルート |
/home/USER | C:\cygwin64\home\USER\ | ホーム |
/cygdrive/c | C:\ | Windows ドライブ参照 |
/cygdrive/d/work | D:\work\ | 同上 |
/tmp | C:\cygwin64\tmp\ | 一時領域 |
よく使うコマンド例
# Windows と Cygwin パスの相互変換
cygpath -w /home/me/file.txt # → C:\cygwin64\home\me\file.txt
cygpath -u 'C:\Users\me\Desktop' # → /cygdrive/c/Users/me/Desktop
# Windows ドライブにアクセス
cd /cygdrive/c/Users/$USERNAME/Desktop
# シェルスクリプト
#!/bin/bash
for f in *.log; do
grep ERROR "$f" | tail -5
done
# Windows EXE を呼べる
notepad.exe /tmp/note.txt
# SSH(OpenSSH)
ssh user@server.example.com
ssh-keygen -t ed25519
# 開発ツール
gcc -o hello hello.c
make
git clone https://github.com/...
パッケージ管理
Cygwin の標準パッケージ管理はsetup.exe ですが、CLI 派生として apt-cyg(非公式)がよく使われます。
# apt-cyg をインストール(一例)
wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin
# Linux 風に検索・追加
apt-cyg search openssh
apt-cyg install openssh
apt-cyg update
apt-cyg remove vim
WSL2 / Git for Windows / MSYS2 との違い
| 項目 | Cygwin | WSL2 | Git for Windows | MSYS2 |
|---|---|---|---|---|
| 仕組み | Win32 API を POSIX に翻訳 | Hyper-V 上で本物の Linux カーネル | MSYS2 派生の最小 Bash | POSIX 環境 + pacman |
| 性能 | fork/exec が遅い | ★ 速い(ネイティブ Linux) | 軽量 | Cygwin 並み |
| Windows パス | ★ そのまま扱える | /mnt/c 経由(遅い) | そのまま扱える | そのまま扱える |
| Linux 互換 | POSIX 互換だが Linux 拡張は弱い | ★ Linux そのもの | 最小限 | 中 |
| パッケージ | setup.exe(GUI) | apt / dnf 等 | 限定 | ★ pacman(Arch 譲り) |
| サービス常駐 | cygrunsrv で可能 | systemd 対応 | × | 限定 |
| 主用途 | レガシー Unix スクリプトを Windows で動かす | ★ 開発全般、Docker | git 操作 | ネイティブ Windows バイナリのビルド |
cygwin1.dll の役割
Cygwin で動く全プログラムは cygwin1.dll にリンクされており、Linux の fork 等を Win32 の CreateProcess + メモリコピーでエミュレートします。fork が遅いのはこのためで、シェルスクリプトを大量にループさせるとプロセス起動オーバーヘッドで露骨に遅くなります。
典型的なつまずき
| 症状 | 原因 | 対処 |
|---|---|---|
改行コードが \r\n で混入 | Windows で編集したスクリプト | dos2unix script.sh |
| シンボリックリンクが効かない | Windows 既定で symlink は管理者必要 | 環境変数 CYGWIN="winsymlinks:nativestrict" |
パーミッションが ? で表示 | NTFS 権限と Cygwin の解釈ミスマッチ | CYGWIN="nontsec" または noacl |
| fork: retry: Resource temporarily unavailable | DLL リベース問題 | rebaseall 実行 |
| UTF-8 でファイル名文字化け | ロケール未設定 | export LANG=ja_JP.UTF-8 |
現代における Cygwin の立ち位置
2026 年現在、新規に Unix 環境を Windows 上に作るなら第一選択は WSL2です。WSL2 は本物の Linux カーネルが動き、Docker / systemd / GPU パススルー / VS Code 統合まで揃っています。Cygwin が今でも選ばれるケースは:
- 古い Unix シェルスクリプト資産を Windows パスのまま動かしたい(WSL は
/mnt/c経由が遅い) - WSL2 が使えない環境(Hyper-V 不可、業務 PC 制限)
- Windows のレジストリやサービスと Unix ツールを同一プロセス空間で連携
- cron + cygrunsrv で軽量な常駐スクリプトを動かしたい
FAQ
Q: Cygwin で apt は使える?
A: 公式には setup.exe のみ。非公式の apt-cyg を入れると Linux 風に CLI で扱えます。
Q: Cygwin で作った EXE は他の Windows で動く?
A: cygwin1.dll を同梱すれば動きます。完全に独立した EXE が欲しいなら MSYS2 + MinGW-w64 でビルドしてください。
Q: WSL2 と Cygwin、両方入れて問題ない?
A: 共存可能。ただしファイルパスの考え方が違うので、混在して使うと混乱します。プロジェクト単位でどちらかに寄せるのが無難。