コンテンツにスキップ
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に切り替えてクロスコンパイル問題を解決