Featured image of post 値を束ねたとたん、省略してよい項目の扱いが崩れる。値オブジェクトを組み合わせる【複合値オブジェクト】

値を束ねたとたん、省略してよい項目の扱いが崩れる。値オブジェクトを組み合わせる【複合値オブジェクト】

JSON-RPC の Request は jsonrpc・method・params・id を束ねたもので、params と id は省略でき、id が無ければ返信してはいけない Notification になる。Type::Tiny の Maybe と InstanceOf で値オブジェクトを組み合わせ、受け取ったハッシュから from_hash で組み立てるまでを TDD で実装します。

Featured image of post 25日間で何を扱ったか。週ごとの振り返りと、レベル別の次の一歩【Perl Advent Calendar 2025 最終日】

25日間で何を扱ったか。週ごとの振り返りと、レベル別の次の一歩【Perl Advent Calendar 2025 最終日】

Perl Advent Calendar 2025 の最終日。4週間で扱ったテーマを週ごとに振り返り、25日間を通して見えたベストプラクティス(テスト・エラー処理・モジュール化・ドキュメント)と、初心者・中級者・上級者それぞれの次の一歩をまとめます。

連載 Perl Advent Calendar 2025 (第25話 / 全25話)
Featured image of post テストを後から書くと、実装に合わせた甘いテストになる。失敗するテストから書く【Red-Green-Refactor】

テストを後から書くと、実装に合わせた甘いテストになる。失敗するテストから書く【Red-Green-Refactor】

実装を先に書くと、テストはその実装が通る形に寄っていく。JSON-RPC のメソッド名を表す MethodName を題材に、失敗するテストを先に書き、最小の実装で通し、整える。空文字・255/256 文字・"rpc." の予約接頭辞といった境目を Test2::V0 の dies・like・subtest で押さえます。

Featured image of post 開発・本番で設定を切り替え、パスワードはコードに書かない【YAML / JSON / TOML / INI】

開発・本番で設定を切り替え、パスワードはコードに書かない【YAML / JSON / TOML / INI】

YAML・JSON・TOML・INI・Apache 風の設定ファイルを Perl で読む方法を形式ごとに解説し、環境別の設定、環境変数との統合、機密情報の扱い、バリデーション、動的なリロードを備えた設定管理クラスを組み立てます。

Featured image of post Web ページから必要なデータだけを CSS セレクタで抜き出す【Web::Scraper / Mojo::UserAgent】

Web ページから必要なデータだけを CSS セレクタで抜き出す【Web::Scraper / Mojo::UserAgent】

Web::Scraper と、Mojo::UserAgent + Mojo::DOM の2通りで、CSS セレクタによる抽出、JSON の処理、非同期の取得を書きます。ページネーション、ログイン、robots.txt の確認、エラー処理、アクセス間隔などのマナー、動的コンテンツの扱いまで解説します。

Featured image of post --help もサブコマンドもあるコマンドラインツールを、標準モジュールで作る【Getopt::Long】

--help もサブコマンドもあるコマンドラインツールを、標準モジュールで作る【Getopt::Long】

Getopt::Long のオプション定義の記法、--no- 付きの否定、--verbose を重ねた回数を数える指定、デフォルト値と必須チェック、pod2usage によるヘルプ、サブコマンドの実装を解説します。ファイル検索ツールとデータ処理ツールの実装例、設定ファイルとの併用付き。

Featured image of post print デバッグをやめて、レベル別・出力先別にログを残す【Log::Log4perl / Log::Dispatch】

print デバッグをやめて、レベル別・出力先別にログを残す【Log::Log4perl / Log::Dispatch】

Log::Log4perl の設定ファイル、ログレベルの使い分け、パターンレイアウト、複数のアペンダー、ローテーションを解説し、Log::Dispatch で複数の出力先に送る方法も扱います。アプリ用ロガークラス、処理時間の測定、JSON 形式のログといった実用例付き。

Featured image of post HTML メールも添付ファイルも、SMTP 経由で送る【Email::Sender / Email::MIME】

HTML メールも添付ファイルも、SMTP 経由で送る【Email::Sender / Email::MIME】

Email::Sender でテキストメールを送り、SMTP サーバーや Gmail を指定する方法から始めて、Email::MIME による HTML メール・マルチパート・添付ファイル、Template Toolkit との連携、リトライ付きの送信クラス、アドレスのバリデーションまで解説します。

Featured image of post パスワードの保存、データの暗号化、改ざん検知を Perl で正しく書く【Crypt::* モジュール】

パスワードの保存、データの暗号化、改ざん検知を Perl で正しく書く【Crypt::* モジュール】

bcrypt と Argon2 によるパスワードのハッシュ化、AES による暗号化、公開鍵暗号、HMAC、ハッシュ関数を Crypt::* モジュールで実装します。鍵の管理、ソルト、タイミング攻撃の防ぎ方と、安全な API トークンの生成例付き。

Featured image of post 待ち時間の多い処理を、プロセスを増やさず1本のイベントループでさばく【IO::Async / Mojo::IOLoop】

待ち時間の多い処理を、プロセスを増やさず1本のイベントループでさばく【IO::Async / Mojo::IOLoop】

イベント駆動の考え方から始めて、IO::Async と Mojo::IOLoop それぞれでタイマー、非同期 HTTP、外部プロセスの実行、WebSocket を書きます。複数ファイルの同時ダウンロードを実装例に、2つの性能も比べます。

Featured image of post 1件ずつ順番に処理していたバッチを、プロセスを分けて同時に回す【Parallel::ForkManager】

1件ずつ順番に処理していたバッチを、プロセスを分けて同時に回す【Parallel::ForkManager】

Parallel::ForkManager で子プロセスを同時に走らせ、Web スクレイピング・バッチ処理・ログ解析を並列化します。子プロセスから結果を受け取る方法、エラーとタイムアウトの扱い、プロセス数の決め方、データベース接続での注意点まで解説します。