PHP に FFI が導入されてから、どういう用途で使えばよいか悩んでいる PHPer も多いかと思います。
PHP FFI を介したモジュールの呼び出し方から、自作 の C/C++ のモジュールの作成から呼び出し方、
そして libusb と呼ばれるモジュールで USB で接続された機器の一覧を取得する方法など、どのように FFI を活用していけばよいのかを本トークで解説します。
重たい処理をキューに任せることで、早めにレスポンスを返すことが可能です。しかし、Laravel 標準のキューサーバーの処理速度にはある一定の限界があります。
弊社では、1 回あたり数十秒かかるような処理をキューに任せているのですが、キューが積まれすぎて処理しきれず破棄されるといった事象が起こっていました。
Laravel には Laravel Horizon と呼ばれる並行並列でキューを処理ができるライブラリがあるのですが Redis のみのサポートで、弊社では Amazon SQS を使用しているため、導入には至りませんでした。そこで、Amazon SQS 向けに Laravel のキューサーバーを自前で実装し直し、処理速度を 4 倍に向上させました。
どのように処理速度を高めるのか、そのテクニックのご紹介と実際のプロダクションへの投入、得られたパフォーマンスなどを本トークでお話します。
メディア露出の調査・分析などがおこえるWebアプリケーションのWebClipping。WebClippingではあらゆるサイトから1日に10万件超の記事をクロールし、MongoDBに保存します。
二度と手に入らないかもしれない記事データを、ただ削除するのはもったいないです。
そこで今後活用できるように記事データをBigQueryへ移動させることになりました。
しかしPHPを使用して大量のデータをmongoDBから引き、そのデータをファイルに書き込んでいく作業は予想以上に難しかったです。
今回は、上記対応で行ったPHP上の工夫を紹介します!
主な内容
・約1.6億レコードのデータをどのようにcsvファイルに書き込むのか?
・PHPのファイル処理に便利なStream Wrapperで圧縮して書き込む
・ファイル処理の速度を向上させるために入出力ストリームへアクセスする
高速化が進み、JITコンパイラも導入されたPHPですが、残念ながら高速なスループットを求められる現場においては他のコンパイル型言語が選ばれることが多いようです。
最近では、ISUCONにPHPで挑戦するものも少なくなりました。しかし、だからこそ!PHPでウェブサーバーを書いて、色んな言語に速度で挑戦してみましょう!
B+木というデータ構造をご存知でしょうか?RDBMSでよく採用されているデータ構造で、ディスクの効率的な利用や、検索を行いやすいなどの特徴があります。しかし、耳学問で聞いてみてもイマイチ特徴がピンと来ないのです。
本トークでは、PHPでB+木のデータ構造を実装して、RDBMSでB+木が採用される理由、インデックスの構造的な仕組み、何故検索が速くなるのか?などなど、データベースの仕組みの根幹を覗いてみましょう。
このトークでお話すること
同期処理がメインのPHPウェブアプリケーション開発者が非同期処理を理解するのは難しいです。PHP自体も非同期プログラミングを積極的に支援する仕組みがありません。しかし、逆に考えればチャンスです。PHPで非同期処理に必要な仕組みから自分で作って見ると、非同期処理を腹の底から理解することが出来ます。
本トークでは、仕事で同期処理ばかり書いているエンジニアが、非同期APIの作成から、非同期処理を行うEventLoopをFiberで作り上げる所までを解説します。非同期処理を仕組みから理解することで、他の言語学習もスムーズになることでしょう。
このトークでお話すること
みなさんはパフォーマンス改善のためにアプリケーションの最適化に取り組んだことがありますでしょうか?
何もデータベース構造を再構築したりと大規模な改修することだけが最適化ではありません。機能実装のついでに関連処理をリファクタリングしてあげるだけでも十分な最適化になります。
このトークでは気づいた時にちょっとリファクタできる程度のデータベースクエリの最適化Tipsを解説いたします。
5分間で可能な限り詰め込んでお届けします!
こんな方におすすめ
みなさんはデータベースクエリのパフォーマンスを意識して実装されていますでしょうか?
実装した当初は軽快に動いていたアプリケーションもサービスの成長とともに少しずつ遅くなっているかもしれません。あるタイミングで最適化プロジェクトを発足させたり、日々のコードレビューで指摘し合う際に役立つヒントをお届けできればと考えています。
このトークではデータベースクエリ最適化のヒントをサンプルコードを交えて解説いたします!
こんな方におすすめ
LaravelのEloquentモデルイベントって何?という人も多いかもしれません。私も知ったのは去年くらいで、それまでは知りませんでした。
このモデルイベントは、モデルでcreate、save、delete,、updateなどの操作をした際のイベントを指しています。そして、これらのイベントを実行する際、合わせてなんらかの処理を行わせたい場合に使用します。
例えば、モデルのデータを新規作成する際にはdateカラムに現在の日付を初期値として入れたい時などに使用します。
他にも実際にどのようなケースでモデルイベントを使用するケースがあるのか、モデルイベントの注意点などを話していきます。
途中から入ったLaravelでの開発プロジェクトで様々なコードのリファクタリングを提案していった話をします。
例えば、外部サービスを使っているロジックはServiceクラスに切り離し、ビジネスロジックはModelに切り離しました。
その他には、データベースtransaction処理の可読性向上。返却するステータスコードの整理。定数などになり得る箇所はEnumに移動。
ルートモデルバインディングの活用など。
このように様々なケースでのリファクタリングの例をお話します。
php-srcのバグ報告ですが、実は2021年末にbugs.php.netからGitHubへと移行しました。
(厳密に言うと、セキュリティが絡む場合には引き続きbugs.php.netを使用します)
そのため、バグ報告の仕方がすこし違ってきています。
GitHubだからいざ報告となるとしやすくなったのでしょうか?
GitHubで報告されたバグはどのように扱われるのでしょうか?
php-srcほどだとバグは見つからないかもしれませんが、見つけてしまったときにどうしたらよいか考えてみませんか。
普段、PHPでウェブアプリケーションを書いていると、I/OモデルなどOSレイヤーに近い知見に触れる機会が少ないです。しかし、PHP はネットワークプログラミングも出来るのです。PHPで手軽に echo サーバーを書いて I/Oモデルをサクッと理解しましょう。
PHP 8.1 から導入された Fiber。PHPマニュアルや、RFC の参考実装だけではなかなか理解することが難しい機能でもあります。本記事では、直感的に理解しやすいPHPのコードを使って、ステップバイステップで非同期処理を利用したPHP製ウェブサーバーを作成します。写経して実際に動作するサンプルを自ら作ってみることで、Fiber が導入された意味を体で覚えてみましょう。
PHPは他の言語にも比べて柔軟性の高く、動的型付け言語でもあるため、なんとなくコードを書いても動いてしまう初心者に優しい言語です。
PSR を代表としたコーディング規約や慣習を基に、より読みやすいコードを書くきっかけを与えたいと思います。
2通り書き方があるけど、どちらがより望ましいのかを提示し、初心者に考えて納得していただこうという企画です。
記事は2つの表記法を並列で記載し、慣習やコーディング規約を基に望ましい表記法を伝える記事になります。例として、下記のような違いを提示し解説する予定です。
● else if と elseif
● True と true
● foreach と array_map
● 三項演算子 と エルビス演算子 など
この記事の最終目的は、読みやすいコードを書くことを考えられるような、脱初心者を目指すところとなります。
「完全に理解した」から「なにもわからない」へのステップアップ目指します。
https://bit.ly/3JldwsX
Laravelは初学者の敷居がとてつもなく低いフレームワークです。豊富なスターターキットや書き方の自由度の高さ故、小規模のアプリケーションなら未経験からものの数時間で作れてしまうことでしょう。
一方、いざ案件で本格的に使おうとした途端に戸惑う方も多いように感じます。PHP熟練者の方でもフレームワークのベストプラクティスが解らないまま「愚直なphp」でつい苦労してしまうことが多いのではないでしょうか。
これら解決方法はLaravelの公式ドキュメントには紹介されていません。
(最初のとっつきやすさに大きく比重を置いて書かれているためです!)
「完全に理解した」後、Laravelの持つ豊富な機能を深く知るにはどのような手順を経ていくのか、それをご紹介していきます。
はじめてPHPUnitを使ってみたいという方,依存性注入という言葉を初めて聞いた・どこかで聞いたことがあるという方に対して,初心者が初心者なりに頑張ってテストを書いてみたり,依存性注入について理解してみようと試行錯誤してみた過程とその中で思ったこと,学んだことについて語りたいと思います.
私はまだ学生という身分ではございますので,職場で使える小技などといった内容にはなり得ませんが,初めてPHPを使ってみた方がテストを書くためのPHPUnitというツール,そして依存性注入というものについて知ってほしいという気持ちで発表を行いたいと思います.
技術力を高めるためには、場数が必要ではないでしょうか。それは、どれだけ思考し、手を動かし、また思考…の繰り返しだと思います。
「どのように設計するか」「どのように実装するか」だけを考えて試行錯誤したいものです。
しかしながら、思考を邪魔するものがいます。そうです、我々日本人に立ちはだかる大きな壁、英語とそれによる名付けの問題です。
複雑な要件を設計・実装するときに、ふと思い至り、英語の壁を取り払ってみたところ、とても快適な開発体験を得られることができました。
その経験をもとに、日本語をそのままコードに使うことでどんなメリットがあるか、どのような流れで開発したら良いかを共有したいと思います。
※"ぜったい英語禁止"にする話ではないです
皆さんはどのようなスタイルでLaravelアプリケーションを開発されておりますでしょうか?今回はディレクトリを業務関心に応じて区切り、その中にクラスを配置して開発していくスタイルをお伝えしていきます。これを行うことで、疎結合で変更に強いアプリケーション開発がしやすくなります。フレームワークに対しても疎結合な実装を目指していくことで、Laravelのバージョンアップにも追従しやすくなるかと思います。
昨今PHPでHTMLをレンダリングすることは少なくなり、SPAとrest APIを使ったクラサバ構成のwebアプリケーションが増えてきました。
そこで問題になってくるのは、双方のインターフェースを担保するのをどうするかというところです。
Rest APIのIDLとしてOpen API specificationを用い、IFを担保するケースは多いと思いますが、どうしても運用メンテに工数がかかってしまいます。
今回Laravelを用い、1行コードを追加するだけでOASのファイルを吐き出せるようなライブラリを作ったのでその紹介をさせてもらいます。
Nuxtを使いクライアントから呼び出す方法、ないしはmswを使ってサーバーレスにAPIモックを作る方法も紹介させていただきます。
Larevelで開発を行なっているとサービスが成長するにつれてテストが肥大化してどんどんテストが遅くなってしまうという事が発生する事があると思います(弊社では発生しました & しています)。
そこで Github Actions を使って Laravel のテストを行なう際に出来るだけ早くテストを回すために行なっている事とセットアップ方法をご紹介させて頂きます。