| この記事の要点 |
|
概要
.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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09