Ruby で QRコードを生成する方法
何の記事??
URL だったり、任意の文字列(例えば会員ID)を QRコードにして表示したいことってよくありますよね?
そこで今回は Web系の開発でよく使われる Ruby で文字列を QRコードにする方法を記載します!!
準備
QRコード作成のための gem を入れていきましょう。
$ gem install rqrcode_png Fetching: rqrcode_core-0.1.1.gem (100%) Successfully installed rqrcode_core-0.1.1 Fetching: chunky_png-1.3.11.gem (100%) Successfully installed chunky_png-1.3.11 Fetching: rqrcode-1.1.2.gem (100%) Successfully installed rqrcode-1.1.2 Fetching: rqrcode_png-0.1.5.gem (100%) Successfully installed rqrcode_png-0.1.5 Parsing documentation for rqrcode_core-0.1.1 Installing ri documentation for rqrcode_core-0.1.1 Parsing documentation for chunky_png-1.3.11 Installing ri documentation for chunky_png-1.3.11 Parsing documentation for rqrcode-1.1.2 Installing ri documentation for rqrcode-1.1.2 Parsing documentation for rqrcode_png-0.1.5 Installing ri documentation for rqrcode_png-0.1.5 Done installing documentation for rqrcode_core, chunky_png, rqrcode, rqrcode_png after 1 seconds 4 gems installed
install で指定したのは「rqrcode_png」ですが依存関係にある「rqrcode_core」「chunky_png」「rqrcode」の三つも一緒に入ります。
今回使うのは以下のライブラリです。github のリンクが↓から!!
ちなみに今回使用する Ruby のバージョンは以下の通りです。
$ ruby -v ruby 2.5.7p206 (2019-10-01 revision 67816) [x86_64-darwin18]
実装
それでは実際に QRコードを作成するコードを見ていきましょう!!
まずは、必要な gem をインポートしましょう。
require 'rqrcode' require 'rqrcode_png' require 'chunky_png'
それは、RQRCode の QRCode インスタンスを生成しましょう。
今回はこのブログの QR コードを生成してみようと思うので、引数の文字列はみなさんが作りたい文字列に置き換えてくださいね!
qr = RQRCode::QRCode.new( "https://www.geeeek.site/")
さて、この qr 変数を画像として保存するように変換してみましょう。
今回の本題とは少しずれる部分なので少し省略します。
writeメソッドの第一引数は、保存したいパスを指定してください。(今回僕は同じディレクトリに保存することにしました)
png = qr.as_png( resize_gte_to: false, resize_exactly_to: false, fill: 'white', color: 'black', size: 1000, border_modules: 4, module_px_size: 10, file: nil ); File.write("./code.png", png.to_s, external_encoding: "ASCII-8BIT" )
これで任意の文字列を QR コードの画像として保存することができます!!
最後に全体像を記載します。
# -*- encoding: sjis -*- require 'rqrcode' require 'rqrcode_png' require 'chunky_png' qr = RQRCode::QRCode.new( "https://www.geeeek.site/") png = qr.as_png( resize_gte_to: false, resize_exactly_to: false, fill: 'white', color: 'black', size: 1000, border_modules: 4, module_px_size: 10, file: nil ); File.write("./code.png", png.to_s, external_encoding: "ASCII-8BIT" )
宣伝
ここで一個宣伝させてください。
現在私「ロク」は、未経験のエンジニア向けのメンターを行なっています。
内容は、キャリアマップの相談、プログラミングの相談、イノベーションマインド(私が勝手に名付けたのでご興味ある方はお問い合わせください。)
料金は無料でお受けしていることと現在会社員ですので、いつでもすぐに回答できるわけでも教材を提供できるわけでもありませんが、お力になれればと思っています。
プログラミングの相談はもちろん、就職の相談や勉強方法の相談など幅広く承っています。
無料と言うと怪しいイメージを持たれがちなのですが、将来的に行いたいビジネスの検証段階としてメンターをやっているため「無料」でご提供させていただいております。
一個だけ、見返りとして求めることがあるとしたら、ある程度できるようになってきたら僕の趣味開発のお手伝いをしてもらえると嬉しいなと思っています。
メンターの応募フォームはこちらから!!
twitter もチェックしてもらえると嬉しいです!!