mise + pre-commit 設定の供養

blog
tech-others

dotfiles リポジトリで mise と pre-commit を活用していましたが、Nix 移行完了に伴い削除するのでここに知見を残します

Author

uma-chan

Published

2026-01-06

Modified

2026-01-06

1. はじめに

dotfiles リポジトリで mise と pre-commit を活用して CI を構築していましたが、Nix へ移行完了したため不要になりました。削除前に知見を残しておきます。

2. mise.toml

mise.toml
[tools]
# Tools for CI
"aqua:JohnnyMorganz/StyLua"    = "2.3.1"
"aqua:gitleaks/gitleaks"       = "8.30.0"
"aqua:rhysd/actionlint"        = "1.7.9"
"aqua:suzuki-shunsuke/ghalint" = "1.5.4"
"aqua:suzuki-shunsuke/ghatm"   = "1.0.0"
"aqua:suzuki-shunsuke/pinact"  = "3.7.3"
"aqua:zizmorcore/zizmor"       = "1.19.0"
pre-commit                     = "4.5.1"
shellcheck                     = "0.11.0"
shfmt                          = "3.12.0"
uv                             = "0.9.18"

# Custom packages (nix/packages/*.nix)
"aqua:rvben/rumdl"             = "0.0.206"
"aqua:rhysd/vim-startuptime"   = "1.3.2"

2.1. ツール解説

2.1.1. CI/Linter 系

ツール 用途
StyLua Lua フォーマッター (Neovim 設定用)
gitleaks シークレット検出
actionlint GitHub Actions Workflow の Linter
ghalint GitHub Actions のセキュリティ Linter
ghatm GitHub Actions のテンプレート管理
pinact GitHub Actions のバージョン固定
zizmor GitHub Actions のセキュリティスキャナー
pre-commit Git hooks マネージャー
shellcheck シェルスクリプト Linter
shfmt シェルスクリプトフォーマッター
uv Python パッケージマネージャー

2.1.2. 開発ツール系

ツール 用途
rumdl Markdown Linter/Formatter
vim-startuptime Vim の起動時間計測

3. pre-commit-mise.yaml (GitHub Actions Workflow)

GitHub Actions で mise と pre-commit を組み合わせて CI を実行するワークフローです。

.github/workflows/pre-commit-mise.yaml
name: pre-commit (mise)
run-name: ${{ github.event_name }} on ${{ github.ref_name }} by @${{ github.actor }}

on:
  workflow_dispatch:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
    types:
      - opened
      - synchronize
      - reopened

permissions: {}

defaults:
  run:
    shell: bash

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    permissions:
      contents: read

    steps:
      - name: Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          persist-credentials: false

      - name: Install mise
        uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3.5.1
        with:
          cache: true

      - name: Cache
        uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
        with:
          path: |
            ~/.cache/pre-commit
            ~/.cache/uv
            .venv
          key: |
            cache-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.pre-commit-config.yaml', 'uv.lock') }}
          restore-keys: |
            cache-${{ runner.os }}-${{ runner.arch }}-

      - name: Run pre-commit
        run: |
          pre-commit run --all-files --verbose

4. まとめ

mise + pre-commit の組み合わせは開発環境と CI 環境を同一にしつつ CI 実行時間を最短にできるので有用です。 趣味で dotfiles を Nix に移行しただけで mise は悪くないですよ!