普段、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
● 三項演算子 と エルビス演算子 など
この記事の最終目的は、読みやすいコードを書くことを考えられるような、脱初心者を目指すところとなります。
技術力を高めるためには、場数が必要ではないでしょうか。それは、どれだけ思考し、手を動かし、また思考…の繰り返しだと思います。
「どのように設計するか」「どのように実装するか」だけを考えて試行錯誤したいものです。
しかしながら、思考を邪魔するものがいます。そうです、我々日本人に立ちはだかる大きな壁、英語とそれによる名付けの問題です。
複雑な要件を設計・実装するときに、ふと思い至り、英語の壁を取り払ってみたところ、とても快適な開発体験を得られることができました。
その経験をもとに、日本語をそのままコードに使うことでどんなメリットがあるか、どのような流れで開発したら良いかを共有したいと思います。
※"ぜったい英語禁止"にする話ではないです
Larevelで開発を行なっているとサービスが成長するにつれてテストが肥大化してどんどんテストが遅くなってしまうという事が発生する事があると思います(弊社では発生しました & しています)。
そこで Github Actions を使って Laravel のテストを行なう際に出来るだけ早くテストを回すために行なっている事とセットアップ方法をご紹介させて頂きます。
Webサイトをネイティブアプリのように扱うことができる技術「PWA」を目にする機会が増えて来ました。
ですが、機能実装にはJavaScriptでServiceWorkerを書かなければならず「PWAに割く暇なんてねぇ!」と感じるPHPerもいらっしゃるでしょう。
そんな方のために、JavaScriptを一切書かずにオフライン対応も含めたPWA・TWAの実装方法を超簡潔に御紹介致します。
※TWAとはPWAアプリケーションをPlayストアに配信できる技術のことです
型安全なコードを書いていますか? 私は変なプログラミングが好きなのですが、函数プログラミング、その中でもしばしば静的型付きな函数型とセットで語られがちな「モナド」という概念について長年にわたって苦手意識を持っていました。JavaScript、Ruby、Lisp、PHPといくつかの言語に触れてきて一度F#を学んだあと静的型とは仲良くなれなくても動的言語で楽しくやってきましたが、世は大静的検査時代、動的言語においても型の概念からは逃れられなくなってきました。本稿においては「モナド」という、やや哲学的な香りを持つキーワードを切り口に普段のPHPでは使わないかもしれない、でもちょっと発展的に知っておくと楽しめるかもしれない(そして私がいままで仲良くなれなかった…!)概念について和解を経て紹介します。
PHPを使ってるとよく遭遇する Fatal error / Parse error / Warning / Notice 理解していますか?
これらのエラー文を理解することで、すぐにエラーの原因に気付き適切に対象できる様になります!
またそれらを理解した上でのエラーハンドリングを学びましょう。
Webアプリケーションを長年運用していると、至る所でパフォーマンスの問題が出てきますよね
リリース当初は問題なく動いていたものが、突然動かなくなるなどの経験をした方も少なくないのではないでしょうか
私たちの運用しているLaravelアプリケーションも例外ではなく、稀にデータベースが悲鳴をあげたり、特定条件でアプリのレスポンスが遅くなったりという状況に遭遇する機会が増えてきました
そんな問題の特定・解消のために導入したのがDatadog APMでした
発行されているSQLの数や処理時間、外部APIのコールやphpの処理時間などのデータが全て見える化されており、非常にパフォーマンス改善しやすい環境を作ることができました
本セッションではそんなDatadogの導入までにやったことやDatadogを活用してどうやって改善を繰り返しているかなど、事例を交えてご紹介したいと思います
Notionは、タスク・Wiki・データベースなどを統合するマークダウンサポートを備えた次世代ドキュメントアプリケーションです。
「戦国炎舞 -KIZNA-」、「この素晴らしい世界に祝福を!ファンタスティックデイズ」、「呪術廻戦 ファントムパレード」などのスマホゲームを開発・運営している株式会社サムザップでは、情報共有のツールとしてNotionを活用しています。
こちらのセッションでは「Notionを活用することにした経緯」、「別のツールからNotionに移行するまでのあれこれ」、「Notionをどのように活用しているのか」などについてお話しします。
また、「Notionをどのように活用しているのか」では、NotionのAPIをPHPで活用している部分についてもご紹介します。
毎日流れてくるエラーに皆さんはどう向き合ってますか?
エラーを出さない事が一番ですが、完全に塞ぐ事は難しいと考えます。
サービス運用の中で本番環境から発生するエラー(サーバー・クライアントサイド・サードパーティ起因のエラー)への監視体制と、
エラー・バグ防御のためチームで行っているテストコード文化づくりの話をします。
【トーク対象】
WordPress でサイト作って約7年、「WordPress 完全に理解した」の先に待っていた失敗事例を踏まえつつ WordPress が人類に提供しているあれこれを俯瞰します。
最後に、近年の CMS に求められている機能とからめて WordPress が愛される理由について持論を展開してみます。
PHP はバージョンを追う毎に型宣言、例外、表明、列挙型などの機能が大幅に強化され、堅牢なコードを書くための機能が充実してきました。それらの機能はどう使うと効果的なのでしょうか。
本講演では PHP 8.1 をベースにして、誤りを想定してチェックするのではなく、そもそも誤りにくい設計とはどのようなものか、つまり「予防」の観点を軸足に、堅牢なコードを導くための様々な設計のヒントをご紹介します。
Suica や PASMO をデバイスにタッチして値を取得する、そんな夢を PHP で叶えたいと思っていた PHPer も多いかと思います。
PHP7.4 から PHP FFI と呼ばれるものが導入され、その夢も今まで以上に叶えやすくなりました。Suica や PASMO は FeliCa と呼ばれる NFC の規格の 1 つです。実装方法は多岐に渡りますが、概ね libnfc と呼ばれるライブラリや libusb を使う方法などがあります。しかし、今までの PHP ではこのライブラリを呼び出すことさえ叶いませんでした。そこで、本セッションでは PHP7.4 から導入された PHP FFI を用いてどのように PHP で NFC リーダーを実装するのか、そして実際のデモを交えてトークできればと思います。
同期処理がメインのPHPウェブアプリケーション開発者が非同期処理を理解するのは難しいです。PHP自体も非同期プログラミングを積極的に支援する仕組みがありません。しかし、逆に考えればチャンスです。PHPで非同期処理に必要な仕組みから自分で作って見ると、非同期処理を腹の底から理解することが出来ます。
本トークでは、仕事で同期処理ばかり書いているエンジニアが、非同期APIの作成から、非同期処理を行うEventLoopをFiberで作り上げる所までを解説します。非同期処理を仕組みから理解することで、他の言語学習もスムーズになることでしょう。
このトークでお話すること
メディア露出の調査・分析などがおこえるWebアプリケーションのWebClipping。WebClippingではあらゆるサイトから1日に10万件超の記事をクロールし、MongoDBに保存します。
二度と手に入らないかもしれない記事データを、ただ削除するのはもったいないです。
そこで今後活用できるように記事データをBigQueryへ移動させることになりました。
しかしPHPを使用して大量のデータをmongoDBから引き、そのデータをファイルに書き込んでいく作業は予想以上に難しかったです。
今回は、上記対応で行ったPHP上の工夫を紹介します!
主な内容
・約1.6億レコードのデータをどのようにcsvファイルに書き込むのか?
・PHPのファイル処理に便利なStream Wrapperで圧縮して書き込む
・ファイル処理の速度を向上させるために入出力ストリームへアクセスする
ペライチというサービスのCakePHP2をCakePHP4にジャンプアップさせた話です。ソースコードの量が多すぎたため一括移行は難しく、2つのバージョンを並行稼動させながら段階的に移行していきました。大規模サービスにおいてサービスを停止させずにバージョンアップするためにどんな工夫をしたかについてお話します。
昨今宣言的UIの台頭とともに、GraphQLが注目を浴びています。
特にReactではApollo Clientの存在もあり大変便利です。
ではPHPではGraphQLのエコシステムはどうなっているのでしょうか?
今回のトークではGraphQLを活用するメリット・デメリットから、PHPでGraphQLを扱う是非、PHPでGraphQLを扱う場合のライブラリやエコシステムについて解説をします。
サイボウズの大企業向けグループウェアのGaroon(ガルーン)は、PHPで開発されている20年目の製品です。ガルーン開発チームは日本で40名、ベトナムで50名の計90名ほどのチームになっています。また、コロナ禍でフルリモートでの活動がこの2年ほど継続してきました。
フルリモートになっても仕事はまわっており、継続的にリリースはしていましたが、一方でお互いの考えていることや感じている問題意識が見えづらくなり、モヤモヤを抱えているメンバーが増えていました。
このセッションでは、そういう状況で私がチーム外からジョインし、聴き役に徹しながら見える化することで状況を改善していった取り組みを紹介します。同じように大きなチームやリモートワークで難しさを感じている人に、難しさの原因への気づきや取り組みへのヒントがあれば幸いです。