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