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 ... --waitxcrun 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)

最近更新/作成されたページ