PHP Conference Japan 2019 に参加しました

PHP Conference Japan 2019 に参加しました

こんにちは。最近布団から抜け出すのに一苦労している k-so16 です。寒くなってきて冬の訪れを感じる今日この頃です。

12/1 に東京で開催された PHP Conference Japan 2019 (以下 PHP Conf. と記述) に参加してきました。国内で大規模な PHP のカンファレンスということで、非常にたくさんの刺激を受けてきました。

本記事では、 PHP Conf. の様子について紹介します。

基調講演

講演者: 廣川 類 氏

基調講演では、 PHP の開発背景についてと、リリースされたばかりの PHP 7.4 の機能と次期リリース予定の PHP 8 について紹介されました。

かつて PHP の初期バージョン PHP 1.x 系は、3000 行以下の小さなスクリプト言語でした。しかし、バージョンが上がるにつれて徐々に複雑な処理にも対応し、規模も大きくなりました。言語としても進化を遂げており、 PHP 5.3, 5.4 あたりから言語の機能として、新しい言語に追従してくるようになりました。

PHP 7.x 系の大きな進化として、 PHP 5.x 系と比較して リクエストを劇的に多く処理 でき、さらに 消費メモリが劇的に下がった という結果が得られたことでした。計測結果は PHP の開発者である Rasmus Lerdorf 氏が Wordpress を用いて検証した結果とのことでした。

新しい言語の機能に追い付いてきたと感じさせる PHP 7.4 の新機能も魅力的でした。

  • クラスのフィールドに型指定が可能
  • Null 合体演算子 (??=) の導入
  • Preloading の導入
  • アロー関数の導入
  • 配列のスプレッド構文の導入
  • 弱い参照が利用可能
  • マジッククォート関数の廃止

弊社内でもアロー関数とスプレッド構文の導入は非常に盛り上がりました。私自身も JavaScript のように匿名関数をアロー関数で記述したり、スプレッド構文を使えたら良いのにと感じることがあったので、特に魅力的なアップデートに感じました。

PHP 8 では、 JIT1 コンパイラ が導入されるとのことで、 PHP 7.x 系よりさらに処理が早くなることが期待されます。ただし、環境によっては、デフォルトの設定では JIT コンパイラの恩恵が受けられない可能性があるので、必要に応じて JIT のパラメーターをチューニングすることも重要になりそうです。

セッション

基調講演の後は、並行で複数の講演が行われました。以降は私が聴講した一部のセッションについて紹介します。

MVCとはなにか

講演者: 天重 誠二 氏 (弁護士ドットコム株式会社)

このセッションでは、ドメインモデル、メンタルモデル、パーソナルコンピューターのそれぞれの概念について説明され、それらの要素に基づいて MVC2 とは何か説明されました。

ドメインモデル

モデルとは、 抽象化された知識の表現形式 です。例えば、レストランの複写式伝票の場合、注文を受けるホールと料理を提供する厨房で必要な情報が異なります。厨房側は何を作るかが重要で、どの料理がどのテーブルに届けられたか知る必要はありません。一方、ホール側はテーブルに料理が届いたかが関心事となります。

ドメイン (問題領域) とは、ある 目的 (ビジネス) を指します。例えば、レストランの例では、顧客が食べたいものを提供することがドメインとなります。ドメインを解決するためには、顧客から注文を取り、料理を作るといった 手段 が必要です。複写式伝票のような情報処理システムが解決手段の 1 つといえます。

ドメインモデルは、 ドメイン (目的) を情報処理システム (手段) によってモデル化 (知識表現化) したもの です。ドメインモデルは社会的な情報システムとして組み込まれ、個人を制約していると述べられていました。システムとして組み込まれていると、個人が情報処理の形を変えられず、ドメインモデルに束縛されることになります。

メンタルモデル

メンタルモデルとは、人間が頭の中で描く 行動のイメージを表現したもの です。例えば、ハサミは刃の部分を見れば、どのように動くか容易に想像がつきます。ソフトウェアについても、どのように動作するかが人間の頭の中でイメージしやすいことが重要です。

適切なメンタルモデルの原則として、以下のものが挙げられていました。

  • 可視性
  • 良い概念モデル
  • 良い対応付け
  • フィードバック

特にフィードバックは、 すぐに返ってきたもの が重要です。時間が経つに連れて、実際に触れた際の感覚が徐々に忘れられていき、適切なフィードバックが得られなくなります。

パーソナルコンピューター

かつて 1984 という小説をもとにした Macintosh の CM がありました。小説では システムが人間を支配する世界 が描かれているとのことで、 CM には Macintosh の登場は システムの支配から人間を解放する というメッセージが込められていました。

MVC とはなにか

人間がパーソナルコンピューターから情報処理システムにアクセスする際に、システムのドメインモデルと人間のメンタルモデルの間にはギャップがあります。このギャップを埋めて、人間が容易にシステムを扱うためにはパーソナルコンピューターになんらかのツールを導入します。

モデルが情報処理システムのドメインモデル に対応しており、 ユーザーがメンタルモデル に対応します。ドメインモデルとメンタルモデルの乖離を吸収する役割を ビューコントローラ が果たします。モデルは解決手段のモデルであり、それらを人間が自由に扱うためにビューとコントローラが仲介役を果たすといえます。

所感

少し哲学的で難しく感じましたが、 MVC が提唱された当時の考えを知ることができ、面白い内容でした。ただ、私の勉強不足もあって、結論として MVC とは何かを説明できるほどの理解には至っていないので、今後勉強して理解を深めたいと思います。

知見のない技術スタックをプロダクション導入するエンジニアの導入戦略

講演者: 東口 和暉 氏 (BASE株式会社)

概要

新規プロダクト開発で技術スタックを選定する際に、導入に適した技術が 運用実績のないもの であることがあります。例えば、以下のようなものが挙げられます。

  • 運用経験のないフレームワーク・言語
  • 利用経験のないアーキテクチャ・クラウドなどのインフラ基盤

運用経験がないことで、 未知への不安 が意思決定に大きく影響し、フラットな意思決定から遠ざかることになります。不安要素は、問題なくリリースできるか、保守しやすいコードが書けるかなど、将来のプロダクトの品質に対する不安に帰着すると述べられておりました。

未知への不安に立ち向かうために、品質を 外部品質内部品質 に分け、 学びのサイクル を確立することが重要であると述べられていました。

外部品質と内部品質の説明はそれぞれ以下の通りです。

  • 外部品質: ユーザーから見える部分の品質
  • 内部品質: ユーザーからは見えないが保守性に影響を及ぼす品質

学びのサイクルでは、多く学び、すぐ反映させることが重要だと述べられていました。手順として以下の 1~3 のサイクルを実際に回したとのことでした。

  1. 具体的な事例を多く学ぶ
  2. 学んだ内容をパターン化する
  3. パターンを実践してみる

品質への不安に立ち向かうために、以下の手段を実践したとのことでした。

  • テストコード
    • 依存関係が差し替え不可能であったり、過責務なモジュールなどの悪い設計に気づく
    • テストコードを書いて設計の良し悪しを体験する
  • コード検査
    • Linter などの解析ツールで その言語らしいコード が書けているかを確認する
  • 監視
    • 早期デプロイで稼働状況を監視する
      • アプリケーションの動作に必要な設定の漏れに気づく
    • ユーザーに近い部分からメトリクスの計測する
      • 最低限アプリケーションとして提供可能か測定する

所感

運用経験のない技術スタックを選定する際に、どのように進めるのが良いか、非常に参考になる内容でした。これからも新しい言語やフレームワークなどの技術が急速に開発されると考えられるので、運用経験のない、新しい技術で開発を進める際に参考にしたいと感じました。

LT

すべてのセッションが終わった後、クロージング前に行われた LT を聴講しました。発表時間は 4 分と短めでした。非常に面白い発表がたくさんありましたが、本記事では、私が特に面白いと感じた LT について紹介します。

ビジュアルリグレッションテスト

画面のスクリーンショットを前後のバージョンでそれぞれ撮影し、その差分を検証することを ビジュアルリグレッションテスト と呼びます。ビジュアルリグレッションテストには BackstopJS を用いたとのことで、設定ファイルさえ記述すれば自動でテストが実行できるとのことです。

ビジュアルリグレッションテストを用いたことで、膨大な量の画面テストを時間をかけることなく行えるのが非常に魅力的に感じました。

レガシーシステムのテスト

あるレガシーシステムの全機能テストを行うこととなり、既存のテストに加えて不足分を PHPUnit で補ってテストを行おうとしたところ、条件分岐に入りにくかったり、グローバル変数が何をしているものか分からず苦労したとの内容でした。

戦略として、実施するテストを取捨選択したとのことでした。小さな機能はしっかりとテストを通し、トランザクションスクリプトはコンパイルが通ることを目標として妥協の線引きとしたとのことでした。短い発表時間の中で、レガシーシステムの保守の苦労がひしひしと伝わりました。

全体の所感

今回初めて PHP Conf. に参加しましたが、非常に得るものが多く、楽しんで参加できました。私自身まだ PHP について知らないことが多いと実感しました。また、今回のセッションを聴講して、設計思想についても勉強したいと感じました。例えば、 Clean Architecture とはどのようなアーキテクチャなのか、どのようなメリットやデメリットがあるのかに興味を持ちました。調べて実践し、理解を深めたいと思います。

大規模なカンファレンスということもあり、当日会場には非常にたくさんの方が来場しておりました。中にはセッション会場の席が満席になり、さらにサテライト会場も満席になることもあるほどの盛況ぶりでした。

展示ブースのアンケート結果では、 PHP の経験年数が 3 年以内の方が多かったようです。 PHP は遅れた言語と言われることもあるようですが、 PHP が新しい言語に追い付いてきていることと、若手の方もたくさん PHP Conf. に来場していたことから、サーバサイドの Web 言語として依然人気は衰えなさそうだと感じました。

来年は LT に登壇できるように技術をより磨いていきたいと思います。

謝辞

今回の非常に有意義なカンファレンスを主催してくださった 日本PHPユーザ会 様、会場内の Wi-Fi 環境を提供してくださった Hamee 様、会場のネットワークを快適に利用できるよう管理してくださった NOC の皆様方、カンファレンス実施に寄与しているスポンサー企業様方にこの場をお借りして御礼申し上げます。


  1. JIT: Just In Time
  2. MVC: Model View Controller
k-so16