LT(5分)

まだスケジュールで消耗してるの?

kizu19911020 神谷

スタートアップの開発で、アジャイルと言われるものも取り入れたが、
いわゆるスケジュール管理まじ辛い、
優先度変わるし、タスク増えるし、マストだし卍だし、減らないし、辛いし。

そんな時に出会ったアジャイル侍先輩の本を読んで実際に今実践しているタスク管理方法を共有します!

LT(5分)

XPで学ぶ、良いサービスは良い人間関係から

kkznch けけずん

「良いサービスは良い人間関係から」....という言葉を今作ってみました。

自分がWebエンジニアになって早一年、今では開発チームのリーダー的なポジションでメンバーと開発を行っています。
これまで、どうすれば効率よく開発できるか、どうすれば良いモノを作ることができるのか、というようなことを考えながら開発をしてきました。

「この技術を使えば〜」
「このデザインパターンを則れば〜」
「このツールを導入すれば〜」

試行錯誤を繰り返すも、結局のところ何が最も効果的で何が最も大切なのかという答えに至らず、開発リーダーとして不安を感じながら仕事をしていました。

そんな中で「エクストリームプログラミング」という本に出会い、最も大切なことは人間関係なのだなという答えにたどり着いたので、そのへんのお話をしようかと思います。

LT(5分)

入門 ミューテーションテスト

strtyuu 吉田あひる

みなさんは効果的なテストコードをかけていますか?
書いたテストコードがどれくらい効果的なものなのか測定できていますか?

もしかするとミューテーションテストがヒントを教えてくれるのかもしれません。

1
LT(5分)

新卒エンジニアがphpとjavaを比較してみた

yamauchi387 yamako

私はプログラミングを勉強しはじめて1年半になります。。

【学習経歴】
去年の4月にrubyを勉強→7月からphpを勉強してインターンで実務経験を積む→今年4月に新卒でweb系会社に入社してphpを研修で勉強→7月から業務でjavaを使い始める。

プログラミングを勉強しはじめてずっとphpをやっていた新卒がjavaを業務でやり始めて、phpがより好きになった話をしようと思ってます。

よろしくお願いします!

LT(5分)

エンジニアの文化の作り方 〜社内Podcastのススメ〜

goodoo 株式会社サイバーエージェント 白井 英

弊社の文化づくりの考え方の一つにトランザクティブメモリという考え方があります
ノウハウは人にたまりますが、トランザクティブメモリとは、誰が何をしっているか、を知る、という考え方です
その誰が何を知っているかを、知ってもらうための施策として社内Podcastをやっています
社外向けとはまた一味違った、文化づくりの一環としての社内Podcastの良さをお伝えします

LT(5分)

さらに速くなるPHP

nunulk

Preloading と FFI (Foreign Function Interface) を中心に、PHP 7.4 の高速化の機能と調査結果についてお話します。

PHP スクリプトをそのまま実行した場合とこれらの機能を使った場合とでどのくらいの速度差が出るのかの調査結果がメインですが、時間があれば、C 言語を書きたくない方のために Nim を使った FFI 用ライブラリの作り方についても触れる予定です。

LT(5分)

PHP on AWS Lambda!

seike460 清家史郎

AWS Lambda Custom Runtimes が利用できる様になって随分たちました。

我々PHPerとしては、張り切ってPHP on AWS Lambda するしかありません。

AWS LambdaにおけるPHPのパフォーマンスと利便性を時間が許す限りトークします。

  • お話すること
     - PHP on AWS Lambda
      - パフォーマンス
      - 利便性

  • 利用する技術
     - AWS Lambda

1
LT(5分)

PHPでSeleniumを使ってブラウザテストをやってみた

ヒデキチ

php+Seleniumを使用し、毎回ブラウザ画面で入力するようなテストケースを自動で行い、単純作業の工数を削減!

レギュラートーク(30分)

技術基盤/SREの視点で取り組む、サービスの成長を継続し、加速させるためのPHPアプリケーション改善

arakaji 新垣 雄志

2017年3月からPaykeという沖縄のスタートアップの3人目のエンジニアとして参加し、モバイルアプリのリードエンジニアとして開発を行っておりましたが、エンジニアの増加やサービスの成長に合わせて、より中長期的な視点でインフラやアプリケーションの改善を行う技術基盤/SREチームを立ち上げました。

技術基盤チームでは「サービスの成長を継続し、そしてさらに加速させる」という視点で、フレームワークのアップデート、PHPのバージョンアップ、ジョブキューシステムの開発、APIのパフォーマンス改善などを取り組んできました。

本セッションではこれらの改善を「なぜやったのか」、「どう取り組んだのか」、「結果どうなったのか」の視点で順を負ってお話することで、皆さんが日々の開発現場で行っている様々な意思決定の参考なるようにしたいと思います。

1
レギュラートーク(30分)

CPUとは何か

tomzoh 長谷川智希

CPUが好きです。私は中学生の頃にMSXというパソコンを入手し、MSXのCPUであるZ80のマシン語をプログラミング言語として体験していました。

時を経ること25年、2016年にPHPで書かれたゲームボーイエミュレータのコードを読んで衝撃を受けました。ゲームボーイのCPUはZ80をベースに開発されたものであり、ゲームボーイエミュレータのコードで実装されていたのはまさにそのZ80の命令だったのです。

その瞬間、それまで「よくわからないけどすごいプログラム」だと思っていたエミュレータのコードが、ハードウェア仕様をソフトウェア的に表現したものであることが理解できました。

そしてその3年後。名著「CPUの創りかた」で紹介されている4ビットCPU TD4を実装し、そこでまた衝撃を受けました。そこに見たCPUは、プログラミング言語として見たCPU、エミュレータの対象として見たCPUのどちらとも違った、電気回路として表現された状態機械としてのCPUでした。

このトークではミニマムなCPUとしてのTD4を題材に、PHPでそのエミュレータを実装し、プログラミング言語として見たCPU、エミュレータの対象として見たCPU、そして電気回路として表現されたCPUがどの様に動作するのかを解説します。

このトークを通してみなさんがCPUの設計や動作に興味を持ち、いっしょにCPUについて語れることを楽しみにしています!

レギュラートーク(30分)

PHPでレトロゲーム機のエミュレータを作る

tomzoh 長谷川智希

私は1980年代から1995年頃までのレトロゲーム機が大変好きです。
この頃のゲーム機は各社の工夫でどんどん進化する一方で、技術的な制約によりどのゲーム機でも同じ様な仕様になっているところもあります。

また、それ以前にゲーム機と言えどもそれはコンピュータであり、CPUについては現在のパソコンで使われている様なCPUと同じところもあります。

このセッションでは私が作成したPHPベースのファミコンエミュレータ php-terminal-nes-emulator を題材に、CPUの動作原理やレトロゲーム機に共通する仕様、それをエミュレータとして実装するための設計などをお話します。

そして、エミュレータのコードが「得体の知れない難しいもの」ではなく「ハードウェアの仕様をコードで表現したもの」であり、読んで楽しく、書いてみたくなるものであることをお伝えします!

レギュラートーク(30分)

PHPでファミコンエミュレータを作る

tomzoh 長谷川智希

エミュレータの設計やコードは、Webアプリやフレームワークのそれと違った特長を持っています。エミュレータのコードは、一言で言えばハードウェアの仕様をコードで表現した「Hardware specifications as Code」なのです。

このトークでは私がPHPで書いたファミコンエミュレータ php-terminal-nes-emulator を題材に、エミュレータのコードの特長や設計と、ファミコンエミュレータならではの実装について解説し、エミュレータのコードが「得体の知れない難しいもの」ではなく読んで楽しく、書いてみたくなるものであることをお伝えします!

  • コンピュータのCPUはどの様に動作しているか
  • CPUはメモリやビデオチップとどの様に情報をやりとりしているか
  • CPUをエミュレートするとはどういうことか
レギュラートーク(30分)

ファミコンエミュレータづくりの魅力

tomzoh 長谷川智希

「ファミコンエミュレータを作る」と聞いて何を思い浮かべますか?
多くの方は何をどうしたら良いのか全く想像が付かないと思いますし、私もそうでした。

2016年2月にPHPで書かれたゲームボーイエミュレータ php-terminal-gameboy-emulator が話題になりました。このとき、PHPならばということでコードを読んでみました。エミュレータのコードを読んだのは初めての経験だったのですが、大きな衝撃を受けました。それ以前からCPUやメモリ、この頃のゲーム機に共通する仕様のことは知っていたのですが、php-terminal-gameboy-emulator のコードに見たものはその仕様がそのままPHPのコードとして表現されたものだったのです!

そしてその2年後、あるカンファレンスでファミコンエミュレータに関するトークを聞いた時に、2度目の衝撃が私を襲いました。そこで紹介されたコードはその場で初めて見るにもかかわらず、断片を見るだけで内容が理解できたのです。

このトークでは2度目の衝撃を受けて私がPHPで書いたファミコンエミュレータ php-terminal-nes-emulator を題材に、エミュレータのコードの特長や設計、そしてその魅力をお伝えします。

  • エミュレータでのCPU実装例
  • ハードウェア仕様のソフトウェアとしての表現

エミュレータは決して難しいものではなく新しい言語の学習や設計の練習にちょうどよいテーマでもあります。このトークを聞けばきっと一度エミュレータを書いてみたくなるでしょう。

レギュラートーク(30分)

ファミコンの画面描画を知る

tomzoh 長谷川智希

ファミコンの画面は8x8ピクセルで定義されたキャラクタを敷き詰めた画像(BG)の上に8x8ピクセルで定義されたキャラクタ(スプライト)を重ねて描画されています。その名の通り、多くの場合ゲームの背景をBGで、ゲームの主人公や敵キャラをスプライトで表現することになります。

この「BGとスプライトでゲーム画面を描画する」という設計はファミコンに限らず、PCエンジン, ゲームボーイ, メガドライブ等々、PlayStationより前のゲーム機に共通する設計でした。
すでに発売されているゲーム機より高い性能、より良い表現を求められるであろうゲーム機の設計においてなぜ画面描画に関する設計は共通になっているのでしょうか。それには当時の技術的な制約、出力先である家庭用テレビの仕様が影響していました。

このトークでは私がPHPで書いたファミコンエミュレータ php-terminal-nes-emulator を題材に、ファミコンの画面描画の仕組みや、画面描画をエミュレータでどの様に設計・実装しているのかを解説します。
そして、このトークを通してエミュレータのコードが「得体の知れない難しいもの」ではなく読んで楽しく、書いてみたくなるものであることをお伝えします!

LT(5分)

Laravel Pipe Dreamを使って素早くプロジェクトを始める

Fendo181 endu

Laravel Pipe Dreamは、AndersJürisoo氏が開発したLaravelのアプリケーションスキーマを迅速に作成するためのパッケージです。Laravel Pipe Dreamを使う事で初期プロジェクトを立ち上げ時に必要なControllerやModel、マイグレーションファイルなどを、たった数行書くだけで全て生成する事が可能です。発表ではLaravel Pipe Dreamの使い方や、具体的にプロジェクトで使うにあたっての気をつける事について発表をしようと思います。

1
レギュラートーク(30分)

PHPerはPSRをどこまで意識して開発すればよいのか

Fendo181 endu

PSR(PHP Standards Recommendations)とはPHP-FIG(PHP Framework Interop Group )が策定しているPHPコーディング規約の事を指します。PSRで策定されている内容としては、コーディングスタイル、オートローディング規約、インターフェイスがメインになっていますが、我々PHPerがPHPでコードを書く時にPSRをどこまで意識すれば良いのか?或いはどのような時にPSRの規約を準拠してコーディングをすれば良いのか?について、現在策定されているPSRの紹介や、実際会社で導入している事例を含めて発表をしようと思います。

1
LT(5分)

API Gateway + Lambda + php-gdでサムネイル処理

yakitori009 金澤 裕毅

サムネイル処理の手段として、AWS Lambda で行う手法が浸透してきていますが、
その事例のほとんどがImageMagickを使ったものです。

ImageMagickは定番ですが、気を付けて使わないとサーバーリソースの問題に悩まされることもあります。
そこで、敢えてphp-gdで検証して、優位性があるかを検証してみたいと思います。

ImageMagick、php-gd、Golangのimagingで比較した結果を発表いたします。

レギュラートーク(30分)

クリーンアーキテクチャで挫折しないために「依存の方向」と「処理の流れ」をまず理解する

blue_goheimochi 大橋 佑太

「クリーンアーキテクチャ」聞いたことはありますでしょうか?私自身はドメイン駆動設計に興味を持ち始め色々調べていた時にクリーンアーキテクチャをはじめて知ったと記憶していますが、最初は、Web上のクリーンアーキテクチャの記事やクリーンアーキテクチャの本を読んでも私はまったくと言っていいほどその内容を理解できませんでした。

そんな状態の私がクリーンアーキテクチャをうっすらとでも読み解くことができるようになったのは、「依存の方向」と「処理の流れ」を理解できたことが出発点だと思っています。

クリーンアーキテクチャを学びはじめたけれどもよくわからない・・・というように挫折を感じている方がいるかもしれませんが、この「依存の方向」と「処理の流れ」を意識することができればクリーンアーキテクチャの理解の助けになると確信しています。

「→」(依存の方向の矢印)に惑わされた私がどんなように「依存の方向」と「処理の流れ」について理解しているかを、DIPやDIにも軽く触れながらお話しすることで、このセッションがクリーンアーキテクチャを理解するための一助となれば幸いです。

2
レギュラートーク(30分)

PHPとLaravelと仲良くなるためのポイント、n選!

anchor_cable 鈴木 智也

「PHP、なんか分かり辛くね?」
それが、初めてPHPに触れた素直な感想でした。

「PHPは初学者にも分かりやすいよ」と言われています。
これまでJavaとPythonとを勉強していた身としては「まあ大丈夫かな?」と思って初仕事に臨んだのですが、
見事に裏切られました。

・<?php の閉じタグしないの? 何で?
・この変数についてる$って何?
・-> と => なんで両方使うん...
などなど...

今回の登壇では上記に限らず、PHP初学者(=私)が行き詰まったポイントを列挙していきます。
なおPHPだけでなく、Laravel、設計の話も含みます。

初学者の方はこれから行き詰まることのないよう、経験者の方は後輩に教えるために、ぜひお聞きください!

1
LT(5分)

PHPでモンキーパッチを当てる

nazonohito51 川島慧

モンキーパッチという言葉をご存知でしょうか?
プログラミング言語により若干意味は異なるようですが、一般的には元のソースコードは書き換えずに、実行時にそのコードを拡張してしまうという手法のことです。
過去にはゲリラパッチと呼ばれていた時代もあり、言語のルールを超えたり、あるいはフレームワーク・ライブラリを制作者の意図に反する動きをさせることが出来たりと正真正銘の闇の技術です。

PHPにおいては、せいぜいrunkitといったC言語レベルでの拡張によって実現ができるくらいなので、PHPはモンキーパッチしづらい言語であると言えるかと思います。
ですがC言語レベルの拡張を使わずともStreamWrapperというマイナーな言語組み込みの機能を使うことにより・・・実は可能です。
PHPファイルに書かれたソースコードがincludeされる直前に、そのコードを書き換えてしまうなんていうとんでもないことが可能なのです。
これを使うことにより、本当に色々なことが出来ます。

  • フレームワークのコアコードを書き換えずにその振る舞いを変えてしまう
  • 本来モックにできない言語組み込みの関数を呼び出している箇所を、自分たちの関数呼び出しに変換することでモック化してしまう
  • 本番環境のAPIを呼び出しているコードのURLを書き換えてテスト環境に向けさせる
  • PHPStanが解析対象を読み込む際に、実行されると困る副作用の処理を削除して無効化したり、重複クラスの読み込みを直前にクラス名を書き換えて回避する

今回はそんな闇の技術の裏側の実装のお話や、実際に皆様がすぐお使いいただけるライブラリを作ってしまったのでご紹介させていただければと思います。