はじめに
論文を読んだりしているとRの記述が出てくることが多くなってきたので、Rの勉学も始めました。
Rの導入自体はかなり簡単にできますが、業務上でどうやってコードを管理したりしていくのか?についての記事がすくないと感じました。Rではパッケージごとに依存関係が原則異なるため、環境を分離して管理することが再現性確保に重要です。
以上の背景から生成AIと共に自分で調べました。その内容をご紹介したいと思います。
※内容の不備などがあるかもしれませんので、適宜生成AIツール(例:ChatGPT)と併用してください。
想定読者
- Pythonユーザー
- Rを学び始める初学者
- 業務上利用する計画がある人、複数人でコーディングする予定がある人
最終ゴール
- プロジェクト毎にコードの管理だけでなく、環境の管理が出来るようになる
R, RStudioのインストール
Rは統計学に特化したプログラミング言語で、RStudioはそのRを動かすためのIDEです。昨今ではRStudioよりもpositのほうが良いケースも出ています。positに関してはここでは触れませんがどのIDEがいいんだ?という課題が出た際は、調べてみてください。
R, RStudioは以下のサイトからダウンロードします。ダウンロードウィザードでPATH環境変数に関する部分はチェックをいれておいてください。Rはwindows, mac, linuxそれぞれで利用可能です。自分のPC環境を確認してダウンロードとインストールを行います。
Option: Rtoolsのインストール
ベイズ推定をされる方は、拡張機能のRtoolsが必須です。こちらからダウンロードします。
※Windowsの場合
Software > R_binaries
で環境ごとにフォルダが確認できるので、
Windows > Rtools > Rtools X.X (X.XはRのバージョンと揃えてください)
でダウンロード・インストールします。
※windows以外の場合
ベイズ推定する場合は基本rstanパッケージで行いますが、内部はC++で処理されているようです。macOS/Linuxでは「Xcode Command Line Tools」や「build-essential」で代替可能です。詳しくは別途調べてみてください。
めざす環境構造について
ライブラリの環境構造
Pythonと少し似ています。私の理解では以下のようになっていると認識しています。
RそのものはRのバージョンとともに保管されていて、PackagesにはRインストール時に必要最低限インストールされるもの(Base, Recommended)とユーザーが個別にインストールするものがそれぞれラベルを張られた状態で保存されています。これらをProject directoryから .Rで呼び出して使われています。複製はされません。
目指す管理構造
以下の様にPythonと同様に管理が可能です。
- Rのプロジェクト毎のバージョン管理:可能
- Packagesのプロジェクト毎のバージョン管理:可能
つまりpoetry + pythonみたいなこともできます。ただし私の認識だとRそのもののバージョン依存がpythonほどではないと感じています。Packagesのほうも同様です。ですので、まずはプロジェクト毎にPackagesの選択とバージョン管理が出来るようになることを目指します。
Option: パッケージデータの初期化
Rの技術書籍など勉強していてすでにパッケージをインストールしちゃった。何がどうなっているのかよくわからないから初期化したい。という方は、以下の方法で初期化できます。コンソール側に記述して処理してください。
# 現在のライブラリパスを表示
# 1つめのパス:ユーザーライブラリ
# 2つめのパス:システムライブラリ
.libPaths()
# ユーザーライブラリの一覧取得
user_lib <- .libPaths()[1]
user_inst <- rownames(installed.packages(lib.loc = user_lib))
length(user_inst); head(user_inst)
# base + recommendedを正しく作る
base_pkgs <- rownames(installed.packages(priority = "base"))
rec_pkgs <- rownames(installed.packages(priority = "recommended"))
protected <- unique(c(base_pkgs, rec_pkgs))
# set関数で差分のみ削除
removable <- setdiff(user_inst, protected)
length(removable); removable
if (length(removable)) {
remove.packages(removable, lib = user_lib) # lib = でライブラリ指定
}
システム面の現状確認
以下のコマンドをコンソール側に記述して確認します。
sessionInfo() # R のバージョンとプラットフォーム確認
getOption("repos") # 参照中の CRAN ミラー
.libPaths() # 先頭がユーザーライブラリ
capabilities("libcurl") # TRUE が望ましい
Sys.getenv(c("http_proxy","https_proxy","CURL_CA_BUNDLE"))
パッケージ参照先の変更
2025年時点ではCRAN本家や日本サーバーよりもPosit Package Manager(PPM)が良いです。コンソールに以下を記述して変更します。
options(repos = c(CRAN = "https://packagemanager.posit.co/cran/latest"))
Global Optionの設定
プロジェクトルートディレクトリの設定
各プロジェクトディレクトリを保存する親ディレクトリを指定します。
RStudioのタブ > Tools > Global Options...
の
General > Basic
にある"Default working directory (when not in a project):"に親ディレクトリを指定してください。2025年のRのバージョンではpathに日本語が入っていてもバグが出なくなったらしいですが、基本原則にのっとりpathには日本語を入れない方が良いですね。
Apply > OK
を押し終わったらRStudioを再起動します
その他設定
Global Options...の中で設定しておいた方が良い項目を列挙します。
- General > Basic >
- Restore .RData int workspace as startup : チェックをはずす
- Save workspace to .RData on exit: Never
- Code > Saving >
- line ending conversion: Posix(LF)
- Default text encoding: UTF-8
- Appearance
- VSCodeに似た外見にしたいなら
- Editor theme: Material
- VSCodeに似た外見にしたいなら
- Pane Layout
- git管理をRStudioで行いたいので右下のPaneのVCSにチェックを入れる。※右上でも可
- その他
- github Copilotを使っているならこのGlobal Options...内で設定します
これらを設定し終わったらRStudioを再起動します
プロジェクトの新規作成と基本設定
プロジェクトを管理するうえでの基本設定を紹介します。こちらはあくまで一例としてとらえてください。
.Rrojを新規で立ち上げる
.Rprojファイルはプロジェクト毎に各種設定が個別管理出来るようにするものだと理解してください。
RStudioの左上にあるアイコンから「Create a project」をクリックします。そうするとプロジェクト用の新規ディレクトリを作成するか既存ディレクトリに.Rprojファイルを作成するか聞かれます。今回は新規ディレクトリを作成してその中に.Rprojファイルを作成する方針とします。先ほど指定したプロジェクト親ディレクトリの中に適当な名前を付けて新規作成します。
すると自動で.Rhistory, .Rprofileが生成されます。
.Rprofileの設定
ここにはプロジェクトの起動時に自動処理したい内容を記述していきます。別プロジェクトが始まったら、これをこのままコピーすればよいかと思います。
# .Rprofile (プロジェクト直下に作成)
options(
repos = c(CRAN = "https://packagemanager.posit.co/cran/latest"),
download.file.method = "libcurl",
scipen = 999, # 科学表記を抑制
dplyr.summarise.inform = FALSE, # 冗長出力を抑制
renv.verbose = TRUE
)
# プロジェクトルートをここに固定
if (requireNamespace("here", quietly = TRUE)) {
message("Project root: ", here::here())
}
# ローカル設定ファイル(非Git管理)を読み込む
# APIキーやパスワード、フォルダパスなどを管理する.Renvironを読み込む
if (file.exists(".Renviron")) readRenviron(".Renviron")
Option: .Renvironの新規作成と設定
APIキーやよく使うフォルダPATHをここに保存しておき、必要に応じてここから呼び出して使います
# .Renviron
DATA_PATH="C:/Users/XXXX/Documents/Rproject/data"
API_KEY="xxxx-xxxx-xxxx"
Option: README.mdの新規作成
適宜必要に応じてREADME.mdを作成してください。
Option: .gitignoreの新規作成と設定
git管理もRStudioで可能ですので、必要に応じて.gitignoreファイルを作成しておきます。
※ここはgithubなどにデフォルトがあるのでそれをコピーしてもらっても良いかと思います。
renvを使った環境設定
renvはpythonでいうPoetryのようなものです。このパッケージを使って管理していきます。
renvパッケージのインストール
プロジェクト作成が終わったら、まずはこれをインストールします。コンソール側に以下を入力してインストールします。
install.packages("renv")
renv::init()
すると、必要なフォルダ(renv)とファイル(renv.lock)をそのプロジェクト内に作成してよいか聞かれますので"y"を押して作成してもらいます。
renvを使ったパッケージインストール
renvを導入した後は、基本的にrenvコマンドでパッケージをインストールすることをお勧めします。以下が仕様とコマンドです。
install.packages("pkgname") # バージョン指定不可能
renv::install("pkgname") # バージョン指定せずに最新版をインストール
renv::install("pkgname@X.XX.X") # バージョンを指定してインストール
各パッケージのバージョンを確認したいとき
以下のコマンドで一式をまとめて抽出して確認できます
# packagesを取得するサーバーをPositに指定
cran <- "https://packagemanager.posit.co/cran/latest"
# パッケージ一覧を取得
pkgs <- available.packages(repos = cran)
# 最新バージョンの確認
pkgs["rstan", "Version"]
パッケージをインストールし終わったら
パッケージのインストールが終わったら、renv.lockにその環境を記録します。
renv::snapshot()
※場合によってはこの時点で「snapshotパッケージもインストールしなさい」とエラーが出るかもしれません。その場合はそのまま指示に従ってインストールします。
その他renvの基本コマンド
他にもありますが、よく使うコマンドは次の通りです。
renv::diagnostics() # 概要全体を確認
renv::dependencies() # 現環境下でrenvの管理で管理しているpackagesの一覧
renv::status() # 記録されている一覧と現状との差分を確認する
renv::update("pkgname") # 最新版にアップデート
renv::snapshot() # 現環境を保存
renv::restore() # renv.lockに保存された環境を再現(場合によっては再インストール)
renv::cache_clean() # キャッシュのクリーンアップ
ここまでくるとプロジェクトディレクトリ内は次のような構成になっているかと思います。
root
├─ renv <- 環境管理フォルダ
├─ .gitignore
├─ .Renviron
├─ .Rhistory
├─ .Rprofile
├─ projet_name.Rproj
├─ renv.lock
└─ README.md
ここに、さらに必要に応じてsrc, data, fig, report, lib,などのフォルダを作成してください。
lintr, stylerでコーディングの管理
次にRUFFと同じような環境をRStudioでも構築します。次の二つのパッケージをインストールし、記録します。
renv::install(c("styler","lintr"))
renv::snapshot()
styler
コードのお作法を自動で修正してくれます。たとえば次のようなコードだとn=3に半角スペースがありません。これを自動で直してくれます
# before
head(filename, n=3)
# after
head(filename, n = 3)
単発で処理させたい場合
以下をコンソール上で実行するだけです
library(styler)
styler::style_file("scripts/example.R") # 指定するファイル単体
styler::style_dir("projectroot") # フォルダ全体
モジュール化しておいて呼び出して実行処理させたい場合
以下のコードを.Rファイルに記述しておいて保存し、それを呼び出して実行します。
# lib/に"style_prj.R"などの名前で作成
message("Styling all R files in project...")
library(styler)
styler::style_dir("lib") # 適宜変更
styler::style_dir("src") # 適宜変更
message("✅ Styling completed.")
# 実行コード
source("lib/style_prj.R")
lintr
RUFFと似たような使い方をしていきます。まずは設定ファイルを作成します。
projectroot直下に.lintrを作成して以下のコードを記述しておきます。あくまで参考です。
linters: with_defaults(
line_length_linter(120), # 行長120文字
object_usage_linter = NULL, # 未使用変数の警告を無効化
commented_code_linter = NULL, # コメントアウトされたコードの警告を無効化
object_name_linter = NULL # 命名規則チェックをオフ
)
encoding: "UTF-8"
これが終わったら、Global options...の中の設定を次のように変えておきます。
設定が終わったらRStudioを再起動してください。

これで、基本的な設定方法は終了です。
基本的なお作法
この章ではチーム開発や再現性向上のためのベストプラクティスを紹介します。
パスの管理 (here packages)
プロジェクトチーム内のだれかのコードをそのまま使う場合、場合によってはフォルダパスが異なったりします。その場合に備えてRではhereというパッケージが存在します。これを使う事で、プロジェクトルートまでのパスを読み込んだうえで、その層下の構成を記述するだけでパスを自動生成してくれます。
※ここでは.Rprofileにhereの設定が終わっているものとしています。
以下のような使い方です。
# ロード
library(here)
# projectroot/data/data.csvという階層構造になっている場合
df <- read.csv(here("data","data.csv"))
# プロジェクトルートの絶対パス
here::here()
見出しの作り方
この記述で見出しが生成されます
見出し一覧は「Ctrl + Shit + o」で表示可能です
# ---- 見出し ----
## ---- 中見出し ----
### ---- 小見出し ----
