◀ 4.

DMG ファイル(.dmg)とは | Apple Disk Image・UDIF・hdiutil・公証

▶
この記事の要点
  • .dmg は Apple Disk Image。macOS でアプリ配布や仮想ディスクとして広く使われる
  • フォーマットは UDIF(Universal Disk Image Format)が標準。圧縮・暗号化・読み取り専用化が可能
  • ダブルクリックでマウントすると Finder にディスクとして現れ、中の .app をドラッグ&ドロップでインストール
  • 配布時は Apple Developer ID で署名 + 公証(notarization)しないと Gatekeeper にブロックされる
  • コマンドラインは hdiutil create / attach / detach / convert

概要

.dmg(Apple Disk Image)は、macOS でディスクの内容を 1 ファイルにまとめたイメージ形式です。Windows でいう .iso に近い役割を果たしますが、macOS と深く統合されており、ダブルクリックするだけで Finder に仮想ディスクとしてマウントされ、内部のファイルやアプリを直接操作できます。

macOS アプリの配布形式として最もポピュラーで、開発者は .app バンドルを .dmg に詰めて配布します。ユーザは .dmg を開いて、表示された .app アイコンを「Applications」フォルダのエイリアスにドラッグするだけでインストールが完了するという、極めてシンプルな UX が特徴です。

歴史的には NeXTSTEP 時代から続く Apple のディスクイメージ文化を受け継いでおり、現在の標準フォーマットは UDIF(Universal Disk Image Format)です。HFS+ や APFS でフォーマットされたパーティション情報を含み、暗号化、圧縮、読み取り専用化など多彩なオプションを備えます。

内部構造

UDIF 形式の .dmg は、ファイル末尾に koly トレーラブロック(512 バイト)を持つことが最大の特徴です。シグネチャは 6B 6F 6C 79(ASCII "koly")。トレーラには以下が含まれます。

  • UDIF ヘッダのチェックサム
  • XML / plist プロパティリストのオフセットとサイズ
  • データフォーク・リソースフォークの位置
  • セクタ数、イメージ全体サイズ

本体データは BLKX テーブルと呼ばれるブロックリストで管理されます。各エントリは「圧縮方式 + オフセット + 元サイズ + 圧縮後サイズ」を持ち、必要なブロックだけをオンデマンドに伸長できる構造です。圧縮アルゴリズムには ADC、zlib、bzip2、LZFSE、LZMA などが選択でき、特に LZFSE や LZMA を使うと圧縮率が高く配布サイズを抑えられます。

マウント時には macOS の diskimages-helper がイメージを解析し、仮想ディスクデバイス(/dev/diskN)を生成、/Volumes/<ボリューム名> にマウントします。内部のファイルシステムは通常 HFS+J(ジャーナル付き)か APFS で、Spotlight 検索やアクセス権、リソースフォークもそのまま保持されます。

主な用途

  • アプリ配布: Firefox、Chrome、各種開発ツールなど、Web からダウンロードする macOS アプリの標準形式
  • OS インストーラ: macOS のメジャーアップデート、リカバリイメージ
  • 暗号化コンテナ: AES-128/256 暗号化付き .dmg を作り、機密ファイル置き場として使う(Windows でいう VeraCrypt 的用途)
  • バックアップ: フォルダや CD/DVD の内容を .dmg に固めて保存
  • 仮想 FS の配布: フォントセット、サンプルデータパックなど、まとめて配るのに便利

関連形式との比較

形式OS用途特徴
.dmgmacOSディスクイメージ/配布UDIF、マウント可、暗号化対応
.isoクロス光学ディスクイメージISO 9660 / UDF。Windows/Linux 標準
.pkgmacOSインストーラinstaller コマンドで展開。.dmg 内に .pkg を入れることも
.appmacOSアプリ本体バンドル。.dmg の中身として配布される
.sparseimage / .sparsebundlemacOS可変サイズイメージTime Machine ネットワークバックアップ等

コマンド・ツール

  • マウント: hdiutil attach foo.dmg または Finder でダブルクリック
  • アンマウント: hdiutil detach /Volumes/Foo
  • 作成: hdiutil create -volname "MyApp" -srcfolder ./MyApp -format UDZO out.dmg(UDZO = zlib 圧縮の読み取り専用 UDIF)
  • 変換: hdiutil convert in.dmg -format UDBZ -o out.dmg(UDBZ = bzip2、ULFO = LZFSE、ULMO = LZMA)
  • 検証: hdiutil verify foo.dmg
  • 署名: codesign --sign "Developer ID Application: Name" foo.dmg
  • 公証: xcrun notarytool submit foo.dmg --apple-id ... --wait → xcrun stapler staple foo.dmg
  • Disk Utility.app: GUI で作成・変換・暗号化を行える標準アプリ
  • create-dmg(OSS): 背景画像付き・アイコン配置済みのカスタム .dmg を簡単に作るスクリプト

注意点

  • Gatekeeper と公証: macOS 10.15 Catalina 以降、Developer ID 署名だけでは不十分で notarization(公証)が必須。公証していない .dmg は「開発元を確認できないため開けません」と拒否される
  • Stapling: 公証チケットを stapler staple で .dmg に添付しておくと、ユーザがオフラインでも検証できる
  • Quarantine 属性: ブラウザでダウンロードした .dmg には com.apple.quarantine が付与され、初回マウント時に警告ダイアログが出る
  • サイズと圧縮: UDZO(zlib)は互換性重視、ULFO(LZFSE)は macOS 10.11 以降専用だが速くて高圧縮
  • 暗号化 .dmg のパスワード: キーチェーンに保存しないと毎回入力が必要。失念すると復号不可能
  • Apple Silicon 対応: ARM64 / x86_64 のユニバーサル .app を含めて配布するのが現代的

関連リンク

Post Share
子ページ

子ページはありません

同階層のページ
  1. EXE(.exe)
  2. DLL(.dll)
  3. MSI(.msi)
  4. DMG(.dmg)
  5. DEB(.deb)
  6. RPM(.rpm)
  7. APK(.apk)
  8. IPA(.ipa)
  9. AppImage(.appimage)
  10. app(.app)