Slide 1

Slide 1 text

Engineering Production-Grade Shiny Apps with {golem} 2020-04-27 - BRISTOLR Colin Fay - ThinkR Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 1 / 27

Slide 2

Slide 2 text

$ whoami Colin FAY Data Scientist & R-Hacker at ThinkR, a french company focused on Data Science & R. Hyperactive open source developer. http://thinkr.fr http://rtask.thinkr.fr http://twitter.com/_colinfay http://github.com/colinfay Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 2 / 27

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Building Shiny Apps Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 5 / 27

Slide 6

Slide 6 text

Building Proof of Concept Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 6 / 27

Slide 7

Slide 7 text

But the truth is... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 7 / 27

Slide 8

Slide 8 text

But the truth is... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 7 / 27

Slide 9

Slide 9 text

But the truth is... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 7 / 27

Slide 10

Slide 10 text

Which leads to... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 8 / 27

Slide 11

Slide 11 text

Why? Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 9 / 27

Slide 12

Slide 12 text

Here comes {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 10 / 27

Slide 13

Slide 13 text

Here comes {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 10 / 27

Slide 14

Slide 14 text

Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 11 / 27

Slide 15

Slide 15 text

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 12 / 27

Slide 16

Slide 16 text

Why using {golem}?  Automate the boring stuff repetitive tasks  Work with reliable tools  Gain time developing  Simplify deployment  Standardize team work About {golem} at ThinkR:  First built out of internal need, today used on a daily basis (I'm the #1 {golem} user)  We needed reliable and consistent tooling for deploying to our clients' environments  Build collective intelligence and share good practices globally  Promote R & Shiny in production Why {golem}? Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 13 / 27

Slide 17

Slide 17 text

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 14 / 27

Slide 18

Slide 18 text

 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 15 / 27

Slide 19

Slide 19 text

And the cool thing... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 16 / 27

Slide 20

Slide 20 text

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 └── man └── run_app.Rd Standard things DESCRIPTION, NAMESPACE, man/ R/ app_server & app_ui: Shiny UI and Server run_app: launches your app dev/ 0._.*.R: scripted worflows golem-config.yml: {config} files run_dev.R: relaunches your app while developing Understanding {golem} Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 17 / 27

Slide 21

Slide 21 text

Wait... Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 18 / 27

Slide 22

Slide 22 text

Build golem::add_module() golem::add_css_file() golem::use_external_js_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 19 / 27

Slide 23

Slide 23 text

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 20 / 27

Slide 24

Slide 24 text

... #' @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 21 / 27

Slide 25

Slide 25 text

And now Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 22 / 27

Slide 26

Slide 26 text

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 23 / 27

Slide 27

Slide 27 text

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 24 / 27

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Online colin@thinkr.fr http://twitter.com/_colinfay http://twitter.com/thinkr_fr https://github.com/ColinFay https://thinkr.fr/ https://rtask.thinkr.fr/ https://colinfay.me/ Related projects engineering-shiny.org {golem} {shinipsum} {fakir} {shinysnippets} Thx! Questions? Colin Fay Colin FAY (@_ColinFay) - https://rtask.thinkr.fr 27 / 27