この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: Cygwin
SEOタイトル: Cygwin とは? WSL2 / Git Bash / MinGW との違いと現代的な選び方

この記事の要点
  • Cygwin = Windows 上で POSIX(Unix 風)環境を再現するソフトウェア。1995 年〜の老舗
  • cygwin1.dll がシステムコールを Win32 に翻訳。bash / grep / awk / sed / vim / ssh / make 等が動く
  • setup.exe で必要パッケージを選択インストール。アップデートも同じ exe
  • WSL2 と比べると遅い(特にプロセス生成)が、Windows パスをそのまま扱えるのが利点
  • 現代は WSL2(Linux 本体)が第一選択。Git だけなら Git for Windows(MSYS2 派生)、軽量シェルなら PowerShell 7

Cygwin とは

Cygwin は、Windows 上で POSIX(Unix 系)の API を提供するソフトウェアです。1995 年に Cygnus Solutions(後の Red Hat)が開発を始め、現在も OSS として継続開発されています。中核は cygwin1.dll という共有ライブラリで、Linux などのシステムコール(forkopenfcntl 等)を Win32 API に翻訳します。これにより、bash / grep / awk / sed / vim / ssh / make / gcc 等の Unix ツールがほぼそのまま Windows で動きます。

インストール手順

  1. cygwin.com から setup-x86_64.exe をダウンロード
  2. setup.exe を実行 → ミラーサイトを選択(日本なら ftp.jaist.ac.jp など)
  3. 必要なパッケージを「Package」画面で選択(bash は標準、git/ssh/make/gcc/vim/curl 等は別途指定)
  4. インストール完了後、スタートメニューの Cygwin Terminal を起動
  5. パッケージ追加は同じ setup.exe を再実行

ディレクトリ構造

Cygwin パスWindows パス説明
/C:\cygwin64\ルート
/home/USERC:\cygwin64\home\USER\ホーム
/cygdrive/cC:\Windows ドライブ参照
/cygdrive/d/workD:\work\同上
/tmpC:\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 との違い

項目CygwinWSL2Git for WindowsMSYS2
仕組みWin32 API を POSIX に翻訳Hyper-V 上で本物の Linux カーネルMSYS2 派生の最小 BashPOSIX 環境 + pacman
性能fork/exec が遅い★ 速い(ネイティブ Linux)軽量Cygwin 並み
Windows パス★ そのまま扱える/mnt/c 経由(遅い)そのまま扱えるそのまま扱える
Linux 互換POSIX 互換だが Linux 拡張は弱い★ Linux そのもの最小限
パッケージsetup.exe(GUI)apt / dnf 等限定★ pacman(Arch 譲り)
サービス常駐cygrunsrv で可能systemd 対応×限定
主用途レガシー Unix スクリプトを Windows で動かす★ 開発全般、Dockergit 操作ネイティブ 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 unavailableDLL リベース問題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: 共存可能。ただしファイルパスの考え方が違うので、混在して使うと混乱します。プロジェクト単位でどちらかに寄せるのが無難。