本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは岡林大さんで、テーマは
<前回
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の例では、パッケージ名とファイル名が合致しているべきなのにSameClass
とSomeClass
という記述に1文字相違があることを示しています。
![図1](/assets/images/dev/serial/01/perl-hackers-hub/0076/thumb/TH800_762-1.jpg)
Perl::Tidy
で整形処理
コードを書く際、記述の体裁を統一するために自動コード整形ツールを導入することがあると思います。PerlではPerl::Tidy
モジュールがコードの整形によく利用されます。Perl::Tidy
モジュールをインストールすると、PerlNavigatorでもエディタ上で整形する機能が導入できます。
コードの整形操作は、Shift+Alt+Fでファイル全体、Ctrl+K Ctrl+Fで選択範囲のみに実行できます。また、VS Codeのエディタやフォーマッタの設定において、ファイルを保存したときやペーストしたときに整形を自動適用できます。
App::perlimports
でモジュールの読み込みを自動整備
モジュールを読み込むuse
やrequire
の記述を整備するApp::perlimports
との連携もできます[1]。読み込んだモジュールが実際には使われていない場合、図2のように警告してくれます。図2ではuse Carp;
と記述していますが、実際は必要がないのでPerl::Tidy
と同じように整形操作によって自動的に適用できます。適用すると、use Carp;
の行は消えます。
App::perlimports
での警告表示例![図2](/assets/images/dev/serial/01/perl-hackers-hub/0076/thumb/TH800_762-2.jpg)
App::perlimports
との連携によって、モジュールの読み込みと同時にインポートする関数や定数について、暗黙的な記述を明示的に書き換えることも可能です。図3は、HTTP::Request::Common
の関数GET
が利用されているにもかかわらず、暗黙のインポートになっている例です。HTTP::Request::Common qw(GET)
という明示的な書き換えが提案されています。
![図3](/assets/images/dev/serial/01/perl-hackers-hub/0076/thumb/TH800_762-3.jpg)
また反対に、不要な関数や定数がインポートされてしまっている場合は、それらを削除することも可能です。
Perl Navigatorのカスタマイズ
ここまで、Perl Navigatorが持つ機能を紹介してきました。Perl Navigatorを実際に導入すると、編集するPerlコードが実行される環境によっては、デフォルトのままではいくつかの機能がうまく動かないことに気付くかと思います。Perl Navigatorには、そうした環境差分を吸収するための設定項目が用意されています。それぞれの環境に合わせた設定によって、Perl Navigatorの機能をフル活用できます。
VS Codeでのカスタマイズ方法は、Ctrl+,を押して設定メニューを開いてsettings.
ファイルを直接編集します。
VS Codeの設定に関する詳細は公式ページを参照してください。
以降では、代表的なカスタマイズ項目とsettings.
ファイルでの記述例を合わせて紹介します。
任意のPerlを利用する設定
Perl Navigatorのデフォルトでは、文法チェックなどにperl
コマンドそのものを利用します。いわゆるOSグローバルにインストールされたPerlが利用されます。しかし、開発環境のPerlアプリケーションでは、plenv
などでインストールされたPerlを利用している場面が多いと思います。そうしたOS組み込みのPerl以外を利用している場合は、Perl Navigatorに実際のperl
コマンドがどこにあるかを設定する必要があります。
任意のperl
コマンドの設定名は、perlnavigator.
です。
"perlnavigator.perlPath": "/path/to/.plenv/shims/perl"
ライブラリパスの設定
Perlがライブラリをロードする際に探索するディレクトリは@INC
に格納されています。Perlアプリケーションを実行する際に独自のライブラリパスを追加するために@INC
を操作している場合は、同様にライブラリパスをPerl Navigatorに伝える必要があります。
ライブラリパスの設定名は、perlnavigator.
です。
"perlnavigator.includePaths": [
"/path/to/MyApp/lib",
"/path/to/MyApp/extlib/lib/perl5",
"/path/to/MyApp/t/lib"
]
連携モジュールで個別設定
前述したPerl Navigatorと連携するCPANモジュールは、それぞれの挙動について任意の設定を記述してカスタマイズできます。こうした設定ファイルを利用する場合は、Perl Navigatorでもファイルの場所を記述する必要があります。
設定名は、perlnavigator.
という接頭辞に加えて、それぞれPerl::Critic
はperlcriticProfile
、Perl::Tidy
は perltidyProfile
、App::perlimports
はperlimports Profile
となります。
"perlnavigator.perlcriticProfile": "/path/to/MyApp/xt/.perlcriticrc",
"perlnavigator.perltidyProfile": "/path/to/MyApp/.perltidyrc",
"perlnavigator.perlimportsProfile": "/path/to/.perlimports.toml"
まとめ
今回は、Perlのコーディングを楽にして生産性を向上してくれるPerl Navigatorを紹介しました。とにかく導入が簡単という点は、最後にあらためて強調しておきたいと思います。もしまだ利用していない人はぜひこの機会に導入して、日々のコーディングに役立てて欲しいです。
さて、次回の執筆者はmomochiさんで、テーマは