返回技能列表

deploy-shiny-app

pjt222
更新于 2 days ago
8 次查看
17
2
17
在 GitHub 上查看
文档general

关于

This skill deploys Shiny apps to shinyapps.io, Posit Connect, or Docker containers, handling rsconnect setup, manifest generation, and Dockerfile creation. It's used when publishing apps for users, migrating from local development, containerizing for Kubernetes/Docker, or setting up automated deployment pipelines. The tool manages the full deployment workflow including configuration and validation.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/deploy-shiny-app

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档


name: deploy-shiny-app description: > Shinyアプリケーションをshinyapps.io、Posit Connect、またはDockerコンテナに デプロイします。rsconnectの設定、マニフェストの生成、Dockerfileの作成、 デプロイメントの検証を扱います。外部または内部ユーザー向けにShinyアプリを 公開するとき、ローカル開発からホスト環境に移行するとき、KubernetesまたはDocker デプロイメント用にShinyアプリをコンテナ化するとき、または自動デプロイメント パイプラインをセットアップするときに使用します。 locale: ja source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: shiny complexity: basic language: R tags: shiny, deployment, shinyapps-io, posit-connect, docker, rsconnect

Shinyアプリのデプロイ

ShinyアプリケーションをShinyapps.io、Posit Connect、またはDockerコンテナにデプロイします。

使用タイミング

  • 外部または内部ユーザー向けにShinyアプリを公開するとき
  • ローカル開発からホスト環境に移行するとき
  • KubernetesまたはDockerデプロイメント用にShinyアプリをコンテナ化するとき
  • 自動デプロイメントパイプラインをセットアップするとき

入力

  • 必須: Shinyアプリケーションへのパス
  • 必須: デプロイ先(shinyapps.io、Posit Connect、またはDocker)
  • オプション: アカウント名とトークン(shinyapps.io/Connect用)
  • オプション: インスタンスサイズの選択
  • オプション: カスタムドメインまたはURLパス

手順

ステップ1: アプリケーションの準備

アプリが自己完結型でデプロイ可能であることを確認します:

# 欠けている依存関係を確認
rsconnect::appDependencies("path/to/app")

# golemアプリの場合、DESCRIPTIONにすべてのImportsがリストされているか確認
devtools::check()

# アプリがクリーンに実行されることを確認
shiny::runApp("path/to/app")

以下のファイルが存在することを確認してください:

  • app.R(またはui.R + server.R
  • renv.lock(再現可能なデプロイメントに推奨)
  • .Rprofileが本番環境でmcptools::mcp_session()を呼び出していないこと

期待結果: アプリがエラーなしでローカルに実行でき、すべての依存関係がキャプチャされています。

失敗時: appDependencies()が欠けているパッケージを報告する場合はインストールしてrenv.lockを更新してください。アプリがシステムライブラリ(例:gdal、curl)を使用する場合は、Dockerパス用にメモしてください。

ステップ2a: shinyapps.ioへのデプロイ

# 一回限りのアカウントセットアップ
rsconnect::setAccountInfo(
  name = "your-account",
  token = Sys.getenv("SHINYAPPS_TOKEN"),
  secret = Sys.getenv("SHINYAPPS_SECRET")
)

# デプロイ
rsconnect::deployApp(
  appDir = "path/to/app",
  appName = "my-app",
  appTitle = "My Application",
  account = "your-account",
  forceUpdate = TRUE
)

認証情報は.Renvironに保存してください(コードには絶対に書かない):

# .Renviron
SHINYAPPS_TOKEN=your_token_here
SHINYAPPS_SECRET=your_secret_here

期待結果: アプリがデプロイされhttps://your-account.shinyapps.io/my-app/でアクセス可能になります。

失敗時: 認証が失敗する場合は、shinyapps.ioダッシュボード > Account > Tokensでトークンを再生成してください。サーバーでパッケージのインストールが失敗する場合は、すべてのパッケージがCRANで入手可能か確認してください — shinyapps.ioはデフォルトでGitHubからインストールできません。

ステップ2b: Posit Connectへのデプロイ

# サーバーの登録(一回限り)
rsconnect::addServer(
  url = "https://connect.example.com",
  name = "production"
)

# 認証(一回限り)
rsconnect::connectApiUser(
  account = "your-username",
  server = "production",
  apiKey = Sys.getenv("CONNECT_API_KEY")
)

# デプロイ
rsconnect::deployApp(
  appDir = "path/to/app",
  appName = "my-app",
  server = "production",
  account = "your-username"
)

期待結果: アプリがデプロイされてPosit Connectインスタンスでアクセス可能になります。

失敗時: サーバーが接続を拒否する場合は、APIキーとサーバーURLを確認してください。パッケージのインストールが失敗する場合は、Connectが必要なリポジトリ(CRAN、内部CRANライクなリポジトリ)にアクセスできるか確認してください。

ステップ2c: Dockerでのデプロイ

Dockerfileを作成します:

FROM rocker/shiny-verse:4.4.0

# システム依存関係のインストール
RUN apt-get update && apt-get install -y \
    libcurl4-openssl-dev \
    libssl-dev \
    libxml2-dev \
    && rm -rf /var/lib/apt/lists/*

# Rパッケージのインストール
RUN R -e "install.packages(c('shiny', 'bslib', 'DT', 'plotly'))"

# アプリをコピー
COPY . /srv/shiny-server/myapp/

# Shiny Serverの設定
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf

# ポートを公開
EXPOSE 3838

# 実行
CMD ["/usr/bin/shiny-server"]

shiny-server.confを作成します:

run_as shiny;

server {
  listen 3838;

  location / {
    site_dir /srv/shiny-server/myapp;
    log_dir /var/log/shiny-server;
    directory_index on;
  }
}

ビルドと実行:

docker build -t myapp:latest .
docker run -p 3838:3838 myapp:latest

期待結果: アプリがhttp://localhost:3838でアクセス可能になります。

失敗時: パッケージのインストールでビルドが失敗する場合は、欠けているシステムライブラリをapt-get installの行に追加してください。アプリが読み込まれない場合はShiny Serverのログを確認してください:docker exec <container> cat /var/log/shiny-server/*.log

ステップ3: デプロイメントの確認

# デプロイされたURLが応答するか確認
response <- httr::GET("https://your-app-url/")
httr::status_code(response)  # 200であるべき

# Dockerの場合
response <- httr::GET("http://localhost:3838/")
httr::status_code(response)

手動確認チェックリスト:

  1. アプリがエラーなしで読み込まれる
  2. すべてのインタラクティブ要素が応答する
  3. デプロイされた環境でデータ接続が機能する
  4. 認証/認可が機能する(該当する場合)

期待結果: アプリがHTTP 200で応答し、すべての機能が動作します。

失敗時: 特定のデプロイメントプラットフォームのサーバーログを確認してください。よくある問題:本番環境での環境変数の未設定、localhostの代わりに本番URLを使ったデータベース接続、またはローカルにしか存在しないファイルパス。

ステップ4: モニタリングの設定(オプション)

shinyapps.io

https://www.shinyapps.io/admin/#/applicationsのダッシュボードでモニタリングします。

Posit Connect

# API経由でデプロイメントの状態を確認
connectapi::connect(
  server = "https://connect.example.com",
  api_key = Sys.getenv("CONNECT_API_KEY")
)

Docker

DockerfileにHEALTHCHECKを追加します:

HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
  CMD curl -f http://localhost:3838/ || exit 1

期待結果: デプロイメントターゲットのモニタリングが設定されています。

失敗時: ヘルスチェックが断続的に失敗する場合はタイムアウト値を増やしてください。Shinyアプリは初回読み込み時に応答が遅い場合があります。

バリデーション

  • アプリがエラーなしでデプロイされる
  • デプロイされたURLがHTTP 200で応答する
  • すべてのインタラクティブ機能が本番環境で動作する
  • 環境変数/シークレットが設定されている(ハードコードされていない)
  • 認証情報が.RenvironまたはCIシークレットに保存されており、コードには書かれていない
  • 再現可能な依存関係解決のためにrenv.lockがコミットされている

よくある落とし穴

  • ハードコードされたファイルパス: 絶対パスをsystem.file()(パッケージデータ用)または環境変数(外部リソース用)に置き換えてください。
  • 開発専用の依存関係: mcptools::mcp_session()devtoolsを読み込む.Rprofileをデプロイしないでください。条件付き読み込みまたは別のプロファイルを使用してください。
  • DockerでのシステムライブラリのMissing: sf、curl、xml2などのRパッケージにはシステムライブラリが必要です。Dockerfileのapt-get installに追加してください。
  • shinyapps.ioでのCRANのみパッケージ: shinyapps.ioはデフォルトでCRANからのみインストールします。GitHubのみのパッケージにはremotesパッケージとデプロイメント内での明示的なインストールが必要です。
  • 環境変数の忘れ: データベース認証情報、APIキー、その他のシークレットはコードとは別に、デプロイメント環境で設定する必要があります。

関連スキル

  • scaffold-shiny-app — デプロイ前のアプリ構造の作成
  • create-r-dockerfile — Rプロジェクトの詳細なDocker設定
  • setup-docker-compose — データベースを持つShiny用のマルチコンテナセットアップ
  • setup-github-actions-ci — 自動デプロイメントを含むCI/CD
  • optimize-shiny-performance — 本番デプロイ前のパフォーマンスチューニング

GitHub 仓库

pjt222/agent-almanac
路径: i18n/ja/skills/deploy-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

railway-docs

文档

Railway Docs Skill可实时获取最新的Railway官方文档,确保回答的准确性。当开发者询问Railway功能特性、工作原理或分享docs.railway.com链接时,应优先使用此技能。它通过专门的LLM优化文档源提供最新信息,避免依赖过时记忆来回答技术问题。

查看技能

n8n-code-python

文档

该Skill为在n8n平台的Python代码节点中编写代码提供专家指导,特别适用于需要使用_input/_json/_node语法、Python标准库或了解n8n中Python限制的场景。它强调JavaScript应作为首选方案,仅当需要特定Python功能或对Python语法更熟悉时才使用Python。Skill提供了快速入门模板和关键注意事项,帮助开发者在n8n中高效编写Python代码。

查看技能

archon

文档

Archon Skill为开发者提供了基于RAG的语义搜索和项目任务管理功能,可通过REST API访问知识库。它支持文档搜索、网站爬取、文件上传和版本控制,适用于技术文档查询和项目管理场景。首次使用时需要配置Archon主机地址,建议在处理外部文档时优先使用该Skill。

查看技能

n8n-code-javascript

文档

这个Skill为n8n工作流中的JavaScript代码节点提供专业指导,涵盖数据处理、HTTP请求和日期操作等核心场景。它详细解释了如何正确使用n8n特有的`$input`/`$json`语法、`$helpers`工具以及DateTime对象,并包含关键的错误排查和模式选择建议。开发者通过该Skill能快速掌握Code节点的正确返回格式、数据访问方法和常见陷阱解决方案。

查看技能