dotfilesとは?GitHubで管理して複数PCの設定をそろえる方法

dotfileを管理して環境をそろえる

職場のPCと自宅のPC、新しく買ったノートPCなどで、.bashrcや.vimrcの中身がばらばらになっていませんか。dotfiles(ドットファイル)をGitHubのリポジトリにまとめておけば、どのPCでもgit cloneしてリンクを張るだけで、同じ設定に戻せます。

やることは大きく3つです。設定ファイルを1つのフォルダに集める、そのフォルダをGitで管理してGitHubに置く、ほかのPCでは取ってきてシンボリックリンク(またはGNU Stow)でホームディレクトリにつなぐ、です。

dotfilesで複数のPCの設定をそろえる流れの図。GitHubのdotfilesリポジトリを職場と自宅のPCの~/dotfilesに取ってきて、ホームの.bashrcと.vimrcからシンボリックリンク(またはGNU Stow)でつなぐ
目次

1. dotfilesとは

1-1. 「.」で始まる設定ファイルのこと

dotfilesは、ホームディレクトリに置かれる「.(ドット)」で始まる設定ファイルのことです。シェル、エディタ、Gitなどの設定がここに入っています。名前が「.」で始まるファイルは、ふだんのlsでは表示されません。-aを付けると見えます。

ls -a ~

よくあるdotfilesの例

  • .bashrc / .zshrc:シェルの設定(エイリアス、プロンプト、PATHなど)
  • .vimrc / .emacs.d:テキストエディタの設定
  • .gitconfig:Gitの設定(名前、メールアドレス、エイリアスなど)
  • .tmux.conf:ターミナルを分割して使うtmuxの設定

bashとzshのどちらの設定ファイルを使うかで迷っている場合は、zshとbashの違いは?どっちを使うべきか・切り替え方(macOS/Linux)で違いと切り替え方を確かめられます。

1-2. まとめて管理するとうれしいこと

  • 新しいPCでもすぐ同じ環境になる:リポジトリを取ってきてリンクを張れば、使い慣れた設定がそのまま使えます。
  • どのPCでも同じ操作ができる:エイリアスやキー設定がそろうので、PCごとに覚え直さなくて済みます。
  • 元に戻せる:Gitで履歴が残るので、設定をこわしてしまっても前の状態に戻せます。

2. dotfilesをGitHubで管理する準備

2-1. ~/dotfilesフォルダを作ってGitで管理する

まず、設定ファイルを集めるフォルダを作り、Gitで管理を始めます。

mkdir -p ~/dotfiles
cd ~/dotfiles
git init

今使っている設定ファイルを、このフォルダへ移します。ここでは.bashrcと.vimrcを例にしています。移したあとはホームディレクトリから元のファイルがなくなるので、すぐ次の「3. シンボリックリンクでつなぐ」でリンクを張ってください。

mv ~/.bashrc ~/dotfiles/.bashrc
mv ~/.vimrc ~/dotfiles/.vimrc

2-2. GitHubのリポジトリに置く

GitHubで空のリポジトリ(例:dotfiles)を作ってから、手元の内容を送ります。YOUR_USERは自分のGitHubのユーザー名に変えてください。リポジトリの作り方はGitHub Docs「新しいリポジトリの作成」に載っています。

cd ~/dotfiles
git add .bashrc .vimrc
git commit -m "最初の設定を追加"
git branch -M main
git remote add origin git@github.com:YOUR_USER/dotfiles.git
git push -u origin main

2-3. パスワードや鍵は入れない

  • SSHの秘密鍵・APIキー・トークンは入れない:~/.sshの中身や、パスワードを書いた設定はリポジトリに入れないでください。公開リポジトリにすると誰でも見られます。
  • 迷ったら非公開リポジトリにする:会社名や社内サーバーの名前など、外に出したくない情報が入りやすいためです。
  • .gitignoreで除外する:PCごとの設定や秘密の情報は別ファイルに分け、そのファイル名を.gitignoreに書いてコミットされないようにします。
# ~/dotfiles/.gitignore の例
.bashrc.local
.zshrc.local
*.secret

3. シンボリックリンクでホームディレクトリにつなぐ

シンボリックリンクは、ファイルの「ショートカット」のようなものです。ホームディレクトリの~/.bashrcを開くと、実際には~/dotfiles/.bashrcが読まれるようにします。こうしておくと、~/dotfilesの中を直してGitで記録するだけで、設定が反映されます。

3-1. ln -sで1つずつリンクを張る

ln -s ~/dotfiles/.bashrc ~/.bashrc
ln -s ~/dotfiles/.vimrc ~/.vimrc

ホームディレクトリに同じ名前のファイルがすでにあると、ln -sは「File exists」と出て止まります。消してしまう前に、名前を変えて残しておくと安心です。

mv ~/.bashrc ~/.bashrc.bak
ln -s ~/dotfiles/.bashrc ~/.bashrc

リンクになっているかはls -lで確かめられます。「.bashrc -> /home/ユーザー名/dotfiles/.bashrc」のように矢印が出ていれば、リンクになっています。

ls -l ~/.bashrc ~/.vimrc

3-2. ほかのPCで同じ設定にする

2台目以降のPCでは、リポジトリを取ってきてリンクを張るだけです。

git clone git@github.com:YOUR_USER/dotfiles.git ~/dotfiles
mv ~/.bashrc ~/.bashrc.bak
ln -s ~/dotfiles/.bashrc ~/.bashrc
ln -s ~/dotfiles/.vimrc ~/.vimrc

設定を変えたPCでgit commitとgit pushをし、ほかのPCでgit pullすれば、全部のPCが同じ内容になります。

cd ~/dotfiles
git pull

4. GNU Stowでリンクをまとめて張る

ファイルが増えてくると、ln -sを1つずつ打つのは大変です。GNU Stowを使うと、フォルダ単位でまとめてリンクを張ったり外したりできます。

4-1. Stowを入れる

多くのLinuxやmacOSでは、パッケージ管理ツールから入れられます。

# Ubuntu / Debian
sudo apt install stow

# Arch Linux
sudo pacman -S stow

# macOS(Homebrew)
brew install stow

4-2. アプリごとにフォルダを分ける

Stowでは、~/dotfilesの中にアプリごとのフォルダ(Stowでは「パッケージ」と呼びます)を作り、その中に、ホームディレクトリに置きたい形のままファイルを入れます。

~/dotfiles/
├── bash/
│   └── .bashrc
└── vim/
    └── .vimrc

2-1でファイルを~/dotfilesの直下に置いた場合は、フォルダを作って移し直します。3でln -sのリンクを張っていた場合は、先にそのリンクを外しておきます。ls -lで「->」が出たもの(リンク)だけをrmで消してください。リンクを消しても、~/dotfilesの中のファイルは消えません。

ls -l ~/.bashrc ~/.vimrc
rm ~/.bashrc ~/.vimrc

リンクを外したら、フォルダを作ってファイルを移します。

cd ~/dotfiles
mkdir -p bash vim
git mv .bashrc bash/.bashrc
git mv .vimrc vim/.vimrc

4-3. stowコマンドでリンクを張る

~/dotfilesに移動して、フォルダ名を指定します。Stowは、指定がなければ「今いるフォルダの1つ上」(ここではホームディレクトリ)にリンクを作ります。

cd ~/dotfiles
stow bash
stow vim

これでbash/.bashrcは~/.bashrcに、vim/.vimrcは~/.vimrcにリンクされます。

実際に変える前に、何が起きるかだけを見たいときは-n(試しに動かす)と-v(くわしく表示)を付けます。

cd ~/dotfiles
stow -n -v bash

ホームディレクトリに同じ名前の普通のファイルがあると、Stowは「conflict」と出して何もせずに止まります。その場合は、3-1と同じように元のファイルを.bakなどに名前を変えてから、もう一度stowを実行してください。

4-4. リンクを外す・張り直す

# bashのリンクを外す
stow -D bash

# 外してから張り直す(ファイルを足したり消したりしたあと)
stow -R bash

オプションの意味は、GNU Stowの公式マニュアルで確かめられます。

5. Gitで変更を記録するコツ

5-1. 何を変えたか分かるメッセージを書く

dotfilesを直したら、こまめにコミットしておきます。「vimの行番号を表示」「PATHに~/.local/binを追加」のように、何を変えたかが分かるメッセージにしておくと、あとで調子が悪くなったときに原因を探しやすくなります。

cd ~/dotfiles
git add vim/.vimrc
git commit -m "vim: 行番号を表示"
git push

5-2. 前の状態に戻す

設定を変えて調子が悪くなったら、履歴を見て、前の内容に戻せます。

cd ~/dotfiles
git log --oneline -- vim/.vimrc
git restore --source=HEAD~1 vim/.vimrc

HEAD~1は「1つ前のコミット」という意味です。git logに出た番号(コミットID)を指定することもできます。Gitの使い方全般はGitの公式ドキュメントにまとまっています。

6. もっと楽にするコツ

6-1. セットアップ用のスクリプトを用意する

新しいPCでは、dotfilesのほかに、よく使うソフトのインストールも必要です。手順をシェルスクリプトにしておくと、毎回同じ作業をくり返さずに済みます。Ubuntu / Debianを例にしたsetup.shです。

#!/bin/bash
set -e

# パッケージの更新とインストール
sudo apt update && sudo apt upgrade -y
sudo apt install -y git vim zsh stow

# dotfilesを取ってくる(すでにあれば取り直さない)
if [ ! -d ~/dotfiles ]; then
  git clone git@github.com:YOUR_USER/dotfiles.git ~/dotfiles
fi

# 同じ名前のファイルがあれば .bak に名前を変える(リンクはそのまま)
for f in .bashrc .vimrc; do
  if [ -e ~/"$f" ] && [ ! -L ~/"$f" ]; then
    mv ~/"$f" ~/"$f".bak
  fi
done

# リンクを張る
cd ~/dotfiles
stow bash
stow vim

# 任意:ログインシェルをzshにする
chsh -s "$(command -v zsh)"

このファイルを~/dotfiles/setup.shとして保存してGitHubに送っておけば、新しいPCではgit cloneのあとに1回動かすだけです(~/dotfilesがすでにあれば、取り直しはしません)。

bash ~/dotfiles/setup.sh

zshを使う場合、プラグインの管理もdotfilesに入れておくと便利です。プラグインマネージャーはzshのプラグインマネージャー【Sheldon】のインストールの手順で入れられます。

6-2. PCごとに少しだけ設定を変える

会社のPCだけ別のフォルダをPATHに足したい、といった違いは、ホスト名で分けるか、PCごとのファイルを読み込む形にすると、同じdotfilesのまま使い分けられます。

# ~/.zshrc の例(ホスト名で分ける)
if [[ $HOST == *"work-pc"* ]]; then
  # 会社用PCの設定
  export PATH="$HOME/work-tools/bin:$PATH"
else
  # 自宅PCの設定
  export PATH="$HOME/.local/bin:$PATH"
fi

# PCごとのファイルがあれば読み込む(.gitignoreで除外しておく)
[ -f ~/.zshrc.local ] && source ~/.zshrc.local

$HOSTはzshで使える変数です。bashでは$HOSTNAMEを使います。

6-3. ときどき見直す

使わなくなったエイリアスや、もう入れていないソフトの設定が残っていると、どこで何を設定したのか分かりにくくなります。半年に1回など、時期を決めて見直すと、ファイルを小さく保てます。

7. まとめ

  • dotfilesは、.bashrcや.vimrcなど「.」で始まる設定ファイルのこと
  • ~/dotfilesに集めてGitで管理し、GitHubに置く(パスワードや鍵は入れない)
  • ほかのPCではgit cloneして、ln -sかGNU Stowでホームディレクトリにつなぐ
  • 同じ名前のファイルがあると止まるので、先に.bakなどに名前を変える
  • スクリプトやPCごとのファイルを使うと、新しいPCの準備がさらに楽になる

まずは.bashrc(または.zshrc)1つだけを~/dotfilesに移し、リンクを張ってGitHubに送るところから始めてみてください。

参考リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次