MCP HubMCP Hub
SKILL·99C180

scaffold-shiny-app

pjt222
Mis à jour 1 month ago
9 vues
26
3
26
Voir sur GitHub
Designdesign

À propos

Cette compétence structure de nouvelles applications Shiny en R avec trois options de cadre : golem pour les packages de production, rhino pour les applications d'entreprise, ou vanilla pour les prototypes rapides. Elle gère la sélection du cadre, l'initialisation du projet, et peut générer un premier module. Utilisez-la pour démarrer des applications web interactives en R, des prototypes de tableaux de bord ou des applications Shiny prêtes pour la production.

Installation rapide

Claude Code

Recommandé
Principal
npx skills add pjt222/agent-almanac -a claude-code
Commande PluginAlternatif
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternatif
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/scaffold-shiny-app

Copiez et collez cette commande dans Claude Code pour installer cette compétence

Documentation

Scaffold Shiny App

Create new Shiny w/ prod-ready structure → golem|rhino|vanilla.

Use When

  • New interactive R web app
  • Dashboard|data explorer proto
  • Prod Shiny as R pkg (golem)
  • Enterprise Shiny (rhino)

In

  • Required: App name
  • Required: Framework (golem|rhino|vanilla)
  • Optional: Module scaffold (default yes)
  • Optional: renv (default yes)
  • Optional: Deploy target (shinyapps.io|Posit Connect|Docker)

Do

Step 1: Choose Framework

FrameworkBest ForStructure
golemProduction apps shipped as R packagesR package with DESCRIPTION, tests, vignettes
rhinoEnterprise apps with JS/CSS build pipelinebox modules, Sass, JS bundling, rhino::init()
vanillaQuick prototypes and learningSingle app.R or ui.R/server.R pair

→ Clear decision by scope + team needs.

If err: unsure → default golem (most structure, can simplify). Vanilla only for throwaway protos.

Step 2: Scaffold

Golem

golem::create_golem("myapp", package_name = "myapp")

Creates:

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")

Creates:

myapp/
├── app/
│   ├── js/
│   ├── logic/
│   ├── static/
│   ├── styles/
│   ├── view/
│   └── main.R
├── tests/
│   ├── cypress/
│   └── testthat/
├── .github/
├── app.R
├── dependencies.R
├── rhino.yml
└── renv.lock

Vanilla

Create 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)

→ Project dir created w/ all scaffold files.

If err: golem → install.packages("golem"). Rhino → remotes::install_github("Appsilon/rhino"). Vanilla → ensure shiny+bslib installed.

Step 3: Configure Deps

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

Deps managed in dependencies.R:

# dependencies.R
library(shiny)
library(bslib)
library(DT)

→ All deps recorded in DESCRIPTION (golem) | dependencies.R (rhino) + renv-locked.

If err: renv::init() fails → check write perms. Pkg install fails → check R ver compat.

Step 4: First Module

Golem

golem::add_module(name = "dashboard", with_test = TRUE)

Creates R/mod_dashboard.R + tests/testthat/test-mod_dashboard.R.

Rhino

Create 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

Add to 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)
    })
  })
}

→ Module file w/ UI+server using proper namespacing.

If err: ensure NS(id) for all input/output IDs in UI fn. Without → IDs collide on multi-use.

Step 5: Run

# Golem
golem::run_dev()

# Rhino
shiny::runApp()

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

→ App launches in browser w/o errs.

If err: check R console. Common: missing pkgs (install), port in use (port = 3839), syntax errs in UI/server.

Check

  • App dir has correct structure for framework
  • shiny::runApp() launches w/o errs
  • ≥1 module w/ UI+server
  • Deps recorded (DESCRIPTION|dependencies.R)
  • renv.lock captures vers
  • Module uses NS(id) for namespace isolation

Traps

  • Vanilla for prod: Lacks tests, docs, deploy tooling. Use golem|rhino beyond protos.
  • Missing namespace in modules: Every inputId+outputId must wrap ns(). Forget → silent ID collisions.
  • golem w/o devtools: golem apps are R pkgs. Use devtools::load_all(), test(), document() — not source().
  • rhino w/o box: rhino uses box for imports. Don't fall back to library() — use box::use().

  • build-shiny-module — reusable modules w/ namespace isolation
  • test-shiny-app — shinytest2 + testServer() tests
  • deploy-shiny-app — deploy to shinyapps.io, Posit Connect, Docker
  • design-shiny-ui — bslib theming + responsive
  • create-r-package — R pkg scaffold (golem apps are R pkgs)
  • manage-renv-dependencies — detailed renv mgmt

Dépôt GitHub

pjt222/agent-almanac
Chemin: i18n/caveman-ultra/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 Design category, tagged design.

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.

Compétences associées

executing-plans
Design

Utilisez la compétence executing-plans lorsque vous disposez d'un plan de mise en œuvre complet à exécuter par lots contrôlés avec des points de contrôle de revue. Elle charge et examine le plan de manière critique, puis exécute les tâches par petits lots (3 tâches par défaut) tout en rapportant la progression entre chaque lot pour une revue par l'architecte. Cela garantit une mise en œuvre systématique avec des points de contrôle de qualité intégrés.

Voir la compétence
requesting-code-review
Design

Cette compétence délègue un sous-agent réviseur de code pour analyser les modifications apportées au code par rapport aux exigences avant de poursuivre. Elle doit être utilisée après avoir terminé des tâches, implémenté des fonctionnalités majeures, ou avant une fusion vers la branche principale. La revue aide à détecter précocement les problèmes en comparant l'implémentation actuelle avec le plan initial.

Voir la compétence
connect-mcp-server
Design

Cette compétence fournit un guide complet permettant aux développeurs de connecter des serveurs MCP à Claude Code via les transports HTTP, stdio ou SSE. Elle couvre l'installation, la configuration, l'authentification et la sécurité pour intégrer des services externes tels que GitHub, Notion et des API personnalisées. Utilisez-la lors de la configuration d'intégrations MCP, de la configuration d'outils externes ou du travail avec le Protocole de Contexte de Modèle de Claude.

Voir la compétence
web-cli-teleport
Design

Cette compétence aide les développeurs à choisir entre les interfaces Web et CLI de Claude Code en fonction de l'analyse des tâches, puis permet une téléportation transparente des sessions entre ces environnements. Elle optimise le flux de travail en gérant l'état et le contexte de la session lors du passage entre le web, la CLI ou le mobile. Utilisez-la pour des projets complexes nécessitant différents outils à diverses étapes.

Voir la compétence