RとRStudioのインストール

はじめに

ここでは,Dockerを使って,RとRStudioを利用する環境を構築する。R本体は,インターフェイスがコマンドラインなので,必ずしもユーザーフレンドリーではないが,統合環境であるRStudioを用いれば直感的な操作が可能となる。RStudioを介してRを操作することで,コードを編集して実行したり,結果を確認したりといった一連の作業をシームレスに行うことができるので,現在では多くの人がRStudioを使ってRを操作している。

RやRStudioは,Windows版やMac版をローカル環境にインストールして使うこともできるが,分析の再現性や環境構築の簡略化のためにDockerを用いるのがおすすめ。Linuxやコマンドラインに慣れていないと少し難しく感じるかもしれないが,Dockerを使えば,ホストマシンがWindowsであってもMacであっても,完全に同じ環境を作ることができる。

Dockerは,目的ごとに作成された「コンテナ」と呼ばれる仮想環境を動かす仕組み。雑にいえば,パソコン (ホストマシン)の中で,別の小さなパソコン (コンテナ)を動かすようなもの。仮想マシンと違って,コンテナはカーネルをホストOSと共有するため,より軽量で高速。Dockerfileというファイルに,ベースとなるOSイメージ,必要な設定やソフトをインストールするスクリプトを記述し,ビルドすることでコンテナを作成する。たとえば,ここで用いるRStudio Serverのコンテナは,UbuntuのベースイメージにR本体やRStudio Serverなどがインストールされており,ユーザーはブラウザでコンテナにアクセスしてRStudioを利用する。コンテナではUbuntu OSが動いているので,ホストマシンにかかわらずOSレベルで完全に同じ環境を再現することができる。

Rocker Projectでは,Rを利用するためのさまざまなバリエーションのコンテナが提供されており,セットアップのコストが最小限ですむ上に,OSに関係なく簡単に同じ環境を構築することができる。ここでは,このプロジェクトで提供されているrocker/rstudioコンテナをベースに,いくつかよく使うものを追加でインストールしたコンテナを作成して用いる。

完全に同じ環境を構築できるということは,分析結果の再現性を担保するという観点から決定的に重要。たとえば,共同研究者の間でまったく同じデータを共有して分析する場合でも,共同研究者はWindowsを使っていたり,Macを使っていたりするだろう。また,分析に利用するR本体やRのパッケージも,すべての共同研究者が同じバージョンをインストールしているとは限らない。それにより,同じデータを分析しているにもかかわらず環境によって分析結果が異なる可能性がある。また,パッケージをアップデートすることにより,以前に得られた分析結果を自分でも後から再現できないということも起こりうる。

同じDockerfileからコンテナを作成すれば,ホストマシンのOSにかかわらず同じ分析環境を構築することができる。DockerコンテナはDockerfileを書き換えてビルドをやり直さない限り内容が変更されることはなく,一度コンテナを終了すれば,次回起動するときには初期状態に戻る。また,ホストマシンの環境とは分離されているので,知らない間に環境が変化する (Windowsアップデートが適用されてこれまで動いていたソフトが動かなくなるなど)ということも起こりにくい。

Dockerを使わずにインストールする方法

Dockerを使わずにRとRStudioをインストールする方法については,高知工科大学の矢内先生のホームページに,非常に丁寧な解説スライドが公開されている。Ubuntu,Mac,Windows版があるので,これらを参考にインストールすると良い。ただし,うまくいかなくても矢内先生に直接質問のメールを送ったりはしないこと。

導入準備

作業はWindwosの場合,WSL2のUbuntuのコマンドラインで行う (ただし,WSL2のUbutuとDocker DesktopのインストールはPowerShellで行う)。Macの場合はターミナルで行う。

Docker Desktopの導入

WSLのインストール

Windowsの場合は,WSL (Windows Subsystem for Linux)が必要。WSLをインストールしていない場合は,PowerShellから次のコマンドでUbuntuをインストール可能。

wsl --install Ubuntu

インストール後,ユーザー名とパスワードを聞かれるので,入力すればUbuntuが利用可能になる。WindowsターミナルでUbuntuを起動することもできるし,PowerShellからwslコマンド,もしくはUbuntuコマンドで,Ubuntuのコマンドラインに入ることもできる。

Docker Desktopをインストール

WSLをインストールして一度ログインしたら,次にDocker Desktopをインストールする。PowerShellから以下のコマンドでインストール可能。

winget install Docker.DokerDesktop

Docker Desktopインストール後は,必ずPCを再起動する。

PC再起動後にDocker Desktopのウィンドウが立ち上がるので,Setting > Resouces > WSL integrationに移動し,Enable integration with additional distros: のUbuntuをオンにする。これで,Ubuntuのコマンドラインからdockerコマンドが使えるようになる。

以下では,とくに断らない限り,Windowsの場合の操作はUbuntuのコマンドラインで行う。

Docker Desktopをインストール

Homebrewを使って,Docker Desktopをインストールする。ターミナルから以下のコマンドを実行。

brew install DockerDesktop

インストール後は,必ずMacを再起動する。

試してみる

Docker Desktopをインストールすれば,Rocker Projectのコンテナをダウンロードして起動することができる。何も設定していない状態では,データの読込み保存などはできないし,一度コンテナを終了すると作業内容は消えてしまうが,RStudio Serverがどういうものかを知るために,一度試してみると良い。

Ubuntuのコマンドライン (Windows),もしくはターミナル (Mac)で,以下のコマンドを入力すれば,コンテナのダウンロードと起動が行われる。

docker run --rm -ti -e PASSWORD=yourpassword -p 8787:8787 rocker/rstudio

コンテナが起動したら,ブラウザで, http://localhost:8787を開けばRStudio Serverにアクセスできる。ユーザー名はrstudio,パスワードはyourpasswordでアクセスできる。

gitの設定

gitの設定をしていない場合は,以下のコマンドでユーザー名とメールアドレスを設定する。

git config --global user.name "****** *****"
git config --global user.email "*******@***.***"

githubのアカウント作成と公開鍵の登録

githubのアカウントはいずれ必要になるのでここで作成しておこう。だれでも作成できるし,コストもゼロ。アカデミック登録すれば,Proの機能も無料で使える。とくにAIがコードを補完してくれるgithub copilotを無料で利用できるので,アカデミック登録することをおすすめする。

アカウントができたら,秘密鍵と公開鍵のペアを作成して,公開鍵をgithubに登録する。

まず,次のコマンドで秘密鍵と公開鍵のペアを作成する。

ssh-keygen
  1. 鍵を作成する場所を聞かれるが,デフォルトの~/.sshで問題ないので,そのままEnter。
  2. パスフレーズを聞かれるので,設定する場合は入力してEnter。パスフレーズは設定しなくてもかまわない。設定しない場合は何も入力せずにEnter。

これで,~/.sshid_ed25519というファイル (秘密鍵)と,id_ed25519.pub (公開鍵)というファイルが作成される。このうち,公開鍵の方をgithubに登録すれば,秘密鍵を使ってgithubにアクセスすることができる。公開鍵から秘密鍵を復元することはほぼ不可能なので,公開鍵はだれかに知られても問題ない。秘密鍵の方は,ほかの場所にコピーしたりだれかに見られたりすることがないように注意する。

秘密鍵のパスフレーズは必要か?

秘密鍵にパスフレーズを設定すれば,万が一秘密鍵が漏洩しても,パスフレーズなしではアクセスすることができないため,セキュリティは向上する。ただし,秘密鍵にパスフレーズを設定すると,使用するたびにパスフレーズの入力が必要になり,かなりの負担になる。秘密鍵のファイルを~.ssh/から移動したりコピーしたりしなければ,個人的には秘密鍵にパスフレーズは必要ないと考えている。

githubに公開鍵を登録するには,githubのwebページ右上のアカウントのアイコンをクリックしてsettingsに入り,SSH and GPG keysを選ぶ。New SSH keyボタンを押せば,TitleとKeyを入力する画面になるので,Titleには適当に入力し,Keyには先ほど作成した公開鍵の内容をコピーして貼り付ける。コマンドラインで,id_ed25519.pubの内容を確認するときには,以下のコマンドを使う。

cat ~/.ssh/id_ed25519.pub

公開鍵が登録できたら,sshコマンドでgithubにアクセスできるか確認する。

ssh git@github.com

成功すれば,以下のようなメッセージが表示される。

PTY allocation request failed on channel 0
Hi tomokazu518! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

Dockerのコンテナ作成と起動

リポジトリのクローン

githubにアクセスできたら,githubからわたしが作成したDockerfileをダウンロードし,コンテナを作成する。まず,ホームフォルダに移動して,githubのレポジトリをクローン (ダウンロード)する。ホームフォルダはWSLでもMacでも同じで/home/ユーザー名。ホームフォルダは~/でもアクセスできる。また,コマンドラインからcdとだけ打つとホームフォルダに移動することができる。

cd
git clone git@github.com:tomokazu518/researchenv.git

ホームフォルダに,researchenvというフォルダができるので,そのフォルダに入る。

cd researchenv

フォルダの中身を確認するには,lsコマンドを使う。

ls -la

フォルダ内には5つのファイルがあることを確認しよう。 - Dockerfile - docker-compose.yml - init.sh - .gitignore - README.md

Dockerイメージのビルド

researchenvフォルダ内で次のコマンドを打てば,イメージをビルドできる。インターネットから大きなイメージファイルをダウンロードするので,初回のビルドにはかなり時間がかかる。通信環境の良いところで実行した方が良い。

docker build --rm -f "Dockerfile" -t researchenv:latest "."

コンテナの起動

イメージのビルドが終わったら,次のコマンドでコンテナを起動する。

docker compose up -d

コンテナが起動したら,ブラウザで, http://localhost:8787を開けばRStudio Serverにアクセスできる。ユーザー名とパスワードによる認証は無効にしてある。有効にしたい場合にはdocker-compose.ymlを書き換えれば良い。

chromeでアプリとして登録すれば,デスクトップ版のRStudioとまったく変わらない外観と操作性を実現できる。

Dockerコンテナにはユーザー名rstudioでログインされる。ホームフォルダは,/home/rstudio。ホームフォルダには,ホストマシンのresearchenvフォルダがマウントされる (コンテナの/home/rstudioフォルダは,ホストマシンのresearchenvフォルダの内容となる)。Dockerからファイルを編集したり保存したりしたときに,コンテナを終了しても内容が保持されるのはこのフォルダの中だけである。したがって,データやスクリプトファイルなどは,すべてこのフォルダ内に保存する。

rockerのホームページでは,ホームフォルダをまるごとマウントするのは,正常に機能しない可能性があるため非推奨とされている。ホームフォルダをまるごとマウントしない場合には,キャッシュなどの置き場としてdocker volumeを作成する必要がある。もちろん,そうした方が良いと思うが,これまでホームフォルダをまるごとマウントしてとくに問題が起きたことはないので,ここではホームフォルダをまるごとマウントする。

セットアップスクリプトの実行

researchenvフォルダのなかのinit.shを実行すれば,以下の設定が行われる。必要ない部分は削除して実行しても良い。

~/init.sh
  • .bashrc.bash_profileの設定 (PATHの設定)
  • HackGenフォントのインストール (RStudio Serverインターフェイス用)
  • Latex関係
    • tinytexのRパッケージと本体のインストール
    • 原ノ味フォントのインストール
    • TexCountのインストール
    • gnuplot-lua-tikz.styのインストール

RStudioの画面

RStudioを起動すると,細かい違いはあれ下のような画面が表示される。

Chromeでアプリとして登録したRStudio Serverの画面

デフォルトでは白背景の配色になっていると思うが,コードを書くときは黒や青背景の方が見やすいので変更している。見た目を変更するには,RStudioのメニューから[Tools]>[Global Options…]を選び,Appearanceで設定する。フォントについては,init.shでインストールしたHackgenフォントがおすすめ。長時間の作業を行う場合には,色やフォントによって作業効率や目の疲れ方がけっこう変わってくるので,いろいろ試して自分にあった設定にしよう。

RStudioの画面は,デフォルトで4ペイン (4分割)。最初はそのまま使っても良いと思うが,画面のレイアウトは比較的自由に変えることができるので,慣れてきたら自分が使いやすいように設定しよう。

各ペインにはタブが複数配置されている。まずは,よく使うものだけ説明する。

  • Sourceペイン: デフォルトでは左上。何もファイルが開かれていない状態では最小化されているので,画面左上の+マークで新しいスクリプト・ファイル(R Script)を作成してみよう。
  • Consoleペイン: デフォルトでは左下。Rにコマンドを入力して実行するCosoleタブ,OS (Docker上のUbuntu)のターミナルを操作するタブ,バックグラウンドの処理をモニタするタブ。
  • Environmentなどのペイン: デフォルトでは右上。Environmentタブには記憶されている変数やデータなどが表示される。Historyタブには実行したコマンドの履歴が表示され,クリックすれば再度実行できる。
  • Filesなどのペイン: デフォルトでは右下。Filesタブには現在のディレクトリにあるファイルのリストが表示され,ファイル名をクリックすればファイルを開くことができる。Plotsタブはグラフなどが表示される場所。

RStudioの設定

フォントや画面の色といった外観のほかに,データの保存についても設定しておこう。

  • [Tools] > [Global Options…] のWorkspaceの項目で,Restore .RData into workspace at startupのチェックを外す
  • その下のSave workspace to .RData on exitをNeverに設定する

Rに限らず,統計ソフトでデータを分析するときには,元データのファイルをさまざまな形で加工 (前処理)することになる。このとき,加工したデータを保存することは避けた方が良い。間違えて元データを上書きしてしまうリスクがあるし,ファイルが増えると管理が大変になる。また,加工済みのデータを保存して,それを読み込んで作業をすると,加工のプロセスに間違いがあったとしても気づきにくくなる。

データ加工のプロセスで実行したコードは必ず記録し,毎回元データを読み込んで,記録したデータ加工のコードを実行するようにしよう。

ヘルプの参照

Rのコマンド・ヘルプは?のあとにコマンド名を入力すれば参照できる。ヘルプは,Helpタブ(デフォルトでは右下のペイン)に表示される。知らないコマンドが出てきたらまずはヘルプを読む。英語が苦手でもDeepLで翻訳すればだいたい読める。

たとえば,table関数のヘルプを読みたければ,

?table