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
今年やったこと_20年以上続くWebサービスのリプレイス_書いたコード_私がモダンかもと思うPerl
Search
Masashi-Sutou
November 22, 2022
Technology
0
1.5k
今年やったこと_20年以上続くWebサービスのリプレイス_書いたコード_私がモダンかもと思うPerl
今回のテーマは「来年に向けて、今年やったこと、書いたコード」でお願いします at 吉祥寺.pm31 on 2022/11/22
Masashi-Sutou
November 22, 2022
Tweet
Share
More Decks by Masashi-Sutou
See All by Masashi-Sutou
売上と開発環境を同時に改善するためにPerl Webアプリケーションをどのようにリプレイスするか
masashi_sutou
0
1.2k
リッチなポップアップ画面にはshowGeneralDialogが便利だった
masashi_sutou
4
3.6k
iOSでグラフを描くために必要な知識
masashi_sutou
5
3.4k
UITableViewControllerの利点を最大限に活かす使い方 - コードでAutoLayoutを記述する場合 -
masashi_sutou
3
3.3k
制約の優先度 - UITableViewCellのレイアウトを例に考える
masashi_sutou
0
1.1k
「文化を調和させる」 をやってみる Try “Blending Culture”
masashi_sutou
3
520
初めてのiOSアプリ開発 ースマホアプリ開発未経験のSEが1人でiOSアプリを開発するまでー
masashi_sutou
0
400
GitHubで社内学習環境を作る!!
masashi_sutou
2
2.8k
Git, GitHubのチュートリアル
masashi_sutou
0
1.3k
Other Decks in Technology
See All in Technology
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
1
230
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
1
200
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
330
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
190
Rustから学ぶ 非同期処理の仕組み
skanehira
1
130
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
7
3.4k
テストを軸にした生き残り術
kworkdev
PRO
0
190
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
510
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
5
720
クラウドセキュリティを支える技術と運用の最前線 / Cutting-edge Technologies and Operations Supporting Cloud Security
yuj1osm
2
320
AI時代に非連続な成長を実現するエンジニアリング戦略
sansantech
PRO
3
1.2k
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
330
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
Done Done
chrislema
185
16k
YesSQL, Process and Tooling at Scale
rocio
173
14k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Code Reviewing Like a Champion
maltzj
525
40k
Become a Pro
speakerdeck
PRO
29
5.5k
For a Future-Friendly Web
brad_frost
180
9.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
RailsConf 2023
tenderlove
30
1.2k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Transcript
今年やったこと 20年以上続くWebサービスのリプレイス 書いたコード 私がモダンかもと思うPerl 吉祥寺.pm31 on 2022/11/22
自己紹介 masashi-sutou @kurotyann9696 CTO at diverse-inc.co.jp Perl歴は半年 / 以前は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::ProtectPrivateSubs Subroutines::ProhibitUnusedPrivateSubroutines
cpanfileをメンテできる状態にする
cpan-outdatedをGitHub Actionsで実行
Perlを半年書いてみて -> 学びがある 世の中がWeb3.0!て言ってるなか、Web2.0にいた Perlを通して、Web2.0の技術を復習できて良い 良い記事を書いてるPerl Mongerたち今も活躍してる 普段書かない言語を書くと学びが多くて楽しいが他にも 仕事が...
最後に もっといい方法があるなら、教えてください そもそも、なぜバックエンドをPerlのままに? 続きは来年3月のYAPC Kyoto オンラインで! と言いたいけど、来年2月は第一子が産まれる可能性 オフライン発表とかできるんかな?
続きに興味ある方はカジュアル面談で!