$30 off During Our Annual Pro Sale. View Details »

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

Colin Fay
January 29, 2020

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

Talk at rstudio::conf(2020)

Colin Fay

January 29, 2020
Tweet

More Decks by Colin Fay

Other Decks in Technology

Transcript

  1. Engineering Production-Grade Shiny Apps
    with {golem}
    Colin Fay / Vincent Guyader - ThinkR
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 1 / 26

    View Slide

  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

    View Slide

  3. ThinkR
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 3 / 26

    View Slide

  4. Data Science engineering, focused on R.
     Training
     Software Engineering
     R in production
     Consulting
    ThinkR
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 4 / 26

    View Slide

  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

    View Slide

  6. What {shiny} devs claim: Reality:
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 6 / 26

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  12. Why {golem}?
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 10 / 26

    View Slide

  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

    View Slide

  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

    View Slide

  15. Why {golem}?
    Why using {golem}?
     Automation is gold
     Sharing is caring
     Collective intelligence
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 12 / 26

    View Slide

  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

    View Slide

  17. And the cool thing...
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 14 / 26

    View Slide

  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

    View Slide

  19. Wait...
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 16 / 26

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  24. What's next
    golem 0.2.0 — CRAN release candidate
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 21 / 26

    View Slide

  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

    View Slide

  26. What's next?
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 23 / 26

    View Slide

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

    View Slide

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

    View Slide

  29. Thx! Questions?
    Colin Fay & Vincent Guyader
    Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 26 / 26

    View Slide