はじめに
私は普段 Mac で作業していますが、たまに Linux に dotfiles を持ち込みたくなることがあります。
ですが、いつもエラーが出るので困ってしまいます。
( 新しい Mac を再セットアップするときも同様 )
そこで、dotfiles の品質を維持するために、GitHub Actions を使った CI に取り組んでみました。
- テスト項目
- 実行時エラーチェック ( Mac, Linux )
- セットアップ用のスクリプト (シンボリックリンク作ったり) の実行
-
.bash_profile
や.bashrc
の読み込み -
brew bundle
の実行 ( Mac のみ )
- 静的解析
- Shell Script (セットアップ用スクリプト, .bash_profile, .bashrc)
- Vim Script ( init.vim )
- TOML ( dein.vim )
- 実行時エラーチェック ( Mac, Linux )
( 自分のリポジトリに PR する習慣がないので、いつも master に直接 push しています ) git の内容が変更されると自動的にテストが走り
Badge | 意味 |
---|---|
![]() |
![]() |
![]() |
![]() |
と教えてもらえます。
dotfiles の構成
$ tree -a -I ".git|.gitignore|archive|gitconfig|iTerm2|tigrc|README.md"
.
├── .github
│ └── workflows
│ ├── lint.yml # 静的解析用ワークフロー
│ ├── linux.yml # 実行時エラーチェック用ワークフロー (Linux)
│ └── macos.yml # 実行時エラーチェック用ワークフロー (Mac)
├── Brewfile
├── bash_profile
├── bashrc
├── bin
│ └── init.sh # セットアップスクリプト ( $HOME にシンボリックリンクを作成 )
└── nvim # Neovim + dein.vim の設定ファイル
├── dein.toml
├── dein_statusline.toml
└── init.vim
GitHub Actions ワークフロー
.github/workflows
に yaml ファイルを置いて設定を記述します。
詳しい構文は以下をご参照ください。
実行時エラーチェック ( Mac, Linux )

Run brew bundle ( Mac )
- name: Run brew bundle
run: brew bundle
Brewfile
に記述したアプリが Mac にインストールできることをテストします。
Run init.sh
- name: Run init.sh
run: ${GITHUB_WORKSPACE}/bin/init.sh
セットアップ用スクリプト ( シンボリックリンクを作成したりする ) が正しく動作することをテストします。
エラー発生時に終了コードが0にならないように、スクリプト側で set -e
コマンドを実行しています
Load .bash_profile & .bashrc
- name: Load .bash_profile
run: |
bash ~/.bash_profile 2> error.log; cat error.log
if [ -s error.log ]; then false; fi
- name: Load .bashrc
run: |
bash ~/.bashrc 2> error.log; cat error.log
if [ -s error.log ]; then false; f
.bash_profile や .bashrc を読み込んだときに、標準エラー出力がないことをテストします。
セットアップコマンドのときのように set -e
コマンドを使うとシェルが落ちてしまうので、苦肉の策です。
静的解析
- ワークフロー

Check bin/init.sh
- name: Check bin/init.sh
run: shellcheck ${GITHUB_WORKSPACE}/bin/init.sh
shellcheck を利用して、セットアップ用スクリプトの書き方に問題がないことをテストします。
Check .bash_profile & .bashrc
- name: Check .bash_profile
run: shellcheck ${GITHUB_WORKSPACE}/bash_profile --exclude=SC2148,SC1090
- name: Check .bashrc
run: shellcheck ${GITHUB_WORKSPACE}/bashrc --exclude=SC2148,SC1090
同上。
ただし、いくつかの警告を無視するように設定しました。
Check nvim/init.vim
- name: Check nvim/init.vim
run: vint ${GITHUB_WORKSPACE}/nvim/*.vim -cstV --enable-neovim
vint を利用して、Neovim の設定ファイルの書き方に問題がないことテストします。
Check nvim/*.toml
- name: Check nvim/*.toml
run: |
curl -sL https://raw.githubusercontent.com/vmchale/tomlcheck/master/sh/check | sh || true
find ${GITHUB_WORKSPACE}/nvim/*.toml -type f | xargs -I {} ${GITHUB_WORKSPACE}/tomlcheck --file {}
tomlcheck を利用して、Neovim のプラグインを記述している TOML ファイルの書き方に問題がないことテストします。
ワイルドカードが使えなかったので、苦肉の策です。
最後に
まだ改善の余地は多いと思うので、ご意見いただけると嬉しいです。