はじめに
PythonのIDEとしてVSCodeやその派生であるCursorは使いやすく、デバッグも容易で非常に便利です。しかし、VSCodeやCursorでRを扱おうとすると、クラッシュしたり、Rのアタッチが上手くいかなかったりと、不安定であると感じていました。
Rを扱えるIDEとしてVSCodeをベースに開発されているPositronというものもあります。こちらはVSCodeの拡張機能やテキストエディタとしての機能を利用してRを扱うことができ、快適にRのコーディングをすることができます。また、開発が進んだことで動作が安定してきたため、Rのデファクトスタンダードとも言えるRStudioよりも快適にRを扱えるようになってきたと個人的には感じています。しかし、今、発展が進んでいる生成AIとの統合という点では遅れており、Clineを拡張機能で追加することはできますが、物足りなさを感じてしまいます。
一方で生成AIとの統合が進んでいるVSCode・CursorにはDevContainerという機能が搭載されています。この機能は、Dockerコンテナを利用することで独立したコーディング環境を作成することができます。この機能を使ってRの環境を整えてみてはどうかと思い立ち、整えてみたところ、VSCode・CursorでRが安定して動作するようになりました。生成AIの支援を受けながらRのコードを編集して実行できるという点で、非常に快適になりました。
そこで、この記事ではVSCode・CursorのDevContainerを利用して、Rの開発環境を整える方法を紹介していきたいと思います。
環境
DockerDesktopとVSCode・Cursorがすでにインストールされていることを前提とします。
手順
1. プロジェクトの作成
任意の場所にプロジェクト用のフォルダを作成し、そのフォルダをVSCode・Cursorで開きます。
2. DevContainerの作成
プロジェクト用フォルダの中に.devcontainer
フォルダを作成し、その中に以下のファイルを作成します。
devcontainer.json
Dockerfile
docker-compose.yml
3. Dockerfileの作成
FROM rocker/r-ver:4.5.0
# 日本語設定
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
ENV TZ=Asia/Tokyo
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get dist-upgrade -y && \
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
apt-get clean
# 日本語フォントのインストール
RUN apt-get update && \
apt-get install -y fonts-ipaexfont fonts-noto-cjk && \
apt-get clean
# 必要なLinuxライブラリーのインストール
RUN apt-get install -y wget unzip git pandoc && \
apt-get clean
# Rのためのライブラリ
RUN apt-get install -y libcurl4-openssl-dev libssl-dev libxml2-dev libfontconfig1-dev libharfbuzz-dev libfribidi-dev libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev cmake && \
apt-get clean
# 最低限Python設定
RUN apt-get install -y python3.12 python3.12-dev python3-pip python3.12-venv && \
apt-get clean
RUN python3.12 -m venv ~/venv
RUN ~/venv/bin/pip install --upgrade pip
RUN ~/venv/bin/pip install radian
RUN ~/venv/bin/pip install numpy pandas openpyxl ipykernel
RUN ~/venv/bin/pip install jupyter jupyter-client notebook
RUN ~/venv/bin/python -m ipykernel install --user
ENV PATH="/root/venv/bin:${PATH}"
# 必要なRパッケージのインストール
RUN R -e "install.packages('languageserver', repos='https://p3m.dev/cran/latest')"
RUN R -e "install.packages('vscDebugger', repos = 'https://manuelhentschel.r-universe.dev')"
RUN R -e "install.packages('reticulate')"
RUN R -e "install.packages(c('tidyverse', 'patchwork'))"
Dockerfileの解説
FROM rocker/r-ver:4.5.0
rocker/r-ver:4.5.0
はベースとなるDockerイメージです。DockerHubでベースとなるDockerイメージを探してきて指定します。ここではR4.5.0のrocker/r-verを指定しています。
# 日本語設定
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
ENV TZ=Asia/Tokyo
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get dist-upgrade -y && \
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
apt-get clean
コンテナ内部のOS環境(Ubuntu 24.04.2 LTS)の設定を行なっています。ENV
は環境変数を設定するDockerのコマンドです、RUN
はLinuxコマンドを実行するためのコマンドです。これらのDockerコマンドの後ろにLinuxコマンドを記述することで、コンテナ内部のOS環境設定・パッケージのインストールをすることができます。
# 最低限Python設定
RUN apt-get install -y python3.12 python3.12-dev python3-pip python3.12-venv && \
apt-get clean
RUN python3.12 -m venv ~/venv
RUN ~/venv/bin/pip install --upgrade pip
RUN ~/venv/bin/pip install radian
RUN ~/venv/bin/pip install numpy pandas openpyxl ipykernel
RUN ~/venv/bin/pip install jupyter jupyter-client notebook
RUN ~/venv/bin/python -m ipykernel install --user
ENV PATH="/root/venv/bin:${PATH}"
コンテナ内部のPythonの設定を行なっています。Rのデフォルトのコンソールとしてradian
を使いたいのでradian
を使うのに必要なPython環境を整えています。また、Jupyter
も使えるようにしておきたいのでその設定もしています。CSVファイルやエクセルファイルの中身を確認するのに、VSCodeの拡張機能であるdatawrangler
が使えると便利なので、そのためのPython環境も整えています。
RUN R -e "install.packages('languageserver', repos='https://p3m.dev/cran/latest')"
RUN R -e "install.packages('vscDebugger', repos = 'https://manuelhentschel.r-universe.dev')"
RUN R -e "install.packages('reticulate')"
RUN R -e "install.packages(c('tidyverse', 'patchwork'))"
コンテナ内部のRの設定を行なっています。languageserver
はVSCodeでRのコーディングを支援するためのパッケージで、vscDebugger
はVSCodeでRのデバッグを支援するためのパッケージです。この2つのRパッケージはVSCodeのRの拡張機能であるR
とR Debugger
をインストールした後に必要になるので必ずインストールしてください。reticulate
はPythonとRを連携させるためのパッケージで、tidyverse
とpatchwork
はデータ分析で最低限インストールされていると便利だなと個人的に思っているパッケージです。
4. docker-compose.ymlの作成
services:
r-env:
build: .
shm_size: '4gb' # シェアメモリのサイズ(デフォルトは64MB, 大きいデータを扱う場合を想定)
volumes:
- ../:/workspace # ワークスペースのディレクトリをコンテナのworkspaceディレクトリにマウント
ここでは、コンテナの起動を行う時の設定を記述しています。それぞれの意味はコメントアウトの通りです。
便利なのが、volumes
でホストのディレクトリをコンテナのディレクトリにマウントできるところです。docker-compose.yml
のディレクトリを基準に、コンテナにマウントしたいディレクトリを相対パスで指定します。こうすることで、DevContainerを起動した後もホストのディレクトリを参照することができます。
5. devcontainer.jsonの作成
{
"name": "R Analysis", //VSCodeで表示されるDEVコンテナ名
"dockerComposeFile": ["./docker-compose.yml"],
"service": "r-env",
"forwardPorts": [],
"workspaceFolder": "/workspace", //VSCodeで開くコンテナ内のディレクトリ
"customizations": {
"vscode": {
"extensions": [
"mechatroner.rainbow-csv",
"mosapride.zenkaku",
"ms-python.python",
"ms-python.vscode-pylance",
"VisualStudioExptTeam.intellicode-api-usage-examples",
"VisualStudioExptTeam.vscodeintellicode",
"ms-toolsai.datawrangler",
"ms-toolsai.jupyter",
"ms-toolsai.vscode-jupyter-cell-tags",
"ms-toolsai.vscode-jupyter-slideshow",
"ms-toolsai.jupyter-keymap",
"REditorSupport.r",
"RDebugger.r-debugger"
],
"settings": {
"workbench.editor.enablePreview": true,
"r.bracketedPaste": true,
"r.session.watchGlobalEnvironment": true,
"r.alwaysUseActiveTerminal": false,
"r.sessionWatcher": true,
"r.lsp.debug": true,
"r.lsp.diagnostics": true,
"r.rpath.linux": "/usr/local/bin/R",
"r.rterm.option": [
"--no-save",
"--no-restore"
],
"r.rterm.linux": "/root/venv/bin/radian",
"python.venvPath": "/root/venv",
"datawrangler.pythonPath": "/root/venv/bin/python"
}
}
}
}
extensions
の中にVSCodeの拡張機能を指定することで、DevContainerを起動した後にVSCodeの拡張機能が自動的にインストールされます。この拡張機能の設定は、拡張機能のタブの設定でAdd to devcontainer.json
を選択すると自動で設定されます。
settings
の中には、VSCodeの設定を記述します。記述しておくことで、DevContainerを起動した後にVSCodeの設定が自動的に適用されます。
6. コンテナの起動
DockerDesktopが起動している状態で、F1キーを押してコマンドバーでDev Containers: Reopen in Container
を実行するか、Dev Containers: Open Folder in Container...
を実行してプロジェクトフォルダを選択、ワークスペースを作成している場合にはDev Containers: Open Workspace in Container
を実行してワークスペースを選択すると、DevContainerを起動することができます。
参考