Slide 1

Slide 1 text

OSS Gate に参加したら Larastan に コントリビュートできた あかつか 2024/04/11 Kobe Laravel

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

自己紹介 あかつか 神戸の会社でバックエンドエンジニアをしています PHP とLaravel が好きです 最近はGo も好き new Larastan コントリビューター https:/ /github.com/larastan/larastan/releases/tag/v2.9.1 (とはいえ、一個しかPR やってない)

Slide 4

Slide 4 text

Larastan とは

Slide 5

Slide 5 text

Larastan とは PHPStan のLaravel 向けラッパー PHPStan PHP の静的解析ツール 定義されていない変数を使おうとした時に警告し てくれる 関数の戻り値の方が間違っている時に警告してく れる Larastan はLaravel の特有の機能にも対応している

Slide 6

Slide 6 text

OSS Gate とは

Slide 7

Slide 7 text

OSS Gate とは 「OSS Gate 」は、OSS 開発に参加する「入り口」を提供 する取り組みです。 OSS 開発に未参加の人を参加する 人へ、少し参加したことがある人を継続的に参加する 人へ。そうやってOSS 開発に参加する人を継続的に増や していく。それが「OSS Gate 」の目的です。 https:/ /oss-gate.github.io/

Slide 8

Slide 8 text

今回追加したもの

Slide 9

Slide 9 text

追加したもの サポートされているEloquent Builder メソッドに withWhereHas を追加 https:/ /github.com/larastan/larastan/issues/1523 https:/ /github.com/larastan/larastan/pull/1853

Slide 10

Slide 10 text

withWhereHas use App\Models\User; $users = User::withWhereHas('posts', function ($query) { $query->where('featured', true); })->get();

Slide 11

Slide 11 text

実際に動きを見てみよう 私の変更が入ったのは2.9.1 から 2.9.0 と2.9.2 で違いを見てみよう $ composer show -i | grep larastan $ ./vendor/bin/phpstan analyse

Slide 12

Slide 12 text

実際に動きを見てみよう before(2.9.0) after(2.9.2)

Slide 13

Slide 13 text

参加した時の私 OSS の経験はほぼなし ドキュメント修正のプルリクを送った程度 それでもコントリビュートできた🎉

Slide 14

Slide 14 text

どうやって追加した 1. Laravel とLarastan をインストールして 再現用のコードを書く 2. 手元のLarastan でissue の再現を確認 3. Larastan のリポジトリをフォーク 4. 修正を追加 5. テストを追加 + 通ることを確認 6. ドキュメントの修正 7. PR を送る

Slide 15

Slide 15 text

大変だったところ テストの書き方が最初わからなかった PHPUnit のTestCase を継承しているPHPStan の テストクラスを使っていた コミュニケーションが英語 CI がうまく通らないことがあって不安になった

Slide 16

Slide 16 text

OSS コントリビュートの始め方 OSS Gate に参加してみる 次回はオンラインで4/27 に開催される いろんなOSS を使ってみる PHP やLaravel もOSS 使うことも貢献の一つの形 使っていてバグを見つけたり、うまく動かなかった りしたら報告しよう https:/ /github.com/laravel/framework/issues/50862

Slide 17

Slide 17 text

宣伝 PHP カンファレンス福岡で登壇します よかったらきてください!

Slide 18

Slide 18 text

Thank you!