ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
.app は macOS アプリケーションを表す拡張子ですが、実体は単一のバイナリファイルではなく 「アプリケーションバンドル」と呼ばれる特殊なディレクトリです。Finder ではアイコン 1 つに見え、ダブルクリックすると即起動する一方、右クリック →「パッケージの内容を表示」を選ぶと中身のフォルダ階層を覗くことができます。
この「フォルダなのにファイルに見える」仕掛けは macOS(旧 NeXTSTEP)が古くから採用している設計で、アプリに必要なすべて—実行バイナリ、画像、サウンド、ローカライズリソース、設定 plist、ヘルプ HTML、フレームワーク—を 1 つのバンドル内に自己完結させられます。これにより以下のメリットが生まれます。
- インストールがコピーだけ: .dmg から /Applications にドラッグするだけで完了
- アンインストールも削除だけ: バンドルをゴミ箱に捨てれば原則きれいに消える(環境設定 plist や Library/Application Support の残骸は別途)
- 多言語対応がきれい:
en.lproj、ja.lprojのように言語別フォルダで切り替え - ローカル依存ライブラリも同梱:
Contents/Frameworks/に dylib を入れて配布
内部構造
典型的な .app バンドルは次のようなツリーになっています(例: MyApp.app)。
MyApp.app/
└── Contents/
├── Info.plist # バンドル識別子・バージョン・実行ファイル名等のメタデータ
├── PkgInfo # 4+4 文字の古典的タイプ識別子(APPL????)
├── MacOS/
│ └── MyApp # 実行ファイル本体(Mach-O 形式)
├── Resources/
│ ├── AppIcon.icns # アイコン
│ ├── en.lproj/ # 英語リソース
│ │ └── MainMenu.nib
│ ├── ja.lproj/ # 日本語リソース
│ └── Assets.car # コンパイル済みアセットカタログ
├── Frameworks/ # 同梱する .framework / .dylib
├── PlugIns/ # プラグイン
├── Helpers/ # XPC ヘルパ等
├── embedded.provisionprofile # (Mac App Store / Developer ID 配布時)
└── _CodeSignature/
└── CodeResources # 署名情報
Info.plist はバンドル動作の核となる XML / バイナリ plist で、最低限以下のキーを持ちます。
CFBundleIdentifier:com.example.myapp形式の一意 IDCFBundleExecutable: 起動するバイナリ名(Contents/MacOS/配下)CFBundleName/CFBundleDisplayName: 表示名CFBundleVersion/CFBundleShortVersionString: バージョンLSMinimumSystemVersion: 要求する macOS の最低バージョンNSHighResolutionCapable: Retina 対応フラグLSApplicationCategoryType: App Store カテゴリ
実行バイナリ自体は Mach-O 形式で、Universal Binary にすると Apple Silicon(arm64)と Intel(x86_64)の両方を 1 ファイルに含められます(lipo で結合)。
主な用途
- macOS の通常アプリ: Safari.app、Mail.app、Xcode.app、Finder.app など、すべて .app バンドル
- サードパーティ製品: Visual Studio Code、Chrome、Slack、Notion 等。多くは .dmg 内に .app として配布
- Mac App Store 配布: 同じ .app だが、サンドボックス必須、特権付与に制限
- 自作スクリプトのアプリ化: AppleScript Editor の「アプリケーション形式で保存」、Automator、Platypus(OSS)等で簡単に .app 化できる
- Electron アプリ: Slack や VSCode のように、Chromium + Node を内包した .app として配布される
関連形式との比較
| 形式 | プラットフォーム | 実体 | 備考 |
|---|---|---|---|
| .app | macOS / iOS シミュレータ | ディレクトリ | Info.plist 必須、Mach-O 実行 |
| .framework | macOS / iOS | ディレクトリ | 動的ライブラリ + ヘッダ + リソースのバンドル |
| .bundle / .plugin | macOS | ディレクトリ | ロード専用バンドル(プラグイン) |
| .ipa | iOS | ZIP | 内部に Payload/MyApp.app/ を含む iOS 配布形式 |
| .exe | Windows | 単一ファイル | PE 形式 |
| AppImage | Linux | 単一ファイル | SquashFS 内に .desktop と実行バイナリ |
コマンド・ツール
- open MyApp.app: Finder ダブルクリック相当
- open -a "Safari": 名前指定で起動
- ls MyApp.app/Contents/: バンドル内をターミナルから直接覗ける(フォルダだから)
- defaults read MyApp.app/Contents/Info.plist: Info.plist の中身を読む
- lipo -info MyApp.app/Contents/MacOS/MyApp: 対応アーキテクチャ確認(arm64 / x86_64)
- codesign --verify --deep --strict --verbose=2 MyApp.app: 署名検証
- codesign --sign "Developer ID Application: Name" MyApp.app: 署名付与
- spctl --assess --type execute MyApp.app: Gatekeeper による評価をシミュレート
- xattr -d com.apple.quarantine MyApp.app: 隔離属性を外す(自己責任)
- Xcode: Build & Archive で .app を出力。Archive → Distribute App で公証フローまで一気通貫
注意点
- 署名 + 公証が事実上必須: Developer ID で署名しただけでは macOS 10.15+ では起動を拒否される。
xcrun notarytoolで公証 →stapler stapleでチケット添付がワークフロー - Gatekeeper バイパスの誘導は危険: 「右クリック → 開く」や
spctl無効化を要求するアプリは要警戒 - サンドボックス: Mac App Store 配布時は必須。
com.apple.security.app-sandboxエンタイトルメントで宣言。Developer ID 配布では任意だが推奨 - Hardened Runtime: 公証に必須の保護機能。ライブラリ検証、JIT 許可、ネットワーク等を細かく制御
- クォランティン属性: ダウンロードした .app には
com.apple.quarantine拡張属性が付き、初回起動時に確認ダイアログが出る - 削除しても残るもの:
~/Library/Preferences/<CFBundleIdentifier>.plist、~/Library/Application Support/<App名>/等は手動か AppCleaner 等で削除 - iOS の .app との違い: 同じ拡張子だが iOS では .ipa 内にラップされ、Mach-O は arm64 専用、サンドボックス必須、Info.plist のキーも異なる
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- DMG(.dmg) — .app の標準配布コンテナ
- EXE(.exe) — Windows の対応形式
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?