今回は、かなり技術的な内容です。Dockerを利用しながら、RStudioのRマークダウンファイルによる解析環境を構築します。ポイントは、日本語フォントが入っていてもきちんとPDF出力がなされるところです。
Dockerって?
Docker社が提供しているサービスです。 PC内に仮想のコンテナをつくって、コンテナ内でいろいろな情報処理を行います。いわゆる仮想PCと違うのは、必要なサービスだけを高速かつ少ない容量で仮想化しているところです。Docker自体の説明は、詳しいページがいくらでも検索できるのでそちらをごらんください。
使用環境
今回はMac OSXに Docker Toolboxをインストールした環境で実施しています。 Docker Toolboxは更新が頻繁にあるようで、しかも更新によって動かなかった機能が動くようになっているので、できるだけ最新を使ったほうが良さそうです。
- Mac OSX 10.10.5(Yosemite)
- Docker Toolbox 1.10.1a
Dockerfileで環境構築
Dockerfileやベースとなるイメージもすでにきちんと動いているものを利用します。この点もDockerのメリットの1つですね。
RStudioが動くイメージの一つにrocker/rstudioがあります。このイメージでは、ベースのRとRstudioがdebianというLinux OSの中で動きます。
https://hub.docker.com/r/rocker/rstudio/
さらにrocker/rstudioから派生したrocker/hadleyverseというイメージファイルがあります。このイメージのDockerfileを今回利用します。
このDockerfileをdocker-machineの中でビルドすれば、当然ちゃんと動きます。しかし、実際にやってみたところ、日本語フォントがうまく読めないようです。そこでDockerfileを修正しながら、日本語フォントでもきちんと動作することを目指します。
Hadleyverseというイメージとの差分
出来上がったDockerfile
Dockerfileは"Dockerfile"という名前で保存する必要がありそうです。
FROM rocker/rstudio MAINTAINER "jnobuyuki" RUN apt-get update RUN apt-get install -y --no-install-recommends \ ibus-mozc \ manpages-ja RUN apt-get install -y --no-install-recommends imagemagick \ lmodern \ texlive \ texlive-lang-cjk \ texlive-luatex \ texlive-xetex \ xdvik-ja \ dvipsk-ja \ gv \ texlive-fonts-recommended \ texlive-fonts-extra \ && apt-get clean \ && cd /usr/share/texlive/texmf-dist \ && wget http://download.forest.impress.co.jp/pub/library/i/ipafont/10483/IPAfont00303.zip \ && unzip IPAfont00303.zip \ && echo "Map zi4.map" >> /usr/share/texlive/texmf-dist/web2c/updmap.cfg \ && mktexlsr \ && updmap-sys ## Install some external dependencies. RUN apt-get update \ && apt-get install -y --no-install-recommends -t unstable \ default-jdk \ default-jre \ gdal-bin \ icedtea-netx \ libatlas-base-dev \ libcairo2-dev \ libgsl0-dev \ libgdal-dev \ libgeos-dev \ libgeos-c1v5 \ librdf0-dev \ libssl-dev \ libmysqlclient-dev \ libpq-dev \ libsqlite3-dev \ libv8-dev \ libxcb1-dev \ libxdmcp-dev \ libxml2-dev \ libxslt1-dev \ libxt-dev \ netcdf-bin \ qpdf \ r-cran-rgl \ ssh \ && R CMD javareconf \ && apt-get clean \ && rm -rf /var/lib/apt/lists/ \ && rm -rf /tmp/downloaded_packages/ /tmp/*.rds ## Install the Hadleyverse packages (and some close friends). RUN install2.r --error \ broom \ DiagrammeR \ devtools \ dplyr \ ggplot2 \ ggthemes \ haven \ httr \ knitr \ lubridate \ packrat \ pryr \ purrr \ reshape2 \ rmarkdown \ rmdformats \ rticles \ rvest \ readr \ readxl \ testthat \ tibble \ tidyr \ tufte \ shiny \ stringr \ xml2 ## Manually install (useful packages from) the SUGGESTS list of the above packages. ## (because --deps TRUE can fail when packages are added/removed from CRAN) RUN install2.r --error \ -r "https://cran.rstudio.com" \ -r "http://www.bioconductor.org/packages/release/bioc" \ base64enc \ BiocInstaller \ codetools \ covr \ data.table \ downloader \ gridExtra \ gtable \ hexbin \ Hmisc \ htmlwidgets \ jpeg \ Lahman \ lattice \ lintr \ MASS \ PKI \ png \ microbenchmark \ mgcv \ mapproj \ maps \ maptools \ mgcv \ nlme \ nycflights13 \ quantreg \ Rcpp \ rJava \ roxygen2 \ RMySQL \ RPostgreSQL \ RSQLite \ testit \ V8 \ XML \ && r -e 'source("https://raw.githubusercontent.com/MangoTheCat/remotes/master/install-github.R")$value("mangothecat/remotes")' \ && r -e 'remotes::install_github("wesm/feather/R")' \ && rm -rf /tmp/downloaded_packages/ /tmp/*.rds RUN echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen RUN locale-gen ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8
Dockerでの手順
1. Docker-machineを起動する
2. cd で Dockerfileがあるディレクトリに移動する
3. 以下のようにDockerfileからイメージをビルドする
docker build -t <レポジトリ名/イメージ名> .
4. 以下のようにイメージを起動する。-p オプションはホスト側とコンテナ側のポート番号のマッピングです。両方8787でオッケーです。
docker run -d -p 8787:8787 <レポジトリ名/イメージ名>
5. webブラウザを起動し、Docker-machineのIP:8787 でRstudioのログインが出てきます。デフォルトはID,PASSともにrstudioです。
以上でRSutdioが起動すると思います。
RStudioでの手順
1. New FileでRmarkdown形式のファイルを作る
2. Global optionのSweave項目でviewerをデフォルトのRstudio viewerからSystem Viewerに変更する *1。
3. preamble(ヘッダのような部分)を以下のようにします。タブスペースの個数がポイントです。
--- title: "Document Title" author: "autho" date: "****/**/**" output: pdf_document: latex_engine: xelatex monofont: IPAPGothic mainfont: IPAPGothic ---
このDockerイメージはIPAフォントをダウンロード・インストールしているので、これを使います。latex_engineはlualatexかxelatexが使えます。
5. knit PDFのボタンを押すか、ショートカット(Command + Shit + k)を実行します。
考察:Dockerを使うメリットとデメリット
手順は以上ですが、 Dockerを利用して解析することのメリットとデメリットを考えておきましょう。
メリット
- 突然母艦 PCが亡くなっても、1時間あれば解析環境が完全復活する。
- 共同研究者に同一解析環境を丸ごと渡せる。
- 授業で学生に開発環境をデータ込みで配布できる。
- 古いバージョンのアプリケーションによる解析環境を安全に保存できる。
*1:RStudio viewerは日本語フォントが文字化けする気がします