🌀
Goで作るQRコード入門 ― 簡単に画像やWebアプリに組み込む方法
はじめに
QRコードはURLやテキストをエンコードして、スマートフォンなどで簡単に読み取れる仕組みです。
Golang には便利なライブラリがあり、数行のコードで画像ファイルとして出力できます。
この記事では、次の流れで QR コードを生成する方法を解説します。
- 環境準備
- シンプルなQRコードを作る
- サイズやエラーレベルを調整する
- ファイルに保存する
1. 環境準備
まずはライブラリをインストールします。
QRコード生成では skip2/go-qrcode がシンプルです。
go mod init qrdemo
go get github.com/skip2/go-qrcode
これで準備完了です。
2. シンプルなQRコードを作る
最も簡単な例です。文字列 "https://golang.org" をQRコードにします。
package main
import (
"log"
"github.com/skip2/go-qrcode"
)
func main() {
err := qrcode.WriteFile("https://golang.org", qrcode.Medium, 256, "qrcode.png")
if err != nil {
log.Fatal(err)
}
}
実行すると qrcode.png が生成されます。
256ピクセル四方のQRコード画像を確認できるはずです。
3. サイズやエラーレベルを調整する
go-qrcode では 誤り訂正レベル を指定できます。
(QRコードは一部が欠けても読めるように設計されています)
- Low (7% 復元)
- Medium (15% 復元)
- High (30% 復元)
また、サイズも任意のピクセル数を指定できます。
package main
import (
"log"
"github.com/skip2/go-qrcode"
)
func main() {
// 高精度エラーレベル、512pxの大きなQRコード
err := qrcode.WriteFile("Hello, QR!", qrcode.High, 512, "hello.png")
if err != nil {
log.Fatal(err)
}
}
4. ファイルに保存する
生成したQRコードをPNGファイルに保存する方法はすでに紹介しましたが、
Encode を使うと []byte として得られるため、HTTPサーバー経由で返すなど応用も可能です。
package main
import (
"fmt"
"net/http"
"github.com/skip2/go-qrcode"
)
func handler(w http.ResponseWriter, r *http.Request) {
png, _ := qrcode.Encode("Dynamic QR from Server!", qrcode.Medium, 256)
w.Header().Set("Content-Type", "image/png")
w.Write(png)
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("http://localhost:8080 にアクセスしてください")
http.ListenAndServe(":8080", nil)
}
ブラウザで http://localhost:8080 を開くと、その場で生成された QR コードが表示されます。
まとめ
- go get github.com/skip2/go-qrcode で手軽に導入可能
- WriteFile で1行生成
- エラーレベルやサイズ調整で用途に合わせたQRコードを出力できる
- Encode を使えばWebアプリやAPIにも組み込みやすい
Go なら CLIツール化 も簡単なので、ぜひ自分用のQR生成コマンドを作ってみてください ✨
Discussion