読者です 読者をやめる 読者になる 読者になる

すいません、Github PagesをR Markdown置き場にするのは超簡単でした。

前に、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:

  1. Create a shared options file (_output.yaml) to ensure common options across all pages within the site.
  2. Specify includes for common header and footer content.
  3. Specify that documents are not self_contained and define a common lib_dir for JavaScript and CSS dependencies.

とあります。

  1. サイト全体に適用する設定を書いた_output.yamlを置く
  2. ヘッダとフッタを指定するとウェブサイト感が出るよ
  3. self_contained:falseにして、lib_dirとして適当なディレクトリを指定する

という感じです。(R Markdown置き場にするだけなら2.は必須ではありません)

このR Markdownドキュメントページ自体がGithub Pagesでできているので、gh-pagesブランチのコードがとても参考になります。

github.com

↑のテンプレートのコードを少し整理して、テンプレート的なレポジトリをつくりました。これを具体例にしつつ詳しくみてみましょう。

github.com

実際の_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は、画像やJavascriptCSSなどのファイルを生成されるHTMLを埋め込むかどうかのオプションです。RPubsにアップするときは、これがtrueになっている必要があります。ウェブサイトにするときはその必要はないので、falseにします。

lib_dir

これは、自動で生成されるJavacriptやCSSのファイルを配置するディレクトリです。基本的にはrmarkdownパッケージが使うBootstrapくらいですが、htmlwidgetsパッケージが使うJavascriptCSSのファイルなんかもここに入ります。

includes

ここには、in_headerbefore_bodyafter_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から操作するときにビルドボタン(f:id:yutannihilation:20150704122648p:plain)を押すだけで済むことです。超お手軽です。

やってみる

Fork

上のテンプレート的なレポジトリをforkします。

RStudioのプロジェクトを作成

File > New Project > Version Control > Git を選んで、さきほどforkしたレポジトリをプロジェクトとしてローカルにもってきます。

f:id:yutannihilation:20150704123336p:plain:w300

R Markdownファイルを追加

適当なR Markdownファイルを作成して保存します。

f:id:yutannihilation:20150704123724p:plain:w300

ちなみに、_output.yamlでできる設定は限られているので、もう少し細かい設定を共有したい場合は、 別の.Rmdファイルをつくって(このレポジトリではchildren/chunk_options.Rmd)それをchildオプションで読むようにするといいと思います。 (childオプションについてはkohskeさんの記事で知りました。便利!)

 ```{r child="children/chunk_options.Rmd"}
 ```

Build

Build Allします。これでHTMLが生成されます。

f:id:yutannihilation:20150704122648p:plain

Commit & Push

Tools > Version Control > Commit を選んで、変更をcommitして、Githubにpushします。

アクセスする

以下のようなURLでアクセスできるはずです。

https://アカウント名.github.io/レポジトリ名/適当なファイル名.html

f:id:yutannihilation:20150704125841p:plain:w300

見つからなければ、以下のURLにファイルの一覧があるので探してみましょう。

https://アカウント名.github.io/レポジトリ名/

まとめ

R Markdown + Github Pagesは簡単でした。デマを振りまいてすみません。