1. はじめに
設定ファイルを整理するとき、シンボリックリンクを使うと便利です。ファイルやディレクトリへの「別の場所からの入り口」を作れるので、設定の実体を一か所にまとめておけます。
ただ、リンクが増えてくると、次のようなことが気になります。
- どこにリンクを作ったか
- それぞれ何を参照しているか
- 参照先が今も存在するか
- 消してしまったリンクを復元したい
slink は、シンボリックリンクの作成と同時に、リンクの場所と参照先を管理ファイルに記録する macOS 向け CLI です。
作成したリンクの一覧表示、状態の確認、復元まで、コマンドで操作できます。すでにあるリンクを管理対象に追加することもできます。dotfiles に限らず、すべてのシンボリックリンクを手軽に管理できます。
2. インストール
Homebrew からインストールできます。
brew install kkensuke/tap/slink次のコマンドでバージョンが表示されれば、インストール完了です。
slink --version3. まずは使ってみる
設定ファイルを事前に用意する必要はありません。まずは練習用のファイルで試してみましょう。
3.1. リンクを作成する
練習用のディレクトリとテキストファイルを用意します。
mkdir -p ~/slink-demo
cd ~/slink-demo
printf 'Hello, slink!\n' > hello.txthello.txt を参照するリンクを作ります。
slink hello.txt hello-link.txt基本形は次の通りです。
slink <参照先> <作成するリンク>今回の例では、hello.txt が実体で、hello-link.txt がその実体への入り口になります。
リンク経由で中身を読んでみましょう。
cat hello-link.txtOutput:
Hello, slink!元のファイルの内容が表示されます。hello.txt を編集すると、リンク経由で読む内容も変わります。
ディレクトリへのリンクも、同じ書き方で作成できます。
3.2. 登録したリンクを一覧表示する
slink で作成したリンクは、自動で管理対象に登録されます。
slink listリンクの配置先と参照先をまとめて確認できます。
3.3. リンクの状態を確認する
登録どおりのリンクがあり、参照先にもアクセスできるかを確認します。
slink check ~/slink-demo/hello-link.txt問題がなければ、次のように表示されます。
OK 1 links管理しているリンクをまとめて確認する場合は、パスを省略します。
slink check登録内容を見るのが list、実際の状態を確認するのが check です。
4. 管理ファイル
4.1. 保存場所を確認する
リンクの登録内容は、通常、次の TOML ファイルに保存されます。
~/.config/slink/links.toml実際に使用している管理ファイルの場所は、次のコマンドで確認できます。
slink --config管理ファイルは、リンクの作成や adopt による登録の際に自動で作成されます。
4.2. 管理ファイルを開く
macOS の既定のアプリで開くには、次のコマンドを使います。
open "$(slink --config)"VS Code の code コマンドが使える場合は、次のように開くこともできます。
code "$(slink --config)"4.3. 管理ファイルの内容
先ほどのリンクは、ホームディレクトリが /Users/you の場合、次のように記録されます。
[[link]]
link = "/Users/you/slink-demo/hello-link.txt"
target = "/Users/you/slink-demo/hello.txt"| 項目 | 内容 |
|---|---|
link | リンクを配置する場所 |
target | リンクの参照先 |
リンクが増えると、[[link]] のブロックが追加されます。コマンドに相対パスを指定した場合も、管理ファイルには絶対パスで記録されます。
普段の操作は slink のコマンドで行えますが、管理ファイルを開くと、登録したリンクの対応関係を直接確認・編集できます。
5. コマンド一覧
| コマンド | 説明 |
|---|---|
slink <target> <link> | リンクを作成し、参照先と配置先を登録する |
slink --config | 管理ファイルの場所を表示する |
slink list | 登録したリンクの一覧を表示する |
slink check [link ...] | 登録と実際のリンクを照合し、参照先にアクセスできるか確認する |
slink fix [link ...] | 登録内容に合わせてリンクを作成・修復する |
slink unregister <link ...> | リンクを残して、管理対象から外す |
slink remove <link ...> | 登録と一致するリンクを削除し、登録も解除する |
slink adopt <link ...> | 既存のリンクを管理対象に登録する |
slink scan [directory ...] | 指定したディレクトリの直下にあるリンクを探す |
[link ...] のように角括弧で囲まれた引数は省略できます。... は複数のパスを指定できることを表します。
checkとfixは、パスを省略すると登録済みの全リンクが対象になります。unregister・remove・adoptは、登録済みのリンクを指定します。adoptは、未登録のリンクを指定します。scanは、ディレクトリを省略すると現在のディレクトリを探索します。
6. オプション一覧
| 短縮形 | 長い形式 | 説明 |
|---|---|---|
-c | --config | 管理ファイルの場所を表示する |
-f | --force | 作成・fix で、参照先が異なる既存のリンクを置き換える |
-p | --parents | 作成・fix で、リンクを置くために不足している親ディレクトリを作成する |
-n | --dry-run | 作成・fix・unregister・remove・adopt の変更予定を、書き込まずに表示する |
-R | --recursive | scan でサブディレクトリも探索する |
-o | --format <形式> | list・check・scan の出力形式を指定する。human / tsv に対応し、既定は human |
-h | --help | ヘルプを表示する |
-V | --version | バージョンを表示する |
短いオプションは、-np のようにまとめて指定できます。
--config・--help・--version は、それぞれ単独で使います。--config は、別の設定ファイルを指定するオプションではなく、現在の管理ファイルの場所を表示するものです。
slink --help7. よく使う操作
7.1. dotfiles の設定をリンクする
例えば、Neovim の設定を ~/dotfiles/nvim にまとめ、Neovim が設定を探す ~/.config/nvim から参照させたい場合です。
参照先の ~/dotfiles/nvim に設定を用意したうえで、次のように実行します。
slink -p ~/dotfiles/nvim ~/.config/nvim-p を付けると、必要に応じて親ディレクトリの ~/.config を作成します。参照先の ~/dotfiles/nvim 自体を作成するオプションではありません。
これで、~/dotfiles/nvim に置いた設定を ~/.config/nvim 経由で利用できます。
実行前に変更予定を確認したい場合は、-n を付けます。
slink -np ~/dotfiles/nvim ~/.config/nvim内容を確認してから、-n を外して実行します。
7.2. 消してしまったリンクを復元する
登録済みのリンクは、fix で作り直せます。
先ほどの練習用リンクで試してみましょう。まず、リンクだけを削除します。
rm ~/slink-demo/hello-link.txtこの操作では、参照先の hello.txt は残ります。
続いて、登録内容からリンクを復元します。
slink fix ~/slink-demo/hello-link.txtリンク経由で読めることを確認します。
cat ~/slink-demo/hello-link.txtHello, slink!複数のリンクをまとめて復元したい場合は、対象のパスを省略できます。-n を付けると、実際には作成せずに何が起こるかを確認できます。
slink fix -n確認後に実行します。
slink fix7.3. すでにあるリンクを探して登録する
これまで ln -s などで作成したリンクも、slink の管理対象に追加できます。
例えば、~/.config の直下にあるリンクを探すには、次のようにします。
slink scan ~/.configサブディレクトリも含めて探す場合は、-R を付けます。
slink scan -R ~/.configscan は、まだ登録していないリンクも見つけられます。
見つかったリンクを管理対象に追加するには、adopt を使います。例えば、~/.config/nvim がすでにシンボリックリンクになっている場合は、次のように登録します。
slink adopt ~/.config/nvimリンク自体は変更せず、その場所と現在の参照先を登録します。
登録後は、ほかのリンクと一緒に list や check で確認できます。
slink check ~/.config/nvim7.4. リンクを削除する・管理対象から外す
練習用リンクが不要になったら、目的に応じて次のどちらかを使います。
リンクと登録を両方削除する場合は、remove を使います。
slink remove ~/slink-demo/hello-link.txt参照先の hello.txt は削除されません。
リンクを残して管理だけやめる場合は、unregister を使います。
slink unregister ~/slink-demo/hello-link.txtこちらはリンクをそのまま残し、list・check・fix の対象から外します。
詳しい使い方や更新情報は、日本語 README で確認できます。