RStudio のオプション設定を dotfiles で管理する

概要

  • dotfiles とは, ファイル名が “.” (ドット) から始まるシステム設定ファイルの総称です.
  • システム開発者の間では dotfiles を Git リポジトリで管理し, 環境構築に利用するプラクティスがあります.
  • RStudio ではバージョン 1.3 以降で設定情報がファイルで管理されるようになったので, dotfiles のプラクティスが適用できるようになりました.
  • これは特に Docker で RStudio Server 環境を起動するときに便利です.

dotfiles とは

dotfiles とは, ファイル名が “.” (ドット) から始まるシステム設定ファイルの総称です. 典型的な例としては

  • .bashrc で Bash の環境変数 PATH やコマンドのエイリアスを設定する
  • .gitconfig で Git のユーザー名, メールアドレス, エイリアスを設定する

などがあります.

そして, これらの設定ファイルを Git で管理することによってバックアップを取ったり, 複数のマシンで設定を同期したりするプラクティスがあります.

詳しくは以下のページが参考になります:

RStudio の設定ファイル

RStudio ではバージョン 1.3 から設定情報がファイルで管理されるようになりました:

RStudio 1.3 Preview: Configuration and Settings | RStudio Blog

通常この設定ファイルは Windows なら AppData/Roaming/RStudio に, Mac や Linux なら ~/.config/rstudio に保存されます.

例えば Mac でデスクトップ版 RStudio を起動して “Tools” > “Global Options” > “Appearance” からエディタのフォントサイズやカラーテーマを変更すると, JSON ファイル ~/.config/rstudio/rstudio-pref.json の内容が

{
    "font_size_points": 14,
    "editor_theme": "Pastel On Dark"
}

のように書き換わります.

逆に, このファイルを書き換えることで RStudio のオプション設定を変更することも可能です.

これを利用すれば, dotfiles のプラクティスを RStudio に適用して設定のバックアップを取ったり, 複数のマシンで同期したりすることが可能になります.

Docker との相性

最近はデータ分析の再現性を重視する流れから Docker コンテナで起動した RStudio Server を利用する取り組みが増えています.
特に Rocker プロジェクト によって提供されているコンテナイメージ rocker/rstudio やその派生版が広く利用されています.
そして dotfiles のプラクティスは Docker による RStudio Server 環境で特に役立ちます.

Docker コンテナは基本的に Immutable (不変) なものなので, 普通に使用すると RStudio のオプション設定を変更してもコンテナを停止・再起動するたびに状態がリセットされてしまいます.
そのため, オプション設定を引き継ぐには何らかの方法で設定ファイルへの変更内容を永続化する必要があります.
設定ファイルを永続化するにはコンテナイメージをビルドするやり方もありますが, それよりも設定ファイルを ボリューム としてマウントするほうがおすすめです.

例えば Docker ホストの ~/dotfiles/.config/rstudio/ に空のディレクトリを用意しておき, docker run コマンドで

docker run -d -p 8787:8787 \
  -v ~/dotfiles/.config/rstudio:/home/rstudio/.config/rstudio \
  -v $PWD:/home/rstudio/workspace \
  rocker/rstudio:4.0.3

のようにしてコンテナを起動すると, そのディレクトリ内に設定ファイルが作成されます.

以後コンテナ起動時にはいつもこのディレクトリをマウントするようにすれば, コンテナを一度停止して再起動したときも, あるいは他のプロジェクトで別のコンテナを起動したときも, 同じ設定が適用されるようになります.

設定ファイルをマウントする利点

R プロジェクトにおいて Docker を利用しプロジェクトごとにコンテナイメージを用意する方法には

  • プロジェクトごとに異なるバージョンの R やパッケージがインストールされた環境を利用できる
  • 分析・開発に参加しているメンバーが同じ環境を利用できる

という利点があります. しかし RStudio のオプション設定については

  • プロジェクト間で同じ設定を利用する
  • メンバーごとに好みの設定を行う

と, 相反する形で管理できるのが理想です.

上のように設定ファイルをボリュームとしてマウントする方法はまさにこれを実現する手段になっています.
これがコンテナイメージのビルドよりボリュームのマウントをおすすめする理由です.

発展

先日 dotfiles の利用を前提とした R プロジェクトのテンプレートリポジトリを GitHub で公開しました:

terashim/rproject: R プロジェクトのひな形

また, 私個人の dotfiles リポジトリもこちらに公開しています:

terashim/rproject-dotfiles

ここでは単純に設定ファイルをマウントするのではなく, 別のディレクトリにマウントしてからシンボリックリンクを作成する方法を採っています. また dotfiles 以外にも renv の活用などを含んでいます.

このテンプレートについてはまた稿を改めてご紹介できればと思います.