QRコードを生成するHaskellライブラリを試した

HaskellでQRコードを生成するライブラリが欲しかったので探したところ、

が見つかった。両方とも試してみたので、その感想を書いておく。

QRコードの概要

QRコードを作るためには、QRコード自体について知っておかないといけない。

規格

JIS X 0510としてJIS規格になっていて、このへんで参照できる。ISO規格にもなっている。

QRコードの種類

コードする文字の種類:

  • Numeric
    • 数字
  • Alphanumeric
    • 数字、大文字アルファベットと一部の記号(URLを表現できる)
  • Binary
    • 8ビット文字
    • 小文字アルファベットを表現できる
    • UTF-8とかを使えばUnicode文字も表現できる(たぶん)
  • Kanji
    • JISコード

データ訂正レベル:

  • L / M / Q / H

バージョン(QRコードの大きさ):

  • 1から40
  • 大きい方がより多くの情報を載せられる。

qrcode

Hackage: http://hackage.haskell.org/package/qrcode

GitHub: https://github.com/kizzx2/haskell-qrcode

特徴

  • 全てHaskellで書かれている。
  • 現在のところNumeric, Alphanumericのエンコードのみ(8ビットは非対応)。
  • バージョンを明示的に指定しないといけない。

コード例

標準入力から1行読み取って、out.pngに出力する。PNG画像の生成にはJuicyPixelsライブラリを使っている。

感想

  • Alphanumericがスラッシュを受け付けないという問題があったが、修正してPRを送って反映された。
  • 8ビットモードは未実装とはいえ、Numeric, Alphanumericの実装とQRコードの規格を参照すればちょちょいと実装できた。
  • 生成されたQRコードが読み取れない場合がある。しかし、デバッグできるほど自分にはQRコードへの造詣はなかった。
  • あまり使われていないのか、バグが目立つ。

haskell-qrencode

Hackage: https://hackage.haskell.org/package/haskell-qrencode

GitHub: https://github.com/jamessanders/haskell-qrencode

特徴

  • libqrencodeという、Cで書かれたライブラリへのバインディング。
  • FFIを使っている関係か、エンコードする関数がIOアクションになっている。
  • 枯れている(?)ライブラリへのバインディングのため、変なバグは少ないと期待される。
  • バージョンを自動的に判断してくれる。

コード例

感想

  • 枯れたライブラリサイコーや!「ちゃんと動く」ことこそ正義!

結局

今回の用途ではHaskellプログラムで動的にQRコードを生成する必要はないかなあと思ったので、libqrencodeに付属するqrencodeコマンドを使ってお茶を濁した。(おい)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です