Perl Advent Calendar 2025 完走!- 振り返りとこれから
25日間のPerl Advent Calendar 2025、ついに完走しました!この記事では、これまでの内容を振り返り、Perlの魅力を再発見し、次のステップについて考えます。
25日間の旅を振り返る
Week 1: Perlの基礎と実用的なモジュール
- Day 1: Mojolicious - モダンなWebフレームワークでWeb開発の楽しさを体験
- Day 2: Plack/PSGI - WebアプリケーションとWebサーバーの標準インターフェース
- Day 3: Carton - 依存関係管理でプロジェクトを再現可能に
- Day 4: Minion - バックグラウンドジョブ処理の決定版
- Day 5: DBIx::Class - 強力なO/Rマッパーでデータベースを自在に操る
- Day 6: Moo - 軽量で実用的なオブジェクトシステム
- Day 7: Type::Tiny - 型制約で安全性と可読性を向上
Week 2: テストと品質保証
- Day 8: Test::More - Perlテストの基本
- Day 9: Test2 - 次世代のテストフレームワーク
- Day 10: Devel::Cover - コードカバレッジで品質を可視化
- Day 11: Perl::Critic - コード品質の自動チェック
- Day 12: Devel::NYTProf - プロファイリングでパフォーマンス改善
- Day 13: Perl Debugger - デバッグ技法の極意
- Day 14: ベストプラクティス - 実践的なコーディング規約
Week 3: 実用的なツールとライブラリ
- Day 15: 日時処理 - Time::Piece, DateTime, Time::Moment
- Day 16: JSON/YAML/XML - データ形式の変換と処理
- Day 17: 非同期処理 - IO::Async と Mojo::IOLoop
- Day 18: 暗号化 - Crypt::* モジュール群でセキュリティ対策
- Day 19: メール送信 - Email::* モジュールで確実な配信
- Day 20: ロギング - Log::Log4perl と Log::Dispatch
- Day 21: コマンドライン引数 - Getopt::Long でCLIツール作成
Week 4: Perlの深淵と未来
- Day 22: Webスクレイピング - Web::Scraper と Mojo::UserAgent
- Day 23: 設定ファイル管理 - Config::* モジュール
- Day 24: Perlの歴史とコミュニティ - YAPC, Kansai.pm
- Day 25: 完走記念 - 振り返りとこれから(この記事)
Perlの魅力を再発見
1. 強力なテキスト処理
1
2
3
4
5
6
7
8
9
10
11
12
| # 正規表現の威力
my $text = "Email: user@example.com, Phone: 090-1234-5678";
my ($email) = $text =~ /(\S+@\S+\.\S+)/;
my ($phone) = $text =~ /([\d-]+)/;
say "Email: $email";
say "Phone: $phone";
# 一行でファイル処理
perl -ne 'print if /error/i' logfile.txt
perl -pi.bak -e 's/old/new/g' *.txt
|
Perlの正規表現は、今でも多くの言語のお手本となっています。
2. CPAN の豊富なエコシステム
1
2
3
4
5
6
7
8
9
| # 問題のほとんどはCPANで解決
use LWP::UserAgent; # HTTP通信
use DBI; # データベース
use JSON::MaybeXS; # JSON処理
use Path::Tiny; # ファイル操作
use DateTime; # 日時処理
use Imager; # 画像処理
use PDF::API2; # PDF生成
use Excel::Writer::XLSX; # Excel作成
|
40,000以上のモジュールが、あなたの問題解決を待っています。
3. TMTOWTDI - 柔軟性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 配列の合計を求める方法
# 方法1: ループ
my $sum = 0;
$sum += $_ for @numbers;
# 方法2: List::Util
use List::Util qw(sum);
my $sum = sum @numbers;
# 方法3: reduce
use List::Util qw(reduce);
my $sum = reduce { $a + $b } @numbers;
# どれも正解!状況に応じて選べる
|
4. 実用性第一
1
2
3
4
5
6
7
8
| # Perlは実用的な問題を解決する
use Mojo::UserAgent;
use Mojo::DOM;
# たった数行でWebスクレイピング
my $ua = Mojo::UserAgent->new;
my $dom = $ua->get('https://example.com')->res->dom;
$dom->find('h1')->each(sub { say $_->text });
|
25日間で学んだベストプラクティス
1. テストを書く
1
2
3
4
5
6
7
8
| use Test::More;
# テストは仕様書であり、安全網
ok my $obj = MyClass->new, 'constructor works';
is $obj->method, 'expected', 'method returns correct value';
like $obj->message, qr/success/, 'message contains success';
done_testing;
|
2. エラーハンドリング
1
2
3
4
5
6
7
8
| use Try::Tiny;
try {
my $result = risky_operation();
} catch {
warn "Error occurred: $_";
# エラー処理
};
|
3. モジュール化
1
2
3
4
5
6
7
8
9
| package MyApp::Util;
use Exporter 'import';
our @EXPORT_OK = qw(helper_function);
sub helper_function {
# 再利用可能な関数
}
1;
|
4. ドキュメント
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| =head1 NAME
MyModule - What this module does
=head1 SYNOPSIS
use MyModule;
my $obj = MyModule->new;
$obj->do_something;
=head1 DESCRIPTION
This module provides...
=cut
|
次のステップ
初心者の方へ
- 基礎を固める: Learning Perl(通称ラクダ本)で基礎を学ぶ
- 小さなスクリプトを書く: ファイル処理、テキスト変換など
- CPANを探検: 問題に対してどんなモジュールがあるか調べる
- コミュニティに参加: Perl入学式、Kansai.pm などの勉強会へ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 最初の一歩
use strict;
use warnings;
use feature 'say';
say "Hello, Perl World!";
# そして次の一歩
my @files = glob '*.txt';
for my $file (@files) {
open my $fh, '<', $file or die $!;
while (my $line = <$fh>) {
say $line if $line =~ /search_term/;
}
close $fh;
}
|
中級者の方へ
- モダンPerl: Moo/Moose、Type::Tiny、Plackを使いこなす
- Webアプリ開発: Mojoliciousで本格的なアプリケーションを作る
- CPANに貢献: バグ報告、パッチ送信、自作モジュールの公開
- テストを極める: Test2、カバレッジ、CI/CD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # モダンなPerlコード
use v5.20;
use Moo;
use Types::Standard qw(Str Int);
has name => (
is => 'ro',
isa => Str,
required => 1,
);
has age => (
is => 'ro',
isa => Int,
default => 0,
);
|
上級者の方へ
- パフォーマンス最適化: Devel::NYTProf、XS、インラインC
- アーキテクチャ設計: 大規模アプリケーションの設計パターン
- コミュニティ貢献: YAPCでの発表、メンタリング
- 新技術との融合: AI、機械学習、コンテナ技術とPerl
Perlを続ける理由
1. 楽しい
1
2
3
4
| # Perlは書いていて楽しい
$_ = "Just another Perl hacker,";
tr/a-zA-Z/n-za-mN-ZA-M/;
say; # Whfg nabgure Crey unpxre,
|
2. 実用的
1
2
3
4
5
6
| # 実際の業務で使える
use DBI;
use Email::Sender::Simple;
use Template;
# データベース→処理→メール送信が数十行で完結
|
3. 進化している
1
2
3
4
5
6
7
8
9
10
| # Perlは止まっていない
use v5.36;
use feature 'signatures';
sub greet($name, $title = 'Mr.') {
say "Hello, $title $name";
}
greet('Smith'); # Hello, Mr. Smith
greet('Alice', 'Dr.'); # Hello, Dr. Alice
|
4. コミュニティが温かい
- Perl入学式: 初心者を歓迎
- YAPC: 技術と交流の場
- Kansai.pm: 地域コミュニティ
- PerlMonks: オンラインでの助け合い
2025年のPerl
トレンド予測
- Mojolicious: さらなる進化とシェア拡大
- Type::Tiny: 型安全性の標準化
- Perl 7: モダンなデフォルト設定
- AIとの融合: LLMを活用した開発支援
- コンテナ化: Docker、Kubernetesとの統合
私たちができること
1
2
3
4
5
6
7
8
9
10
11
12
| # 2025年の抱負
my @goals = (
'Write more tests',
'Contribute to CPAN',
'Attend YAPC',
'Share knowledge',
'Have fun with Perl',
);
for my $goal (@goals) {
say "✓ $goal";
}
|
感謝
コミュニティへの感謝
- Larry Wall: Perlの創造者
- CPANの作者たち: 無数のモジュールを提供
- Kansai.pm: 学びと交流の場
- YAPCオーガナイザー: 素晴らしいカンファレンス
- すべてのPerlモンガース: コミュニティを支える人々
読者への感謝
この25日間のAdvent Calendarを読んでくださり、ありがとうございました。Perlの魅力が少しでも伝われば嬉しいです。
最後に
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #!/usr/bin/env perl
use v5.36;
use feature 'say';
sub main {
say "Perl Advent Calendar 2025 - 完走!";
say "";
say "25日間、お疲れ様でした。";
say "そして、ありがとうございました。";
say "";
say "Perlの旅は、まだまだ続きます。";
say "Happy Hacking with Perl!";
say "";
say "See you at YAPC 2025!";
}
main();
__END__
=head1 THANK YOU
To all Perl mongers, CPAN authors, and community members.
You make Perl great!
=head1 KEEP HACKING
There's more than one way to do it.
Easy things should be easy, and hard things should be possible.
Perl is the duct tape of the Internet.
And most importantly:
Have fun!
=cut
|
来年も
Perl Advent Calendar 2025でお会いしましょう!
#PerlAdventCalendar2025 #ThankYou #HappyHacking #Kansaipm #YAPC
※ この記事は、Perl Advent Calendar 2025の最終日(Day 25)を飾る記事です。
※ すべての記事は、Perl愛とコミュニティへの感謝を込めて書かれました。
※ ご質問やフィードバックは、Kansai.pmやSNSでお気軽にどうぞ!