RPubsイケてないなー。ログイン画面暗号化されてないのやだなー。
と思ったときに、yihuiさんのこんな記事を見つけてしまいました。
Github Pagesとは
参考:GitHub Pages
Github Pagesとは、ウェブページを公開できるGithubの機能です。
このウェブページの作り方には2種類あります。表示するHTMLファイルをローカルでつくってGithubにアップするか、Markdownとかで書いてJekyllでHTMLを自動生成するか、です。
Jekyllとは
Jekyllは、Markdownとかプレーンテキストをウェブサイトやブログに変換するためのソフトです。
Wordpressは動的にページを生成しますが、Jekyllは静的なページ生成です。サーバーとのやりとりが必要な処理はできません。たとえばコメント欄はDisqusを埋め込んだりしないとつけられません。
静的ページ生成は似たようなのが色々できています。HTMLファイルを直接pushするつもりならこの辺のを使ってもいいかも。
- http://octopress.org/:title
- Hugo :: A fast and modern static website engine(Go製)
- Hakyll - Home(Haskell製)
Github PagesでJekyllを使うには
参考: GitHub Pagesについて(Jekyll側のドキュメント)、Using Jekyll with Pages - User Documentation(Github側のドキュメント)
やってることはこうです。
0) レポジトリの設定で「Automatic Page Generator」を有効にする
1) レポジトリにjekyll new
でJekyllに必要なファイルを配置する
2) ローカルでjekyll build
して生成されるページを確かめる
3) 問題なければpushする
4) 新しいファイルがGithub側でjekyll build
され、新しいページが生成される
で、yihuiさんの記事は、2)でjekyll build
の代わりにservr::jekyll()
というコマンドを使えば、markdownファイルからじゃなくてR Markdownファイルからサイトが生成できますよ、という感じのことが書いてます。
ちょっとやってみます。
Jekyllのインストール
Ruby使ったことなくてどのバージョンがいいの分かりませんが、2.2を入れてみます。
Ubuntu用にはbrightboxというところがPPAを用意しているようなので、それを使ってみます。
https://www.brightbox.com/docs/ruby/ubuntu/
sudo apt-get install software-properties-common sudo apt-add-repository ppa:brightbox/ruby-ng sudo apt-get update sudo apt-get install ruby2.2-dev
Jekyllをインストールします。手順は、Githubがgemを用意してくれてるのでそれを使います。:Using Jekyll with Pages - User Documentation
あと、よく分かりませんがNode.jsかtherubyracer
というのもインストールしておかないとエラーが出るらしいです。(色々やっているうちに動いてしまったのでよく分からない...)
参考:Rails - Could not find a JavaScript runtime? - Stack Overflow
sudo apt-get install nodejs sudo gem install bundler dd of=./Gemfile <<EOF source 'https://rubygems.org' gem 'github-pages' EOF # ここはsudoをつけない bundle install
これでたぶんインストールできたはずです。
レポジトリをつくる
参考:Creating Pages with the automatic generator - User Documentation
ここめんどくさいので省略。↑のドキュメントを読んでください。
私の場合は yutannihilation.github.io というレポジトリをつくりました。
Jekyllの設定
とりあえずgit clone
してきて、.gitignore
だけ残して他のファイルを全部消します。そのうえで、jekyll new
でJekyllのひな形をつくります。
cd /path/to/repo/ rm -r * jekyll new
たぶん以下のファイルができているはずです。
about.md _config.yml feed.xml index.html css/ _includes/ _layouts/ _posts/ _sass/
ブログ記事用のMarkdownファイルを置くのは_posts/
下です。about.md
はAboutページ用のMarkdownファイル、_config.yml
はJekyllの設定ファイルです。
これに加えて、R Markdownファイルを置くディレクトリをつくります。_source
がjekyll()
のデフォルトなのでそれにしておきます。
mkdir _source
設定ファイル_config.yml
を少し変更します。
ブログのタイトルとか説明とかは適当にうめましょう。
markdown
のエンジンがkramdown
になってますが、Github Flavored Markdown記法で書きたいのでredcarpet
にします。(後述するbuild.R
での設定はたぶんここと合わせる必要があります。)
markdown: redcarpet
servr::jekyll()
の準備
servr::jekyll()
は、R Markdownファイルから(いったんMarkdownファイルを生成してから)HTMLファイルを生成するコマンドです。
ただし、servr::jekyll()
だけでは動きません。R Markdownをビルドするためのスクリプトが必要です。build.R
という名前のRスクリプトかMakefile
か、いずれかをつくる必要があります。私は、yuhuiさんのを参考にしてこんなのを書きました。
※knitr::render_markdown()
を決め打ちで使ってますが、_config.yml
でkramdown
を選んでいる場合は、knitr::render_jekyll()
にする必要があります。
knitr::render_markdown() local({ # input/output filenames are passed as two additional arguments to Rscript a = commandArgs(TRUE) knitr::opts_chunk$set( fig.path = sprintf('figure/%d/', digest::digest(a[1])) ) knitr::opts_knit$set( base.url = '/', width = 70 ) knitr::knit(a[1], a[2], quiet = TRUE, encoding = 'UTF-8', envir = .GlobalEnv) })
(yutannihilation.github.io/build.R at master · yutannihilation/yutannihilation.github.io · GitHub)
これで準備完了です(たぶん)。いよいよページを生成してみます。
R Markdownファイル
JekyllではMarkdown ファイルの名前に決まりがあります。YYYY-MM-DD-foobar.md
という名前にしないといけません。R MarkdownファイルもYYYY-MM-DD-foobar.Rmd
という名前にします。これで、たとえば_source/2015-04-01-you-fool.Rmd
というファイルを置くと、_posts/2015-04-01-you-fool.md
と_site/XXX/2015/04/01/you-fool.html
(XXXは.Rmdの中で指定したカテゴリ)が生成されます。
あと、Front Matterにlayout: post
という指定がないと記事用のスタイルが当たりません。RStudioのテンプレにはこの指定は入ってないので忘れず書いてください。
--- title: "You Are Fool" author: "Hiroaki Yutani" date: "2015/4/1" output: html_document layout: post ---
で、いよいよページを生成します。
servr::jekyll(serve = FALSE, input = "_source", output = "_posts")
次のファイルができているはずです。
figure/unnamed-chunk-X-X.png
(画像があれば)_posts/2015-04-01-you-fool.md
_site/XXX/2015/04/01/you-fool.html
これを、レポジトリにpushします。
git push origin
これでGithub Pagesにページが生成されているはずです。
もうちょっといろいろ手をいれないと使えなそうですけど、とりあえずメモ。