Google ColaboratoryでRを使う

概要

無料でPythonの実行環境を使わせてもらえるGoogle Colaboratory(以下、Colab)。現在の無料枠でも、T4やL4などの高性能なGPU、約12GB〜16GBのメモリ、そして100GB前後のディスクスペースが利用できる強力な環境であり、手元のPCよりハイスペックな人も多いだろう。

データサイエンスの分野ではPythonが主流である一方で、Rユーザにとっては「PythonだけでなくRでも使えたらいいのに」と思うところである。実は、Colabのインスタンスには標準でRの環境が用意されており、用途に応じて複数のアプローチでRを利用することができる。この記事では、最新環境に合わせてColabでRを使い倒す方法と、その高速化テクニックを網羅的に解説する。

Colab上でRを実行するには、主に以下の3つのアプローチが存在する。用途やPythonとの連携の必要性に応じて使い分けるのがよい。

Jupyterのノートブック上で、マジックコマンドの%%scriptを使う方法である。Rに限らず、その言語がインスタンスにインストールされていれば使えるため、知っておくと非常に便利である。

%%script R --vanilla --quiet
x <- 1:5
sum(x)
r

このコマンドを実行すると、セルの中身がRのスクリプトとして解釈され、標準出力に結果が返される。--vanillaではなく--saveオプションを指定すると、実行終了時点でのワークスペース(.RData)を保存する。次回開くときに--restoreとすれば、その.RDataを読み込んで状態を引き継ぐことが可能である。

%%script R --save --quiet
# 次のセルで以下を実行
%%script R --save --restore --quiet
r

ただし、スクリプトの実行モードでは、処理の途中で変数の中身をインタラクティブに確認したり、プロットを画面にレンダリングしたりすることはできない。一つのセルで最後のアウトプットまで完結させる必要があり、探索的なデータ分析(EDA)のようなアドホックな用途には向かない。あくまで一時的なシェルの実行環境として割り切る必要がある。

ノートブック全体をR専用の環境として使う(その場でプロットしたりオブジェクトを保存・再利用したりする)ためには、Rのランタイムを直接起動するのが最も王道である。

かつては.ipynbファイルをローカルにダウンロードし、テキストエディタでJSONのkernelspecを書き換えてから再アップロードするという非常に煩雑な手順が必要だった。しかし現在では、Colabの標準UIから簡単に切り替えることができる。

Colabの画面上部メニューから「ファイル」を選択し、「ノートブックを新規作成」をクリックする。新しいノートブックが開いたら、メニューの「ランタイム」から「ランタイムのタイプを変更」を選択する。表示されるダイアログの中に「ランタイムのタイプ」というドロップダウンメニューがあり、デフォルトの「Python 3」から「R」に変更して保存するだけでよい。これで、マジックコマンドなしに全てのセルでRのコマンドをネイティブに実行できるようになる。

ノートブックを新規作成する際のURLにlanguageパラメータを指定することで、最初から任意のカーネルを採用した状態、つまりRランタイムを選択した状態で開くことができる。頻繁にRノートブックを作成するユーザにとっては、このURLをブックマークしておくのが最も効率的である。Rの場合は以下のURLとなる。

https://colab.research.google.com/notebook#create=true&language=r

データの前処理は豊富なライブラリを持つPythonで行い、統計モデリングや可視化はRで行いたいというハイブリッドな用途には、rpy2モジュールを利用した連携が最適である。この方法を使えば、Pythonのノートブック上でマジックコマンドを使える状況下を維持したまま、Python環境と共存してRを使うことができる。

以下のコマンドをPythonセルで実行し、rpy2モジュールを有効化する。

%load_ext rpy2.ipython
python

これで、Pythonのコードブロックもそのまま使いつつ、マジックコマンド%%Rで始まるR専用のコードブロックを作ることができる。例えば、Colabの強みであるGoogle DriveのマウントをPythonで行い、そのデータをRで読み込むといった一連の流れが可能になる。

# Google Driveのマウント (Pythonで実行)
from google.colab import drive
drive.mount('/content/gdrive')

# データファイルの取得と解凍 (シェルコマンド)
!cp "gdrive/My Drive/Colab Notebooks/train.csv.gz" .
!gzip -d train.csv.gz

# Rの有効化
%load_ext rpy2.ipython
python

続いて、同じノートブック内の別のセルでRを実行する。

%%R
# R側でデータを読み込み、プロットを作成
data <- read.csv('train.csv')
library(ggplot2)
# 仮に x_col, y_col という列があるとする
qplot(x=x_col, y=y_col, data=data)
r

さらに、PythonからRに変数を渡したり、その逆を行ったりすることも可能である。PythonからRに変数を渡す場合は-iオプションを使用する。

%%R -i python_dataframe_name
# ここにRのコードを記述
summary(python_dataframe_name)
r

Python側のPandas DataFrameなどの変数名を指定すれば、その変数名のままRのデータフレームとして扱うことができる。ただし、現在のバージョンでもobject型はうまく変換できないことが多い。つまり、文字列やNoneを含むカラムがあるとエラーになる確率が高いため、事前にPython側でカテゴリ型に変換しておくか、数値のみのデータフレームにして渡す工夫が必要である。RからPythonに変数を渡す場合は-o R側の変数名を指定する。

高速にデータフレームを扱えるdata.tableパッケージは、マルチスレッドに対応しているため大規模データの処理にはマストである。Colabでは標準でCPUが2コア使える仕様になっているため、このリソースをしっかりと明示して活用する。

Rのセル内で以下のように設定を行う。

%%R
# data.tableがインストールされていない場合は事前に install.packages("data.table") を実行
library(data.table)
setDTthreads(2) # 2コアでdata.tableを使う
r

ColabといえばGPUの活用であるが、Rの標準機能だけではGPUの恩恵を受けにくい。しかし、少し手間をかければ行列演算などを劇的に高速化させることができる。

処理の内容(機能)ごとにさまざまなGPU対応ライブラリがあるが、もっとも汎用性が高いのはバックエンドのBLAS(Basic Linear Algebra Subprograms)をGPU対応のNVBLASに入れ替えることである。BLASを使う処理(大部分の行列処理や特異値分解など)は多くあり、それらは軒並み自動的に高速化される。ライブラリ固有の関数を新たに覚える必要がなく、既存のRコードのまま高速化できるのが最大のメリットである。

このBLASの置き換えには、現在のColabにおいて「純粋なR環境(またはシェルからの実行)」と「Pythonと共存するrpy2環境」とで、2つの異なるアプローチを使い分ける必要がある。

UIから「R」のランタイムを選択している場合や、マジックコマンド%%script Rやシェルから直接Rを実行する場合には、ラッパースクリプトを用いた手法が有効である。Rの実行時にGPU用のBLASを読み込むように、環境変数LD_PRELOADを強制するスクリプトを作成し、元の実行ファイルと置き換える。

現在のColab(Ubuntu環境)では、フォールバック先のCPU用BLASとしてシンボリックリンクではなく実体ファイル(.so.0など)を正確に指定する必要がある。

%%bash

# NVBLASの設定ファイルを作成
echo "NVBLAS_LOGFILE nvblas.log
NVBLAS_CPU_BLAS_LIB /usr/lib/x86_64-linux-gnu/libopenblas.so.0
NVBLAS_GPU_LIST ALL" > /etc/nvblas.conf

# 既存のR実行ファイルを退避
mv /usr/bin/R /usr/bin/R_original

# LD_PRELOADを指定してRを起動するラッパースクリプトを作成
# (※パスは2026年現在のColabのCUDA環境に合わせた一般的な構成)
echo '#!/bin/sh
LD_PRELOAD=/usr/local/cuda/lib64/libnvblas.so NVBLAS_CONFIG_FILE=/etc/nvblas.conf /usr/bin/R_original "$@"' > /usr/bin/R

chmod +x /usr/bin/R
bash

なお、UIからRランタイムを使用している最中にこの設定を行った場合は、設定を反映させるためにColabのメニューから「ランタイムを再起動」を行ってRプロセスを立ち上げ直す必要がある点に注意が必要である。

一方で、PythonとRを共存させるためにrpy2%%Rマジックコマンド)を使用する環境においては、上記のラッパースクリプトは全く機能しない。なぜなら、rpy2/usr/bin/Rという実行ファイルを呼び出すのではなく、Pythonのプロセス内にRの共有ライブラリ(libR.so)を直接ロードして実行する仕様となっているからである。

rpy2環境下でNVBLASを有効にする正しい手順は、設定ファイル(nvblas.conf)を作成した上で、Pythonのセルにおいて**rpy2モジュールを読み込む前に**、osモジュールを使って環境変数を定義することである。

import os

# rpy2をロードする前に環境変数を設定し、NVBLASを強制的に読み込ませる
os.environ['NVBLAS_CONFIG_FILE'] = '/etc/nvblas.conf'
os.environ['LD_PRELOAD'] = '/usr/local/cuda/lib64/libnvblas.so'

# 環境変数を設定した後にrpy2を有効化する
%load_ext rpy2.ipython
python

このようにPythonプロセス側で事前に環境変数を仕込んでおくことで、その後に実行される%%Rセルの行列演算処理が自動的にGPUへオフロードされるようになる。用途に合わせて設定方法を切り替えることで、現在のColab環境でも安定かつスマートにRの基本演算を高速化することが可能である。

BLASに依存しないアルゴリズムの場合は、個別のライブラリごとにGPU対応させることになる。代表的な例として、勾配ブースティングライブラリであるXGBoostを挙げる。

かつてColabで割り当てられていたK80(Kepler世代)GPUでは、アーキテクチャが古すぎたために「CPUで実行したほうがマシ」というほど遅くなる問題があった。しかし、2026年現在のColabではT4やL4といった比較的新しいアーキテクチャのGPUが割り当てられるため、GPUの恩恵を最大限に受けることができる。

現在のXGBoostパッケージは標準でCUDAをサポートするようにビルドされていることが多く、面倒なソースからの再コンパイルは不要なケースが増えている。R言語からXGBoostのGPU学習を実行する場合は、以下のようにパラメータを指定する。

%%R
library(xgboost)

# ダミーデータの作成
dtrain <- xgb.DMatrix(data = matrix(rnorm(10000), ncol=10), label = rnorm(1000))

# XGBoostの学習パラメータ設定
params <- list(
  booster = "gbtree",
  objective = "reg:squarederror",
  tree_method = "hist",     # ヒストグラムベースのアルゴリズム
  device = "cuda"           # 実行デバイスとしてCUDA(GPU)を指定
)

# モデルの学習
model <- xgb.train(params = params, data = dtrain, nrounds = 100)
r

古いバージョンで使われていたtree_method = 'gpu_hist'という指定は非推奨となっており、現在ではtree_method = "hist"device = "cuda"を組み合わせるのが正しいモダンな書き方である。これにより、ColabのGPUメモリをフルに活用した大規模なモデル学習をR言語上から極めて高速に実行することができる。