このエントリーをはてなブックマークに追加

PHPerKaigi 2022 にて登壇します

開発部の有澤です。
スポンサーセッション枠で登壇させていただくことを、本記事でお知らせします。

テーマは「受託制作会社から #自社サービス の会社へ転職して思ったこと」になります。

当日の登壇方式は録画したものを配信するため、
質問がありましたら、私のDiscordにメンションいただけたら、随時お返しいたします。

日時日程

資料


このエントリーをはてなブックマークに追加

2022/04/09〜2022/04/11まで PHPerKaigiが開催されます!
株式会社カルテットコミュニケーションズはシルバースポンサーとして協賛いたします。

PHPチーム3人全員が登壇します!

スポンサーセッション: 【LT2本立て】プライベートな社内パッケージの再利用にsatisを使っている話/受託制作会社から自社サービスの会社へ転職して思ったこと

@kin29ma_n@iamyukihiro のLTを2本立てでお送りします。

【プライベートな社内パッケージの再利用にsatisを使っている話 by志賀】

みなさんの会社ではプライベートな社内パッケージを再利用する際どうやっていますか?弊社ではSatisというcomposerリポジトリージェネレータを使っています。その事例についてお話しします。

【受託制作会社から自社サービスの会社へ転職して思ったこと by有澤】

自分は「受託制作会社」から「自社サービスの会社」へ転職した身です。 今後、そのパターンに沿って進みたいエンジニアに向けて、感想を共有します。

PHPerでもできる!マイクロサービス

@77web によるトークです。

近年注目を集めるマイクロサービスアーキテクチャ。GoやScalaのような華々しい言語で実装した話はよく語られていますが、もちろん我々PHPerの愛するPHPでもできるんです! 私は2018年〜PHPシステムのマイクロサービス化プロジェクトを始め、2021年現在もPHP製マイクロサービスを運用・進化させています。PHPシステムの中でマイクロサービスに向く機能・PHPマイクロサービスをどうやって作って運用するかまでお話しします。

カルテット開発部について

カルテット開発部は、インターネット広告専門の広告代理店内の開発部門です。
少人数の部署ですが、広告運用を効率化する Lisket とウェブサイト運営に欠かせないGoogleAnalyticsのレポートをエクセル形式で出力できる 無限GAレポート という2つのWebサービスを開発〜運営まで行っています。新規プロジェクトでは #Symfony#Angular を使ってスクラム開発をしています。
PHPer絶賛募集中です!少しでも興味を持っていただいた方はぜひオフライン・オンライン両会場で弊社エンジニアにお声掛けください。


このエントリーをはてなブックマークに追加

今回は、Rector使ってみた話です。

PHP8にupdateすると、↓のようなエラーめちゃくちゃでてきませんか :thinking:

1x: Return type of HogeClass::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Rectorを使って#[ReturnTypeWillChangeRector]を付与すると、大量のDeprecation noticesをなくすことができターミナルをすっきりさせることができました✨

Rector とは

公式サイト:https://getrector.org/

PHP Coding Standards Fixer のように自動リファクタリングを行ってくるCLIツールです。

様々なリファクタリングルールが定義されており、それを使用することもできたり、独自のルールを定義して使用することも可能です。

https://getrector.org/demo でデモ実行することもできます。

使い方

GitHub: https://github.com/rectorphp/rector

  • PHPのバージョンやフレームワークのルール、独自作成したルールをsetしたrector.phpを作成
  • $ vendor/bin/rector process [target-dir] --dry-runでdiffを確認
  • 確認後、$ vendor/bin/rector process [target-dir]で実行

使用例: ReturnTypeWillChangeRectorを使い#[ReturnTypeWillChangeRector]を付与する

  • ルール: ReturnTypeWillChangeRectorをsetする
  • ArrayAccess::offsetGetはデフォルトで#[ReturnTypeWillChangeRector]が付与される
  • カスタムで他のメソッドにも付与することもできる(configure部分)
  $services = $containerConfigurator->services();
  $services
      ->set(ReturnTypeWillChangeRector::class)
      ->configure([ //ArrayAccess::offsetGet以外のメソッドにも追加したいので追記
          JsonSerializable::class => ['jsonSerialize'], 
          ArrayAccess::class => ['offsetExists', 'offsetSet', 'offsetUnset'],
      ])
  ;

:warning: mixedの扱い :warning:

当初は、ルール: ReturnTypeDeclarationRectorを使ってreturn typeを付与しようとしていました。

しかし、return type mixedに対応しておらず#[ReturnTypeWillChangeRector]を付与する対応にしました。

ルールReturnTypeDeclarationRectorを使いdry-runした際のRFCのリンクにもある通り、

$ vendor/bin/rector process lib --dry-run
...

Applied rules:
 * ReturnTypeDeclarationRector (https://wiki.php.net/rfc/scalar_type_hints_v5)

すべての関数にreturn typeを付与する義務は今のところないのでmixedはサポートしていないとのことです。

https://wiki.php.net/rfc/scalar_type_hints_v5 より

Why Not Add Support For MIXED? Some people would like adding mixed support in addition to other primitives.

Current Position Currently, there’s no mandate for fully typing all functions (even in strict mode). Therefore, there’s no functional difference between mixed and a non-type-declared paramter. For that reason, addition of a mixed type is outside of the scope for this proposal.

ちなみに、rector.phpの定義を以下のようにすると、関数指定であればreturn type mixedを付与することが可能でした。

  $services = $containerConfigurator->services();
  $services->set(ReturnTypeDeclarationRector::class);
  $services->set(AddReturnTypeDeclarationRector::class)->configure([//return type mixed付与したい関数を定義
      new AddReturnTypeDeclaration(JsonSerializable::class, 'jsonSerialize', new \PHPStan\Type\MixedType(true)),
      new AddReturnTypeDeclaration(ArrayAccess::class, 'offsetGet', new \PHPStan\Type\MixedType(true)),
  ]);

使ってみた感想

全体的に使いやすかったです🙆‍

ただ、自分が求めているルールを探すのが少し大変でした。