この記事はPerl Advent Calendar 2024、14日目の記事です。昨日はaragathさんによる次のPerlはPerl 42(かも)でした。確かに5.40の5.の部分って変わらないしバージョン番号としては意味がないよな(そもそもバージョン番号ではなく言語名の方含まれる)とは思っていましたが、もし5がなくなると寂しい感じはしますね。ただMySQLも5.7の次が8だったもんな、と考えるとそういう流れかもしれません。
この記事の元ネタ
aquaって何?
suzuki-shunsukeさんが開発を行なっているCLIツールのパッケージマネージャーです。僕がよく使うのはterraformです。デプロイツールであるecspressoやlambrollなども入れられます。
他のパッケージマネージャーとしてはhomebrewや、asdfがあります。これらとの違いは、aquaはビルドツールの実行を(ほとんどのケースでは)しないという点です。これにより速やかにツールのインストールができたり、ビルドツールの差異などでインストールが失敗するということがありません。
また、良い点として、インストールされているCLIのバージョンを設定するaqua.yamlが配置されたディレクトリ以下では、そのCLIツールのバージョンに固定される点です。プロジェクトごとに使っているCLIのバージョンが違う場合でも、スムーズに作業ができます。
また、僕は最近は言語ランタイムもaquaで管理しています。具体的にはGoとbun(TypeScript)です。Dockerを使えばいいのにという指摘もあるかと思いますが、この2つの言語はプラットフォームによる差異があまりなく、むしろDockerのオーバーヘッドであったり、制限に振り回されるデメリットの方が大きいので、最近はDockerを使わずにaquaでランタイムを管理し、ホスト側に完結してWebアプリケーション開発を行なっています。
perlを入れて使えるようになりましたとは?
以下のPull Requestでaquaで入れられるツールを管理する、aquaproj/aqua-registryに追加していただきました。
具体的に使う手順を示します。まず、aquaを使える状態にして、次のコマンドでカレントディレクトリにaqua.yamlを作成します。
$ aqua init
そして、今回追加したパッケージである、skaji/relocatable-perlをaqua.yamlに導入します。
$ aqua g -i skaji/relocatable-perl
最後に、以下のコマンドで、実際にパッケージを落としてきてインストールします。
$ aqua i
これでaqua経由で入れたperlが使えるようになりました。
$ which perl /Users/mackee/.local/share/aquaproj-aqua/bin/perl $ perl -v This is perl 5, version 40, subversion 0 (v5.40.0) built for darwin-2level Copyright 1987-2024, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at https://www.perl.org/, the Perl Home Page.
使用上の注意点としては、cpanmでモジュールを入れた時の、実行スクリプトのパスです。僕の設定の場合は、~/.local/share/aquaproj-aqua/pkgs/github_release/github.com/skaji/relocatable-perl/5.40.0.1/perl-darwin-arm64.tar.gz/perl-darwin-arm64/bin/に置かれてしまいます。インストールされているperlのバージョンごとにパスを通すのは困難なので、次の例のようにcpanm -L localのようにカレントディレクトリ配下に入れて利用するのが良いと思われます。
$ cpanm -L local App::cpm ... $ ./local/bin/cpm --version cpm 0.997021 (./local/bin/cpm) perl version v5.40.0 (/Users/mackee/.local/share/aquaproj-aqua/pkgs/github_release/github.com/skaji/relocatable-perl/5.40.0.1/perl-darwin-arm64.tar.gz/perl-darwin-arm64/bin/perl)
skaji/relocatable-perlって何
skajiさんが作成している、ビルド済みのポータブルなperlパッケージです。perlをインストールするには、本来gccやclangなどのC言語コンパイラや、その他ビルドツールが必要ですが、relocatable-perlではビルド済みなので不要です。また、インストールするディレクトリを選ばない特徴があります。
このような特徴があるため、インストール時にビルドを行わないaquaであってもperlを入れることができます。
なお、Node.jsではこのようなバイナリが公式で配布されています。そしてNode.jsはaquaですでに利用可能です。Pythonではryeが利用しているgithub.com/indygreg/python-build-standaloneがあります。RubyではHomebrewが利用しているHomebrew/homebrew-portable-rubyがあります。python-build-standaloneはすでにaquaの作者の方によるPull Requestがありますが、Rubyは存在しません。Rubyの方でいいなと思われた方は、コントリビューションチャンスかと思います。
なんでperlなの
僕は常々、シェルスクリプトで複雑なメンテナンススクリプトの類を書くのは思考停止的で違う手段も検討した方が良いのではないかと唱えています。
先日YAPC::Hakodate 2024で発表もしました。
一方で、perlはほとんどの開発者の環境に入ってはいるものの、バージョン管理であったりすでに入っているperl環境を汚さずに利用することは少々知識が必要です。なので、aquaというツールに乗って、シェルスクリプトの代わりにperlを利用することを手助けできないかと考えて、利用できるようにしてみました。
さて、明日のPerl Advent Calendar 2024 15日目はAnaTofuZさんで「なんかかきます」です。何が出てくるでしょうね? 楽しみですね