再現性がある R 環境の構築
目的
データ分析において、再現性¥のある環境を構築することは重要です。また、複数のマシンにまたがって、同じ環境を使えるように Docker を使って R の環境を構築する方法を紹介します。自分は特に、家の PC と研究室の PC で同じ環境を使いたかったので作りました。また、論文にのせる際に、R、R stuido はもちろんのことパッケージのバージョンも明記できたほうがいいので、その点に気をつけて環境構築を行いました。
Dockerとは
Dockerは、アプリケーションを開発、配布、実行するためのオープンソースプラットフォームです。Dockerを使うことで、アプリケーションとその依存関係をパッケージ化し、どのマシンでも同じように実行できます。
Docker いろいろあってわからないので、Claude 3 Opus 君に聞いてみました。
💡 Docker の種類
種類 | 説明 |
---|---|
Docker Engine | DockerコンテナをビルドおよびRunするためのコア機能を提供 |
Docker Desktop | Docker EngineをMac、Windows上で簡単に利用できるようにするアプリケーション |
Docker Compose | 複数のコンテナを定義し、一括で管理するためのツール |
Docker Swarm | Dockerの標準的なクラスタリング・オーケストレーションツール |
Docker Registry | Dockerイメージを保存・管理するためのレジストリサーバー |
Docker Hub | DockerのパブリックなDockerイメージレジストリサービス |
本記事では、Docker Desktopを使ってR環境を構築する手順を説明します。
Docker Desktopのインストール
まず、Docker公式サイトからDocker Desktopをダウンロードしてインストールします。インストールの詳細手順は、こちらの記事などを参照してください。
Dockerfileの作成
次に、R環境を構築するためのDockerfileを作成します。Dockerfileは、Dockerイメージをビルドするための手順を記述したテキストファイルです。
FROM rocker/rstudio:4.4.0
# 日本語環境の設定
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN sed -i '$d' /etc/locale.gen \
&& echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen ja_JP.UTF-8 \
&& /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
RUN /bin/bash -c "source /etc/default/locale"
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# 日本語フォントのインストール
RUN apt-get update && apt-get install -y \
fonts-ipaexfont \
fonts-noto-cjk && rm -rf /var/lib/apt/lists/*
# R パッケージのインストール
RUN Rscript -e "install.packages(c('readr','rmarkdown','RCurl'), repos = 'https://cran.rstudio.com')" \
&& Rscript -e "devtools::install_version('tidyverse', version = '2.0.0', repos = 'https://cran.rstudio.com')" \
&& Rscript -e "devtools::install_version('ggplot2', version = '3.5.1', repos = 'https://cran.rstudio.com')"
このDockerfileでは、以下の手順でR環境を構築しています。
-
rocker/rstudio:4.4.0
をベースイメージとして使用 - 日本語環境を設定
- 日本語フォントをインストール
- 必要なRパッケージ(
tidyverse
とggplot2
の特定バージョン)をインストール
→この部分を増やしていくことで、他のパッケージを増やすことができます。
docker-compose.ymlの作成
Dockerfileを作成したら、docker-compose.ymlを作成します。docker-compose.ymlは、複数のコンテナを定義し、一括で管理するための設定ファイルです。
version: '3'
services:
rstudio:
build:
dockerfile: Dockerfile
container_name: rstudio
ports:
- 8787:8787
environment:
PASSWORD: ##自分のpassword##
TZ: Asia/Tokyo
volumes:
- $##任意のディレクトリ##:/home/rstudio
このdocker-compose.ymlでは、以下の設定を行っています。
-
Dockerfile
を使ってイメージをビルド - コンテナ名を
rstudio
に設定 - ホストマシンのポート
8787
をコンテナのポート8787
にマッピング - RStudioのパスワードを設定
- タイムゾーンを
Asia/Tokyo
に設定 - ホストマシンのディレクトリをコンテナの
/home/rstudio
にマウント
自分は Dockerfile、docker-compose.ymlを One Drive に作成、 volumes: - $##任意のディレクトリ##:/home/rstudio の部分も One Drive を指定することで二つのパソコンからアクセスできるようにしていますが、何か悪いことが起きそうな気はしています…
コンテナの起動と確認
Dockerfileとdocker-compose.ymlを作成したら、以下のコマンドでコンテナを起動します。
bashCopy codedocker compose up
初回はイメージのダウンロードとビルドに時間がかかります。コンテナが起動したら、ブラウザでhttp://localhost:8787/
にアクセスし、RStudioにログインします。
- Username: rstudio
- Password: docker-compose.ymlで設定したパスワード
ログインすると、RStudioの画面が表示されます。ここで、Rを使ったデータ分析を進めることができます。
まとめ
本記事では、Dockerを使って再現性のあるR環境を構築する方法を紹介しました。Dockerを使うことで、異なるマシンや環境でも同じ結果を得られるようになります。これは、データ分析や機械学習のプロジェクトにおいて非常に重要です。
今回構築したR環境は、以下のようなユースケースで活用できます。
- 共同研究者と同じ環境を共有したい
- 論文の結果を再現可能にしたい
- 異なるマシンでも同じ分析を行いたい
Dockerを使ったR環境構築は、再現性の確保だけでなく、環境のセットアップにかかる時間を大幅に削減できるメリットもあります。ぜひ、データ分析にDockerを活用してみてください。
参考資料
Discussion