[rstudio::conf(2020)] Production-grade Shiny Apps with golem

Db8efd836c9a09b71e3d8e1c60d6ea84?s=47 Colin Fay
January 29, 2020

[rstudio::conf(2020)] Production-grade Shiny Apps with golem

Talk at rstudio::conf(2020)

Db8efd836c9a09b71e3d8e1c60d6ea84?s=128

Colin Fay

January 29, 2020
Tweet

Transcript

  1. Engineering Production-Grade Shiny Apps with {golem} Colin Fay / Vincent

    Guyader - ThinkR Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 1 / 26
  2. Colin FAY Data Scientist & R-Hacker at ThinkR. Vincent Guyader

    ThinkR Founder & CTO, Data Scientist, R expert. Find us on the web http://thinkr.fr http://rtask.thinkr.fr http://github.com/thinkr-open http://twitter.com/thinkr_fr $ whoami Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 2 / 26
  3. ThinkR Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 3 / 26

  4. Data Science engineering, focused on R.  Training  Software

    Engineering  R in production  Consulting ThinkR Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 4 / 26
  5. What's a "prod-ready" software?  Has meta-data  Is divided

    in functions  Is tested  Lists requirements  Is documented Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 5 / 26
  6. What {shiny} devs claim: Reality: Colin FAY (@_ColinFay) - https://rtask.thinkr.fr

    6 / 26
  7. Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 7 / 26

  8. Here comes {golem} {golem} is an R package that contains

    a framework for building production-ready Shiny Applications. Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 8 / 26
  9. Q & A What do you like the most? Colin

    FAY (@_ColinFay) - https://rtask.thinkr.fr 9 / 26
  10. Q & A What do you like the most? A:

    Work on building data manipulation, visualisation, and models Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 9 / 26
  11. Q & A What do you like the most? A:

    Work on building data manipulation, visualisation, and models B: Spend 15 minutes on checking that you've correctly copied and pasted a Shiny Module skeleton Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 9 / 26
  12. Why {golem}? Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 10 / 26

  13. Why {golem}?  If you have to copy and paste

    a piece of code more than twice, write a function Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 11 / 26
  14. Why {golem}?  If you have to copy and paste

    a piece of code more than twice, write a function  If you have to copy and paste an infrastructure more than twice, write a framework Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 11 / 26
  15. Why {golem}? Why using {golem}?  Automation is gold 

    Sharing is caring  Collective intelligence Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 12 / 26
  16.  Has meta-data  Is divided in functions  Is

    tested  Lists requirements  Is documented DESCRIPTION R/ tests/ NAMESPACE man/ & vignettes {golem} central philosophy Shiny App As a Package What's a "prod-ready" Shiny App? Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 13 / 26
  17. And the cool thing... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 14

    / 26
  18. golex ├── 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 │ │ └── favicon.ico │ └── golem-config.yml Standard things DESCRIPTION, NAMESPACE, man/ R/ app_server & app_ui: Shiny UI and Server run_app: launches your app dev/ 0._.*.R: scripted worflows run_dev.R: relaunches your app while developing Understanding {golem} Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 15 / 26
  19. Wait... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 16 / 26

  20. Build golem::add_module() golem::add_css_file() golem::add_js_handler() golem::use_favicon() Deploy golem::add_rstudioconnect_file() golem::add_shinyappsio_file() golem::add_shinyserver_file() golem::add_dockerfile()

    Automation with {golem} Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 17 / 26
  21. Template files (and where to put them) golem::add_module( name =

    "my_module.R" ) ✓ File created at R/mod_my_module.R Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 18 / 26
  22. Template files (and where to put them) ... #' @importFrom

    shiny NS tagList mod_my_module_ui <- function(id){ ns <- NS(id) tagList( ) } #' @noRd mod_my_module_server <- function(input, output, session){ ns <- session$ns } ## To be copied in the UI # mod_my_module_ui("my_module_ui_1") ## To be copied in the server # callModule(mod_my_module_server, "my_module_ui_1") Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 19 / 26
  23. What's next All WIP and ideas are currently listed at

    https://github.com/ThinkR-open/golem/issues Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 20 / 26
  24. What's next golem 0.2.0 — CRAN release candidate Colin FAY

    (@_ColinFay) - https://rtask.thinkr.fr 21 / 26
  25. What's next? Spread the word (and share stickers): tweets, blog

    posts, talk to your friends and family about {golem} Open issues when you encounter a bug Give feedback about things you might find weird Open issue if you have idea / feature requests Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 22 / 26
  26. What's next? Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 23 / 26

  27. golemverse.org Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 24 / 26

  28. connect.thinkr.fr/engineering-shiny/ Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 25 / 26

  29. Thx! Questions? Colin Fay & Vincent Guyader Colin FAY (@_ColinFay)

    - https://rtask.thinkr.fr 26 / 26