スマレジエンジニアyushiのブログ

スマレジエンジニアのブログ

PHPと型

Wantedly主催のWebエンジニア向けイベントに参加した。
主題は、フロントエンドとサーバサイド。

そこで特に感じたのは、GoとTypeScriptへの注目度だった。
2つの言語の共通点は静的型付けであることであり、それ自体が注目されている主要因のようである。
その勢いを見るに遠くないうちに主流になるのではないかと感じる。

 

最近の開発にLaravelを使っていて感じることだが、
LaravelはPHPの自由度を存分に活用したフレームワークだ。

例えば、QueryBuilderのwhereの第一引数は、Closure, string, arrayと3種類もの型から指定可能だ。
https://laravel.com/api/6.x/Illuminate/Database/Query/Builder.html#method_where

例えば、Modelは、__getメソッドにより、DBから取得した項目をプログラム上で明示せずに取得可能だ。
Laravelではマジックメソッドをフル活用している。
https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method___get

こうした仕組みは、ごくシンプルな記述での開発を実現している一方で、不具合のリスクも多分にはらんでいる。

 

このリスクの軽減のために、例えばDDDにおけるValueObjectと言った手法や、PHPStanと言った静的解析ツールなどの自由度を制限する仕組みが一役買っている。

しかし、これらにも課題がある。

多用されるマジックメソッドに対してPHPStanでは対応しきれず、その箇所はignoreすることになる。

ValueObjectについては自分で本格的に導入したことがないので定かでないが、型が静的な言語であれば不要な実装をわざわざ行わなければいけないことがあるように思う。

 

上記を踏まえると、Laravelでの実装においてはPHPの自由度を生かして高速に開発しつつ、手法やツールで部分的に自由度を制限して開発の安全度を高める、というイメージじゃないかと思う。

ただ、これは知識や経験がないと効率よく実現するが難しく、日々試行錯誤している。

 

イベントの内容で興味深かったのが、技術は螺旋を描いて(行ったり来たりしながら)進んでいく、という言葉である(どの企業の方がおっしゃっていたか忘れてしまったが...)。

高速な開発を求めてRubyPHPが主流になった後に、自由度の高さ故の問題が積み重なり、その自由度の制限手法、そして静的型付け言語に流れが戻ってきている、というのが現状だと感じている。その次のブームは、螺旋を描くようにまた自由度を求める流れになるのかもしれない。