📘

Rで分析結果をbookdownにまとめてGithub Pagesで公開する

2022/12/15に公開

概要

本記事ではbookdownパッケージでgitbook形式でまとめた内容をGithub Pagesで公開するまでを紹介します.

サンプルリポジトリ
https://github.com/masayukeeeee/template-bookdown-githubpages.github.io

GitHub Pages
https://masayukeeeee.github.io/template-bookdown-githubpages.github.io/

※画像を表示するために,docs/配下に.nojekyllを設置する必要があったので追記しました.

モチベーション

Rで実装したものを改めてスライドなりにまとめるよりも,あらかじめRmdでノートを書きつつ,gitbookにまとめて,Github Pagesに公開していけばいい感じのポートフォリオになると思いそのための環境を整えようというのが今回のモチベーションです.

環境

  • MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
    • 2.3 GHz クアッドコアIntel Core i7
  • macOS Monterey:12.6
  • R version 4.2.1 (2022-06-23)
  • RStudio 2022.07.2

前提

GitHub/R/RStudio/bookdownについてある程度知っていることを前提としています.
これらの利用方法などについては本記事では触れません.

手順

以降でbookdownでレンダリングしたHTMLをGitHub Pagesで公開するまでの一連の流れを紹介していきます.

リポジトリを作成する

GitHubで新しく公開するサイト用のリポジトリを作成しておきます.
GitHub Pagesのドキュメントにもある通り,このときリポジトリ名の末尾に.github.ioをつけておく必要があります.

gitbook projectを作成

RStudioで新規プロジェクトを作成する際にVersion Control > Git と進みRepository URLに先ほど作成したリポジトリのURLを入力してCreate Projectを押します.

分析をRmdにまとめる

ここではいつも通り(?)に分析結果をRmdにまとめていきます.
bookdownではindex.htmlを先頭に,続いてRmdファイル名の降順にHTMLファイルがレンダリングされていきます.
bookdownの基本的な使い方については公式ドキュメントを参照ください.

ここではルートディレクトリ直下ではなく,bookというフォルダ配下にRmdファイルをまとめました.

bookdownでbookを作成する

Rmdファイルが準備できたらbookdown::render_book()でレンダリングを実行します.
今回はbookフォルダ配下にRmdをまとめています.また,レンダリングしたアセットとはdocsフォルダ配下におきたいので以下のように引数をしておきます.

bookdown::render_book("book", output_dir="../docs")

GitHub Pagesにデプロイするさい,.nojekyllというファイルを配置していないと画像が表示できない場合があるので,以下のようにしてファイルを作成しておきます.

if(!file.exists('docs/.nojekyll')){
  file.create('docs/.nojekyll')
}

リポジトリにプッシュする

ここまでの変更をリポジトリにプッシュしておきます.
後にどのブランチをGithub Pagesの公開ブランチにするか設定しますが,ここではmainとします.

Github Pagesで設定して公開

公式ドキュメントはこちら

Settings > Pages で公開するサイトの静的ファイルをdocs配下と指定し,対象ブランチをmainとします.
※今回はカスタムドメインは設定しません.

サイトを確認する

上記が完了したらGitHubに表示されているURLにアクセスすると閲覧できるようになっているはずです.

終わりに

ここまで,分析結果を共有する方法として,R/RStudio, bookdown, GitHub Pagesを使った方法を紹介してきました.もちろん,一般に公開できる分析ばかりでは無いと思いますが,誰かの参考になれば幸いです.
※bookdownについてPosit Connectでアクセス権を限定しながらデプロイする方法もあります

Discussion