JSON-RPC の Request は jsonrpc・method・params・id を束ねたもので、params と id は省略でき、id が無ければ返信してはいけない Notification になる。Type::Tiny の Maybe と InstanceOf で値オブジェクトを組み合わせ、受け取ったハッシュから from_hash で組み立てるまでを TDD で実装します。
Perl Advent Calendar 2025 の最終日。4週間で扱ったテーマを週ごとに振り返り、25日間を通して見えたベストプラクティス(テスト・エラー処理・モジュール化・ドキュメント)と、初心者・中級者・上級者それぞれの次の一歩をまとめます。
1987年の誕生から Perl 5、CPAN、YAPC::Asia と YAPC::Japan、Kansai.pm など日本の地域コミュニティ、モダン Perl と Perl 7・Raku の話、AI との関わりまでを概観し、コミュニティへの参加の仕方を紹介します。
実装を先に書くと、テストはその実装が通る形に寄っていく。JSON-RPC のメソッド名を表す MethodName を題材に、失敗するテストを先に書き、最小の実装で通し、整える。空文字・255/256 文字・"rpc." の予約接頭辞といった境目を Test2::V0 の dies・like・subtest で押さえます。
YAML・JSON・TOML・INI・Apache 風の設定ファイルを Perl で読む方法を形式ごとに解説し、環境別の設定、環境変数との統合、機密情報の扱い、バリデーション、動的なリロードを備えた設定管理クラスを組み立てます。
Web::Scraper と、Mojo::UserAgent + Mojo::DOM の2通りで、CSS セレクタによる抽出、JSON の処理、非同期の取得を書きます。ページネーション、ログイン、robots.txt の確認、エラー処理、アクセス間隔などのマナー、動的コンテンツの扱いまで解説します。
仕様書には、どの項目を値オブジェクトにし、どのルールをどこで検査するかまでは書いていない。JSON-RPC 2.0 の仕様を MUST・SHOULD・MAY で読み分けて制約を拾い出し、"2.0" しか受け付けない JsonRpc::Version を Perl で実装します。
Getopt::Long のオプション定義の記法、--no- 付きの否定、--verbose を重ねた回数を数える指定、デフォルト値と必須チェック、pod2usage によるヘルプ、サブコマンドの実装を解説します。ファイル検索ツールとデータ処理ツールの実装例、設定ファイルとの併用付き。
GitHub Copilotのエージェント連携の成功パターンを実体験から解説。AGENTS.mdのワークフロー定義とエージェントのname/descriptionの整合性が鍵。試行錯誤から見えた3つのポイントをDeNA LLM勉強会の知見も交えて紹介する、初心者から中級者まで役立つ実践ガイド。
Log::Log4perl の設定ファイル、ログレベルの使い分け、パターンレイアウト、複数のアペンダー、ローテーションを解説し、Log::Dispatch で複数の出力先に送る方法も扱います。アプリ用ロガークラス、処理時間の測定、JSON 形式のログといった実用例付き。
口座間で 100 を動かす関数は、通貨が違っても負の値でも黙って計算してしまう。金額を Money クラスに包み、変えられない・値で比べる・作る時に検証するの3つで守る。Perl と Moo で実装し、Test2 で確かめます。
Email::Sender でテキストメールを送り、SMTP サーバーや Gmail を指定する方法から始めて、Email::MIME による HTML メール・マルチパート・添付ファイル、Template Toolkit との連携、リトライ付きの送信クラス、アドレスのバリデーションまで解説します。
bcrypt と Argon2 によるパスワードのハッシュ化、AES による暗号化、公開鍵暗号、HMAC、ハッシュ関数を Crypt::* モジュールで実装します。鍵の管理、ソルト、タイミング攻撃の防ぎ方と、安全な API トークンの生成例付き。
イベント駆動の考え方から始めて、IO::Async と Mojo::IOLoop それぞれでタイマー、非同期 HTTP、外部プロセスの実行、WebSocket を書きます。複数ファイルの同時ダウンロードを実装例に、2つの性能も比べます。
Parallel::ForkManager で子プロセスを同時に走らせ、Web スクレイピング・バッチ処理・ログ解析を並列化します。子プロセスから結果を受け取る方法、エラーとタイムアウトの扱い、プロセス数の決め方、データベース接続での注意点まで解説します。