RailsでQRコードを生成するの巻

1 min読了の目安(約900字TECH技術記事

やりたかったこと

今自作しているアプリで、特定のURLを生成してQRコード化し相手に読み取ってもらうことで、特定のページに飛ばす機能を実装しようと思い調べてみました。画像に変換して保存する方法はすぐに見つかりましたが、画像を保存せずにviewに表示するだけの方法に関しては意外と情報が少なかったのでメモがてらに残しておきます。

準備

今回つかったgemは以下の2つです。

RQRCodeでQRコードをpng形式で生成すると、ChunkyPNG::Imageというインスタンスとして扱えるということで、この2点をセットでgem fileに追加。

gem 'rqrcode'
gem 'chunky_png'

これで準備は完了です。

step1: ヘルパーの追加

生成したURLをインスタンス変数でviewに渡している状態です。
その状態で、表示させたいviewのヘルパーメソッドを作成します。

require 'chunky_png'

def qrcode_tag(url, _options = {})
  qr = ::RQRCode::QRCode.new(url)
  ChunkyPNG::Image.from_datastream(qr.as_png.resize(250, 250).to_datastream).to_data_url
  end

引数でurlを渡し、それをもとにpngを生成します。

step2: viewファイルにタグを追加

step1で作成したヘルパーをviewファイルで使います。

<%= image_tag qrcode_tag url %>

引数としてインスタンス変数に入れたURLを渡します。
以上!

余談

ちなみにSVG形式で出力するのであればChunkyPNGは不要みたいです。(試してないけど)
その場合image_tagも必要なく普通にヘルパーメソッドだけを書けば良いとのこと。
他にも良い方法があれば教えて下さいー