職場のPCと自宅のPC、新しく買ったノートPCなどで、.bashrcや.vimrcの中身がばらばらになっていませんか。dotfiles(ドットファイル)をGitHubのリポジトリにまとめておけば、どのPCでもgit cloneしてリンクを張るだけで、同じ設定に戻せます。
やることは大きく3つです。設定ファイルを1つのフォルダに集める、そのフォルダをGitで管理してGitHubに置く、ほかのPCでは取ってきてシンボリックリンク(または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に送るところから始めてみてください。

コメント