Zenn Dev Owayo Articles Ce0da822a296ca
pnpm, uv, cargo… 言語ごとの依存更新コマンドを統一するCLI「depup」を作った
- URL: https://zenn.dev/owayo/articles/ce0da822a296ca
- 日付: 2026-06-26
- Tier: Tier 3
- 要旨: Node.js・Python・Rust・Go・Ruby・PHP・Javaの7言語に対応した依存関係アップデートCLI「depup」がRustで実装・公開された。言語ごとに異なるコマンド(pnpm update、uv lock –upgrade、cargo updateなど)を1コマンドに統一し、マニフェストファイル(Cargo.toml、package.jsonなど)を直接更新する。バージョン範囲形式(^、~など)を維持したまま最新版に更新でき、固定バージョンはデフォルトでスキップする。Ageフィルター(–age 2w)でリリースから一定期間を経過したバージョンのみを対象にすることで不安定な最新版を回避でき、pnpmワークスペースやTauriのようなマルチ言語構成にも対応している。
詳細
depup は7言語の依存関係更新を統一するRust製CLIツール。Homebrewでインストール可能(brew install owayo/depup/depup)。
対応言語と設定ファイル:
- Node.js: package.json(npm)
- Python: pyproject.toml(PyPI)
- Rust: Cargo.toml(crates.io)
- Go: go.mod(Go Proxy)
- Ruby: Gemfile(RubyGems)
- PHP: composer.json(Packagist)
- Java: build.gradle(.kts)(Maven Central)
主な特徴:
- ロックファイルではなくマニフェストファイルを直接更新する
- バージョン範囲形式を維持: “^1.2.3” → “^2.0.0”、"~1.2.3" → “~1.3.0”
- ピン固定バージョン(“1.2.3"や”==1.2.3")はデフォルトでスキップ
- –age 2w でリリースから2週間以上経過したバージョンのみ対象
- –only lodash、–exclude react などのフィルタリングオプション
- JSON出力(–json)とdiff出力(–diff)でCI/CD連携も容易
- –install フラグで更新後にインストールコマンドを自動実行
実装上の工夫:
- PEP 440準拠のPythonバージョン形式対応
- Gradle変数定義パターン(def kotlinVersion = ‘…’)への正規表現対応
- OpenSSLを避けてrustls-tlsに切り替えてクロスコンパイル問題を解決