こんにちは、エンジニアの id:mp0liiu です。
自分が所属しているチームでは現在もPerl製のプロダクトを運用しており、VSCode で Perl のコードを書いたり触ったりする機会が多いです。
Perl は開発環境が貧弱で他の言語と比べるとあまり開発体験はよくありませんが、それでも少しずつ便利な拡張機能が充実していってるので、この記事では自分が利用している便利な VSCode の Perl 向け拡張機能を紹介します。
Perl Navigator
今年話題になった Languager Server を利用した拡張機能です。
他にも Perl の Languager Server を利用した拡張機能はいくつか種類がありますが、以前から存在する拡張機能と比べると自動補完やコードジャンプがちゃんとできたり、Perl::Critic、Perl::Tidy、perlimports をまとめて扱ってくれる点が優れています。
環境にもよりますが、インストールするだけで基本的な機能は動作してくれます。
Perl::Critic と perlimports はバンドルされていないので別途インストールする必要があります。
使える機能はだいたい次のような感じです
- 文法チェック
- Perl::Critic によるコードの静的検査
サブルーチンの返り値を return で返しているかどうかをチェックする Subroutines::RequireFinalReturn を有効にしてチェックしたときの様子です
- 自動補完
- コードジャンプ
- Perl::Tidy によるコードフォーマット
- perlimports による use 周りのコードのクリーンアップ
- Object::Pad, Moose など DSL や keyword プラグイン系の構文のシンタックスハイライトへの対応
Perl(the96.vscode-perl)
ctags によるコードジャンプおよび自動補完と、Perl::Tidy によるコードフォーマットができる拡張機能です。
利用するには事前に ctags をインストールしておく必要があります。
機能的には Perl Navigator と重複しているのですが、 ctags を利用してコードジャンプや自動補完をしているので精度が悪くなるかわりに動的にモジュールをロードしている場合や型を推測しにくい変数からもコードジャンプや補完が効くといったメリットがあるため、 Perl Navigator と併用しつつ邪魔と感じたら無効化したりしています。
引数をポップアップで表示してくれるという点も少し嬉しいです。
(名前付き引数や引数のバリデーターには対応していませんが・・・)
Perl insert package
開いているファイル名と対応したパッケージ名を入力してくれるプラグインです。
コマンドパレットから実行するか、自動補完もオプションで有効にできます。
巨大なプロジェクトだと名前空間が深くなっていちいちファイル名と対応したパッケージ名を手動で入力するのは大変だし typo すると気づきにくくて大変なので重宝しています。
Perl Rename Symbol
App::PRT や App::EditorTools を利用して変数、メソッド名、パッケージ名など識別子を正確に rename してくれる拡張機能です。
リファクタリングをするときなどに重宝しています。
別途 App::PRT と App::EditorTools のインストールが必要です。
perl-auto-use
まだ use していないモジュールがある場合はファイルの先頭の方で use $module
を挿入してくれる拡張機能です。
コマンドパレットから使います。
外部モジュールの関数を使っていてまだ use していない、といった場合も場合も use $module qw( $function );
というようにモジュールを use しつつ利用している関数だけインポートしてくれますが、
同名の関数をもつモジュールが複数あったりすると期待したモジュールが挿入されるとは限らないので注意してください。
Better Perl Syntax
デフォルトの Perl の シンタックスハイライトから更に以下の字句に異なった色付けをしてくれるようになり、コードが見やすくなります。
- 数値
- 演算子
- 関数呼び出し
- 正規表現の文字クラス
^
が先頭につく特殊変数、$^V
など- 関数ブラケット
デフォルトのカラーテーマはこれらの字句の色付けに対応していないので、Material Theme などのカラーテーマと併用する必要があります。
また、Perl Navigator で有効になる DSL や keyword プラグイン系の構文のシンタックスハイライトにはシンタックスハイライトが効かなくなるので、それらのモジュール使っているときは無効にしています。
シンタックスハイライトにはいろいろ好みがあると思いますが、見やすくなると思うので一度試してみてはいかがでしょうか。
まとめ
以上、自分が利用している VSCode の Perl 向け拡張機能を紹介させていただきました。
ちゃんと型をもっている言語と比べるとどうしても劣ってしまいますが、これらの拡張機能を揃えるだけでもかなり開発体験はよくなるのでぜひ試してみてはいかがでしょうか!