PHPerKaigi 2020 プロポーザル一覧

他イベントOK ルーキーズLT

Laravelで家電を操作してみよう

なずな akaa07_pg
「エアコン消し忘れた……」
「エアコンをつけたいけどお布団から出たくない……」
「テレビの電源ついてないと録画できないのにうっかり消してきちゃった……」

そのような経験をした方は多いのではないでしょうか?

そんな悩みを解決するために、PHP Webフレームワーク「Laravel」と無線対応のIoT開発ボード「Obniz」を使用した学習型赤外線リモコンを製作して、ブラウザから家電を操作するお話です。

■内容
- Obnizとは?
- 赤外線リモコンの仕組み
- LaravelとObniz間の通信方法
- 時刻起動で自動操作してみる
3
他イベントOK 15分トーク

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

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

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

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

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

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

forteeに脆弱性診断をかけてみた

cakephper cakephper
phperkaigiを支えているイベント管理システムfortee。
我々はforteeのソースコードを入手することに成功。そこでforteeに対して脆弱性診断を実施、その結果とは・・・

forteeの開発者 @tomzoh にVAddyによる脆弱性検査の実施を依頼されたため、ローカル環境にforteeを立てて検査してみました。
本発表では、脆弱性検査の種類、検査内容、実際の検査のデモ、検査しやすい箇所としにくい箇所の紹介、
フレームワークを使っていても脆弱性を生みやすい箇所の紹介を行います。
あまり馴染みがない脆弱性検査を少しでも体験して、セキュリティテストは一般的なテストと同じように重要であると理解してもらうのがゴールです。
1
他イベントOK LT

GitHub PHP Function Jumper はどのように開発され、そしてストアに公開されたのか

めもりー m3m0r7
GitHub 上で PHP の関数やクラスにマウスをあてるとポップアップが表示され、該当の引数の数や、サマリを表示したりマニュアルに飛べたりする Chrome 拡張機能の GitHub PHP Function Jumper の開発の苦労話からどのように作ったのか、 Chrome Web Store への公開、そして今後の展望をノンストップでお届けします。

https://chrome.google.com/webstore/detail/github-php-function-jumpe/pmgmgaejgbjiooiklinoelilmnldlhcf
他イベントOK 15分トーク

GitHub PHP Function Jumper はどのように開発され、そしてストアに公開されたのか

めもりー m3m0r7
GitHub 上で PHP の関数やクラスにマウスをあてるとポップアップが表示され、該当の引数の数や、サマリを表示したりマニュアルに飛べたりする Chrome 拡張機能の GitHub PHP Function Jumper の開発の苦労話からどのように作ったのか、 Chrome Web Store への公開、そして今後の展望をノンストップでお届けします。

https://chrome.google.com/webstore/detail/github-php-function-jumpe/pmgmgaejgbjiooiklinoelilmnldlhcf
2
ルーキーズLT

ApacheのVirtual Hostをやめて個別にデバックできる環境をDocker Composeで作る

ぬさし nukisashineko
チームにより良いデバック環境を提供したい、そんな一心で頑張る環境整備。
どのような環境がコスパが良くて、わかりやすい設定ファイルを提供できるのか。
日々みなさんが頭を悩ませていることと思います。
開発環境でのApacheのVirtual Hostは便利ですが、php.ini等の設定が一つにまとまってしまう問題があります。
これをVirtual Hostの数だけContainerに入れてDocker Composeで設定ファイルを割り当てれば解決するのではないかということは考えたことがあるでしょう。
この力技の解法をなるべくスマートに解決してみたいと思います。

話すこと
・Apacheのhttpd.confからDocker Composeへの変換方法
・VirtualHostごとにContainerを建てるとポート番号の管理やURLが面倒になりそう
 ・→NginxでReverse Proxyを入れて解決します
  ・Debug用のポートも含め、数個のポート占領で済ませる
3
他イベントOK LT

PHPとRustを組み合わせて音声ファイルをエンコードする話

meteor yaminoma_tw
PHP 7.4ではFFI機能(https://php.net/ffi)が実装されました。これにより共有ライブラリをPHP上で読み込むことが可能になりました。
今回、Rustで音声ファイルのデコードとエンコード部分を実装して、共有ライブラリとしてPHPで呼び出す際のハマりどころや、PHPとRustの親和性についてお話します。
普段PHPを触っているがRustにも興味がある方、音声ファイルのエンコードに興味のある方、FFIに興味のある方はオススメです!
3
他イベントOK 15分トーク

Enumライクな定数管理機構を作ってDTOと組み合わせると幸せ

きんじょうひでき o0h_
## お伝えしたいこと
「意味を読み取りやすいコード」や「同じ事を同じ書き方で表現させる」のは、チームでの品質保持や生産性につながります。
それらの課題は、ある程度まで仕組みで解決することが可能です。

Enumぽいものは、比較的スモールに導入できる上にととても便利なので、作っちゃいましょう or 既存のモノを導入しましょう。活用事例としてDTOのお話にも触れます。
---
// users.statusが3だったら仮登録状態
if ($user->status === 3) {
こんな光景を、見た事がありますか。

PHPにはEnum型はありませんがEnumを模した実装は多くあります。
Hirakuさんの記事は読んだことのある方も多いと思いますし (https://qiita.com/Hiraku/items/71e385b56dcaa37629fe) 、myclabs/php-enumは多くのパッケージで利用されています 。
過去に私も自作しました(https://speakerdeck.com/o0h/bye-bye-magic-number)。これはCakePHP3での事例ですが、作成・導入をした結果とした感想は「メチャクチャDXが上がる」です。どこであろうと似たような表現を同じインターフェイスで扱うことで、メンバー間の書かれるコードの均質性が上がりました。
また、EnumをDTOオブジェクトと繋ぎこむとその効果は更に拡大します。
例えば「DBから取ってきた値」「ユーザーリクエストで飛んできたjsonデータ」を自然に扱えるようになります。
dereuromark/cakephp-dto dereuromark/cakephp-dtoを利用しながら「どういう開発体験がもたらされるか」について考察します
1
他イベントOK 15分トーク

もしレガシー PHP 開発会社に隕石が降ってきたら?

佐々木 鎮也 precs_sasaki
平和な日々を送っていた企業に突然隕石が降ってきたら?
鶴の一声、メテオフォール型で始まったプロジェクト。

アジャイル、クリーンアーキテクチャ、DDD、マイクロサービス・・・

守られないスケジュール、失敗の数々。
モダン技術を取り入れたプロジェクトの行く末は?

それを乗り越えて生まれ変わっていく組織の姿をお伝えいたします。
他イベントOK LT

ElasticBeanstalkのWorker環境でLaravelのキューを処理するのは案外お手軽だった件

津崎 善昭 ytzk_
「アプリケーションサーバでキューを処理していたが、キューの処理が重いのでキューを処理するだけのサーバを建てたい!」

AWS ElasticBeanstalkのWorker環境と、
キューを処理してくれる `dusterio/laravel-aws-worker`というパッケージを利用することで、
お手軽にキュー処理サーバできたよ!

という話をします!
3
他イベントOK 15分トーク

Protocol BuffersでAPIに型を導入する

岸田健一郎 sizuhiko
PHPでAPIサーバーを作っていますか?
APIの仕様書は書いていますか?何を書いていますか?
たとえばJSONデータをPOSTするときに、JSONデータの仕様書も書いていますか?
APIサーバーをPHPで作り、フロントエンドをTypeScriptで作っていれば型を導入できますが、APIで送受信するJSONデータについて共通した型定義は導入できません(JSONスキーマを使っていれば別ですが)。
Protocol Buffersを使うことで、APIで送受信するデータに型を導入できるようになります。
このセッションでは、Protocol Buffersの紹介から、実際にPHPやTypeScriptでどのように使うのか、解説します。
※こちらはサンプルコード解説なしの短縮版となります
他イベントOK 30分トーク

E2Eテストに向き合う

岸田健一郎 sizuhiko
E2Eテストは"遅い"や"不安定"という理由で実施を諦めていませんか?
また、E2Eテストは大変すぎる、と思っていませんか?
おおくの現場でE2Eテストの範囲や実施内容に対する理解は、単体テストや結合テストと比べて曖昧になっているような気がします。
このセッションでは、Testing Pyramidと、その中でもE2Eテストの範囲や実施内容に対する理解を深め、どのようなツールを使うと良いのか?
といったプラクティスを解説していきます。
他イベントOK 30分トーク

Protocol BuffersでAPIに型を導入する

岸田健一郎 sizuhiko
PHPでAPIサーバーを作っていますか?
APIの仕様書は書いていますか?何を書いていますか?
たとえばJSONデータをPOSTするときに、JSONデータの仕様書も書いていますか?
APIサーバーをPHPで作り、フロントエンドをTypeScriptで作っていれば型を導入できますが、APIで送受信するJSONデータについて共通した型定義は導入できません(JSONスキーマを使っていれば別ですが)。
Protocol Buffersを使うことで、APIで送受信するデータに型を導入できるようになります。
このセッションでは、Protocol Buffersの紹介から、実際にPHPやTypeScriptでどのように使うのか、サンプルコードを交えて解説します。
1
他イベントOK 30分トーク

ライブラリに振り回されないライブラリの使い方

吉田あひる strtyuu
みなさんのアプリケーションはたくさんのライブラリの力を借りて実装されていると思います。
しかし、安易にライブラリに依存した実装をすると、ライブラリをアップデートしようとしても変更箇所が多すぎてなかなかアップデートできないなんてことがままあります。
では一体どうですればいいのでしょうか?ライブラリを使わずに実装すればいいのでしょうか?

いいえ、そんなことはありません。
このトークでは、ライブラリへの依存を極力抑えたままライブラリを活用する方法について解説します。
1
他イベントOK 15分トーク

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

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

知らないWebアプリケーションの開発に途中からJOINしたとき、どこから切り込むか?

小山健一郎 k1LoW
エンジニアをしているとプロジェクトに途中からJOINすることはままあると思います。
前提条件はいろいろあるとは思いますが、
今回、新しいプロジェクトに途中からJOINしたので、
そのとき私がどのように切り込んでいったのかを共有したいと思います。

具体的には

- サービス概要をスコープを絞って把握する
- データベースの設計をスコープを絞って把握する
- 開発環境を手に入れる
- リポジトリの雰囲気を感じる
- ソースコードを読み解く

ということについてお話したいと思います。

本発表のゴールは、本発表をきっかけに「私ならこうする」「私はいつもこうしている」「私はいつもここに気をつけている」ということをみなさんが共有してくれることです。

途中JOINのノウハウを共有していきましょう!
4
他イベントOK 15分トーク

稼動中の REST API を PHP から Go に移行するタスクがふってきた

naoki85 naoki85_201612
現職にて、PHP アプリケーションを Go のアプリケーションに移行するタスクがふってきました。
現在のクライアントとのインターフェースを守りつつ、アーキテクチャなどを検討しました。
本セッションでは、そのときの検討過程や、実践した内容を共有したいと思います。
また、大部分は言語関係ない話になりますが、 PHP での実装と Go での実装に差が出たところにも触れたいと思います。
他イベントOK LT

勉強会を多拠点で開催するために必要な機器・環境・ノウハウご紹介

藤澤貴之 miracle_fjsw
――勉強会を主催したものの、参加者が集まらない。
勉強会を主催する側として、このような状態はできるだけ避けたいものです。
地方で勉強会を開催する場合、首都圏とのエンジニア人口比率の違いもあり、メジャーなテーマでなければ人が集まらないことも…。
マイナーなテーマであっても、より多くの人にコンテンツを見て頂きたい…!
「日本中から参加者を集めれば良いのでは?」
運営チーム内でそんな声が上がりました。
あるエリアだけでは人が集まらなくとも、募集するエリアを広げれば、テーマに興味関心を持ってくれる人は増えるはず!
…とはいえ、遠方の技術系イベント・勉強会に参加するのって、交通費やら宿泊費やら、何かと大変ですよね?
「そうだ、リモートで多拠点から参加できるようにすればいいじゃないか」

リモート開催に関する物理的なノウハウなどは、さほど多く世に出回っていないようですので、
自社(東京・大阪の2拠点)で行っている、リモート勉強会で使用している機器・環境、進行ノウハウについて
ご紹介させて頂き、日本中・世界中のエンジニアの距離を縮めることに一役買わせて頂きたいと思います。
1
LT

IRTをメインとした勉強会を開いてみて学んだ課題と改善方法について

endu Fendo181
去年の5月から「Laravel.shibuya」というIRT(Interactive Round Table)メインにした勉強会を開催するようになりました。
IRTをメインとした勉強会の事例があまり無く、不安もありましたが、第1回では応募開始からすぐに満員となり好調なスタートを切る事ができました。
しかし、いざ開催してみるとIRTならではの課題が見つかります。

・IRTをメインにしてるにも関わらず上手くディスカッションが回らない
・経験の差でどうしても上級者の方が喋ってしまい、初心者の方は一方的に聞き手に回ってしまう
・隣のテーブルが盛り上がると話題が全然聞き取れない。
・IRTのトークテーマが事前に集まらない。

これらの課題について運営メンバーで取り組んだ改善方法についてご紹介します!
2
他イベントOK 15分トーク

PHPUnit のカバレッジ取得を 20 倍高速化した話

宮田 淳平 miyajan
弊社のあるチームでは、CI で実行される PHPUnit のカバレッジ取得が 6 時間もかかっていました。
試行錯誤の結果、これを 18 分まで高速化することができました。

PHPUnit は、カバレッジ取得を有効にすると、有効にしていないときと比較して大幅に遅くなりがちです。
遅くなる理由の一つは、xdebug によるカバレッジ情報の取得が遅いことです。
また、別の理由として、グローバルな状態に依存したコードをテストするため、
PHPUnit の process isolation オプションを有効にして毎回プロセス起動を行ってしまうことがあります。

これを解決するために、以下の改善策を行いました。

・xdebug の代わりに pcov を使用する
・並列実行する
・process isolation オプションを無効にし、backup globals や backup static attributes を有効にする

このときの調査や改善活動で得た知見についてお話いたします。
4
phperkaigi-2019 sponsors phperkaigi-2019 potential-sponsors
仮採択 情熱加点 非採択
仮採択 他を採択済 非採択