シンボリックリンクとは? 別のパスへのポインタ
シンボリックリンク、略してシンボリックリンクは、別のファイルやディレクトリをそのパスで指し示す特別なファイルで、透過的なショートカットとして機能します。
シンボリックリンクは、その中身が別の場所へのパスだけである小さなファイルです。シンボリックリンクにアクセスすると、OSがそれをたどってターゲットへ向かいます。シンボリックリンクは、ツールのバージョンマネージャーやnode_modulesのレイアウトといったもののためにCIで登場し、特にcacheやアーカイブ周りで知っておく価値のある癖を持っています。
シンボリックリンクとは何か
シンボリックリンクはターゲットへのパスを格納します。シンボリックリンク経由での読み書きは、そのターゲットへリダイレクトされます。ターゲットが移動または削除されると、シンボリックリンクは「宙ぶらりん(dangling)」になり、どこも指さなくなります。
作成する
シンボリックリンクはln -s target linknameで作成します。-sフラグはシンボリックを意味します。これがないとhard linkが作成され、それはまったく別のものです。
シンボリックリンク対ハードリンク
- シンボリックリンクはパスを指し、ファイルシステムをまたげます。
- シンボリックリンクはディレクトリをターゲットにできますが、ハードリンクは通常できません。
- ターゲットが削除されると、シンボリックリンクは宙ぶらりんになりますが、ハードリンクは依然として機能します。
シンボリックリンクが登場する場面
nvmのようなバージョンマネージャーはアクティブなツールチェーンをシンボリックリンクします。パッケージのレイアウトは共有依存関係をシンボリックリンクすることがあります。これにより、多くの参照がコピーせずに1つの実体を共有できます。
CIにおけるシンボリックリンク
cacheやartifactのアーカイブは、シンボリックリンクをたどってデータを重複させたり、壊して宙ぶらりんにしたりと、扱いを誤ることがあります。cacheされたディレクトリにシンボリックリンクが含まれる場合、cacheのリストアを生き延びるか検証しましょう。さもないとbuildが不可解に失敗することがあります。
マネージドrunnerにおけるリンク
Latchkeyのrunnerでは、シンボリックリンクはあらゆるLinuxファイルシステムと同様に振る舞います。依存関係のcacheがシンボリックリンクに依存している場合、cacheがそれらを保持することを確認し、リストアされたbuildが正しいターゲットへ解決されるようにしましょう。
重要なポイント
- シンボリックリンクは、ショートカットのように別のパスを指し示すファイルです。
ln -sで作成します。ターゲットが消えるとリンクは宙ぶらりんになります。- CIでは、cacheやアーカイブがシンボリックリンクを壊すことがあるため、生き残るか検証しましょう。