Visual Studio Codeを使ったR言語開発環境の利用ガイド (応用編)

# はじめに

データサイエンス需要の高まりに比例してRの需要も高騰しています．本記事では広く利用されている Visual Studio Code(以下，VSCode) においてR言語を利用するための環境設定方法を紹介いたします．
[２年前に投稿した記事](https://qiita.com/Ikuyadeu/items/edf1ddc733f4d1770d5a)ではVS CodeにおいてRを使うための拡張機能である[vscode-r](https://marketplace.visualstudio.com/items?itemName=Ikuyadeu.r)の基本的な機能を紹介しました．これからVS CodeでRを使ってみようかなという方は参考になれば幸いです．本記事ではその後二年間で改善・追加された機能の紹介を雑多に行います．

# 本記事の想定読者

* すでにvscode-rのユーザーでより機能を使いこなしたい人
* R Studio ユーザーでVS Codeに環境を移したい人

を想定しています．

その他

* [インストール手順](https://i-was-a-ki.hatenablog.com/entry/2017/12/05/222811)
* [vscode-rの特徴](https://qiita.com/Ikuyadeu/items/edf1ddc733f4d1770d5a)
* [VS Codeの設定方法](https://qiita.com/y-w/items/614843b259c04bb91495)

は関連記事等をご参照ください．


# 本記事で紹介する機能

* [コード補完機能の有効化](#コード補完機能の有効化)
* [データ，グラフ情報の表示](#データグラフ情報の表示)
* [R StudioのアドインをVS Codeで使う](#r-studioのアドインをvs-codeで使う)
* [Rに対応したJupyter Notebookを VS Code で使う](#rに対応したjupyter-notebookを-vs-code-で使う)
* [R Markdownを使いこなす](#r-markdownを使いこなす)

かなり雑多ですが，それぞれ独立していますので気になったとこだけ順番に読めます．

# コード補完機能の有効化

R EditorSupportという団体によって補完機能が実装されました．

以下の手順で利用できます．

1. [R LSP Client](https://marketplace.visualstudio.com/items?itemName=REditorSupport.r-lsp)をインストールする
2. [R Language Server](https://github.com/REditorSupport/languageserver)を以下のRコマンドによりインストールする．

```r
install.packages("languageserver")
```
または，

```r
devtools::install_github("REditorSupport/languageserver")
```

3. VS Codeの設定を開き，利用しているOSに合わせて`r.rpath.windows`, `r.rpath.mac`, `r.rpath.linux`のいずれかにRをインストールしたパスを入力し，VS Codeを再起動する．このパスはvscode-rで利用しているパスと同じものです．VS Codeの設定方法については[こちらの記事](https://qiita.com/y-w/items/614843b259c04bb91495)をご参照ください

# データ，グラフ情報の表示

標準設定ではグラフ表示は別ウインドウで表示されていましたが，設定を編集することでR Studioのようにグラフ操作が行えるようになります．

1. VS Codeの 設定: `"r.sessionWatcher"`を `true`に編集し，VS Codeを再起動する．
2. データやグラフを表示するソースコードを記述し実行する．
3. エディタのウィンドウとしてグラフが表示される

利用例: 少し特殊なレイアウトでソースコードを左，ターミナルを右に設定しています．

![グラフ表示動作例](https://user-images.githubusercontent.com/4662568/70815935-65391480-1e09-11ea-9ad6-7ebbebf9a9c8.gif)


# R StudioのアドインをVS Codeで使う


[rstudioapi](https://github.com/rstudio/rstudioapi)のエミューレーションを使うことで一部のRStudioアドインが利用可能です． 特にドキュメント検査・操作関連のアドインは比較的安定して利用できるそうです．

## 1. R Studio アドインサポートの有効化

`.Rprofile`ファイルに`options(vsc.rstudioapi = TRUE)`を追記します.

## 2. セッションの再起動

Rコマンドで `.vsc.attach()` または`rstudioapi::restartSession()`を実行する

## 3. アドインの実行

アドインを実行するには主に２つの方法があります．

1. F1キーでコマンド入力バーを出し，コマンド `R: Launch RStudio Addin`を実行する．このコマンドは `"r.lauchAddinPicker"`としてショートカットキーにも対応できます．
2. キーバインドを用いる．対応したアドインはアドインパッケージの`inst/rstudion/addins.dcf`から確認できます．例として選択範囲に[Reprex](https://github.com/tidyverse/reprex)というアドインを実行する場合は以下のキーバインドで利用できます．

```json
{
    "description": "reprex selection",
    "key": "ctrl+;",
    "command": "r.runCommand",
    "when": "editorTextFocus",
    "args": "reprex::reprex_selection"
}
```
利用スクリーンショット
![利用スクリーンショット](https://raw.githubusercontent.com/Ikuyadeu/vscode-R/master/images/vscode_addins.png)

## 動作確認済みパッケージリスト

* `{datapasta}` dev バージョン
* `{reprex}`
* `{fnmate}`
* `{equisse}`
* `{remedy}`
* `{AlignAssign}`
* `{blogdown}`: 利用時はLightテーマを使ってください
* `{docthis}`
* `{sinew}`
* `{prefixer}`
* `{gistfo}`
* `{citr}`
* `{styler}` 


## 実装済み`{rstudioapi}`関数

上記に載っていないプラグインを利用する場合はこれらの関数を利用しているか確認してください．

  *  ` getActiveDocumentContext `
  *  ` getSourceEditorContext `
  *  ` isAvailable `
  *  ` verifyAvailable `
  *  ` insertText `
  *  ` modifyRange `
  *  ` readPreference `
  *  ` readRStudioPreference `
  *  ` hasFun `
  *  ` findFun `
  *  ` showDialog `
  *  ` navigateToFile `
  *  ` setSelectionRanges `
  *  ` setCursorPosition `
  *   `setDocumentContents`
  *  ` documentSave `
  *  ` documentId `
  *  ` documentPath `
  *  ` documentSaveAll `
  *  ` documentNew `
  *  ` getActiveProject `
  *  `restartSession`
  *  `viewer`



# Rに対応したJupyter Notebookを VS Code で使う

VS CodeのJupyter Notebook拡張機能ではPythonのみをサポートしていましたが，開発版のVS Code限定でR, Julia, Scalaのサポートも利用可能になりました．
今回はRにしぼって利用方法を紹介いたします．
この機能はvscode-Rを必要としません．

1. [VS CodeのInsiderバージョン](https://code.visualstudio.com/insiders/) (開発中の最新版)をインストールする
2. Jupyter kernelspecでサポートされた[R](https://cloud.r-project.org/index.html)をインストール
3. Jypyter用のRカーネルである[IRkernel](https://github.com/IRkernel/IRkernel)のインストール
3. VS Codeの[Jupyter 拡張](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter)のインストール
4. VS Codeの設定: `"jupyter.experiments.optOutFrom"`を `["NativeNotebookEditor"]`に編集し，VS Codeを再起動する．
5. 完了，Notebookが利用できます．   

* Option: 設定で `"jupyter.insidersChannel"` を `"daily"` または `"weekly"` に設定することで拡張機能の更新を確認できます



# R Markdownを使いこなす

R Markdownのセル機能を利用することでJupyterのような使い方ができます．
`Hello.rmd`のようなファイルを生成しバッククォートで囲むことでマークダウンの中にコードを埋め込み実行することができます．

![Screen Shot 2020-12-15 at 17.24.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221488/abf91f79-bd71-305f-ff1d-fcc66d0fd66d.png)

`Run Cell`というコマンドを押すことで囲んだ箇所の命令を実行できます．
また，Rファイル操作時と同じように`Ctrl+Enter`コマンドでカーソル位置のコードを実行することもできます．

R Markdownファイル専用の拡張として，[R Markdown All in One](https://marketplace.visualstudio.com/items?itemName=TianyiShi.rmarkdown)というものもあり，スニペットやシンタックスハイライト，フォーマットを主にサポートしているそうです．vscode-rとの並用は確認していませんが興味があれば使ってみてください．


# 開発を支えてくれているコラーボレーター様
vscode-rは以下のコラボレーター様やプルリクエストやissueの報告してくださる方々のおかげで開発が成り立っています．
* [Thomas Brittain](https://github.com/Ladvien)さん: 最初に参加してくれたコラボレーターさん．マイコンからニューラルネットまで幅広く詳しいです．
* [Andrew Craig](https://github.com/andycraig)さん: 同じく最初期から参加してくれている本職データサイエンティスト．東京在住でJapan.RやTokyo.RなどのRコミュニティで参加・[発表](https://speakerdeck.com/andycraig/r-in-visual-studio-code)されているそうです．
* [Kun Ren](https://github.com/renkun-ken)さん: Thomasさんと入れ替わりで参加してくれた方．今コミュニティ内で一番開発やコードレビューを頑張っていてMicrosoft MVPも受賞されています．[twitter](https://twitter.com/renkun_ken)ではvscode-rに関する最新機能を紹介してくれています．
* [Miles McBain](https://github.com/MilesMcBain)さん: まだvscode-rが安定していない頃からブログやTwitterで紹介してくれていた方で，この機能についても[記事]((https://milesmcbain.xyz/posts/adding-addins-to-vscode/))を書いてくれています.
* [Manuel Hentschel](https://github.com/ManuelHentschel)さん: Rのデバッグ拡張[VSCode-R-Debugger](https://github.com/ManuelHentschel/VSCode-R-Debugger)の開発者さん．コラボレーターになってからは機能開発だけでなくメンテナンスやエンジニアリング関係の作業もしてくれています．


# まとめ

コラボーレータ，コントリビューターの方々による協力のおかげで，多くの機能が利用できるようになりました．
前から利用者はもちろん，R Studioからの利用者にも楽しんでプログラミングしていただけるなれば幸いです．
また，本記事の誤りや機能の要望などございましたら，記事のコメントかGitHubのissueにぜひ投稿していただけると励みになります．


# 関連リンク

* [(前回の記事) Visual Studio Codeを使ったR言語開発環境の利用ガイド](https://qiita.com/Ikuyadeu/items/edf1ddc733f4d1770d5a)

* [vscode-rリポジトリ(英語)](https://github.com/Ikuyadeu/vscode-R/wiki)
* [vscode-r wiki (英語)](https://github.com/Ikuyadeu/vscode-R/wiki)
* [Jypyter Notebook拡張機能の使い方 (英語)](https://code.visualstudio.com/docs/python/jupyter-support)
* [vscode-jupyterリポジトリ (英語)](https://github.com/Microsoft/vscode-jupyter#working-with-other-languages)