scaffold-shiny-app
정보
이 스킬은 golem(프로덕션용 R 패키지), rhino(엔터프라이즈), 또는 vanilla(신속한 프로토타이핑) 구조를 사용하여 새로운 Shiny 애플리케이션의 기본 틀을 구성합니다. 프레임워크 선택, 프로젝트 초기화, 첫 번째 모듈 생성까지 처리합니다. R에서 인터랙티브 웹 앱을 시작할 때, 대시보드 프로토타입을 만들 때, 프로덕션용 Shiny 앱을 패키지로 설정할 때, 또는 엔터프라이즈 프로젝트를 부트스트랩할 때 사용하세요.
빠른 설치
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/scaffold-shiny-appClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
name: scaffold-shiny-app description: > golem(本番Rパッケージ)、rhino(エンタープライズ)、またはvanilla(クイック プロトタイプ)構造を使って新しいShinyアプリケーションをスキャフォールドします。 フレームワークの選択、プロジェクトの初期化、最初のモジュール作成を扱います。 Rで新しいインタラクティブWebアプリケーションを開始するとき、ダッシュボードや データエクスプローラーのプロトタイプを作成するとき、golemを使ってRパッケージ として本番Shinyアプリをセットアップするとき、またはrhinoでエンタープライズ 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, golem, rhino, scaffold, web-app, reactive
Shinyアプリのスキャフォールド
golem、rhino、またはvanillaスキャフォールドを使って本番対応の構造で新しいShinyアプリケーションを作成します。
使用タイミング
- Rで新しいインタラクティブWebアプリケーションを開始するとき
- ダッシュボードやデータエクスプローラーのプロトタイプを作成するとき
- RパッケージとしてShinyアプリを本番設定でセットアップするとき(golem)
- エンタープライズShinyプロジェクトをブートストラップするとき(rhino)
入力
- 必須: アプリケーション名
- 必須: フレームワークの選択(golem、rhino、またはvanilla)
- オプション: モジュールスキャフォールドを含めるか(デフォルト:あり)
- オプション: 依存関係管理にrenvを使用するか(デフォルト:あり)
- オプション: デプロイ先(shinyapps.io、Posit Connect、Docker)
手順
ステップ1: フレームワークの選択
適切なフレームワークを選択するためにプロジェクト要件を評価します:
| フレームワーク | 最適用途 | 構造 |
|---|---|---|
| golem | Rパッケージとして出荷する本番アプリ | DESCRIPTION、テスト、ビネットを持つRパッケージ |
| rhino | JS/CSSビルドパイプラインを持つエンタープライズアプリ | boxモジュール、Sass、JSバンドリング、rhino::init() |
| vanilla | クイックプロトタイプと学習 | 単一のapp.RまたはUI.R/server.Rペア |
期待結果: プロジェクトのスコープとチームのニーズに基づいた明確なフレームワークの決定。
失敗時: 迷う場合はgolemをデフォルトとして選択してください。最も構造化されており、後で簡略化できます。vanillaは使い捨てプロトタイプにのみ適しています。
ステップ2: プロジェクトのスキャフォールド
Golemパス
golem::create_golem("myapp", package_name = "myapp")
これにより以下が作成されます:
myapp/
├── DESCRIPTION
├── NAMESPACE
├── R/
│ ├── app_config.R
│ ├── app_server.R
│ ├── app_ui.R
│ └── run_app.R
├── dev/
│ ├── 01_start.R
│ ├── 02_dev.R
│ ├── 03_deploy.R
│ └── run_dev.R
├── inst/
│ ├── app/www/
│ └── golem-config.yml
├── man/
├── tests/
│ ├── testthat.R
│ └── testthat/
└── vignettes/
Rhinoパス
rhino::init("myapp")
これにより以下が作成されます:
myapp/
├── app/
│ ├── js/
│ ├── logic/
│ ├── static/
│ ├── styles/
│ ├── view/
│ └── main.R
├── tests/
│ ├── cypress/
│ └── testthat/
├── .github/
├── app.R
├── dependencies.R
├── rhino.yml
└── renv.lock
Vanillaパス
app.Rを作成します:
library(shiny)
library(bslib)
ui <- page_sidebar(
title = "My App",
sidebar = sidebar(
sliderInput("n", "Sample size", 10, 1000, 100)
),
card(
card_header("Output"),
plotOutput("plot")
)
)
server <- function(input, output, session) {
output$plot <- renderPlot({
hist(rnorm(input$n), main = "Random Normal")
})
}
shinyApp(ui, server)
期待結果: すべてのスキャフォールドファイルが作成されたプロジェクトディレクトリ。
失敗時: golemの場合は、golemパッケージがインストールされているか確認してください:install.packages("golem")。rhinoの場合はGitHubからインストールしてください:remotes::install_github("Appsilon/rhino")。vanillaの場合はshinyとbslibがインストールされているか確認してください。
ステップ3: 依存関係の設定
Golem/Vanilla
# renvの初期化
renv::init()
# コア依存関係の追加
usethis::use_package("shiny")
usethis::use_package("bslib")
usethis::use_package("DT") # データテーブルを使用する場合
usethis::use_package("plotly") # インタラクティブプロットを使用する場合
# スナップショット
renv::snapshot()
Rhino
依存関係はdependencies.Rで管理されます:
# dependencies.R
library(shiny)
library(bslib)
library(DT)
期待結果: すべての依存関係がDESCRIPTION(golem)またはdependencies.R(rhino)に記録され、renvでロックされています。
失敗時: renv::init()が失敗する場合は書き込み権限を確認してください。パッケージのインストールが失敗する場合はRバージョンの互換性を確認してください。
ステップ4: 最初のモジュールの作成
Golem
golem::add_module(name = "dashboard", with_test = TRUE)
これによりR/mod_dashboard.Rとtests/testthat/test-mod_dashboard.Rが作成されます。
Rhino
app/view/dashboard.Rを作成します:
box::use(
shiny[moduleServer, NS, tagList, h3, plotOutput, renderPlot],
)
#' @export
ui <- function(id) {
ns <- NS(id)
tagList(
h3("Dashboard"),
plotOutput(ns("plot"))
)
}
#' @export
server <- function(id) {
moduleServer(id, function(input, output, session) {
output$plot <- renderPlot({
plot(1:10)
})
})
}
Vanilla
UIとサーバー関数を別のファイルR/mod_dashboard.Rに追加します:
dashboardUI <- function(id) {
ns <- NS(id)
tagList(
h3("Dashboard"),
plotOutput(ns("plot"))
)
}
dashboardServer <- function(id) {
moduleServer(id, function(input, output, session) {
output$plot <- renderPlot({
plot(1:10)
})
})
}
期待結果: 適切な名前空間を使用したUIとサーバー関数を持つモジュールファイルが作成されます。
失敗時: モジュールがUI関数内のすべてのinput/output IDに対してNS(id)を使用していることを確認してください。名前空間がなければ、モジュールを複数回使用するとIDが衝突します。
ステップ5: アプリケーションの実行
# Golem
golem::run_dev()
# Rhino
shiny::runApp()
# Vanilla
shiny::runApp("app.R")
期待結果: アプリケーションがエラーなしでブラウザで起動します。
失敗時: Rコンソールのエラーメッセージを確認してください。よくある問題:パッケージの欠落(インストールしてください)、ポートが使用中(port = 3839で別のポートを指定)、またはUI/サーバーコードの構文エラー。
バリデーション
- アプリケーションディレクトリが選択したフレームワークに対して正しい構造を持つ
-
shiny::runApp()がエラーなしで起動する - UIとサーバー関数を持つ少なくとも1つのモジュールがスキャフォールドされている
- 依存関係が記録されている(DESCRIPTIONまたはdependencies.R)
- renv.lockがすべてのパッケージバージョンをキャプチャしている
- モジュールが適切な名前空間分離のために
NS(id)を使用している
よくある落とし穴
- 本番にvanillaを選ぶ: vanilla構造にはテストインフラ、ドキュメント、デプロイツールが不足しています。プロトタイプ以外にはgolemまたはrhinoを使用してください。
- モジュールで名前空間を省略する: モジュールUIのすべての
inputIdとoutputIdはns()でラップする必要があります。これを忘れるとサイレントなID衝突が起きます。 - devtoolsワークフローなしのgolem: golemアプリはRパッケージです。
source()ではなくdevtools::load_all()、devtools::test()、devtools::document()を使用してください。 - boxなしのrhino: rhinoはモジュールインポートにboxを使用します。
library()呼び出しに戻らず、明示的なインポートにはbox::use()を使用してください。
関連スキル
build-shiny-module— 適切な名前空間分離を持つ再利用可能なShinyモジュールの作成test-shiny-app— shinytest2とtestServer()テストのセットアップdeploy-shiny-app— shinyapps.io、Posit Connect、またはDockerへのデプロイdesign-shiny-ui— bslibのテーマとレスポンシブレイアウトデザインcreate-r-package— Rパッケージスキャフォールド(golemアプリはRパッケージ)manage-renv-dependencies— 詳細なrenv依存関係管理
GitHub 저장소
연관 스킬
llamaguard
기타LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.
cost-optimization
기타이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.
quantizing-models-bitsandbytes
기타이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.
dispatching-parallel-agents
기타이 Claude Skill은 3개 이상의 독립적인 문제를 동시에 조사하고 해결하기 위해 다중 에이전트를 배치합니다. 공유 상태나 의존성 없이 해결 가능한 무관련 장애 시나리오에 맞게 설계되었습니다. 핵심 기능은 병렬 문제 해결로, 각 독립 문제 영역마다 하나의 에이전트를 할당하여 효율성을 극대화합니다.
