採択
2020/12/12 15:55〜
Track4
Regular session (25 mins)

Laravel + Lighthouseで始める低コストなGraphQL入門

DddEndow あきの/akkino

GraphQLをご存知でしょうか。名前は聞いたことあったり、実際に使用した経験のある方も多いかもしれません。
GraphQLは2015年にFacebookにより開発されたRESTとは異なる新しいAPIフォーマットです。
クエリ言語を用いてデータを操作することで、取得過剰や取得不足と言ったRESTの問題を解決し、本当に必要なリクエストを得られるようになると注目を浴びていました。

しかしながら2020年現在、PHPが得意とする領域においてはまだまだRESTが使用されているアプリケーションの方が多いかと思います。
今回は実際にLaravel + Lighthouseを用いてGraphQLによるWebアプリケーションを開発した際に得られた知見をもとに、なるべく実装コストや学習コストを下げた開発方法や実装する際の注意点、アンチパターンなどをお話しさせていただきます。

PHPでのGraphQL APIの開発はここまでやりやすくなったよ!というのを皆様にお伝えできればと思います。

Track ID: Track4-4-B
Discord Channel: #track4-4-b-laravel-lighthouse

Regular session (25 mins)

PHPer のための Go の歩み方

m3m0r7 めもり〜

ふと「別の言語も学んでみたいけど、とっつき方がわからない」と思う方も多いのではないでしょうか。
特に近年よく使われる Go などを触ってみたいけど、難しそうと思いなかなか手を出しづらいと思っている方もいらっしゃるかもしれません。
Go をチョットワカルようになるだけでも PHP にはない新鮮さ、楽しさを感じることができます。
ちなみに、私は Go を初めて触ったときに作ったものは、ハムスター監視システムで、もともと PHP で作られていたシステムを学習の意味も含めて Go にリプレイスしました。
主に大きい学習としては非同期に処理ができる WebSocket サーバーの実装をゼロから作り上げた点です。もともと Go は既にいろんな WebSocket のサードパーティモジュールが提供されています。しかし、あえて茨の道を進むことにしました。
そこで PHPer である私が Go を歩むにあたってどのように学習をして、WebSocket サーバーの実装を行っていったかを本トークでお話できればと思います。

8
Regular session (25 mins)

PHPer のための TypeScript の歩み方

m3m0r7 めもり〜

ふと「別の言語も学んでみたいけど、とっつき方がわからない」と思う方も多いのではないでしょうか。
特に近年よく使われる TypeScript などを触ってみたいけど、難しそうと思いなかなか手を出しづらいと思っている方もいらっしゃるかもしれません。
TypeScript をチョットワカルようになるだけでも、業務の分野が広がり、フロントエンドエンジニアの業務がどういったことをやっているのか理解しやすくなります。
ちなみに、私は TypeScript を初めて触ったときに作ったものは、ハムスター監視システムでした。
そこで、PHPer である私がどのように TypeScript を学習し、ハムスター監視システムを作り、そして業務レベルまで扱えるようにしたのか本トークでお話させていただければと思います。

5
Regular session (25 mins)

既存アプリケーションにLaravelを適用するを考える

古賀敦士

私が携わっているシステムでは、過去に既存PHPアプリケーションにLaravelを導入した経緯があり、bootstrap処理の中で独自設定を施しています。
これによってLaravelのデフォルト設定を都合が良いようにカスタマイズして使っています。
Laravelのデフォルト設定がどうなっていて、どういうカスタマイズをなぜやっているかをベースに、既存アプリケーションへの適用についてお話しできればと思います!
これから導入を考えている、設定をいじりたい、フレームワークのソースコードに興味があるという方の一助になれば幸いです。

5
Regular session (25 mins)

事業を支えるレガシーコードとの向き合い方

takushinohara 篠原 卓

私の所属する組織では、10年以上に渡って「小さなお葬式」というWeb集客型の葬儀サービスを提供し続けています。
サービスを構成するWebサイトや基幹システムをはじめ、関連するほぼすべてのシステムをPHPで開発しています。
本セッションでは、事業の急成長とともに肥大化・複雑化していった基幹システムをドメイン駆動設計を足がかりにリプレースした話を軸にして、
レガシーコードやレガシーシステムと向き合ってきた私達の過去〜現在〜未来についてお話させて頂きます。

8
Regular session (25 mins)

私が歩んできた「エンジニアのキャリア論」

saik1010 斉藤健太

株式会社ウエディングパークでエンジニアリングマネージャーをしています。

このプロポーザルを書いている10月からSREへジョブチェンジすることを決断しました。
私のこれまで歩んできたキャリアは、サーバサイド→マネジメント→QA→SREと、あらゆる職種を渡り歩いてきました。

PHP界隈のエンジニアを初めとして、昨今のエンジニアにおいてのキャリアパスは多岐に渡っており、
自分がどこに進めばいいか?何を極めていくべきか?どういう人材でありたいか?は頭を悩ませている人も多いはず。

今回は、私が10年間のエンジニアとしての歩んできたキャリアを1つ1つ棚卸しをしながら、
それぞれの分岐点で何を考えてきたか、失敗と成功例、キャリア整理の仕方など、
実際に経験し、実践をしてきたことをお伝えできればと思います!

3
採択
2020/12/12 13:15〜
Track3
Regular session (25 mins)

PHP on Kubernetes

k_kinzal Kouta Ozaki

コンテナネイティブ時代に突入した昨今、PHPer の皆さんはコンテナ化は済ませましたか?
Chatwork 株式会社では2020年に PHP アプリケーションをコンテナオーケストレーションツールのデファクトスタンダードである Kubernetes に置き換えました。

そこで、これからコンテナ化を行おうと考えている PHPer の方々向けに

  • なぜ、PHP アプリケーションでコンテナを使用するのか
  • コンテナ化、Kubernetes 化では何をする必要があり、何に注意する必要があるのか
  • 開発環境でも Kubernetes を使うべきか

など、Chatwork の事例を元に解説します。

  1. そもそも Kubernetes とは? ~ 導入のメリット
  2. コンテナ化の流れ ~ PHP アプリケーションの Docker イメージ化
     - 設定を注入しよう (Env / File)
      - 環境差異を設定で吸収する方法
      - 整合性の検証方法
     - ログ管理を行おう
      - 標準出力 (stdout) の取り扱い
      - TIPS: decorate_workers_output/log_limit の取り扱い
     - 外部サービスと認証管理
  3. Kubernetes 化の流れ ~ コンテナのオーケストレーション
     - PHP アプリケーションにおける構成例
     - Pod のライフサイクル (Readiness / Liveness)
     - メトリクスの収集方法
     - ロードバランサーの配置
  4. 開発環境としての Kubernetes はどう評価できるか?
     - パフォーマンスと安定性
     - PHPStorm との連携はどうするか?
     - Kubernetes Manifest の複雑性
  5. まとめ

Track ID: Track3-2-B
Discord Channel: #track3-2-b-kubernetes

Regular session (25 mins)

Re:Startup Day-1

ariaki4dev ariaki

他社事業を買収し再出発するWeb系スタートアップの技術責任者。こんな経験をされる方は少ないのではないでしょうか。
このセッションでは「君、明日から技術責任者ね」と言われたエンジニアが何を考え、どう判断するのか、現在進行系のリアルな経験談をお話します。
一般的な職位のあるべき論ではなく「スタートアップのDay-1に立った」私を主語にしキャリアと思考についてお伝えします。
技術中心思考から事業全体へと視座をあげ意識を変革することは、すべてのエンジニアにとって成長のきっかけになるはずです。
技術職でのキャリアアップをめざし今後どう成長していくべきか悩まれている方に、ぜひ聴いていただきたい内容です。

6
Regular session (25 mins)

PHPと乱数

ariaki4dev ariaki

PHPには乱数生成関数がたくさん実装されていますが、いったいどれを使えばいいでしょうか?

rand()
mt_rand()
random_int()
random_bytes()
openssl_random_pseudo_bytes()

なんでこんなに関数があるんでしょうね。
みなさんはどの関数をどんな目的で使ってますか?それって本当に安全ですか?
それぞれどんな歴史的経緯があり、アルゴリズムや実装ってどうなっているでしょうか。
このセッションでは、そもそも乱数とは何か基礎知識からはじめ、PHPでの実装を踏まえながら解説を進めます。
さぁ、PHPの闇に触れましょう。

6
Regular session (25 mins)

アジャイル開発見積実践 〜フィードバックを継続的に得るためのユーザーストーリー分割〜

hgsgtk 東口和暉

昨今のPHPerにとって、継続的に価値を提供するソフトウェアをつくるためには、言語等の技術要素に加えて、開発の流れや人に対するエンジニアリングも必要不可欠です。
「技術と人」両方に着目するようになると、XPやアジャイルなどの考え方・取り組みに最終的に帰着するチームは多いと思います。
アジャイル開発において、ユーザーストーリーをイテレーションごとに収まるような形で分割することは、プロダクトに対する検査と適応のリズムを得るために重要な取り組みです。ユーザーストーリーが大きすぎるものをそのまま取り組もうとすると、大きさゆえに見積自体の精度もより落ちてしまったり、その実現に期間を要することから顧客からのフィードバックも得づらくなります。

今回は、実際に所属企業で実践した実例を題材にしつつ、聴講いただいた皆様が明日から使える実践的な見積もり技術話をお届けできれば思っています。

11
Regular session (25 mins)

Community Strategy 101

chmazur Chris Mazur

Communities are increasingly important in this Digital Transformation era. Getting together people and technology with common interests, a strong sense of belonging and collaboration is a powerful platform to empower individuals and connect organizations with their audience.

With 20 years of experience in software development and more than 12 years being heavily involved in tech communities as community leader and strategic advisor in Argentina, New Zealand, Australia and US I would love to dive with you the principles of building diverse and innovative communities with a positive impact in the society.

1
Regular session (25 mins)

Messaging re:Born

Thr33One Nick Chiu

How Apache Kafka is different from other messaging systems like RabbitMQ.
What are the advantages and disadvantages and why you should
consider changing your service communication.

Regular session (25 mins)

How to not break messaging

Thr33One Nick Chiu

We all know about API versioning and how painful it can be to maintain these,
especially for many services and over a long time.
What if there was a better way for this using messaging?
We will dive in, how Apache Kafka and Apache Avro can make your life
easier and how you can have evolving schemas.

2
採択
2020/12/12 16:40〜
Track6 (International)
Regular session (25 mins)

Service communication re:Born

Thr33One Nick Chiu

As we move more and more to microservices communication between services becomes more important.
Using messaging is an effective way and gives us a lot of freedom & benefits, especially when using Apache Kafka.
This helps services to be very resilient and being able to scale without losing the control and overview.

Track ID: Track6-5-A
Discord Channel: #track6-5-a-service-communication

採択
2020/12/12 17:15〜
Track6 (International)
Regular session (25 mins)

How good are my tests?

shochdoerfer Stephan Hochdoerfer

How to measure the quality of unit tests? Code coverage is not necessarily a good indicator to answer this question. What other options do we have? Do we need tests to test the quality of our tests? In some way, yes we do. In this session, I will introduce you to the concept of mutation-based testing and how this technique can be used to improve the quality of your test suite.

Track ID: Track6-5-B
Discord Channel: #track6-5-b-how-good-are-my-test

Regular session (25 mins)

【Symfony】DBマイグレーションの前に常にmysqldumpを実行するようにして心の平穏ゲットだぜ!

ttskch たつきち

SymfonyプロジェクトでのDBマイグレーションの不安を和らげるために、マイグレーションを実行する前にmysqldumpを出力するようにする方法について紹介します。
ちゃんとBlue Green Deploymentしているようなプロジェクトでは無縁の話ですが、サーバー1台にアプリもDBも同居しているような古き良き構成ではとても役立ちます。
インフラに投資してもらえないSymfonyプロジェクトをお持ちの方必見!

3
Regular session (25 mins)

【Symfony】シンプルでカスタマイズしやすい最強のページネーションバンドル

ttskch たつきち

Symfonyユーザーの皆さんに朗報です。

シンプルでカスタマイズしやすい最強のページネーションバンドルを作りました。
https://github.com/ttskch/TtskchPaginatorBundle

・超軽量
・Symfony以外に一切依存なし
・ページャー部分のHTMLなどはtwigで簡単にカスタマイズ可能
・見出し部分を簡単にソートのためのリンクにできる
・検索フォームとの連動も簡単
・ページャー部分のHTMLのBootstrap4テーマをプリセット

といった特徴を備えています。

本セッションでは、このバンドルを使って実際にページネーションを実装する手順や、Doctrineと連携した応用的な使い方について解説します。

2
Regular session (25 mins)

LaravelとAWSでサービスとともに設計を成長させる

kazuhei__ かずへい

開発当初はインスタンス一つで動いていたWebサービスも機能が増えるにつれて複雑になっていきます。
メールを送りたい、定期実行したい、高度な検索をしたい、ログを取りたい、アセットをCDNに置きたい。
Laravelをサービスをつなぎ合わせる糊として使うことでAWSにはたくさんの便利なサービスを有効活用できます。
設計が変化していった変遷をその時の苦労話を交えてお伝えします。

10
採択
2020/12/12 14:00〜
Track4
Regular session (25 mins)

Laravel × オニオンアーキテクチャで始めるテスト駆動開発

canon1ky 村田主磨

皆さんはテストを書いていますか?
テスト駆動開発をしていますか?

テスト駆動開発と言っても、どの部品の単位でテストを書けば良いか悩む方も多いのではないでしょうか。
テストを書く上ではソフトウェア設計への配慮が欠かせません。

ソフトウェア設計の大切さ、テスト駆動開発で単体テストを書く利点について理解を深め、その後にオニオンアーキテクチャを採用したソフトウェアでテスト駆動を行う手順を語っていきます。

当セッションでは下記のような話をする予定です。
・なぜテストを書く上でソフトウェア設計が大切なのか
・単体テストを書く利点
・オニオンアーキテクチャの解説
・オニオンアーキテクチャでTDDを行う手順

※アーキテクチャは触りだけ説明し、メインはテストの話になります

Track ID: Track4-3-A
Discord Channel: #track4-3-a-laravel-onion

採択
2020/12/12 15:20〜
Track4
Regular session (25 mins)

本番でしか起きない問題に早く気が付けるように、僕は Laravel Dusk で CI する

sogaoh sogaoh

昨年、最低限の機能でリリースとなった新サービス。
今も開発が続いているのですが、機能追加をリリースするたびに何かしらトラブルが発生してしまい、切り戻して終わる、ということが頻発していました。
この状況をなんとかしようと思い、足りてない施策をいくつか始めていきました。
Unit Test の自動化、PSR-4 チェック、そして、Laravel Dusk での Browser Test。
このセッションでは、開発から本番へ進む際にめぐりあった数々のトラブルをどう乗り越えて来たのか、と、
量産体制に入ることができている Laravel Dusk の Test 整備方法の一例を、デモを交えてご紹介できればと思います。

Track ID: Track4-4-A
Discord Channel: #track4-4-a-laravel-dusk