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
36
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
240
runn開発者会議福岡2024
katzumi
0
38
リリース戦略を支えるCI/CDパ イプライン
katzumi
0
33
APIテストでもカバレッジ測定 したい!
katzumi
0
33
Slidevのテンプレートリポジトリについて
katzumi
0
160
OSSへの感謝を伝える
katzumi
0
680
モブワークを進化させていった話
katzumi
0
510
ActiveRecordパターンの呪縛を学びほぐして挑むクリーンアーキテクチャへの入り口
katzumi
0
67
実装と乖離させないスキーマ駆動開発フロー / OpenAPI Laravel編
katzumi
0
300
Other Decks in Technology
See All in Technology
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
180
Claude Code本って、 読む必要あるの?
oikon48
1
320
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
120
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
220
2026-09-09 【sigma_ucj#1】Sigma を IaC 管理したい! / IaC for Sigma
civitaspo
0
100
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
570
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.4k
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
130
Omarchy Quattro の日本語設定周り
simosako
2
120
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
370
ASTを使って影響範囲を特定する
nealle
0
130
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
220
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
870
Thoughts on Productivity
jonyablonski
76
5.4k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Deep Space Network (abreviated)
tonyrice
0
300
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
980
GitHub's CSS Performance
jonrohan
1033
470k
How to train your dragon (web standard)
notwaldorf
97
6.8k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Ruling the World: When Life Gets Gamed
codingconduct
0
330
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
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 』を公開しました
ご清聴ありがとうございました