LoginSignup
12
14

More than 5 years have passed since last update.

【R】 [shiny] Material Designのshiny アプリケーションを作る

Last updated at Posted at 2017-11-03

shiny appをMaterial Designで実装する

image.png

この記事の内容で、このようなアプリケーションが実装できるようになります!

Material Design とは?

Material_Design.svg.png

マテリアルデザイン - wikipedia

マテリアルデザイン(Material Design)は、アメリカ合衆国のGoogle社が提唱したユーザーエクスペリエンスデザインの体系[1]、およびそれを実現する開発技術や手法、デザイン、試みなどの包括的呼称[2]

2014年にGoogleが発表したデザインとのことです。
詳細はこちらに

私が知る限りでは、shinyのアプリケーションといえば

1.tutorialのデザイン
shiny hello.png
Rstudio Welcome to Shinyより

2.shiny themesのデザイン
shiny themes.png

Rstudio Shiny Themesより

3.shinydashboardのデザイン
dashboard.png
Rstudio shinydashboardより

のようなデザインのものが多いと思います。
これらとは少し違うデザインを作りたいってなった時に、1~3 (他にもたくさんあると思います)のベースにたいして、CSS・JSで装飾していくイメージでした。

shinymaterial

そんなときに、新しい選択肢になりそうなshinymaterialパッケージを発見しました!

イメージ:shinymaterial
shinymaterials_TOP.png

shinymaterialの特徴をいくつかいれたappを作ってみました!

使い方

まずパッケージを導入しましょう

console
# どちらかから
# CRAN version: 
install.packages("shinymaterial", dependencies = TRUE)
# Development version: 
devtools::install_github("ericrayanderson/shinymaterial")

問題なく完了したら、次のコードを実行してみてください!

console

library(shiny)
library(shinymaterial)

ui <- material_page(title = "Material Design",
                    tags$br(),
                    font_color = "cyan darken-5",
                    nav_bar_color = "cyan darken-5",

                    material_parallax(
                      image_source = "https://github.com/sasakiK/FreeStockPhotos/blob/master/pexels-photo%20(1).jpg?raw=true"
                    ),
                    material_row(
                      tags$br(),
                      div(h2("Features"), align = "center")
                    ),

                    material_row( # ---------------
                      material_column(width = 4,
                                      material_button(
                                        input_id = "button",
                                        label = "BUTTON",
                                        depth = 5,
                                        color = "cyan darken-5"
                                      ), align = "center"
                                      ),
                      material_column(width = 4,
                                      material_switch(
                                        input_id = "switch",
                                        label = "switch",
                                        off_label = "Off",
                                        on_label = "On"
                                      ), align = "center"
                                      ),
                      material_column(width = 4,
                                      material_text_box(
                                        input_id = "text_box",
                                        label = "text box",
                                        color = "#ef5350"
                                      ), align = "center"
                                      )
                    ),
                    tags$br(),

                    material_row( # ---------------
                      material_column(width = 4,
                                      material_dropdown(
                                        input_id = "example_dropdown",
                                        label = "Drop down",
                                        choices = c("Chicken" = "c",
                                                    "Steak" = "s",
                                                    "Fish" = "f"),
                                        selected = c("c"),
                                        multiple = FALSE,
                                        color = "#ef5350"
                                      ), align = "center"
                                     ),
                      material_column(width = 4,
                                      material_input(
                                        type = "slider",
                                        input_id = "input_slider",
                                        label = "slider",
                                        min_value = 5,
                                        max_value = 15,
                                        initial_value = 10,
                                        color = "teal"
                                      ), align = "center"
                                     ),
                      material_column(width = 4,
                                      material_checkbox(
                                        input_id = "checkbox",
                                        label = "checkbox"
                                      ), align = "center"
                                     )
                    ),
                    tags$br(),

                    material_row( # ---------------
                      material_column(width = 4,
                                      material_number_box(
                                        input_id = "number_box",
                                        label = "number_box",
                                        min_value = 5,
                                        max_value = 15,
                                        initial_value = 10
                                      ), align = "center"
                                     ),
                      material_column(width = 4,
                                      material_input(
                                        type = "password_box",
                                        input_id = "input_password_box",
                                        label = "password_box"
                                      ), align = "center"
                                     ),
                      material_column(width = 4,
                                      material_date_picker(
                                        input_id = "date_picker",
                                        label = "Date picker"
                                      ), align = "center"
                                     )
                    ), tags$br(),

                    material_parallax(
                      image_source = "https://github.com/sasakiK/FreeStockPhotos/blob/master/pexels-photo-247528.jpeg?raw=true"
                    ),

                    material_row( tags$br(), tags$br(),
                      material_column(width = 12,
                        material_modal(
                          modal_id = "showcase_modal",
                          button_text = "Card",
                          button_icon = "open_in_browser",
                          title = " ",
                          div( material_card(
                                title = "Material Card",
                                img(src="https://github.com/sasakiK/FreeStockPhotos/blob/master/pexels-photo-306533.jpeg?raw=true", height = "100%", width = "100%")
                               ), align = "center")
                        ),
                        tags$br(),
                        div(helpText("@sasaki_K_sasaki"), align = "center", style = "color:grey;"), align = "center"
                      )
                    )
)

server <- function(input, output) {}

shinyApp(ui = ui, server = server)

こんなページが立ち上がると思います!

image.png
image.png
image.png

細かく紹介していきます!

Features

Parallax:視差効果(パララックス)

Webデザインにおけるパララックスはスクロールなどの動作に応じて、複数のレイヤー(層)にある要素を異なるスピードで動かすことで、「立体感や奥行きを演出」、「フェード・拡大縮小・回転などの視覚的エフェクト」を演出する手法を指します。
パララックス入門~スクロールで魅力あるWebサイトに~

ui
material_parallax( image_source = "url" ),

image_sourceに画像のpath・urlを渡すと、その画像を上手く使っていい感じにしてくれます。

material_button

image.png

ui
material_button(input_id = "button_id",
                label = "BUTTON",
                depth = 2,
                color = "cyan darken-5"),

depthは影のサイズを変えられる引数みたいです。

(左からdepth = 0,depth = 3,depth = 5)
image.pngimage.pngimage.png

 material_switch

image.png

ui
material_switch(input_id = "switch",
                label = "switch",
                off_label = "Off",
                on_label = "On")

material_text_box

image.png

ui
material_text_box(input_id = "text_box",
                  label = "text box",
                  color = "#ef5350")

material_dropdown

image.png

image.png

ui
material_dropdown(input_id = "dropdown",
                  label = "Drop down",
                  choices = c("Chicken" = "c",
                              "Steak" = "s",
                              "Fish" = "f"),
                  selected = c("c"),
                  multiple = FALSE,
                  color = "#ef5350")

input (slider)

image.png

ui
material_input(type = "slider",
               input_id = "input_slider",
               label = "slider",
               min_value = 5,
               max_value = 15,
               initial_value = 10,
               color = "teal")

material_checkbox

image.png
click ↓
image.png

ui
material_checkbox(input_id = "checkbox",
                  label = "checkbox")

number_box

image.png

ui

material_number_box(input_id = "number_box",
                    label = "number_box",
                    min_value = 5,
                    max_value = 15,
                    initial_value = 10)

input (password_box)

image.png

ui
material_input(type = "password_box",
               input_id = "input_password_box",
               label = "password_box")

date_picker

image.png
click ↓
image.png

ui

material_date_picker(input_id = "date_picker",
                     label = "Date picker")

modal window

モーダルウィンドウとは

Webデザインでのモーダルウィンドウとは、背景が黒や白くなって親ページの上に子ページが立ち上がるものを言います。主に、ログインフォームや登録フォームなどを、インラインで表示させるのに使われます。
ログインフォームなどで使う、かっこいいモーダルウィンドウのデザインまとめ

image.png
click ↓
image.png

ui
material_modal(modal_id = "showcase_modal",
               button_text = "Card",
               button_icon = "open_in_browser",
               title = " ",
         div(#今回はここにmaterial_cardを配置
                   ))

material_card

image.png

ui
material_card(title = "Material Card",
              img(src="画像url", height = "100%", width = "100%")
              )

material_cardも、depthで影のサイズを指定できます!

まとめ

今回はshinymaterialを使った簡単なアプリの例と、その特徴を挙げてみました。

まだまだshinyにはたくさんデザインのパターンがあるようで、ワクワクします!
是非、触れてみてください!

参考

shinymaterial
パララックス入門~スクロールで魅力あるWebサイトに~
ログインフォームなどで使う、かっこいいモーダルウィンドウのデザインまとめ
Free stock photos

12
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14