突然ですが「良いコード」とはどういうコードでしょうか?正解は一つではありませんが、私は「複雑さ」(Complexity)が見えないコードが良いコードだと考えています。複雑さが見えないコードはインターフェースが直感的で、リーダビリティが高くて、変更が容易です。
では、複雑さが見えないコードを実現するにはどうすればよいでしょうか?そこで登場するのが「deep module」という考え方です。「deep module」はスタンフォード大学のJohn Ousterhout教授が『A Philosophy of Software Design』という書籍で提唱しているモジュール設計の考え方です。
本セッションでは「deep module」とは何か?deep moduleを実現するにはどうすればよいか?という疑問をPHPのコードを用いて可能限り具体的に解説したいと思います。「deep module」を理解すれば、きっと今よりも「良いコード」が書けます!
みなさんは PHP にどのようなイメージをお持ちでしょうか。Web のイメージが強いのではないかと思います。
しかし、PHP は Web 系以外、例えばそう、 JVM などを実装することも可能なのです。
JVM とは、 Java Virtual Machine の略で、 中間コードにコンパイルされた class ファイルを動かすための仮想マシンのことです。
JVM は JVM Spec と呼ばれる Oracle が公開しているドキュメントがあるため実は PHP でも開発することは可能です。
30 億のデバイスで PHP が走ると思うとワクワクしますよね。
本セッションは PHP という言語の枠組みの中でどのようにして JVM のようなスタックマシンを実装したのかをトークさせていただきつつ
実際に Hello World を出力するところまでをお話できればと思っております。
現在では PHP も立派なオブジェクト指向パラダイムを持つ言語のひとつとなりました。しかし、オブジェクトとは一体何でしょうか?
モデリングパラダイムとしてはオブジェクトの他にもデータモデルの設計によく使われるERモデルやリレーショナルモデル、または関数型言語のベースになっているラムダ計算などがあります。
本発表ではオブジェクトとは抽象データ型であるという立場を基本とし、その他のモデリングパラダイムとどのような共通点・相違点があるのか考察し、異なるモデリングパラダイムの間に生じてしまうインピーダンスミスマッチをどのように最小化していくかについて述べていきたいと思います。
PHPのフレームワーク(LaravelやSymfonyなど)やテストスイート(PHPUnitなど)で利用できるアノテーション。とても便利な書き方ですが、実際どのように処理され、動いているのかあらためてご紹介します。さらに使いどころ、メリット・デメリットについても触れていきます。
最近注目を浴びているPHPの非同期処理機能拡張が「Swoole」です。Swoole を利用することで、PHP単独では実現不可能だった同時並列処理が実現できます。
では Swoole の非同期処理は、一体どのように実装されているのでしょうか?
本セッションでは Swoole のC++ソースコードの奥深くまで探索し、非同期処理がどのように実現されているかを解説します。
このセッションを聞けば、ブラックボックスの魔法のようだった Swoole がより身近になり、中で何が起きているか容易に想像できるようになるでしょう。
E2Eテストは"遅い"や"不安定"という理由で実施を諦めていませんか?
また、E2Eテストは大変すぎる、と思っていませんか?
おおくの現場でE2Eテストの範囲や実施内容に対する理解は、単体テストや結合テストと比べて曖昧になっているような気がします。
このセッションでは、Testing Pyramidと、その中でもE2Eテストの範囲や実施内容に対する理解を深め、どのようなツールを使うと良いのか?
といったプラクティスを解説していきます。
CakePHPは2.xから3.xで大規模な変更を実施すると共にポストPHP5.6時代に十分に適応したソフトウェアに進化しました。4.xでは、「PHP7.2を必須とする」という方針が採用されています。
php-figのメンバーでもあるCakePHPは、どのように「時代に合わせた進化」を遂げてきたでしょうか?
これまでの軌跡を辿り、リリースが近づいている4.0(※)の概要、その先にある4.1/5.xへの言及にも触れながら、その思想の背景を読み解きます
※2019年11月時点。カンファレンスまでにstableが出ていると思います
パーサーやインタプリタを作ってみたいと思ったことはありますか?私はあります。
パーサーを作りコードをパースする一連の流れを実装することで、
コンパイラやインタプリタの気持ちを理解できるようになれば、プログラミング言語に対する距離をより縮められると思っています。
「PHPで何を作ろう?」と思ったPHP初心者の私は、この機会にGo言語のインタプリタをPHPで実装することにしました。
本発表では、PHPでGo言語のインタプリタを作成した話をします。
この発表を通して、以下のことを伝えたいと思います。
対象の言語仕様によってパース処理は異なりますが、インタプリタを実現するまでのステップや流れは同じになるはずです。
この発表を通して聴衆のみなさんが自分の興味がある言語のインタプリタを作り始められるようになるのが、本発表のゴールです。
我々が普段慣れ親しんでいるアプリケーションの最新の状態をデータストアに記録するという考え方をステートソーシングと呼びます。
対してイベントソーシングは、操作による状態の変更差分をイベントとして記録し、最新の状態を過去のイベントによる変更を積み重ねた結果として捉える考え方です。
PHPにも、Prooph、Broadway、EventSauceなどイベントソーシングに基づくアプリケーション作成を支援するライブラリが存在します。
本セッションではイベントソーシングの考え方を解説した上で、EventSauce (https://eventsauce.io/) を利用した実装についてご紹介します。
お話ししたいこと
話さないこと
2018年12月より新経営陣を迎え、創立22年のエキサイトは再始動いたしました。
抜本的な改革を断行した結果、2020年3月期の上期決算において、エキサイト史上最高の利益を残すことができました。
その大改造の様子や今後について説明いたします。
PHPといえばレンタルサーバー、そういう時代がありました。いや今もあります。
数多くのサイトを提供しているレンタルサーバーは、PHPerKaigiのようなカンファレンスにいらっしゃる「エンジニア」な人たちには少々嫌われているような気がします。おっしゃることはわかります、私も人に手放しで勧めたりはしません。
しかし、私はレンタルサーバーが好きです。
長らくCMS実行環境としてしか見られていないレンタルサーバーですが、時代が進むにつれ、あれ?これっていいんじゃないの?もしかしてワンチャンあるのでは?という魅力も増えていると私は考えています。
いま一度私とレンタルサーバーを見つめてみましょう。
話す事
・PHPer目線で見る、レンタルサーバーの強みと弱点
・レンタルサーバーをPHPerとして活用するテク
・モダン(?)なデプロイと開発、運用
・VPSからレンサバにアプリを移管する話
話さないこと
・WordPressなどのCMSに関係すること
・定番フレームワークがどうたらこうたら
想定聴講者層
・上記にピンときた人
・レンタルサーバーをつかったことがない、最近つかっていない人
・レンタルサーバー業者の人
非想定聴講者層
・マイノリティな好奇心や探究を、マジョリティでないだけで最大公倍数的な優劣と考えてしまう人
・フレームワークのフレームに完全にはまっている人
・業者から最悪Banされることに耐えられない人
MySQLのロックはお好きですか?
行ロックギャップロックにテーブルロック、メタデータロックauto_incrementロックetcetcetc..
目XPLAINで戦うには多彩すぎる種類のロックがあります。
これを可視化できる performance_schema.data_locks (MySQL 8.0で導入された) のすばらしさ、5.7とそれ以前との違いを説明します。
https://dev.mysql.com/doc/mysql-perfschema-excerpt/8.0/en/data-locks-table.html
phperkaigiを支えているイベント管理システムfortee。
我々はforteeのソースコードを入手することに成功。そこでforteeに対して脆弱性診断を実施、その結果とは・・・
forteeの開発者 @tomzoh にVAddyによる脆弱性検査の実施を依頼されたため、ローカル環境にforteeを立てて検査してみました。
本発表では、脆弱性検査の種類、検査内容、実際の検査のデモ、検査しやすい箇所としにくい箇所の紹介、
フレームワークを使っていても脆弱性を生みやすい箇所の紹介を行います。
あまり馴染みがない脆弱性検査を少しでも体験して、セキュリティテストは一般的なテストと同じように重要であると理解してもらうのがゴールです。
OSSにPRを出すのは、すごいエンジニアや上級者がやることだと思っていませんか?
そんなことは全くありません。
たとえあなたがエンジニアになりたてだったとしても、そのOSSを使ったことがなくても、PRを出すチャンスはあります。
本トークでは、私が過去に数々のPHPライブラリに対して送ってきたPRを紹介しながら、PRを送りつけるときの心構えやチャンスの探し方を紹介したいと思います。
OSSの例:
本トークを聞けば、
「あ、こういうところにチャンスがあるのか」
「自分もやってみよう」
という気持ちになれるかもしれません。
その結果、PHPのエコシステムがどんどん良くなるといいなと思っています。
AWSのLambdaにCustom RuntimeでPHPの導入出来るようになってから日が経ち、私が関わった案件でもLambda for PHPを導入したシステムがあります。
別の開発者が初めて作成し初めて載せたものでどういった感覚で作られていたのか、そして実装面に対して問題等などは起きていなかったのか、といった部分を段階的に紐解いた話をいたします。
そして当時リリース優先でやらなかったUTについても実装を行い、そのUT実装に至るまでの手順などもお話します。
LambdaでCustom Runtimeで動かしたい方、またはLambdaには載せたけどUTの実装まで至らなかった方にはご参考になる情報を発信できればと思います。
世にはEloquentやDoctrineなど多くのDBIとそれに付随するクエリビルダーがあります。
ですが、実案件上では次の課題があり、痒いところに手が届き切らない面がありました。
・特定フレームワークと密結合なため、既存案件に導入できない
・メソッドの切り口がクエリの見た目に沿っているため、「だったら生で書けばいいじゃん」と言われがち
・文字列表現を使わないと表現できないクエリがある
・クエリの再利用は一度テキストに落とさないとならない
・妙な所でインジェクションができるし、それを推奨するかのようなインターフェースがある
そこで、15年以上商用でPHPを使用した知見を活かし、クエリビルダーを開発しました。
このセッションでは上記課題を解決し、様々な現場で導入しやすいクエリビルダーについてご紹介します。
エンジニアをしているとプロジェクトに途中からJOINすることはままあると思います。
前提条件はいろいろあるとは思いますが、
今回、新しいプロジェクトに途中からJOINしたので、
そのとき私がどのように切り込んでいったのかを共有したいと思います。
具体的には
ということについてお話したいと思います。
本発表のゴールは、本発表をきっかけに「私ならこうする」「私はいつもこうしている」「私はいつもここに気をつけている」ということをみなさんが共有してくれることです。
途中JOINのノウハウを共有していきましょう!
静的解析はプログラマにフィードバックを最も早く返す仕組みの一つで、コード品質をチームで高める際にも非常に有用です。
しかし、既存のプロダクトに対し静的解析をただ導入した場合、対応しきれないほどのエラーやワーニングが表示されるだけで、コード品質向上への効果が薄くなってしまいます。
本トークでは既存プロダクトにPhanやPhpStormのInspectionといった静的解析ツールを導入し、その後コードの品質向上効果を高めるために、静的解析を育てていった一部始終をお話しします。
カンファレンス、楽しいですよね。
しかし最初からそうでしたか?
私の場合、カンファレンスに参加するにはいろいろなハードルがありました。
・上級者しかいないんでしょう?
・セッション聴いたけどなるほどわからん
・参加費がお高い
・遠征費がツライ
・懇親会ぼっち・・・
・マサカリが怖い
これらをどう超えたらいいでしょう。
初めてカンファレンスに参加してから1年の間に全国の様々なカンファレンスに参加した経験から、同じハードルを抱える方や、これからカンファレンスをより楽しみたい人へ向けて、実りある時間を過ごすためのティップスを紹介します。
恥ずかしいお話ですが、自分は最近までテストコードをちゃんと書いたことがありませんでした。。。
LTではLaravelを新規に導入したタイミングで一念発起し、テスト駆動開発を始めたお話です。
テスト初心者でも、テスト駆動開発は始められるんだ!と、
自分と同じような状況の方にとって、少しでも励みになれればと思います。
▼あらすじ
・テスト駆動開発したいなーと、思ったきっかけ
・0か100じゃなくて、少しづつ始めることが大切
・テスト駆動開発始めてみた感じたこと