🌀

Goで作るQRコード入門 ― 簡単に画像やWebアプリに組み込む方法

に公開

はじめに

QRコードはURLやテキストをエンコードして、スマートフォンなどで簡単に読み取れる仕組みです。
Golang には便利なライブラリがあり、数行のコードで画像ファイルとして出力できます。

この記事では、次の流れで QR コードを生成する方法を解説します。

  1. 環境準備
  2. シンプルなQRコードを作る
  3. サイズやエラーレベルを調整する
  4. ファイルに保存する

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