deploy-shiny-app
О программе
Этот навык развертывает приложения Shiny на shinyapps.io, Posit Connect или в контейнерах Docker, выполняя настройку rsconnect, генерацию манифеста и создание Dockerfile. Он используется при публикации приложений для пользователей, миграции с локальной разработки, контейнеризации для Kubernetes/Docker или настройке автоматизированных пайплайнов развертывания. Инструмент управляет полным рабочим процессом развертывания, включая конфигурацию и валидацию.
Быстрая установка
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/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)
手動確認チェックリスト:
- アプリがエラーなしで読み込まれる
- すべてのインタラクティブ要素が応答する
- デプロイされた環境でデータ接続が機能する
- 認証/認可が機能する(該当する場合)
期待結果: アプリが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/CDoptimize-shiny-performance— 本番デプロイ前のパフォーマンスチューニング
GitHub репозиторий
Похожие навыки
railway-docs
ДокументацияЭтот навык получает актуальную документацию Railway, чтобы отвечать на вопросы о функциях, возможностях или конкретных URL-адресах документации. Он гарантирует, что разработчики получают точную и современную информацию напрямую из официальных источников Railway. Используйте его, когда пользователи спрашивают, как работает Railway, или ссылаются на документацию Railway.
n8n-code-python
ДокументацияЭтот навык Claude предоставляет экспертные рекомендации по написанию кода Python в узлах Code платформы n8n, в частности, по использованию стандартной библиотеки Python и работе со специальным синтаксисом n8n, таким как `_input`, `_json` и `_node`. Он помогает разработчикам понять ограничения Python в среде n8n и рекомендует использовать JavaScript для большинства рабочих процессов, предлагая решения на Python для конкретных задач по преобразованию данных.
archon
ДокументацияНавык Archon предоставляет семантический поиск на основе RAG и управление проектами через REST API. Используйте его для запросов к документации, управления иерархическими проектами/задачами и выполнения поиска информации с возможностью загрузки документов. Всегда в первую очередь обращайтесь к Archon при поиске во внешней документации, прежде чем использовать другие источники.
n8n-code-javascript
ДокументацияЭтот навык Claude предоставляет экспертные рекомендации по написанию кода JavaScript в узлах Code платформы n8n. Он охватывает важный синтаксис, специфичный для n8n, включая переменные `$input`/`$json`, HTTP-хелперы и работу с DateTime, а также помогает в устранении распространённых ошибок. Используйте его при разработке рабочих процессов в n8n, требующих кастомной обработки JavaScript в узлах Code.
