scaffold-shiny-app
Acerca de
Esta habilidad estructura nuevas aplicaciones Shiny en R con tres opciones de framework: golem para paquetes R de producción, rhino para proyectos empresariales, o vanilla para prototipos rápidos. Maneja la inicialización del proyecto y crea el primer módulo, lo que la hace ideal para iniciar paneles de control, exploradores de datos o aplicaciones web de producción. Úsela al iniciar cualquier aplicación Shiny interactiva para establecer la estructura adecuada desde el principio.
Instalación rápida
Claude Code
Recomendadonpx 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-appCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
架 Shiny 應
建新 Shiny 應含產備結構用 golem、rhino、或素架。
用
- 始新互動 R 網應→用
- 建儀板或資探原型→用
- 設產 Shiny 應為 R 包(golem)→用
- 啟企 Shiny 項(rhino)→用
入
- 必:應名
- 必:框選(golem、rhino、素)
- 可:含模架(默:是)
- 可:用 renv 管依(默:是)
- 可:釋標(shinyapps.io、Posit Connect、Docker)
行
一:擇框
按項需選宜框:
| 框 | 宜 | 結構 |
|---|---|---|
| golem | 產應運為 R 包 | R 包含 DESCRIPTION、測、誌 |
| rhino | 企應含 JS/CSS 建管 | box 模、Sass、JS 包、rhino::init() |
| 素 | 速原型與學 | 單 app.R 或 ui.R/server.R 對 |
得:明框決於項範與組需。
敗:未定→默 golem—予最多結構可後簡。素僅宜棄原型。
二:架項
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/
├── inst/
├── man/
├── tests/
└── vignettes/
Rhino 路
rhino::init("myapp")
建:
myapp/
├── app/
│ ├── js/
│ ├── logic/
│ ├── static/
│ ├── styles/
│ ├── view/
│ └── main.R
├── tests/
├── app.R
├── dependencies.R
├── rhino.yml
└── renv.lock
素路
建 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"))。素→確 shiny、bslib 裝。
三:配依
Golem/素
renv::init()
usethis::use_package("shiny")
usethis::use_package("bslib")
usethis::use_package("DT")
usethis::use_package("plotly")
renv::snapshot()
Rhino
依管於 dependencies.R:
library(shiny)
library(bslib)
library(DT)
得:諸依錄於 DESCRIPTION(golem)或 dependencies.R(rhino)、renv 鎖。
敗:renv::init() 敗→查寫權。包裝敗→查 R 本相容。
四:建首模
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)
})
})
}
素
加模函至 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 函諸入/出 ID 用 NS(id)。無命空→ID 多用時撞。
五:行應
golem::run_dev()
shiny::runApp()
shiny::runApp("app.R")
得:應於瀏無誤啟。
敗:察 R 控制台誤訊。常題:缺包(裝之)、口已用(port = 3839)、UI/服碼語誤。
驗
- 應目結構合所擇框
-
shiny::runApp()啟無誤 - ≥ 1 模架含 UI 與服函
- 依錄(DESCRIPTION 或 dependencies.R)
- renv.lock 捕諸包本
- 模用
NS(id)命空隔
忌
- 產用素:素無測施、文、釋工。原型外用 golem 或 rhino
- 模缺命空:模 UI 諸
inputId、outputId必裹ns()。忘致默 ID 撞 - golem 無 devtools 流:golem 應為 R 包。用
devtools::load_all()、devtools::test()、devtools::document(),非source() - rhino 無 box:rhino 用 box 為模入。勿退
library()—用box::use()顯入
參
build-shiny-moduletest-shiny-appdeploy-shiny-appdesign-shiny-uicreate-r-packagemanage-renv-dependencies
Repositorio GitHub
Habilidades relacionadas
content-collections
MetaEsta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.
polymarket
MetaEsta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.
creating-opencode-plugins
MetaEsta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.
sglang
MetaSGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.
