MCP HubMCP Hub
SKILL·937FC7

scaffold-shiny-app

pjt222
Actualizado 1 month ago
12 vistas
24
3
24
Ver en GitHub
Otrogeneral

Acerca de

Esta Skill de Claude estructura nuevas aplicaciones Shiny en R utilizando los frameworks golem (paquete de producción), rhino (empresarial) o vanilla (prototipo rápido). Maneja la inicialización del proyecto y crea el primer módulo, lo que la hace ideal para iniciar aplicaciones web interactivas, prototipar dashboards o configurar proyectos Shiny listos para producción. Los desarrolladores pueden arrancar proyectos rápidamente con una estructura adecuada y gestión opcional de dependencias.

Instalación rápida

Claude Code

Recomendado
Principal
npx skills add pjt222/agent-almanac -a claude-code
Comando PluginAlternativo
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternativo
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/scaffold-shiny-app

Copia y pega este comando en Claude Code para instalar esta habilidad

Documentación


name: scaffold-shiny-app description: > 使用 golem(生产 R 包)、rhino(企业级)或 vanilla(快速原型)结构搭建新的 Shiny 应用程序。涵盖框架选择、项目初始化及第一个模块创建。适用于在 R 中 启动新的交互式 Web 应用、创建仪表盘或数据探索器原型、将生产 Shiny 应用 以 golem 方式设置为 R 包,或用 rhino 引导企业级 Shiny 项目。 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 locale: zh-CN source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16

搭建 Shiny 应用

使用 golem、rhino 或 vanilla 脚手架创建具有生产就绪结构的新 Shiny 应用程序。

适用场景

  • 在 R 中启动新的交互式 Web 应用
  • 创建仪表盘或数据探索器原型
  • 将生产 Shiny 应用设置为 R 包(golem)
  • 引导企业级 Shiny 项目(rhino)

输入

  • 必需:应用名称
  • 必需:框架选择(golem、rhino 或 vanilla)
  • 可选:是否包含模块脚手架(默认:是)
  • 可选:是否使用 renv 进行依赖管理(默认:是)
  • 可选:部署目标(shinyapps.io、Posit Connect、Docker)

步骤

第 1 步:选择框架

根据项目需求评估并选择合适的框架:

框架最适用于结构
golem以 R 包形式交付的生产应用包含 DESCRIPTION、测试、vignette 的 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

# Initialize renv
renv::init()

# Add core dependencies
usethis::use_package("shiny")
usethis::use_package("bslib")
usethis::use_package("DT")         # if using data tables
usethis::use_package("plotly")     # if using interactive plots

# Snapshot
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.Rtests/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

将模块函数添加到单独的文件 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 和 server 函数。

失败处理: 确保模块在 UI 函数中使用 NS(id) 处理所有输入/输出 ID。如果没有命名空间,多次使用该模块时 ID 会冲突。

第 5 步:运行应用程序

# Golem
golem::run_dev()

# Rhino
shiny::runApp()

# Vanilla
shiny::runApp("app.R")

预期结果: 应用程序在浏览器中启动,无错误。

失败处理: 检查 R 控制台中的错误消息。常见问题:缺少包(安装它们)、端口已被占用(用 port = 3839 指定不同端口),或 UI/server 代码中存在语法错误。

验证清单

  • 应用目录具有所选框架的正确结构
  • shiny::runApp() 启动无错误
  • 至少搭建了一个具有 UI 和 server 函数的模块
  • 依赖项已记录(DESCRIPTION 或 dependencies.R)
  • renv.lock 捕获所有包版本
  • 模块使用 NS(id) 进行正确的命名空间隔离

常见问题

  • 为生产环境选择 vanilla:vanilla 结构缺乏测试基础设施、文档和部署工具。原型之外的任何项目都应使用 golem 或 rhino。
  • 模块中缺少命名空间:模块 UI 中的每个 inputIdoutputId 都必须用 ns() 包裹。遗漏会导致静默的 ID 冲突。
  • golem 缺少 devtools 工作流:golem 应用是 R 包。使用 devtools::load_all()devtools::test()devtools::document()——而非 source()
  • rhino 不使用 box: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 依赖管理

Repositorio GitHub

pjt222/agent-almanac
Ruta: i18n/zh-CN/skills/scaffold-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams
FAQ

Frequently asked questions

What is the scaffold-shiny-app skill?

scaffold-shiny-app is a Claude Skill by pjt222. Skills package instructions and resources that Claude loads on demand, so Claude can perform scaffold-shiny-app-related tasks without extra prompting.

How do I install scaffold-shiny-app?

Use the install commands on this page: add scaffold-shiny-app to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.

What category does scaffold-shiny-app belong to?

scaffold-shiny-app is in the Other category, tagged general.

Is scaffold-shiny-app free to use?

Yes. scaffold-shiny-app is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.

Habilidades relacionadas

llamaguard
Otro

LlamaGuard es el modelo de Meta de 7-8B parámetros para moderar las entradas y salidas de LLM en seis categorías de seguridad como violencia y discurso de odio. Ofrece una precisión del 94-95% y puede implementarse usando vLLM, Hugging Face o Amazon SageMaker. Utiliza esta skill para integrar fácilmente filtrado de contenido y barreras de seguridad en tus aplicaciones de IA.

Ver habilidad
cost-optimization
Otro

Esta Skill de Claude ayuda a los desarrolladores a optimizar los costes en la nube mediante el ajuste de tamaño de recursos, estrategias de etiquetado y análisis de gastos. Proporciona un marco para reducir los gastos en la nube e implementar una gobernanza de costes en AWS, Azure y GCP. Úsala cuando necesites analizar los costes de infraestructura, ajustar el tamaño de los recursos o cumplir con restricciones presupuestarias.

Ver habilidad
sports-betting-analyzer
Otro

Esta habilidad de Claude analiza los mercados de apuestas deportivas, incluyendo spreads, over/unders y apuestas de propuestas, mediante el examen de tendencias históricas y estadísticas situacionales para identificar apuestas de valor. Proporciona una salida en markdown estructurado con recomendaciones accionables con fines educativos. Los desarrolladores deben utilizar esto para herramientas de análisis de apuestas deportivas, teniendo en cuenta que está diseñado únicamente para entretenimiento/educación.

Ver habilidad
quantizing-models-bitsandbytes
Otro

Esta habilidad cuantiza LLMs a precisión de 8 o 4 bits utilizando bitsandbytes, logrando una reducción de memoria del 50-75% con pérdida mínima de precisión. Es ideal para ejecutar modelos más grandes en memoria GPU limitada o para acelerar la inferencia, admitiendo formatos como INT8, NF4 y FP4. La habilidad se integra con HuggingFace Transformers y permite entrenamiento QLoRA y optimizadores de 8 bits.

Ver habilidad