php

320 件の記事

2026

Rosannaを作った

Rosanna という PHP のライブラリを作った。 React の要素みたいな形で HTML を書くためのもので、H で書くか、PSX という JSX っぽい構文で書く。 名前は TOTO の「Rosanna」から。Relayer(Yes)と同じく曲名から取った。Jeff Porcaro のシャッフルで有名なあの曲…

tehilim に「PHPStan で戻り値を検査できる生 SQL」を入れた

自作の PHP 向け DB ツールキット tehilim に、生 SQL を書いて実行し、その戻り値を PHPStan で検査できる仕組みを入れた。この記事はその設計メモと、途中で踏んだ CI の罠、Copilot レビューとのやり取りの記録。 tehilim とは Prisma 風のスキーマファイルから、型付きのクエ…

PHP の Hello World を strace したら 2335 行出てきた話

echo "Hello"; だけの PHP スクリプトを strace にかけたら、ログが 2335 行になった。 C で同じことをすると 35 行。この 66 倍の差はどこから来るのか、というのが今回の話。 結論から言うと、犯人の 6 割は PHP ではなくバージョン管理ツールの shim で、 さらにその原因は自分…

RelayerというPHPのフレームワークを作った

以前、usePHPというライブラリを作っているという記事を書いた。 その後、仕事が忙しくてなかなか開発を進められなかったが、やっと最近時間ができてusePHPの開発を進めることができた。 usePHPはReactのようなUIに関するライブラリであって、それ単体だけで使うことはちょっと難しい。 一応Router機能がある…

usePHPというライブラリを作っている

ここ数年PHPを使った開発を避けるようにしてきた。 理由は簡単で、Vercel + Nextjs(App Router)が結構強力な存在だったから。 ここ数年PHPを使わない理由 PHPでバックエンド作ってAPI仕様書を用意して、フロントエンド側として独立して開発みたいなの一見良さそうに見えるけど結構ツラミがある AP…

2025

Guzzleで空配列のパラメータをオブジェクトとして送る方法

GuzzleでJSONをリクエストボディにセットしてPOSTリクエストを送る際、空配列のパラメータは空配列としてJSONに変換される。これはPHPの仕様として仕方ない部分がある。 しかし、空のオブジェクト {} として変換したい場合もある。 例えば弊社で作っているPrintgraphのAPIでは、params というリ…

Zendesk APIでプライマリメールアドレスを更新する方法

はじめに Zendeskを利用しているとき、ユーザーのプライマリメールアドレスを変更する必要が出てくることがあります。特にAPIを使って自動化する場合、少し複雑な手順が必要になります。 今回は、Zendesk APIを使ってユーザーのプライマリメールアドレスを更新する方法についてご紹介します。 なぜ複雑なのか? Zen…

2024

Guzzleでbase_uri指定したときに遭遇したトラブル

GuzzleはPHPでよく使われるHTTPクライアントの一つです。 しかし、Guzzleを使う際に base_uri に関連するトラブルに頻繁に遭遇することがあります。この問題を解決するために、base_uriの使い方と、その際に注意すべき点をこの記事でまとめます。 base_uriの使い方 Guzzleのクライアント…

VercelでBEAR Sundayを動かしてみた

Vercelは、Next.jsなどのフロントエンドアプリケーションのproduction環境としてよく使われますが、実はPHPも動かすことができます。 vercel-community/php PHPerとしては、何かPHPのアプリケーションをVercelで動かしたいと思い、今回はBEAR SundayをVercelで…

BedrockとWpRestaを使ってWordPressで独自のAPIを作成する

WordPressをHeadlessCMSとして使いたいと思い、WordPressが用意しているREST APIではなく、独自のエンドポイントを作りたいと考えました。 通常、独自のエンドポイントを設定する場合は rest_api_initのアクションフックを使用します。 WP REST API を使って独自エンドポイン…

2023

nelmio/aliceでcurrentの値をintegerとして扱う方法について

ちょっと古いプロジェクトで、SymfonyのバージョンやPHPのバージョンを上げたいと思いましたがテストがないのでこわいなということで、テストを書き始めました。 nelmio/aliceを使ってテスト用のダミーデータを作っていましたが current まわりでちょっとつまずいてしまいました。 どのような問題が起きたのか…

2022

Herokuのphp.iniについて

Herokuの.user.iniに関するトラブルがあったのでメモしときます。 (以前もはまったようなハマってないような・・・。) HerokuでPHPの設定を変更するときは .user.ini を利用して設定を変更します。 .user.iniはあるのに設定が反映されない 今回起きたトラブルは.user.iniがあるのに…

2021

Docker環境でphp8 + xdebug3を設定する

Docker composeでそれっぽい環境を用意して、xdebug動かしてみたよって話です。 docker-composeの定義 こんな感じです。 version: "3" volumes: db-store: services: db: image: postgres:11 volumes: - db-store:…

Macにphp-amqpをインストールする

BigSurなMacにPHP7.4の環境の構成に php-amqpを入れた見聞録です。 きっかけはsymfony/messengerコンポーネントでキューの処理にRabbitMQを使おうとしたらphp-amqpが必要だと言われたことでした。 librabbitmqを入れる brewで入れます。 $ brew insta…

symfony/mailerでdisable_deliveryをfalseしたい

最近のSymfonyでメール送信をする場合にSwiftmailerではなくsymfony/mailerを使うことが多いかと思います。 テストではメール送信したくないみたいなことも多いハズ。 Swiftmailerでテスト時にメールを送らないようにする 公式ドキュメントに記述がありますが、swiftmailer.yaml…

PHPerKaigi2021にほんの少しだけ参加できた

今年のPHPerKaigiはオンラインなので子育て中でも参加できるぞ!!! なんて最初は気合をいれていたものの、仕事が忙しかったり、引っ越しでバタバタしていたりで全然参加できなかった僕です。 で、お前どの発表聞いてたのよ? 実践ATDD 〜TDDから更に歩みを進めたソフトウェア開発へ〜 そのコード、フレームワークの外で…

SymfonyのPdoSessionHandlerを使う場合の注意点

今日はPdoSessionHandlerでハマったので記録しておく。 何にはまったのか? PdoSessionHandlerを利用する際にunix socketでMySQLに接続しようとしたら、PHP Notice: PDOException: SQLSTATE[HY000] [2002] No such file o…

docker環境でcomposer requireがうまくいかなかった

古いphpの場合はdockerのメモリ割り当てを多めにしたほうがいいかもです。 今回は大人の事情で使っているPHP7.1系でcomposer requireしたら、うまくいかなかったので色々と頑張った結果を記事に残しておきたいと思います。 docker-composeファイル まず、大人の事情でPHP7.1の環境が必要…

Photo: Jaz. Mine / Unsplash LicensePhoto: Se. Tsuchiya / Unsplash LicensePhoto: Sergio / Unsplash LicensePhoto: Robert Bant / Unsplash LicensePhoto: Zhi Xuan Hew / Unsplash License