🫠

再現性がある R 環境の構築

2024/04/30に公開

目的

データ分析において、再現性¥のある環境を構築することは重要です。また、複数のマシンにまたがって、同じ環境を使えるように 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環境を構築しています。

  1. rocker/rstudio:4.4.0をベースイメージとして使用
  2. 日本語環境を設定
  3. 日本語フォントをインストール
  4. 必要なRパッケージ(tidyverseggplot2の特定バージョン)をインストール

→この部分を増やしていくことで、他のパッケージを増やすことができます。

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では、以下の設定を行っています。

  1. Dockerfileを使ってイメージをビルド
  2. コンテナ名をrstudioに設定
  3. ホストマシンのポート8787をコンテナのポート8787にマッピング
  4. RStudioのパスワードを設定
  5. タイムゾーンをAsia/Tokyoに設定
  6. ホストマシンのディレクトリをコンテナの/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を活用してみてください。

参考資料
https://qiita.com/uri/items/475eb4dd158ee22f2635
https://support.openanalytics.eu/t/using-specific-versions-of-r-packages-in-docker-file/763
https://techblog.roxx.co.jp/entry/2023/04/24/212803

Discussion