今回のテーマは「来年に向けて、今年やったこと、書いたコード」でお願いします at 吉祥寺.pm31 on 2022/11/22
今年やったこと20年以上続くWebサービスのリプレイス書いたコード私がモダンかもと思うPerl吉祥寺.pm31 on 2022/11/22
View Slide
自己紹介masashi-sutou @kurotyann9696CTO at diverse-inc.co.jpPerl歴は半年 / 以前はSwift,Dart,TypeScriptが多め
Diverseの をリプレイス
来年(これから)に向けて目指したのは?画面とAPIを疎結合にして開発できることモダンなPerlとモジュールでAPIを開発できること段階的にv2にリプレイスできる仕組みをつくることつまり、売上と開発環境を同時に改善できるようにしたい
といった目標を今年の4月ごろに決めてモダンなPerlを書き始めることに
しかし、私はPerlを書いたことがない
モダンなPerlてどこにあるのか?
とにかく調べる、試してみる1. 現状のv1のPerlはどういう背景と負債をもつのか2. 他社のPerlの移行事例や活用事例1と2は時間の関係でスキップ3. v2に改善するなら、何が足りない、何が必要?先人(Perl Monger)の記事やコードを読み漁る日々
結果、こんな感じのPerlになった
実装例:その1
モダンPerl = 型定義を付与して堅牢にuse strictures 2; で必要なものだけ警告にTypes::Common -types で型を使うFunction::Parameters で fun と引数の型を定義明示的に $self か $class を書く( method は禁止)Function::Return は見送りに返値型のメリットが少なく、引数の型とテストでOK高速な書き方、より良い書き方に置き換える
実装例:その2 - 1
実装例:その2 - 2
モダンPerl = OOPとPerlの新機能を使うMoo で実装の意図を集約したりコメントできるaliased で冗長なアーキテクチャ名を最小限にクラス名ぽく大文字で定義Variable interfaceだとIntellijで定義ジャンプ可能にIntellijのPerlプラグインがそこそこ優秀5.34.0から可能な try-catch で例外処理
Test2でDomainとControllerをテストするis ok like dies ok lives でだいたい書けて楽Test::Mojo も Test2::V0 と併用して大丈夫だった
ORM(DBIx::Mint, Moo,Sub::HandlesVia)の実装で苦戦苦戦した。一応期待する振る舞いは実装したでも、関数の呼び方が複数あり、良くない実装が残る15分では時間が足りないどこかで全部アウトプットしてアドバイスがほしい
苦戦した例
例えば、話せる言語を記録するとして...
MySQLのSET型を扱いやすくしたいMySQLのSET型をPerlでは配列で参照する型変換保存時は別処理で配列からcsv文字列に変換
型制約(coerce)が効かないときがある
.perlcriticrcと.perltidyrcに合わせるgit commit時にlintとformatを実行するprivateな関数の先頭に _ をつけてルールに合わせるSubroutines::ProtectPrivateSubsSubroutines::ProhibitUnusedPrivateSubroutines
cpanfileをメンテできる状態にする
cpan-outdatedをGitHub Actionsで実行
Perlを半年書いてみて -> 学びがある世の中がWeb3.0!て言ってるなか、Web2.0にいたPerlを通して、Web2.0の技術を復習できて良い良い記事を書いてるPerl Mongerたち今も活躍してる普段書かない言語を書くと学びが多くて楽しいが他にも仕事が...
最後にもっといい方法があるなら、教えてくださいそもそも、なぜバックエンドをPerlのままに?続きは来年3月のYAPC Kyoto オンラインで!と言いたいけど、来年2月は第一子が産まれる可能性オフライン発表とかできるんかな?
続きに興味ある方はカジュアル面談で!