カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

『PHP実践レシピ集』を出版しました — 実務で役立つコード集

このたび、私の著書 『PHP実践レシピ集』 を Amazon Kindle にて発売しました。

Amazonで見る

書籍の概要

本書は、PHP 8.1以降を前提とした、現場で役立つ実践的なコードレシピ集です。
日々の開発で直面しがちな課題をテーマごとに整理し、
サンプルコードとともに具体的な解決方法をまとめました。

単なるリファレンスではなく、「現場でそのまま使える実装例」に重点を置いて構成しています。
サンプルはコピーしてすぐ試せる形になっているので、
開発中の手元リファレンスとしても、学習書としても活用できます。

続きを読む…»

234 views

WordPress更新で502エラー?WP-CLIで解決

さくらのレンタルサーバー(例:さくらインターネット)などの共有サーバーでWordPressを運用していると、

  • 「502 Bad Gateway」
  • 「504 Gateway Timeout」

といったエラーで管理画面から更新できないことがあります。

特にプラグインが多いサイトや、やや重めのテーマを使っている場合に発生しやすいです。

この記事では、ブラウザ更新で失敗する場合の確実な解決策として、WP-CLIを使った更新方法を解説します。

なぜブラウザ更新でエラーが出るのか?

WordPressの管理画面から更新を行うと、内部では以下の処理が一度に実行されます。

  • ZIPファイルのダウンロード
  • 展開処理
  • 数百〜数千ファイルの上書き
  • データベース更新

共有サーバーでは以下の制限があります。

  • PHPの実行時間制限
  • メモリ制限
  • 同時実行プロセス制限
  • WAF(Web Application Firewall)

これらに引っかかると、処理途中でPHPが停止し、結果として「502」「504」エラーになります。

続きを読む…»

31 views

MySQLにおける絞り込み条件はJOIN句かWHERE句か?

MySQLで複数テーブルを結合する際、絞り込み条件をJOIN句(ON句)に書くべきか、WHERE句に書くべきかで迷った経験はないでしょうか。

本記事では、INNER JOIN と OUTER JOIN(LEFT JOIN)それぞれの場合について、意味の違い・結果の違い・設計上の考え方を整理し、実務で迷わないための指針をまとめます。

前提となるサンプル構造

以下のようなテーブルを例に説明します。

users
- id
- name

orders
- id
- user_id
- status

「ユーザーと注文を結合し、特定の条件で絞り込む」という典型的なケースです。

INNER JOIN の場合

JOIN句に条件を書く場合
SELECT *
FROM users u
INNER JOIN orders o
  ON u.id = o.user_id
 AND o.status = 'paid';
WHERE句に条件を書く場合
SELECT *
FROM users u
INNER JOIN orders o
  ON u.id = o.user_id
WHERE o.status = 'paid';
結果は同じ?

はい、INNER JOINの場合は結果は同じになります。

INNER JOINは「結合条件を満たさない行を捨てる」ため、ON句に書いてもWHERE句に書いても、論理的な結果は一致します。

では、どちらが良いのか?
  • 結合条件 → ON句
  • 検索・絞り込み条件 → WHERE句

という役割分担を意識すると、SQLの可読性が向上します。

続きを読む…»

201 views

TCPDFで日本語フォントを使う方法

PHPでPDFを生成するライブラリとして有名な TCPDF。
便利な反面「日本語フォントが文字化けする…」「どうやって日本語フォントを追加するの?」と悩む人も多いのではないでしょうか。

この記事では、Noto Sans JP を例に TCPDF へ日本語フォントを追加する手順を、初めての方でも迷わないように詳しく解説します。

TCPDF が日本語フォントをそのまま扱えない理由

TCPDFはデフォルトで日本語をサポートしておらず、Unicodeフォントを 「CIDフォント or TTF埋め込み」 として自分で追加する必要があります。

つまり、

  • 日本語フォント(.ttf)をTCPDF専用形式に変換
  • PHPから使用できるようにフォント情報を登録
  • 生成した PDF にフォントをセット

という3ステップが必要になります。

事前準備:TCPDFにフォントを追加する方法は2つ

TCPDFの日本語対応には以下の2通りの方法があります。

方法 特徴
① CIDフォント(KozMinなど)を使う 簡単。ファイルサイズが小さい。見た目が古め。
② 独自フォント(TTF)を埋め込む ← この記事で解説 フリーフォント利用可。自由度高い。PDFサイズは大きくなる。

今回はニーズが多い Noto Sans JP の TTF を埋め込む方法 を扱います。

続きを読む…»

167 views

Git で「2つのブランチで同じファイルが修正されているか」を調べる方法

開発を進めていると、複数のブランチで同じファイルを修正してしまい、マージのときに競合が発生することがあります。
「ブランチAとブランチBで、修正ファイルが被っているかどうかを事前に知りたい」──そんなときに役立つ方法を紹介します。

変更ファイル一覧を出力する

まず、それぞれのブランチで どのファイルが変更されたか を一覧にします。

# branch-a の変更ファイル一覧を保存
git diff --name-only main..branch-a > /tmp/a.txt

# branch-b の変更ファイル一覧を保存
git diff --name-only main..branch-b > /tmp/b.txt
  • git diff --name-only main..branch-a
    「main と branch-a の差分に含まれるファイル名」だけを出力します。

共通ファイルを抽出する

次に、2つの一覧を突き合わせて「両方に出てくるファイル」だけを取り出します。

comm -12 <(sort /tmp/a.txt) <(sort /tmp/b.txt)

ここで登場する comm コマンドは「2つのソート済みファイルを比較する」ものです。
オプションを細かく見ていきましょう。

続きを読む…»

762 views