dotfilesを始めてみた

はじめに

アドベントカレンダー2025 開始します!

この記事は、BBSakura Networks アドベントカレンダー 2025の1日目の記事です。

こんにちは、BBSakura Networksの外山です。 2025年も残り1ヶ月となり、時の流れの早さに驚いています。 さて、12月に入ったということで、今年もBBSakuraではアドベントカレンダーを実施します!

5回目となる今年は、毎日異なるメンバーに執筆いただく予定で、どんな個性あふれる記事が集まるか、今からワクワクしています!

adventar.org

過去のアドベントカレンダーはこちらです。

ここから本題

シンボリックリンクについて知った

業務でアプリケーションをデプロイする際、リバースプロキシとしてNginxの設定を入れることがあります。

その際、sites-availableに作った設定ファイルを有効化するために以下のコマンドを実行します。

sudo ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/

無心で何度かこのコマンドを叩いていましたが、ふとした折に、このコマンドがシンボリックリンクを作成するためのコマンドだということを知りました。

シンボリックリンクとは、リンクされた実体のある他のファイルやディレクトリを指し示すファイルのことで、Windowsにおけるショートカットのようなものです。

先ほどのコマンドでは、sites-available内に作成したconfigの実体へのシンボリックリンクをsites-enabled内に作成し、Nginxが設定を読み込めるようにしています。

この話を知人にしたところ「dotfiles管理で使うから知っていたよ」というフィードバックを受け、PCの設定やライブラリが混沌としてきており整理したかったので、私も試してみることにしました。

dotfilesとは

dotfilesとは、ドットから始まる設定ファイル(~/.zshrc~/.gitconfig)を管理するためのGitレポジトリのことです。

シンボリックリンクのおかげで元のファイル配置を壊さずに設定ファイルを一元管理することができます。

色々な人が自分のdotfilesを公開しているので、何を管理できるのか、どんなカスタマイズができるのか、を見ることができます。

github.com

私が行った手順

レポジトリを作成

GitHub上で「dotfiles」というレポジトリを作成し、ホームディレクトリにcloneします。

zshの設定を管理する

.zshrcや.zprofileがあることを確認

ls -lha

zsh用のディレクトリを作成し、.zshrcや.zprofileをcopy

cd dotfiles
mkdir zsh
cp ~/.zshrc zsh/zshrc
cp ~/.zprofile zsh/zprofile

シンボリックリンクを張り、元ファイルを上書きするためのshellを作成

~/dotfiles/link.sh

#!/usr/bin/env bash

SCRIPT_DIR=$(dirname "$(realpath "$0")")
HOME_DIR=$HOME

# zsh
ln -sfv $SCRIPT_DIR/zsh/zshrc $HOME_DIR/.zshrc
ln -sfv $SCRIPT_DIR/zsh/zprofile $HOME_DIR/.zprofile

shellを実行

chmod +x link.sh
link.sh

シンボリックリンクが正しく張られていることを確認

ls -lha ~
lrwxr-xr-x@   1 youruser  staff    41B 11 15 17:23 .zprofile -> /Users/youruser/dotfiles/zsh/zprofile
-rw-------@   1 youruser  staff    76K 12  1 09:15 .zsh_history
drwx------    7 youruser  staff   224B 11 28 11:47 .zsh_sessions
lrwxr-xr-x@   1 youruser  staff    38B 11 15 17:23 .zshrc -> /Users/youruser/dotfiles/zsh/zshrc

gitやvscodeの設定ファイルも同様に管理

最終的に以下のようなlink.shになりました。 現時点では管理対象が多くないこと、リンクの張り方が一目でわかることから、for文などは使わずstaticに記述しています。

link.sh

#!/usr/bin/env bash

SCRIPT_DIR=$(dirname "$(realpath "$0")")
HOME_DIR=$HOME

# zsh
ln -sfv $SCRIPT_DIR/zsh/zshrc $HOME_DIR/.zshrc
ln -sfv $SCRIPT_DIR/zsh/zprofile $HOME_DIR/.zprofile

# git
ln -sfv $SCRIPT_DIR/git/config $HOME_DIR/.gitconfig
ln -sfv $SCRIPT_DIR/git/ignore $HOME_DIR/.config/git/ignore

# vscode
ln -sfv $SCRIPT_DIR/vscode/settings.json $HOME_DIR/Library/Application\ Support/Code/User/settings.json

# cursor
ln -sfv $SCRIPT_DIR/cursor/settings.json $HOME_DIR/Library/Application\ Support/Cursor/User/settings.json
ln -sfv $SCRIPT_DIR/cursor/keybindings.json $HOME_DIR/Library/Application\ Support/Cursor/User/keybindings.json

# sheldon
ln -sfv $SCRIPT_DIR/sheldon/plugins.toml $HOME_DIR/.config/sheldon/plugins.toml

dotfilesのディレクトリ構成はこのような感じです。

dotfiles % tree .
.
├── cursor
│   ├── keybindings.json
│   └── settings.json
├── git
│   ├── config
│   └── ignore
├── iterm2
│   └── com.googlecode.iterm2.plist
├── link.sh
├── README.md
├── sheldon
│   └── plugins.toml
├── vscode
│   └── settings.json
└── zsh
    ├── zprofile
    └── zshrc

ついでに不要なアプリを削除

普段はHomebrewやpipで、その時に必要になったアプリケーションやパッケージをじゃんじゃんinstallしてしまっています。

全貌を把握できておらずなんとなく不安を感じていたので、最後にinstallしているものの中から不要なものをuninstallし、完了です!

今すぐuninstallできるものが思っていたよりも少なく、安心しました。

削除できそうなものの確認用コマンド

brew leaves
pip3 list

今後

アプリケーションのセットアップコマンドをsetup.shなどに適切に書いておけばPCを新調した際のセットアップがshellの実行だけで完了できるようになるなど、調べると色々と情報が出てきます。

まずは、時々設定が変わっているかとか、追加できそうな便利機能を入れてみるところから始めてみます!