AppPorts ユーザーガイド
本ガイドでは、AppPorts の機能、設計思想、技術実装について体系的に紹介します。より詳細な技術情報はDeepWikiをご参照ください。改善提案はプロジェクトのIssuesまでご提出ください。
概要
AppPorts はmacOS向けに設計されたアプリケーション移行・リンクツールで、大容量アプリケーションを外部ストレージデバイスに移行しつつ、システムの機能と一貫性を完全に維持します。
AppPorts の設計思想
| 原則 | 説明 |
|---|---|
| 透過的な体験 | ユーザー体験とOSが、アプリが依然として内部ストレージから動作していると認識できるようにする |
| 安定した戦略 | 実績のある、より安定した移行アプローチを優先する |
| 低いシステム負荷 | デーモンを使用せず、システムリソースの継続的な消費を回避する |
| 広い国際化 | より多くの言語をカバーすることを優先し、翻訳の網羅性を精度より重視する |
| アクセシビリティ対応 | 包括的なアクセシビリティサポート |
主な機能
- バッジなし移行: 大容量アプリをワンクリックで外付けドライブに移行。ローカルには軽量なランチャーシェルのみを保持し、Finder にショートカット矢印を表示せず、Launchpad と macOS アプリメニューが正常に機能します。
- 自動更新保護: 自動更新に対応したアプリ(Sparkle、Electron、Chrome など)を自動検出し、「ロック移行」オプションを提供して、自動更新プログラムが外付けドライブ上のアプリを削除または上書きするのを防止します。
- コード署名管理: 移行後に「破損」プロンプトが表示された場合、右クリックメニューからワンクリックで再署名が可能です。元の署名のバックアップと復元をサポートし、データディレクトリ移行後の自動再署名にも対応しています。
- macOS 15.1+ App Store 対応: App Store アプリを外付けドライブに直接インストールし、外付けドライブ上でインプレース更新をサポートします。
- ワンクリック復元: アプリをローカルストレージに戻し、自動的にリンクを削除します。移行中断時の自動回復にも対応。
- データディレクトリ管理: アプリのデータディレクトリ(
~/Library/サブディレクトリ、~/.npmなど)を外部ストレージに移行し、ツリービューでのグループ化、検索、ソートをサポートします。
用語集
移行戦略
Deep Contents Wrapper(Contents ディレクトリ移行)
macOS アプリケーションの標準的なファイル構造は以下の通りです:
/Applications/Safari.app/
├── Contents/
│ ├── MacOS/
│ ├── Resources/
│ ├── Frameworks/
│ └── Info.plist
└── ...Deep Contents Wrapper 戦略は、アプリケーションの全コンテンツを外部ストレージに移行し、ローカルには外部の Contents ディレクトリを指すシンボリックリンクのみを持つ空の .app ディレクトリを作成します。macOS は完全な .app パッケージ(ショートカットではなく)を検出するため、Finder には矢印マークが表示されず、アイコン、Launchpad、アプリメニューが正常に機能します。
⚠️ この戦略は現在のバージョンでは非推奨です
Deep Contents Wrapper の主な欠点は、自動更新プログラムがシンボリックリンクをたどって外部ストレージ上のファイルを直接変更し、アプリケーションを破損する可能性があることです。
Stub Portal
Stub Portal アプローチは、ローカルに最小限の .app シェルを作成し、以下の4つのアイテムのみを含みます:
| コンポーネント | 説明 |
|---|---|
Contents/MacOS/launcher | open "/Volumes/External/SomeApp.app" を実行する Bash 起動スクリプト |
Contents/Resources/ | 外部アプリケーションからコピーしたアイコンファイル |
Contents/Info.plist | 外部アプリの Info.plist を簡略化したもの。CFBundleExecutable を launcher に設定、LSUIElement=true(Dock に非表示)、更新関連の設定キーをすべて削除 |
Contents/PkgInfo | 標準の4バイト識別子ファイル |
ユーザーがこのシェルをクリックすると、macOS は launcher スクリプトを実行し、open コマンドを通じて外付けドライブ上の実際のアプリケーションを開きます。ローカルにはシンボリックリンクが存在せず、自動更新プログラムは侵入できません。
iOS Stub Portal
基本的な仕組みは標準 Stub Portal と同じですが、アイコンの処理が異なります。iOS アプリのアイコンは Info.plist で指定されるのではなく、Wrapper/ または WrappedBundle/ ディレクトリ内の複数の AppIcon.png ファイルとして保存されています。処理手順は以下の通りです:
- 最高解像度の
AppIcon.pngファイルを見つける sipsを使用して 256×256 ピクセルにスケーリングsipsを使用して.icnsフォーマットに変換iTunesMetadata.plistからInfo.plistを生成(iOS アプリには標準のInfo.plistが含まれていないため)
Whole Symlink
.app ディレクトリ全体をシンボリックリンクとして外部ストレージに作成します:
/Applications/SomeApp.app → /Volumes/External/SomeApp.appローカルにはシンボリックリンクのみが保持され、実際のファイルは存在しません。macOS はアプリを正常に起動できますが、Finder にはアイコンに矢印ショートカットマークが表示され、Launchpad で稀に互換性の問題が発生する場合があります。自動更新プログラムもシンボリックリンクを通じて外部アプリファイルを操作できます。これは AppPorts のフォールバック移行戦略です。
