ポータブルアプリケーション
ポータブルアプリケーション(英: Portable Application)とは、実行するにあたってコンピュータの固定二次記憶装置にインストールする必要がないソフトウェアであり、CD-ROM、USBメモリ、フラッシュメモリ、フロッピーディスクなどの可搬媒体から実行できるものをいう。互換性のある任意のコンピュータシステム上で動作させることができ、一般にオペレーティングシステムが同じであればよい(例えば、Microsoft Windows XP 以上や、Linux など)。この場合の「ポータブル」は「可搬」という意味であり、「移植」という意味ではない(ソースコードのコンパイルによって異なるプラットフォームで動作できるよう設計されているわけではない)。
ポータブルアプリケーションは、自身の設定情報やデータもプログラム本体と同じ可搬媒体に格納できるよう設計されている。
目次 |
[編集] Windows
Microsoft Windows 向けソフトウェアの多くは、ポータブルな設計ではない。レジストリと Microsoft Installer の構造が、インストールしたプログラムとマシンを結び付けてしまうためである。多くの Windows アプリケーションはレジストリを多用しており、状態情報もファイルシステムの各所に格納している。
ポータブルアプリケーションにするためには、実行前と実行後でそのコンピュータ内のファイルに変化を与えないようにしなければならない。すなわち、レジストリを使うことはできず、アプリケーションのインストールされたディレクトリ以外にファイルを残すこともできない。可搬媒体にインストールする場合、設定をレジストリではなくINIファイルなどの設定ファイルに格納する必要がある。
アプリケーションのソース修正をせずに可搬性を実現する手法として、アプリケーション仮想化がある。これは、アプリケーションがファイルシステムやレジストリにアクセスしようとしたとき、その要求を横取り(インターセプト)し、(アプリケーション自身は知らない)別の媒体上のファイルへのアクセスに変換するランタイム層を設けるものである。この場合、アプリケーション自体は変更せず、なおかつ可搬性を実現できる。
このランタイム層は、DLLインジェクションと呼ばれる技法を使って実行時にアプリケーションへ埋め込まれ、アプリケーション毎のラッパーを形成する[1]。このラッパーはアプリケーション起動時に活性化され、ファイルやレジストリに関連するシステムコールをフックしてリダイレクトし、可搬媒体上だけを操作する。
この手法[1]は、アプリケーション全体だけでなく、個々のコンポーネント(ランタイムライブラリ、COMコンポーネント、ActiveX)にも適用できる。これを利用すると、同じオペレーティングシステム (OS) 上で競合することなくそれぞれ設定の異なる複数のポータブルアプリケーションのインストールを行うことができる。このようなコンポーネントはOSが保護しているレジストリなどにアクセスしないため、インストールや管理において特権を必要としない。
[編集] Mac OS X
Mac OS X 向けのアプリケーションは、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 を参照してホームディレクトリを探すものもあり、可搬性を犠牲にしている。
[編集] ダブルポータビリティ
ダブルポータビリティとは、可搬性と移植性を兼ね備えていることを意味し、クロスプラットフォームで動作するポータブルアプリケーションを意味する。Macintosh の Universal Binary などのファットバイナリがあるが、必ずしも可搬とは限らない。
[編集] 脚注
[編集] 関連項目
[編集] 外部リンク
- PortableApps.com - Windows向けにポータブルアプリケーションの開発を行っている。