Long session (60 mins)

PHP スクリプトの挙動を機械語レイヤーまでぶち抜いて観察する

sji_ch sji

普段我々が使っているコンピュータシステムというのは、階層的なシステムです。

物理法則から電気回路が作られ、ハードウェアが作られ、ハードウェアの上で動くファームウェアや OS があって、更にその上で動くアプリケーションがあって、アプリケーションの中でも C 言語で書かれた PHP 処理系、更にその上で動く PHP で書かれたスクリプト、というように、何重もの階層化がされています。
土台になるものから高く階層を積み上げていく、というイメージで、階層の上のほうにある技術を高レイヤー、下のほうにある技術を低レイヤーと呼んだりします。

PHP のスクリプトというのは比較的高レイヤーに属するプログラムなわけですが、PHP コードがコンピュータ上で実際にはどう振る舞っているのか、どういう仕組みでできているのか、というのは、当然より低レイヤーの技術で成り立っています。

今回のセッションでは、そんな PHP より低レイヤーの世界へ FFI を通じて PHP スクリプトからアクセスし、PHP 自身から階層をぶち抜いてスクリプトの動作を下の方から覗き見てみるという、少しひねくれたことをやるツール、php-profiler についてお話します。

雑に言うと、PHP スクリプトによって ELF/DWARF と procfs と ZendEngine の内部構造体をパースしつつ、FFI で外部プロセスのメモリやレジスタ内容を読み取り、gdb などのデバッガと同じようなやり方で、スクリプトの動作を処理系の内部動作レベルから盗み見るお話です。

ある瞬間に PHP プロセスが PHP コードの何行目を実行しているのか、どんな処理系内部のバイトコードを実行しているのか、そしてそのために処理系や拡張モジュールの C 言語コードのどの部分の何行目が実行されているのかを、観察対象の PHP スクリプトへ全く手を入れないままに読み取ります。

2
Long session (60 mins)
Operation Infra / Middleware / Cloud

WordPress Site Management w/ EasyEngine

OGProgrammer Joshua Copeland

Are you still using Apache/Nginx and a bunch of virtual hosts to create your own shared hosting server? Stop tinkering with configs on your server because this talk is just for you. In this talk I’ll share how I manage my sites with EasyEngine. EE is a docker setup that uses Nginx, php-fpm, and Redis to spin up sites in a blazing fast and repeatable way. I’ll go over how I use EasyEngine with Google Cloud Compute, Terraform, and Namecheap to create a server, point a domain, and create a site in just a handful of steps. This has allowed me to be able to migrate sites in a super fast way to new operating systems and keeping security patches in tip top shape. I’ll go over how to use LetsEncrypt which is built right into EasyEngine for free SSL certificates and how you can backup/migrate sites quickly. After this talk, you will be ready for lift off with EasyEngine!

Long session (60 mins)
Architecture

フラットなPHPからオブジェクト指向PHPへ

77web 菱田 裕美

PHPを始めたばかりの初心者の方は1つのファイルにすべての処理を書き込むところからスタートすると思います(フラットなPHP)
一方で、プロダクトは一度作って終わりではなく必ず改修が必要になります。フラットなPHPで開発するとぶち当たる改修の難しさを軽減し、より良いプロダクトを作るためにオブジェクト指向という考え方があります。
「オブジェクト指向」という言葉を聞いたことはあっても「なんとなく難しそう…」と二の足を踏んでいる人も多いでしょう。この機会に入門してみませんか?
概念の説明だけでなく、実際にフラットなPHPに書かれている処理をオブジェクト指向を使ってクラスに分けて書くやり方を、実際にコードを書きながら解説します。

※私自身オブジェクト指向について学問的に学んだことがあるわけではありません。日々PHPで開発するのに必要な概念のみ話す予定ですが、学問的には間違った内容が含まれる可能性が少しあります。

4
Long session (60 mins)
Architecture

ソフトウェアアーキテクチャの選び方 in PHP

nrslib 成瀬 允宣

ソフトウェアはその生涯において、さまざまな要求を突き付けられます。
要求に応え続けるために必要なことは、コードをシンプルに保つことです。
ソフトウェアアーキテクチャは抽象化と問題の分割によって複雑性を減らし、コードをシンプルに保つことに貢献します。
ソフトウェアが中長期的に利用されることを前提とするのであれば、ソフトウェアアーキテクチャの理念やそれ自体を採用することは検討すべき事柄です。

しかしながら、ここにひとつの問題があります。
それはソフトウェアアーキテクチャが単一でないことです。

日夜進歩しつづけるソフトウェア開発の世界では、多くのソフトウェアアーキテクチャが生まれつづけています。
それらの中から、チームやソフトウェアの目的やライフサイクルに最適なものを選定するのは容易なことではありません。

そこで本トークでは「ソフトウェアアーキテクチャの選定」をテーマに、ソフトウェアアーキテクチャの特徴や実装例を紹介しながら、どういった観点で選定をしているかについてお話します。
本トークで取り上げる主なソフトウェアアーキテクチャは次のとおりです。

レイヤードアーキテクチャ
ヘキサゴナルアーキテクチャ
オニオンアーキテクチャ
クリーンアーキテクチャ
ADOP
※サンプルコードは Laravel を予定しています。
※本トークは JJUG CCC 2021 Spring で発表した内容を PHP にカスタマイズしたものになります

■トーク対象

  • ソフトウェアアーキテクチャがどんなものか知りたい
  • どういう観点でアーキテクチャを採択しているか知りたい
6
Long session (60 mins)
Beginner

初心者セッション

kashioka 有限会社アリウープ柏岡秀男

本当の初心者のためのPHPセッションです。
例年開催しており、PHPが初めて、途中で挫折した、プログラミング言語に慣れていない人に聞いていただきたい基礎的な内容です。
PHPとは何か、実行環境は、簡単なサンプルを交えながらPHPについてお伝えします。

Long session (60 mins)
PHP8 Laravel

Laravel でも非同期処理が扱える!? PHP8 から初める非同期処理 〜 Laravel Octane 〜

m3m0r7 めもり〜

Laravel 公式から非同期処理 HTTP サーバーとして動作する Laravel Octane は PHP8 から使用可能です。Laravel Octane は Laravel を開発しているテイラー自らが開発に乗り出しているものです。

Laravel Octane は非同期処理の話を賑わせている RoadRunner や Swoole に対応した HTTP サーバーで、重たい処理などを非同期に処理をしたいニーズにも満たしています。私自身は Laravel Octane とは別に laravel-swoole と呼ばれる HTTP サーバーを 1 年ほど試してきて、プロダクションで扱う際のノウハウをいくつか得てきました。そこで、Laravel Octane を使うメリット、Apache や Nginx と何が違うのか、使う上での注意点、laravel-swoole を使ってきて得られたノウハウを交えてお話できればと思います。

2
Long session (60 mins)
Architecture

アクターモデルとマイクロサービスアーキテクチャ 分散トランザクション

ex_takezawa 竹澤有貴
このトークはスピーカー都合でキャンセルになりました

マイクロサービスアーキテクチャ化を着手する開発組織も多いと思いますが、
最大の難関でもある分散トラザクションへの対応、みなさんはどう解決していますか?
読み込みに対するアプローチはたくさんありますが、
分散トランザクションを制御する為にPHPだけで解決しようとする場合は、
非常に難易度の高いチャレンジとなります。
分散トランザクションを制御するには並行システムと分散システムを表現する高いレベルの抽象化が必要となり、
その難しさは一般的なWebアプリケーション開発と異なる問題解決方法が必要となります。
アクターモデルはこれらの分散システムを解決するアプローチの一つとして取り入れることができます。
今回はアクターモデルフレームワークの一つでもあるProto.ActorとGoを取り上げて
分散トランザクションを解決するためのアクターモデルの知識と基本、少しのSaga実例を踏まえて解説します。
*本セッションはPHPではなくGo言語がメインとなり、
いくつかの難しい概念を扱いますので、
初学者の方にはお勧めしません。

7
Long session (60 mins)
Service Development

ついに、Webアプリでの帳票印刷のベストプラクティスを編み出しました

ttskch たつきち

みなさん!帳票印刷してますか!

令和になっても相変わらず紙の書類の需要は大きく、Webアプリ開発においても帳票印刷機能は多くの案件で要求されますよね。
しかし、これがとにかく面倒くさい。

・複雑なレイアウトの帳票をHTML/CSSでデザインするのが地獄
・かといって超微細Excel方眼紙でデザインするのはもっと地獄
・しかもPDFに変換するときに微妙に見た目が崩れてどうにもできない

帳票印刷機能を実装したことのある方には強く共感していただけるのではないかと思います。

そんな面倒で難しい帳票印刷ですが、この度、ついに最強の方法を編み出しました🙌✨

・ピクセル単位で細かく帳票をデザインできる(しかも簡単に)
・帳票デザインの保守性が高い(修正が容易)
・印刷時に見た目が一切崩れない

という条件を満たせる唯一(当社調べ)の帳票印刷メソッドです👍

この至高の方法の具体的な実践手順について時間の許す限り詳しく解説します!

有償の帳票エンジンはなかなか高額で導入できる案件が限られていると思いますので、自力で実装する場合のプラクティスの1つとしてぜひ参考にしていただければと思います✨

3
Long session (60 mins)
Database

PHPer のための Elasticsearch 入門

m3m0r7 めもり〜

みなさんは全文検索エンジンを使用したことはありますか。全文検索エンジンで有名なものと言えば Elasticsearch や Groonga, MySQL に備わっている Full Text Search (FTS) などです。MySQL の like で検索するとレコード数が多いデータの場合、数秒どころか数十秒、数分かかるなんてザラです。そこで全文検索エンジンを使うことで、多くのレコードやドキュメントを瞬時に検索できるようになります。Elasticsearch の仕組みの解説から、Elasticsearch-PHP を使って、実際にどのように全文検索のためのクエリを構築するのか、ユースケースを交えてお話できればと思います。

3
Long session (60 mins)
Service Development Test / Quality

理解しておくべき PHP のバリデーション

m3m0r7 めもり〜

Web アプリケーションを作るにあたって、絶対に外せないのは「ユーザーから受け取った値をデータベースに保存する」といったものです。
特に初心者が気をつけたいのは受け取った値の取り扱いです。例えば POST のリクエストで金額を受け取る時「is_numeric 関数だけを使えばいい」と答える人もいるかもしれませんが、これは答えとしては NO です。理由は 3 つあります。「金額は原則 0 以上の自然数である」「is_numeric だと float の値も true となる」、そして「PHP_INT_MAX 円で本当に大丈夫?」です。このようにバリデーションは実は奥が深いのです。様々なケースで、どういうバリデーションを書けばいいのか?金額だけではなく、電話番号、メールアドレスなど、セキュリティではなくプロダクトで必要となるバリデーションの話を広く浅く解説していければと思います。

1
Long session (60 mins)
Asynchronous

Swoole で安全にコルーチンを使うには

m3m0r7 めもり〜

何かと話題な Swoole ですが、特にデータベースや KVS (例えば Redis) 周りを扱うにあたって少しコツが必要です。Swoole の最大のメリットの一つとして手軽に非同期処理を導入できるという点ですが、データベースや KVS 周りはコルーチン安全ではない可能性があります。では、実際にコルーチン安全にして、既存のアプリケーションで使用するにはどうしたらいいのか、Laravel に Swoole を導入すると仮定して laravel-swoole と呼ばれるフレームワークをベースに解説します。

2
Long session (60 mins)

PHPer のための Go の歩み方

m3m0r7 めもり〜

ふと「別の言語も学んでみたいけど、とっつき方がわからない」と思う方も多いのではないでしょうか。
特に近年よく使われる Go などを触ってみたいけど、難しそうと思いなかなか手を出しづらいと思っている方もいらっしゃるかもしれません。
Go をチョットワカルようになるだけでも PHP にはない新鮮さ、楽しさを感じることができます。
そこで PHPer が Go を学ぶにあたって何を気をつければいいのか、どうすれば Go をチョットワカルようになるのか解説します。

2
Long session (60 mins)

PHPer のための TypeScript の歩み方

m3m0r7 めもり〜

ふと「別の言語も学んでみたいけど、とっつき方がわからない」と思う方も多いのではないでしょうか。
特に近年よく使われる TypeScript などを触ってみたいけど、難しそうと思いなかなか手を出しづらいと思っている方もいらっしゃるかもしれません。
TypeScript をチョットワカルようになるだけでも、業務の分野が広がり、フロントエンドエンジニアの業務がどういったことをやっているのか理解しやすくなります。
そこで PHPer が TypeScript を学ぶにあたって何を気をつければいいのか、どうすれば TypeScript をチョットワカルようになるのか解説します。

1
Long session (60 mins)
PHP8

噂の Fiber 試してみました

m3m0r7 めもり〜

みなさん、非同期処理に興味はありますか?私はめちゃくちゃ興味があります。ところで私が所属しているトラーナでは Swoole をプロダクション環境で使用しているのですが、昨今 Fiber が界隈を賑わせています。そこで Fiber を実際に試してみて、かつ Swoole とどう違うのか、何がメリットなのか、何がデメリットなのか?プロダクションで使用するにはどうすればいいのかをトークさせていただければと思います。

2