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

PHP WEBアプリケーション設計入門――10年先を見据えて作る

nrslib GMOインターネット | 成瀬 允宣

本トークでは初級~中級者の PHP プログラマを対象に、中長期的な運用を見据えた WEB アプリケーションを開発するために必要な考え方や知識、具体的な実装テクニックやプラクティスをお話します。

■ Detail
あなたは今この瞬間、WEBアプリケーションの開発をすべて一任されたとしたら、困るでしょうか。

ひとつひとつの機能を作ることができたとしても、WEBアプリケーション全体を形作るとなれば、考えなくてならないことが多く出現します。

――フレームワークはどうしようか。
――ディレクトリ構造はどうしようか。

そこで本トークでは、こういった考慮事項に対する指針をお伝えすべく、WEBアプリケーションを構築する際に考慮すべきことや、実装へ落とし込む方法をお話します。

お話する内容は主に次のとおりです。

・フレームワーク選定
・レイヤードアーキテクチャ
・ディレクトリ構造と依存関係
・インフラストラクチャ層の取扱い
・データモデルとドメインオブジェクト
・テスタビリティの確保
・アプリケーション層上でのセッション情報などの取扱い
・バリデーションは誰の役目?
・エラー設計
・横断的関心毎
※サンプルはLaravelを使ったSPAを予定しています。

ここでお話することは唯一解ではありません。
アプリケーションを設計する際の道しるべとして是非お役立てください。

Track ID: Track1-1
Discord Channel: #track1-1-gmo-internet

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

初心者セッション

kashioka 柏岡秀男

PHPカンファレンス恒例の本当の初心者向けセッションです。
どのような言語か、どのような特徴があるのか、どのように学習していったらいいか。
本当の一歩目の解説を行います。デザイナーさんや多言語の経験者の方でも理解できる内容です。
これからプログラミングを始めたい人でも理解できる部分が多いセッションです。
仕事での利用経験のある方やPHPの入門書を完了されたレベルの方は他のセッションの聴講をおすすめします。

Track ID: Track3-1
Discord channel: #track3-1-beginner

採択
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〜
Track4
Long session (60 mins)

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

m3m0r7 めもり〜

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

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

採択
2020/12/12 12:40〜
Track5 (PHP8 Special)
Long session (60 mins)

PHP 8 で作る JSON パーサ

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 14:00〜
Track1
Long session (60 mins)

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

ex_takezawa 竹澤有貴

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

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

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

採択
2020/12/12 14:00〜
Track2
Long session (60 mins)

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

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%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%83%85%E5%A0%B1%E6%BA%90

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

採択
2020/12/12 14:00〜
Track3
Long session (60 mins)

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

ariaki4dev ariaki

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

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

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

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

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

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

パネルセッション「ひさてるさんに聞け」

たなかひさてる, イアン・ブライソン, 小山哲志

少しプログラミングができるようになると、どのようにソフトウェアを設計していけばいいのか興味が湧いてくるものです。しかしソフトウェア設計の世界はなかなかに奥深く、どこから入っていけばよいのか戸惑っている方も多いのではないでしょうか。
そこでこのセッションでは、Software Design 誌での入門者向け漫画「ちょうぜつエンジニアめもりーちゃん」の連載が無事に終了し、Twitter でも同作のショート連載を続けながら、ソフトウェア設計についてのメッセージを発信しているたなかひさてるさんをお迎えします。ソフトウェア設計についての質問に答えていただき、迷っているソフトウェアエンジニアの方々の道標を見つけたいと考えています。
出演: たなかひさてる、イアン・ブライソン
司会: 小山哲志

ご質問はこちらまで!
https://forms.gle/M2XmWFCh1fNxx1FN9

Track ID: Track1-4
Discord Channel: #track1-4-panel-session

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

ウェブセキュリティのありがちな誤解を解説する

ockeghem 徳丸浩

XSSやSQLインジェクション等、ウェブアプリケーションの基本的な脆弱性の知識はかなり普及しましたが、それでも広く誤解されている内容はまだ多く残っています。
本セッションでは、ウェブセキュリティのありがちな誤解を取り上げ、なぜ間違っているのか、正しい内容は何かを基礎からわかりやすく解説します。

Track ID: Track1-5
Discord Channel: #track1-5-web-security

採択
2020/12/12 16:40〜
Track5 (PHP8 Special)
Long session (60 mins)

PHP 8 で Web 以外の世界の扉を叩く

sji_ch sji

「○○言語は汎用プログラミング言語だけど、PHP は Web 特化で Web 以外には不向き」

もう長いこと、PHP はこのような評価を与えられ続けてきました。
そしてそれは今や過去の話になろうとしています。

PHP は "PHP: Hypertext Preprocessor" の略[1]ですが、この 25 年間で Web は高度化し、複雑化し、それに伴い Web サイトを作るための言語にも、いっそう複雑な機能が要求されるようになってきました。

昨年リリースされた PHP 7.4 には Preloading や FFI など、多くの機能が導入されています。

そして今年の PHP 8 では、満を持して JIT コンパイラ が導入されます。
典型的な PHP アプリケーションは I/O バウンド(DB バウンド)です。JIT はそのような既存のアプリケーションのためというより、これまで PHP が使われてこなかった、また使えると思われてもこなかったような、新たな領域への扉を開くものとして、FFI や Preloading との組み合わせを念頭に提案されたものです[2][3]。

一方、世間の CPU は着実に多コアの時代へと進んできました。今の時代にある程度 CPU を使うアプリケーションを作るというのは、JIT を使うというだけの話では済まず、何らかの並列処理機構を用いてこの多コアの CPU とも向き合う必要があります。

このトークではそんな新時代における PHP を使って、

  • FFI でシステムコールを呼び出して外部プロセスのメモリをのぞき見したり
  • ローカルマシンで動作する(非 Web の) GUI ライブラリを利用してデータを可視化したり
  • ext-parallel によりプログラムをマルチスレッド動作させたり
  • スレッド間の通信処理に非同期処理を用いたり
  • スレッドの動作を効率化するため preloading を活用したり
  • JIT によりそのようなプログラム全体の動作を高速化したり

するという、これまでとは一味違った PHP の利用方法への挑戦を紹介するとともに、そこで得られた知見、現状の制限についてをお話します。

[1] https://www.php.net/manual/en/intro-whatis.php
[2] https://wiki.php.net/rfc/jit
[3] https://externals.io/message/102415#102415

Track ID: Track5-5
Discord Channel: #track5-5-php8-non-web

採択
2020/12/12 18:00〜
Track6 (International)
Long session (60 mins)

Functional Programming in PHP

agiroloki Lochemem Michael

Functional Programming is a programming paradigm that has, since its inception, gradually pervaded through the realm of programming. After all, in theory, it holds that any entity capable of simulating a Turing Machine is Functional Programming-affable. PHP is not outside the parameters of Functional Programming and is, in fact, eligible for the paradigm despite appearing to be ill-equipped for such a purpose.

Functional Programming, though currently in the zeitgeist, has a parlance whose perceived complexity poses some trouble in understanding its cornerstone principles. My talk, titled Functional Programming in PHP, is another in a long line of trials at effectively distilling Functional Programming knowledge for PHP audiences. I will, in the time afforded to me, attempt to discuss the foundations of the paradigm, its relevance and history, PHP's aptness for FP, technical hallmarks - immutability, composition, referential transparency, and function purity - as well as applicable meta concepts like Functors and Monads for building real-world applications.

Track ID: Track6-6
Discord Channel: #track6-6-functional-programming-php