Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyの国のPerlMonger
Search
AnaTofuZ
August 02, 2025
Technology
0
280
Rubyの国のPerlMonger
Hackers Champloo 2025でのトークです
https://hackers-champloo.org/2025/
AnaTofuZ
August 02, 2025
Tweet
Share
More Decks by AnaTofuZ
See All by AnaTofuZ
Pythonで爆速でHello, World!する
anatofuz
0
72
思いつきで推しの誕生日記念コンテンツを2日で作る技術
anatofuz
0
100
AWSで雰囲気でつくる! VRChatの写真変換ピタゴラスイッチ
anatofuz
0
290
令和最新版 Perlコーディングガイド
anatofuz
5
6.7k
rakulangで実装する! RubyVM
anatofuz
6
3.3k
沖縄の大学で育った学生がエンジニアになるまで
anatofuz
2
5.9k
OpenAPI Generator Perl Clientでも型チューニングしたい!!
anatofuz
0
370
perlimportsから探るPPIの世界
anatofuz
0
4.1k
GraphQLスキーマの設計で考えたこと
anatofuz
1
1.6k
Other Decks in Technology
See All in Technology
SAE J1939シミュレーション環境構築
daikiokazaki
1
200
「育てる」サーバーレス 〜チーム開発研修で学んだ、小さく始めて大きく拡張するAWS設計〜
yu_kod
1
210
少人数でも回る! DevinとPlaybookで支える運用改善
ishikawa_pro
5
2k
手動からの解放!!Strands Agents で実現する総合テスト自動化
ideaws
3
420
経理出身PdMがAIプロダクト開発を_ハンズオンで学んだ話.pdf
shunsukenarita
1
260
東京海上日動におけるセキュアな開発プロセスの取り組み
miyabit
0
210
Perlアプリケーションで トレースを実装するまでの 工夫と苦労話
masayoshi
0
250
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
12
2.2k
[MIRU25] NaiLIA: Multimodal Retrieval of Nail Designs Based on Dense Intent Descriptions
keio_smilab
PRO
1
160
金融サービスにおける高速な価値提供とAIの役割 #BetAIDay
layerx
PRO
0
190
CSPヘッダー導入で実現するWebサイトの多層防御:今すぐ試せる設定例と運用知見
llamakko
1
280
2025新卒研修・HTML/CSS #弁護士ドットコム
bengo4com
2
4k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Facilitating Awesome Meetings
lara
54
6.5k
A designer walks into a library…
pauljervisheath
207
24k
Designing Experiences People Love
moore
142
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
770
For a Future-Friendly Web
brad_frost
179
9.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Visualization
eitanlees
146
16k
Building Adaptive Systems
keathley
43
2.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Transcript
2025/08/02 Hackers Champloo 2025 八雲アナグラ (@AnaTofuZ) Rubyの国のPerlMonger
2 • 八雲アナグラ(@AnaTofuZ) • 2015 ~ 2021まで沖縄で学生 ◦ 京都を経由して今は山梨にいます ◦
Okinawa.pmとかPerl入学式とかにいました • 2025年1月から株式会社コードタクトでRailsでアプリを書いてます ◦ それまではPerlの国(?)にいました • 沖縄行きの前日に医者に酒を止められました my $self = shift;
3 Ruby💎の国のPerlMonger🐪
4
5 • どちらも動的型付け言語 ◦ 主にWebバックエンドやCLIツールとして利用される • Ruby ◦ Ruby 3.4.5
• Perl ◦ 5.42 • やや似ている(諸説あり) • 定期的に人間が行き来している Ruby(💎)とPerl(🐪)
6 • Rubyistの国のPerl使い ◦ 2021年 YAPC::Asia ◦ id:antipop • Simple組み合わせ村から大都会Railsにやってきた俺は
◦ 2025年 東京Ruby会議12 ◦ id:moznion • id:anatofuz <- NEW Perl(🐪)->Ruby(💎)
7 • Perl使いの国のRubyist ◦ 2018年 RejectKaigi 2018 ◦ id:onk Ruby(💎)->Perl(🐪)
8 • どちらも相互に人が行き来している(た) ◦ Perl側に最近人が来ていないのはそう... • 今回はOkinawa.pm (Perl入学式)きっかけでPerlMongerになった私が Rubyの国に引っ越してからの様々についてです RubyとPerl
9 1. 言語ごとの特徴、違い、哀愁 2. 意外と似ているもの 3. 入国してからの学習方法 4. 最近の自由研究 Rubyの国のPerlMonger
10 • 最近は今までに無いレベルで言語コア機能の開発が盛ん ◦ class ◦ boolean ◦ try/catch ◦
サブルーチンシグネチャ • 言語の開発がGitHubに移管されたことで議論が追いやすい ◦ 新しい構文などはPPC(Proposed Perl Changes)でRFCのように議 論 ▪ Perl5.42じゃなくてPerl42にしよう、とか PerlMonger側からの最新 Perl
11 • ここのところのISUCONの問題アプリケーションがその年の最新版の書き 方 • 当時の新機能を惜しみなく使っているのでびっくりするかも 令和最新版 Perlアプリケーション
12 同じ知識が使えるケースもある • pre-fork型のサーバー • GraphQL/RESTなどのAPIの実装 • 正規表現/モジュールバンドル/コレクション操作 Perlにはないものも多い •
fork以外の非同期プログラミング • いろいろな処理系 Rubyの国にきてみて
13 • Perlは基本的にマルチプロセスが主 ◦ スレッドは.... ◦ ライブラリベースでlibevとかを呼び出せる ◦ プロセス間のやり取りはめちゃくちゃ書きやすい •
素朴なWebアプリケーションだとあまり困らないがGraphQLとかするとき にちょっと大変だったりする • Rubyだと最近色々ありますね ◦ Fiber, Ractor 非同期プログラミング
14 • mruby • mruby/c • PicoRuby 組み込み系の処理系がある
15 リストで文字列リテラルを作る記法 • Perl ◦ qw ▪ qw/foo bar baz/
• Ruby ◦ %w ▪ %w(foo bar baz) 似ているヤツ
16 変なコードは両方でも書けそう
17 • Ruby ◦ Bundlerで管理 ◦ Gemfile/Gemfile.lock • Perl ◦
Carton/Carmelで管理 ▪ 最近は殆どの人が使っているが公式という訳ではない ◦ cpanfile/cpanfile.snapshot モジュールロック系
18 • モジュールインストール時にMakefile.PLなどのPerlスクリプトが実行 される • いくつか依存モジュールがインストール時に動的に決まるものの ◦ インストール時にCコンパイラがある or ない
◦ インストール時に特定のライブラリがある or ない ▪ おまけにPerl特有の事情でランダム性があるときがある • snapshotのdiffがガチャ • 最近は使用時に動的チェックやある程度の規則性が入るように Perlのモジュールインストール事情
19 @始まりの変数(@val)はPerl/Rubyともにvalid 似てるけど似てない
20 @始まりの変数(@val)はPerl/Rubyともにvalid 意味合いが違う • Perl ◦ 配列 • Ruby ◦
インスタンス変数 似てるけど似てない
21 奇跡的に一致しているケース 似てるけど似てない
22 奇跡的に一致しているケース なお現代的なPerlの場合はmyが必要 RubyとPerl
23 • 両方とも動的言語 • 素の状態だとRubyのほうが厳格 ◦ Integerが入っている変数を文字列連結するには#to_sとか ▪ bar =
123; baz = bar.to_s + "hoge" • Perlだとコンテキスト(文脈)でよしなに解釈される ◦ $bar = 123; $baz = $bar . "hoge" ◦ $bar = 123; $baz = $bar + 200 型
24 • 型とソースコードが同じファイル • 型そのもの ◦ Type::Tiny ◦ Mouse::Util::TypeConstraints •
引数 ◦ SmartArgs::TypeTiny ◦ FunctionParameter Perl
25 • 基本的に実行時チェック ◦ エディタでコーディング中に解釈させるにはひと工夫必要 ◦ 本番以外で動く型チェックをコードロード時に実行してエラーさせる • パターンマッチやJSONの型指定など関数の型チェック以外も使われる Perlの型
26
27 • 基本的に実行時チェック ◦ エディタでコーディング中に解釈させるにはひと工夫必要 ◦ 本番以外で動く型チェックをコードロード時に実行してエラーさせる • パターンマッチやJSONの型指定など関数の型チェック以外も使われる Perlの型
28 • RBS ◦ Ruby3.0から標準添付 ◦ 型とソースコードが別ファイル ▪ インラインで書くことができるgemもある •
RBI(Sorbet) ◦ shopify方面で開発されている型システム ◦ Rubyコード中に書くことも出来る ◦ tapiocaでRBIファイルを作成しSorbetで検査 どちらもIDEでサポートされる Ruby
29 • safe navigation operator • nillable&.methodとすると&.の前がnilでもエラーにならない ◦ JSのオプショナルチェーン(?.)と似てる ボッチ(&.)演算子がある
30 • ?->が言語デザインとして提案されている ◦ my $val = $data?->{deeply}?->{nested}?->[0]?->{data}?->{va lue}; ◦
まだドラフトステータスなので入るかは不明 • https://github.com/Perl/PPCs/blob/main/ppcs/ppc0021-optio nal-chaining-operator.md Perlでは
31 そもそもPerlだとWAFらしいWAFを使わない派閥もある • Perl ◦ Mojolicous, Amon2, Dancer2, Catalyst... ◦
WAF使わずにパーツ組み合わせるのが多い(特に日本) • Ruby ◦ Ruby on Rails, Sinatra, Hanami.. Webアプリケーション
32 • CPANモジュールを組み合わせて作った薄いWAF ◦ プロジェクトごとに手作りしたりコピペしたり • めちゃくちゃ薄いのですぐ読めてシュッと拡張できる ◦ 一部分だけカリカリにチューニングすることが容易 ▪
PromiseのモジュールをCで書かれたものに交換とか • モジュールが豊富だと全部把握できて楽しい • パーツ自体を構成する上での考え方は他の言語にも移植出来る ◦ ex) HonoのRegExpRouter 薄いWAF
33 • 抜本的にアーキテクチャを切り替えるのがやりづらい ◦ DIYして作ったので市販のツールが合わないがち ▪ 一部の処理を非同期にするとか • レールは自分で引く系なので年代によって線路が違う ◦
git logして当時の流行りの考古学ができる 薄いWAF
34 • Railsと組み合わせることが前提になっているgemが多い ◦ 前提のアーキテクチャが揃っているのですぐ使える • Ruby/Railsのレールに乗っていればめちゃくちゃ短くかける ◦ メタプロでコードすらいらないケースも有る ◦
規約による規律 ◦ キーワード引数とかうまく使うとめちゃくちゃ短くて便利 Rails
35
36 両方とも言語コミュニティがある • Perl ◦ xxxx.pm ▪ Okinawa.pm • Ruby
◦ xxxx.rb ▪ Okinawa.rb コミュニティ
37 • Perl ◦ YAPC • Ruby ◦ RubyKaigi,Kaigi on
Rails... 両方とも沖縄で開催されている • YAPC::Okinawa 2018 ONNASON • RubyKaigi 2024 技術カンファレンスもある
38 言語をまたいでの感想
39 Rubyコミュニティ Rubyの話してる !! 言語をまたいでの感想
40 • Perl ◦ 元々Perlと関わりがあった人が軸になっているコミュニティに ◦ 今はIT系全般のコミュニティになってる ▪ Perlの話もないわけではない •
Ruby ◦ 今Rubyを書いている人が多い ▪ Rubyコミッターの方々がいる ▪ 言語そのものやツールチェインの話が飛び交っている印象 現状の日本のコミュニティ
41 • 言語基礎 • モジュール作り • コミュニティ 慣れるためにやったこと
42 言語基礎
43 比較的最近出ている本を買って読んだ • チェリー本 • Rubyコードレシピ集 • 研磨Rubyプログラミング • Ruby
on Rails アプリケーションプログラミング 同人誌もいろいろでてますね 本
44 • Perlはネイティブに喋れるのでPerlで書いてAIに翻訳させる ◦ たまに存在しないAPIを教えてくれる... AIに翻訳させる
45 モジュール作り
46 両方ともコアで言語にバンドルされているもの以外にコミュニティから提供 されている • Perl ◦ CPAN • Ruby ◦
RubyGems 最近両方ともモジュールをリリースしたので作り方を比較してみる モジュール
47 • PAUSE(Perlモジュールアップロードサーバー)に会員登録リクエスト ◦ 手動で承認される • 日本の場合はminillaを使ってモジュールの雛形を作成 ◦ minil new
mylibで雛形作成 ◦ minil releaseでリリース Perl
48
49 • RubyGemsに会員登録 • bundle gem mylib • version.rbの内容に基づいてrake releaseするとリリースされる
Ruby
50
51 • フローとしては割と似ている ◦ Rubyの場合はbundlerで出来るので追加でなにか取得しなくても出 来る • Perlの方は実態はだいぶ古き良き感じ • モジュールといえば命名規則も文化ありますよね
モジュール作り
52 • Class::Accessor ◦ Perlでアクセサ込でオブジェクトを簡単に定義できるくん • Class::Accessor::Lite ◦ 上の軽量版。インターフェイスは同じだが依存関係はない •
Class::Accessor::Lite::Lazy ◦ 上を継承して遅延評価するアクセサを追加した版。依存関係がある CPANモジュールの命名規則
53 • モジュール名はジャンルの名前空間としての意味合いが強い ◦ ジョークモジュールの名前空間Acme:: ▪ Acme::EyeDrops • 同じような名前を持つからと言って継承関係は必ずしもない ◦
インターフェイスが同じだったりとゆるい一致 • 汎用的な名前空間にいないモジュールも多々 ◦ Teng, L CPANのノリ
54 • net-http ◦ RubyのHTTPクライアント • net-http-persistent ◦ Net::HTTPを拡張してコネクションを永続化する •
net-http-digest_auth ◦ Net::HTTPを拡張してDigest認証 RubyGemsの命名規則
55 • 同じ名前空間を持つモジュールは依存関係があるのが前提 ◦ 何かしらの拡張としての意味合いが強い • 同じインターフェイスでも依存関係がない場合は独立した名前にしたほう がいい RubyGemsのノリ
56 • 新しい知見を得るには技術コミュニティに参加するのが良い • リモートワークなので物理的にエンジニアと喋る重要な機会でもある • anatofuzは今年山梨に引っ越したので山梨県内でコミュニティを探した コミュニティ
57 ことさら山梨においては4月ごろまでは • Perl ◦ undef • Ruby ◦ nil
コミュニティ
58 ないならつくるぞ!! • Perl ◦ Houtou.pm • Ruby ◦ Kofu.rb
コミュニティ
59 • Kofu.なんか ◦ 2025/08/16 クラフトビール屋さんでやるテックトーク • Kofu.rb ◦ 2025/08/23
TRICKを見る会 • Otsuki.なんか ◦ 2025/10/11 古民家でのノンジャンルトークイベント 【PR】山梨でやるんできてくれ 沖縄から片道 4時間!!
60 ここまでRubyとPerlをそれぞれ見てきま した
61 AnaTofuZの気持ちとしてはまだ Rubyそ こまでまだ功夫がたりない ..
62 ???「Rubyのことが知りたいんだったら Ruby実装すればいいのでは」
63 このイベントは Hackers Champloo
64 RubyをPerlで書いてPerlをRubyで書け ばいいのでは ...!?
65 • Perl1.0とRuby0.49(公開されているうちのそれぞれ太古)を現代のそれ ぞれで書く活動をしている ◦ なんと両方ともオリジナルのソースコードが公開されている • 先週レキサーまで実装した ◦ ソースコードを意味のある単位に分割してくれるヤツ
◦ 詰まったらclaude codeに助けを求めるスタイル ということで最近の自由研究
66 • おおよその文法は同じだが微妙に違う ◦ Perl1.0はグローバル変数しかないのでフィボナッチができない PerlとRubyのオリジン
67 name = "World" Perlで作るRuby
68 Perlで作るRuby
69 $name = "World"; Rubyで作るPerl
70 コードの一部
71 • / などの曖昧なトークンの解析はPerl/Rubyともに状態で判定 ◦ /regex/ ▪ 正規表現 ◦
10 / 2 ▪ 割り算 • 今の処理系も同様に状態を持っているので通じるものがある おもしろポイント
72 • 両方とも最初のバージョンなので比較的手作り感がある ◦ 最新の処理系ほどコードベースが大きくないので読めようとしたら読 める • わりと古いC言語で書かれているので読むのがむずい ◦ ...が、最近AIが出てきたので難易度が一気に下がっている
• リフレッシュとしてやってる 初期バージョンならではのよさ
73 • PerlからRubyにいってみた ◦ 一致するノリ、ちょっと違うノリ、様々 • 生成AIが台頭してきた今こそ学習チャンス ◦ 言語間翻訳やりやすい ◦
おもしろソースコード作成 • 別のコミュニティや言語もやっていきましょう まとめ