Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rubyの国のPerlMonger

Avatar for AnaTofuZ AnaTofuZ
August 02, 2025

 Rubyの国のPerlMonger

Hackers Champloo 2025でのトークです
https://hackers-champloo.org/2025/

Avatar for AnaTofuZ

AnaTofuZ

August 02, 2025
Tweet

More Decks by AnaTofuZ

Other Decks in Technology

Transcript

  1. 2 • 八雲アナグラ(@AnaTofuZ) • 2015 ~ 2021まで沖縄で学生 ◦ 京都を経由して今は山梨にいます ◦

    Okinawa.pmとかPerl入学式とかにいました • 2025年1月から株式会社コードタクトでRailsでアプリを書いてます ◦ それまではPerlの国(?)にいました • 沖縄行きの前日に医者に酒を止められました my $self = shift;
  2. 4

  3. 5 • どちらも動的型付け言語 ◦ 主にWebバックエンドやCLIツールとして利用される • Ruby ◦ Ruby 3.4.5

    • Perl ◦ 5.42 • やや似ている(諸説あり) • 定期的に人間が行き来している Ruby(💎)とPerl(🐪)
  4. 10 • 最近は今までに無いレベルで言語コア機能の開発が盛ん ◦ class ◦ boolean ◦ try/catch ◦

    サブルーチンシグネチャ • 言語の開発がGitHubに移管されたことで議論が追いやすい ◦ 新しい構文などはPPC(Proposed Perl Changes)でRFCのように議 論 ▪ Perl5.42じゃなくてPerl42にしよう、とか PerlMonger側からの最新 Perl
  5. 13 • Perlは基本的にマルチプロセスが主 ◦ スレッドは.... ◦ ライブラリベースでlibevとかを呼び出せる ◦ プロセス間のやり取りはめちゃくちゃ書きやすい •

    素朴なWebアプリケーションだとあまり困らないがGraphQLとかするとき にちょっと大変だったりする • Rubyだと最近色々ありますね ◦ Fiber, Ractor 非同期プログラミング
  6. 15 リストで文字列リテラルを作る記法 • Perl ◦ qw
 ▪ qw/foo bar baz/


    • Ruby ◦ %w
 ▪ %w(foo bar baz)
 似ているヤツ
  7. 17 • Ruby ◦ Bundlerで管理 ◦ Gemfile/Gemfile.lock • Perl ◦

    Carton/Carmelで管理 ▪ 最近は殆どの人が使っているが公式という訳ではない ◦ cpanfile/cpanfile.snapshot モジュールロック系
  8. 18 • モジュールインストール時にMakefile.PLなどのPerlスクリプトが実行 される • いくつか依存モジュールがインストール時に動的に決まるものの ◦ インストール時にCコンパイラがある or ない

    ◦ インストール時に特定のライブラリがある or ない ▪ おまけにPerl特有の事情でランダム性があるときがある • snapshotのdiffがガチャ • 最近は使用時に動的チェックやある程度の規則性が入るように Perlのモジュールインストール事情
  9. 23 • 両方とも動的言語 • 素の状態だとRubyのほうが厳格 ◦ Integerが入っている変数を文字列連結するには#to_sとか ▪ bar =

    123; baz = bar.to_s + "hoge"
 • Perlだとコンテキスト(文脈)でよしなに解釈される ◦ $bar = 123; $baz = $bar . "hoge"
 ◦ $bar = 123; $baz = $bar + 200
 
 型
  10. 26

  11. 28 • RBS ◦ Ruby3.0から標準添付 ◦ 型とソースコードが別ファイル ▪ インラインで書くことができるgemもある •

    RBI(Sorbet) ◦ shopify方面で開発されている型システム ◦ Rubyコード中に書くことも出来る ◦ tapiocaでRBIファイルを作成しSorbetで検査 どちらもIDEでサポートされる Ruby
  12. 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では
  13. 31 そもそもPerlだとWAFらしいWAFを使わない派閥もある • Perl ◦ Mojolicous, Amon2, Dancer2, Catalyst... ◦

    WAF使わずにパーツ組み合わせるのが多い(特に日本) • Ruby ◦ Ruby on Rails, Sinatra, Hanami.. Webアプリケーション
  14. 32 • CPANモジュールを組み合わせて作った薄いWAF ◦ プロジェクトごとに手作りしたりコピペしたり • めちゃくちゃ薄いのですぐ読めてシュッと拡張できる ◦ 一部分だけカリカリにチューニングすることが容易 ▪

    PromiseのモジュールをCで書かれたものに交換とか • モジュールが豊富だと全部把握できて楽しい • パーツ自体を構成する上での考え方は他の言語にも移植出来る ◦ ex) HonoのRegExpRouter 薄いWAF
  15. 35

  16. 37 • Perl ◦ YAPC • Ruby ◦ RubyKaigi,Kaigi on

    Rails... 両方とも沖縄で開催されている • YAPC::Okinawa 2018 ONNASON • RubyKaigi 2024 技術カンファレンスもある
  17. 40 • Perl ◦ 元々Perlと関わりがあった人が軸になっているコミュニティに ◦ 今はIT系全般のコミュニティになってる ▪ Perlの話もないわけではない •

    Ruby ◦ 今Rubyを書いている人が多い ▪ Rubyコミッターの方々がいる ▪ 言語そのものやツールチェインの話が飛び交っている印象 現状の日本のコミュニティ
  18. 43 比較的最近出ている本を買って読んだ • チェリー本 • Rubyコードレシピ集 • 研磨Rubyプログラミング • Ruby

    on Rails アプリケーションプログラミング 同人誌もいろいろでてますね 本
  19. 46 両方ともコアで言語にバンドルされているもの以外にコミュニティから提供 されている • Perl ◦ CPAN • Ruby ◦

    RubyGems 最近両方ともモジュールをリリースしたので作り方を比較してみる モジュール
  20. 48

  21. 50

  22. 52 • Class::Accessor
 ◦ Perlでアクセサ込でオブジェクトを簡単に定義できるくん • Class::Accessor::Lite
 ◦ 上の軽量版。インターフェイスは同じだが依存関係はない •

    Class::Accessor::Lite::Lazy
 ◦ 上を継承して遅延評価するアクセサを追加した版。依存関係がある CPANモジュールの命名規則
  23. 59 • Kofu.なんか ◦ 2025/08/16 クラフトビール屋さんでやるテックトーク • Kofu.rb ◦ 2025/08/23

    TRICKを見る会 • Otsuki.なんか ◦ 2025/10/11 古民家でのノンジャンルトークイベント 【PR】山梨でやるんできてくれ 沖縄から片道 4時間!!
  24. 71 • / などの曖昧なトークンの解析はPerl/Rubyともに状態で判定
 ◦ /regex/ 
 ▪ 正規表現
 ◦

    10 / 2
 ▪ 割り算
 • 今の処理系も同様に状態を持っているので通じるものがある
 おもしろポイント