0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yadm × pre-commitで快適dotfiles管理 + CI

Last updated at Posted at 2025-05-12

はじめに

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 installyadm 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?