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

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

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

Amazonで見る

書籍の概要

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

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

続きを読む…»

86 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 を埋め込む方法 を扱います。

続きを読む…»

60 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つのソート済みファイルを比較する」ものです。
オプションを細かく見ていきましょう。

続きを読む…»

521 views

fnmからVoltaへ乗り換える理由と手順

Node.jsのバージョン管理ツールとして人気のある「fnm(Fast Node Manager)」から「Volta」への乗り換えを検討している方に向けて、両者の違いと移行手順、そしてVoltaを選ぶべきケースについて解説します。

fnmとVoltaの比較

項目 fnm Volta
開発言語 Rust Rust
速度 非常に高速 高速(shim機構でわずかに遅い場合あり)
Node.jsバージョン管理 あり あり
package.json 連動(volta フィールド) なし あり(pin で自動記録・使用)
package.json の engines 読み取り なし あり(CIや警告用途)
.node-version / .nvmrc 対応 あり(自動切り替え対応) あり(読み取り対応。ただし自動 pin ではない)
グローバルツールのバージョン管理 なし(npm -g をそのまま使う) あり(volta install で固定・再現可能)
再現性のあるCI環境構築 やや工夫が必要 容易。package.json の volta フィールドを使用
シェル統合のしやすさ 手動設定あり(シェルrcへの追加必要) 自動設定(インストーラが対応)

Voltaを選ぶべきケース

以下のようなケースでは、Voltaへの乗り換えが強く推奨されます。

  • CI環境でpre-commitやlint-stagedなどを実行している
  • Node.jsやnpmのバージョンをpackage.jsonで明示している
  • チーム開発でツールのバージョン差異によるトラブルを防ぎたい
  • グローバルにインストールしたツールをプロジェクトごとに固定したい

続きを読む…»

710 views

XAMPP for Windows における SSL 有効化手順

ローカル開発環境の XAMPP に HTTPS 通信を導入するための、Windows 10/XAMPP 8.2.12 環境での手順を整理して解説します。

事前に準備するもの

  • Windows 10 環境
  • XAMPP 8.2.12
  • Git(Git Bash を利用することを想定しています)
    Git 公式サイト

PHP の OpenSSL 拡張を有効化する

PHP の設定ファイル C:\xampp\php\php.ini を開き、以下の行を見つけてコメントアウトを外します。

extension=php_openssl.dll

これにより、PHP 経由で SSL 証明書に対応できるようになります。

Apache の SSL 用 Virtual Host を設定する

Apache 設定ファイル C:\xampp\apache\conf\extra\httpd-ssl.conf を編集して、HTTPS 通信を受け入れる仮想ホストを追加します。

<VirtualHost *:443>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>
  • ServerName は用途に応じて変更可能です。
  • DocumentRoot のパスも実際のプロジェクトディレクトリに合わせて調整してください。

動作確認

ここまでの段階で、https://localhost にアクセスすれば、警告は表示されますが強制的にページを表示させることができます。
しかしまだ証明書を作成していないので、セキュリティ保護なしの状態でページが表示されます。

続きを読む…»

913 views