はじめに
名刺や資料作成、イベントの案内などで「URLをパッとQRコードに変換してダウンロードしたい」と思ったことはありませんか?
「わざわざ専用のソフトやアプリをインストールするほどでもない」
「怪しい広告だらけの無料サイトは使いたくない」
といった小さなストレスを解消するため、ブラウザ上でURLを入力するだけで高精度なQRコードを即座に作成・PNG保存できる軽量ツールを開発しました。
本記事では、開発したツールの概要と、サーバーに負荷をかけず安定動作させるために工夫したPHPおよびAPI活用の実装ポイントについて紹介します。
作ったツール
URL QRコード生成ツール
👉 https://ss-infra.net/qrcode/
主な機能
- 完全無料・会員登録不要: ブラウザから即時利用可能
- ワンクリックPNGダウンロード: 生成されたQRコードをその場で保存
- シンプル&レスポンシブUI: スマホ・PCどちらからでも直感的に操作可能
開発の背景とアプローチ
第1弾として公開した「CSV文字コード変換ツール」に続き、日々の業務や日常のちょっとした「めんどくさい」を解決するWebユーティリティの第2弾として企画しました。
今回のツールでは、PHPの複雑な画像処理ライブラリ(GD拡張など)に依存せず、外部APIを安全かつスマートに利用して安定動作させることを第一に設計しています。
技術的なポイント:PHP実装の工夫
実際のPHPコードを交えて、実装時のポイントを3つ紹介します。
1. 外部APIを活用した軽量かつ確実な生成設計
PHPで自前画像を描画する代わりに、信頼性の高い外部のQRコード生成API(api.qrserver.com)を file_get_contents() で呼び出す設計にしています。これにより、環境依存による描画エラーなどを防ぎ、高速かつ綺麗にコードを生成できます。
// 外部APIを利用して外部依存なし・GD拡張なしでも安定動作させる手法
$api_url = 'https://api.qrserver.com/v1/create-qr-code/?size=250x250&data=' . urlencode($input_url);
$image_binary = @file_get_contents($api_url);
if ($image_binary === false) {
$_SESSION['error_message'] = 'QRコードの生成に失敗しました。';
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
}
$_SESSION['input_url'] = $input_url;
$_SESSION['qr_code_data_uri'] = 'data:image/png;base64,' . base64_encode($image_binary);
2. PRGパターンによる二重送信防止
フォーム送信後にページをそのままレンダリングするのではなく、セッションにデータを保持したうえで header('Location: ...') によるリダイレクト(PRGパターン)を挟んでいます。これにより、ブラウザの再読み込みによるフォームの二重送信を防いでいます。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input_url = trim($_POST['url'] ?? '');
if (empty($input_url) || !filter_var($input_url, FILTER_VALIDATE_URL)) {
$_SESSION['error_message'] = '有効なURLを入力してください。';
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
}
// (生成処理...)
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
}
3. セッションデータの即時破棄
ユーザーが入力したURLや生成されたBase64形式の画像データは、セッションに一時保持した直後に自動でクリアされる仕組みにしています。サーバー上に不要なデータを残さないことで、セキュリティ面とプライバシーへの配慮を行っています。
$error_message = $_SESSION['error_message'] ?? '';
$input_url = $_SESSION['input_url'] ?? '';
$qr_code_data_uri = $_SESSION['qr_code_data_uri'] ?? '';
// 取得した後は即座にセッションを解放
unset($_SESSION['error_message'], $_SESSION['input_url'], $_SESSION['qr_code_data_uri']);
おわりに
TailwindCSSを活用したクリーンなUI設計と、ミニマムで安全なPHPの処理を組み合わせることで、実用的なユーティリティをサクッと構築することができました。
名刺や資料作成などでサクッとQRコードを作りたいときは、ぜひ試してみてください!
ご意見・改善のご要望などがあれば、ぜひQiitaのコメント欄やフィードバックでお知らせいただけると嬉しいです!