6/ 文書とスライドの共有

Quartoを使った研究成果と分析プロセスの共有

宋財泫(関西大学)

1 共有方法

(通常の)HTMLファイルの限界

  • 我々が見ているWEBブラウザ上の画面は1つのHTMLファイルだけではない
    • HTML(骨格とテキスト)、CSS(見た目、書式)、画像・動画、JavaScript1など
  • HTMLだけを共有しても、我々が想定したものと違ったものが表示される。
    • HTML単体にすべてのものを埋め込む必要がある

StandaloneなHTML

HTMLのみ(CSS/JavaScript抜き)

HTML形式ファイルの共有方法

  • 文書、スライドを共有する方法
    • ファイルとして共有する(Harvard Dataverse、USB、メールの添付ファイルなど)
      • PDF化する
      • StandaloneなHTMLファイルにする
    • ネットに公開する
      • Quarto Pub、GitHub Pages、Posit Connect、Netifly、Hugging Face、…

2 ファイル

Standalone HTMLファイルの作成

YAMLヘッダーを修正html:、またはrevealjs:の下)

  • 文書、スライド共通
  • ファイルのサイズが非常に大きくなるので注意
    • embed-resources:画像(コードから生成された図を含む)、CSS、JavaScript1等をHTML内に埋め込む
    • self-contained-math:数式レンダリングエンジン(MathJax等)を埋め込む
      • ファイルサイズがかなり大きくなるため注意2
format:
  html:
    embed-resources: true
    self-contained-math: true

PDFファイルの作成

  • 文書
    • HTMLファイルをWebブラウザ(Firefox、Chrome、Edge、Safari、…)でPDF印刷
      • あまり推奨はできない
    • format: pdfにして最初からPDF文書として作成する(第4講参照)
  • スライド
    • HTMLファイルをWebブラウザでPDF印刷(第5講参照)
    • format: beamerにして最初からPDFスライドとして作成する(第5講参照)

3 Quarto Pub

Quarto Pub

  • Quartoで作成したHTMLファイル(文書、スライド、Website、Web-book)をネット上に公開できるサービス
    • 無料(容量[100MB]、およびトラフィック[10GB/月]の制限あり)
    • https://quartopub.com/(会員登録が必要)
  • R Markdown時代(?)のRPubsに類似したサービス(上位互換?)
    • ドキュメント単位だけでなく、プロジェクト単位(Website/Blog/Web-book)の公開も可能
    • GitHub Actionも使用可能
  • 詳細な使い方はhttps://quarto.org/docs/publishing/quarto-pub.htmlから

使い方(1)

共通:Terminalペインを使用(Consoleベインじゃない

  • 個別の文書、スライドの場合(本日はこのケースを紹介)
    • quarto publish quarto-pub ファイル名.qmdを入力
    • .qmdファイルが別のフォルダーに入っている場合、ファイルのパスを入力
  • Website/Web-bookの場合
    • quarto publish quarto-pubを入力
    • プロジェクトが位置したフォルダーから実行

使い方(2)

  1. Terminalペインで以下のコマンドを入力
quarto publish quarto-pub my_quarto.qmd
  1. 以下のメッセージが表示されたら「Y」を入力し、Enter(Return)キー
? Authorize (Y/n) › 
❯ In order to publish to Quarto Pub you need to authorize your account.
  Please be sure you are logged into the correct Quarto Pub account in your
  default web browser, then press Enter or 'Y' to authorize.
  1. WebブラウザーからQuarto Pubへログインし、ALLOWをクリック
    • Webブラウザーが開かず、Please authorize by opening this url: https://quartopub.com/authorize?id=xxxが表示されたら、URLをコピペしてアクセスする

使い方(3)

  1. 以下のようなメッセージが表示されたら、上下キーで操作する。
    • デフォルトは.qmdファイルのtitleのまま
    • 公開用URLにも使われるので、なるべく英数字のみの名前を付けよう
      • 上下キーでUse another name…を選択し、新しい名前をつける
? Document name:
❯ はじめてのQuarto
  Use another name...
  1. しばらく待ったら、公開完了
  2. 更新も同じ手順
    • 更新するか、新しいファイルとして公開するかを選択する必要はある

4 GitHub Pages

GitHub Pages

  • GitHubレポジトリ内の静的HTMLファイルを外部に公開するサービス
    • 無料
    • 容量(各レポジトリ1GB)、トラフィック(100GB/月)、ビルド(10回/1時間)などの制限付き
  • gitおよびGitHubの使い方は省略
    • これだけで1日講座が作れます…。
    • ここで紹介するファイルのアップロード方法は正攻法でなく、邪道に近いもの
      • GitHub CLI、GitHub Desktop、SourceTree、GitKraken
      • RStudioやVS Code(Positron)とGitHubの連携

GitHubレポジトリの作成

  1. 画面左の「Create Repository」、または「New」ボタンをクリック
  2. レポジトリ名(Repository name)を入力し、Add READMEをONにする。

ファイルのアップロード(1)

  1. Add file > Upload filesを選択

ファイルのアップロード(2)

  1. 必要なファイルをDrag & Dropし、下段の「Commit changes」

  • Standalone HTMLならファイルのみ
  • それ以外の場合、*_filesフォルダーや画像が格納されているフォルダー1等も入れる必要がある。

GitHub Pagesの設定

  1. Settingsメニュー(①)を選択し、Pagesタブ(②)へ
  2. BranchのNoneをmainに変更(③)

アップロードしたファイルの確認方法

5 共有時の注意事項

R、パッケージのバージョン情報

時々刻々変化し続けるR生態系

  • 膨大なパッケージとその更新の早さはR最大のメリット
  • 一方、パッケージの仕様変更により過去使えた関数が、今は使えないケースも
    • または、引数名や実引数のクラスが変わることも
  • \(\Rightarrow\) 過去のコードが今でも当時と100%同じように動作する保証はどこにもない

対処方法

  • セッション情報やパッケージのバージョンを明記(多くの場合、これで十分)
    • パッケージの仕様が劇的に変わることはそこまで多くはない
  • {renv}やdocker、mybinder.orgなどのパッケージ・サービスを利用

セッション情報

Rのバージョン、読み込み中パッケージの情報などが表示される

  • 文書やスライドの最後に入れておく
  • 特定のバージョンのパッケージはdevtools::install_version()でインストール
sessionInfo()
R version 4.5.2 (2025-10-31)
Platform: aarch64-apple-darwin20
Running under: macOS Tahoe 26.3

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Tokyo
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] lubridate_1.9.5 forcats_1.0.1   stringr_1.6.0   dplyr_1.2.0    
 [5] purrr_1.2.1     readr_2.1.6     tidyr_1.3.2     tibble_3.3.1   
 [9] ggplot2_4.0.2   tidyverse_2.0.0

loaded via a namespace (and not attached):
 [1] gtable_0.3.6       jsonlite_2.0.0     compiler_4.5.2     tidyselect_1.2.1  
 [5] systemfonts_1.3.1  scales_1.4.0       textshaping_1.0.4  yaml_2.3.12       
 [9] fastmap_1.2.0      R6_2.6.1           generics_0.1.4     knitr_1.51        
[13] pillar_1.11.1      RColorBrewer_1.1-3 tzdb_0.5.0         rlang_1.1.7       
[17] stringi_1.8.7      xfun_0.56          S7_0.2.1           otel_0.2.0        
[21] timechange_0.4.0   cli_3.6.5          withr_3.0.2        magrittr_2.0.4    
[25] digest_0.6.39      grid_4.5.2         rstudioapi_0.18.0  hms_1.1.4         
[29] lifecycle_1.0.5    vctrs_0.7.1        evaluate_1.0.5     glue_1.8.0        
[33] farver_2.1.2       ragg_1.5.0         pacman_0.5.1       rmarkdown_2.30    
[37] tools_4.5.2        pkgconfig_2.0.3    htmltools_0.5.9   

全パッケージのバージョン情報

情報量が多すぎるので非推奨

installed.packages()[, "Version"]
             abind             altdoc            archive                arm 
           "1.4-8"            "0.7.0"         "1.1.12.1"           "1.14-4" 
           askpass         assertthat          backports           BalanceR 
           "1.2.1"            "0.2.1"            "1.5.0"            "0.8.0" 
              base          base64enc         bayestestR               bigD 
           "4.5.2"            "0.1-6"           "0.17.0"            "0.3.1" 
               bit              bit64             bitops               blob 
           "4.6.0"          "4.6.0-1"            "1.0-9"            "1.3.0" 
          bookdown               boot               brew               brio 
            "0.46"           "1.3-32"           "1.0-10"            "1.1.5" 
             broom              bslib             cachem              callr 
          "1.0.12"           "0.10.0"            "1.1.0"            "3.7.6" 
               car            carData         cellranger          checkmate 
           "3.1-5"            "3.0-6"            "1.1.0"            "2.3.4" 
            cjpowR              class           classInt                cli 
           "1.0.2"           "7.3-23"           "0.4-11"            "3.6.5" 
             clipr            cluster               coda          codetools 
           "0.8.0"          "2.1.8.2"         "0.19-4.1"           "0.2-20" 
       collections     colorBlindness         colorspace       colourpicker 
          "0.3.11"            "0.1.9"            "2.1-2"            "1.3.0" 
        commonmark           compiler         conflicted            corpcor 
           "2.0.0"            "4.5.2"            "1.2.0"           "1.6.10" 
          corrplot               covr            cowplot              cpp11 
            "0.95"            "3.6.5"            "1.2.0"            "0.5.3" 
            crayon        credentials              cregg          crosstalk 
           "1.5.3"            "2.0.3"            "0.3.7"            "1.2.2" 
              curl            dagitty         data.table           datasets 
           "7.0.0"            "0.3-4"         "1.18.2.1"            "4.5.2" 
        datawizard                DBI             dbplyr              Deriv 
           "1.3.0"            "1.2.3"            "2.5.2"            "4.2.0" 
              desc           devtools            diffobj             digest 
           "1.4.3"            "2.4.6"            "0.3.6"           "0.6.39" 
              doBy            downlit              dplyr                 DT 
           "4.7.1"            "0.4.5"            "1.2.0"           "0.34.0" 
            dtplyr              e1071           ellipsis           estimatr 
           "1.3.3"           "1.7-17"            "0.3.2"            "1.0.6" 
          evaluate              fansi             farver        fastDummies 
           "1.0.5"            "1.0.7"            "2.1.2"            "1.7.5" 
           fastmap               fmsb        fontawesome            forcats 
           "1.2.0"            "0.7.6"            "0.5.3"            "1.0.1" 
          forecast            foreign            formatR            Formula 
           "9.0.1"           "0.8-91"             "1.14"            "1.2-5" 
          fracdiff                 fs        gamlss.dist             gargle 
           "1.5-3"            "1.6.6"            "6.1-1"            "1.6.1" 
          generics               gert         ggalluvial             ggbump 
           "0.1.4"            "2.3.1"           "0.12.5"        "0.1.99999" 
             ggdag            ggExtra          ggfittext            ggforce 
          "0.2.13"           "0.11.0"           "0.10.3"            "0.5.0" 
             ggh4x        gghighlight           ggmosaic            ggplot2 
           "0.3.1"            "0.5.0"            "0.4.0"            "4.0.2" 
            ggpubr             ggraph            ggrepel           ggridges 
           "0.6.2"            "2.2.2"            "0.9.6"            "0.5.7" 
             ggsci           ggsignif           ggstance           ggthemes 
           "4.2.0"            "0.6.4"            "0.3.7"            "5.2.0" 
                gh             ghibli           gitcreds               glue 
           "1.5.0"            "0.3.4"            "0.1.2"            "1.8.0" 
       googledrive    googlePolylines      googlesheets4           graphics 
           "2.1.2"            "0.8.7"            "1.1.2"            "4.5.2" 
      graphlayouts          grDevices               grid          gridExtra 
           "1.2.2"            "4.5.2"            "4.5.2"              "2.3" 
      gridGraphics           gridtext                 gt             gtable 
           "0.5-1"            "0.1.5"            "1.3.0"            "0.3.6" 
          gtExtras              haven              highr              Hmisc 
           "0.6.2"            "2.5.5"             "0.11"            "5.2-5" 
               hms          htmlTable          htmltools        htmlwidgets 
           "1.1.4"            "2.4.3"            "0.5.9"            "1.6.4" 
            httpuv               httr              httr2                ids 
          "1.6.16"            "1.4.8"            "1.2.2"            "1.0.1" 
            igraph                ini            insight            isoband 
           "2.2.2"            "0.3.1"            "1.4.6"            "0.3.0" 
              jpeg             jpmesh        jpndistrict          jquerylib 
          "0.1-11"            "2.1.0"       "0.3.9.9000"            "0.1.4" 
          jsonlite         juicyjuice         kableExtra         KernSmooth 
           "2.0.0"            "0.1.0"            "1.4.0"          "2.23-26" 
             knitr           labeling     languageserver              later 
            "1.51"            "0.4.3"           "0.3.16"            "1.4.6" 
         latex2exp            lattice           lazyeval            leaflet 
           "0.9.8"           "0.22-9"            "0.2.2"            "2.2.3" 
 leaflet.providers          lifecycle              lintr               list 
           "2.0.0"            "1.0.5"          "3.3.0-1"            "9.2.6" 
          litedown               lme4             lmtest             lobstr 
             "0.9"           "1.1-38"           "0.9-40"            "1.1.3" 
           lpSolve          lubridate             lwgeom              magic 
          "5.6.23"            "1.9.5"           "0.2-15"            "1.6-1" 
            magick           magrittr    marginaleffects           markdown 
           "2.9.0"            "2.0.4"           "0.32.0"              "2.0" 
              MASS             Matrix       MatrixModels        matrixStats 
          "7.3-65"            "1.7-4"            "0.5-4"            "1.5.0" 
         mediation            memoise            methods               mgcv 
           "4.5.1"            "2.0.1"            "4.5.2"            "1.9-4" 
    microbenchmark               mime             miniUI              minqa 
           "1.5.0"             "0.13"            "0.1.2"            "1.2.8" 
             minty            mitools             modelr       modelsummary 
           "0.0.6"              "2.4"           "0.1.11"            "2.6.0" 
           mvtnorm             naniar             NHANES               nlme 
           "1.3-3"            "1.1.0"            "2.1.0"          "3.1-168" 
            nloptr               nnet               norm           numDeriv 
           "2.2.1"           "7.3-20"         "1.0-11.1"       "2016.8-1.1" 
           openssl               otel             pacman          paletteer 
           "2.3.4"            "0.2.0"            "0.5.1"            "1.7.0" 
            pander           parallel         parameters          patchwork 
           "0.6.6"            "4.5.2"           "0.28.3"            "1.3.2" 
          pbkrtest        performance             pillar           pkgbuild 
           "0.5.5"           "0.16.0"           "1.11.1"            "1.4.8" 
         pkgconfig            pkgdown            pkgload             plotly 
           "2.0.3"            "2.2.0"            "1.5.0"           "4.12.0" 
              plyr                png           polyclip            polynom 
           "1.8.9"            "0.1-8"           "1.10-7"            "1.4-1" 
            praise             PRcalc        prettyunits          prismatic 
           "1.0.0"            "0.0.8"            "1.2.0"            "1.1.2" 
          processx       productplots            profvis           progress 
           "3.8.6"            "0.1.2"            "0.4.0"            "1.2.3" 
          promises              proxy               pryr                 ps 
           "1.5.0"           "0.4-29"            "0.1.6"            "1.9.1" 
             purrr                q2c             qrcode           quadprog 
           "1.2.1"            "0.2.1"            "0.3.0"            "1.5-8" 
         qualtRics           quantmod           quantreg             quarto 
           "3.2.2"           "0.4.28"              "6.1"            "1.5.1" 
           R.cache        R.methodsS3               R.oo            R.utils 
          "0.17.0"            "1.8.2"           "1.27.1"           "2.13.0" 
                R6               ragg           rappdirs        rapportools 
           "2.6.1"            "1.5.0"            "0.3.4"              "1.2" 
            raster          rbibutils          rcmdcheck       RColorBrewer 
          "3.6-32"            "2.4.1"            "1.4.0"            "1.1-3" 
              Rcpp      RcppArmadillo          RcppEigen             Rdpack 
           "1.1.1"         "15.2.3-1"        "0.3.4.0.2"            "2.6.6" 
         reactable             reactR            readODS              readr 
           "0.4.5"            "0.6.1"            "2.3.2"            "2.1.6" 
            readxl         reformulas            rematch           rematch2 
           "1.4.5"            "0.4.4"            "2.0.0"            "2.1.2" 
           remotes               renv             reprex           reshape2 
           "2.5.0"            "1.1.7"            "2.1.1"            "1.4.5" 
               rex             rgamer              rlang          rmarkdown 
           "1.2.1"           "0.0.28"            "1.1.7"             "2.30" 
     rnaturalearth  rnaturalearthdata rnaturalearthhires           roxygen2 
           "1.2.0"            "1.0.0"       "1.0.0.9000"            "7.3.3" 
             rpart          rprojroot            rstatix         rstudioapi 
          "4.1.24"            "2.1.1"            "0.7.3"           "0.18.0" 
         rversions              rvest                 s2                 S7 
           "3.0.0"            "1.0.5"            "1.1.9"            "0.2.1" 
          sandwich               sass             scales            selectr 
           "3.1-1"           "0.4.10"            "1.4.0"            "0.5-1" 
       sessioninfo                 sf             shades              shiny 
           "1.2.3"           "1.0-24"            "1.4.0"           "1.12.1" 
           shinyjs           showtext         showtextdb         sjlabelled 
           "2.1.1"            "0.9-7"              "3.0"            "1.2.0" 
       sourcetools                 sp            SparseM            spatial 
         "0.1.7-1"            "2.2-1"           "1.84-2"           "7.3-18" 
           splines              stats             stats4            stringi 
           "4.5.2"            "4.5.2"            "4.5.2"            "1.8.7" 
           stringr             styler       summarytools             survey 
           "1.6.0"           "1.11.0"            "1.1.5"            "4.4-8" 
          survival            svglite                sys           sysfonts 
           "3.8-6"            "2.2.2"            "3.4.3"            "0.8.9" 
       systemfonts             tables              tcltk              terra 
           "1.3.1"           "0.9.33"            "4.5.2"           "1.8-93" 
          testthat        textshaping             tibble           tidyfast 
           "3.3.2"            "1.0.4"            "3.3.1"            "0.4.0" 
         tidygraph              tidyr         tidyselect          tidyverse 
           "1.3.1"            "1.3.2"            "1.2.1"            "2.0.0" 
        timechange           timeDate          tinytable            tinytex 
           "0.4.0"         "4052.112"           "0.16.0"             "0.58" 
             tools         treemapify            tseries                TTR 
           "4.5.2"            "2.6.0"          "0.10-59"           "0.24.4" 
             tuple             tweenr               tzdb              units 
          "0.4-02"            "2.0.3"            "0.5.0"            "1.0-0" 
            UpSetR               urca         urlchecker            usethis 
           "1.4.0"            "1.3-4"            "1.0.1"            "3.2.1" 
              utf8              utils               uuid                 V8 
           "1.2.6"            "4.5.2"            "1.2-2"            "8.0.1" 
             vctrs               VGAM            viridis        viridisLite 
           "0.7.1"           "1.1-14"            "0.6.5"            "0.4.3" 
            visdat              vroom              waldo            whisker 
           "0.6.0"            "1.7.0"            "0.6.2"            "0.4.1" 
             withr                 wk               xfun               xml2 
           "3.0.2"            "0.9.5"             "0.56"            "1.5.2" 
      xmlparsedata              xopen             xtable                xts 
           "1.0.5"            "1.0.1"            "1.8-4"           "0.14.1" 
              yaml                zip                zoo 
          "2.3.12"            "2.3.3"           "1.8-15" 

{renv}パッケージ

「ある時点の」RおよびRパッケージを記録し、呼び戻すパッケージ

  1. renv::init():「今の」Rバージョン、パッケージ情報を保存
    • Rのバージョン、パッケージのバージョンの情報はテキストファイルとしてrenv.lockというファイルに保存される
    • renv/libraryフォルダーにはrenv::init()を打った時点のライブラリ(のシンボリックリンク)がすべて保存される
  2. renv::snapshot():環境の更新
  3. renv::resotre():環境の呼び戻し
    • RStudioを使用中ならプロジェクトを開く際、自動的に作動する(=RStudioプロジェクト機能と相性が良い)1

mybinder.org

再現・再生用のデータセットとコード(またはQuartoファイル)、+ \(\alpha\)を格納したGitHubレポジトリをベースに分析環境を生成するサービス

  • GitHubレポジトリの中身
    • apt.txtenvironment.ymlpostBuild、分析用のコード、データなど
      • apt.txt内に必要なライブラリを記述
      • environment.yml内にRおよびパッケージの情報を記述
    • ただし、すべてのパッケージ情報を記述することは非効率的
  • サンプルレポジトリ:https://github.com/JaehyunSong/quarto_binder
  • 詳細は公式ホームページを参照

{renv} \(\times\) mybinder.org

詳細はhttps://quarto.org/docs/projects/binder.htmlを参照

  1. RStudioで新規プロジェクト(Quarto Project)を作成
    • Use renv with this projectも選択
  2. 公開の前に{renv}で(renv::snapshot())環境を保存
  3. Terminalペインでquarto user binder
  4. 任意のGithubレポジトリを作成し、プロジェクトフォルダーの中身をそのままアップロード
    • rnevフォルダー内のlibraryフォルダーはアップロードしなくても良い
  5. https://mybinder.org/v2/gh/GitHubアカウント名/レポジトリ名/HEAD?urlpath=rstudio
    • 最初の立ち上げはかなり時間がかかるため、他人に共有する前に自分で立ち上げておくこと

{renv} \(\times\) mybinder.org:注意点

  1. プロジェクトごとgitで管理することを推奨(gitの解説は省略)
  2. GitHubアップロード(または、プッシュ)時、.Rprofileも忘れないこと
    • .Rprofileは隠しファイル
  3. apt.txtは自分で書く必要がある
    • apt.txtに書かれたライブラリはサーバー立ち上げ(Dockerイメージ生成)時、一緒にインストールされる
    • mybinder.orgではサーバーが立ち上がるとsudoコマンドが使えない
    • 一旦、動作を確認し、必要なライブラリがあればそれをapt.txtに書いておく

結論

  • 2026年2月現在、2つを組み合わせて使うメリットは少ない
    • {renv}は分析当時の環境を保存する自分用のパッケージ
    • ただし、Binderの仕組みを理解しているのであれば、使える
    • すくなくともapt.txtを自動的に作成してくれれば…