PHPerKaigi 2020 トーク一覧

他イベントOK 30分トーク

SQLServerの操作が辛い?それPHPでコマンドラインクライアント作れますよ?

hanhan1978 富所 亮 hanhan1978
SQLServerの操作って大変ですよね。基本GUIのツールを使う必要がありますし。
MySQLみたいに、簡単にクライアントから接続できて、気軽にSQL発行出来たらなぁ...

それPHPで出来ます!
Readlineを使って、mssqlコマンドを作っちゃいましょう!
他イベントOK 30分トーク

パワポの操作が辛い?それ PHP で自動化できますよ。

m3m0r7 めもりー m3m0r7
パワポを使用する業務、大変じゃありませんか?全スライドのフォントを整えたり、座標を調節したり、画像の配置を変えたり、本来の業務の時間を割いてやるのは時間がもったいないです。
そこで、自動化をしたいと考えたことはありませんか?でも VBA 難しいしな… と思う必要はありません。
そう PHP でパワポの生成や全スライドのフォントを整えたり、座標を調節したり、画像の配置の変更を自動化すればいいのです。
本セッションでは PHP でパワポのファイル生成をどのようにやるのかを解説します。
他イベントOK 30分トーク

ワードの操作が辛い?それ PHP で自動化できますよ。

m3m0r7 めもりー m3m0r7
ワードを使用する業務、大変じゃありませんか?フォントを整えたり、画像の配置を変えたり、本来の業務の時間を割いてやるのは時間がもったいないです。
そこで、自動化をしたいと考えたことはありませんか?でも VBA 難しいしな… と思う必要はありません。
そう PHP でワードファイルの生成やフォントを整えたり、画像の配置の変更を自動化すればいいのです。
本セッションでは PHP でワードファイルの生成をどのようにやるのかを解説します。
他イベントOK 30分トーク

エクセルの操作が辛い?それ PHP で自動化できますよ。

m3m0r7 めもりー m3m0r7
エクセルを使用する業務、大変じゃありませんか?方眼紙にして入力したり、セルの枠を調整したり、本来の業務の時間を割いてやるのは時間がもったいないです。
そこで、自動化をしたいと考えたことはありませんか?でも VBA 難しいしな… と思う必要はありません。
そう PHP でエクセルの生成やセルの調整などを自動化すればいいのです。
本セッションでは PHP でエクセルファイルの生成をどのようにやるのかを解説します。
他イベントOK 15分トーク

10数年続いた配信サービスの配信基盤とAPIをリプレイスしている話

juve534 juve534 juve534
私達は昨年から、10数年続いたサービスの配信基盤とAPIをリプレイスしています。
現在Adobe Media ServerとFlashで構築しているシステムを、WebRTCで再構築しています。

APIはフレームワークを使わず実装されていましたが、PHP7とLaravelの構成に作り直しています。
このセッションでは、自分たちの昨年からの歩みとして、現在のアーキテクチャになった経緯と苦労を話して行きたいと思います。
今後リプレイスする方の参考になれば幸いです。

話そうと思う技術
・WebRTC
・Laravel
・AWS
他イベントOK LT

インフラ詳しくない男がTCP/IPのハーフクローズを知った話

juve534 juve534 juve534
私は普段、TCP/IPを意識することはありませんでした。
しかし、映像配信サービスの開発に携わる中で、サーバでWebSocketの切断検知がうまくいかず、TCP/IPのハーフクローズを知りました。
そこで実体験をもとに、TCP/IPのハーフクローズを話していきたいと思います。
他イベントOK 15分トーク

Hello PHPer! I am Ansible!

attakei kAZUYA tAKEI attakei
コンテナコンテナしている時代ですが、それでもDockerやk8sなどを使わないサーバー構成はなくなることはないでしょう。

このトークでは、AnsibleでPHP環境を構築するユースケースを紹介します。
Pythonなんて必要ないので、是非気軽に構成管理を持ち帰ってください。
採択 他イベントOK 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ソースコードを交えて紹介します。
採択 他イベントOK 2020/02/11 10:25〜 Track B 15分トーク

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

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

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

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

PHP5からPHP7へ移行するメリットを語る(動作スピード以外で)

sapi_kawahara さっぴー川原 sapi_kawahara
私は、何件かPHP5からPHP7移行をしてきました。
実はPHP7に移行して動かなくなるのは、実は稀なケースであり、すんなりと動きます。
PHP7は怖くないです、移行する価値は絶対にある、そんな話をしても、移行していない人は乗り気じゃない。

移行しない理由にメリットの少なさというか、早さ以外のメリットが出てこないのです!
「PHP7早くなったんでしょ?うちでは動作スピードを求められてないからねー」
「PHP7は早くなったけど、色々と無くなった(関数)んでしょ?」
「PHP7の早さだけで移行予算は組めないんだよね」

そこで早さ以外のメリットを語ってみたいと思います。
1
採択 他イベントOK 2020/02/11 16:00〜 Track A LT

自分の名前を"ちゃんと"入力したい人生だった

hamaco hamaco hamaco
私の苗字は「濱󠄂中」なのですが、実は普通に「はまなか」を変換してでてくる「濱」の字とは違う字体が使われています。
これは異体字と呼ばれるもので、「はしご高(髙)」や「立つ崎(﨑)」の仲間なんですが、この辺のメジャーな文字と違って変換も表示もできなくて辛い思いをしてきました。

けれど、最近のOSでは普通に異体字を扱えるようになり、(頑張れば)私の「濱󠄂」の字が読み書きできる時代が来ています。
ここでは、異体字がどういうものなのか、自分の名前を読み書きするためにどうしたのか、結果どうなったのかそういったことを話せればと思います。
他イベントOK 15分トーク

人名漢字と向きあう 〜異体字を扱ってみた〜

hamaco hamaco hamaco
東京都にある「葛󠄁飾区」と奈良県にある「葛󠄀城市」はどちらも同じ「葛(カツ)」という字が使われていますが、よく見ると文字の形が違っています。
これらの意味としては同じだけど、字形が異なる文字は異体字と呼ばれており、「沢」と「澤」のような分かりやすいものから、「はしご高(髙)」や「立つ崎(﨑)」などの細かい字形が違うものなど様々なものがあります。

日本人には切っても切り離せないこの異体字、Webで扱おうとするとなかなかハードルが高いです。
しかし、実はこの異体字を扱う仕組みは世界中で使われるようになってきており、今ではいくらか制限はありますが、Webでもこれらの漢字が扱えるようになり始めています。
このセッションでは、異体字とはなんなのか、PHPで異体字を扱うためにどんな苦労をした(している)のかを話したいと思います。

話す事
・異体字とは
・異体字がパソコン上でどう扱われているのか
・異体字と外字について
・異体字を読み書きする為の方法
・異体字をPHPで扱う時に困ったこととか
2
採択 他イベントOK 2020/02/10 11:25〜 Track A 30分トーク

PHPでつくるインタプリタ入門

budougumi0617 清水 陽一郎 budougumi0617
パーサーやインタプリタを作ってみたいと思ったことはありますか?私はあります。
パーサーを作りコードをパースする一連の流れを実装することで、
コンパイラやインタプリタの気持ちを理解できるようになれば、プログラミング言語に対する距離をより縮められると思っています。
「PHPで何を作ろう?」と思ったPHP初心者の私は、この機会にGo言語のインタプリタをPHPで実装することにしました。

本発表では、PHPでGo言語のインタプリタを作成した話をします。
この発表を通して、以下のことを伝えたいと思います。

- インタプリタを作ると何が得られるのか?
- 字句解析、構文解析、評価器とはなにか。それぞれの役割
- 抽象構文木とPHPでの実装方法
- デモ
- 今までGoを書いていたPHP初心者がPHPでインタプリタを書いてみて

対象の言語仕様によってパース処理は異なりますが、インタプリタを実現するまでのステップや流れは同じになるはずです。
この発表を通して聴衆のみなさんが自分の興味がある言語のインタプリタを作り始められるようになるのが、本発表のゴールです。
採択 他イベントOK 2020/02/10 17:15〜 Track A ルーキーズLT

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

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

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

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

■内容
- Obnizとは?
- 赤外線リモコンの仕組み
- LaravelとObniz間の通信方法
- 時刻起動で自動操作してみる
採択 他イベントOK 2020/02/11 10:55〜 Track B 15分トーク

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

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

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

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

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

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

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

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

https://chrome.google.com/webstore/detail/github-php-function-jumpe/pmgmgaejgbjiooiklinoelilmnldlhcf
2
採択 他イベントOK 2020/02/11 15:55〜 Track A LT

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

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

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

o0h_ きんじょうひでき 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 佐々木 鎮也 precs_sasaki
平和な日々を送っていた企業に突然隕石が降ってきたら?
鶴の一声、メテオフォール型で始まったプロジェクト。

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

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

それを乗り越えて生まれ変わっていく組織の姿をお伝えいたします。