PHPerKaigi 2020 day2 参加レポート #phperkaigi

去年に引き続き参加してきました!

資料をまとめたり、感想やレポートを書いていきます。

PHPerKaigi 2020

phperkaigi.jp

場所は練馬駅

お祭りみたいで賑やかな雰囲気で楽しい。

テーマは「文化祭」、「同窓会」とのことで、楽しい仕掛けが多く、小さいところにもこだわっているなという印象

f:id:tiwu:20200211152216j:plain

なんと、今回からトレーディングカードが貰える!

f:id:tiwu:20200211163822j:plain

参加者同士でカードを交換して、交流するきっかけになればという意図らしい(たぶん)

効果の元ネタは気になるが、可愛い

トートバッグとその中身(一部)

f:id:tiwu:20200211193749j:plain
デニム生地で可愛い

f:id:tiwu:20200211194050j:plain
可愛いグッズたち

↓ここからセッション↓

自作して理解するxUnit

fortee.jp

speakerdeck.com

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

fortee.jp

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

www.slideshare.net

fortee.jp

実例から学ぶ、最後まで諦めない決済システム移行方法

speakerdeck.com

fortee.jp

GMOの人で、自宅勤務について聞きたい人は後ほど聞いてくれとのことw

おさいぽ!というサービスの決済サービスの移行

おさいぽ! -ネットのおサイフ-

ペパボ内での決済をするためのAPIとかが生えている

移行の背景は決済サービスが終了するため

成功の秘訣は、事前打ち合わせ、事前に本番環境でテスト、万が一のフローを策定の3つ

APIが生えているので、利用しているペパボのサービスに影響が出る

移行計画を作っていたが、サービス側と打ち合わせをしたら、作った移行計画では無理というのが判明

作った移行計画が駄目になるのは精神的に来るものがある

GW前にメンテナンスを入れて対応をした

本番でテストができないという先入観があったが、聞けば意外とできることがある

本番で動いたという自信を持つことが大事

移行2日前に3Dセキュア決済周りでエラー

これは、契約内容ミス

無事リリース後、エラーが

旧決済サービスの返金処理でエラーが

エラー時のフローを作っておいたので、そのフロー的にはロールバックするレベルではなかった

ステージングで無理やり旧決済サービスを動かしてなんとか対応

当日は疲れている・テンパっているのでエラー時のフローを作っておくと冷静に対応ができるので良い

基本は二人で対応をしていた

感想

エラー時のフローを作っておくのはすごく同意

基本的にエラー時はテンパっているので、行動のフローがあるとそのフローに沿って動けばいいので冷静になれる

本番で動いたという自信を持つことが大事

これもすごく同意

とてもわかる

クリーンな実装を目指して

speakerdeck.com

fortee.jp

PHPerがこれから「型」とお付き合いしていくために

fortee.jp

型システムとは、元々、型理論という分野

→数学などで使われる

最初は int, floatの違いを区別する

→計算速度向上のため

データ構造の不整合が実行前にわかる

PHPは実行前には・・・

特定のバグがないことを保証する

が、柔軟性が持てない、実行されないコードのエラーも検知するというデメリットもある

CならポインターでPC破壊できるが、PCは破壊できない

→型に守られている

とはいえ抜け道はある

しかし、安全の定義が不安定なのでなんとも

コンパイルによって、実行時に効率的なバイトコードになるでメリットが有る

静的型付け

→型に不整合がある場合プログラムは実行できない

動的型付け

→実行時に型検査され、不整合は実行時エラー(にならないこともあるので注意

静的型付けは自明なものは型を書かない

動的型付けは安全のために型を書く

弱い型付けの動的型付け言語、柔軟性が高い

型システムの強化、型宣言で性能が上がる

型が進むと、後方互換性との兼ね合いが心配になる

→新規ならガンガン行ける

ケース1 古くからメンテされているPHPの保守

開発環境はPHPStormなら、PHPDocで行くべき

→急に型を入れると壊れる可能性がある

ケース3 古くからメンテされているPHPに型が定義されたライブラリ導入

→型を合わせて気をつけて入れる

感想

最近TSをわりと書くようになったけど、ちょっと実行したいときにコンパイルが通らず実行すらできないときが多々あって辛いときがある

ちょっと書いて動かしてバグっていないかというトライ・アンド・エラー的な書き方なので途中でも実行できないと困ったりする・・・

ケース1 古くからメンテされているPHPの保守

開発環境はPHPStormなら、PHPDocで行くべき

型書きたいけど、引数に int, string 書いたらバグった(しかも後ほど気づく)とかがあるので、PHPDoc から行くというのはすごく良いなと思った

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

fortee.jp

Zend VMにおける例外の実装

www.slideshare.net

fortee.jp

PHPPHPを実装する 〜プログラミング言語実装入門〜

fortee.jp

プログラミング言語処理フローは主に字句解析、構文解析、評価

評価するとは、ASTをたどる、バイトコード変換、機械語に変換

PHPバイトコード変換、GoとかCとかは機械語変換

機械語に変換のほうが早いが人間が読めたりするものではない

まずはコードをパースしてASTを作る

AST = 抽象構文木

ソースを表すオブジェクト

今回は PHP Parser を利用

parser に文字列でコードを渡せば AST ができる(簡単そう

ASTは配列だから for で回して、 switch で実行していく(switch 内は再帰していく

自作PHPの強さは、再代入禁止とか、静的解析できたりカスタマイズ可能

PHP を超える PHP を作れる

感想

フロントエンドの勉強会とかにいくと、たまに話しに上がる AST

PHP Parser 食わせると AST ができて、それを for で回して switch で実行していく」と聞くと、読める・書ける・いけそうな気がしたw

いつも AST の話はよくわからなかったけど、初めてすっと入ってきた気がする

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

fortee.jp

ぼっちからはじめるレガシーカルチャー改善ガイド 〜はじめの一歩編〜

fortee.jp

PHP 4, 5 のミックスで最初は開発(XAMP

今は Laravel にしたりdocker にしたり Nuxt 使ったり

改善の最初は最初は自己研鑽と信頼貯金を貯める

勉強会などに参加して、他社とのギャップを知って、自社に展開できることを探していく

最初はインデントを整えたり、開発環境を良くしたりという、プロダクションに関係のないところから行った

一人目の仲間を見つけたのが最初のゴール

1人目を見つけた後は?

→2人目を見つける

チームが一人のときは・・・?

→外(コミュニティ)に仲間を見つける

本当に一人?

→人間なかなか、1人で仕事していることはほぼない

感想

他社とのギャップを知って、自社に展開できることを探すフェーズはすごく同意

最初のゴールが1人目の仲間を見つけるところは、カイゼン・ジャーニーっぽいなと思った

実際の改善はプロダクションに関係ないインデントを整えたりというスモールスタートなのも良さそう

チーム(エンジニア)が1人のときはどうするか?という問いに、「本当に1人だろうか?1人で仕事をしているなんでほぼありえない」みたいなこと言っていてメチャクチャ同意の嵐だった

今だからこそ振り返る register_globals

speakerdeck.com

fortee.jp

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

fortee.jp

UX ピラミッドの一番下にアクセシビリティがある

WCAG というアクセシビリティのレベルがある

Web Content Accessibility Guidelines (WCAG) 2.0

レベルA 感覚的な特料

レベルAA フォーカスできる(キーボードで操作ができる

レベルAAA メディア(音声)の代替を用意する

ハイパーテキストはテキストを相互に関連付ける仕組み

→これを実現するものがHTML

サーバーサイドエンジニアとしてwebアクセシビリティを自分ごとにする

適切なHTTPステータスを選択する

感想

UXピラミッドを調べてみたけどたくさん出てきて、どれかわからなかった :eye:

alt 属性を DB に入れておくとかは、ブログメディアとか良さそうとか思った(みんな既にやっている?

ステータスコードは 200 で返して、中身でエラーとかは難しいところがあるので同意

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

speakerdeck.com

fortee.jp

Issue 追加でも動く

GitHub Actions, windows 選択できる

初期状態はコードがない(Issue 発火もあるからか?

Github 公式は actions/ で用意されている

アクションは Docker + TS で作れるらしい

Creating a JavaScript action - GitHub ヘルプ

JSで作れそうな匂い

永続化の手段は公式?に用意されているそう

Persisting workflow data using artifacts - GitHub ヘルプ

感想

最近個人的にも使っている GitHub Actions

Issue で発火できるのは知らなかった

GitHub + Actions + Pages でいい感じのなにか作れそうな匂いを感じた

API リストとか、DBの定義リストとか、開発で必要な何かとか

Serverless Pattern

slide.seike460.com

fortee.jp

LT

PHPでもVTuberになりたい!

fortee.jp

FaceOSC というOSSの顔の頂点座標をとるライブラリ?があるらしい

Releases · kylemcdonald/ofxFaceTracker · GitHub

これをPHPで受け取るライブラリがないらしい

ないなら作る!

PHPでVtuberになりたいとか、機械学習とか// 第47回社内勉強会 #sa_study | BLOG | 株式会社スタジオ・アルカナ

www.slideshare.net

力こそパワー、すごい

PHPでleetCodeのeasyレベル100問ノック

fortee.jp

LeetCode - The World's Leading Online Programming Learning Platform

いろいろな問題がある

8割位PHPで書いてみた

他の人がコードが読めるので勉強になる

試し実行が10秒くらいかかる

先にテストを書いて、PHPStorm で動かしてやっていた

パズルゲームのように解いていくと楽しくできる

PHP未経験者を育てる独自フレームワークの作り方

speakerdeck.com

fortee.jp

沖縄でビーチ駆動開発(開発しづらいw

FWなど使わずブログを作っていく研修

ルーティングとかけっこう大変らしい

RFCの歩き方

speakerdeck.com

fortee.jp

Request for comment

PHPの機能追加の話

英語は基本グーグル翻訳

RFCは前書きさえ読んでおけば良い

コードがあればラッキー(英語は難しい

補足の後に互換性と投票が書かれている

PHPerKaigi2019への参加がきっかけで社内勉強会の主催するようになった話

fortee.jp

YouTube を社内で流す勉強会を開催

→準備は楽そう泣きがする

上映会で一番盛り上がった「PHPデザインパターン」を学ぶ会を主催

参加者0人のときの寂しさはとてもわかる

PHPとRustを組み合わせて音声ファイルをエンコードする話

speakerdeck.com

fortee.jp

PHP FFI

FFI = ネイティブコードを呼ぶ仕組み

PHP7.4 で採用された

PHP音声ファイルエンコードFFmpeg が定番

デフォルトでは有効化されていない

brew 経由 php ならデフォルトで FFI が有効化されているらしい

結構難しかった

自分の名前を"ちゃんと"入力したい人生だった

fortee.jp

濱とはま(変換に出ない)

異体字という

shift_jis とかでは異体字がないので、入力ができない

unicodeならいける

絵文字と同じ要領でいける

🙆‍♂️←色違い

異体字も文字と異体字スキン?で表現できる

異体字の元DB?は3種類

Adobe に濱がない

が、別のDBにあるのでそれを持ってこればいける!

(おまけ)ネットワーク

MacBook Air1台でDNSサーバーにしている

が、今回はルーター?がちょっと弱かったらしい

LAN経由で電源を供給できる機器がある

ついでに通信ができるw

今回は最大153台

最後に

殴り書きのメモの羅列になってしまった

PHP 単体の話も面白いが絡めた話も面白い(LTとか特に)

久しぶりに会った人が何人かいてテーマにある「同窓会」を噛み締めた

Twitter で部屋が暑いと呟いたらすぐ冷房が効いて、スタッフさんありがとうございました :pray: