RitoLabo

PHPerKaigi 2020 イベントレポート

  • 公開:
  • カテゴリ: Conference & Events
  • タグ: PHP,EventReport

PHPerKaigi 2020 に行ってきました。

エントランス

PHPerKaigi 2020

day 0

0日目は前夜際ということで、夕方からのスタート

ノベリティがTシャツとかトレーディングカードとか盛り沢山で、すごい...!!!

特にこのトレーディングカードは、自身の Twitter のアイコンでカードが作られていて、名刺代わりにもなって、参加している方々と話しのきっかけになるのですごく素敵!

そしてエコバッグ...!!

デニム生地、、めちゃめちゃオシャレで素敵です。PHPerKaigi はパンフレットとか、こういうところのクオリティが高いのがすごいところです。

今回は日曜日スタートなので(いつもは金曜日スタート)どれくらい来るかなと思っていたけど、スタート直前くらいに来たときには沢山人もいて、PHPerKaigi らしい盛り上がりをみせていました。

この日は前夜祭でしたが、しっかりトークもありました。私が拝聴したのは、すえなみさんのトークと、山岡さんのトークです。

マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜

PHPのアノテーションの仕組みとメリット・デメリット

前夜祭が終わった後は、池袋に場所を移して PHPreParty が開催されました。 私はいけませんでしたが、大いに盛り上がったようです。

day 1

1日目。この日は平日だったので、昼過ぎからの参加となりました。

以下は私が聴いたトークです。

レンサバけもの道

レンサバ = レンタルサーバー ということで、VPSだけではなくレンサバも使い倒していこうよ という内容でした。

レンタルサーバーって、気がついたらいつから使わなくなっていただろう。もうかなり、、と思っていましたが、 そう遠くないいつぞやのレガシーシステムはレンサバだった事を思い出しました。

ただこのトーク、さすがのuzullaさんだけあって、レンサバを使い倒すレベルが違いました。 メモの中から抜粋したものを列挙しようと思いましたが、


「許可を得るな、謝罪せよ。」


この一言で、あとはスライドや動画を見ていただければわかると思います。

一応、大切なところもいくつか

  • レンサバとはいえ依存させないように、VPSなどにスライドできるように構築していくことが大事
  • 無料や安価プランは使わない
  • SSH 使っていこう
  • モダンなデプロイしていこう
  • ロギングもしっかりやっていこう
  • 弱点を正しく認識して、レンサバを root のない linux として見る
  • 手に入れたいのはメンテフリー環境なので、無理に新しいバージョンのPHPを入れるのはおすすめしない。
  • レンサバは諦めが肝心。

そして最後に、


「すべては、自己責任で。」

まさしく、レンサバを使い倒すための極意。でした。

磯野ー、MySQLのロック競合を表示しようぜー

MySQL でのロック競合の解析について、InnoDB のロックを表示してみようという内容でした。

まずはじめに MySQL のロックの種類を深くさらっと解説されていたのですが、ロックという状態1つにとってもこれだけ色々なロックがあるんだなあと思いました。自分でも掘り下げるための良い基礎知識というかきっかけをいただけてとても学びになりました。(まだここはメインなわけではないのですけれども)

それでいて本編のメインの一つ、MySQL 8.0 から performance_schema の data_locks を用いるとロック競合(競合していないくても)が確認しやすいよというお話

MySQL 8.0 - The data_locks Table
https://dev.mysql.com/doc/mysql-perfschema-excerpt/8.0/en/data-locks-table.html

  • ロック気になるなら仕組み云々もいいけど、まずは見えるようにすればいい。見比べればわかる事がある。
  • ロック競合とか、基本的にはそんなに起こらないはず。でもインデックス汚いと簡単にぶつかるよ。

MySQL の知らない一面を知ることのできる yoku さんのトークは毎回楽しみです。ある瞬間一気に深いところまで掘り下げたりしてくださるので、自分で試したり振り返る時に気がつけば結構障壁が下がっている事に気が付きます。

MySQL 8.0 の performance_schema.data_locks 見てみよう。

forteeに脆弱性診断をかけてみた

脆弱性検査についての話。脆弱性検査とは何か。どういう事を行うのか。注意点などについての内容でした。

開発されている、クラウド型Web脆弱性診断ツール VAddy を用いて、実際の動作等を紹介してくださいました。

脆弱性診断、過去に受けた事がありましたが、実際に動いているシステムを見るのは初めてだったので、ちょっとワクワクしました。 検査項目が多岐にわたっているというか、結構網羅していたのですごいな、という印象。これで一定の危険を予め検出できて回避できるなら、とても便利ですね。

さらにこの2年位は「脆弱性検査内製化」という名のもとに、GUIツールであっても裏でAPI持ってて自動化もできたりするのだそうです。モダン。

後半では、FWを用いてアプリケーション開発をする際に気をつける事なども話されていました。 CakePHP なら Model の $_accessible プロパティ使うとか、フォーム改ざんを防止する(Securityコンポーネントのことかな)とか。 Laravel なら Model のホワイトリスト(fillable)使うとか。

fortee(cakeだったか)も VAddy にガンガン攻められていたので、FW だからと言ってあぐらをかかずに開発していきたいところです。

静的解析の育て方

既存アプリケーションへの静的解析の導入についての内容でした。

レガシーなシステムに Phan を導入したが、ノー抑制で実行したら issue が3万超えくらい出たそうです。 たしかに、いきなり入れるとそうなりますよね。 でもそんな中でも、どうやって静的解析と向き合って導入していくかを話されていました。

  • リスクの高いところから育てる(エラーの可能性が高い・ほおっておくとクリティカルな問題になりそうなやつ)
  • コストの低いところから育てる(簡単で直しやすい・数が少ない)

「育てる」というワード良かったです。 すべて導入完了したらかなりの達成感でしょうね。

からの「CIで動くようにしてしまい、対応させた部分の解析エラーは通さない」 で、地道に導入を勧めていったという事でした。

そして最後に話されていた
「静的解析を導入して小石を潰せば、レビューでは重要な問題だけに取り組むことができる」
これ間違いないと思いました。がっちり揃えると、やはり読みやすさやレビュー時のフォーカスの当たる場所がはじめから違います。
こういうところって意外と見落としがちですが、実はとても大切で知らないうちに大きな恩恵を受けていますよね。

静的解析って既存のアプリケーションに導入するのそれなりのハードルがありますが、導入においてロードマップをしっかり引いてやっていく事が大事だなと思いました。

PHPer茶会

トークが終わった後で、ノンアルコールがメインの懇親会という位置づけの PHPer茶会 が開催され、参加しました。

昨年のPHPerチャレンジ優勝者の@nrslibさんのトークなどもありつつ、食事と共にフリータイム的な参加者同士のコミュニケーションの場でした。

私の座ったテーブルではカードゲームがいくつか置かれていて、それらをテーブルを一緒した方々と楽しみました。 意外とゲーム自体も面白かったし、何より初対面の方々と会話が弾んだのがよかったです。

day 2

2日目、最終日。この日はオープニングから参加しました。

10:00 開始でしたが沢山の人がいて、朝から賑わっていました。 10:05位に到着して、モーニングいただこうと思いましたが、既に完売していたくらい。

ジェネレータで無限を手玉に取る術

ジェネレータについての解説とその応用についてのトークでした。

トークすごく面白かったのですが、いいところで時間が足らなくなるという、、是非とも再演していただきたいです。 聴いていた側もあっという間の時間でした。

トーク中に出てきたリポジトリはこれ
https://github.com/zonuexe/phperkaigi-generator

マスターデータの管理運用と実装について

アプリケーションとは切っても切り離せないマスターデータの管理や、開発・運用の効率化についてのトークでした。

マスターをどこで持つかっていうのは、最初に決めたらなかなか管理方法の変更は工数的にも難しいし、運用が開始されたらなおさらなので、一番最初にしっかりとやっておくべきことの一つですよね。

トークでは、そのデータは「誰」が使うのか、それを「いつ」使うのか。変更は「誰」が行うのか、「いつ」行うのか。といった側面も加味して決めていくことが大事だと話されていました。 たしかに、扱う人(人に限らずかな)の側面も考えるとどこでマスターを持つかというのも決めやすくなりますね。

トークでは、エクセルを用いた管理法を紹介されていました。追加が頻繁に発生するようなものだったら良さそうだなと思いました。

ちなみに、エクセルは人が操作するので当然入ってはいけない値があったりなかったりも当然ありますが、そこは CI でのテストで弾くことで異常データの混入を防ぐといった事も話されていました。 エクセルファイルを誰がどういった方法でアップロードするのかにもよるかもしれませんが、なるほどたしかにその手もあったかと思いました。

しかしあんなに関数とか挿したエクセルでもしっかり読み込めるんですね。ちょっと目からウロコでした。

ライブラリどれだっけ、これか。
PHPOffice/PhpSpreadsheet
今度使ってみよう。

PHPシステムをコンテナで動かすための取り組みのすべて

レガシーなシステムの実行環境をコンテナ化した際のトークでした。

オンプレ上でPHPコンテナを動かす際に実際に取り組んだ事についての話でしたが、AWS への移行が先々にあって、そのために一度オンプレ上の環境をコンテナ化したのだそうです。

いきなりクラウドに行ってしまいがちだけど、一回オンプレ上でコンテナ化しておくことでイメージを持ちやすくなる事はもちろん、開発環境に関しても同じようにコンテナ環境で構築したりの流れも作りやすいだろうなと思いました。

こうして行った事の一連を一つ一つ共有してくださるトークもとても勉強になります。 技術もそうですが、どうしてそうしたのかなどの判断の部分や直面した問題など、普段ではなかなか聞けない話ですから、ありがたかったです。

もしもPHPソースコードが読めたなら...

PHPのソースコードを読んでみようというトークでした。

PHPのソースコードを読むまでに必要な環境の揃え方や、どういった感じで読んでいくと良いのかについて話されていました。

影PHP勉強会Wiki
https://github.com/hanhan1978/shadow-php/wiki
手順等はここを参照すればOK、とのこと。

以下雑多なメモ。

いちばん大切なことは「なぜ読むのか」を持つこと
具体的な動機や知的好奇心など、何かを持って読もう
ソースの読み方
  • PHP の Github があるので git clone してエディタで開く が最速だけど、慣れないと効率が悪い
  • 関数ポインタとかで飛ぶのでステップ実行で読むと良い
  • gdb(GNU Debugger)が良い
  • 一行ずつ処理を目で追いかけられればわかりやすい
gdb に必要なもの
  • gcc
  • Mac は LLVM をつかっていて gcc ではない -> Linux上で phpenv * php-build を使えば完全に解決
gdb Cheat Sheet
ググれば随所で公開されている。

わかりやすかったし面白かった。個人的には今回のPHPerKaigiのベストトークです。

Webアクセシビリティを支えるための技術

Webアクセシビリティについて、サーバーサイドエンジニアリングがWebアクセシビリティのために何ができるのかを考えようといった内容のトークでした。

Webアクセシビリティ
  • アクセス可能性
  • 誰でも隔たり無く平等に提供できること
Web Content Accessibility Guidelines (WCAG)
https://waic.jp/docs/WCAG21/
  • レベル A → 感覚的な特徴
  • レベル AA → フォーカスの可視化
  • レベル AAA → 音声のみ(ライブ)
できること(一部)
  • コントラスト比を高く
  • 画像に代替テキスト
  • アウトラインを消さない
  • 音声を勝手に再生しない
  • 適切なマークアップ
サーバーサイドとして
Webアクセシビリティに自分ごととして向き合う -> まずは意識が大事

速度改善についてキャッシュなどをつかって高速化していくあたりの話で、「適切にタイムアウトさせる」という部分はたしかにと思いました。 高速化は叫ばれているが、意外とこういう部分もユーザーの体験に関わってくるなあと。

GitHub Actionsで始めるPHPアプリケーションのCI実践入門

GitHub Actions を用いたCIについてのトークでした。

GitHub Actions
  • GitHub と完全に連携したCI/CD機能
  • yaml で記述
  • public リポジトリは無料
  • private でも無料枠がある
  • ワークフローを起動させるには .github/workflows/ に.ymlファイルをおくだけ
  • アクション = steps で指定できる処理のかたまり
  • 結果を curl で外に吐き出したり github pages に出力できる
  • 実行結果は github 上で確認できる

Github Marketplace で公開されているアクションを探すと環境も簡単に構築できそうなので、使いやすそうだと思いました。 これも機会があったら試してみよう。

3日間のイベントもあっという間にクロージングへ。

この後は懇親会が開催され、3日間におよぶ PHPerKaigi は終了。

今回で3回目の参加でしたが、トーク以外の企画も盛り沢山で、ノベルティグッズのクオリティもとても高くて毎回驚きます。

スピーカー、スタッフ、スポンサーのみなさま、有意義な3日間をありがとうございました。

ノベルティ