Shin x Blog

PHPをメインにWebシステムを開発してます。Webシステム開発チームの技術サポートも行っています。

「PHP ユーザのための OpenTelemetry 入門」を PHP カンファレンス 2024 で発表しました

2024/12/23 にお馴染み PIO で開催された PHP カンファレンス 2024 にて、「PHP ユーザのための OpenTelemetry 入門」を発表してきました。 発表資料 PHP アプリケーションを OpenTelemetry で計装するための第一歩として、オブザーバリティやテレメトリデー…

PHP アプリケーションのトレース計装ではじめる OpenTelemetry 入門

OpenTelemetry を利用して PHP アプリケーションのテレメトリデータを計装する方法をまとめました。 本エントリのコードは下記で公開しています。 github.com OpenTelemetry とは 用語 PHP アプリケーションのマニュアル計装(手動計装) 構成 OTel Collecto…

OPcache オペコードキャッシュの仕組み

php

本エントリでは、PHP の内部実装(php-src)から OPcache のオペコードキャッシュの仕組みを見ていきます。 OPcache にはいくつかの機能がありますが、ここでは共有メモリへのオペコードキャッシュと preload が対象です。ファイルベースのキャッシュと JIT …

PHP に新しい演算子を実装するチュートリアル

php

PHP に新しい演算子を実装するチュートリアルの紹介です。 www.sitepoint.com 新たなトークン、AST ノード、オペコードを実装するための修正ポイントや、PHP コードからオペコード実行までの実装を(部分的ですが)手軽に知ることできる良い内容でした。 こ…

PHP のオートロードはいつ実行されるか

php

下記エントリを書いたところ、ではいつオートローダによって PHP ファイルが読み込まれるのかという質問をいただきました。 blog.shin1x1.com このエントリでは、オートロードの仕組みを交えて、どのようなケースでオートローダが実行されるかをまとめました…

php-fpm リクエストサイクル

php

php-fpm がリクエストを処理しているサイクルをざっくりとまとめました。 php-fpm ワーカープロセスの生成 リクエストループ 1) リクエスト接続待ち listen_socket の生成 FastCGI リクエスト 2) リクエスト開始処理 実行PHPファイルパスの決定 スーパーグロ…

use 文は PHP ファイルを読み込まない

php

PHP の use 文では、クラス名や関数名、定数、名前空間などのエイリアスを設定できます。

php-fpm(php) をビルドして gdb でデバッグ実行できる Docker Compose 環境を作った

php

php-fpm と php コマンドを php-src からビルドして、gdb コマンドでデバッグ実行できる Docker Compose 環境を作りました。 github.com 利用方法 gdb コマンド php-src の .gdbinit PHP関数によるダンプ さいごに 利用方法 リポジトリを git コマンドでチェ…

Docker Compose で php-fpm が発行するシステムコールを見る

php-fpm の挙動を確認するために発行されるシステムコールを簡単に確認できる Docker Compose 環境を作りました。 github.com システムコール strace-php-fpm strace オプション php-fpm が発行するシステムコール例 ini ファイルの探索 nginx からの FastCG…

「PHPコードの実行モデルを理解する」をPHPカンファレンス香川2024で発表しました

2024/05/11 に玉藻公園内 披雲閣で開催された PHP カンファレンス香川 2024 にて、「PHPコードの実行モデルを理解する」を発表してきました。 発表資料 日頃実行している PHP コードがどのように実行されているかをざっくりとイメージして頂くために、PHP コ…

「制約の力 - 状態を限定する -」を PHP カンファレンス福岡 2023 で発表しました

php

2023/06/24 に福岡ファッションビルで開催された PHP カンファレンス福岡 2023 にて、「制約の力 - 状態を限定する -」を発表してきました。 発表資料 Togetter: https://togetter.com/li/2173469 制約を活用して、状態を想定されたものに限定して、不要な複…

現代のソフトウェア工学を示す「継続的デリバリーのソフトウェア工学」

年末年始に「継続的デリバリーのソフトウェア工学」を読みました。新年を迎えて、気分を一新して開発を始めるのに良い本でした。 ソフトウェア開発に役立つプラクティスを示した本 学びのエキスパート 複雑さ管理のエキスパート 実践的なツール データに基づ…

GitHub Actions で amd64/arm64 両対応の Docker イメージをビルド

PHP 開発環境の Docker イメージとして公開している shin1x1/php-dev イメージの arm64 対応を行いました。従来の amd64 も必要なので、マルチアーキテクチャビルドでイメージを生成するようにしています。 shin1x1/php-dev については下記を参照で。 blog.s…

「ドメインをモデリングして PHP コードに落とし込む」を発表しました / PHP カンファレンス 2021

2021/10/02, 03 にオンラインで開催された PHP カンファレンス 2021 にて「ドメインをモデリングして PHP コードに落とし込む」を発表しました。 発表資料 Sample code: https://github.com/shin1x1/domain-modeling-with-php Togetter: https://togetter.co…

level=0 から始める PHPStan(Larastan) 導入ガイド

PHP にはアプリケーションを実行せずに静的にコード品質をチェックする静的解析ツールがいくつかあります。有名なところでは、PHPStan や Psalm、Phan、PHPMD などがあります。本エントリでは、まだこうした静的解析ツールを導入していないプロジェクト向け…

ソフトウェア設計原則は変更容易性に通ず

色々な原則や方法論はあれど、つまるところいかに変更容易性を確保するかと言う話に帰結するのでは。極論すれは、正しく動いていて変更する必要が無ければどのような作りになっていても構わない。一方、Web アプリケーションを稼働し続ける上で全く変更しな…

Laravel 8 対応版「PHP フレームワーク Laravel Web アプリケーション開発」を執筆しました

2018 年に出版された「PHP フレームワーク Laravel Web アプリケーション開発」の Laravel 8 対応版 を共著で執筆しました。 前回は Laravel 5.5(LTS) がターゲットだったのですが、あれから 3 年近く経過して Laravel 8 が最新バージョンとなったので、こち…

リンクの冒険と Rust

年始から本業やら原稿書きやらとタスクがあり、さらに休日もコロナ禍で家にこもっていたので完全な休日というのがあまり無かった*1。そろそろ落ち着いて来たので、GW は 10 連休にして、やらなければいけないタスクはできるだけ作るらずに過ごすようにした。…

Software Design 2021年5月号に PHP 8 の記事を寄稿しました

Software Design 2021年5月号に PHP 8 の記事を寄稿しました。 Software Design (ソフトウェアデザイン) 2021年5月号 [雑誌]発売日: 2021/04/16メディア: Kindle版 PHP 8 でコーディングはどこまで変わる? 担当したのは、PHP 8 特集の第 1 章「PHP 8 でコー…

2021 年近況

2021 年になりました。 以前は毎年 1 年の振り返りやら新年の抱負などを blog に書いていたのですが、最近はご無沙汰だったので近況報告という形で書いてみます。 仕事 仕事では、現在もクライアントワークとして Web アプリケーション開発に携わっており、…

「PHP 8 で作る JSON パーサ」を発表しました / PHP カンファレンス 2020

2020/12/12 にオンラインで開催された PHP カンファレンス 2020 にて「PHP 8 で作る JSON パーサ」を発表しました。 発表資料 sample code: https://github.com/shin1x1/php8-toy-json-parser 発表で紹介したコードは、phpcon2020 タグになります。 https://…

PHP 8 の新機能を使ってコードを書いた雑感

PHP カンファレンス 2020 の登壇のために PHP 8 で JSON パーサを書いてみました。 https://github.com/shin1x1/php8-toy-json-parser いくつか PHP 8 の新機能を使ったのでその雑感です。 Constructor Property Promotion Named arguments Union Types Matc…

PHP 8 Attribute シンタックスの変遷

php

PHP 8 の新機能の一つ、Attribute の形式が紆余曲折ありながら最終的に #[] となりました。実用上は #[] 形式だけ覚えておけば良いのですが、シンタックスの変遷は興味深いものだったので残しておこうと思います。 Attribute Attribute 仕様の変遷 8.0.0alph…

事業会社の現場 - 「Engineers in VOYAGE ― 事業をエンジニアリングする技術者たち」

@makoga さんから「Engineers in VOYAGE ― 事業をエンジニアリングする技術者たち」を送って頂きました。ありがとうございました。 VOYAGE GROUP にある 5 つの事業会社についてそれぞれの事業を支えるシステムの開発、運用、改善といった内容を在籍するエン…

PHP 8 をオフィシャル Docker イメージで試す

2020 年末にリリース予定 の PHP 8 の オフィシャル Docker イメージ(library/php)が Docker Hub に公開されました。 https://hub.docker.com/_/php?tab=tags&page=1&name=8.0-rc- イメージタグに 8.0-rcや 8.0-rc-fpm、8.0-rc-apacheなど 8.0-rc や rc-の…

Go で containerd を操作するチュートリアル

containerd のサイトに Go で containerd を操作するチュートリアルがあったのでやってみました。 containerd.io チュートリアル このチュートリアルでは、Docker Hub にある redis イメージを取得し、コンテナ(タスク)として実行するまでを実装します。 c…

ベースイメージを共通化して docker-compose up を速くする

docker-compose で複数サービスを起動する際に時間を要するのが、Docker イメージのダウンロードと展開です。この時間を削減するために、ベースイメージを共通化する方法を試してみました。 本エントリでは、開発環境や CI 環境に docker-compose を利用する…

PHP 7.1 - 7.4 の開発用 Docker イメージ shin1x1/php-dev を公開しました

Web アプリケーション開発/CI用途を想定して、必要な拡張を有効にした PHP 7.1 - 7.4 の Docker イメージを DockerHub に公開しました。 hub.docker.com 動機 開発/CI で Docker イメージをよく利用しています。オフィシャルの PHP イメージ(library/php)…

誰のためのソースコード?

「誰のためのデザイン?」の旧版と改訂・増補版を読みました。 以前に旧版を読んだのですが、その記憶もあやふやなくらい前だったので、あらためて読み直し、その面白さゆえに改訂・増補版も購入してこれも読み終えました。 Web システム開発を生業としている…

「Kubernetes で構築する PHP 開発環境」を発表しました

2019/12/01 に東京で行われた PHP Conference Japan 2019 - #phpcon にて、「Kubernetes で構築する PHP 開発環境」を発表してきました。 発表資料 サンプルコード: https://github.com/shin1x1/laravel-k8s-dev-sample Togetter: https://togetter.com/li/1…