MCP HubMCP Hub
Volver a habilidades

scaffold-shiny-app

pjt222
Actualizado 2 days ago
4 vistas
17
2
17
Ver en GitHub
Otrogeneral

Acerca de

Esta habilidad estructura nuevas aplicaciones Shiny utilizando las estructuras de golem (paquete R de producción), rhino (empresarial) o vanilla (prototipo rápido). Maneja la selección del framework, la inicialización del proyecto y la creación del primer módulo. Úsala al iniciar aplicaciones web interactivas en R, prototipar paneles de control, configurar aplicaciones Shiny de producción como paquetes o arrancar proyectos empresariales.

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アプリケーションを開始するとき、ダッシュボードや データエクスプローラーのプロトタイプを作成するとき、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: フレームワークの選択

適切なフレームワークを選択するためにプロジェクト要件を評価します:

フレームワーク最適用途構造
golemRパッケージとして出荷する本番アプリDESCRIPTION、テスト、ビネットを持つRパッケージ
rhinoJS/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.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

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のすべてのinputIdoutputIdns()でラップする必要があります。これを忘れるとサイレントな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依存関係管理

Repositorio GitHub

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

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

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

dispatching-parallel-agents

Otro

Esta Skill de Claude despliega múltiples agentes para investigar y solucionar 3 o más problemas independientes de forma concurrente. Está diseñada para escenarios que involucran fallos no relacionados que pueden resolverse sin estado compartido o dependencias. Su capacidad principal es la resolución paralela de problemas, asignando un agente por cada dominio problemático independiente para maximizar la eficiencia.

Ver habilidad