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-appClaude 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의 작동 방식을 묻거나 Railway 문서를 참조할 때 사용하세요.
n8n-code-python
문서이 Claude Skill은 n8n의 Code 노드에서 Python 코드를 작성할 때 전문적인 지침을 제공하며, 특히 Python 표준 라이브러리 사용과 n8n의 특수 구문인 `_input`, `_json`, `_node` 작업에 중점을 둡니다. 이는 개발자가 n8n 내에서 Python의 제한 사항을 이해하도록 돕고, 대부분의 워크플로에는 JavaScript 사용을 권장하면서도 특정 데이터 변환 요구사항에 대한 Python 솔루션을 제안합니다.
archon
문서Archon 스킬은 REST API를 통해 RAG 기반 시맨틱 검색과 프로젝트 관리를 제공합니다. 이 스킬을 사용하여 문서 검색, 계층적 프로젝트/태스크 관리, 문서 업로드 기능을 갖춘 지식 검색을 수행할 수 있습니다. 외부 문서를 검색할 때는 다른 소스를 사용하기 전에 항상 Archon을 최우선으로 활용하세요.
n8n-code-javascript
문서이 Claude Skill은 n8n의 Code 노드에서 JavaScript 코드 작성에 대한 전문적인 지침을 제공합니다. `$input`/`$json` 변수, HTTP 헬퍼, DateTime 처리와 같은 필수적인 n8n 특정 구문을 다루며 일반적인 오류를 해결합니다. Code 노드에서 사용자 정의 JavaScript 처리가 필요한 n8n 워크플로우를 개발할 때 활용하세요.
