Ubuntu24にコピペでさくっとRの環境を作る

新しいOS、新しい環境でスタート！まっさらな状態で気持ちいい。
で、Rの環境を作らなくっちゃということで、コピペして作る用のメモです。

## まずは最新版のR

まずは最新版のRのインストールです。リポジトリ追加してインストールっていう感じです。`r-base`インストールする際に`--no-install-recommends`オプション付けるといいよっていう話あるんですが、それだとコンパイラとかインストールされなかったりするので、そのオプションはつけてないです。そのあたりは好き好きってことで。
```bash:最新Rのインストール
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
sudo add-apt-repository -y "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
sudo apt -y install r-base
```

## パッケージのインストール

絶対に使うであろう、またはたぶん使うであろう、またはきっと使うであろうパッケージの一覧は作っておくとなんとなく便利なので作っておきます。このあたりは本当に自分好みかなと思います。

```bash:インストールしたいパッケージの一覧
INSTALL_PACKGES=$(cat <<EOF
dplyr
tidyr
stringr
data.table
lubridate
purrr
openxlsx
ggplot2
ggrepel
viridis
glue
scales
fst
cowplot
pdftools
rmarkdown
kableExtra
rvest
httr
EOF
)
```

Rをインストールしたてほやほや状態だとパッケージインストール先ディレクトリがない状態なので、最初に強制的に作成しちゃっています。あと、エラーが出たときにあとで分かるように`install_packages.log`にメッセージを書き出すようにしています。


```bash:パッケージのインストール
cat <<EOF | R --no-save
dir.create(Sys.getenv("R_LIBS_USER"), recursive = TRUE)
EOF
cat <<EOF | R --no-save 2>&1 | tee install_packages.log
install.packages(c("$(echo $INSTALL_PACKGES | sed -r 's/ /","/g')"))
EOF
```

エラーを確認してみるとOS側でのライブラリが足りないエラーが出ていますので、足りないものをインストールします。
```bash:エラーの確認
cat install_packages.log |grep ERROR
```

さっき出力した`install_packages.log`から必要だよって求められている行を抽出して、その結果を`apt install`に渡してインストールしちゃいます。

```bash:ライブラリーのインストール
cat install_packages.log |egrep 'deb:.*Ubuntu' | sed -r 's/^.+: ([^ ]+) .+/\1/' | tr '\n' ' ' | xargs sudo apt install -y
```

エラーがでなくなるまで「パッケージのインストール」「エラーの確認」「ライブラリーのインストール」を繰り返します。
エラーがでなくなったら、念のためテストします。これでエラーがでなければOKです。

```bash:パッケージがインストールできてるかのテスト
cat <<EOF | R --no-save
$(echo $INSTALL_PACKGES | tr ' ' '\n' | sed -r 's/^(.+)$/library("\1")/')
EOF
```

## パッケージのインストール部分が何か面倒なので一気にできるようにしてみた。
パッケージインストールして、エラーの確認して、ライブラリーのインストールして、って繰り返すのって、さくっとコピペという感じがしないので、まとめてみました。コピペして放置しておけば完成している予定です。たぶん。（追伸）ダメでした。途中で`sudo apt install`を実行しているんですが、そのたびにパスワード聞かれちゃうようです。残念。

```bash:パッケージのインストール
cat <<EOF | R --no-save
dir.create(Sys.getenv("R_LIBS_USER"), recursive = TRUE)
EOF
while true
do
cat <<EOF | R --no-save 2>&1 | tee install_packages.log
install.packages(c("$(echo $INSTALL_PACKGES | sed -r 's/ /\",\"/g')"))
EOF
cat install_packages.log | egrep 'deb:.*Ubuntu' | sed -r 's/^.+: ([^ ]+) .+/\1/' | tr '\n' ' ' | xargs sudo apt install -y
[ -z "$(cat install_packages.log |grep ERROR)" ] && break;
done
cat <<EOF | R --no-save
$(echo $INSTALL_PACKGES | tr ' ' '\n' | sed -r 's/^(.+)$/library("\1")/')
EOF
```

## RStudio

個人的にはあんまり RStudio は使わないんですがインストールしておきます。ダウンロードサイトから、`.deb`ファイルをリンクを抽出して、最新であろう最後の行だけに絞って、それをダウンロードしてインストールするという流れになっています。

```bash:RStudioのインストール
#Rstudio
cd /tmp
echo "https://posit.co/download/rstudio-desktop/" | wget -i - -O - |egrep 'https://[^"]+rstudio.*\.deb' | tail -1 | sed -r 's/^.*href="([^"]+)".*$/\1/' | wget -i - -O rstudio.deb
sudo apt install -y ./rstudio.deb
```

## VS Code

テキストエディターは開発するしないに関係なく、なくてはならない必須アイテムなのでインストールします。[Previous release versions](https://code.visualstudio.com/docs/supporting/faq#_previous-release-versions)のページにURLが公開されているので適当なバージョンをダウンロードして最新にアップグレードしています。

```bash:vscodeのインストール
cd /tmp
wget https://update.code.visualstudio.com/1.95.1/linux-deb-x64/stable -O code.deb 
sudo apt install -y ./code.deb
sudo apt update
sudo apt install --only-upgrade code
```

## はい、終わりです。

はい、終わりです。思ったよりも簡単に構築できました。
めでたしめでたしです。