qr-image、qr.js、qrcode はすべて QR コードを生成するための JavaScript ライブラリですが、動作環境や出力形式、API の設計思想が異なります。qrcode は Node.js とブラウザの両方で動作し、Canvas や SVG、ターミナルなど多様な出力をサポートする万能な選択肢です。qr-image は主に Node.js 環境で画像バッファやストリームを生成することに特化しており、サーバーサイドでの処理に適しています。qr.js はブラウザ環境での Canvas 描画に焦点を当てていますが、メンテナンス頻度は他の 2 つに比べて低く、レガシーなプロジェクトで見られることが多いです。
qr-image、qr.js、qrcode はすべて QR コードを生成するための JavaScript ライブラリですが、それぞれ得意とする環境と出力形式が異なります。開発現場では、サーバー側で画像ファイルを生成したいのか、ブラウザ上で即時描画したいのかによって最適な選択が変わります。ここでは、実際のコード例を交えながら、それぞれの違いと使いどころを解説します。
qrcode は Node.js とブラウザの両方で動作します。
// qrcode: Node.js とブラウザ両方で動作
const QRCode = require('qrcode');
// Node.js
QRCode.toFile('./qr.png', 'text');
// Browser
QRCode.toCanvas(element, 'text');
qr-image は主に Node.js 環境向けです。
// qr-image: 主に Node.js 環境
const qr = require('qr-image');
// Server-side only
const png = qr.imageSync('text');
qr.js は主にブラウザ環境向けです。
// qr.js: 主にブラウザ環境
const QRCode = require('qr.js');
// Browser focused
new QRCode(element, 'text');
qrcode は多様な出力形式をサポートします。
// qrcode: 多様な出力形式
const svg = await QRCode.toString('text', { type: 'svg' });
const dataURL = await QRCode.toDataURL('text');
qr-image は画像バッファやストリームを出力します。
// qr-image: 画像バッファ出力
const pngBuffer = qr.imageSync('text', { type: 'png' });
const svgStream = qr.image('text', { type: 'svg' });
qr.js は Canvas 要素への描画が中心です。
// qr.js: Canvas 描画中心
const qrcode = new QRCode(element, {
text: 'text',
width: 128,
height: 128
});
qrcode は Promise ベースの非同期 API を提供します。
async/await で扱いやすく、現代の JavaScript コードに馴染みます。// qrcode: Promise ベース
try {
const url = await QRCode.toDataURL('text');
console.log(url);
} catch (err) {
console.error(err);
}
qr-image は同期とストリームの両方に対応します。
imageSync で即時取得、image でストリーム処理が可能です。// qr-image: 同期とストリーム
const buffer = qr.imageSync('text'); // 同期
const stream = qr.image('text'); // ストリーム
stream.pipe(fs.createWriteStream('qr.png'));
qr.js はコンストラクタベースの同期処理です。
// qr.js: 同期コンストラクタ
const qrcode = new QRCode(element, 'text');
// 描画は即時実行される
qrcode は活発にメンテナンスされています。
// qrcode: 活発なメンテナンス
// 最新の Node.js バージョンでも動作確認が取れています
npm install qrcode
qr-image は安定していますが更新頻度は低めです。
// qr-image: 安定した動作
// 長期間変更されていない安定した API
npm install qr-image
qr.js はメンテナンス頻度が低く、レガシー扱いされつつあります。
qrcode の使用を強く推奨します。// qr.js: レガシー扱い
// 新規プロジェクトでの使用は避けるべきです
npm install qr.js
| 特徴 | qrcode | qr-image | qr.js |
|---|---|---|---|
| 環境 | 🌐 Node + Browser | 🖥️ Node.js | 🌐 Browser |
| 出力 | 🎨 Canvas, SVG, File | 📄 Buffer, Stream | 🖼️ Canvas |
| API | ⏳ Promise/Async | ⚡ Sync/Stream | 🏗️ Constructor |
| 保守 | ✅ 活発 | ⭕ 安定 | ⚠️ レガシー |
qrcode は現代の Web 開発における標準的な選択肢です 📦。Node.js とブラウザの両方で動作し、出力形式も豊富いため、ほとんどのプロジェクトで最初に検討すべきライブラリです。特に、将来の拡張性やメンテナンス性を重視する場合はこれ一択です。
qr-image はサーバー側で画像ファイルだけを生成したい場合に有効です 🖥️。依存関係を最小限に抑えたい場合や、既存の Node.js スクリプトで単純な QR 生成が必要な場合に適しています。
qr.js は新規プロジェクトでは使用を避けるべきです ⚠️。既存のレガシーシステムで既に導入されており、置き換えコストが高い場合のみ検討します。それ以外のケースでは、より現代的な qrcode への移行を推奨します。
最終的には、「サーバー側だけなら qr-image、両方対応なら qrcode」 と覚えておくと便利です。qr.js は特殊な事情がない限り、選択肢から外して問題ありません。
Node.js サーバー環境で、PNG や SVG などの画像バイナリデータだけを素早く生成したい場合に選択します。ブラウザでの描画機能は不要で、サーバー側でファイルを保存したりレスポンスとして返したりする用途に最適です。依存関係が少なく、単純な生成タスクに特化しています。
既存のレガシーなブラウザプロジェクトで既に導入されており、変更コストが高い場合にのみ検討します。新しいプロジェクトでは、よりメンテナンスが活発で機能豊富な qrcode の使用を推奨します。ブラウザ専用の単純な Canvas 描画が必要な古い環境でのみ価値があります。
Node.js とブラウザの両方で動作する универсаль наなライブラリが必要な場合に選択します。Canvas、SVG、DataURL、ターミナル出力など多様な形式をサポートしており、将来の拡張性も考慮できます。メンテナンスが活発で、現代の Web 開発スタンダードに合致しています。
This is yet another QR Code generator.
png, svg, eps and pdf formats;npm install qr-image
Example:
var qr = require('qr-image');
var qr_svg = qr.image('I love QR!', { type: 'svg' });
qr_svg.pipe(require('fs').createWriteStream('i_love_qr.svg'));
var svg_string = qr.imageSync('I love QR!', { type: 'svg' });
qr = require('qr-image')
qr.image(text, [ec_level | options]) — Readable stream with image data;qr.imageSync(text, [ec_level | options]) — string with image data. (Buffer for png);qr.svgObject(text, [ec_level | options]) — object with SVG path and size;qr.matrix(text, [ec_level]) — 2D array.text — text to encode;ec_level — error correction level. One of L, M, Q, H. Default M.options — image options object:
ec_level — default M.type — image type. Possible values png (default), svg, pdf and eps.size (png and svg only) — size of one module in pixels. Default 5 for png and undefined for svg.margin — white space around QR image in modules. Default 4 for png and 1 for others.customize (only png) — function to customize qr bitmap before encoding to PNG.parse_url (experimental, default false) — try to optimize QR-code for URLs.zlib.deflateSync instead of pako.