PHP Conference Japan 2020 トーク一覧

採択 他イベントOK 2020/12/12 11:15〜 Track4 Regular session (25 mins)

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

daisu_yamazaki Daisuke Yamazaki daisu_yamazaki

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

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

採択 2020/12/12 12:00〜 Track1 Lightning talk (3 mins)

玩具サブスクリプション・レンタルサービスの代表の子どもたちにPHPについて語ってもらった

株式会社トラーナ | 志田典道

私達は玩具サブスクリプション・レンタルサービスの「トイサブ!」を運営しております。
2015年にサービスを開始し、2020年11月末時点で7,000名以上のお客様に、月間2万点近くのおもちゃをお客様ごとにカスタマイズして選定・お届けをしております。
日頃開発で活用させていただいているPHPに対して、これからを担う子どもたちがPHPに対してどのような考えを持っているのかを語ってもらいました。

Discord Channel: #sl-toysub

採択 2020/12/12 12:05〜 Track1 Lightning talk (3 mins)

3分で分かるConnehito Tech Vision

コネヒト株式会社 | 伊藤 翔

コネヒトはこれまでテクノロジーやエンジニアリングの力を使って成長してきました。
しかし、事業を更に成長させるためにはその流れをより速く、より強く、よりクリアにする必要があると考えました。そこでコネヒトのエンジニア組織 / 技術領域において、今後何を大事に何に投資していくか未来の構想や方向性を「Connehito Tech Vision」としてまとめました。
本LTでは、そんなConnehito Tech Visionの概要をお話させていただきます。

Discord Channel: #sl-connehito

採択 2020/12/12 12:10〜 Track1 Lightning talk (3 mins)

Lenet の開発環境の紹介

株式会社ホワイトプラス | 古賀 敦士

ホワイトプラスが展開するネット完結型クリーニング「Lenet」のシステムでは、エンジニアが開発に集中できるように開発環境を整備しています。
本セッションでは、そのための工夫をいくつかお話しします。

Discord Channel: #sl-whiteplus

採択 2020/12/12 12:15〜 Track1 Lightning talk (3 mins)

福岡市のお墨付き!エンジニアフレンドリー企業に選ばれたFusicの実態に迫る!

株式会社Fusic | 槇原 竜之輔

Fusicは福岡のIT企業です。
弊社ではエンジニアの技術力向上のための制度が積極的に活用されており、その制度が評価され、この度エンジニア・フレンドリーシティ福岡の企業部門で受賞いたしました。
全国各地からの採用を積極強化中なのですが、いかにFusicがPHPerのみなさまにとって働きやすい、成長出来る可能性を秘めた会社なのかを東京から移住した私が徹底的にアピールします。
採用目的です、皆さま積極的に選考へご応募ください!

Discord Channel: #sl-fusic

採択 2020/12/12 12:20〜 Track1 Lightning talk (3 mins)

PHP8 on AWS lambda

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

AWS lambda上でbrefを用いてPHP8を実行するまでを説明いたします。IAMユーザの作成からdeployまで駆け足で伝えます!

Discord Channel: #sl-alleyoop

採択 2020/12/12 12:40〜 Track1 Long session (60 mins)

長期運用を目指す『Shadowverse』におけるリファクタ事例の紹介 〜テストの導入とメンバーへの普及法〜

株式会社Cygames | 髙野 祐輝

Shadowverseはサービス5年目を迎えました。そして10年、20年続くコンテンツへと成長させていくため今なお進化を続けています。
長年の運用でゲームアップデートを繰り返す中、デバッグコストの肥大化・コードの属人化が進んでおり、「最高のコンテンツ」として高品質なアップデートを続けていくため、テストを活用したリファクタを行いました。

5年アップデートを続けてきたコードをバグなくリファクタするのは容易なことではありませんが、リファクタに寛容なプロジェクトや会社のバックアップもあり、無事にテストを導入し、ほとんどバグを出さずに一機能のリファクタをやり遂げました。

しかしこれは「一機能のリファクタにテストを導入した」だけであり、プロジェクトの成長の1歩目に過ぎません。
テストの有用性をメンバーが理解し、実際にテストを書く文化が根付いて初めて、今後も高い品質で更新を続けられるプロジェクトに進化したと言えます。

本セッションでは、「長期運用中の大規模プロジェクトコードに対しテストを導入する切り口・手法」及び「プロジェクトにテスト文化を根付かせるプロセス」について紹介します。

Track ID: Track1-2
Discord Channel: #track1-2-cygames

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

徳丸皆伝を狙いませんか?徳丸実務試験とPHP8上級試験の解説

PHP技術者認定機構 | 吉政忠志 ゲストスピーカー 徳丸浩先生

年末から年始にかけて開始予定のウェブ・セキュリティ実務知識試験(徳丸実務試験)とPHP8上級試験の解説をいたします。徳丸実務試験に合格して徳丸皆伝ステッカーをもらおう。稟議に使えるPHP市場データも解説。

Track ID: Track2-2-A
Discord Channel: #track2-2-a-tokumaru-exam

採択 他イベントOK 2020/12/12 12:40〜 Track3 Regular session (25 mins)

GCPとPHP

gamu1012 サイトウ 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

採択 他イベントOK 2020/12/12 12:40〜 Track4 Long session (60 mins)

ゼロベースから Laravel を用いた API 実装オートメーション

m3m0r7 めもり〜 m3m0r7

弊社のシステムはバックエンドのフレームワークは Laravel を使用、そして OpenAPI と呼ばれる API の設計書を書けば CRUD に対応した API が自動的に実装されるような仕組みを用いて自動生成し、最後にバリデーションを書けば、一つの API が完成します。
もともと弊社の社内システムは SaaS 上にしかなかった、かつバックエンドエンジニアが私一人である中で、どう効率的にゼロベースからプロダクトを組み上げてプロダクトのローンチを早められるかが鍵でした。
CRUD に対応した API 実装、正常系・異常系テストの生成自動化、API のドキュメントの記述、全文検索エンジンへどう自動的に繋ぎこむか、例外処理はどうするか?といった全ての事情を汲み取りながら基盤開発に邁進し、
今では一つあたりの API の実装は 10 分もかからないレベルになりました。本トークでは、この基盤の構築をした経験を元に、考えてきた事、実行してきたこと、判断に迷ったこと、そして Laravel を使った実装についてのお話をできればと思います。

Track ID: Track4-2
Discord Channel: #track4-2-laravel-openapi

採択 他イベントOK 2020/12/12 12:40〜 Track5 (PHP8 Special) Long session (60 mins)

PHP 8 で作る JSON パーサ

shin1x1 新原雅司 shin1x1

JSON は現在の Web アプリケーション開発では一般的なデータフォーマットです。PHP でも json_encode() や json_decode() といった関数が用意されており、多くの方が日々の開発で利用されているでしょう。

実務上はこうした関数もしくはラップされたクラスを利用すれば良いのですが、仕様がシンプルではありつつも適度な複雑さを持っており、さらにとても馴染み深いという意味でパーサを書く題材に適しています。

また、JSON パーサを書くには下記のような機能を利用することになり、プログラミング言語の基本的な使い方を学ぶにも良いテーマです。

・分岐、ループ、再帰処理
・文字列の扱い
・型、構造化データの扱い

このセッションでは、パーサを書いたことが無い方、パーサを書いてみたい方、また PHP 8 の新機能を使った実装を見てみたい方を対象に PHP 8 で JSON パーサを実装する方法をご紹介します。

Track ID: Track5-2
Discord Channel: #track5-2-json-parser

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

自分のやりたいことやって超簡単にチームのコミュニケーションを活性化させた

Hamee株式会社 | あすみ

新卒3年目が新チームに入って皆から良くなったと感謝されることが増えました。
何が良かったの分からなかったので、改めて自己分析した話をします。
明日からできる簡単なことなので、お話きいていいなぁと思ったら是非実践してください!

Track ID: Track2-2-B
Discord Channel: #track2-2-b-hamee

採択 他イベントOK 2020/12/12 13:15〜 Track3 Regular session (25 mins)

PHP on Kubernetes

k_kinzal Kouta Ozaki k_kinzal

コンテナネイティブ時代に突入した昨今、PHPer の皆さんはコンテナ化は済ませましたか?
Chatwork 株式会社では2020年に PHP アプリケーションをコンテナオーケストレーションツールのデファクトスタンダードである Kubernetes に置き換えました。

そこで、これからコンテナ化を行おうと考えている PHPer の方々向けに

  • なぜ、PHP アプリケーションでコンテナを使用するのか
  • コンテナ化、Kubernetes 化では何をする必要があり、何に注意する必要があるのか
  • 開発環境でも Kubernetes を使うべきか

など、Chatwork の事例を元に解説します。

  1. そもそも Kubernetes とは? ~ 導入のメリット
  2. コンテナ化の流れ ~ PHP アプリケーションの Docker イメージ化
     - 設定を注入しよう (Env / File)
      - 環境差異を設定で吸収する方法
      - 整合性の検証方法
     - ログ管理を行おう
      - 標準出力 (stdout) の取り扱い
      - TIPS: decorate_workers_output/log_limit の取り扱い
     - 外部サービスと認証管理
  3. Kubernetes 化の流れ ~ コンテナのオーケストレーション
     - PHP アプリケーションにおける構成例
     - Pod のライフサイクル (Readiness / Liveness)
     - メトリクスの収集方法
     - ロードバランサーの配置
  4. 開発環境としての Kubernetes はどう評価できるか?
     - パフォーマンスと安定性
     - PHPStorm との連携はどうするか?
     - Kubernetes Manifest の複雑性
  5. まとめ

Track ID: Track3-2-B
Discord Channel: #track3-2-b-kubernetes

採択 他イベントOK 2020/12/12 14:00〜 Track1 Long session (60 mins)

事業のスケールアウトを支えるPHPで作る分散アーキテクチャ

ex_takezawa 竹澤有貴 ex_takezawa

大きく複雑になったアプリケーション、マイクロサービス間の複雑な連携、
事業がスケールしていくとそれまでうまく解決できていたものが、一筋縄ではいかない問題となることが多くあります。
こうした問題にはデータベースリファクタリングや、ソースコードの継続的なリファクタリングなどを活用することが多くありますが、
事業をさらにスピーディに支えるには、リアーキテクティングが必要となるケースが多くあります。
事業を支えるレガシーと云われるアプリケーションはどの様にして改善していくべきでしょうか。

本セッションではリアーキテクティングにEvent SourcingとCQRSを取り入れ、
多くのアプリケーションが事業が大きくなった場合や仕様変更に足かせとなってしまいがちなデータベースとフレームワーク機能の密結合、
多様化していくアプリケーション間連携などを解決していく実践的な内容をお届けします。
分散トランザクションや様々な手法に触れ、実際に改善してきた例も交えて解説していきます。

Track ID: Track1-3
Discord Channel: #track1-3-php-scale-out

採択 他イベントOK 2020/12/12 14:00〜 Track2 Long session (60 mins)

PSRで学ぶHTTP Webアプリケーションの実践

tadsan うさみけんた tadsan

PSRはPHP-FIG(PHPフレームワーク相互運用グループ)が発表する勧告群です。
その中ではHTTPについての勧告としてPSR-7, PSR-15, PSR-17そしてPSR-18が発表されており、これらはWebアプリケーションのモジュール間のインターフェイスとして活用できます。

今回は社内独自のフレームワークをPSR-7/15/17実装として置き換えた事例をとって、PHPとHTTPリクエストの関係およびPSR-17を実装したWebアプリケーションについて説明します。

このトークを見るにあたって、過去のPHPカンファレンスでの発表を含む「PSR-HTTPシリーズを理解するための情報源」を読むことを強く推奨します。
https://scrapbox.io/php/PSR-HTTPシリーズを理解するための情報源

Track ID: Track2-3
Discord Channel: #track2-3-psr-http-web

採択 他イベントOK 2020/12/12 14:00〜 Track3 Long session (60 mins)

Webサービスをセキュアに保つために必要な視点

ariaki4dev ariaki ariaki4dev

Webサービスは、日常から多くの危険にさらされています。
多くの方が「Webサービスをセキュアに保つことは重要」と思いながら、実際セキュリティ事故にあわない限り他人事に感じがちです。
そうして、サービス上に潜むセキュリティリスクを過小評価しているかもしれません。

このセッションでは、私がWebサービスを開発・運用するなかで遭遇した攻撃や対処などをまとめ、セキュアに保つ必要性を見つめ直します。
とくに、いま私が携わっている月間2億PVほどの大規模コミュニティサイトを題材にして、実際にあった事例をもとに掘り下げていきます。
全体をとおした難易度は、PHPが読み書きでき、簡単なサイトを構築できるレベルの方を対象にしています。

本セッションでお話する内容は次のとおりです。
• Webサービスへの攻撃事例
• OWASP TOP10などのセキュリティ指針の解説
• セキュアに保つためにはどんな視点や行動が必要か

このセッションは、Webサービスへの具体的な攻撃手法を解説する可能性があります。
すべての聴講者は「本セッションで得た知識をもとに攻撃を行わない」ことにご同意ください。

Track ID: Track3-3
Discord Channel: #track3-3-secure-web-service

採択 他イベントOK 2020/12/12 14:00〜 Track4 Regular session (25 mins)

Laravel × オニオンアーキテクチャで始めるテスト駆動開発

canon1ky 村田主磨 canon1ky

皆さんはテストを書いていますか?
テスト駆動開発をしていますか?

テスト駆動開発と言っても、どの部品の単位でテストを書けば良いか悩む方も多いのではないでしょうか。
テストを書く上ではソフトウェア設計への配慮が欠かせません。

ソフトウェア設計の大切さ、テスト駆動開発で単体テストを書く利点について理解を深め、その後にオニオンアーキテクチャを採用したソフトウェアでテスト駆動を行う手順を語っていきます。

当セッションでは下記のような話をする予定です。
・なぜテストを書く上でソフトウェア設計が大切なのか
・単体テストを書く利点
・オニオンアーキテクチャの解説
・オニオンアーキテクチャでTDDを行う手順

※アーキテクチャは触りだけ説明し、メインはテストの話になります

Track ID: Track4-3-A
Discord Channel: #track4-3-a-laravel-onion

採択 他イベントOK 2020/12/12 14:00〜 Track5 (PHP8 Special) Regular session (25 mins)

PHPのソースコードから理解するPreloadとJIT

hanhan1978 富所 亮 hanhan1978

PHP7でPreload, PHP8でJITと、PHPを高速化する仕組みが次々と導入されてきています。ベンチマークや解説記事などでどれくらいパフォーマンスが向上するのかをご覧になった方も多いかと思います。
しかし、一体どうして速くなるのか、どうのような仕組みなのか?Preloadとは何か、JITとは何をするものなのか、皆さんは答えられますか?

本トークではPHP8のソースコードレベルから、PreloadやJITの正体について、順を追って分かりやすく解説します。モダンなPHPが実行時にどのような動きをするのか、少し分かるようになってくれたら嬉しいです。

このトークでお話すること

  • Preloadとは何か?
  • Preloadの仕組みと、実行の流れ
  • JITとは何か?
  • PHPにおけるJITの仕組みと、実行の流れ

Track ID: Track5-3-A
Discord Channel: #track5-3-a-preload-jit

採択 他イベントOK 2020/12/12 14:35〜 Track4 Regular session (25 mins)

テストピラミッドを意識したテストコード実装戦略

テストピラミッドとは、Mike Cohn氏が提唱した各層のテストコードの比率や費用対効果を表したものです。
テストピラミッドでは「UIテストを薄く、ユニットテストを厚くした状態」が理想となっていますが、各層のテストコードを実装していく中でどのように意識すれば良いのでしょうか?

そこで、実際のPHP製システムにE2Eテスト、featureテスト、ユニットテスト等を実装する流れを例にして、テストピラミッドを意識したテストコード実装戦略について解説していきます。

どのような題材にするかは未定ですが、「過去にLaravel公式ドキュメントにあったチュートリアルのシステム(https://laravel.com/docs/5.1/quickstart-intermediate)を、Laravel8.x / PHP8.0にバージョンアップする」を題材にする予定です。

Track ID: Track4-3-B
Discord Channel: #track4-3-b-test-pyramid

採択 他イベントOK 2020/12/12 14:35〜 Track5 (PHP8 Special) Regular session (25 mins)

PHP8はISUCONへの扉を開く鍵となるか

seike460 清家史郎 seike460

「銀の弾丸はない」
ではPHP8は私達に何をもたらしてくれるのか。

私達はIikanjini Speed Up Contest、通称ISUCONの予選にPHPで挑戦しました。
結果は残念ながら468チーム中46位とあと一歩で本戦への切符を勝ち取る事が出来ませんでした。

実はどうしてもPHPでISUCON 本戦へ出場したい、その想いからPHP 8.0.0 Betaの投入を迷っていましたが
最終的に使うことなく敗退しました。そこに少なからず心残りはあります。

そんな中、先日PHP 8.0.0 Release Candidate 1が発表されました。
来年こそ、大手を振って導入できる事でしょう。

ISUCON は総合力の勝負です。
PHP8が銀の弾丸になることは無いのかもしれません。
しかし、私達PHPerはPHP8に壮大な夢を見らざるを得ません。
そこで私はPHP8のパフォーマンスに絞った内容調査を行う事にしました。

JITなどパフォーマンスに関して多大なる期待が寄せられているPHP8は、
私達をISUCON本戦の扉へ導く鍵となるかを検証してその成果をお話します。

今年、PHPを使ってISUCON 本戦へ進んだチームはただ1チーム
そのチームに続き、来年こそ私達PHPerの手でISUCON本戦への扉を開きましょう

■想定する聴講者
 - PHP8のパフォーマンスに興味がある方
 - PHP8のベンチマークに興味のある方
 - 来年こそPHPでISUCON 本戦への進む心意気のある方

■お話しないこと
 - パフォーマンス以外の話
 - PHPのgRPC利用について

Track ID: Track5-3-B
Discord Channel: #track5-3-b-isucon