renv による再現可能な R 環境の構築
renv は、Rstudio で有名な Posit 社で開発された、R のパッケージ管理のためのパッケージです。 プロジェクトごとに独立した再現可能な R 環境を構築することができます。
Python でいうところの venv や virtualenv、Node.js でいうところの npm や yarn、Ruby でいうところの Bundler のようなものです。
ちなみに、renv は “R environment” の略ではなく、“reproducible environments” の略だそうです。
ここでは、これだけ覚えれば大丈夫という、renv の基本的な使い方をまとめます。 新しめのパッケージということもあり、将来的に仕様が変わる可能性がありますこと、ご了承ください。 ここでは、2025月7月時点で最新の renv バージョン 1.1.5 を前提としています。
renv のインストール
renv は CRAN からインストールできます。
install.packages("renv")開発版をインストールしたい場合は、r-universe からインストールできます。
install.packages("renv", repos = "https://rstudio.r-universe.dev")特にこだわりがなければ、CRAN からのインストールがおすすめです。
プロジェクトの初期化
renv を使うには、まずプロジェクトを初期化する必要があります。
renv::init() 関数を使います。 引数は特に必要ありません。
renv::init() # init() だけでもOKこのコマンドを実行すると、以下のようなことが行われます。
- プロジェクトのルートディレクトリに
renvフォルダが作成されます。 renv.lockというロックファイルが作成されます。.Rprofileファイルが作成されます。
renv/library フォルダには、プロジェクト専用のパッケージがインストールされます。 これにより、プロジェクトごとに独立したパッケージ環境を持つことができます。
renv.lock ファイルには、プロジェクトで使用されているパッケージの情報が保存されます。
.Rprofile ファイルには、R セッションが開始されるときに自動的に実行されるコードが含まれています。 source("renv/activate.R") というコードが含まれており、これによりプロジェクトのパッケージ環境が自動的にアクティベートされます。
以下のようなメッセージが表示されると思います。
> renv::init()
- Linking packages into the project library ... Done!
The following package(s) will be updated in the lockfile:
# CRAN -----------------------------------------------------------------------
- base64enc [* -> 0.1-3]
- bslib [* -> 0.9.0]
- cachem [* -> 1.1.0]
- cli [* -> 3.6.5]
- digest [* -> 0.6.37]
- evaluate [* -> 1.0.4]
- fastmap [* -> 1.2.0]
- fontawesome [* -> 0.5.3]
- fs [* -> 1.6.6]
- glue [* -> 1.8.0]
- highr [* -> 0.11]
- htmltools [* -> 0.5.8.1]
- jquerylib [* -> 0.1.4]
- jsonlite [* -> 2.0.0]
- knitr [* -> 1.50]
- lifecycle [* -> 1.0.4]
- memoise [* -> 2.0.1]
- mime [* -> 0.13]
- R6 [* -> 2.6.1]
- rappdirs [* -> 0.3.3]
- RColorBrewer [* -> 1.1-3]
- renv [* -> 1.1.5]
- rlang [* -> 1.1.6]
- rmarkdown [* -> 2.29]
- sass [* -> 0.4.10]
- tinytex [* -> 0.57]
- xfun [* -> 0.52]
- yaml [* -> 2.3.10]
The version of R recorded in the lockfile will be updated:
- R [* -> 4.5.1]
- Lockfile written to "C:/GitHub/mysite/renv.lock".
- renv activated -- please restart the R session.R セッションを再起動してくださいと表示されるので、R セッションを再起動します。
再起動すると、以下のように、.Rprofile ファイルが読み込まれ、renv 環境がアクティベートされます。
R 4.5.1 restarted.
- Project 'C:/<project path>' loaded. [renv 1.1.5]'C:/<project path>' の部分は、プロジェクトのパスです。
パッケージのインストール
renv を使ってパッケージをインストールするには、通常の install.packages() 関数が使えます。 しかし、renv::install() 関数を使うこともできます。 この関数では、通常の CRAN のみならず、GitHub や Bioconductor のようなリモートリポジトリからもパッケージをインストールすることもできます。
renv::install() だけでパッケージインストールがまとめられるので、こちらのほうがおすすめです。
また、ここでは深堀りしませんが、より詳細なパッケージインストールの公式ドキュメントは以下になります。
ロックファイルを更新する
パッケージをインストールやアップデートしたら、ロックファイルを更新します。 更新は、renv::snapshot() 関数を使います。
renv::snapshot() # snapshot() だけでもOKこれにより、renv.lock ファイルが更新され、現在のパッケージの状態が保存されます。 パッケージをインストールしたり、アップデートしたりした後は、必ずこのコマンドを実行して、ロックファイルを最新の状態に保つようにしましょう。
最新の状態の場合は、すでに最新であることを知らせるメッセージが表示されます。
> renv::snapshot()
- The lockfile is already up to date.環境を共有する
renv の強みは、簡単にプロジェクトや解析の環境を共有、再現できることです。 関連ファイルを Git などのバージョン管理システムで管理し、共有することができます。 以下のファイル・フォルダをコミットします。
renv.lock
.Rprofile
renv/settings.json
renv/activate.Rrenv/.gitignore(Git を使う場合)
Git を使用している場合、renv/.gitignore ファイルが自動的に作成され、renv/library フォルダなどの不要なファイルが無視されるようになります。
共有先の相手は、これらのファイルを取得し、次節で述べる renv::restore() 関数を使って、同じ環境を再現できます。
ロックファイルから環境を復元する
ほかのマシンや新しい環境で、プロジェクトの環境を復元したい場合は、renv::restore() 関数を使います。
renv::restore() # restore() だけでもOKrenv.lock ファイルに記録されているパッケージがインストールされます。 最新の状態の場合は、すでに最新であることを知らせるメッセージが表示されます。
> renv::restore()
- The library is already synchronized with the lockfile.これで、同じ環境が再現されます。
注意点
renv では、パッケージのバージョンやそのバージョンを簡単に共有できますが、、R のバージョン自体は管理できません。 そのため、異なるマシンで renv::restore() を実行する場合は、R のバージョンが同じであることを確認してください。 同じでない場合は、パッケージインストールの際に警告が表示されたり、エラーが発生したりすることがあります。
まとめ
renv は R のプロジェクト単位のパッケージ管理ツール
導入手順はシンプル
install.packages("renv")でインストールrenv::init()でプロジェクトを初期化- パッケージを
renv::install()で導入 renv::snapshot()でロックファイルを更新- 共有先では
renv::restore()で同じ環境を再現
環境共有が容易:
renv.lockや.Rprofileを Git で管理すれば、他の人や別のマシンでも同じ環境を再構築できる。注意点: R のバージョン自体は管理対象外。再現性を保つには、利用者間で同じ R バージョンを揃えることが重要。
参考
本記事の内容は、以下の公式ドキュメントを参考にしています。
ライセンスについて
本記事で紹介したソフトウェアおよびドキュメント内容には、以下の MIT License が適用されています。
原文(renv - Lisenceより引用)
Copyright 2023 Posit Software, PBC
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.日本語訳(参考)
以下は便宜上の参考訳です。法的効力は英語原文にのみ依拠してください。
著作権表示 (c) 2023 Posit Software, PBC
本ソフトウェアおよび関連するドキュメントファイル(以下「ソフトウェア」)の複製を取得したすべての者に対し、無償で、ソフトウェアを制限なく取り扱う権利を許可する。
この権利には、使用、複製、改変、結合、公開、頒布、再ライセンス、販売、ならびにソフトウェアを提供された者に同様の行為を許可する権利が、制限なく含まれる。
ただし、以下の条件に従うものとする:
上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に含めなければならない。
本ソフトウェアは「現状のまま」提供され、明示的または黙示的を問わず、**商品性、特定の目的への適合性、権利非侵害性**を含むがこれに限定されない、いかなる保証も行わない。
いかなる場合も、著作者または著作権者は、契約、不法行為、その他の原因に基づくものであるかを問わず、ソフトウェアまたはその使用その他の取り扱いに起因または関連して生じたいかなる請求、損害、その他の責任についても責任を負わない。補足説明
要約です。
- このライセンスのポイントは「自由に使えるが、無保証」であることです。
- 再配布や改変も可能ですが、著作権表示とライセンス文を必ず残す必要があります。
- 利用によって生じた損害について、著作権者や開発者は責任を負わないことが明記されています。
