過去に数回、PHP系のカンファレンスで非同期処理について解説しました...が!「中身なんてどーでもいいんだよ!明日から使えるコピペできそうなやつくれよ!」って言われたので、すぐ使えそうな非同期テクニックを何個か紹介します!
B+木というデータ構造をご存知でしょうか?RDBMSでよく採用されているデータ構造で、ディスクの効率的な利用や、検索を行いやすいなどの特徴があります。しかし、耳学問で聞いてみてもイマイチ特徴がピンと来ないのです。
本トークでは、PHPでB+木のデータ構造を実装して、RDBMSでB+木が採用される理由、インデックスの構造的な仕組み、何故検索が速くなるのか?などなど、データベースの仕組みの根幹を覗いてみましょう。
このトークでお話すること
PHP 7.4 から FFI がサポートされるようになりました。これまで、Cのライブラリを経由して何がしかの処理を行う場合は、PHP拡張を作るしかありませんでしたが、FFIを使うことで、直接PHPからCのライブラリをコールすることが出来るようになりました。
このLTでは、Webカメラの操作を題材にしてPHP-FFIが開くPHPの新しい可能性について紹介します。
2022年の4月から、ふと思い立って PHP のメーリングリスト(Internals)と PHP のバグイシューを全部読むという行動を初めました。最初はしんどかったのですが、段々と体が慣れてきて、ついには週1で Youtube Live でまとめを発表できるようになりました。
本 LT では、一体なぜそんなことをしているのか?そして、これをやるとどうなるのか?をお伝えします。
Laravel Dacapoという自作のOSSライブラリの話をします。
https://github.com/ucan-lab/laravel-dacapo
・開発初期段階のマイグレーションについて
・マイグレーションで困っていること
・ダカーポを導入するメリット
・簡単な使い方やコマンドのご紹介
Laravel Dacapoという自作のOSSライブラリの話をします。
https://github.com/ucan-lab/laravel-dacapo
・開発初期段階のマイグレーションについて
・マイグレーションで困っていること
・ダカーポを導入するメリット
・簡単な使い方やコマンドのご紹介
「この仕様書通りにAPI作成をお願いいたします!」
クライアント様から頂いた仕様書、そこに記述されていたのは……
・数値なのに文字列型パラメータ
・カンマ区切りのジェイウォークなパラメータ
・mail_1, mail_2, mail_3 というマルチカラムアトリビュートなパラメータ
・"True", "False" という文字列型フラグパラメータ
・備考に「拡張用」と記述されている、現状無意味なパラメータ
本LTでは、そんなアンチパターンなリクエストパラメータの整形をサービスクラスではなく
Request クラスにアクセサ機能を追加するパッケージを作って整形したお話をします。
作成したパッケージ laravel-add-formrequest-accessor
https://qiita.com/kazumacchi/items/aebfe8dfccbfd28acaf4
GraphQL初心者向けに下記のような話をします!
・GraphQLとは何か
・GraphQLのクエリ、ミューテーションの説明
・クエリの記述方法の説明
・Laravelでの導入方法
・実務で使ってみてどうだったか?
Laravel では CSRF 攻撃対策としてデフォルトで CSRF トークンの検証をミドルウェアで行います。テスト実行時は利便性のために無効化されますが、心配性な私は、誤ってこのミドルウェアを外してしまって CSRF 脆弱性を埋め込んでしまうのではないか?と心配になり、一部のテストで有効化したいと思いました。
このセッションでは Laravel の CSRF トークン検証のテストを作成するまでの過程を追ってみようと思います。
みなさんは Feature Flag (Feature Toggle) についてご存知でしょうか?
コード中に Feature Flag の値による条件分岐を仕込んでおくと、その値を切り替えることで機能を有効化・無効化することができます。 Feature Flag を使うことで、機能リリースのタイミングの柔軟な制御や問題のある機能の迅速なロールバックを実現できます。
弊社では Feature Flag を使った開発・運用を1年以上続けてきました。その過程で、 Feature Flag を用いたコードのメンテナンスコストを下げるための工夫や、当初は想定していなかった方法による Feature Flag の活用を行ってきました。
このセッションでは、弊社の事例を中心に以下のようなテーマでお話しします。
昨今ソフトウェア開発においてモデリングの重要性が解かれています。
ですがそれらは業務知識に結びついた話になりやすいです。
対象への理解がないと自分ごととして捉えづらい(ピンと来ない)でしょう。
そこで理解しやすい図形「三角形」を題材にし、共通認識をもったうえでモデリングの練習をしてみましょう。
大企業から中小企業まで、多くの企業につかわれています。
IoTや社内情報共有、QAシステム、マーケティング管理で使われています。
現在どのように使われているのかを説明します。
みなさんは、外国のチームと開発 "オフショア" を経験したことはあるでしょうか?
オフショア開発では予想できないハプニングや思いがけないアクシデントが多々生じます。
私は現在所属しているチームに参画して以降、PHPでの開発を共に進めているオフショア先のベトナムチームとの窓口を4年担当し、
情報共有不足による失敗や、遠隔メンバとの距離感や温度感の違いによる認識齟齬をはじめとする様々な出来事を経験しました。
また、PHPでの開発を行う場合は、PHPを扱っているからこそ起きる "設計者が意図していない実装" にも意思疎通に障壁がある中で対応する必要があります。
4年担当した今でも、基本的な確認事項などを抜かしてしまうだけで、予想外の事態が発生します。
本セッションでは、そんなオフショアにおけるハプニングやアクシデントを紹介し、それらを回避するノウハウなどを実例を交えてお伝えすることで、齟齬の発生しないコミュニケーションや、相手への意図の伝え方をお伝えできればと思います。
システムで使われるエラーメッセージについて、こんな書き方は良くないというテーマで話します。
プログラム言語には依存しないため、PHPとは直接的な関係は無いです。
~ オフショア先のコード品質向上は難しい ~
オフショアの場合、遠隔地であることだけでなく言語や文化、環境が違うため、お互いに意図を理解できているかや共通の認識を持てているかどうかが怪しくなってしまいます。
特に、コード品質向上のために行ったコードレビューのフィードバックについては、
・正しく内容を理解してもらえているか
・フィードバック内容を次回のコーディングに活かしてもらえるか
など、オフショア先との意思疎通が障壁となって、改善が行えない場合が多くあります。
そこで、私のチームではコードレビュー時に「再利用可能な」情報を提供することで、サービス全体のコード品質向上に取り組んでいます。
このセッションでは、
・どのようにしてオフショア先のコード品質向上に取り組めばいいのか
・オフショア先のモチベーションを保ちながらどのように改善を行っていくのか
などを、PHPのコードを紹介しながらお話しします。
『ウマ娘 プリティーダービー』は、2021年2月24日にサービスを開始しました。
空前の大ヒットと呼ばれ、想定を上回る大きな反響がありましたが、サーバーダウンなく無事にローンチすることができました。
事前に行った負荷試験の約10倍という想定を遥かに上回るアクセスをさばくことができたのは、アプリケーションのボトルネックとなりやすいデータベースに対する処理の最適化を進めたためです。
トランザクションをできるだけ短くする、という考えを念頭におき、N+1クエリの改善、排他制御の方式変更、MySQL 5.7における降順ソートクエリに対応したインデックス作成、といった対策を行いました。
本セッションでは、それらの対策について「『ウマ娘 プリティーダービー』のローンチを支えたサーバーアプリケーションの最適化ノウハウ」と題してお話します。
API Platformは、SymfonyをベースとするPHP製のオープンソースAPIフレームワークです。
Symfonyアプリケーションにアトリビュート(アノテーション)を1行追加するだけで一瞬でREST APIを生成できてしまう優れもので、Symfonyのエコシステムにおいてはすでに決定版と言える存在となっています。
このトークでは、API Platformの導入方法から、Data Provider・カスタムコントローラ・Data Persisterといった重要な基本機能の概要までを、実際に動作するデモをお見せしながら一通りご紹介できればと思います。
皆さんにAPI Platformの概要を知っていただき、少しでも興味を持っていただければ幸いです!
API Platformは、SymfonyをベースとするPHP製のオープンソースAPIフレームワークです。
Symfonyアプリケーションにアトリビュート(アノテーション)を1行追加するだけで一瞬でREST APIとOpenAPIドキュメントを生成できてしまう優れもので、Symfonyのエコシステムにおいてはすでに決定版と言える存在となっています。
しかしながら、ある程度以上複雑なことをしようとすると途端にフレームワークについての深い理解が求められたり、痒いところに手が届かず強引なワークアラウンドが必要になったりするという面もあり、入門と実戦の間には大きな隔たりがあるように思います。
このトークでは、まずはAPI Platformの導入方法から、Data Provider・カスタムコントローラ・Data Persisterといった重要な基本機能の概要までを、実際に動作するデモをお見せしながら丁寧にご紹介し、さらに、よくあるユースケースで必要になるワークアラウンドなど、実戦投入に向けた実装のテクニックをお伝えします。
API Platformの実戦投入、あるいはその検討の一助になれば幸いです!
PHPでPDFファイルを作る、楽しいセッションです!
このトークでは、以下の内容が含まれる予定ですが、時間の都合で一部省略したり変更したり順番を入れ替えたりする可能性もございます。
・PDFのファイルフォーマットの簡単な解説
・ライブラリを使わずに生のPHPで、簡単なPDFファイルを出力してみる話
・可変長の項目(見積書や請求書の明細行が増えていく様子をご想像下さい)と改ページの話
・文字列の折り返し処理の話
・PDFファイルを作成するための主要なライブラリの機能比較
「本当にやりたい・集中したいビジネス・機能要件に集中する」ためのAWS・Stripe活用方法を紹介します。
新しいサービスやアプリを開発する際、「アプリのコア機能以外の機能」を実装するコストが高確率で発生します。
・顧客の決済情報を入力・管理するための「決済システム」
・顧客が支払い履歴や契約情報などを確認できる「マイページ」
・サービスを安定して提供するための「アプリインフラ」
・外部サービスやDB情報などを安全に管理する方法
これらの「必要だけど、作りたいものに直接関係しない機能」をAWSやStripeを使って最小限のコストで実装する方法を紹介します。
◆紹介予定のトピック(変更の可能性あり)
・Stripe Checkoutを用いたリダイレクト式決済ページ
・3〜5行のコードで、請求ダッシュボードを実装する方法
・AWS Secret Manager / Systems Managerを利用したAPIキーやDB情報管理
・AWS Amplify SDKを利用したマイページ実装方法