ホーム

DockerコンテナによるVS CodeでのRコーディング

同僚とRコードを共有したのに、「私のマシンでは動くのに…」という問題のデバッグに何時間も費やしたことはありませんか?Dockerコンテナは、コード用の輸送コンテナのようなものです。R環境、ライブラリ、依存関係を1つのボックスにパッケージ化し、どこでも同じように動作させることができます。Docker Hubには何万もの事前構築イメージがあり、すぐに使える環境が公開されているため、手動インストールの手間を省けます。このチュートリアルでは、VS CodeとDocker Desktopを使って、隔離された再現可能な環境でRを実行する方法を学びます。

主要な概念

必要なもの

ステップ1:Docker Desktopをインストール

ステップ2:Dev Containers拡張機能をインストール

ステップ3:GitHub DesktopでVibeプロジェクトをクローン

ステップ4:VS Codeでプロジェクトを開く

ステップ5:コンテナで再度開く

Apple Silicon Mac: このイメージはIntel/AMDプロセッサ用にビルドされています。Docker Desktopはエミュレーションで実行するため、初回のビルドとR自体の動作は遅くなりますが、すべて正常に動作します。

注: コンテナにはR拡張機能とlanguageserverパッケージが自動的に含まれます。Dockerfileとdevcontainer.jsonがこれを処理します。

ステップ6:コンテナ環境を理解する

これでLinuxコンテナ内でコーディングしています。これが何を意味するか探索しましょう。

pwd

/workspaces/vibeと表示されます - これはコンテナ内のプロジェクトフォルダです。

ls

プロジェクトと同じファイルが表示されます:R/、docs/、README.mdなど(.devcontainer/のようにドットで始まるフォルダは隠されています。ls -aで表示できます)。

cd ..
ls

vibe/だけが表示されます - コンテナは隔離されています。コンピュータの他のフォルダ、デスクトップ、ドキュメントにはアクセスできません。この隔離により、R環境がクリーンで再現可能になります。

cd vibe

ステップ7:Rコードを行ごとに実行

コンテナには一般的なパッケージ付きのRがプリインストールされています。シンプルなデータ分析スクリプトを実行しましょう。

ステップ8:アプリを実行

プロジェクトには対話型ヒストグラムを作成するデモShinyアプリが含まれています。

ステップ9:簡単な変更を加える

アプリを変更して開発がどのように機能するか見てみましょう。

titlePanel("初めてのR Dockerアプリ"),

ステップ10:Dockerfileを理解する(オプション)

# R、Shiny Server、tidyverseパッケージを含むDocker Hubベースイメージを選択
FROM rocker/shiny-verse:latest

# 1. Rパッケージに一般的に必要なシステム依存関係
RUN apt-get update && apt-get install -y \
    libcurl4-openssl-dev libssl-dev libxml2-dev git curl && \
    rm -rf /var/lib/apt/lists/*

# 2. VS Code統合用のRパッケージ:言語サーバー + デバッガー
RUN R -q -e 'install.packages(c("rstudioapi", "languageserver"), repos="https://cloud.r-project.org")'

# 3. NodeSourceからNode.js LTSをインストール
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm@latest

# 4. Claude Codeをグローバルにインストール(新しいnpmは許可しない限りセットアップスクリプトをブロックします)
RUN npm config set allow-scripts=@anthropic-ai/claude-code --location=global \
    && npm install -g @anthropic-ai/claude-code

# 5. VS CodeからClaude Codeをアップデートできるよう、shinyにパスワードなしのsudoを許可
RUN echo 'shiny ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
    rm -rf /var/lib/apt/lists/*

# Shinyサーバーポートを公開
EXPOSE 3838

重要な部分:

使用できる他のRockerイメージ:

ベースイメージを変更した後、コンテナを再ビルドして変更を適用してください。

ステップ11:DockerイメージにRパッケージをインストール(オプション)

Rコンソールでインストールしたパッケージ(install.packages())は一時的で、コンテナを再ビルドすると消えます。パッケージを永続的にするには、Dockerfileに追加してください。

RUN R -q -e 'install.packages("data.table", repos="https://cloud.r-project.org")'
library(data.table)

エラーなく読み込まれれば、パッケージは永続的にインストールされています。

次のステップ

トラブルシューティング

ワークフロー概要

このセットアップにより、プロフェッショナルなR開発環境が得られます:

日常のワークフロー

すべてがセットアップされたら、日常のルーティンは以下の通りです:

  1. Docker Desktopを起動 - アプリを開いて緑色のステータスインジケーターを待つ(Dockerが実行されている必要があります)
  2. VS Codeを開く - VS Codeを起動してプロジェクトフォルダを開く
  3. コンテナで再度開く - まだコンテナ内でない場合、>< アイコン(左下)をクリックしてReopen in Containerを選択
  4. コードを書いて実行 - .Rファイルを編集し、Ctrl+Enter/Cmd+Enterで行ごとに実行、またはShinyアプリを▶ Run Shiny Appボタンで実行
  5. 作業を保存 - コードファイル(.R、.Rmd)はコンピュータに保存され、セッション間で永続
  6. コミットしてプッシュ - GitHub Desktopを使用して変更をコミットし、リポジトリにプッシュ

Docker Desktopとは?

Docker Desktopは、コンピュータ上でDockerを使いやすくするアプリケーションです。Dockerに必要なバックグラウンドサービスに加えて、コンテナ、イメージ、ストレージ、その他のDockerリソースを確認・管理できる画面を提供します。

Docker Desktopは、コンテナのコントロールセンターと考えることができます。Docker Desktopを開くと、Dockerエンジンが起動します。Dockerエンジンは、実際にコンテナを作成して実行するDockerの部分です。Docker Desktopがエンジンを管理してくれるため、通常はエンジンを直接操作する必要はありません。

Docker Desktopは何をするのか?

Docker Desktopはいくつかの重要な役割を担っています:

このチュートリアルにおけるDocker Desktopの役割

3つの要素が連携して動作しています:

  1. Docker Desktopがコンピュータ上でDockerエンジンを実行します。
  2. VS Codeが、Rコードを書いて実行するためのエディタを提供します。
  3. Dev Containerが、R、Rパッケージ、このプロジェクトで使用するツールを含む、準備済みのLinux環境を提供します。

Reopen in Containerを選択すると、VS CodeはDocker Desktopにプロジェクトのコンテナをビルドまたは起動するよう依頼します。アプリケーションを動かしているのは引き続きあなたのコンピュータですが、R環境はコンテナの中にあります。これにより、Rのバージョン、パッケージ、システムツールがコンピュータの他の部分から切り離されます。

Docker DesktopはVS Code、R、Webブラウザの代わりになるものではありません。コンテナを動かす環境を提供するものです。VS Codeは作業する場所、Rは使用する言語、ブラウザはShinyアプリを表示する場所です。

なぜDocker Desktopを使うのか?

Rと必要なすべてのパッケージをコンピュータに直接インストールすると、バージョンの競合が起きることがあります。あるプロジェクトでは、別のプロジェクトとは異なるバージョンのパッケージが必要になる場合があります。Docker Desktopは、プロジェクトごとに管理された独自の環境を用意することで、こうした競合を避けるのに役立ちます。

たとえば、クラスメートが同じプロジェクトファイルとDockerの設定を使えば、Dockerはあなたの環境とほぼ同じ環境をビルドできます。そのため、ソフトウェアのバージョンの違いだけが原因のエラーに出会う可能性が低くなります。Rコードとプロジェクトファイルはコンピュータ上に残り、それらを実行するために必要なツールはコンテナ内にまとめられます。

このプロジェクトをビルドしたり、コンテナで再度開いたりする前に、Docker Desktopを開いて実行しておく必要があります。Docker Desktopが閉じていると、VS Codeはコンテナを起動できず、Dockerが実行されていないというエラーが表示されることがあります。


Steven Geが2025年12月7日に作成。