採択
2020/02/09 16:55〜
Track A
15分トーク

Deep Module in PHP

itosho itosho

突然ですが「良いコード」とはどういうコードでしょうか?正解は一つではありませんが、私は「複雑さ」(Complexity)が見えないコードが良いコードだと考えています。複雑さが見えないコードはインターフェースが直感的で、リーダビリティが高くて、変更が容易です。
では、複雑さが見えないコードを実現するにはどうすればよいでしょうか?そこで登場するのが「deep module」という考え方です。「deep module」はスタンフォード大学のJohn Ousterhout教授が『A Philosophy of Software Design』という書籍で提唱しているモジュール設計の考え方です。
本セッションでは「deep module」とは何か?deep moduleを実現するにはどうすればよいか?という疑問をPHPのコードを用いて可能限り具体的に解説したいと思います。「deep module」を理解すれば、きっと今よりも「良いコード」が書けます!

採択
2020/02/09 18:10〜
Track A
15分トーク

PHPのアノテーションの仕組みとメリット・デメリット

hiro_y 山岡広幸

PHPのフレームワーク(LaravelやSymfonyなど)やテストスイート(PHPUnitなど)で利用できるアノテーション。とても便利な書き方ですが、実際どのように処理され、動いているのかあらためてご紹介します。さらに使いどころ、メリット・デメリットについても触れていきます。

採択
2020/02/09 18:10〜
Track B
15分トーク

Inside SWOOLE:非同期処理はどのようにして動くのか

koyhoge 小山哲志

最近注目を浴びているPHPの非同期処理機能拡張が「Swoole」です。Swoole を利用することで、PHP単独では実現不可能だった同時並列処理が実現できます。
では Swoole の非同期処理は、一体どのように実装されているのでしょうか?
本セッションでは Swoole のC++ソースコードの奥深くまで探索し、非同期処理がどのように実現されているかを解説します。
このセッションを聞けば、ブラックボックスの魔法のようだった Swoole がより身近になり、中で何が起きているか容易に想像できるようになるでしょう。

採択
2020/02/10 14:15〜
Track A
15分トーク

磯野ー、MySQLのロック競合を表示しようぜー

yoku0825 yoku0825

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

採択
2020/02/10 16:15〜
Track B
15分トーク

静的解析の育て方

oogFranz 杉山 祐一

静的解析はプログラマにフィードバックを最も早く返す仕組みの一つで、コード品質をチームで高める際にも非常に有用です。
しかし、既存のプロダクトに対し静的解析をただ導入した場合、対応しきれないほどのエラーやワーニングが表示されるだけで、コード品質向上への効果が薄くなってしまいます。
本トークでは既存プロダクトにPhanやPhpStormのInspectionといった静的解析ツールを導入し、その後コードの品質向上効果を高めるために、静的解析を育てていった一部始終をお話しします。

採択
2020/02/11 10:25〜
Track A
15分トーク

自作して理解するxUnit

hgsgtk 東口 和暉

普段私たちが触れているPHPUnitなどは、xUnitと呼ばれるテスティングフレームワークの一つです。Kent Beck氏がSmalltalkで実装したものが様々な言語で広がってきた流れで生まれています。何気なく使っているこのPHPUnitを理解する足がかりに、xUnit自体を自分でPHPで実装すると、xUnitの考え方やPHPUnitに対する理解が深まるのではと思います。
このトークでは、そんなxUnitを実装して理解するという話です。聴講者の方々が普段使っているツールの中について考えるきっかけになれば幸いです。

採択
2020/02/11 10:25〜
Track B
15分トーク

ジェネレータで無限を手玉に取る術

tadsan うさみけんた

「PHPでforeachで反復できるものは何でしょう?」配列、オブジェクト、Iterator、そして“ジェネレータ”です。

ジェネレータは言語によってコルーチン、semicoroutineやFiberとも呼ばれるものと同等の言語機能であり、SICPのような計算機科学の教科書で説明されるストリーム・無限リストを簡潔に実現できます。
foreachループで配列を反復するのは既に作成済みのデータを頭から辿っていくだけのものであるのに対して、ジェネレータは配列のキーや要素に相当するものを計算によって生み出すことができるため、省メモリで効率のよい計算が可能です。

このトークではジェネレータの基礎概念と、実際に応用できるパターンについて紹介していきます。

採択
2020/02/11 10:55〜
Track A
15分トーク

マスターデータの管理運用と実装について

KentarouTakeda 武田 憲太郎

パフォーマンス・スケーラビリティ・開発・運用、
これら多角的な観点から「マスタデータ」を考えます。

都道府県マスタ : 1:北海道/2:青森/3:岩手/4:宮城 …
金融機関コード : 1:みずほ銀行/5:三菱UFJ銀行/9:三井住友銀行 …
ポケモン一覧 : 1:フシギダネ/2:フシギソウ/3:フシギバナ/4:ヒトカゲ …
カテゴリ一覧 : general:一般/social:世の中/economics:政治と経済 …

変わらないデータでしょうか?変わるデータでしょうか?変わるとしたらいつでしょうか?運用するの誰でしょうか?

データの特性を捉えた適切な実装により、開発と運用の双方を効率化できます。その方法をご紹介します。

採択
2020/02/11 10:55〜
Track B
15分トーク

実例から学ぶ、最後まで諦めない決済システム移行方法

litencatt 中村光佑

Web業界に転職して約3年が経ち、任されたのは社内4サービス(そのうちの1つは某ハンドメイドサービス)で利用されるクレカ決済システムの移行プロジェクト。

それは2019年4月末頃に移行本番当日を迎えた、約4ヶ月間にも及ぶ決済システム移行プロジェクトのお話。

発表者は前職で火力発電所の監視システム開発を5年半担当し、そこでは何度も失敗できない現場での業務を経験してきました。
そうした経験を持つ自身が今回の移行成功率を高めるために心がけていたことや実際に実施したこと、またそれでも失敗してしまったことなど、そこで得られた知見を全て皆さんにお話ししたいと思っています。

  • 始まりは現行決済サービスの突如終了のアナウンス
  • いざ計画した決済システム移行方法はまさかの打ち合わせ数日後に却下
  • そして決断されるビッグバンメンテによる4サービス一発切り替えという禁断の計画
  • 本番2日前に発覚した重大な設定ミス

移行本番の日、果たしてシステム移行は成功したのか・・・?
乞うご期待ください!

採択
2020/02/11 13:30〜
Track A
15分トーク

Zend VMにおける例外の実装

hnw hnw
hnw

PHPスクリプトの実行時には「コンパイル」と呼ばれる処理が行われ、スクリプトはZend VM(PHPの仮想的なCPU)の命令列に変換されてから実行されます。このZend VMは本物のCPUと似た命令も持っていますが、本物のCPUではあり得ない命令も持っています。その一つが例外処理に関わるものでしょう。

本講演では、例外処理をZend VMはどのように実現しているのか、Zend VMと本物のCPUとの違いは何か、といった実装の詳細をPHPのCソースコードを交えて紹介します。

採択
2020/02/11 13:30〜
Track B
15分トーク

PHPでPHPを実装する 〜プログラミング言語実装入門〜

tzm_freedom ふりーだむ

プログラミング言語を実装したことはありますか?

本トークではPHPでPHPを実装していくことで、プログラミング言語が動く仕組みを紹介していきます。
静的解析でもよく利用されているnikic/PHP-Parserを使うと、字句解析・構文解析をパスして処理部分に集中してPHPを実装できます。
PHPを再実装するだけではなく処理内容を変えて「自分だけのPHP」を実装することもできちゃいます。

また、プログラムを表現するオブジェクトであるASTを扱えるようになると、静的解析などWebサービス開発の幅も広がります。
例えば、PhanやPHPStanなどの静的解析ツールやそのプラグインを自作できるようになったり、より堅牢なPHPの世界を作ることができます。

本トークではプログラミング言語を実装する楽しさを伝えるとともに、ASTに慣れ親しむきっかけになれば良いと思います。

採択
2020/02/11 14:00〜
Track A
15分トーク

もしもPHPソースコードが読めたなら...

hanhan1978 富所 亮

もしも、PHPのソースコードが読めたら....。var_dumpがどんな風に実装されているのか、explodeはどのように動いているのか、Closureオブジェクトの実装はどうなっているのか?そんな疑問を、自分で直接見て理解することが出来るようになります。 でも、いざ読もうと思っても、C言語のソースコードを読むのは難しそうだし、そもそもどこから手を付けていいか分からないです。

本トークでは、PHPのソースコードを読みこなしていく方法を、手順化して丁寧に解説します。PHPのソースコードを読むことが、一部玄人の特権ではなく、誰でも出来るんだと感じていただきたいです。

採択
2020/02/11 14:00〜
Track B
15分トーク

ぼっちからはじめるレガシーカルチャー改善ガイド 〜はじめの一歩編〜

blue_goheimochi 大橋 佑太

勉強会やカンファレンスに参加するとムクムクと湧いてくるカイゼン意欲。
「よっしゃ明日からやってやるぞー!!」と思って気持ちよく寝ても、
いざ翌日出社すると「あれ・・・どこから手をつけたらいいか分からない・・・」となったりしていませんか?
わたしはそうでした。(いまでもそんな時はあります)

会社の制度やチームの文化を変えるための「銀の弾丸」はないと思っています。

わたしの会社やチームもまだまだカイゼンの余地がありますが、
様々なアプローチを試行錯誤し、少しずつ少しずつカイゼンが進んでいっているなという実感を持っています。

今回のセッションでは特に「カイゼンをまず1人ではじめよう!」と思った時に、わたしが実際に行なったアプローチを時間の許す限り紹介したいと思います。
聞いてくださったみなさんが、明日(明後日?)に出社して、もっと気軽にカイゼンをはじめるためのヒントとなれば幸いです。

採択
2020/02/11 14:30〜
Track A
15分トーク

今だからこそ振り返る register_globals

gongoZ gongo

かつて

Q.「セキュアなWebアプリケーションを作るにはどうすればいいか」
A.「まず PHP を避ける」

とまで言わしめた 古い PHP が活躍していた時代、その中心的機能である register_globals を知っていますか。この機能を on にしたが最後、リクエストパラメータは問答無用でグローバル変数に展開されてしまうという、お手軽且つ凶悪な機能でした。変数汚染攻撃の温床ともなり、「PHP is 脆弱性」とまで言われるようになった所以です。

そんな register_globals も PHP 5.4 で姿を消し、この機能を使ったことのある人の方が少ない時代になっていると思います。
しかし、そんな時代だからこそ皆さんと振り返っていきたいです。

・ register_globals とはどんな機能なのか
・ ドキュメントには載っていない register_globals の動き
・ PHP 5.4 以上でも使える! register_globals

採択
2020/02/11 14:30〜
Track B
15分トーク

Webアクセシビリティを支えるための技術

shiori_pk 有木 詩織

昨今では、アクセシビリティというキーワードを耳にすることが多くなってきました。
Webアクセシビリティとは、Webコンテンツに誰もがいつでもどこでもどんな状況でもアクセスができるようにしていくことです。

Webアクセシビリティは、デザイナーやフロントエンドエンジニアが取り組むものと思われがちですが、サーバーサイドエンジニアでもできることはあります。
私たちサーバーサイドエンジニアは何ができるでしょうか?

Webコンテンツをアクセシブルにするための指標に、Web Content Accessibility Guidelines (WCAG)というガイドラインがあります。
WCAGには、コントラスト比や画像の代替テキストなどが挙げられていますが、そもそもWebコンテンツが表示できるかどうか、レスポンスが遅すぎないかどうかなどの必須条件に関しては言及されていません。

このトークでは、Webアクセシビリティを支えるためにサーバーサイドエンジニアができることにフォーカスを当てて話します。

採択
2020/02/11 15:00〜
Track A
15分トーク

GitHub Actionsで始めるPHPアプリケーションのCI実践入門

fortkle 高野福晃

2019年11月、GitHub Universe 2019で「GitHub Actions」がついに正式版になったことが発表されました。
これまではベータ版として公開されており、v1, v2と大きな仕様変更を経て正式版公開となったわけですが、興味はあるもののしっかりとキャッチアップできている人はまだまだ多くないのではないでしょうか?

本トークではGithub Actionsを1から解説し、実際にこれまでCircleCIやTravisCIで行っていたPHPアプリケーションのCI/CDを、Github Actionsを利用して実現できないかを検証します。
Dockerコンテナを活用しつつ、PHPUnitによるテストや、phpcs・phpstanといったQAツールを実行する具体例として参考となるものにできればと思います。

採択
2020/02/11 15:00〜
Track B
15分トーク

Serverless Pattern

seike460 清家史郎

Serverlessは一般化してきています。

Serverless においてある程度決まったPatternがあります。

ServerlessなArchitectureを組むことでそのシステムはどの様なメリットを享受出来るのでしょうか。

今回はAWSを利用したServerless Patternを適用することで、
そのシステムが享受出来るメリットと構築する上での注意点を解説します。

・想定する聴講者
 - Serverlessに興味のあるWEBエンジニア
 - AWSを利用しているクラウド系エンジニア

・お話する内容
 - AWS Lambdaを中心としたServerless Pattern
 - Serverless Patternを構築するうえで考えるべきAWSリソースの特徴
 - Serverless Patternを構築することで得られるメリット
 - Serverless Patternを利用するうえで注意すべき事項

・お話しない内容
 - GCP、Azureの話
 - PHPを利用したServerless Pattern