依存ファイル

依存ファイル（dependent file）とはプログラミング用語で、プログラムの実行ファイル以外に必要となるファイルのことである。

Windows OSでは実行ファイルとはいわゆる「EXEファイル」のことであるが、通常、ビルド（コンパイル＆リンク）によって出力された実行ファイルは、プログラム内で使用する関数、クラスなどをランタイムライブラリから呼び出すため、そういったライブラリのない環境では動作しない。こういったDLL、OCXファイルなどを総称して依存ファイルと呼び、プログラムを配布する際にはこれらのファイルの配布も必要になる。

C/C++やDelphiなどの言語では、ビルド時に「静的リンク」を行うことによってこれらのライブラリの機能を実行ファイル内部に取り込むことができる。これによって依存ファイルがなくとも異なる環境での実行が可能となるが、アプリケーションの実行ファイルのサイズは大きくなり、ライブラリのバージョンアップ時に対応するためにはコンパイルをやり直さなくてはならなくなる。「動的リンク」を行えば、実行時にOSのローダーによってライブラリをリンクするため、アプリケーションの実行ファイルのサイズは抑えることができるが、ランタイムライブラリを別に配布する必要が生じる。

従来のVisual Basic（バージョン6以前）においては、一連のランタイムライブラリが必須であり、これらを含んだ適切なインストーラを作成するか、あるいは共通ライブラリ群（VBランタイム）を別途インストールする必要があった。

C#やVisual Basic .NET (VB.NET) などの.NET言語で書かれた.NETアプリケーションでは、言語によらず.NET Frameworkの共通言語ランタイム (Common Language Runtime, CLR) を必要とする。.NET Coreの場合は、.NET FrameworkのCLRとは異なるCoreCLRを必要とする。

C++/CLIの場合、ネイティブコードと.NETのマネージコードが混在するプログラムとなる。マネージコードはコンパイル時に共通中間言語として出力され、実行時に機械語にJITコンパイルされるが、コンパイルオプション/clrはランタイムライブラリの静的リンク/MTと共存できない/clr Restrictions | Microsoft Docsため、.NETのランタイムだけでなくCRT (C Run-Time) のDLLが必須となる。

上記に挙げたように、依存ファイルを必要とするプログラムを実行するためには、通常それらを別にインストールしなければならないが、パッケージ管理システムを利用することで、依存ファイル・ランタイムを別途配布したりインストールしたりするときの手間を省くことができる。

 脚注 

 関連項目 
 ダイナミックリンクライブラリ
 ランタイムライブラリ
 静的リンク
 動的リンク
 リンケージエディタ
 パッケージ管理システム

Category:プログラミング