niki12260714の日記

フリーランスのITエンジニアの呟き。

Ruby学習21日目:gemパッケージのインストールと利用

イベントが終わったので、再びrailsと格闘。
次に実現するのは、取り置きしたアイテムを引き取るために必要なQRコードの表示です。
QRコードをいわゆる引き取り証明のように使おうというわけです。
予約者はQRコードを見せるだけ、サークル側はQRコードを読み取るだけで取引完了となるわけです。
このQRコード表示はrailsに備わっているものではないので、拡張しなければなりません。
で、ぐぐってみると、ありがたいことにQRコードを表示するための機能をgemで提供してくださっている方を発見!

GitHub - whomwah/rqrcode: A Ruby library that encodes QR Codes

今回はこちらを利用。
説明にある通りに、「gem install rqrcode」をコンソールから実行し、インストールを確認。
で、後はcontrollerにコードを書くだけ……なのですが、何故か「cannot load such file -- rqrcode」と言われてしまいます。
エラーを直訳すれば、そんなファイルは見当たらないってことなので、推測される理由は
・インストールが上手くいっていない
・インストールしたところにパスが通ってない
がセオリーなわけで、もう一回インストールしたり、rails serverを再起動したりしたのですが上手くいかず。
「インストールが上手くいっているかどうかをコマンドで見てみよう」と思い立ち、コマンドから「gem list」を実行。
ちゃんと「rqrcode(0.10.1)」が出てきたので、インストールは上手くっていることが判明。
てことは、パスが通ってないのか……と調べていくと、Gemfileという、gemを管理しているファイルが存在していることが判明。
開いてみると、sqliteとかrailsとか書いてありますが、rqrcodeがいないじゃないですか。
ここに「gem 'rqrcode'」を書いて再起動、「cannot load~」は出なくなりました!

QRコードに埋め込む文字は「(引き取り用のURL)/(予約番号)」の形式。
これを展開するのはViewなので、Viewに以下のように記述。

<%
require 'rqrcode'
@qr_txt = 'http://localhost:3000/trade/' + list.reserve_list_id.to_s
@qr = RQRCode::QRCode.new( @qr_txt, :size => 4, :level => :h )
%>
<%= raw @qr.as_html %>

これにより、自分が取り置きしたアイテムのQRコードが画面描画時に生成され、こんな感じの画面が出来ました。

f:id:niki12260714:20171009201304j:plain

なんかQRコードが巨大で幅が広い気がするけど、読み取るとちゃんと意図した文字列を埋め込んでいます。
これでgemパッケージを使う方法が分かったので、次のステップに進めます!