create-r-dockerfile
について
このClaudeスキルは、rockerベースイメージを使用してRプロジェクトの最適化されたDockerfileを作成します。システム依存関係の処理、Rパッケージのインストール、renv統合、および高速リビルドのためのレイヤー順序付けを扱います。Rアプリケーションのコンテナ化、再現可能な環境の構築、ShinyやPlumber APIなどのRベースサービスのデプロイにご利用ください。
クイックインストール
Claude Code
推奨npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-r-dockerfileこのコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします
ドキュメント
name: create-r-dockerfile description: > rockerベースイメージを使用してRプロジェクト用のDockerfileを作成する。システム依存関係のインストール、 Rパッケージのインストール、renv統合、高速リビルドのための最適化されたレイヤー順序をカバーする。 Rアプリケーションや分析のコンテナ化、再現可能なR環境の構築、Rベースサービス(Shiny、Plumber、 MCPサーバー)のデプロイ、またはマシン間で一貫した開発環境を構築する際に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: Docker tags: docker, r, rocker, container, reproducibility locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
R Dockerfileの作成
rockerベースイメージを使用し、適切な依存関係管理を行うRプロジェクト用Dockerfileを構築する。
使用タイミング
- Rアプリケーションや分析のコンテナ化
- 再現可能なR環境の構築
- Rベースサービス(Shiny、Plumber、MCPサーバー)のデプロイ
- 一貫した開発環境のセットアップ
入力
- 必須: 依存関係を持つRプロジェクト(DESCRIPTIONまたはrenv.lock)
- 必須: 用途(開発、本番、またはサービス)
- 任意: Rバージョン(デフォルト: 最新安定版)
- 任意: 必要な追加システムライブラリ
手順
ステップ1: ベースイメージの選択
| ユースケース | ベースイメージ | サイズ |
|---|---|---|
| 最小限のRランタイム | rocker/r-ver:4.5.0 | 約800MB |
| tidyverse付き | rocker/tidyverse:4.5.0 | 約1.8GB |
| RStudio Server付き | rocker/rstudio:4.5.0 | 約1.9GB |
| Shinyサーバー | rocker/shiny-verse:4.5.0 | 約2GB |
期待結果: プロジェクトの要件に合致し、不要な肥大化のないベースイメージが選択される。
失敗時: どのイメージを使用するか不明な場合は、rocker/r-ver(最小限)から始めて必要に応じてパッケージを追加する。完全なイメージカタログはrocker-orgを参照。
ステップ2: Dockerfileの作成
FROM rocker/r-ver:4.5.0
# システム依存関係のインストール
# 目的別にグループ化して明確にする
RUN apt-get update && apt-get install -y \
# HTTP/SSL
libcurl4-openssl-dev \
libssl-dev \
# XML処理
libxml2-dev \
# Git統合
libgit2-dev \
libssh2-1-dev \
# グラフィックス
libfontconfig1-dev \
libharfbuzz-dev \
libfribidi-dev \
libfreetype6-dev \
libpng-dev \
libtiff5-dev \
libjpeg-dev \
# ユーティリティ
git \
curl \
&& rm -rf /var/lib/apt/lists/*
# Rパッケージのインストール
# 順序: キャッシュ効率のため変更頻度の低いものから
RUN R -e "install.packages(c( \
'remotes', \
'devtools', \
'renv' \
), repos='https://cloud.r-project.org/')"
# 作業ディレクトリの設定
WORKDIR /workspace
# renvファイルを先にコピー(キャッシュレイヤー)
COPY renv.lock renv.lock
COPY renv/activate.R renv/activate.R
# ロックファイルからパッケージを復元
RUN R -e "renv::restore()"
# プロジェクトファイルをコピー
COPY . .
# デフォルトコマンド
CMD ["R"]
期待結果: docker build -t myproject . でDockerfileが正常にビルドされる。
失敗時: apt-get install中にビルドが失敗した場合、対象ディストロ(Debian)のパッケージ名を確認する。renv::restore()が失敗した場合、renv.lockとrenv/activate.Rがrestoreステップの前にコピーされていることを確認する。
ステップ3: .dockerignoreの作成
.git
.Rproj.user
.Rhistory
.RData
renv/library
renv/cache
renv/staging
docs/
*.tar.gz
期待結果: .dockerignoreがGit履歴、IDEファイル、ローカルrenvライブラリ、ビルド成果物をDockerコンテキストから除外する。
失敗時: Dockerビルドが不要なファイルをコピーし続ける場合、.dockerignoreがDockerfileと同じディレクトリにあり、正しいグロブパターンを使用していることを確認する。
ステップ4: ビルドとテスト
docker build -t r-project:latest .
docker run --rm -it r-project:latest R -e "sessionInfo()"
期待結果: コンテナが正しいRバージョンですべてのパッケージが利用可能な状態で起動する。sessionInfo()の出力で期待されるRバージョンが確認できる。
失敗時: ビルドログでシステム依存関係のエラーを確認する。不足している-devパッケージをapt-get installレイヤーに追加する。
ステップ5: 本番環境向け最適化
本番デプロイにはマルチステージビルドを使用する:
# ビルドステージ
FROM rocker/r-ver:4.5.0 AS builder
RUN apt-get update && apt-get install -y libcurl4-openssl-dev libssl-dev
COPY renv.lock .
RUN R -e "install.packages('renv'); renv::restore()"
# ランタイムステージ
FROM rocker/r-ver:4.5.0
COPY --from=builder /usr/local/lib/R/site-library /usr/local/lib/R/site-library
COPY . /app
WORKDIR /app
CMD ["Rscript", "main.R"]
期待結果: マルチステージビルドにより最終イメージが小さくなる。ランタイムステージにはコンパイル済みRパッケージのみが含まれ、ビルドツールは含まれない。
失敗時: ランタイムステージでパッケージの読み込みに失敗する場合、COPY --from=builderのライブラリパスがRのインストール先と一致していることを確認する。両方のステージでR -e ".libPaths()"で確認する。
バリデーション
-
docker buildがエラーなく完了する - コンテナが起動しRセッションが動作する
- すべての必要なパッケージが利用可能
-
.dockerignoreが不要なファイルを除外している - イメージサイズがユースケースに対して適切
- コード変更のみの場合のリビルドが高速(レイヤーキャッシュが機能)
よくある落とし穴
- システム依存関係の不足: コンパイルコードを含むRパッケージには
-devライブラリが必要。install.packages()中のエラーメッセージを確認する - レイヤーキャッシュの無効化: パッケージインストール前にすべてのファイルをコピーすると、コード変更のたびにキャッシュが無効化される。先にロックファイルをコピーする
- 大きなイメージ:
apt-get installの後にrm -rf /var/lib/apt/lists/*を使用する。マルチステージビルドを検討する - タイムゾーンの問題: タイムゾーン対応の操作には
ENV TZ=UTCを追加するかtzdataをインストールする - rootでの実行: 本番環境には非rootユーザーを追加する:
RUN useradd -m appuser && USER appuser
例
# ソースをマウントした開発コンテナ
docker run --rm -it -v $(pwd):/workspace r-project:latest R
# Plumber APIサービス
docker run -d -p 8000:8000 r-api:latest
# Shinyアプリ
docker run -d -p 3838:3838 r-shiny:latest
関連スキル
setup-docker-compose- 複数コンテナのオーケストレーションcontainerize-mcp-server- MCP Rサーバーの特殊ケースoptimize-docker-build-cache- 高度なキャッシュ戦略manage-renv-dependencies- renv.lockがDockerビルドに入力される
GitHub リポジトリ
関連スキル
content-collections
メタこのスキルは、Content Collections(Markdown/MDXファイルを型安全なデータコレクションに変換するTypeScriptファーストのツール)の本番環境でテストされた設定を提供します。Zodバリデーションによる型安全性を実現し、ブログ、ドキュメントサイト、コンテンツ重視のVite + Reactアプリケーション構築時にご利用ください。Viteプラグインの設定、MDXコンパイルから、デプロイ最適化、スキーマバリデーションまで、すべてを網羅しています。
polymarket
メタこのスキルは、開発者がPolymarket予測市場プラットフォームを活用したアプリケーション構築を可能にします。API統合による取引や市場データの取得に加え、WebSocketを介したリアルタイムデータストリーミングにより、ライブ取引や市場活動を監視できます。取引戦略の実装や、ライブ市場更新を処理するツールの作成にご利用ください。
creating-opencode-plugins
メタこのスキルは、開発者がコマンド、ファイル、LSP操作など25種類以上のイベントタイプにフックするOpenCodeプラグインを作成することを支援します。JavaScript/TypeScriptモジュール向けに、プラグイン構造、イベントAPI仕様、および実装パターンを提供します。カスタムイベント駆動ロジックでOpenCode AIアシスタントのライフサイクルをインターセプト、監視、または拡張する必要がある場合にご利用ください。
sglang
メタSGLangは、高性能なLLMサービングフレームワークであり、RadixAttentionプレフィックスキャッシュを活用したJSON、正規表現、エージェントワークフロー向けの高速で構造化された生成を特長とします。特にプレフィックスが繰り返されるタスクにおいて、大幅に高速な推論を実現し、複雑な構造化出力やマルチターン対話に最適です。制約付きデコードが必要な場合や、広範なプレフィックス共有を伴うアプリケーションを構築する場合は、vLLMなどの代替案ではなくSGLangを選択してください。
