Shogo's Blog

Sep 3, 2023 - 2 minute read - perl

湘南.pm #1 で「趣味でPerlのビルドをしている話」をしてきた

すでに一週間が過ぎ、今更感がありますが・・・ 「ブログに書くまでがYAPC」もといPerl Mongersという言葉もあるのでやっていきましょう。

@__papix__に声をかけていただき、8/26に開催された湘南.pm #1で発表してきました。 「趣味でPerlのビルドをしている話」と題して、AWS::Lambdaactions-setup-perlのお話をしてきました。

趣味でPerlのビルドをしている話

資料はSpeaker Deckを見てもらうとして、簡単に補足等します。

AWS::Lambda

うっかりサンプルコードの末尾に 1; を付けてしまいましたが、なんと!最新のPerlでは不要になりました!

use 5.38;
use utf8;

sub handle ($payload, $context) {
    return $payload;
}

# 1;
# ↑ スライド資料では付けてしまったけど、なくてよい

これは use 5.38module_true feature が有効化されるためです。 詳細は「Perlのmodule_trueフラグを先取り!」という記事を書いたのでそちらをどうぞ。 この記事を書いたときは開発版のPerlで試しましたが、 Perl 5.38 で正式リリースされています。

Perl Hackers Hub に掲載したサンプルコードを流用したことがバレてしまう・・・。


さて、このサンプルコード、他にもPerlの(比較的)新しい機能を使っているのですが、気がついたひとはいますか? 実は引数の受け取り方が変わっています!

Perlには元々「サブルーチンの引数を定義する構文」がありませんでした。 @_ という記号を使うか、 shift などの配列操作関数を使います。

use utf8;

# 昔からある引数の受け取り方
sub handle {
    my ($payload, $context) = @_;
    return $payload;
}

1;

記号が多くて大変初心者泣かせですね。

そこで、Perl 5.36 から signatures feature が有効化されるようになりました。 この機能を有効化するとサブルーチンに引数リストを書くことができます。

use 5.38; # use feature qw(signatures); で個別に有効化も可能
use utf8;

sub handle ($payload, $context) { # 引数リストを書ける!!!
    return $payload;
}

たった5行の短いサンプルコードですが、最近のPerlのアップデートを感じることのできる、味わい深いコードに仕上げました。

actions-setup-perl

今はビルドしたバイナリをGitHub Releasesにアップロードしています。 そこにたどり着くまでは紆余曲折ありました。

Amazon S3, Azure Blob Storage と試してきたのですが、やはりネックになるのはお金。 その点GitHub Releasesは無料なのがありがたい!

発表の中で「408通りのPerlをビルドしている」とお話しました。 これはつまり「408個のPerlのバイナリ」ができるというわけです(進次郎構文)。 「そんなに大量のファイルをGitHub Releasesに突っ込んで大丈夫か?」という点が不安だったので、 GitHub Releasesは避けていました。だってそんなに突っ込む人間他にいないでしょ?

コストの増加に耐えられなくなってGitHub Releasesに移行してみたら、案外行けました。 案ずるより産むが易し、ですね。


「Perl Coreとその他のモジュールをわけてアップロードしないのはなぜ?」という趣旨の質問がありました。 actions-setup-perlは現代のコンピューター処理において欠かせないSSLやJSONといったモジュールを含んでいます。 これらのモジュールは今も開発が進んでいるので、ときどき更新入ります。 一方Perl Coreは、一度リリースされたものに関しては更新が入りません。 更新頻度が違うので、Perl Coreとこれらのモジュールを分離すれば、計算効率も空間効率も上がるのでは?という意図だと思います。

計算効率も空間効率も上がるのは、そのとおりです。実行に移してないのは主に僕のモチベーションの問題ですね。動くものができたので、ひとまずそこで満足しています。 お金の問題もひとまずの解決を見たので、そこまでの優先度がないのです。

他の方の発表等

一週間も経ってだいぶ記憶があやふやな部分がありますが、覚えているものだけ簡単にメモ。

YAPC::Hiroshima 2024

YAPC::Hiroshima 2024の開催日程および会場は, 以下の通りです. 開催日

2024年2月10日(土曜日)

会場

広島国際会議場

とのことです! 広島・・・行ったことないな。

Go向けORM sqllaの紹介とJOINやUNIONを含んだクエリの扱い方

ドキュメントでプログラミング言語に貢献する

この発表ではじめて perldoc.jp のソースコード管理がGitHubに移行しているのを知りました。

Perl 5.34がリリースされたときに誤字を見つけて報告したことがあります。今ならそのままプルリクエストを送ることができるわけです。これは便利。

エンジニア育成に効くかもしれないレイヤードアーキテクチャーっぽいソフトウェア設計

お土産

主催者が「みなさんYAuthがあって大変でしょうから」と紹介してくれたお土産です。僕も同じものを買いました。 美味しかった。

まとめ

8/26に開催された湘南.pm #1で「趣味でPerlのビルドをしている話」をしてきました。

参考