Regular session (25 mins)

PHPはRubyの夢を見るか?

toshimaru_e toshimaru

今でこそPHPはRubyと比較されることは少なくなりましたが、PHP5の時代はよくRubyもしくはRuby on Railsと比較され、そしてときにディスられもしました。

時は流れPHPはバージョン7を経てバージョン8へと進化し、Webアプリケーションフレームワークとして洗練されたLaravelも台頭してきました。今ではプログラミング言語人気ランキングでPHPはRubyより高い位置にランクインしています(*1)。

本発表は改めてPHPとRubyを比較することで見えてくる<PHPらしさ>に着目して、<PHPの良さ>の再発見をしたいと考えています。

本発表の想定オーディエンスは下記の通りです。
・Rubyに興味があるPHPer
・Rubyをちょっと書いたことのあるPHPer
・元・RubyistなPHPer
・元・PHPerなRubyist

*1 TIOBE Index https://www.tiobe.com/tiobe-index/

※発表者はPHPもRubyも好きなエンジニアです。発表の目的は、言語に優劣をつけることではなく、あくまでも言語比較・Webアプリケーションフレームワーク比較を通してPHPの良さを発見することを目的としています

4
Regular session (25 mins)

Annotate my Code 〜あなた好みの型に〜

tadsan うさみけんた

PHPではIDEとして普及しているPhpStormのほか、静的解析ツールを活用することで実行なしでコードの問題点を検出できます。

さらには、Phan, PHPStan, Psalmなどの静的解析ツールが提供するタグや機能をPHPが本来持っている以上の能力を持った型を記述できます。
今回のトークではPHPが持つ基礎的な型と静的解析ツールが独自に提供する型、そして、これらだけでは解決できない型付けの問題についても紹介します。

5
Regular session (25 mins)

億単位の不要レコードをMySQLから安全に消す方法

oogFranz 杉山 祐一

みなさんは億単位のレコードが存在しているMySQLテーブルをみたことがありますでしょうか?
もし、そのうち大半のレコードが不具合によって生み出されたものだとしたら、きっとDELETE文を実行したくなると思います。
でも待ってください。ただDELTE文を実行しようとしても、トランザクションは非常に大きくなり、ディスクIOやテーブルロックなどが原因となって、性能問題が生じてしまうでしょう。
このセッションでは安全に億単位の不要レコードを削除する方法をお話しします。

8
採択
2020/12/12 16:40〜
Track2
Regular session (25 mins)

効果的な静的解析のCI導入パターンを求めて

oogFranz 杉山 祐一

既存の大規模システム、とくに自動テストがないレガシーシステムにおいては、静的解析のCI導入は改善の足掛かりとして非常に有用です。
しかしながら、既存システムへの静的解析のCI導入は一筋縄ではいきません。
厳しすぎるルールで導入しても、大量のエラーやワーニングでチームが疲弊してしまいますし、
逆にルールがゆるい状態で導入しても、静的解析の良いメリットが得られません。

本セッションでは、静的解析ツールの特徴に合わせて、効率的なCIの導入パターンを紹介します。
具体的には、最低限のルールから自動的にルールを厳しくする方法や、
既存コードにはゆるいルールを適用しつつ、新規ファイル・新規コードには厳しいルールを適用する方法を紹介します。

Track ID: Track2-5-A
Discord Channel: #track2-5-a-static-analysis-ci

採択
2020/12/12 15:55〜
Track2
Regular session (25 mins)

今こそ理解する、PHPの日時計算

rukiadia Sho Yamada

「特定日時を過ぎたら実行される分岐処理を書こう」

このようなロジックを実装した経験が皆さんにもあると思います。

PHPに限らず、時間が絡む処理を書く場面は多いです。しかし、「安全」な実装を「早く」作れる人は意外と少ないのではないでしょうか?
「PHP 日付比較」で毎回検索するのは手間ですし、アンチパターンを踏み抜いてしまうリスクすらあります。
2020年の歳の瀬に日付の扱いに習熟し、PHPをより上手く安全に使いこなしていきましょう。

※PHPの標準実装やライブラリの話がメインにはなりますが、フレームワークを取り巻く状況についても触れる予定です。

Track ID: Track2-4-B
Discord Channel: #track2-4-b-phpdatetime

Regular session (25 mins)

オンプレのOracleからクラウドのPostgreSQLへの移行をやることになった

_ohshige おおしげ

弊サービスは今年で14年目となりました。
そんなサービスをずっと支えてきたオンプレのデータベースOracle、これをAWSのPostgreSQLに移行することになりました。
これは、弊社全体としてクラウド移行が推進されるなかでの、私たちチームのクラウド移行プロジェクトの第一弾です。
データベースはアプリケーションよりも寿命が長いと言いますが、積年のデータの詰まったデータベース移行はサービスの中心にあるためいきなりラスボス級の難易度です。
本セッションでは、オンプレのOracleからAWSのPostgreSQLへの移行に伴って行った意思決定や方針・やり方をご紹介します。

主に、以下の内容をお話します。
・弊サービスの構成と移行方針
・なぜラスボス級のDB移行を先に行うことを決めたのか
・移行に役立つAWSサービスのDMSとSCTの軽い紹介
・アプリケーション(PHP)の修正の方針
・移行に伴うあらゆる罠

以下の内容についてはお話しない予定です。
・AWSサービスの詳細な説明
・Oracleの詳細な説明
・PostgreSQLの詳細な説明

移行を検討している、移行の進め方が気になる、どんな罠があるのか知りたい、といった方々に聴いていただきたいと思っています。

9
採択
2020/12/12 16:40〜
Track3
Regular session (25 mins)

PhpStormを使えばほとんどコード補完されるんだってばさ

makies マキ

PhpStorm を使って Laravel案件の開発をするとき、どのくらいコードを書いてますか?

便利なプラグインを入れ、案件に合った設定を行い、自動生成されるものも活用すると
こんなにも、コード補完でコードが書けちゃうんです。

っていう実演をしようと思います。

Track ID: Track3-5-A
Discord Channel: #track3-5-a-php-storm

Regular session (25 mins)

PHPerの私がお勧めするSPAフロントエンド開発環境

kaz_29 渡辺一宏

最近ではフロントエンド側をJavaScript(typescript)を使用して開発するケースがかなり増えていると思います。
私もここ数年、いくつかのフロントエンドアプリを作ってきました。

しかし、フロントエンドの開発環境は、進化・変化が早くキャッチアップするのがなかなかに大変です。

このセッションでは、PHPer/Bakerの私が最近気に入っている、React/Next.jsなどを利用したSPAフロントエンドの開発環境、技術要素、開発方法などについて紹介します。

5
Regular session (25 mins)

Laravel Livewire で体験する Server-side Two-Way Bindings

localdisk localdisk

昨今インタラクティブなwebアプリケーションの需要が高まっています。

その需要を満たすため React, Vue.js, Angular 等の JavaScript Framework を使いこなす必要がありますが、フロントエンドの学習コストの問題でなかなか手をつけられない人も多いのではないかと私は推測しています。

Laravel Livewire はそういった問題を解決するために開発されたライブラリで、フロントエンドの多くの処理をサーバーサイドで記述することができます。
本セッションでは Laravel Livewire の紹介と、実際のライブコーディングをあわせてその便利さを体験してもらいます。

5
採択
2020/12/12 12:40〜
Track3
Regular session (25 mins)

GCPとPHP

gamu1012 サイトウ

Google Cloud Platform(GCP)ではPHPを動かす環境がたくさんあります。

Google App Engine(GAE)だけでも3パターンあり、
他にもGoogle Compute Engine(GCE),、Google Kubernetes Engine(GKE)、Cloud Run があります。

この発表では、それぞれの環境でやれること、メリットデメリットについてお伝えします。

また、どういう考えで環境を選ぶかというプロセスを実体験を交えながら、ご紹介します。

Track ID: Track3-2-A
Discord Channel: #track3-2-a-gcp

Regular session (25 mins)

Symfony CLIを使ってPHPアプリケーションの開発用Webサーバをつくる

ippey_s 角田 一平

MAMPやvagrant、Dockerなど、PHPアプリケーションを開発・検証するWebサーバをつくるにはいろいろな方法があります。
いずれも便利なツールですが、"Symfony CLI"でも簡単に開発Webサーバをつくることができます。
Symfony CLIを使って、そこそこ快適な、壊しやすい開発Webサーバのつくり方をご紹介します。

Regular session (25 mins)

ライフステージ別技術イベントとの付き合い方 〜仕事と子育て、時々勉強会〜

s_yo_ko しもおか

エンジニア夫を見送る側、見送られる側、両方の経験をしてきました。
独り身の時には気軽に参加していた勉強会やカンファレンス。
パートナーができたら?子供ができたら?
いつまでも今までと同じように参加できると思っていたりしませんか?
長年イベント参加するには家族の理解を怠ってはいけません。
送り出す側の気持ちを伝えたいと共に、子育て真っ最中の方やこれから子育てする若い方々に、エールを送りたいと思います。

6
採択
2020/12/11 19:35〜
Track1
Regular session (25 mins)

SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する

77web 菱田裕美

ここ数年、フロントエンド開発がリッチになるとともに、PHP界でもシングルページアプリケーション向けAPIの開発が多くなっていると思います。
そんな中、一般的な解説書や解説記事に従ってAPI実装を始めると課題にぶつかることになります。
たとえば、

  • ロジックがフロントエンドとバックエンドに重複して実装される
  • APIコールについてn+1問題が起きる
    といった課題です。
    こういったAPI開発の「あるある」な課題について、長期間の運用が想定される自社サービスのSPA用APIを開発するにあたって、社外のメンターにアドバイスをいただいたりフロントエンドエンジニアと議論しながらたどり着いた現時点でのベストプラクティスについてお話します。
採択
2020/12/11 19:00〜
Track1
Regular session (25 mins)

Laravelの黒魔術

localdisk localdisk

ここ数年、Laravelの利用者は大幅に増えました。

Laravelにはたくさんの便利な機能がありますが、その機能はどのように動いているか知っていますか?

本セッションではLaravelのコードの中で私がとくに面白い!と思ったものを(なるべく)わかりやすく解説します。

Regular session (25 mins)

最高のエンジニア評価制度を目指して

itosho itosho

評価や目標の制度に対して、皆さんはどんなイメージを持っていますか?程度の差こそあれ、皆さん一度くらいは不満を持ったことがあるのではないでしょうか?
私が所属するコネヒト株式会社では今年度から評価制度をフルリニューアルしました。本セッションでは、何故フルリニューアルすることになったのか?どのような評価制度なのか?どのように運用しているかなど評価制度の仕組みや裏側をお話させていただきます。
評価制度は技術的なトピックと比べるとまだまだ普段なかなか表に出ることのないトピックではありますが、エンジニアの仕事の中で重要な要素の1つだと私は考えています。ですので、本セッションを通じて評価制度についての議論やナレッジの交流が前進するように失敗談も含めてお話出来ればと思っています。

10
採択
2020/12/12 15:55〜
Track3
Regular session (25 mins)

CakePHPで学ぶDIコンテナ

itosho itosho

皆さんは普段DIコンテナを使っていますか?DIコンテナはそのメリットとデメリットを理解し、正しく使いこなせばソフトウェア開発の効率を高めてくれる非常に強力な仕組みです。
しかし、よく分からず使っていると却って、それっぽいだけでメリットを享受出来ていないソフトウェアが出来てしまう可能性もあります。
本セッションでは、CakePHPに新たに搭載されるDIコンテナの仕組みをもとに、そもそもDIとは何なのか?その上でDIコンテナとは何なのか?を紹介し、DIコンテナの導入によってもたらされる効能についてお話させていただきます。
また、これまで何故CakePHPがDIコンテナの仕組みを用意していなかったのか、何故このタイミングでDIコンテナが導入されることになったのかについても読み解いていきたいと考えています。

Track ID: Track3-4-B
Discord Channel: #track3-4-b-cackephp-di

採択
2020/12/12 15:20〜
Track5 (PHP8 Special)
Regular session (25 mins)

PHP 8 の新機能を PHP内部コードのテスト phpt から読む

hgsgtk 東口和暉

PHP 8 の新機能のふるまいを、php内部のテストコードを通じて、理解する時間を提供します。

PHP 8 がもうじきリリースされる昨今で、 PHP 8 についての新機能についての関心も高まってきました。さまざまな新機能の抑え方がありますが、ひとつが、テストコードを通じて対象システムを理解する方法です。

phptというものがあります。これは、 PHP 内部コード、つまり php-src の自動テストスクリプトです。
ここには、PHP という言語自体の comitter たちがどういう振る舞いを PHP に与えたのか、それがレアケースのユースケースも含めて記述されています。

テストコードを書く皆様であれば、 Test as Document 、仕様を伝えるドキュメントとしてのテスト、を自身が運用するアプリケーションに対して書きますよね。phpt は PHP 8 の新機能に対するテストコードも含んでいます。

コードの読み手が、テストコードを通じて、 PHP 自体の振る舞いを理解する。phpt に記述されたコードを通して、次の2つを学びましょう。

  1. phpt とは何か、その読み方がわかる
  2. PHP 8 の新機能を抑える

具体的には、PHP 8 の新機能を題材にします。想定しているお品書きは以下です。

  • Named Arguments
  • Match expression v2
  • Nullsafe operator
  • Union Types v2
  • Mixed type v2

※ もし、時間が許せば、上記の機能を実現するために、PHP内部の zend_compiler などにどういう変更があったか、まで軽く紹介します

Track ID: Track5-4-A
Discord Channel: #track5-4-a-phpt

Regular session (25 mins)

PHPのSession Poolをまじめに考える

goodoo 株式会社サイバーエージェント 白井 英

Google Cloud SpannerのPHPのライブラリにはSession Poolが実装されています。
これは、複数のプロセス間でキャッシュされたセッションを共有するを実現しています。
本セッションでは、どのように、プロセスをまたいで、Session Poolを実現しているのか?
また、Cloud Spanner以外の応用についてご紹介します

5
Regular session (25 mins)

テストを設計する

kazuhei__ かずへい

アプリケーションに自動テストを組み込むのは今では一般的なことになりました。
しかし、テストにはUIテスト、統合テスト、ユニットテストといった種類があり、どこまでをどのテストでカバーすべきなのか、実際にどうやって書けば良いのかについては、まだまだ手探りの方も多いのではないでしょうか?

テストの設計には正解はないと思います。それはどれくらいのコストをかけて、どれくらいのリターンを得ようとするかがチームによって違うからです。それでも、実際に業務でテストを書いている経験から、どのようにテストを分割するべきか、モックはどのように使うべきか、という知見を話せたらと思います。

11
採択
2020/12/12 11:15〜
Track4
Regular session (25 mins)

LaravelDB.comを使ってDB設計「Migration生成」の基本操作を学ぶ

daisu_yamazaki Daisuke Yamazaki

「Laravel開発者の負担・工数を減らす」を掲げて、約10ヶ月前にリリースした「 LaravelDB.com 」。誰もが無料でお使いいただけます。
ER図を書けばそのとおりのMigration(最新バージョンではテーブル設計どおりのValidationも生成します)ファイルが生成されます。ER図は保存が可能なので、何度でもER図を呼び出して変更加えたり、コピーして別のプロジェクトを作成することも可能です。このツールの勘所を端的に解説する予定です。操作方法を知って少しでも楽に開発ができるように、少しでもLaravel開発者の皆さんの手助けになれば幸いです。

Track ID: Track4-1-B
Discord Channel: #track4-1-b-laraveldb-com