MCP HubMCP Hub
스킬 목록으로 돌아가기

design-shiny-ui

pjt222
업데이트됨 Yesterday
1 조회
17
2
17
GitHub에서 보기
디자인design

정보

이 스킬은 개발자가 bslib와 Bootstrap 5 테마를 사용하여 현대적이고 접근성 높은 Shiny UI를 만들 수 있도록 돕습니다. layout_columns(), 카드 컴포넌트를 활용한 반응형 레이아웃과 WCAG 준수를 위한 모범 사례를 제공합니다. 일관된 브랜딩이나 향상된 접근성이 필요한 전문적인 외관의 애플리케이션을 개발할 때 사용하세요.

빠른 설치

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/design-shiny-ui

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서


name: design-shiny-ui description: > Moderne, zugängliche Shiny-Benutzeroberflächen mit bslib-Themes, responsivem Layout und Barrierefreiheits-Best-Practices gestalten. Behandelt Bootstrap- 5-Theming, layout_columns(), Cards und WCAG-Konformität. Verwenden, wenn eine Shiny-App professionell wirken soll, ein Marken-Theme konsistent angewendet oder die Zugänglichkeit für alle Nutzer verbessert werden soll. license: MIT locale: de source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: shiny complexity: intermediate language: R tags: shiny, ui, bslib, theming, accessibility, bootstrap

Shiny-UI gestalten

Moderne, zugängliche und visuell ansprechende Shiny-Benutzeroberflächen mit bslib und Bootstrap 5 erstellen.

Wann verwenden

  • Shiny-App professionell und markenkonform gestalten
  • Responsives Layout für verschiedene Bildschirmgrößen einrichten
  • Zugänglichkeit (WCAG 2.1 AA) sicherstellen
  • Konsistentes Design über mehrere Apps implementieren

Eingaben

  • Erforderlich: Shiny-App (scaffolded oder bestehend)
  • Optional: Markenfarben und Typografie (Hex-Codes, Schriftarten)
  • Optional: Design-System oder Style-Guide
  • Optional: Zugänglichkeits-Anforderungen

Vorgehensweise

Schritt 1: bslib installieren und Bootstrap 5 aktivieren

bslib für modernes Bootstrap-5-Theming einrichten.

install.packages("bslib")

# Grundlegendes bslib-Setup in app.R oder app_ui.R
library(shiny)
library(bslib)

ui <- page_sidebar(  # Modernes Layout mit bslib
  title = "Meine App",
  sidebar = sidebar(
    selectInput("dataset", "Datensatz:", choices = c("iris", "mtcars"))
  ),
  # Hauptinhalt
  card(
    card_header("Datenübersicht"),
    tableOutput("table")
  )
)

Erwartet: App verwendet Bootstrap 5. Modernes, responsives Grundlayout.

Bei Fehler: Wenn bslib und shiny Version inkompatibel sind, packageVersion("bslib") und packageVersion("shiny") prüfen — bslib >= 0.5.0 für volle Bootstrap-5-Unterstützung.

Schritt 2: Custom Theme erstellen

Markenspezifisches Bootstrap-5-Theme konfigurieren.

# Marken-Theme definieren
mein_theme <- bs_theme(
  version = 5,

  # Grundlegende Markenfarben
  bg = "#FFFFFF",           # Hintergrund
  fg = "#212529",           # Vordergrund (Text)
  primary = "#0066CC",      # Primärfarbe
  secondary = "#6C757D",    # Sekundärfarbe
  success = "#28A745",
  warning = "#FFC107",
  danger = "#DC3545",

  # Typografie
  base_font = font_google("Inter"),
  heading_font = font_google("Inter", wght = 600),
  code_font = font_google("JetBrains Mono"),

  # Benutzerdefinierte Sass-Variablen
  "border-radius" = "0.5rem",
  "box-shadow" = "0 2px 4px rgba(0,0,0,0.1)"
)

# Theme in App verwenden
ui <- page_sidebar(
  theme = mein_theme,
  title = "Meine App",
  # ...
)

Theme live im Browser anpassen:

# Interaktiver Theme-Editor (nur Entwicklung)
bs_themer()  # Fügt Theming-Widget zur App hinzu

Erwartet: App zeigt benutzerdefinierte Farben und Typografie. bs_themer() zeigt interaktive Theme-Kontrollen.

Bei Fehler: Wenn Google Fonts nicht laden (kein Internet), font_google() durch font_collection("system-ui", "sans-serif") ersetzen.

Schritt 3: Responsives Layout mit Cards und Columns

Flexibles, responsives Layout mit bslib-Komponenten erstellen.

ui <- page_sidebar(
  theme = mein_theme,
  title = "Dashboard",

  sidebar = sidebar(
    width = 300,  # Sidebar-Breite in Pixeln
    bg = "#f8f9fa",
    selectInput("dataset", "Datensatz:", choices = c("iris", "mtcars")),
    sliderInput("rows", "Zeilen:", min = 5, max = 50, value = 10),
    hr(),
    actionButton("refresh", "Aktualisieren", class = "btn-primary w-100")
  ),

  # Responsives 2-Spalten-Layout
  layout_columns(
    col_widths = c(8, 4),  # 8/12 + 4/12 Bootstrap-Spalten

    card(
      full_screen = TRUE,  # Vollbild-Erweiterungsbutton
      card_header(
        "Hauptdiagramm",
        class = "bg-primary text-white"
      ),
      plotOutput("main_plot", height = "400px")
    ),

    layout_columns(
      col_widths = c(12, 12),  # Gestapelte Cards auf rechter Seite

      value_box(
        title = "Datenpunkte",
        value = textOutput("n_points"),
        showcase = bsicons::bs_icon("bar-chart"),
        theme = "primary"
      ),

      card(
        card_header("Zusammenfassung"),
        tableOutput("summary_table")
      )
    )
  )
)

Erwartet: Responsives 2-Spalten-Layout auf Desktop. Gestapelt auf Mobile.

Bei Fehler: Wenn Spalten nicht korrekt brechen, col_widths überprüfen — Summe muss 12 oder weniger ergeben (Bootstrap-12-Spalten-Grid).

Schritt 4: Interaktionselemente gestalten

Moderne UI-Komponenten mit Bootstrap-5-Styling hinzufügen.

# Navigation mit Tabs
page_navbar(
  theme = mein_theme,
  title = "Meine App",
  nav_panel(
    "Übersicht",
    icon = bsicons::bs_icon("house"),
    # Inhalt der Übersichtsseite
  ),
  nav_panel(
    "Analyse",
    icon = bsicons::bs_icon("graph-up"),
    # Analyseinhalt
  ),
  nav_spacer(),
  nav_item(
    tags$a(href = "https://docs.example.com", "Dokumentation",
           target = "_blank")
  )
)

# Gestylte Buttons
fluidRow(
  actionButton("primary_btn", "Primär", class = "btn-primary"),
  actionButton("outline_btn", "Umriss", class = "btn-outline-secondary ms-2"),
  downloadButton("download", "Herunterladen", class = "btn-success ms-2")
)

# Tooltips und Popovers
tags$button(
  class = "btn btn-info",
  `data-bs-toggle` = "tooltip",
  `data-bs-placement` = "top",
  title = "Hilfreiche Erklärung",
  bsicons::bs_icon("question-circle")
)

Erwartet: Moderne UI-Elemente mit korrektem Bootstrap-5-Styling.

Bei Fehler: Wenn Tooltips nicht erscheinen, Bootstrap-5-JavaScript muss aktiviert sein. bs_dependency_defer() oder manuelle JS-Initialisierung verwenden.

Schritt 5: Zugänglichkeit sicherstellen

WCAG 2.1 AA-Konformität für alle Nutzer implementieren.

# Semantisches HTML mit ARIA-Labels
ui <- page_sidebar(
  theme = mein_theme,

  # Skip-Navigation-Link
  tags$a(
    href = "#main-content",
    class = "visually-hidden-focusable",
    "Zum Hauptinhalt springen"
  ),

  sidebar = sidebar(
    # Label für Seitenleiste
    tags$div(
      role = "region",
      `aria-label` = "Filteroptionen",
      selectInput("dataset", "Datensatz auswählen:", choices = c("iris", "mtcars"))
    )
  ),

  tags$main(
    id = "main-content",
    role = "main",
    `aria-label` = "Hauptinhalt",

    # Beschreibende Alt-Texte für Plots
    plotOutput(
      "main_plot",
      alt = "Streudiagramm der ausgewählten Datensatz-Variablen"
    ),

    # Tabellen mit Überschriften
    tags$div(
      role = "region",
      `aria-label` = "Datentabelle",
      tableOutput("data_table")
    )
  )
)

Farbkontrast prüfen:

# Kontrastverhältnisse verifizieren (WCAG AA: min 4.5:1 für normalen Text)
# Externes Tool: https://webaim.org/resources/contrastchecker/

# Farbenblindheitssichere Paletten
colorblind_palette <- c(
  "#E69F00", "#56B4E9", "#009E73",
  "#F0E442", "#0072B2", "#D55E00", "#CC79A7"
)

Erwartet: App navigierbar mit Tastatur. Screen Reader-Nutzer können Inhalt verstehen. Farben haben ausreichenden Kontrast.

Bei Fehler: Wenn ARIA-Labels nicht erkannt werden, HTML-Ausgabe mit view_ui <- function(ui) htmltools::html_print(ui) untersuchen.

Schritt 6: Theme über Apps hinweg wiederverwenden

Theme in R-Paket oder shared Skript packen.

# R/theme.R (in golem-Paket oder gemeinsames Skript)
#' Unternehmensspezifisches bslib-Theme
#' @export
get_company_theme <- function() {
  bs_theme(
    version = 5,
    primary = "#0066CC",
    base_font = font_google("Inter"),
    heading_font = font_google("Inter", wght = 600)
  )
}

# In jeder App verwenden
ui <- page_sidebar(
  theme = get_company_theme(),
  # ...
)

# CSS-Überschreibungen für app-spezifische Anpassungen
ui <- page_sidebar(
  theme = bs_theme_update(
    get_company_theme(),
    # App-spezifische Überschreibungen
    "sidebar-bg" = "#f0f4f8"
  )
)

Erwartet: Konsistentes Design über alle Unternehmens-Apps. Theme in einzelner Datei wartbar.

Bei Fehler: Wenn Theme-Überschreibungen nicht wirken, CSS-Spezifität prüfen — bslib-Sass-Variablen haben Vorrang vor Bootstrap-Defaults.

Validierung

  • App verwendet Bootstrap 5 via bslib
  • Custom Theme mit Markenfarben und Typografie konfiguriert
  • Responsives Layout bricht korrekt auf mobilen Bildschirmen
  • Navigation mit Tastatur vollständig möglich
  • Farb-Kontrastverhältnisse erfüllen WCAG 2.1 AA (4.5:1)
  • ARIA-Labels für nicht-textuelle Elemente vorhanden
  • Theme in wiederverwendbarer Funktion oder Paket

Haeufige Stolperfallen

  • Bootstrap-Version-Mischung: Nicht Bootstrap 4 und 5 mischen. bslib-Themes erfordern konsistente Bootstrap-Version.
  • Inline-CSS vs Sass-Variablen: Inline-CSS kann bslib-Theming überschreiben. Sass-Variablen über bs_theme() bevorzugen.
  • Google Fonts in Offline-Umgebungen: font_google() benötigt Internet. Für Offline-Einsatz lokale Schriften in www/fonts/ verwenden.
  • Kontrast-Checker für Markenfarben: Markenfarben erfüllen nicht immer WCAG-Kontrastverhältnisse. Immer mit Tool prüfen.
  • Cards und full_screen: full_screen = TRUE erfordert Inhalt mit definierten Höhen, sonst unbegrenzte Ausdehnung.
  • value_box in Modulen: value_box() IDs über ns() korrekt namespace.

Verwandte Skills

  • scaffold-shiny-app — App vor UI-Design scaffolden
  • build-shiny-module — Modulstruktur für wiederverwendbare UI-Komponenten
  • optimize-shiny-performance — Performance nach UI-Fertigstellung optimieren

GitHub 저장소

pjt222/agent-almanac
경로: i18n/de/skills/design-shiny-ui
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

executing-plans

디자인

executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.

스킬 보기

requesting-code-review

디자인

이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.

스킬 보기

connect-mcp-server

디자인

이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.

스킬 보기

web-cli-teleport

디자인

이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.

스킬 보기