Agent-almanac manage-renv-dependencies
install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/ja/skills/manage-renv-dependencies" ~/.claude/skills/pjt222-agent-almanac-manage-renv-dependencies-f09f93 && rm -rf "$T"
manifest:
i18n/ja/skills/manage-renv-dependencies/SKILL.mdsource content
renv依存関係の管理
renvを使用して再現可能なRパッケージ環境をセットアップして保守する。
使用タイミング
- 新規RプロジェクトへのIの依存関係管理の初期化
- パッケージの依存関係の追加または更新
- 新しいマシンへのプロジェクト環境の復元
- renvのリストア失敗のトラブルシューティング
- CI/CDパイプラインとのrenv統合
入力
- 必須: Rプロジェクトディレクトリ
- 任意: 既存の
ファイル(リストア用)renv.lock - 任意: プライベートパッケージ用のGitHub PAT
手順
ステップ1: renvの初期化
renv::init()
これにより以下が作成される:
ディレクトリ(ライブラリ、設定、アクティベーションスクリプト)renv/
(依存関係のスナップショット)renv.lock
がrenvを読み込み時にアクティベートするよう更新される.Rprofile
期待結果: プロジェクトローカルライブラリが作成される。
renv/ディレクトリとrenv.lockが存在する。.Rprofileがアクティベーションスクリプトで更新される。
失敗時: ハングする場合はネットワーク接続を確認する。特定のパッケージで失敗する場合は、そのパッケージを
install.packages()で手動インストールしてからrenv::init()を再実行する。
ステップ2: 依存関係の追加
通常通りパッケージをインストールする:
install.packages("dplyr") renv::install("github-user/private-pkg")
状態を記録するためにスナップショットを作成する:
renv::snapshot()
期待結果:
renv.lockが新しいパッケージとそのバージョンで更新される。renv::status()が同期外れのパッケージがないことを示す。
失敗時:
renv::snapshot()がバリデーションエラーを報告する場合はrenv::dependencies()を実行して実際に使用されているパッケージを確認し、次にrenv::snapshot(force = TRUE)でバリデーションをバイパスする。
ステップ3: 別のマシンへの復元
renv::restore()
期待結果:
renv.lockの正確なバージョンですべてのパッケージがインストールされる。
失敗時: 一般的な問題:GitHubパッケージの失敗(
.RenvironでGITHUB_PATを設定)、システム依存関係の欠如(Linuxでapt-getを使用してインストール)、大きなパッケージのタイムアウト(リストア前にoptions(timeout = 600)を設定)、またはバイナリが利用不可(renvがソースからコンパイル;ビルドツールがインストールされているか確認)。
ステップ4: 依存関係の更新
# 特定のパッケージを更新 renv::update("dplyr") # すべてのパッケージを更新 renv::update() # 更新後にスナップショットを作成 renv::snapshot()
期待結果: 対象パッケージが最新の互換バージョンに更新される。
renv.lockがスナップショット後に新しいバージョンを反映する。
失敗時:
renv::update()が特定のパッケージで失敗する場合はrenv::install("package@version")で直接インストールしてからスナップショットを作成する。
ステップ5: ステータスの確認
renv::status()
期待結果: 「問題なし」または同期外れのパッケージの明確なリストとアクション可能なガイダンス。
失敗時: ステータスが使用されているが記録されていないパッケージを報告する場合は
renv::snapshot()を実行する。記録されているがインストールされていないパッケージがある場合はrenv::restore()を実行する。
ステップ6: 条件付きアクティベーション用の.Rprofile
設定
.Rprofileif (file.exists("renv/activate.R")) { source("renv/activate.R") }
これによりrenvがインストールされていない場合(CI環境、共同作業者)でもプロジェクトが動作する。
期待結果: プロジェクトディレクトリで開始するとRセッションが自動的にrenvをアクティベートする。renvがインストールされていないセッションもエラーなく起動する。
失敗時:
.Rprofileがエラーを引き起こす場合、file.exists()ガードが存在することを確認する。source("renv/activate.R")を条件なしで呼び出してはならない。
ステップ7: Git設定
これらのファイルをトラックする:
renv.lock # 常にコミット renv/activate.R # 常にコミット renv/settings.json # 常にコミット .Rprofile # コミット(renvアクティベーションを含む)
これらは無視する(renvの
.gitignoreに既に含まれる):
renv/library/ # マシン固有 renv/staging/ # 一時的 renv/cache/ # マシン固有のキャッシュ
期待結果:
renv.lock、renv/activate.R、renv/settings.jsonがGitでトラックされる。マシン固有のディレクトリ(renv/library/、renv/cache/)が無視される。
失敗時:
renv/library/が誤ってコミットされた場合はgit rm -r --cached renv/library/で削除し、.gitignoreに追加する。
ステップ8: CI/CD統合
GitHub Actionsではrenvキャッシュアクションを使用する:
- uses: r-lib/actions/setup-renv@v2
これにより
renv.lockからキャッシュを使用して自動的に復元される。
期待結果: CIパイプラインがキャッシュを有効にして
renv.lockからパッケージを復元する。キャッシュされたパッケージにより後続の実行が高速化される。
失敗時: CIの復元が失敗する場合、
renv.lockがコミットされて最新であるか確認する。プライベートGitHubパッケージには、GITHUB_PATがリポジトリシークレットとして設定されているか確認する。
バリデーション
-
が問題なしを報告するrenv::status() -
がバージョン管理にコミットされているrenv.lock -
がクリーンなチェックアウトで動作するrenv::restore() -
が条件付きでrenvをアクティベートする.Rprofile - CI/CDが依存関係解決に
を使用するrenv.lock
よくある落とし穴
- 間違ったディレクトリで
を実行: 最初にrenv::init()
を確認するgetwd() - renvとシステムライブラリの混在:
後はプロジェクトライブラリのみを使用するrenv::init() - スナップショットを忘れる: パッケージのインストール後は常に
を実行するrenv::snapshot()
フラグ:--vanilla
はRscript --vanilla
をスキップするため、renvはアクティベートされない.Rprofile- 差分の大きなロックファイル: 正常 —
は差分可能なJSONとして設計されているrenv.lock - Bioconductorパッケージ:
を使用してBiocManagerが設定されていることを確認するrenv::install("bioc::PackageName")
関連スキル
- renv初期化を含むcreate-r-package
- renvとのCI統合setup-github-actions-ci
- CRANパッケージの依存関係管理submit-to-cran