yaml: filtersã®èšå®
---
filters:
- webr
---shinylive(Schloerke et al. 2026)ã¯ã47ç« ã§èª¬æããShiny(Chang et al. 2024)ããµãŒããŒäžã§ã¯ãªããWebãã©ãŠã¶äžã§å®è¡ããæ¹æ³ãæäŸããŠããããã±ãŒãžã§ãã
shinyliveã§ã®Shinyã®å®è¡ã«ã¯ãWebãã©ãŠã¶äžã§Rãå®è¡ããç°å¢ã§ãããWebRã®æè¡ã䜿ãããŠããŸãããã®WebRã«ã¯WebAssemblyãšããããŒã«ãçšããããŠããŸãã
ãã®ããŒãžã§ã¯ãWebRã»shinyliveã®èª¬æãšshinyliveã®äœ¿çšäŸã«ã€ããŠç°¡åã«ç޹ä»ããŠãããŸãã
47ç« ã§å°ã説æããéããShinyãåããããã«ã¯ãµãŒãã§Rã®æŒç®ãè¡ãå¿ èŠããããŸãããããããµãŒããçšãããšãéãããããŸãããããããã®äººãäžåºŠã«ã¢ããªã«ã¢ã¯ã»ã¹ãããšåããªããªã£ãŠããŸããŸããããã§ãShinyã®å 人ãã¡ã¯ShinyããµãŒãã䜿ããïŒãµãŒãã¬ã¹ã§ïŒãä»ã®äººãšå ±æã§ããæ¹æ³ã詊ããŠããŸããã
ãã®ãããªè©Šã¿ã®äžã€ããRãšãã©ãŠã¶ãShinyã¢ããªãšäžç·ã«ãŠãŒã¶ãŒã«æž¡ããŠããŸããæ¹æ³ã§ããRãšããŠR Portableãšããããã¡ã€ã«ãµã€ãºãå°ããã§ã¹ãã¬ãŒãžã«å ¥ããŠäœ¿ãããã®ãçšããGoogle Chrome Portableãšãããã©ãŠã¶ãä»ããŠããŠãŒã¶ãŒã«Shinyãæž¡ããŠäœ¿ã£ãŠãããããã§ããè±èªã§ã¯R-bloggersã®èšäºã«ãæ¥æ¬èªã§ã¯ãã¡ãã®ã¯ãŠãªããã°ã®èšäºã«è©³çŽ°ãªæ¹æ³ãèšèŒãããŠããŸãã
ããããR Portableã¯R 4.2.0ããã¢ããããŒããããŠãããããã¡ã€ã«ãµã€ãºãããªã倧ããã§ãããã¡ã€ã«ã®åãæž¡ãã倧å€ã§ãã¢ããªã®ãŠãŒã¶ãŒã«ãRã®ç¥èãå°ãå¿ èŠã§ããç§ãäœåºŠããã®æ¹æ³ã§Shinyã¢ããªã®åãæž¡ãã詊ããŠã¿ãŸãããããŸãšãã«ã¢ããªã䜿ã£ãŠããã£ãããšã¯ãããŸããã
shinyliveã¯ãã®ãããªè€éãªæé ãèžãããšãªããéçãªWebããŒãžã§æ¯èŒçç°¡åã«Shinyãåããããšãã§ããããŒã«ã§ãã
以äžã§ã¯shinyliveã®åºç€ãšãªã£ãŠãããWebRã«ã€ããŠç°¡åã«ç޹ä»ããŸãã
WebRã¯ãã©ãŠã¶å ã§Rãå®è¡ã§ããç°å¢ãäœãããã®ããŒã«ã§ãããã©ãŠã¶ã§ã®æŒç®ãã€ãŸããŠãŒã¶ãŒã®PCã®æŒç®èœåãçšããŠRãå®è¡ã§ããããããµãŒããŒã§æŒç®ããå¿ èŠããªããªããŸãããããã£ãŠãéçãªãŠã§ããµã€ãã§ãRãå®è¡ã§ããããã«ãªããŸãã
Javascriptã§è¡ãããæ®éã®ãã©ãŠã¶å ã§ã®æŒç®ã§ã¯ãJavascriptã®ã³ãŒãè§£æã«æéããããããããããRããã©ãŠã¶å ã§å®è¡ããã®ã¯çŸå®çã§ã¯ãããŸããããã®ã³ãŒãè§£æã«ãããæŒç®èœåãæžãããããWebRã§ã¯WebAssemblyãšããæè¡ãçšããŠããŸãã
WebAssemblyã¯ã¢ã»ã³ãã©ãšåŒã°ããããã°ã©ãã³ã°èšèªã«è¿ã仿§ãæã€æè¡ã§ãCãC++ã®ããã°ã©ã ã16鲿°ã®æ°å€ã§è¡šçŸãããã®ã§ãã
ã¢ã»ã³ãã©ã¯ãã®æãã¬ãã²ãŒã ïŒFCãSFCã®æä»£ïŒãªã©ã«ããçšããããŠããèšèªã§ããã¢ã»ã³ãã©ã«ã€ããŠåŠã³ããæ¹ã¯AsmWalkerãšãã®è§£èª¬æãè§Šã£ãŠã¿ããšãããšæããŸããWebAssemblyã¯ã¢ã»ã³ãã©ãšã¯ä»æ§ãç°ãªããŸãããã¢ã»ã³ãã©ãšåæ§ã«æ©æ¢°èªã«è¿ããWebãã©ãŠã¶ã«ããæŒç®ã«ãããã³ã¹ããå°ããããããšãã§ããæè¡ã§ãã
WebRã®åãæ±ãã«ã¯JavascriptãNode.jsã«ã€ããŠã®ç¥èãå¿
èŠã§ãããã»ã©ç°¡åã«å©çšããããšã¯ã§ããŸãããããããWebRãQuartoã§çšããQuarto Extensionã§ããquarto-webrã¯Javascriptã®ç¥èããªãRãŠãŒã¶ãŒã§ãç°¡åã«å©çšããããšãã§ããŸãã
quarto-webrã®äœ¿ãæ¹ã¯ãã¡ãã®å©ç𿹿³ã«é¢ããããŒãžãæ¥æ¬èªã®ãã¡ãã®ããŒãžïŒquarto-webrã¯ãããïŒã«èšèŒãããŠããŸããããã®ããŒãžã§ãç°¡åã«è§£èª¬ããããšæããŸãã
ãŸãã¯quarto-webrã®Quarto Extensionãã€ã³ã¹ããŒã«ããŸããã¿ãŒããã«ãã以äžã®quarto addã³ãã³ããçšããŠquarto-webrãã€ã³ã¹ããŒã«ããŸãã
quarto add coatless/quarto-webrãã®ã³ãã³ããå®è¡ãããšãçŸåšã®ã¯ãŒãã³ã°ãã£ã¬ã¯ããªã«_extensions/coatless/webrãšãããã£ã¬ã¯ããªãäœæããããã¡ã€ã«ãããŠã³ããŒããããŸãã
Quarto Extensionã¯ãã©ã€ãã©ãªã®ããã«Rã®å®è¡æã«åžžã«å©çšã§ãããã®ã§ã¯ãªãããããžã§ã¯ãããšã«ããŠã³ããŒãããå©çšããŸãã
次ã«ã.qmdãã¡ã€ã«ã®yamlã«ä»¥äžã®ããã«filtersãèšå®ããŸãã
yaml: filtersã®èšå®
---
filters:
- webr
---Extensionãã€ã³ã¹ããŒã«ããyamlãèšå®ããã°æºåå®äºã§ããExtensionãããŠã³ããŒããããã©ã«ãå
ã«.qmdãã¡ã€ã«ãäœæãã以äžã®ãããªwebr-rã®ãã£ã³ã¯å
ã«Rã®ã³ãŒããæžããŠãããŸãã
webrã®ãã£ã³ã¯
```{webr-r}
rnorm(3)
```äžèšã®ãã£ã³ã¯ãå«ã.qmdãRenderãããšã以äžã®ããã«Rã®æžããããŠã€ã³ããŠã衚瀺ãããŸãã
ãã®ãŠã€ã³ããŠã®ãRun Codeããã¯ãªãã¯ãããšãä¹±æ°ãæŒç®ãããã®ãåããããšæããŸãããŸããrnorm(3)ã®ã³ãŒãã¯ç·šéããããšãã§ããŸããäŸãã°3ã5ã«æžãæãããšãä¹±æ°ã5ã€ã«å¢ããŸãã
ãŸããå³ã衚瀺ããããšãã§ããŸããå³ã®å³äžã®ãDownload Imageããã¯ãªãã¯ãããšå³ãããŠã³ããŒãããããšãã§ããŸãã
quarto-webrã®ãã£ã³ã¯ã§ã¯ãéåžžã®Quartoã®ãã£ã³ã¯ãªãã·ã§ã³ã§ã¯ãªãã以äžã®è¡šã«ç€ºãquarto-webrçšã®ãã£ã³ã¯ãªãã·ã§ã³ãçšããŸãã
| ãªãã·ã§ã³å | åãããå€ | æå³ |
|---|---|---|
| context | âinteractiveâ, âoutputâ, âsetupâ | ãã£ã³ã¯ã®Rã³ãŒãã®å®è¡æ¹æ³ |
| autorun | è«çå | ãã£ã³ã¯ãèªåçã«å®è¡ããã |
| read-only | è«çå | ã³ãŒãã®ç·šéãèš±å¯ããã |
| editor-max-height | æ°å€ | ãšãã£ã¿ã®æå€§ã®é«ã |
| editor-quick-suggestions | è«çå | ã³ãŒãã®å ¥åè£å®ã®æç¡ |
| editor-font-scale | æ°å€ | ãšãã£ã¿ã®ãã©ã³ããµã€ãº |
| editor-word-wrap | è«çå | ã³ãŒããèªåçã«æ¹è¡ããã |
| label | æåå | chunkã®ã©ãã« |
| classes | æåå | chunkã«ã¯ã©ã¹ãèšå®ãã |
| result | âmarkupâ, âasisâ, âhideâ | åºåã®è¡šç€ºæ¹æ³ |
| output | è«çå | åºåã衚瀺ããã |
| warning | è«çå | warningã衚瀺ããã |
| message | è«çå | messageã衚瀺ããã |
| fig-cap | æåå | å³ã®ãã£ãã·ã§ã³ |
| dpi | æ°å€ | å³ã®è§£å床 |
| fig-width | æ°å€ | å³ã®å¹ ïŒã€ã³ãïŒ |
| fig-height | æ°å€ | å³ã®é«ãïŒã€ã³ãïŒ |
| out-width | æ°å€ã®æååïŒâ700pxâãªã©ïŒ | å³ã®åºåã®å¹ |
| out-height | æ°å€ã®æååïŒâ700pxâãªã©ïŒ | å³ã®åºåã®é«ã |
åæ§ã«ãquarto-webrã«çšããå°çšã®YAMLãèšå®ãããŠããŸããquarto-webrã®YAMLã¯ä»¥äžã®ããã«ãwebr:ã®YAMLã®äžã«èšå®ããŸãã
äŸãã°ã以äžã®show-startup-messageãtrueã«èšå®ãããšããŒãžã®ããããŒã®äžã«ãWEBR STATUSãã衚瀺ãããŸãã衚瀺ããããªãå Žåã«ã¯falseãæå®ããŸãã
yaml: filtersã®èšå®
---
webr:
show-startup-message: false
---以äžã«quarto-webrã®YAMLã®äžèЧã瀺ããŸãã
| YAMLã§ã®èšå®é ç® | èšå®é ç®ã®ããŒã¿å | èšå®é ç®ã®æå³ |
|---|---|---|
| show-startup-message | è«çå | WEBR STATUSã®è¡šç€ºã®æç¡ |
| packages | ããã±ãŒãžåïŒ["ggplot2"]ãªã©ïŒ |
ã€ã³ã¹ããŒã«ããããã±ãŒãž |
| home-dir | ãã£ã¬ã¯ããªã®æåå | èµ·åæã®ã¯ãŒãã³ã°ãã£ã¬ã¯ã㪠|
| cell-options | äžäœã®YAML | chunkãªãã·ã§ã³ãYAMLã§èšå®ãã |
| repos | ã¬ããžããªã®URL | ããã±ãŒãžãããŠã³ããŒãããã¬ããžããªãæå® |
| autoload-packages | è«çå | èªåçã«ããã±ãŒãžãããŒããããã©ãã |
quarto-webrã§ãéåžžã®Rãšåæ§ã«ããã±ãŒãžãã€ã³ã¹ããŒã«ããŠå©çšããããšãã§ããŸãããã ããWebRãquarto-webrã§ã¯ãããã±ãŒãžã¯CRANããããŠã³ããŒããããããã§ã¯ãªããWebRã®å°çšã®ã¬ããžããªããããŠã³ããŒãã»ã€ã³ã¹ããŒã«ããããšã«ãªããŸãã
quarto-webrã§ããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåã«ã¯ãwebr::install颿°ãçšããŸãã
webr::installã§ããã±ãŒãžãã€ã³ã¹ããŒã«ãã
webr::install("ggplot2")shinyliveã¯ãããŸã§ã«èª¬æããWebRã®æè¡ãçšããŠãShinyãéçãªãµãŒããŒã«ãããã€ããShinyã®æŒç®éšåããŠã§ããã©ãŠã¶ãã€ãŸããŠãŒã¶ãŒã®PCã«æããŠããŸãããšãã§ããããã«ããããã®ããã±ãŒãžã§ããéçãªãµãŒããŒãçšãããããç¡æã»å®äŸ¡ã§Shinyã¢ããªããããã€ããããšãã§ããŸããShiny Serverã®è€éãªèšå®ãDockerã®ç¥èãäžèŠã§ãã®ã§ãä»ãŸã§ããããã£ãšèº«è¿ã«Shinyã¢ããªãäœæããä»ã®äººã«äœ¿ã£ãŠãããããšãã§ããŸãã
以äžã§ã¯ãshinyliveãçšããShinyã¢ããªã®äœæãšãããã€ãç°¡åãªShinyã¢ããªã®äŸã«ã€ããŠç޹ä»ããŸãã
ãŸãã¯é©åœãªShinyã¢ããªãäœæããŸãã以äžã®äŸã§ã¯ãe-statã®ããŒã¿ãçšããŠäœæããShinyã¢ããªã®ãµã³ãã«ãçšããŠãshinyliveã詊ããŠã¿ãŸããShinyã¢ããªã®ãµã³ãã«ã¯ãã®githubã®ã¬ããžããªã«ä¿åããŠããŸãã
次ã«shinyliveãã€ã³ã¹ããŒã«ããããŒãããŸãã
shinyliveããã±ãŒãžã®ããŒã
pacman::p_load(shinylive)shinyliveãã€ã³ã¹ããŒã«åºæ¥ãããshinyliveã®ã¢ã»ããïŒassetsïŒãããŠã³ããŒãããŸãããã®ã¢ã»ããã¯shinyliveãWebRãçšããŠæ§æããéã«çšãããããã¡ã€ã«ã®ããšã§ããã¢ã»ããã®ããŠã³ããŒãã¯assets_download颿°ã§è¡ãããšãã§ããŸãã
ã¢ã»ãããããŠã³ããŒããã
shinylive::assets_download()ã¢ã»ããã®ä¿åå Žæã¯assets_info颿°ã§èª¿ã¹ãããšãã§ããŸããã¢ã»ããã®ä¿åå Žæãassets_download颿°ã®diråŒæ°ã§æå®ããããšãã§ããŸãã
ã¢ã»ããã®æ å ±ã調ã¹ã
shinylive::assets_info()ã¢ã»ãããæºåã§ããããWebRãçšããShinyã¢ããªãäœæããŸãããã®éçšã¯éåžžã«ç°¡åã§ãexport颿°ãå®è¡ããã ãã§ããexport颿°ã¯ç¬¬äžåŒæ°ã«Shinyã¢ããªãä¿åãããã©ã«ãïŒãã£ã¬ã¯ããªïŒåãã第äºåŒæ°ã«åºåãä¿åãããã©ã«ãåãæå®ããŸãã
以äžã®äŸã§ã¯ã"e_stat_shiny"ãã©ã«ãã«ä¿åããShinyã¢ããªã倿ããŠ"site"ãã©ã«ãã«ä¿åããŠããŸãããã¡ãã®githubã®ã¬ããžããªã確èªããŠããã ããã°ãã©ã®ãããªãã©ã«ãã®æ§æãšããã®ãã€ã¡ãŒãžããŠããã ããããšæããŸãã
ãŸããShinyã¢ããªã§å©çšããŠããããã±ãŒãžã¯èªåçã«WebRã®ã¬ããžããªããããŠã³ããŒããããŸããããŠã³ããŒãããå Žåã«ã¯ãããŒã«ã«ãšWebRã®ã¬ããžããªäžã®ããã±ãŒãžã®ããŒãžã§ã³ãæ¯èŒããããŒãžã§ã³ãç°ãªãå Žåã«ã¯ãã®æ å ±ã衚瀺ããŠãããŸãã
shinylive::export颿°ã§Shinyã¢ããªã倿ãã
shinylive::export("e_stat_shiny", "site")倿ããShinyã¢ããªã¯ãµãŒããŒç°å¢ã§ããå®è¡ã§ããŸãããhttpuv::runStaticServer颿°ã§å€æåŸã®ãã©ã«ãïŒäžã®äŸã§ã¯"site/"ïŒãæå®ããŠããŒã«ã«ãµãŒããŒã§å®è¡ããã°ãShinyã¢ããªãèµ·åããŸãã
ããŒã«ã«ãµãŒããŒã§ã¢ããªãå®è¡ãã
httpuv::runStaticServer("site/")ã¢ã»ãããåé€ããå Žåã«ã¯assets_remove颿°ãå®è¡ããŸãã
ã¢ã»ãããåé€ãã
shinylive::assets_remove()exportã§äœæãããã©ã«ãã43ç« ã«ç€ºããæ¹æ³ã§Github PagesãQuarto Pubã«ãããã€ããã°ãWebäžã§shinyliveãçšããShinyã¢ããªãå®è¡ããããšãã§ããŸãã
ãã ããshinyliveã§Shinyã¢ããªãå®è¡ãããšãæ¥æ¬èªãæååãããŸããããã¯ãshinyliveã®ã¢ã»ããã«å«ãŸãããã©ã³ãã«ã¯æ¥æ¬èªãã©ã³ããç¡ãããã§ãã
æååãããå Žåã«ã¯ãããªãŒã®ãã©ã³ããããŠã³ããŒããã以äžã®ããã«Shinyã¢ããªå
ã§showtextããã±ãŒãž(Qiu 2026)ãçšããŠæ¥æ¬èªãã©ã³ããé©çšãããšããã§ãããã
æ¥æ¬èªãã©ã³ãã衚瀺ã§ããããã«ããïŒshowtext
pacman::p_load(showtext)
# ãã©ã³ããžã®ãã¹ãæå®
font.paths("./")
# NotoSansJPãGoogle fontsããããŠã³ããŒã
font.add("noto", "NotoSansJP-VariableFont_wght.ttf")
# showtextã§ã®ãã©ã³ãèšå®ãèªåçã«é©çšãã
showtext_auto()showtextã§ããŸããããªãå Žåã«ã¯ãã¢ã»ããã®ãã©ã«ãå
ã®fontsïŒshinylive/Cache/shinylive-0.XX.X/shinylive/pyodide/fontsïŒã«æ¥æ¬èªãã©ã³ããè¶³ããŠã¿ããšãããããããŸããã
äžèšã®æ¹æ³ã§shinyliveãçšããShinyã¢ããªããããã€ããã®ã以äžã®ãªã³ã¯ã§ãã
https://sb8001at-oss.github.io/shinylive_test/
ãªã³ã¯ããã¢ã¯ã»ã¹ããŠããã ããšãããããšæããŸããã倧ããã¢ããªã§ã¯ãªãã®ã«å®è¡ãæ¿éã§ããäžèšã®exportã§äœæãããã©ã«ãã®ãã¡ã€ã«ãµã€ãºã¯300MBãè¶ããŠããããã®ãã¡ã€ã«ãããŠã³ããŒãããªããšShinyã¢ããªãç«ã¡äžãããªãããã§ãã
æ£çŽãåã«ããŒã¿ã衚瀺ãããã ããªã41ç« ã§èª¬æããObservableã®æ¹ã軜ããŠãããšæããŸãïŒãã¡ãã«ã¢ã¯ã»ã¹ããŠã¿ãŠäžããïŒããã ããObservableã¯ããŒã¿è¡šç€ºã®ããã®ããŒã«ã§ãããè€éãªçµ±èšè§£æãè¡ãããšã¯ã§ããŸãããä»åŸã®shinyliveã®éçºç¶æ³ã«ãããããããŸããããçŸç¶ã§ã¯ããŒã¿ã®è¡šç€ºã ããªãObservableãGLMãGLMMãæç³»åãçåæéè§£æã®ãããªçµ±èšè§£æãå«ãããªãshinyliveã䜿ããšãã£ãã䜿ãåããéèŠãšãªãããã§ãã