
2026/02/04 1:29
**Prek** 「Rustで構築された、より高速で簡単に導入できるpre-commitの代替ツール」
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
prek は Rust で構築された pre‑commit フレームワークのドロップイン置き換えです。高速かつ依存関係不要な実行を提供し、既存の pre‑commit 設定と完全に互換性があります。単一バイナリとして配布され、外部依存はなく、Rust フックと uv 統合を用いて隔離された Python 環境を作成します。主な機能には、プロジェクト間で共有されるツールチェーン(ディスク使用量削減)、モノレポサポート、prek run オプション(--directory、--last‑commit、複数フック選択)、便利な prek list、クールダウン日を伴う自動更新、およびシェル補完があります。このプロジェクトはすでに CPython、Apache Airflow、FastAPI、Home Assistant Core、Django、Requests‑Cache などの主要オープンソースイニシアチブを支えており、その実世界での有効性を示しています。インストールは、スタンドアロンインストーラスクリプト(Linux/macOS/Windows)、PyPI ウィル(
uv、pipx)、Homebrew、mise、Cargo binstall/compile、npmjs パッケージ、Nixpkgs、conda‑forge、Scoop、MacPorts、GitHub Releases、または GitHub Actions(j178/prek-action)で行えます。pre‑commit からの移行は簡単です:新規ユーザーはクイックスタートガイドから開始でき、既存ユーザーは初心者向けウォークスルーを使って設定を作成しフックを実行できます。現在の言語サポートは pre‑commit と完全に同等ではありませんが、今後のリリースでカバレッジを拡大し、プラットフォーム横断的なインストールオプションを追加する予定です。CI/CD パイプラインに依存する開発者や組織にとって、
prek はフック実行の高速化、インフラコストの削減、モノレポ管理の簡素化、全体的な開発者体験の向上という具体的メリットを提供します。プロジェクトは pre‑commit から着想を得ており、感謝の言葉として pre‑commit メンテナと Astral チーム(uv)の貢献が挙げられています。
本文
pre‑commit は、複数の言語で書かれたフックを実行し、それらのフックに必要な言語ツールチェーンや依存関係を管理するフレームワークです。
prek(プレク) は Rust で構築された再設計・高速化・依存性無しの代替品です。pre‑commit のドロップイン置き換えとして機能しつつ、長らく求められていた数多くの機能を追加しています。
特徴
- 🚀 単一バイナリ – Python などのランタイムは不要です。
- ⚡ 高速・軽量 – pre‑commit を上回る速度で、ディスク容量も少なく済みます。
- 🔄 完全互換性 – 元の pre‑commit 設定とフックにそのまま対応します。
- 🏗️ モノレポサポート – ワークスペースモードが組み込まれています。
- 🐍 uv 統合 – Python の仮想環境と依存関係を自動で管理します。
- 🛠️ 改善されたツールチェーンインストール – Python・Node.js・Bun・Go・Rust・Ruby 等の共有インストールが可能です。
- 📦 Rust ネイティブフック – 一部の一般的なフックを Rust で実装し、速度向上を図っています。
目次
インストール
スタンドアロンインストーラ
# Linux / macOS curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.3.1/prek-installer.sh | sh # Windows powershell -ExecutionPolicy ByPass -c "irm https://github.com/j178/prek/releases/download/v0.3.1/prek-installer.ps1 | iex"
PyPI(uv での推奨インストール)
uv tool install prek # グローバルにインストール uvx prek # コマンド一つで実行 uv add --dev prek # プロジェクトの開発依存として追加 pip install prek # pip でフォールバック pipx install prek # 分離環境でのインストール
その他パッケージマネージャ
| Manager | Command |
|---|---|
| Homebrew | |
| mise (v2025.8.11+) | |
| Cargo binstall | |
| Cargo(ソース) | |
| npmjs | / / |
| Nix | または |
| Conda | |
| Scoop (Windows) | |
| MacPorts | |
GitHub Releases
GitHub releases ページ から事前ビルド済みバイナリをダウンロードしてください。
GitHub Actions
公式アクションを利用できます。
name: Prek checks on: [push, pull_request] jobs: prek: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: j178/prek-action@v1
アクションは
prek をインストールし、prek run --all-files を実行します。
クイックスタート
- 既存の pre‑commit ユーザー – クイックスタートガイドにある短い移行チェックリストを参照して安全に切り替えましょう。
- 新規ユーザー – コンフィグ作成、フック実行、Git フック設定など基本操作は初心者向けワークスルーで学べます。
なぜ prek?
パフォーマンス
- pre‑commit より数倍高速です。
- 共通のフック環境とツールチェーンを共有することでディスク使用量が半分に抑えられます。
- リポジトリの並列クローン、依存関係の並列インストールで効率化。
- 同一優先度のフックは同時実行可能です。
による Python 仮想環境作成は速度と効率性が高いことで知られています。uv- Rust 実装の共通フックは Python 実装を上回ります。
- オフライン・ゼロセットアップのフック(
)に対応し、pre‑commit にはない機能を提供します。repo: builtin
ユーザー体験
- Python やその他ランタイムをインストールする必要がなく、単一バイナリで完結。
- 必要な Python バージョンを自動インストールし、仮想環境を作成。
- ワークスペースサポート内蔵 – 各サブプロジェクトに独自
を持たせられます。.pre-commit-config.yaml
で特定ディレクトリのファイルのみフック実行(Git コマンド不要)。prek run --directory <dir>
で変更されたファイルだけを対象に。prek run --last-commit
で複数フック選択。prek run [HOOK] [HOOK]
で ID と説明付きの全フック一覧表示。prek list
によりサプライチェーン攻撃を軽減。prek auto-update --cooldown-days
のシェル補完によりコマンド使用が簡易化。prek run <hook_id>
詳細比較は「pre‑commit との差分」セクション(本文には含まれていません)をご覧ください。
使用者
| プロジェクト / 組織 | リンク |
|---|---|
| Apache Airflow | https://github.com/apache/airflow |
| CPython | https://github.com/python/cpython |
| FastAPI | https://github.com/fastapi/fastapi |
| … | …(原文の完全リスト参照) |
謝辞
本プロジェクトはオリジナルの pre‑commit ツールから大きな影響を受けています。メンテナーとコントリビューターに感謝し、
uv を開発してくださった Astral チームにも特別な敬意を表します。