Perl Hackers Hub

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

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

<前回(1)こちら。>

Perlモジュールと連携した便利機能

さて、ここまではPerl Navigatorをインストールするだけで有効になる機能を紹介してきましたが、ここからは追加のPerlモジュールをインストールして利用できる便利な機能を紹介します。

Perl::Criticで品質検査

Perlには、伝統的なソースコードの静的解析モジュールとしてPerl::Criticがあります。Perl::Criticの導入によって、さまざまなコーディング規約に守られたコードを書けます。一般的には、Perl::Criticをテスティングの文脈で使うことを意図したTest::Perl::Criticモジュールを使って解析を実行していると思いますが、Perl Navigatorではエディタ上でリアルタイムに解析結果を見られます。

図1は、Perl::Criticでの警告表示例です。前述した文法エラーの表示と同じように警告の該当箇所に波線が引かれ、カーソルを合わせると詳細が表示されます。Critic:に続く表示がPerl::Criticの警告になります。図1の例では、パッケージ名とファイル名が合致しているべきなのにSameClassSomeClassという記述に1文字相違があることを示しています。

図1 Perl::Criticでの警告表示例
図1

Perl::Tidyで整形処理

コードを書く際、記述の体裁を統一するために自動コード整形ツールを導入することがあると思います。PerlではPerl::Tidyモジュールがコードの整形によく利用されます。Perl::Tidyモジュールをインストールすると、PerlNavigatorでもエディタ上で整形する機能が導入できます。

コードの整形操作は、ShiftAltFでファイル全体、CtrlK CtrlFで選択範囲のみに実行できます。また、VS Codeのエディタやフォーマッタの設定において、ファイルを保存したときやペーストしたときに整形を自動適用できます。

App::perlimportsでモジュールの読み込みを自動整備

モジュールを読み込むuserequireの記述を整備するApp::perlimportsとの連携もできます[1]。読み込んだモジュールが実際には使われていない場合、図2のように警告してくれます。図2ではuse Carp;と記述していますが、実際は必要がないので「perlimports: appears to be unused and should be removed」と表示されています。また、警告と合わせて表示されている差分は、Perl::Tidyと同じように整形操作によって自動的に適用できます。適用すると、use Carp;の行は消えます。

図2 App::perlimportsでの警告表示例
図2

App::perlimportsとの連携によって、モジュールの読み込みと同時にインポートする関数や定数について、暗黙的な記述を明示的に書き換えることも可能です。図3は、HTTP::Request::Commonの関数GETが利用されているにもかかわらず、暗黙のインポートになっている例です。HTTP::Request::Common qw(GET)という明示的な書き換えが提案されています。

図3 暗黙の関数を自動的に明示する例
図3

また反対に、不要な関数や定数がインポートされてしまっている場合は、それらを削除することも可能です。

Perl Navigatorのカスタマイズ

ここまで、Perl Navigatorが持つ機能を紹介してきました。Perl Navigatorを実際に導入すると、編集するPerlコードが実行される環境によっては、デフォルトのままではいくつかの機能がうまく動かないことに気付くかと思います。Perl Navigatorには、そうした環境差分を吸収するための設定項目が用意されています。それぞれの環境に合わせた設定によって、Perl Navigatorの機能をフル活用できます。

VS Codeでのカスタマイズ方法は、Ctrl,を押して設定メニューを開いて「拡張機能」メニューの中から「Perl Navigator」を選択してGUIGraphical User Interfaceで設定するか、設定内容が保存されるsettings.jsonファイルを直接編集します。

VS Codeの設定に関する詳細は公式ページを参照してください。

以降では、代表的なカスタマイズ項目とsettings.jsonファイルでの記述例を合わせて紹介します。

任意のPerlを利用する設定

Perl Navigatorのデフォルトでは、文法チェックなどにperlコマンドそのものを利用します。いわゆるOSグローバルにインストールされたPerlが利用されます。しかし、開発環境のPerlアプリケーションでは、plenvなどでインストールされたPerlを利用している場面が多いと思います。そうしたOS組み込みのPerl以外を利用している場合は、Perl Navigatorに実際のperlコマンドがどこにあるかを設定する必要があります。

任意のperlコマンドの設定名は、perlnavigator.perlPathです。

コード1 settings.json
"perlnavigator.perlPath": "/path/to/.plenv/shims/perl"

ライブラリパスの設定

Perlがライブラリをロードする際に探索するディレクトリは@INCに格納されています。Perlアプリケーションを実行する際に独自のライブラリパスを追加するために@INCを操作している場合は、同様にライブラリパスをPerl Navigatorに伝える必要があります。

ライブラリパスの設定名は、perlnavigator.includePathsです。

コード2 settings.json
"perlnavigator.includePaths": [
    "/path/to/MyApp/lib",
    "/path/to/MyApp/extlib/lib/perl5",
    "/path/to/MyApp/t/lib"
]

連携モジュールで個別設定

前述したPerl Navigatorと連携するCPANモジュールは、それぞれの挙動について任意の設定を記述してカスタマイズできます。こうした設定ファイルを利用する場合は、Perl Navigatorでもファイルの場所を記述する必要があります。

設定名は、perlnavigator.という接頭辞に加えて、それぞれPerl::CriticperlcriticProfilePerl::TidyperltidyProfileApp::perlimportsperlimports Profileとなります。

コード3 settings.json
"perlnavigator.perlcriticProfile": "/path/to/MyApp/xt/.perlcriticrc",
"perlnavigator.perltidyProfile": "/path/to/MyApp/.perltidyrc",
"perlnavigator.perlimportsProfile": "/path/to/.perlimports.toml"

まとめ

今回は、Perlのコーディングを楽にして生産性を向上してくれるPerl Navigatorを紹介しました。とにかく導入が簡単という点は、最後にあらためて強調しておきたいと思います。もしまだ利用していない人はぜひこの機会に導入して、日々のコーディングに役立てて欲しいです。

さて、次回の執筆者はmomochiさんで、テーマは「モジュールの自動インポートによる開発効率向上」です。お楽しみに。

おすすめ記事

記事・ニュース一覧