前に、R MarkdownをGithub Pagesに置くのはJekyllを使わねばならずつらい、みたいなエントリーを書きましたが、
完全に気のせいでした。
すみません。。
RTFM
R Markdownの公式ドキュメントを見ると、ちゃんと「Creating a Website」という解説がありました。
曰く、
It’s possible to create full websites with R Markdown using a combination of the options described above. To create a website you need to:
- Create a shared options file (
_output.yaml
) to ensure common options across all pages within the site.- Specify
includes
for common header and footer content.- Specify that documents are not
self_contained
and define a commonlib_dir
for JavaScript and CSS dependencies.
とあります。
- サイト全体に適用する設定を書いた
_output.yaml
を置く - ヘッダとフッタを指定するとウェブサイト感が出るよ
self_contained:
はfalse
にして、lib_dir
として適当なディレクトリを指定する
という感じです。(R Markdown置き場にするだけなら2.は必須ではありません)
このR Markdownドキュメントページ自体がGithub Pagesでできているので、gh-pages
ブランチのコードがとても参考になります。
↑のテンプレートのコードを少し整理して、テンプレート的なレポジトリをつくりました。これを具体例にしつつ詳しくみてみましょう。
実際の_output.yaml
R Markdownは、ファイルの先頭にfront-matterを書きますが、_output.yaml
という名前のファイルがあれば、その設定がディレクトリ全体に適用されます。
html_document: self_contained: false mathjax: null lib_dir: libs includes: in_header: include/in_header.html after_body: include/after_body.html
(https://github.com/yutannihilation/rmarkdown-website-template/blob/gh-pages/_output.yaml)
self_contained
self_contained
は、画像やJavascript、CSSなどのファイルを生成されるHTMLを埋め込むかどうかのオプションです。RPubsにアップするときは、これがtrue
になっている必要があります。ウェブサイトにするときはその必要はないので、false
にします。
lib_dir
これは、自動で生成されるJavacriptやCSSのファイルを配置するディレクトリです。基本的にはrmarkdownパッケージが使うBootstrapくらいですが、htmlwidgetsパッケージが使うJavascriptやCSSのファイルなんかもここに入ります。
includes
ここには、in_header
とbefore_body
、after_body
という項目で、ヘッダやフッタの位置に挿入するHTMLファイルを指定できます。
in_header
に指定するHTMLでは、CSSなどを指定します。このテンプレートでは、Fluidboxというプラグインを使うのでそのCSSと、ソースコードのフォントがSource Code ProになるようなCSSを当てています。
<link href='libs/fluidbox/css/fluidbox.css' rel='stylesheet' type='text/css'> <link href='http://fonts.googleapis.com/css?family=Source+Code+Pro' rel='stylesheet' type='text/css'> <link href='include/css/style.css' rel='stylesheet' type='text/css'>
before_body
はこのテンプレートでは使っていませんが、ナビゲーションバーなどを加えるときはここに書きます。
after_body
では、フッターを加えることができます。このテンプレートでは、FluidboxのJavascriptを追加しています。
<script type="text/javascript" src="libs/fluidbox/jquery.fluidbox.min.js"></script> <script type="text/javascript" src="include/js/enable-fluidbox.js"></script>
Makefile
で、このディレクトリに.Rmdファイルを置いて、ひとつひとつrmarkdown::render()
にかければいいんですが、やってられないのでMakefileを書きます。
HTML_FILES := $(patsubst %.Rmd, %.html ,$(wildcard *.Rmd)) \ $(patsubst %.md, %.html ,$(wildcard *.md)) CACHE_DIRS := $(patsubst %.Rmd, %_cache ,$(wildcard *.Rmd)) FIGURE_DIR := figures/ all: html index html: $(HTML_FILES) %.html: %.Rmd R --slave -e "set.seed(100);rmarkdown::render('$<', encoding = 'UTF-8')" %.html: %.md R --slave -e "set.seed(100);rmarkdown::render('$<', encoding = 'UTF-8')" .PHONY: clean index clean: $(RM) $(HTML_FILES) index.html $(RM) -r $(CACHE_DIRS) $(FIGURE_DIR) index: Rscript generateIndex.R
Makefileがあると何がいいかというと、RStudioから操作するときにビルドボタン()を押すだけで済むことです。超お手軽です。
やってみる
Fork
上のテンプレート的なレポジトリをforkします。
RStudioのプロジェクトを作成
File > New Project > Version Control > Git を選んで、さきほどforkしたレポジトリをプロジェクトとしてローカルにもってきます。
R Markdownファイルを追加
適当なR Markdownファイルを作成して保存します。
ちなみに、_output.yaml
でできる設定は限られているので、もう少し細かい設定を共有したい場合は、
別の.Rmdファイルをつくって(このレポジトリではchildren/chunk_options.Rmd
)それをchild
オプションで読むようにするといいと思います。
(child
オプションについてはkohskeさんの記事で知りました。便利!)
```{r child="children/chunk_options.Rmd"} ```
Build
Build Allします。これでHTMLが生成されます。
Commit & Push
Tools > Version Control > Commit を選んで、変更をcommitして、Githubにpushします。
アクセスする
以下のようなURLでアクセスできるはずです。
https://アカウント名.github.io/レポジトリ名/適当なファイル名.html
見つからなければ、以下のURLにファイルの一覧があるので探してみましょう。
https://アカウント名.github.io/レポジトリ名/
まとめ
R Markdown + Github Pagesは簡単でした。デマを振りまいてすみません。