if (!requireNamespace("DT", quietly = TRUE)) { stop("DT package not available") } library(shiny) library(DT) library(dplyr) library(readr) # ファイル読み込み act01 <- read_csv("data/CCS_Act01.csv") %>% mutate(法分類 = "法律") act02 <- read_csv("data/CCS_Act02.csv") %>% mutate(法分類 = "政令") act03 <- read_csv("data/CCS_Act03.csv") %>% mutate(法分類 = "省令") # データ統合 law_data <- bind_rows(act01, act02, act03) # UI定義 ui <- fluidPage( titlePanel("法令データベース検索(CCS法体系プロトタイプ)"), sidebarLayout( sidebarPanel( selectInput("law_type", "法分類を選択:", choices = c("すべて", unique(law_data$法分類)), selected = "すべて"), textInput("keyword", "キーワード検索:", ""), actionButton("search", "検索実行") ), mainPanel( DTOutput("table") ) ) ) # サーバ定義 server <- function(input, output, session) { filtered_data <- eventReactive(input$search, { data <- law_data if (input$law_type != "すべて") { data <- filter(data, 法分類 == input$law_type) } if (input$keyword != "") { data <- filter(data, grepl(input$keyword, 条文テキスト, ignore.case = TRUE)) } data }, ignoreNULL = FALSE) output$table <- renderDT({ datatable( filtered_data(), options = list(pageLength = 15, autoWidth = TRUE), rownames = FALSE ) }) } # アプリ起動 shinyApp(ui = ui, server = server)