| この記事の要点 |
|
概要
.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 | 用途 | 特徴 |
|---|---|---|---|
| .dmg | macOS | ディスクイメージ/配布 | UDIF、マウント可、暗号化対応 |
| .iso | クロス | 光学ディスクイメージ | ISO 9660 / UDF。Windows/Linux 標準 |
| .pkg | macOS | インストーラ | installer コマンドで展開。.dmg 内に .pkg を入れることも |
| .app | macOS | アプリ本体 | バンドル。.dmg の中身として配布される |
| .sparseimage / .sparsebundle | macOS | 可変サイズイメージ | 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 を含めて配布するのが現代的
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- app(.app) — .dmg の中身として配布される
- EXE(.exe) — Windows の対応形式
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15