©️

fishのconfigを仕事用の設定と分ける

に公開
2025/11/05

課題

みなさん、新しいパソコンを買った時や、転職でPCを貸与された時のために、dotfilesというリポジトリでパソコンの初期構築を手軽にするいろんな独自の仕組みを作ってるかと思います。

そういう私もdotfilesを作成し、fishやvim、miseなどの設定を配置しています。
それをクローンしてきた後に自動で適切な場所に配置するようなシェルを書いて同様に配置しています。
そのため、クローンした直後から、新しいパソコンにこれまでと同じようなパッケージなどを入れることができるようになっているので、立ち上がりがものすごく早いと言うことになります。

そんな中、立ち上がりは早いのですが、仕事のパソコンと個人のパソコンとでやはり微妙に設定が異なるものを入れる必要があったりとかもします。
個人のものであればコミットして、次のパソコンへ移行するときにも同じような形で使うことができるのですが、仕事のものを個人のdotfilesに入れるのは憚られます。

そこでこの問題をどのように解決したらいいのかというのを考えました。

解決方法

まず、自分の個人のための設定ファイルを配置します。
ここではfishの設定ファイルである、config.fishを作成します。
これに関して言えば、特に考えずに、自分の好きな設定を好きなように追加するだけです。

配置場所

続いて仕事用の設定を配置します。work.fishという名前で作成し、同じディレクトリー内に配置します。

...
── fish
│   ├── config.fish
│   └── work.fish
...

config.fishでは、以下のようにして読み込み上書きをすることで、仕事用のものと受けることができます。

config.fish
if test -f ~/.config/fish/work.fish
    source ~/.config/fish/work.fish
end

これによってデフォルトで読み込まれたconfig.fishの中でwork.fishを読み込むことで仕事用の設定を上書きすることができます。
同じ名前のエイリアスなどは上書きすることで仕事用のに載せ替えることができます。

ユースケース

例えば、自分の場合は仕事用のリポジトリへの移動をエイリアスとして配置したり

ghコマンドで自分に対してレビュー依頼が来ているかどうかを確認するために、仕事のOrganizationに絞り込んだ状態で確認できるようなコマンドをエイリアスとして置いています。

必要なものだけコミットして、内容はコミットしないように工夫

しかし、これだとwork.fishもdotfilesのリポジトリにコミットしてしまうことになるんではないかと思う人もいるかもしれません。
それを解消しようとしたのが今回の記事の目玉です。

まず最初にwork.fishを作成したら、即座にプッシュしてしまいます。
その後に仕事用のエイリアスなどを書き込みます。
そしてwork.fishに対して以下のコマンドを適用します。

git update-index --assume-unchanged [{path/to/dotfiles}/work.fish]

これによってGitの管理から外すことができます。
しかし、一度コミットしているので、リモートリポジトリには配置されている状態です。

私自身の設定ファイルは、以下のようなshellファイルを作っており、実行すると、自動で適切な場所にシンボリックリンクを貼ることができるようになっています。

# Fish設定
create_directory "$HOME_DIR/.config/fish"
create_symlink "$DOTFILES_DIR/fish/config.fish" "$HOME_DIR/.config/fish/config.fish"
create_symlink "$DOTFILES_DIR/fish/work.fish" "$HOME_DIR/.config/fish/work.fish"

そのため、リモートにファイルさえあれば、クローンしてきた後に即座にシェルでシンボリックリンクを貼ることができ、適切な場所にwork.fishも配置することができます。
かつ、config.fishの中で読み込むことを自動的に行うことができます。

その後は、これまでと同様に、dotfilesの中のconfig.fishとwork.fishを編集すれば、シンボリックリンクにより自動で更新されるので下記のコマンドを実行するだけで適用されます。

source ~/{path/to/config}/config.fish

まとめ

今回はfishに絞った内容になっていますが、それ以外の設定ファイルも同様に行うことができます。
例えば、自分の場合はmiseも仕事用のもので使うツールが異なるので、仕事用の設定ファイルと個人用の設定ファイルをマージできるようにしています。

この辺に書いてあるので、参考にしてみてください。
https://mise.jdx.dev/configuration.html#how-configuration-merging-works

皆さんも、転職したりとかしたときに、即座にパソコンを使い慣れたものにできるようにdotfilesを成長させておくと良いかもしれません。

Discussion