MCP HubMCP Hub
Вернуться к навыкам

scaffold-shiny-app

pjt222
Обновлено 5 days ago
7 просмотров
17
2
17
Посмотреть на GitHub
Метаdesigndata

О программе

Этот навык создает каркас нового приложения Shiny на R, предлагая три варианта структуры: `golem` для production-пакетов R, `rhino` для корпоративных проектов или `vanilla` для быстрых прототипов. Он управляет выбором фреймворка, инициализацией проекта и создает первый модуль. Используйте его для быстрого старта любого нового интерактивного веб-приложения, дашборда или инструмента для исследования данных на R с правильно организованной базовой структурой.

Быстрая установка

Claude Code

Рекомендуется
Основной
npx skills add pjt222/agent-almanac -a claude-code
Команда плагинаАльтернативный
/plugin add https://github.com/pjt222/agent-almanac
Git клонированиеАльтернативный
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/scaffold-shiny-app

Скопируйте и вставьте эту команду в Claude Code для установки этого навыка

Документация

構建 Shiny 應用腳手架

以 golem、rhino 或 vanilla 腳手架建立生產就緒結構之 Shiny 應用。

適用時機

  • 新建 R 之互動式網頁應用
  • 建立儀表板或資料探索原型
  • 以 golem 設置生產 Shiny 應用作為 R 套件
  • 以 rhino 啟動企業 Shiny 項目

輸入

  • 必要:應用名
  • 必要:框架選擇(golem、rhino 或 vanilla)
  • 選擇性:是否含模組腳手架(預設:是)
  • 選擇性:是否用 renv 作依賴管理(預設:是)
  • 選擇性:部署目標(shinyapps.io、Posit Connect、Docker)

步驟

步驟一:選擇框架

評估項目需求以選適當之框架:

框架最適結構
golem以 R 套件交付之生產應用R 套件含 DESCRIPTION、tests、vignettes
rhino含 JS/CSS 建構管道之企業應用box 模組、Sass、JS 打包、rhino::init()
vanilla快速原型與學習單一 app.R 或 ui.R/server.R 對

預期: 依項目範圍與團隊需求作明確之框架決定。

失敗時: 若不確定,預設 golem——其提供最多結構且日後可簡化。Vanilla 僅適合一次性原型。

步驟二:搭建項目腳手架

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 已安裝。

步驟三:配置依賴

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 版本相容性。

步驟四:建立首模組

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 與伺服器函數。

失敗時: 確保模組於 UI 函數中所有輸入/輸出 ID 皆用 NS(id)。無命名空間時,模組多次使用會導致 ID 衝突。

步驟五:執行應用

# Golem
golem::run_dev()

# Rhino
shiny::runApp()

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

預期: 應用於瀏覽器無錯啟動。

失敗時: 檢查 R 控制台之錯誤訊息。常見問題:缺套件(安裝之)、連接埠已用(以 port = 3839 指定不同連接埠)或 UI/server 代碼之語法錯誤。

驗證

  • 應用目錄具所選框架之正確結構
  • shiny::runApp() 無錯啟動
  • 至少一模組已腳手架,含 UI 與伺服器函數
  • 依賴已記錄(DESCRIPTION 或 dependencies.R)
  • renv.lock 捕捉所有套件版本
  • 模組用 NS(id) 作適當之命名空間隔離

常見陷阱

  • 生產選 vanilla:Vanilla 結構缺測試基礎設施、文件與部署工具。原型外用 golem 或 rhino。
  • 模組中缺命名空間:模組 UI 中每 inputIdoutputId 須以 ns() 包裝。遺忘者引發靜默 ID 衝突。
  • 無 devtools 工作流之 golem:golem 應用為 R 套件。用 devtools::load_all()devtools::test()devtools::document()——非 source()
  • 無 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 репозиторий

pjt222/agent-almanac
Путь: i18n/wenyan-lite/skills/scaffold-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

content-collections

Мета

Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.

Просмотреть навык

polymarket

Мета

Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.

Просмотреть навык

creating-opencode-plugins

Мета

Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.

Просмотреть навык

sglang

Мета

SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.

Просмотреть навык