Important: 本チュートリアルは基本的なPHPとWordPressの理解を前提とします。Pic2Shop PROというアプリを例に説明しますが、他のアプリを使う場合はURL形式を合わせる必要があります。

概要
倉庫作業者がスマートフォンでバーコードをスキャンし、そのコードを基に既存データベースから製品レビューや在庫情報、箱単位の価格を表示する。専用のハードウェアを買わずに済むので初期費用を抑えられます。手順は次の通りです。
- データベースにバーコード値を登録する(例: WordPressのカスタムフィールド)
- スキャナアプリで読み取ったコードを特定のURLへ送るよう設定する
- PHP側でそのコードを受け取り、該当レコードを検索して結果を返す
用意するもの
- スマートフォン(カメラ)
- Pic2Shop PRO(iOS/Android、約$10)などのバーコードスキャンアプリ
- サーバー上のPHPが動く環境と既存データベース(本記事ではWordPressを例に使用)
Note: iCodyはiOS専用で安価だが、クロスプラットフォーム対応を重視してPic2Shopを例にしています。
データの準備
既にPOSや在庫DBにバーコードが入っているならそれを利用できます。今回の例ではボードゲームのレビュー記事にバーコードをカスタムフィールドとして追加しました。バーコードはフォーマットに固執せず、数字列そのものをキーにします。例: 0655132002387(ゲーム名: San Juan)
スキャン後に得られた数値をWordPressの投稿編集画面でカスタムフィールドに貼り付けます。
データ受信側: barcode.php の作成
ルートディレクトリに barcode.php を作ります。まずは受信のテストから。
スキャナアプリ側で Lookup URL を次のように設定します。
http://YOUR_SITE_URL.COM/barcode.php?code=CODE
CODE 部分はスキャナが読み取った値に置き換えられます。$_REQUEST の中身が表示されれば受信成功です。
検索して該当投稿へリダイレクトする基本コード
次に、受け取ったコードを基に投稿を検索し、該当記事へリダイレクトまたは必要情報を出力します。ここではカスタムフィールド名を ‘barcode’ としています。
'post',
'meta_key' => 'barcode',
'meta_value' => $code,
'meta_compare' => '='
));
if (have_posts()) :
while (have_posts()) : the_post();
$url = get_permalink();
// 必要ならここでJSONやカスタムHTMLを返す
echo $code . '\n';
echo $url . '\n';
echo get_post_meta(get_the_ID(), 'barcode', true);
// header('Location: ' . $url); exit; // 自動遷移させたい場合
endwhile;
else :
echo 'No entry for code ' . $code . ' exists yet';
endif;
?>このコードで基本的な検索と結果出力ができます。出力形式は用途に応じてJSONにしたり、モバイル向けの簡易HTMLに整形してください。
自動設定で端末一括導入を簡単にする
各端末に手でURLを入力するのは非現実的です。Pic2Shop PRO には自動設定用のスキームがあります。端末のブラウザで次のリンクにアクセスすると、アプリがインストールされていれば自動で設定を読み込みます。
p2spro://configure?lookup=http%3A//ipadboardgames.org/barcode.php?code=CODEポイントはURIエンコードです。末尾の CODE は読み取り値に置き換わります。自分のサイトのドメインに合わせて書き換えてください。
さらに詳しいデモは以下の動画を参照してください。
http://www.youtube.com/watch?v=FOkGmzBR5Yo
代替アプローチと拡張案
- ネイティブアプリを作る: より柔軟で高速。オフラインキャッシュや認証が必要なら推奨されます。
- 別のスキャナアプリを利用: iCodyなどはiOS向けで安価。URLスキームが異なる点に注意。
- REST API化: barcode.phpをRESTエンドポイントにして、JSONで詳細情報や在庫数を返す設計にする。
- サーバレス関数: 小規模ならAWS LambdaやCloud Functionsで同等の処理を実行可能。
導入時の判断フローチャート
flowchart TD
A[導入目的の確認] --> B{端末数は?}
B -->|少量| C[手動設定で十分]
B -->|多数| D[自動設定スキームを配布]
D --> E{オフライン必要?}
E -->|必要| F[ネイティブアプリまたはローカルDB]
E -->|不要| G[サーバ側PHPで即時検索]
C --> G
G --> H[運用テスト]
H --> I[本番運用]ロール別チェックリスト
管理者
- ドメインとSSLを用意する
- barcode.phpやAPIのアクセス権を確認する
- 自動設定リンクを配布する方法を決める(メール/QR/社内ページ)
開発者
- 入力のサニタイズとエスケープを実装する
- レスポンスをJSON化するかHTMLにするか決定する
- 負荷時のキャッシュ戦略を検討する
倉庫作業者
- アプリの使い方手順を1枚のシートにまとめる
- 読めないバーコードの報告フローを明確にする
受け入れ基準
- スキャナで読み取ったコードが5秒以内に該当レコードへ到達する
- 不存在コードに対しては”No entry for code”メッセージが返る
- 端末別で自動設定リンクによりアプリのLookupが正しく登録される
よくある問題と対処
- 読取精度が低い場合: カメラの解像度や照明を見直す。アプリの設定でバーコードタイプを限定できる場合は限定する。
- 同じバーコードが複数レコードに登録されている: データベース側で一意制約を検討する。
- セキュリティ: 重要情報は認証されたAPIで返す。単純な公開URLは改ざんや情報漏洩のリスクがある。
小規模運用におけるリスクと緩和策
- リスク: 意図しない公開
- 緩和策: IP制限、HTTP認証、トークンベースのアクセス
- リスク: 高頻度アクセスによる負荷
- 緩和策: レスポンスのキャッシュ、CDN、簡易レート制限
まとめ
スマートフォンと低コストなバーコードスキャナアプリを組み合わせれば、専用のポータブルスキャナを買わずに既存データベースへ容易に接続できます。ポイントはデータの一貫性、スキャナの自動設定、そして受け口となるサーバ側の堅牢な実装です。まずは小さな範囲でテスト運用し、運用に合わせてAPI形式や認証を強化してください。
まとめの質問: あなたの業務でこの方法が使えそうですか?導入したい具体的なユースケースがあれば教えてください。