古いバージョンのR(2系)の環境を作る

仕事の都合でRの2.15を使いたい状況になったのだが、 古いバージョンのRの環境を作るのが想像以上に大変だったので、環境構築の仕方を残しておく。

自分のMac上に環境を作ろうとしたのだが、Apple周りのエラーが大量に出現しだいぶ厳しそうだったので諦めた。 ※ちなみにWindowsだと比較的古いRでも環境を作りやすいとのこと。

私の作った環境は CentOS(6) + R(2.15.2) + R studio server

最終的にはDocker上にその環境をつくってlocalhostにlocal port forwardingして、開発をすることにした。

※R 3.0.0以上ならrockerっていうRのimageがあって即RStudio Server建てられるよ!!

RをCentOSにInstallする

Rのsourceはhttps://cran.r-project.org/src/base/のR-0 ~ R-3から入手できる。ビルド済みのものが動けばそれが一番簡単なのだけど、 難しそうだったのでsourceからビルドする。 今回は2.15.2を入れる想定でかいていく

# Rのビルドに必要なライブラリのinstall
yum install -y gcc-gfortran libgfortran gcc-c++ make cmake perl readline-devel 
yum install -y xorg-x11-server-devel libX11-devel libXt-devel

# RのsourceをDonwload
# ほかのバージョンを入れたいときは上記リンクからurlを探す
cd
curl -O https://cran.r-project.org/src/base/R-2/R-2.15.2.tar.gz
tar -zxvf R-2.15.2.tar.gz
cd R-2.15.2

./configure --prefix=/opt/R/2.15.2 --enable-R-shlib
make -j 4 # -j 4は並列してmakeしたいだけなのでなくても
make install 
ln -sF /opt/R /usr/local/lib64/R
ln -sF /usr/local/lib64/R/2.15.2/bin/R /usr/local/bin

これで RコマンドがうごけばOK

RStudio Serverをインストールする

Rだけ入れても多分大抵の人には使うのが難しいのでRStudio Serverをたてる。サーバをたてると、Web上からRstudioを使えるようになる。

https://www.rstudio.com/products/rstudio/download-server/

ここにあるようRStudio Serverでは3.0.0以上しか動かないので、 以下から欲しいバージョンのRStudio Serverを確認する。

https://support.rstudio.com/hc/en-us/articles/206569407-Older-Versions-of-RStudio

2.11.1以上なら、以下のver0.99で問題なく動く。

# Install Rstudio server
cd
curl -O https://download2.rstudio.org/rstudio-server-rhel-0.99.903-x86_64.rpm
yum install -y rstudio-server-rhel-0.99.903-x86_64.rpm

rpm -ihv http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm

# 日本語対応
yum -y groupinstall "Japanese Support"
yum install -y initscripts 

# Start Rstudio server
rstudio-server start

Dockerで環境を作る場合

docker-composeファイルを作ったので使いたい方は以下からDL https://github.com/cocodrips/enviroment-old-version-r

Dockerfileの{password}の部分のみ書き換える

docker-compose build
docker-compose up

でサーバーが立ち上がるので、 http://localhost:8787 へアクセスするとログイン画面になる。

  • Username: rstudio
  • Password: 自分で設定した{password}

でログインすればRstudioが使える!やったー!

Dockerfileとdocker-compose

Githubに上がってるけどここにもはっておく

Dockerfile:

FROM centos
RUN yum install -y gcc-gfortran libgfortran gcc-c++ make cmake perl readline-devel 
RUN yum install -y xorg-x11-server-devel libX11-devel libXt-devel

# Install 2.15.2
# Other version: https://cran.r-project.org/src/base/R-2/
RUN cd; curl -O https://cran.r-project.org/src/base/R-2/R-2.15.2.tar.gz
RUN cd; tar -zxvf R-2.15.2.tar.gz
RUN cd ~/R-2.15.2; ./configure --prefix=/opt/R/2.15.2 --enable-R-shlib
RUN cd ~/R-2.15.2; make -j 4 # -j 4は並列してmakeしたいだけなのでなくても
RUN cd ~/R-2.15.2; make install

# [2.11.0 or higher] Use this script.
# [2.11.0 or lower] check document: https://support.rstudio.com/hc/en-us/articles/200552306-Getting-Started
RUN cd; curl -O https://download2.rstudio.org/rstudio-server-rhel-0.99.903-x86_64.rpm
RUN cd; yum install -y rstudio-server-rhel-0.99.903-x86_64.rpm 
RUN rpm -ihv http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum -y groupinstall "Japanese Support"
RUN yum install -y initscripts 
RUN ln -sF /opt/R /usr/local/lib64/R
RUN ln -sF /usr/local/lib64/R/2.15.2/bin/R /usr/local/bin
RUN adduser rstudio
RUN echo "rstudio:{password}" | chpasswd

WORKDIR /r
ADD . /r/

docker-compose.yml

version: '3'
services:
  server:
    build: . 
    working_dir: /r
    ports:
      - 8787:8787
    volumes:
      - .:/r
    command: bash -c "rstudio-server start && /bin/bash"
    tty: true

さいごに

多分殆どのRユーザにとって古いRを使いたいことってほとんどないと思うから、誰も幸せになれない記事を書いてしまった・・・ Docker初心者なので冗長だったり無駄なこと書いてる可能性が高い(´・ω・`)

JupyterNotebookでの技術書執筆環境を作った

本や記事を書く際、markdownやreSTで書くなど色々な書き方があると思う。 実際に何度かちょっとした記事を書いてみて、プログラムのコードを使った説明が多いような文章だと markdownやreSTにコピペするのがめんどくさいなぁというのがあった。

なのでJupyterNotebookで執筆できる環境を作ってみた。

GitHub - cocodrips/ipynb-writing

notebookディレクトリ直下に追加したnotebookに対して、以下の3つを行うしくみが実装してある。

  • 仮想環境でpdfに変換
  • 内容をhtmlにして自動デプロイ
  • 文章/文字の校正を行う

機能の紹介

dockerを使ってnotebookをpdf / htmlに変換する

htmlやmarkdownはともかく日本語で書かれたnotebookをpdfにexportするのはそこそこめんどくさい。 以下のコマンドでtexの環境をdocker上に作ってビルドしてくれる。

docker build -t ipybook . && docker run -v `pwd`/public:/book/public: -it ipybook make

出力サンプル:

以前本のレビューする際にdropboxのpdfレビューがとても便利だったので、定期的にビルドしたpdfをdropboxで共有するのがおすすめ。 dropbox上では以下のような感じでレビューが行える。

f:id:cocodrips:20171226232539p:plain

他の形式でもレビューできたらいいのだけど、残念ながら他のフォーマットには対応していない。

textlintで文字校正を行う

npmのtextlintを使って、技術用語の表記ゆれや読点のつけすぎ等を指摘する。
以下のコマンドでlintが走る。

docker build -t ipybook . && docker run -v `pwd`/public:/book/public: -it ipybook make textlint

いくつか技術書執筆に便利なルールを追加してあり、例えば ipynb-writing/chapter01-sample.ipynb のnotebookをlintにかけると、以下のように間違いを指摘される。

f:id:cocodrips:20171226233009p:plain

実際に書いていると間違った日本語や用語の表記をしてしまうことが多いのでtextlintは文章書くのが苦手な人には必須。

pdf/htmlの自動ビルド

このリポジトリをforkしてgitlabにpushすると、masterブランチにpushした際にCIが走ってhtml版・pdf版が自動デプロイされて以下のurlから確認とダウンロードができる。

http://{グループ名}.gitlab.io/{リポジトリ名}/

サンプル: http://cocodrips.gitlab.io/ipynb-writing/

GitLabは毎月2000分までPrivateリポジトリでもCIが無料で使えてすごい(゚д゚)太っ腹。

さいごに

今回はnotebookでの執筆を想定して環境を作ってみた。 latexをビルドする環境を作るのはめんどくさいので仮想環境 or CIでできるととても楽だなぁと思った。

皆様のおすすめの執筆環境・レビュー方法があればぜひ教えてください :)