RStudioのコード補完をもっと使ってみよう

この記事は[RStudio Advent Calendar 2016](http://qiita.com/advent-calendar/2016/rstudio-ide)の10日目の記事です。

## コード補完とは

コード補完とは,コード入力の途中で文脈に沿うようなコードを提案して補完してくれる,そんな感じの機能です。もちろんRStudioにもこの機能が備わっており,関数名などを入力している途中で**Tabキー**で活用できます:

![hokan_01.png](https://qiita-image-store.s3.amazonaws.com/0/35118/097453d0-d46c-afed-7199-8b7a87e3f83f.png)

なおRStudioのコード補完はかなり便利で,**いろんな補完をしてくれます**。今回はそのいくつかをご紹介します。

### 関数名の絞り込み

関数名を入力していってTabキーを押して候補を表示させると,かなりの数が候補に上がる場合があります。この時,**その続きを入力していくと絞り込みがなされます**。

これが地味に便利です。だから**ちょっと関数名を入力したらTabキーを押し,適度に文字を追加して確定のTabキー**でやればスムーズです。実に気持ちいいので試してみてください。

### パッケージ名の補完

Rを使っていくとまずは`library(kosaki)`といったようにライブラリを読み込むことになるのが通常。短いパッケージ名ならまだいいですが,長いパッケージ名(DiagrammeRなど)だとかなり面倒ですし,なによりタイポが辛いです。

でも安心してください。RStudioは**パッケージ名**も補完してくれます:

![hokan_02.png](https://qiita-image-store.s3.amazonaws.com/0/35118/9a3b06c4-3645-e62d-6d34-a78068713002.png)

もちろんインストールしてあるパッケージしかリストアップしませんが,かなり強力です。なおこれは`library()`の内部だけではなく,**`パッケージ名::`と呼び出す時でも有効**です:

![hokan_2-1.png](https://qiita-image-store.s3.amazonaws.com/0/35118/6aa2d5c4-42ed-52cb-5d68-6c68e78275e7.png)

また,これで指定したいパッケージで続けてTabキーを押せば,そのパッケージの関数一覧が表示されます:

![hokan_2-2.png](https://qiita-image-store.s3.amazonaws.com/0/35118/07a04e6f-6a6b-d318-b625-297fc4ccb02b.png)

もちろんこのあとも絞り込んでいけるので,ある程度入力してTabキーを押せばスムーズでしょう。

### Rオブジェクト名の補完

RStudioで補完してくれるのは関数名だけではありません。Rオブジェクトについても補完してくれます:

![hokan_03.png](https://qiita-image-store.s3.amazonaws.com/0/35118/535c9927-0b66-9d28-5e7d-e5dc9b742d72.png)

Rオブジェクトとしてdata.frameを読み込んでいるならば,上のような感じで出てきます。またはじめから組み込まれているデータセットも保管してくれます。これもまた便利です。

### オブジェクト内の要素を補完

要するに,以下のような感じです:

![hokan_04.png](https://qiita-image-store.s3.amazonaws.com/0/35118/00790d64-a80a-6048-61e9-b906383ad35f.png)

**関数のカッコ内でTabキーを押すと,このような感じになります**。おそらく引数として入るであろうものを候補としてあげてくれます。これが非常に便利です。なお,これは**まだGlobal.Envに入ってなくても`<ー`とかコード上で生成されるであろうものに対しても拾ってくる**のを確認してます…。

いろいろなパターンを試してみてください。例えばリストに関しては,こんな感じになります:

![hokan_06.png](https://qiita-image-store.s3.amazonaws.com/0/35118/d4d07e4d-467d-5e51-f802-ccd73fcb07a3.png)

ここから…

![hokan_07.png](https://qiita-image-store.s3.amazonaws.com/0/35118/58918a92-decb-eea5-198d-ed914857c370.png)

こんな感じへと,Tabキーで繋いでいけます。

### ディレクトリ名・ファイル名を補完

要するに,以下のような感じです:

![hokan_08.png](https://qiita-image-store.s3.amazonaws.com/0/35118/5875e60b-1135-ce30-16d3-aeda0d0d0625.png)

**ダブルクォーテーションを入れてTabキー**を押すと,このように作業ディレクトリ内のファイル一覧を表示します。ファイルを選択すれば,そのままファイル名が補完されます。なおここでディレクトリをTabキーで選択すると…

![hokan_09.png](https://qiita-image-store.s3.amazonaws.com/0/35118/e4388482-e5c9-a633-7865-078f2ad19850.png)

このように,**ディレクトリ名が入力補完されたうえで,その中へと進んで候補が出てくる**ようになります。これは非常に協力なので,ぜひ今後は活用してみてください。

## コードスニペット機能

### スニペットとは

現在のRStudioには,コードスニペット機能が実装されています。スニペット機能とは,簡単に言うと**よく使うようなフレーズを登録しといて,簡単に呼び出せて入力を楽にする**という機能です。コード補完とイメージは近いのですが,ちょっと違います。例として`fun`を取りあげます。

`fun`と入力すると,以下のように表示されます:

![snippet_01.png](https://qiita-image-store.s3.amazonaws.com/0/35118/20cbb2b4-2ad5-0f8b-e402-ee2434f28991.png)

この一番上にある,メモみたいなアイコンがついた`fun`というのが,funのスニペットです。これを選択してTabキー(あるいはShift + Tabキー,詳しくは脚注参照してください→)[^1]を押すと,以下のようになります:

[^1]: 途中までの入力で,画像のように候補としてスニペットが出ているときはTabキーでOkですが, `fun`と全て入力した場合にはTabキーでは反応しません。Shift + Tabキーとなります。てか基本は該当するスニペットのスペルを打ち切ってからShift + Tabキーです。この画像のパターンは「これを使いたいんじゃないの?」と気を使ってRStudioが出してきてくれてる,そういう感じです。そういう意味では補完機能ともいえるのかな?

![snippet_02.png](https://qiita-image-store.s3.amazonaws.com/0/35118/4a504845-ae69-548a-3956-9418dcb1eccd.png)

この時,自動的に`function()`関数が挿入されるのですが,`function`関数が出てくる場合によくあるパターンを想定して,それも自動的に入力されるようになってます。なおはじめに`name`が選択状態にあり,このまま格納する名前を入力します。このあとで**さらにTabキーを押すと,次の`variables`へと自動的にシフトします。
このように,まるで先回りして準備してくれている感覚で,さくさくと入力ができるようになるわけです。慣れるとすごく便利です。

### RStudioのスニペット一覧

RStudioにははじめからいろいろなスニペットが登録されています。確認方法は,メニューバーの[Tools] - [Global Options...]をクリックし,ダイアログボックス左側の[Code]を選択します:

![snippet_03.png](https://qiita-image-store.s3.amazonaws.com/0/35118/a3d3c643-0a70-c9c8-e72e-f26dfbc00716.png)

すると,上記のように表示されるので,一番下の**Snippets**から,**Edit Snippets...**をクリックしてください。すると,スニペット編集画面になります:

![snippet_04.png](https://qiita-image-store.s3.amazonaws.com/0/35118/280a0d25-df59-41d4-25f2-0a37c5201987.png)

思ったより少なめな印象ですが,いろんなファイル形式に対応しています。なおRmdはMarkdownと同一と考えてください。記法については眺めていればなんとなくつかめるかと思います。なお**このスニペットは自分で編集したり保存したり共有したりすることができます**。

このSnippetについては,以下の資料をぜひ確認してください:

- [Code Snippets &ndash; RStudio Support](https://support.rstudio.com/hc/en-us/articles/204463668-Code-Snippets?version=1.0.44&mode=server)
- [RStudio v0.99に搭載されたコードスニペット機能が便利 - Qiita](http://qiita.com/uri/items/50b651c2885b421e0ff4)

なお,R Scriptsファイル以外でそれぞれのファイル形式用のスニペット(とコード保管も?)を利用したいなら,一度そのファイルを保存してから試すようにしてください。そうしないとおそらくはうまくいかないと思います。

さらに,StanやHTMLにも対応しています。これらは一部の方には非常に魅力的に映るはずです。ぜひ試しましょう。

**Enjoy!**