はじめに
dotfiles の管理って地味に面倒ですよね?
コミット時にうっかり API キーなどの機密情報をチェックインしてしまったり、YAML や JSON にフォーマットエラーがあったり……。
そんなときに便利なのが yadm
+ pre-commit
の組み合わせです。さらに GitHub Actions を組み合わせることで、以下のような安全で再現性のある dotfiles 管理が実現できます。
-
yadm
で dotfiles を安全に Git 管理 -
pre-commit
で静的チェック・整形・秘密情報検出 - GitHub Actions で定期的なフックの更新やCIチェックの自動化
yadmとは?
yadm
(Yet Another Dotfiles Manager)は、dotfiles をホームディレクトリ直下に自然に展開しながら Git 管理できるツールです。
git
とほぼ同じ操作感で使えますが、リポジトリは ~/.local/share/yadm/repo.git
に管理される点が特徴です。
# 初期セットアップ(既存リポジトリをクローン)
yadm clone git@github.com:yourname/dotfiles.git
# .bashrcファイルを追加
yadm add ~/.bashrc
# コミット
yadm commit -m 'Add bashrc'
yadm には以下のような便利な機能もあります:
- OSごとのファイル分岐(例:
.bashrc##Linux
) - GPG による暗号化ファイル管理(APIキーなどの安全な管理)
-
yadm enter
で一時的な Git 環境へ切り替え
pre-commitとは?
pre-commit
は、Git のコミット前に自動でチェックや整形を実行してくれるフック管理ツールです。
✅ 主な用途
- ファイル末尾の空行チェック
- トレイリングスペース削除
- YAML/JSON/TOML の構文チェック
- APIキーなど秘密情報の誤検出
- Markdownの整形
✅ 導入方法
pip install pre-commit
.pre-commit-config.yaml
をプロジェクトに配置し、以下のコマンドでフックを有効にします:
pre-commit install
yadm と pre-commit の連携方法
yadm
のリポジトリは隠れた場所(~/.local/share/yadm/repo.git
)にあるため、
pre-commit install
は yadm enter
を使って実行する必要があります。
以下は筆者の .pre-commit-config.yaml
の例です:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-json
- id: check-toml
- id: check-added-large-files
- repo: https://github.com/gitleaks/gitleaks
rev: v8.25.1
hooks:
- id: gitleaks
- repo: https://github.com/DavidAnson/markdownlint-cli2
rev: v0.18.0
hooks:
- id: markdownlint-cli2
args: ["--fix"]
yadm enter
pre-commit install
これで yadm commit
時に自動でチェックが走るようになります。
GitHub Actionsでの pre-commit 自動更新
pre-commit autoupdate を CI で定期的に実行することで、フックの定義(バージョン)を常に最新に保てます。これは コード自体のチェックではなく、.pre-commit-config.yaml 内のフックバージョンを自動更新する CI です。
# .github/workflows/pre-commit-autoupdate.yml
name: Update pre-commit version
on:
schedule:
- cron: '0 18 * * *'
workflow_dispatch:
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Upgrade pre-commit
run: |
pip install --upgrade pre-commit
pre-commit autoupdate
- name: Commit and push changes
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
if [[ `git status --porcelain` ]]; then
git add .
git commit -m "Update pre-commit hooks"
git push
else
echo "No changes to commit"
おわりに
yadm
によって dotfiles を整理し、pre-commit
によって安全・快適にチェックできる環境を整えましょう。
改善点・運用方法など、フィードバック大歓迎です!
実際に筆者が運用している dotfiles リポジトリはこちら 👇
👉 https://github.com/Kohei-Wada/dotfiles