2023/02/03 に約3年ぶりのメジャーバージョンアップデートであるPHPUnit 10がリリースされます。
3年ぶりということもあって、PHPUnit 9からの変更はとても多いです。
例えばPHPのrequireが7.3->8.1へと大きく変わったり、大量のクラスやメソッド、オプションが削除されたりなど・・・
今回のトークではPHPUnit 10で何が変わったのか、changelogベースで解説していきます。
必要に応じて、実際に動かしたりしながらの解説もしていきます。
弊社で5月から11月に行われたプロジェクトはエンジニアから見てウォーターフォールのようにスケジュールが組まれていた。
終わってみると特に炎上らしい炎上はなく、プロジェクトは成功した。
ここで疑問が湧いた。ウォーターフォールに思えたプロジェクトは何が要因でうまく遂行できたのか?
弊社では昨年末よりスクラムによるアジャイル開発に力を入れていたが今回は明確な期日が決められ、スケジュールが組まれたウォーターフォール・・・
力を入れていたアジャイル開発とはなにか、なぜアジャイル開発が良いと思っていたのか。そこでRobert C. Martin著「クリーンアジャイル基本に立ち戻れ(邦題)」を輪読し、うまく行ったウォーターフォールにあったアジャイル要素を見つけた。
このセッションでは弊社のウォーターフォールの事例からクリーンアジャイルで説明されているプラクティスの何が効いたのか紹介します。
「本にはこう書いたけど実は...」で始まるお話をしたいです。書籍はネット記事や論文と違って、いつまでも本屋さんに置かれる商品なので、考えることがいろいろあります。どんな手口で何をたくらんでいたのか、書いてないけど裏で考えてたことは何か、なんでアレをそう書いてコレはこう書いてないのか... ここでしか言えない (Twitter で漏らしてしまうかもしれないけど) ことを語らせてください。
昨今、WebAssemblyへの注目度や活用が盛んになってきています。Kubernetesへの利用 やdocker desktopで動作可能になったり、ブラウザ以外への利用も広まってきています。
特にPHPerから見ても実用性のある技術になってきていると感じており、wordpress-wasmを始め、ブラウザ上でPHPを動かすという世界観も現実味を帯びてきました。
そこで今回のトークでは、PHPをWebassemblyを用いてブラウザ上で動かす技術を紹介します。
デモとして実際に動かしてみて、そのために必要な技術や課題観を皆さんに共有できたらと考えています。
ウェブアプリケーションが思ったほど速度が出ないときに、"Cache"を利用することは多いかと思います。 例えば、実行時間のかかる SQL クエリの結果を "Cache" したり、複雑な計算処理の結果を "Cache" したりです。
しかし、パフォーマンスが上がるはずなのに、思ったほど効果がでないということがあります。そんなときは、"Cache" の基本に立ち返って、理詰めで考えてみることをおすすめします。
本トークで話すこと
Webサイト制作を仕事として受けているか否かに関わらず、
企業から相談を受ける立場で仕事をしていると、定期的にやってくるのが「Webサイトがハッキングされた!」という駆込みです。
私は会社員時代も含め、かれこれ10回以上この手の相談を受けてきました。
そしてそのほとんどは、Webサイトのサーバにバックドアを設置された事案でした。
WordPress 等の普及によって、本来システム屋ではないWebサイト制作事業者が気軽に PHP を動かすようになったことがその大きな要因ですが、
それが PHP である以上、我々 PHPer にとっても他人事ではありません。
今回のセッションでは、実際に PHP でバックドアプログラムを書きながら、
・バックドアとは具体的にどのようなものか
・原因と対策
・我々 PHPer に何ができるのか
をお話しします。
「ブラウザでURLを入力してwebページが表示されるまでの仕組みを説明してください」
こんな質問をされたら、あなただったらどのように答えますか?
webアプリケーションを開発する上で、多くの技術的要素を理解していることが求められますが、
正直なところ現時点では上記の質問に対してうまく説明できるかは不安です。
この状況を踏まえ、普段何気なく利用しているブラウザの向こう側の仕組みについて、
自分なりに色々と調べてみて、当日の登壇では時間の許す限りその調査結果をお伝えしようと思います。
「Testing Pyramid(テスティングピラミッド)」皆さんも聞いたことがあるのではないでしょうか?
テストレベルごとにテストの量(数・実行)を上層ほど小さく下層ほど大きく(ピラミッド型に)すると良いというコンセプトです。
一方、React Testing Libraryの作者であるKent C. Dodds氏は「Testing Trophy(テスティングトロフィー)」というインテグレーションテストに最も重点をおいたテストコンセプトを提唱しています。
発表者はあるAPIサーバの開発にあたり設計時点でテスティングトロフィーを目指す決定をしました。
本発表では「なぜそれを目指したのか(選択したアーキテクチャからテストコンセプト決定まで)」「いかにそれを実現していったか(インテグレーションテストを軽量に追加する仕組みでコストに対抗する)」について紹介したいと思います。
サイボウズのGaroon開発チームでは「完成度低いの歓迎LT大会」を不定期に開催しています。
このLT大会の目的は、登壇のハードルを下げることです。
LT大会を重ねるうち、より登壇ハードルを下げるため「完成度の低さ」が歓迎されるようになり、完成度の低い発表は実況スレッドで褒められるように、逆に完成度の高い発表には「完成度が高すぎる」と指摘が入る現象も発生しました。
このスポンサートークでは、完成度低いの歓迎LT大会を開催することになった経緯とその成果についてお話しした後、
実際にGaroon開発チームの3名による「完成度低いの歓迎LT大会」をお届けします。
直に完成度低いの歓迎LT大会の雰囲気を感じ取ってもらえればと思います。
どうぞ本家のLT大会のように、完成度の低い点を褒め、完成度の高い点には指摘しながらご参加ください。
株式会社フォトラクションでは「建設の世界を限りなくスマートにする」というミッションのもと建設支援クラウドPhotoructionを提供して早5年超。
サービスの基盤の大部分はPHP/Laravelで実現されております。
我々の提供するサービスがどのような課題を解決しているか、またそれらがどのような構成で実現されており、日々技術的な課題に向き合い改善しているかを紹介させて下さい。
それらを通じて、皆様に建設DXの世界を少しでも知っていただけると幸いです。
例えば消費税や販売手数料等の金額計算をしなければならなくなったこと、ありませんか。
var_dump(0.1 + 0.2); が何を表示するかすぐに答えられるでしょうか。
このトークでは、PHPで任意精度演算を行って「正しい」金額計算を行う方法について説明します。
なんとなくintやfloatを使って計算するのは、もうやめにしてみませんか。
想定対象者:
ISUCON は「いい感じにスピードアップコンテスト」の略で、ほぼ同様の処理をするよう作られた Web サービスの参考実装が複数の言語で用意され、参加者は競技中好きな言語を選んでその性能改善をしていきます。2022 年に実施された ISUCON12 の本選参加チームには PHP は使われなかったのですが、参考実装はきちんと存在しています。
このトークでは ISUCON12 本選問題の PHP 参考実装を使い、時間制限を気にせず、本選参加者の感想ブログの取り組みを平然とパクりつつ、PHP でどこまでスコアが伸びるか試した際の知見をお話します。
PHP はサービスをいい感じにスピードアップするのには不向きなのでしょうか。Go のような本選常連組の言語にはかなわないのでしょうか。それとも、本選で良い成績を残した他言語の参加者と同じ取り組みをすれば、同じようなスコアが出せるものなのでしょうか。
PHP は歴史の中で大きく進化し,PHP 7 からは本格的に型付けをサポートし,PHPStan や Psalm といった強固に型を静的解析するツールも生まれました.チームで PHP を用いて開発していると,型や静的解析の方針や方法に差異が生まれてしまうことがよくあります.しかし,安全に継続して開発をしていくためには,その手法を統一し体系立てて利用されるべきです.また,手法から外れて開発を行うプログラマからコードを防衛すべきです.
このセッションでは,そうした防衛的な手法を多く取り入れて,安全に,長く PHP を使って(バージョンアップに遅れを取ることなく)開発を続けていくための方法をご紹介します.
PHP における参照に似た機能は、他の言語にも存在しています。C のポインタ、C++ の参照、Java の参照型、C# の参照渡し……。しかしこれらは、それぞれ細かな点で PHP のそれとは異なっています。
PHP における参照を完全に理解すべく、1) PHP レベルでの挙動を観察し、2) PHP 処理系 (https://github.com/php/php-src) のソースコードを追いかけます。
対象: 重箱の隅をつつきたい PHPer、または PHP の language lawyer になりたい人。PHP 処理系は C で書かれていますが、C の知識は (あまり) 要求しないようにするつもりです
目標: PHP の参照を、実装レベルで完全に理解すること、また、php-src を少しだけ探索できるようになること
話さないこと: 参照のメリット・デメリットや使うべき場面
「composer install打ったらいい感じになるよね」「なんかDockerfileに書いてあるよね」
かつて私のComposerとの向き合い方はこのレベルでした。
しかし自サービスをコンテナ化するにあたり、Composerときちんと向き合い彼らとの絆を得ました。
本セッションでは「Composerってなんだっけ?」から入り、Dockerコンテナにおける取扱いまで触れていきます。
◆ 話すこと
基本的な役割
主なコマンド
composer.json?composer.lock?
いろいろな実行方法(コマンド・composer.phar・Docker Image)
Docker(コンテナ)とComposer(マルチステージビルド)
自サービスで最終的に採用した方法とその理由
◆ 想定する観客
Composerをなんとな〜くで使っている方
Docker環境でComposer使いたい人
PHP ParserとはPHPのコードをパースするライブラリです。これは静的解析やコードの操作等に用いられます。例えば、PsalmやPHPStanがこれを利用しています。
そんな言わばPHPを最もよく知るライブラリからPHPのことを学ぼうというのが本トークのテーマです。
本トークではPHPを構成する要素に着目します。PHP Parserはコードをパースし、ノードと呼ばれる単位に分解します。静的解析はノードを一つ一つ読み取り、コードを解釈します。ノードは170種類以上あるのですが、それはPHPが多様な要素から成ることを物語っているように思います。
ノードの定義を読み解くことで、PHPにおける文や式とは何なのか、どんなバリエーションがあるのか、PHPはどんなパーツから成り立っているのか等を確認したいと思います。(また、その過程でPHP Parserについても少し理解できると思います。)
このセッションは、自社での「データの民主化」の過程でうまくいかなかったことから得られた学びと、
その学びをどう生かしているのかという話をします。
「データの民主化」と調べると、データ基盤の構築や、BIツールの導入、ダッシュボードの構築などの話が多くでてきます。
これらは大事なことですが、しかしこれらを作っただけではデータの扱いに慣れていない方には一向に広まらず、
一部の人しか活用できてないという結果だけが残ってしまい、これだけでは「データの民主化」にはならないということを学びました。
この学びから、アプローチを変え再度「データの民主化」に挑戦していると話をします。
PHPのプロセスは非常に脆く、簡単に処理が停止してしまいます。
処理途中で切断され意図しないデータが残ったりするケース、皆さん誰しも経験があるんじゃないでしょうか?
シグナル制御を行うことで処理を安全に終了することができます!
本セッションでは、安全にプロセスを停止するためのシグナル制御について解説します。
みなさん、 Rector は使っていますか?
近年 PHP を語る上で欠かせなくなりつつある各種静的解析ツールですが、中でも Rector は PHPStan に由来する静的解析のパワーを最大限活用し、コードを意図した形に変換してしまうパワフルなツールです。最近 PhpStorm も標準で対応するなど、盛り上がりを見せています。
今回はこの Rector を最大限活用し、実際にプロダクション環境の PHP を 7.4 から 8.1 にアップグレードしたときのお話をさせていただきたいと思います。
情報共有には「正しい文章」もさることながら「図で示す」のも重要です。
手書きで図を描いたり作図アプリで記述しても良いのですが、ここでは PlantUML によるテキストベースで図を描く方法について注目していきたいと思います。
「UML」と聞いて「仕様や細かいルールがあって難しい・面倒くさそう」と思っていませんか?
全てのルールに従って「正しい UML」を書くことにはとても価値がありますが、一部のルールに従いきれていなくとも「図を示す」ことにも価値があります。
ここでは、PlantUML をがんばり過ぎずにふんわりと使った図の共有についてご紹介したいと思います。