Perl Hackers Hub

第76回コーディングを楽にする Perl Navigator ~便利機能をエディタに簡単導入!(1)

本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは岡林大さんで、テーマは「コーディングを楽にするPerl Navigator」です。

簡単で便利なPerl Navigator

みなさんがPerlを書くときに利用するエディタは何でしょうか。Perlのユースケースとしてサーバサイドで動く場面が多いことから、EmacsやVimを使っている人が多いのではないでしょうか。

いずれのエディタを利用するにしても、コードを書く際に文法を自動的にチェックしてくれたり、変数名や関数名を補完してくれたり、変数や関数の定義元にジャンプしてくれたりする機能があると便利です。そうした日々のコーディングを楽にしてくれる便利機能をまとめて提供してくれるのがPerl Navigatorです。

Perl Navigatorは、エディタの機能を抽象化したフレームワークであるLanguage Server[1]として実装されています。したがって、Language Serverに対応したVisual Studio Code(以下、VS Code⁠⁠、Emacs、Vim、Sublime Textなどのエディタで簡単に利用できます。中でも、VS Code向けには拡張機能として動作に必要なものがパッケージングされていて、数クリックで導入できます。

本稿では、Perl Navigatorの機能を網羅的に紹介します。また、開発環境に合わせた設定の勘所も解説します。エディタの操作手順やスクリーンショットはWindows版VS Codeバージョン1.73.1とPerl Navigatorバージョン0.3.6を用いて説明します。なお、筆者の開発環境では、WindowsローカルのVS CodeからWSL2にインストールしたLinuxのファイルを編集しています。したがって、本稿で紹介するファイルパスはLinux形式となります。また、いくつかのスクリーンショットでisucon12-finalのコードを使用しています。

サポート範囲が広いPerl Navigator

Perl NavigatorはWindows、Mac、Linuxに対応しています。また、Perl 5.8以降をサポートしているので、比較的古くから運用されているPerlアプリケーションのソースコードでも問題なく編集できます。実は、Perl Navigatorの登場以前からいくつかのLanguage Server実装が存在していました。しかし、それらはWindowsでは動かなかったりPerl 5.26以降でないと動かなかったりという都合の悪い点がありました。それに対してPerl Navigatorは、OSとPerlバージョンを広くサポートしているので安心して導入できます。

Perl Navigatorのインストール

ではさっそく、VS CodeにPerl Navigatorをインストールしてみます。手順はシンプルです。VS Codeの拡張機能のメニューで「perlnavigator」と入力し、図1のようにPerl Navigatorが検索結果に表示されたら、インストールボタンをクリックするだけです。

図1 Perl Navigatorのアイコンはお馴染みの動物
図1

VS Code以外のエディタでのインストール方法はPerl NavigatorのGitHubページを参照してください。

Perl Navigatorの便利機能

ではここからは、Perl Navigatorの便利な機能を一つ一つ紹介します。

文法チェック

基本中の基本とも言うべき機能ですが、Perl Navigatorはコードの文法を自動的にチェックしてくれます。図2は、use strict:という記述の末尾がセミコロン;であるべきなのに、コロン:になっているエラーの例です。文法エラーがあった場合、該当箇所に波線が表示され、そこにカーソルを合わせると詳細が表示されます。

図2 文法エラーがある場合の表示例
図2

この文法チェックはperl -cコマンドを用いたものですので、スクリプトが実際に実行されることはありません。そのため、実行に時間がかかる、もしくは破壊的挙動をするコードでも安心です。しかし、当然ですが、実行しないと発生しないエラーは検出できません。

変数や関数の定義元へのジャンプ

Perl Navigatorの目玉機能とも言えるのが定義元へのジャンプです。変数や関数にカーソルを合わせてF12キーを押すと、定義元に一発でジャンプできます。編集中のファイルの中にある変数や関数はもちろん、useまたはrequireによってロードされているライブラリの変数や関数にもジャンプできます。

定義元にジャンプする機能はコードの生産性を著しく向上してくれます。VimやEmacsでは以前からこの機能に対応できました。しかし、とりわけWindows向けのテキストエディタでは対応しているものが少なかったり、機能を使うための下準備が別途必要だったりするなど機能の維持が簡単ではありませんでした。一方、Perl Navigatorでは特別な操作なくインストールするだけで定義元ジャンプが利用できます。

定義元候補が複数ある場合

定義元にジャンプする機能は便利な反面、いつも機能するわけではありません。プログラミングの書き方によっては定義元が取得できず機能しなかったり、定義元が1つに絞り切れなかったりすることがあります。定義元が絞れない場合は複数の候補がポップアップ表示され、そこから手動で選択するとジャンプできます。

図3が複数の定義元候補が表示されている例です。この場合は、Perl Navigatorで$c->requestの定義が判別できないため、body_parametersメソッドがどのクラスのものか絞り切れていません。そのため、body_parametersメソッドを持つKossy::RequestPlack::Requestが候補に挙げられています。

図3 定義元候補が複数ある場合のポップアップ例
図3

打鍵数と誤入力を削減する自動補完

プログラミングをする際に、変数名や関数名が補完されると打鍵数が少なくなり楽です。Perl Navigatorでは、図4のように自動補完候補が提示されます。補完候補には、組込みの関数だけでなくユーザー定義による変数や関数、シンボルなどが含まれます。それに加えて、編集中のコードが依存するライブラリの中に定義された変数や関数も候補に挙がってきます。クラス名の補完にいたっては、ロード可能なクラスが漏れなく候補に挙がります。

図4 補完候補の表示例
図4

残念ながら、今のところ関数の引数や戻り値は補完されません。しかし、Perlの関数インタフェースはより明示的な方向に改善していっているので、将来に期待して待つことにしましょう。

オブジェクトや関数などの情報表示

オブジェクトを代入した変数や関数、useしているモジュールなどにカーソルを合わせると、図5のようにポップアップで補足情報が表示されます。たとえば、useしているモジュールについてはモジュールファイルの絶対パスを見せてくれます。オブジェクトや関数についてもその実体を見せてくれるので、特にPerl初心者には心強い機能でしょう。

図5 補足情報のポップアップ表示例
図5

<続きの(2)こちら。>

おすすめ記事

記事・ニュース一覧