Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
『eg-r2』のご紹介
Search
katzumi
December 23, 2024
Technology
49
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
『eg-r2』のご紹介
PHPカンファレンス2024 アンカンファレンス
https://phpcon.php.gr.jp/2024/
katzumi
December 23, 2024
More Decks by katzumi
See All by katzumi
設計原則、アーキテクチャパターン、アーキテクチャスタイルの違いって何?いつどう向き合ったらいいの?を考えてみる
katzumi
0
300
runn開発者会議福岡2024
katzumi
0
47
リリース戦略を支えるCI/CDパ イプライン
katzumi
0
42
APIテストでもカバレッジ測定 したい!
katzumi
0
44
Slidevのテンプレートリポジトリについて
katzumi
0
170
OSSへの感謝を伝える
katzumi
0
710
モブワークを進化させていった話
katzumi
0
540
ActiveRecordパターンの呪縛を学びほぐして挑むクリーンアーキテクチャへの入り口
katzumi
0
75
実装と乖離させないスキーマ駆動開発フロー / OpenAPI Laravel編
katzumi
0
300
Other Decks in Technology
See All in Technology
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
160
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
770
自律的なチームを作るためにTechPMがやらないこと
ny7760
1
510
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
140
In-Context Learning再入門。ICLの勾配降下的解釈の研究動向を追ってみる。
dai08srhg
1
290
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
3
190
Lint の層を組み直した話
bengo4com
3
310
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
590
AI時代に求められる優秀なTechLeadの振る舞い
pospome
10
13k
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
3k
これだけは抑えておきたい!後悔しない re:Invent の過ごし方 / AWS re:Invent 2026 prestudy
kinunori
2
720
Featured
See All Featured
From π to Pie charts
rasagy
1
440
GitHub's CSS Performance
jonrohan
1033
470k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Optimizing for Happiness
mojombo
378
71k
Claude Code のすすめ
schroneko
67
230k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
450
Automating Front-end Workflow
addyosmani
1370
210k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
500
Crafting Experiences
bethany
1
420
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.7k
Transcript
『eg-r2 』のご紹介 Press Space for next page PHP カンファレンス 2024
Dec 22, 2024. v0.0.2 @katzumi( かつみ)
自己紹介 「障害のない社会をつくる」をビジョンに掲げている「LITALICO 」という会社に所属しています 以下のアカウントで活動しています。 katzchum k2tzumi katzumi katzumi (かつみ)と申します。
アドカレがプチバズしました🎉 初めての 100 ブクマオーバー https://b.hatena.ne.jp/site/zenn.dev/litalico
本日のお題 OSS 化したツールの紹介をします!
ここから先のスライドについて 社内イベントで発表した非エンジニア向けのスライドになっています。
eg-r2 プレリリース 法改正リリース後に社内のみ先行公開していました
祝!オープンソース化! 🎉 たぶん LITALICO 初
オープンソースソフトウェアとは? wikipedia より What is OSS ? オープンソースソフトウェア(Open Source Software
、略称: OSS )とは、利用者の目的を問わずソースコードを使用、調査、再 利用、修正、拡張、再配布が可能なソフトウェアの総称である。 “
packagist にも公開されています composer require litalico-engineering/eg-r2 で直ぐに使えます。 https://packagist.org/packages/litalico-engineering/eg-r2 Packagist は Composer
のメインリポジトリです。 Composer でインストール可能な公開 PHP パッケージが集約されています。 Packagist には、たくさんのパッケージが登録されています。 これらのパッケージは他の開発者が作った便利な部品で、プログラマーは自分のプロジェクトに簡単に 取り込むことができます。 MEMO
eg-r2 とは? 2 つのことを簡単(Easy) にすることを目的としています Easy request validation and route
generation from open API specifications
eg-r2 とは? 2 つのことを簡単(Easy) にすることを目的としています 1. リクエストバリデーション Easy request validation
and route generation from open API specifications
eg-r2 とは? 2 つのことを簡単(Easy) にすることを目的としています 1. リクエストバリデーション 2. ルーティング設定 Easy
request validation and route generation from open API specifications
前提 PHP8.2 以上 PHP Attributes で API Spec を記述する為 Laravel9.0
以上 最新バージョン(version1.0.0) 以降は 11.0 以上 swagger-php で API 仕様書を OpenAPI V3 形式で記述 require
リクエストのバリデーション自動生成 OpenAPI でスキーマ定義しておけば、バリデーションが自動生成されます! Easy request validation リクエストのバリデーションとは? 例えば、オンラインショッピングでお買い物をする時に、名前や住所、クレジットカード番号等の入 力内容を「リクエスト」と言い その時に、入力内容(リクエスト)が正しい形式であるか、間違いや漏
れがないかを確認することを「バリデーション」といいます。 具体的には、次のようなことをチェックします。 1. 必須項目の確認: 名前や住所など、必ず入力しなければならない情報がちゃんと入力されているかを 確認します。 2. 形式の確認: メールアドレスが「@ 」を含んでいるか、クレジットカード番号が数字のみで構成され ているかなど、特定の形式に合っているかをチェックします。 3. 範囲の確認: 年齢や金額など、入力された値が決められた範囲内にあるかを確認します。 MEMO
As-is 別途 API 仕様書を記述する必要があります こんな感じで FormRequest のクラス定義していますよね? /** * @property
int $age * @property string $name * @property bool $is_active */ class MyFormRequest extends FormRequest { public function rules() { return [ 'age' => 'required|integer', 'name' => 'required|string', 'is_active' => 'required|boolean', ]; } }
As-is 別途 API 仕様書を記述する必要があります こんな感じで FormRequest のクラス定義していますよね? /** * @property
int $age * @property string $name * @property bool $is_active */ class MyFormRequest extends FormRequest { public function rules() { return [ 'age' => 'required|integer', 'name' => 'required|string', 'is_active' => 'required|boolean', ]; } }
To-be Trait を追加するだけ!その他の記述不要 リクエストパラメータを型安全で扱えます! こんな感じで FormRequest に OpenAPI を Spec
を Attribute を記述するだけ! #[Schema(title: 'My request', required:['age', 'name', 'is_active'])] class MyFormRequest extends FormRequest { use RequestRuleGeneratorTrait, FormRequestPropertyHandlerTrait; #[Property(property: 'age', type: 'integer', format: 'int64')] public int $age; #[Property(property: 'name', type: 'string')] public string $name; #[Property(property: 'is_active', type: 'boolean')] public boolean $is_active; // roules メソッドはtrait で自動生成しているので不要 }
To-be Trait を追加するだけ!その他の記述不要 リクエストパラメータを型安全で扱えます! こんな感じで FormRequest に OpenAPI を Spec
を Attribute を記述するだけ! #[Schema(title: 'My request', required:['age', 'name', 'is_active'])] class MyFormRequest extends FormRequest { use RequestRuleGeneratorTrait, FormRequestPropertyHandlerTrait; #[Property(property: 'age', type: 'integer', format: 'int64')] public int $age; #[Property(property: 'name', type: 'string')] public string $name; #[Property(property: 'is_active', type: 'boolean')] public boolean $is_active; // roules メソッドはtrait で自動生成しているので不要 }
何が嬉しいのか? API 仕様書と実装の乖離を発生させない! そもそも同じことを 2 回書く必要がなくなる 開発の手数が減り、気になりポイントも減る 全体の記述量も減るのでは? eg-r2 の狙い
ルーティング設定の自動化 OpenAPI でスキーマ定義しておけば、ルーティング設定が半自動化されます! Easy route generation ルーティングとは? インターネット上で誰かが何かを求めてきた時に、そのリクエストをどこに送るかを決めることを 「ルーティング」といいます。 具体的な例を挙げると
1. ホームページ: お客様が「ホームページを見たい」とリクエストした場合、そのリクエストをホーム ページの担当部署に送ります。 2. 商品ページ お客様が「商品ページを見たい」とリクエストした場合、そのリクエストを商品ページの 担当部署に送ります。 3. 注文ページ: お客様が「注文したい」とリクエストした場合、そのリクエストを注文ページの担当部 署に送ります。 MEMO
ルーティング設定の自動化 コマンド一発でルーティングの自動生成 php artisan eg-r2:generate-route Easy route generation /** *
This file is auto-generated. */ declare(strict_types=1); Route::as('api')->group(static function (): void { Route::controller('App\Http\Controllers\Pet')->group(static function (): void { Route::post('/pet', 'addPet'); Route::put('/pet', 'updatePet'); Route::get('/pet/findByStatus', 'findPetsByStatus'); Route::post('/pet/{petId}', 'updatePetWithForm'); Route::delete('/pet/{petId}', 'deletePet'); Route::post('/pet/{petId}/uploadImage', 'uploadFile'); }); Route::controller('App\Http\Controllers\Store')->group(static function (): void { Route::get('/store', 'getInventory'); Route::post('/store/order', 'placeOrder'); Route::get('/store/order/{orderId}', 'getOrderById');
Route::delete('/store/order/{orderId}', 'deleteOrder'); }); }); なぜ eg-r2 を作ったのか? API 仕様書の品質を高めるため! API
仕様書の品質が悪いと手戻りが発生してしまう。サーバー側とクライアント側共に API 仕様の見直しで実装との乖離を発生させない 法解釈が違ったら直さないといけなくなる API 仕様書を先に公開して実装するため 各プロダクトと並行で開発する 。API の完成を待っていたら開発が間に合わない 1. スキーマ駆動開発といいます ↩︎ 全ては法改正を爆速に対応できるシステムを構築するため [1]
どうなったか? 多数の API を高品質且つ爆速で構築 法改正を乗り越えることができた🎉 200 弱の API が eg-r2
によって作成 1 つの API で 100 弱のパラメータが存在 法改正時に 80 の API を追加 短期間にコピペで量産することもできる eg-r2 の効果
なぜ eg-r2 をオープンソース化したのか? 様々なユースケースに対応させるため 他プロジェクトでの個別な要望にも対応できるように機能追加をしていきたい フィードバックサイクルを回すため スキーマ駆動開発の在り方をディスカッションしたい スキーマが先か?コードが先か?の問題を提起したい OSS 化の狙い
今後について 対応ユースケースの拡大 ドックフーディングしてくれる方募集中です 社内外での発信し、認知拡大 eg-r2 の発展について
最後に We’re contributing. プロジェクトに貢献してくれる方、絶賛募集中です
Link eg-r2 プロジェクトリポジトリ eg-r2-example サンプルリポジトリ 頑張らないスキーマ駆動開発を支える『eg-r2 』を公開しました
ご清聴ありがとうございました