ポータブルアプリケーション

ポータブルアプリケーション（英: Portable Application）とは、実行するにあたってコンピュータに固定の補助記憶装置にインストールする必要がないソフトウェアであり、CD-ROM、USBメモリ、フロッピーディスクなどの可搬媒体から実行できるものをいう。互換性のある任意のコンピュータシステム上で動作させることができ、一般にオペレーティングシステム (OS) が同じであればよい（例えば、Windows XP以上や、Linuxなど）。この場合の「ポータブル」は「可搬」という意味であり、「移植」という意味ではない（ソースコードのコンパイルによって異なるプラットフォームで動作できるよう設計されているわけではない）。

ポータブルアプリケーションは、自身の設定情報やデータもプログラム本体と同じ可搬媒体に格納できるよう設計されている。

Windows 
Windows向けソフトウェアの多くは、ポータブルな設計ではない。レジストリとMicrosoft Installerの構造が、インストールしたプログラムとマシンを結び付けてしまうためである。多くのWindowsアプリケーションはレジストリを多用しており、状態情報もファイルシステムの各所に格納している。

ポータブルアプリケーションにするためには、実行前と実行後でそのコンピュータ内のファイルに変化を与えないようにしなければならない。すなわち、レジストリを使うことはできず、アプリケーションのインストールされたディレクトリ以外にファイルを残すこともできない。可搬媒体にインストールする場合、設定をレジストリではなくINIファイルなどの設定ファイルに格納する必要がある。

アプリケーションのソース修正をせずに可搬性を実現する手法として、アプリケーション仮想化がある。これは、アプリケーションがファイルシステムやレジストリにアクセスしようとしたとき、その要求を横取り（インターセプト）し、（アプリケーション自身は知らない）別の媒体上のファイルへのアクセスに変換するランタイム層を設けるものである。この場合、アプリケーション自体は変更せず、なおかつ可搬性を実現できる。

このランタイム層は、DLLインジェクションと呼ばれる技法を使って実行時にアプリケーションへ埋め込まれ、アプリケーション毎のラッパーを形成する。このラッパーはアプリケーション起動時に活性化され、ファイルやレジストリに関連するシステムコールをフックしてリダイレクトし、可搬媒体上だけを操作する。

この手法は、アプリケーション全体だけでなく、個々のコンポーネント（ランタイムライブラリ、COMコンポーネント、ActiveX）にも適用できる。これを利用すると、同じOS上で競合することなくそれぞれ設定の異なる複数のポータブルアプリケーションのインストールを行うことができる。このようなコンポーネントはOSが保護しているレジストリなどにアクセスしないため、インストールや管理において特権を必要としない。

macOS 
macOS向けのアプリケーションは、Installerパッケージではなく"drag-install"アプリケーションバンドルとしてパッケージ化されている（例外あり）ため、ある程度の可搬性を有する。アプリケーションを実行するだけであれば、好きなボリュームから起動可能である。

しかし、完全なポータブルではないことが多く、OSのインストールされたファイルシステムに初期設定ファイルやキャッシュなどのファイルを作成することが多い。

UNIX 
Unix系向けのアプリケーションは、どんな仮定もしないことが多い。例えば、Windowsでは伝統的にユーザーが特権を持っていることを仮定しているアプリケーションが多かったが、Unix系では非特権ユーザーとして利用することが多いため、そのようなアプリケーションは"Permission denied"エラーとなる。従って、アプリケーションは環境変数HOMEを使って設定を格納する場所を決めるのが一般的である（例えばw3mブラウザの場合は$HOME/.w3m）。動的ライブラリには環境変数LD_LIBRARY_PATHがあるため、アプリケーションに標準でないディレクトリを参照させることもできる。これは別の場所でプログラムを実行することを（技術的観点から）特に簡単にする。/mntにポータブルなプログラムと設定ファイルがあるとしたとき、コマンド行は次のようになる。

 HOME=/mnt/home/user LD_LIBRARY_PATH=/mnt/usr/lib /mnt/usr/bin/w3m en.wikipedia.org

しかし、全てのプログラムがこのようになっているわけではない。例えば、$HOMEを無視して/etc/passwdを参照してホームディレクトリを探すものもあり、可搬性を犠牲にしている。

Portable Applications (Linux)

ダブルポータビリティ 
ダブルポータビリティとは、可搬性と移植性を兼ね備えていることを意味し、クロスプラットフォームで動作するポータブルアプリケーションを意味する。MacintoshのUniversal Binaryなどのファットバイナリがあるが、必ずしも可搬とは限らない。

脚注

関連項目 
仮想化

外部リンク 
 PortableApps.com　-　PortableApps.com。Windows向けにポータブルアプリケーションの開発を行っている。

アプリケーションソフト