ill-identified diary

所属組織の見解などとは一切関係なく小難しい話しかしません

WSLでWindows版Rの文字化けに別れを告げる

この記事は最終更新日から3年以上が経過しています



概要

  • Windows文字コード絡みの質問がよく寄せられるので WSL2 を使って RStudio を動かす方法をまとめた.
  • RStudio Server と RStudio Desktop 両方の設定方法について書いた (ただし後者は推奨しない)
  • 本体だけインストールして終わり, ではなくよく使われるパッケージのセットアップについても書いた
    • rstan/cmdStanR とか sf とか外部ライブラリの依存の強いパッケージも考慮している.
  • Rstudio 公式の投稿を多少肉付け&修正しただけ
  • Windows で R v4.0.4 使用時に日本語がうまく表示できなかった問題1はバージョンアップで解決できるためここでは扱わない.
  • WSL2 上での設定は通常の Ubuntu でもほぼ同じ (違う部分は本文に注記) なので, WSL 以外で構築した仮想Ubuntu環境に, あるいは直接 Ubuntu をインストールして R を導入したい人も参考になるはず.







2022/4/2 追記

Windows 11 からは WSLg がサポートされ, 以下で記述しているような GUI の表示のためのセットアップが不要になるらしい. しかし私は個人的な事情で11にアップデートしていないため未検証である (例えば, まだプレビュー版であるため不安定なことが多いかもしれない).
github.com




すでに似たような内容を掲載しているページには以下がある

これらもおおいに参考になるが, Stan を動作させるのが主目的であり, やや限定的な用途で書かれているのでもう少し多目的に使えるように, Linux を使ったことのない Windows ユーザ向けに必要な導入手順をまとめ, スクリプトも用意してみた.

もちろん, 前回言及したように docker 上に環境構築するのもあり. 例えば R用のdocker イメージがいくつか公開されている.

2021/6/13 追記: デスクトップ版の設定方法を改良した. 更新前の方法を試した人は, ~/.bash_profile の記述を消去してやり直してほしい (そして .bash_profile を使ってないなら削除する) .


WSL2 上で RStudio Server を動かす

以降の説明は Windows 10, x64システムの PC を前提としている. 要件の詳細はマイクロソフトの公式ページ2などで確認してほしい.

いくつか注意事項

  • 最近 RStudio Server Pro (最近 Workbench に改称) は現時点では WSL での動作をサポートしていないらしい. また, この方法は複数ユーザーの使用を想定していない.
  • WSL2 に GUI はない3ため, Ubuntu 上で RStudio Server をインストール&起動し, ブラウザ上で操作することになる. ただし正式にサポートされていないものの, 後述するようにデスクトップ版を動かすこともできる.

仮想化を有効にする

まずは PowerShell 上で操作する.

  1. PowerShell を「管理者として実行」し, 以下のコマンドを実行する

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart


ここまでがうまく行ったかどうかは「タスクマネージャー」->「パフォーマンス」で「仮想化: 有効」となっているかどうかで確認できるらしい

将来的にはここまでの手順はコマンド一文でできるようになるらしいが, この機能は今はまだ正式リリースされていない.

場合によっては BIOS 設定で仮想化がオフになっていることもあり, BIOS 設定画面で “Virtulization” がどうこうという項目を見つけて有効化しなければならないこともある4.


WSL2 のインストール

  1. 以上が終わったら一旦 Windows を再起動する.

  2. 再びPowerShell を「管理者として実行」し, 以下のコマンドを実行する. これは WSL2 をデフォルトにするという意味.

    wsl --set-default-version 2


  3. 最新の Linux カーネルをダウンロードしてインストールする

    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi


Linux ディストリビューションのインストール

Linux にはいろいろなディストリビューションがあるが, 今回は操作しやすい Ubuntu を利用する. 現時点では Ubuntu 20.04 が最新なのでこれを使う. これは Microsoft Store でダウンロードすることができる.

Ubuntu 20.04 - Official app in the Microsoft Store

図 1: Ubuntu 20.04 LTS

これでスタートメニューに 「Ubuntu 20.04 LTS」が追加される. これを起動するとコマンドラインのようなウィンドウが開く.

ここまでやってうまく行かない場合, 公式ページにより細かい手順が書かれているので確認する.

WSL のインストール | Microsoft Learn

既に書いたように WSL では GUI をまだサポートしていないため, 操作はこのウィンドウで行うことになる5. 以降, Windows と区別するため, Ubuntu 上での操作を WSL2 と呼ぶ.


Ubuntu on WSL2 の初期設定

以降はターミナル上で操作する. 初回開いたときはしばらく待たされたあと, アカウントのユーザー名とパスワードの登録を求められる. これは Windows と同じでなくてもよい.

そしてこれからはターミナル上にコマンドを入力して操作する. そういうのをなるべくやりたくないという人のためにここで紹介している RStudio Server インストールまでの操作をまとめたスクリプトを作った (後述の「一括インストールスクリプト」).

WSL2 のウィンドウ上 (ターミナル) で, 初期設定として以下のような操作を行う.

# ロケール設定
sudo apt update -qq
sudo apt install -y language-pack-ja manpages-ja manpages-ja-dev
sudo update-locale LANG=ja_JP.UTF-8
# タイムゾーン変更. 自分の環境では最初から日本時間だったが念の為
sudo echo "Asia/Tokyo" > /etc/timezone
sudo dpkg-reconfigure -f noninteractive tzdata
# 一旦閉じる
exit

ロケール設定変更は再起動しないと反映されないので, ここで一旦閉じてから再度開く.

ここまでは R に限らず WSL2 の一般的なセットアップ. 次に WSL2 上で R をインストールする. Ubuntu でのインストール方法は諸説あるが, その原因の1つは Ubuntu 本体バージョンごとに名前が変わるためである. (なんで混乱を招く解説が多いのか)

しかしいつの間にか CRAN に簡潔なガイドが書かれていたのでこれに従う (CRANの記述に今後利用する可能性の高いプログラムのインストールを追加している).

Ubuntu Packages For R - Brief Instructions

# R 本体 + 重要プログラムのインストール
sudo apt install -y gdebi-core build-essential libcurl4-gnutls-dev libxml2-dev libssl-dev
sudo apt install -y gfortran  # 古いプログラムのコンパイルに要求されることあり
sudo apt install --no-install-recommends software-properties-common dirmngr
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
sudo apt update
sudo apt install -y --no-install-recommends r-base
# ここで `R` を実行して R 単体で動くか確認してもいい

# RStudio Server のインストール
wget "https://rstudio.org/download/latest/stable/server/bionic/rstudio-server-latest-amd64.deb"
sudo apt install -y ./rstudio-server-latest-amd64.deb

将来うまく行かなかった時は以下を参考に適当に書き換えてほしい

  • $(lsb_release -cs)Ubuntu のバージョンに対応するコードネームに置き換えられる. 例えば 20.04 なら focal (Focal Fossa).
    • wget ... のほうは Ubuntu 18.04 のコードネーム bionic に固定しているが, これは現時点では Ubuntu 18.04 以降は全て同じファイルが使えるため (公式ページでもそうなっている).
  • --no-install-recommends はよけいなプログラムをインストールしないようにするオプション. 特に r-base をインストールするとき, 関連パッケージもインストールされ, そうなるとアップデートを apt で管理することになる. そのようにせず RStudio 上で全て管理できたほうが使いやすいと思われる.
  • もし将来 R のメジャーバージョンアップがなされれば -cran40 の部分も変わるだろう.

続いて R でよく使用される6外部ライブラリをインストールする. それぞれ要らないと思ったらインストールしなくても良い. パッケージのバイナリファイルを直接インストールすることもできるが, せっかくなのでコマンドラインの操作に慣れておこう.

# 日本語対応フォント
sudo apt install -y fonts-noto-cjk
sudo apt install -y fonts-noto-cjk-extra  # こっちは必須でない, ウエイト違いのフォントが欲しい場合のみ
fc-cache -fv

# ragg 等グラフィックに必要
# 実は Ubuntu なら ragg がなくてもグラフの文字化けは起こりにくい
sudo apt install -y libfontconfig1-dev
sudo apt install -y libharfbuzz-dev libfribidi-dev
sudo apt install -y libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev

# rsvg に必要
sudo apt install -y librsvg2-dev

# units に必要
sudo apt install -y libudunits2-dev

# 画像加工で広く利用
sudo apt install -y libmagick++-dev

# gifski に必要
sudo apt install -y cargo

# sf 等 GIS 関連
sudo apt install -y libgdal-dev libgeos-dev

# rstan に必要 (正確には依存パッケージのV8に必要)
sudo apt install -y libv8-dev libnode-dev # おそらくどちらかが自動で選択される

# rgl
sudo apt install -y mesa-common-dev libglu1-mesa-dev

# DiagrammeR とか
sudo apt install -yqq graphviz

# pdftools で必要 (RmarkdownでPDF出力する際に使うかも)
sudo apt install -y libpoppler-cpp-dev 

ここまでのコマンドをコピペするのが面倒な人のために, スクリプトを用意した (後述の「一括インストールスクリプト」参照). なお, Windows でコピペすると改行コードの違いでうまく動作しないことがあるため, テキストをコピペして保存するのではなく, ファイルを直接ダウンロードして使ってほしい (ファイルをメモ帳で開くだけなら問題ないはず).

RStudio server を起動する

sudo rstudio-server start

なお RStudio server を停止・アンインストールしたい場合は以下のようにする (よく見ずに片っ端からコピペ実行している人がいるかもしれないのでコメントアウトしておいた).

## 停止
# sudo rstudio-server stop
## アンインストール
# sudo apt remove rstudio-server

RStudio を開く. ブラウザを立ち上げ, https://localhost:8787 へ移動する. ユーザー名とパスワードは Ubuntu on WSL2 を最初に立ち上げたときに登録したもの. 以降は RStudio 上での操作.

RStudio Server 上での操作

ここまでの設定ができているなら, R のメッセージも日本語にできるはずである.

# ロケールが変わってなかったら以下を実行
Sys.setlocale("LC_ALL", "ja_JP.UTF-8")
Sys.setenv(LANG = "ja_JP.UTF-8")

これで RStudio Server 上では UTF-8 がデフォルトになっているので, Windows 特有の不具合がなくなるし, UTF-8 のテキストファイルを読み込む際にコードの指定も不要になる (逆にシフトJIS のファイルを読む場合は cp932 を指定する必要がある).
なおこのロケール設定方法は OS ごとに異なる7ので, 同じことを Windows に直接インストールした R に対して行っても効果はない.

そして忘れずに [Global Options] -> "Save Workspace Data on exit" の項目を "Never" にしておこう.

ここまでの手順を踏めば, 例えば以下のパッケージが使用できる (あくまで簡単な動作確認をしただけだが).

  • tidyverse
  • ragg
  • rstan/cmdStanR
  • sf
  • rvest
  • rgl (ただし後述の注意事項あり)
  • もちろん RStudio GUI の文字化けなど, 文字コード由来の不具合も解消する

WSL2 でのファイルの読み込み

WSL2 では Windows のフォルダは /mnt/ 以下にマウントされている. 例えば Windows でのマイドキュメントのファイルパスは

/mnt/c/Users/ユーザー名/Documents/

というふうになる (もちろんパーティション構成によっては dとかeとかにもなりうる). OneDrive なら /mnt/c/Users/ユーザー名/OneDrive となる. なお WSL (= RStudio) 側のユーザーディレクトリへは ~/ で移動できる.

RStudio Server でも Files タブに “Upload” というボタンが追加されているが, ファイルを1つづつしかアップロードできないのでやや不便である.


一括インストールスクリプト

WSL2 を立ち上げて以降の, WSL2 上で RStudio Server をインストールするまでの処理をスクリプトにまとめた. ただし, Ubuntu on WSL2 インストール直後を想定した内容である ので, すでに使い込んでいる人はここまでの説明を読みながら手動で設定したほうが無難だろう. また, そこまで厳密にテストしていないので, もしリカバー不能な不具合が発生したら Ubuntu on WSL2 をクリーンインストールしてもいい, くらいの気持ちで使ってほしい.


setup-rstudio-desktop.sh · GitHub

なるべくコピペではなく, “Download Zip” のボタンを押して setup-rstudio-server-wsl.sh を取得してほしい. (なぜそうする必要があるのか見当がつかない人はなおのこと)

PowerShell で以下のように実行する

wsl --set-default Ubuntu-20.04
wsl sudo bash setup-rstudio-server-wsl.sh
wsl -t Ubuntu-20.04
wsl sudo rstudio-server start

なお, 将来バージョンアップした場合は 20.04 の部分は適宜変更すること. wsl -l で名称がわかる.

中身はシェルスクリプトなので WSL2 のターミナルでも実行可能だが, Windows 側のファイルにアクセスするパスが長くなるので PowerShell 上で実行したほうが簡単だと思われる.

なお, RStudio Server の再起動は

wsl sudo rstudio-server restart

多重起動するとあれなので基本こっち推奨?

強制終了は

wsl sudo rstudio-server kill-all

wsl というのは PowerShell から WSL2 へ命令文を送るコマンドで, WSL2 のターミナルではそれぞれ先頭の wsl を省いて実行することができる.


Ubuntu on WSL2 と GUI (オプション)

追記: 現在はWSLgが正式にリリースされているので, このセクションで説明しているような, X Windowエミュレータをインストールする工程は飛ばして良い. 既にWSLをインストールしている場合は, wsl --updatewsl --shutdownで更新と再起動を行えばGUIに対応したWSLが使えるようになる. (参考: https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/gui-apps)

[system-distro-env]
LIBGL_ALWAYS_SOFTWARE=1


現在, GUI を公式にサポートしたバージョン (WSLg) が開発中らしいが, 一旦は別の方法で実現する方法. 基本的に以下のマイクロソフト公式の記事に沿った手順で X Windows System (X11) で GUI を表示できるようにする. デスクトップ版を使いたいとか, rgl を HTMLwidget を使わずに表示したいとかでなければ必須ではない.



Modern Work App Consult Blog - Microsoft Community Hub

  1. Windows 側に対応ソフトをインストールする. 以下の3つの選択肢があるらしいが, 今回は VcXsrv を使用してみる.

    1. VcXsrv Windows X Server (フリー)
    2. X410 App available on Microsoft Store (有償)
    3. Kali App available on Microsoft Store (フリー)

    VcXsry はインストーラを起動したら特に設定を変更せずインストールした.

  2. スタートメニューから “XLaunch” を起動する. 重要なのは,

    1. “Extra Settings” の項目で “Disable Access Control” にチェックを入れること

    図 2: VcXsry 起動時の設定

    1. その後現れるファイアウォール設定でも許可すること

    図 3: allow-firewall

    もしファイアウォール設定を間違えたら,「スタートメニュー」->「Windows セキュリティ」->「ファイアウォールとネットワーク保護」->「ファイアウォールによるアプリケーションの許可」から操作できる

    図 4: ファイアウォール設定

  3. Ubuntu on WSL2 で以下を実行する. これは Windows と WSL のホスト IPアドレスの競合を避けるために必要とのこと.

    以下の3行のうちどれか1行でよい (エラーが出なければどれでも良いし, やり直してもおそらく問題はない).

    export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
    
    export DISPLAY="`sed -n 's/nameserver //p' /etc/resolv.conf`:0"
    
    export DISPLAY=$(ip route|awk '/^default/{print $3}'):0.0
    

    以下でIPアドレスっぽいのが表示されれば問題ない

    echo $DISPLAY
    

    なお, これはセッションごとにリセットされる. 毎回入力するのが面倒なら以下を実行して毎回の起動時に自動設定させる.

    sudo echo "export DISPLAY=$(ip route|awk '/^default/{print $3}'):0.0" >>  /etc/bash.bashrc
    


  4. 動作確認
    引き続き Ubuntu 上で動作確認用の GUI をインストールする

    sudo apt install x11-apps gedit
    

    xcalc で電卓を表示できる. geditテキストエディタを開ける. (あくまで動作確認用. テキストエディタVim (or Emacs) のほうがよい) あとどちらにしろデフォルトでは Windows 側とクリップボードの共有ができないのではコピペするときは注意.

なお VcXsrv は常駐ソフトなので, ウィンドウを閉じただけなら再度起動する必要はない.

TODO: この方法だと, VcXsrv が立ち上がっていないとターミナルに頻繁にエラーメッセージが表示されるので邪魔かもしれない


RStudio デスクトップ版を動かす

参考:

公式にも方法が書かれていないし, 使っているうちに不安定になってくるという話があるので現時点では正式にサポートされていないようだが, できないことはない.

  1. 先述の X11 の設定をする現在はWSLgが使えるので, 基本的に最新のWSLをインストールするだけでデスクトップ版が使用できる.

  2. RStudio デスクトップ版をインストールする.

    https://www.rstudio.com/products/rstudio/download/#downloadUbuntu/Devbian 64 bit どうこうと書かれている欄の .deb ファイルをダウンロードする. 実際のファイル名はおそらく異なるが, 仮に rstudio.deb として, このファイルのあるディレクトリで以下を実行する.

    sudo apt install ./rstudio.deb
    


  3. ~/.config/RStudio/desktop.ini[General]desktop.renderingEngine=software を書き加える.

    cp ~/.config/RStudio/desktop.ini ~/.config/RStudio/desktop.ini.bak
    sed '/^\[General\]$/a desktop.renderingEngine=software' ~/.config/RStudio/desktop.ini.bak > ~/.config/RStudio/desktop.ini
    


  4. WSL2 側で IME をインストールする.

    2021/6/3: 当初うまく行かなかったができたので修正した

    現時点では Widows 側の IME が使えないようなので, WSL2 側で fcitx をインストールする8.

    sudo apt install -y -qq fcitx-mozc fctix-frontend-qt5  # 後者は明示的に指定しなくても良さそうだが, 念の為
    sudo apt remove -y -qq ibus
    echo "export QT_IM_MODULE=fcitx" >> ~/.profile
    echo "export GTK_IM_MODULE=fcitx" >> ~/.profile
    echo "export XMODIFIERS=@im=fcitx" >> ~/.profile
    echo "export DefaultIMModule=fcitx" >> ~/.profile
    echo "fcitx-autostart" >> ~/.profile
    

    ここで WSL2 を再起動するか, fcitx-autostart を実行する. さらに, fcitx-config-gtk3 を実行し, 以下のようになっていれば成功している.

    図 5: fcitx が動作しているか確認

    もし入力メソッドの順番が違っているなら, 矢印ボタンで変更できる. 「Keyboard - 日本語」がない場合は, + ボタンで追加できる. 「Mozc」がなかったり, 追加できてなかった場合は失敗している.

    ここまでは通常の fcitx の設定だが, これだけでは RStudio Desktop で日本語入力ができない (vim-gtk, spyrder, VS Code など他のテキストエディタでは動作することが多い). これは RStudio の不備9だが, 現在はファイルのシンボリックリンクを上書きするだけで簡単に解決できる10.

    sudo ln -s /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so  /usr/lib/rstudio/plugins/platforminputcontexts/
    

    なお, この部分のみ 通常の Ubuntu と異なる. 私の場合は fcitx-mozc の使用には RStudio にシンボリックリンクを貼る以外の設定の記述は不要だった. 単に im-config を実行し, fcitx をデフォルトの日本語入力メソッドに設定すれば十分だったが, WSL2 ではなぜか im-config で設定しても自動で fcitx が起動しない.

    その他 fcitx-diagnose というテキスト出力ベースの診断ツールもある.

  5. rstudio を実行する.

追記: 新しいカーネルをインストールし直してからRstudio を立ち上げようとしたら error while loading shared libraries: ... というエラーが出た. 共有ライブラリがプリインストールされていなかったらしい. 私の場合はapt install libgbm-dev libasound2を実行すれば解決した.

追記: WSLg と NVIDI製のGPUを搭載したPCを使用していると, ウィンドウの表示がおかしくなることがある. 具体的には, WSLgのリポジトリにあるissueで掲載されているスクリーンショットのような画面になる. 私の場合は, このページに書いてある方法を試したら解消された. ホームディレクトリの .wslconfig を開くか新規作成し, 以下を追記する.

録画してみたら画質が悪かった

まだあまり使い込んでいないが, 今の所気になる点といえばIMEが有効になった直後に「Mozc」が点滅するくらいである.

こちらも一括処理するスクリプトを作成したが, やはりUbuntu on WSL2 を新規でインストールした直後を想定しているので注意. setup-rsudio-server-wsl.sh 実行後に, 最新版の Ubuntu 版 RStudio Desktop のパッケージファイル (Debian/Ubuntu 64bit版とか書かれている, 拡張子が .deb のもの) をダウンロードし, 同じディレクトリで sudo bash setup-rstudio-desktop.sh を実行する11 (Power shell から実行する場合, ユーザー名を指定する: wsl -u <ここにユーザー名> sudo bash ...).


サーバー版とデスクトップ版の比較

良いところ

  • もっさり感が少しだけましになる
  • 文字のレンダリングがわりとマシになる
  • 通常のデスクトップ版と同じ操作感覚になる
    • ファイルの移動はいつもどおりできる
  • Server 版の :: を入力したときの硬直がない (これはブラウザの問題?)

逆に良くないところ

  • 正式にサポートされていないので将来も動作保証されるかわからない
  • X11 の接続がたまにうまくいかないことがある (原因不明)

しかし, Sever, Desktop いずれもWindows上のRStudioを比べるとわずかな遅延が残る. よって文字コード関連の問題はかなり解消されるが完全に上位互換というわけではない. その実現には開発中と言われる Windows 10 UTF-8対応版R のリリースを待つしかないだろう


その他トラブルシュート


追加ストレージのファイルの書き込み・読み込みができない

発生条件は不明だが, 私のPCではWSL2から既存の Ext2 フォーマットのストレージにアクセスしたところ, ファイルの権限がすべて禁止されていることがあった.

OSをインストールしているストレージ (HDD, SSD等) の他にもストレージを使用しており (パーティションなどの仮想ドライブではどうなるか未確認), かつそのドライブフォーマットが NFTSフォーマットのストレージはデフォルトでアクセス許可に関するメタデータが保存されないらしい (公式ドキュメント: WSL のファイルのアクセス許可 | Microsoft Learn)ので, 起動のたびに権限がリセットされ, ファイルの読み書きができなくなる. 特に git や RStudio のプロジェクトファイルは隠しファイルと紐付けられているので, もし, なぜか以前開いていたプロジェクトが開けなくなったといった事象が起こったなら, これらがうまく動作しないときは権限の問題が関係しているかもしれない. 対処法は, (1) WSL での詳細設定の構成 | Microsoft Learn を参考に, WSL2 上で /etc/wsl.confを編集してメタデータを保存するように設定し, (2) 現在の権限を chmod で変更すること. (1) はデフォルトでは /etc/wsl.conf は作られていないので,

[automount]
options = "metadata"

という設定を書く. コマンドラインで終わらせたければ以下のコマンドで書き込める.

追記: /etc/wsl.conf ではなく ~/.wslconfig のほうがいいかもしれない. 以下のコマンドの末尾を/etc/wsl.conf ではなく, ~/.wslconfigとすると, ホームディレクトリに設定ファイルを作って書き込める.

sudo echo "[automount]" >> /etc/wsl.conf
sudo echo 'options = "metadata"' >> /etc/wsl.conf

(2) 権限の変更コマンドは以下. 逆に権限を奪うなら -r, -w などとする. (もっと細かいアクセス制限が必要なときもあるかもしれないが, そういうのが必要な人はこの辺の話は理解済みということで)

chmod +rwx ファイル名

ファイルのオーナーを変える場合は以下のようにする.

sudo chown ユーザー名:ユーザー名 ファイル名


パッケージのインストール時にライブラリが足りずエラーが出る

Ubuntu の場合, Windows 版と異なり自前でプログラムのコンパイルが必要なことが多い. その際に必要な外部ライブラリ (プログラム) が足りないとエラーになる. しかし最近はエラーメッセージの表示が親切になり, どういう名前のライブラリをインストールしたらいいかがわかりやすい事が多い. 例えばこれは magick パッケージインストール時に出たエラーメッセージ (ただし, ここまでの手順に従っているならこのエラーは出ないはず).

--------------------------- [ANTICONF] --------------------------------
Configuration failed to find the Magick++ library. Try installing:
 - deb: libmagick++-dev (Debian, Ubuntu)
 - rpm: ImageMagick-c++-devel (Fedora, CentOS, RHEL)
 - csw: imagemagick_dev (Solaris)
 - brew imagemagick@6 (MacOS)
For Ubuntu versions Trusty (14.04) and Xenial (16.04) use our PPA:
   sudo add-apt-repository -y ppa:cran/imagemagick
   sudo apt-get update
   sudo apt-get install -y libmagick++-dev
If Magick++ is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a Magick++.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
-------------------------- [ERROR MESSAGE] ---------------------------
<stdin>:1:10: fatal error: Magick++.h: そのようなファイルやディレクトリはありません
compilation terminated.
--------------------------------------------------------------------

これは Magick++.h というファイルがなくコンパイルに失敗したが, このリストにあるようなライブラリをインストールすると解消されるだろう, という意味. 今回は Ubuntu を使用しているので, libMagick++-dev という名称で足りないプログラムをインストールできるらしい. よってターミナルで

sudo apt install libmagick++-dev

とすると足りない外部ライブラリインストールでき, 再度パッケージをインストールし直せば今度はおそらく成功する.


System has not been booted with systemd as init system (PID 1)

R で一部の命令文を実行した時 (例えば library(tidyverse) とか, あるいは https://community.rstudio.com/t/timedatectl-had-status-1/72060 のようなケース) に, 以下のような文が流れることがある.

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to create bus connection: Host is down

In system("timedatectl", intern = TRUE) :
running command 'timedatectl' had status 1

日本語ロケールならこうなる

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to create bus connection: ホストが落ちています

system("teimedatectl", intern = TRUE) で警告がありました:
  命令 'timedatectl' の実行は状態 1 を持ちました

これは WSL2 デフォルトでは systemd ではない独自開発の管理デーモンを使用しているのが原因であり, そしてその変更は現時点では WSL 2 で公式にはサポートされていない12. 非公式な対処方法ならば存在する13が, 初心者向けの操作説明でこういうことをやらせたくはない. いまのところ R 上の処理に限れば支障をきたしたことはないので, 上記のエラー・警告文は無視する方向でお願いしたい.

どうしても嫌ならば docker で作った Ubuntu 仮想環境を使うとよいだろう.


rgl パッケージで警告文が出る

3Dプロットをする rgl パッケージを読み込むと以下のような警告文が出るかもしない

 警告メッセージ: 
1:  rgl.init(initValue, onlyNULL) で:  RGL: unable to open X11 display
2: 'rgl.init' failed, running with 'rgl.useNULL = TRUE'. 

解決方法は2つある.

  1. 先述の X ウィンドウ表示の設定をする
  2. HTML で代替的に表示する

X ウィンドウの場合, Sys.getenv("DISPLAY") の値が echo $DISPLAY で出力される値と同じか確認する. 同じでなければ Sys.setev(DISPLAY = "...") で設定する. (/etc/bash.bashrc に設定を書き込んでいればおそらくデフォルトで設定される). また, おそらくRセッションの再起動が必要.

図 5: X Window での表示

HTML で表示する場合, 以下のオプションを設定する. これで Viewer ペーンに表示されるようになる. しかしけっこう動作がもっさりしている気がする.

options(rgl.printRglwidget = T)
図 6: Viewer での表示


reticulate で pyenv を使うとき

ここで書いた話が当てはまる

https://ill-identified.hatenablog.com/entry/2019/11/15/010746

要点だけ言うと, 共有ライブラリ付きで構築し直す必要がある:

env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.X.X

また, Ubuntuインストール直後だと pyenv が必要なライブラリを揃えていない可能性が高い. うまく行かないときは公式を参考に:
github.com


フォントのインストール

上記の手順だと, Noto Sans CJK JPNoto Serif CJK JPがインストールされ, 前者がデフォルトの日本語フォントになる. 一応知らない人のために言っておくと, Noto フォントの日本語グリフの見た目は以前からオープンライセンスのフォントとして広まっている源ノフォント (およびそれをもとに開発された原ノ味フォント) とだいたい同じ. 勝手にフォールバックされるのでグラフの文字化けの心配はほぼないと思われる (ただし以前書いたように pdf() で保存する場合はそもそも特定のフォントしか受け付けないので不可 ). fontregisterer パッケージの自動登録機能も必要ない. フォント名は systemfonts::system_fonts()やターミナルでfc-listを使うことで検索できる.

Ubuntu で標準日本語フォントだったものもインストールできる. 現在は後方互換性以外にインストールする理由はなさそうだが.

sudo apt install fonts-takao # Takao フォント4種
sudo apt install fonts-ipafont # IPA フォント
sudo apt install fonts-exipafont # IPAex フォント

aptコマンドに登録されていないのでどこかからダウンロードしてきた otf, ttf, otc ファイルをインストールしたい場合は, ~/.fonts/ または /usr/share/fonts/ 以下の適当な場所においてから, フォント一覧のキャッシュを更新する. 前者はユーザ個人, 後者はシステム全体で利用するときのルールなので, 複数ユーザで使う予定がないなら前者でよいだろう. それからターミナルで fc-cache -fvを実行するとキャッシュが更新され, OS側が新しく配置されたフォントを認識する. systemfontsで認識できるフォントファミリの名称は Windows のもとの違う可能性がある (日本語名になることが多い).

Windows 側にインストールされているフォントも使用できる. Windows 10 は游書体や UDデジタル教科書体など良いフォント (ただし游ゴシックUIは除く) がプリインストールされているので, 文書やスライド作成時にこのフォントを埋め込んで出力したい人は多いだろう. /etc/fonts/local.confというファイルを作り, 以下のように記述する.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig> 

既に local.conf が存在する場合は, 上記を参考にして <fontconfig> フィールド内のどこかに <dir> を挿入する. その後, ターミナルでやはり fc-cache -fv を実行する. ただし, フォントが多いのでキャッシュを取るのに少し時間がかかるだろう.

原ノ味フォントは tlmgr 経由でのインストールだと OS 側には認識されないので, github から取ってくることになる (たぶん)

2021/7/25 追記: Windows 側でフォントを新たにインストールした場合, Windows 側のユーザーディレクトリにフォントファイルがコピーされ, 上記の方法では認識できない可能性がある. エクスプローラーで右クリックして「すべてのユーザーに対してインストール」を選択するか, 上記の設定の <dir>...</fontconfig>の間に以下のような行を挿入する. <ユーザー名>の部分はあなたのユーザーアカウント名に置き換える. (もしこれでもうまくいかないなら Windows 側のエクスプローラーでどこにインストールされているかを確認すればよいだろう)

<dir>/mnt/c/Users/<ユーザー名>/AppData/Local/Microsoft/Windows/Fonts</dir>



まとめ

  • RStudio Server であれば比較的簡単に UTF-8 ロケールで作業できる
  • WSL 経由なら新規購入せずにUDデジタル教科書体や游書体を埋め込んだ文書を作成できる
  • RStudio Desktop もいちおう動作する. ただし日本語IMEの設定は共有されない
  • Docker はより下準備が多いが慣れている人にとってはカスタマイズしやすいはず

ちなみに Docker の導入は WSL2 のインストールまでできていればあとは (たぶん) 簡単なので省略.




  1. https://notchained.hatenablog.com/entry/2021/03/07/103525↩︎

  2. https://docs.microsoft.com/ja-jp/windows/wsl/install-win10↩︎

  3. GUI対応版も開発中らしい↩︎

  4. こことか参考に https://support.bluestacks.com/hc/en-us/articles/115003174386-How-to-enable-Virtualization-VT-on-Windows-10-for-BlueStacks-4↩︎

  5. このウィンドウでの操作の説明は長くなるので今回はしない. シェルスクリプトとか bash とかで検索すればいろいろ情報が出てくるので各自調べてほしい.↩︎

  6. RStudio のGUIでサポートしているものや tidyverse 関連↩︎

  7. 参考: https://notchained.hatenablog.com/entry/2015/06/19/233502↩︎

  8. この箇所のみ, https://kazblog.hateblo.jp/entry/2018/05/28/221242https://astherier.com/blog/2020/08/install-fcitx-mozc-on-wsl2-ubuntu2004/ を参考にした. 内容も概ね同じ.↩︎

  9. 参考: https://github.com/rstudio/rstudio/issues/1903↩︎

  10. 参考: https://blog.goo.ne.jp/ikunya/e/0f4c8607693ef440e6a631b3bda634c8 この記事が書かれた時点では v1.2 だが, v1.4.1717 現在でも状況は変わっていない. 実は WSL を使わない通常の Ubuntu でも同じ問題が発生するのだが, あまりに昔のことなので自分でも設定したことを忘れていた.↩︎

  11. デスクトップ版はURLが不定で自動化するのがちょっと大変なのでダウンロードのみ手動にした.↩︎

  12. https://github.com/microsoft/WSL/issues/1579↩︎

  13. 例えばこれは Fedora での例だが, たぶん Ubuntu でもなんとかなる: https://www.tomoyan.net/windows/wsl↩︎