Rユーザーの生産性を高める

RStudioが生産性を高める[前編] 〜コマンドパレットによる検索の効率化

RStudioはR言語ユーザ向けの統合開発環境(Integrated Development Environment; IDE)です。コンソールやファイラ、エディタといった主だったIDEの機能を持ち、RStudioさえあれば一通りの作業を進められます。これら以外にも、入力補完やキーボードショートカットなど、コーディングを効率化してくれる便利機能が目白押しです。

本稿では、多数の機能を検索して絞り込み、実行するコマンドパレットを起点に、生産性を高める方法を紹介します。RStudioの基本的な使い方に関してはRユーザのための RStudio[実践]入門などをご参照ください。以下の内容は2022.02.0 Build 443版のRStudioに基づきます。

コマンドパレットによる機能の検索と実行

キーボードショートカットはマウスを利用せずにさまざまな操作を実行でき、手札を増やせば増やすほど操作効率が上がっていきます。ただし、手札を増やすには積極的にショートカットを知る姿勢が求められますし、利用頻度が低ければ忘れてしまうこともあります。一方、キーボードショートカットを使わずにマウス操作でメニューを開いて機能を探すことはできますが、いくらメニューが階層化されていても、意外とすぐには見つけられず、しばしば隅から隅まで探す羽目になります。

そんなときのためにコマンドパレットの使い方だけは覚えておきましょう。コマンドパレットをキーボードショートカット(Windows:Ctrl+Shift+P、macOS:Cmd+Shift+Pで開くと、必要な機能を部分一致検索で絞り込めます図1⁠。

図1 コマンドパレット。「Run」で検索して、機能をフィルタしている
図1

たとえばソースファイルの全部または一部を実行したいときは、コマンドパレットで「Run」と検索してみましょう。すると、すべての行を実行する「Run All Code in Current Source File」や、現在行または選択行を実行する「Run Current Line or Selection」といった機能が候補に挙がります。このように、似た操作を提供するコマンドは、キーワードを共有している場合が多く、いくつかのキーワードを覚えていくと検索効率が改善していきます表1⁠。

表1 コマンドパレットでの検索によく登場するキーワードの例
検索キーワード 候補になるコマンドの概要
Create RファイルやRmdファイルなど、さまざまなファイルを新規作成するためのコマンド Create a New R Script
Close 主にファイルを閉じるためのコマンド。編集中のファイルを閉じる、編集中のファイル以外を閉じる、すべてのファイルを閉じるなどのパターンがある Close Current Document
Go 関数の定義や次のチャンクなどにカーソルを移動する Go To File/Function
Run 指定範囲のコードを実行する Run Current Line or Selection
Toggle 行の折り返しやアウトラインの表示など一部の設定のオン・オフを切り替える。ファイルの編集中に切り替えると便利な機能を一覧できる Toggle Soft Wrap Mode

コマンドパレット上の機能には、キーボードショートカットがあれば必要なキーの組み合わせが右側に表示されます。コマンドパレットを使いつつキーボードショートカットを覚えていくと、検索の手間も減らせます。⁠それでも覚えられない!」という方は、うまく覚える数を減らしてみましょう。たとえば、ソースコードを実行するキーボードショートカットには、指定範囲が異なる4つのパターンがあります表2⁠。

表2 コマンドパレットでの検索によく登場するキーワードの例
概要 Windows macOS
現在行または選択範囲を実行 Ctrl+Enter Cmd+Return
先頭行から現在行の直前まで実行 Ctrl+Alt+B Cmd+Option+B
現在行からファイル最終行まで実行 Ctrl+Alt+E Cmd+Option+E
すべて実行 Ctrl+Alt+R Cmd+Option+R

すべて覚えるのは大変そうですが、1つ目の「現在行または選択範囲を実行」さえ覚えておけば、文字列選択系のキーボードショートカットとの組み合わせで同等の操作を実現できます。たとえばWindowsなら、Ctrl+Aですべてを選択してから、Ctrl+Enterで選択範囲を実行すれば、結果的にすべてを実行できます。

文字列選択系のキーボード系のショートカットは、⁠すべてを選択」を除けば、キャレット移動のショートカットにShiftを加えればよく、覚えやすいです表3⁠。たとえばWindowsで先頭行に移動するキーボードショートカットはCtrl+Homeですから、先頭行から現在位置までを選択するキーボードショートカットはShift+Ctrl+Homeです。

表3 さまざまな範囲を選択するキーボードショートカットの例
概要 Windows macOS
すべてを選択 Ctrl+A Cmd+A
指定方向に範囲を変えて選択 Shift+矢印 Shift+矢印
現在位置から先頭行までを選択 Shift+Ctrl+Home Shift+Cmd+Home
現在位置から最終行までを選択 Shift+Ctrl+End Shift+Cmd+End

選択範囲に対して実行可能な操作は、実行(Windows:Ctrl+Enter、macOS:Cmd+Enter以外にも削除BackspaceまたはDelや検索(Windows:Ctrl+F、macOS: Cmd+Fなどがあり、文字の選択範囲をショートカットで選択できれば応用の幅が広がります。

ファイルや関数の検索

プロジェクトの規模が大きくなると、Filesペインから目的のファイルを開くまでに時間がかかることが増えます。また、どの関数をどのファイルに定義したかわからないこともあります。

このような場合は、コマンドパレットから「Go to File/Function」機能を使ってみましょう。専用の検索窓にファイル名や関数名を入力すると、選択候補が表示されます図2⁠。

図2 「Go to File/Function」機能によるファイルと関数のフィルタ。ここではファイル名や関数名に「mini」を含むものを検索している
図2

選択候補の左側には、ファイルの拡張子やR上の変数の種類に応じたアイコンが表示されます。また、選択候補が変数の場合は、変数を定義したファイルのパスも表示されます。

候補を選択すると、必要なファイルを開くか、すでに開いていれば該当タブに移動します。特に関数を選択した場合は、該当行へジャンプしてくれます。単純な文字列検索に比べ、確実性とファイル横断的な挙動が魅力です。

定義を知りたい関数にキャレットを移動させてコマンドパレットを開くと「Go to the definition of the currently selected function」機能が確認できます。⁠Go to File/Function」機能ではプロジェクト管理下にあるファイルや関数への移動しかできませんが、⁠Go to the definition of the currently selected function」機能であれば外部パッケージの関数定義を参照できます。

文字列の検索と置換

文字列の検索と置換はさまざまなエディタに存在する機能で、Microsoftのメモ帳やWordなどにも搭載されています。検索を開始するキーボードショートカットに馴染みのある方も多いかもしれません(Windows: Ctrl+F、macOS:Cmd+F⁠。

RStudioでも同様のキーボードショートカットを利用でき、コマンドパレットなら「Find / Replace Text…」で起動できます。正規表現による複雑なキーワードへのマッチ、一括置換の影響範囲の指定など、強力な機能を備えます。

正規表現を利用すると、特別なキーワードを使って、行頭や行末、改行といった特殊な条件にもマッチする検索ができます。正規表現を利用するには、検索窓の下部に存在するチェックボックスの中から「Regex」にチェックを入れてください。記述方法に関しては、Web上にも多数の紹介記事があるので、ご参照ください(例:サルにもわかる正規表現入門⁠。

特定範囲で文字列の一括置換を行うには、事前にマウスやキーボードで該当範囲を選択しておきます。たとえば、5行目から10行目の範囲だけ、TRUEFALSEに置換といったことができます。これによって想定外の場所まで置換する可能性を減らせます。範囲選択後に検索窓を開くと、自動で選択範囲に限定した文字列の検索と置換を行うモードになります。

図3 ソースコードの5行目から10行目を選択し、該当部分のTRUEFALSEに置換しようとしている様子。検索窓の右側にある「Replace」の更に右隣の「All」をクリックすると一括置換できる。
図3

変数の改名

変数名をxなどと仮置きした場合など、後から変数を改名したくなることがあると思います。前述の「文字列の検索と置換」が使えそうですが、変数名に無関係な箇所にも影響するおそれがあります。

コマンドパレットから「Rename Symbol in Scope」機能を実行すると、キャレット位置の変数を手軽に改名できます。⁠Rename Symbol in Scope」「Scope」は変数の依存範囲のことです(参考:スコープを意識したプログラミング―その1 スコープって何?⁠。この機能では、変数の改名を関数内に限定するか、関数の外も含めるかをコードの文脈から適切に判断してくれます。

スコープを限定した改名の重要性を以下のコードを例に考えてみましょう。例では3つの変数を定義します。

  • "f": 関数。Rでは関数も変数として扱える点に注意
  • "x": 数値。関数fの中と外で定義
  • "y": 数値。関数fの外で定義
f <- function() {
  x <- 20
  return(x + y)
}

x <- 2
y <- 1

print(f() + x + y)  # 24 

変数xのように、関数の中と外に同名で値の異なる変数があっては混乱や事故のもとです。2行目のx <- 20を削除すると、最終行の実行結果が24から6に変わってしまいます。

そこで関数の外にある変数xyXYに改名するとしましょう。適切に改名した後なら、2行目のx <- 20を削除すると実行結果はエラーに変わるので、コードの安全性が高まります。

スコープを気にせず改名してしまうと、関数fの中で定義した変数xXになってしまい、安全性が高い状況とは言えません。また、スコープを気にして目視で1つずつ確認しながら改名していては、漏れが起きるかもしれません。⁠Rename Symbol in Scope」機能を使えば、効率的かつ安全に改名できます。

図4 「Rename Symbole in Scope」機能による変数の改名の様子
図4

変数の命名は可読性を左右する重要な作業ですが、その分だけ悩める作業でもあります。気軽に改名できるとなれば、悩みは後回しにできます。ロジックをコードに落とし込むうちに良い名前が浮かぶかもしれません。

まとめ

本稿ではコーディングが捗るRStudioの便利機能を紹介しました。最初に紹介した通り、コマンドパレット機能は他の機能を検索・実行する起点になるので、まずはコマンドパレットを起動するキーボードショートカットを覚えましょう(Windows:Ctrl+Shift+P、macOS:Cmd+Shift+P⁠。実際に、ほとんどの機能がコマンドパレットから起動できます。

本連載はR言語の活用を効率化してくれる外部ツールを紹介していきます。R言語と追加パッケージを中心に生産性を高める術を紹介する書籍には、本連載の執筆陣が手がけたRが生産性を高める〜データ分析ワークフロー効率化の実践があります。合わせてご参照ください。RStudioの便利機能に関しても、キーボードショートカットや入力補完、アウトライン機能、R MarkdownのVisual Editor機能など、一部を紹介しています。

おすすめ記事

記事・ニュース一覧