Webアプリケーションを開発しているとき、携帯端末での表示を確認したくなるときがあります。 ブラウザのレスポンシブ・デザイン・モードを利用すれば、デスクトップでも見た目の確認はできますが、やはり手のひらの中でどのように表示されるかを知るには、端末そのものに表示させるのが一番です。
そのようなときにURLを携帯端末に送るため、コンソールにQRコードを表示する簡単なスクリプトを書いてみました。
自分で書かなくても、完成度の高いツールは巷に溢れていると思いますが、今後QRコードをブラウザに表示したり、メールで送信したりする必要に迫られることもないとは言えないので、そのトレーニングの意味合いも込めて。
とは言え、QRコードのエンコーディングをすべて書くのは大変なので、そこはパッケージを利用し、表現のところだけ自分で実装しています。
エンコーディングのパッケージは Hex に公開されている qr_code を利用しました。
Elixir 1.12 からは Mix.install/2
が実装されて、パッケージを簡単に利用できるようになりました。
これも、スクリプトを書くハードルを下げてくれた気がします。
# qr.exs Mix.install([:qr_code]) defmodule QR do @white IO.ANSI.light_white_background() @black IO.ANSI.black_background() def show_as_qr_code(str) do IO.puts(str) {:ok, %{matrix: matrix}} = str |> QRCode.create() len = length(hd(matrix)) edge = [@white, String.duplicate(" ", len + 2), @black] IO.puts(edge) matrix |> Enum.each(fn row -> IO.write([@white, " ", @black]) row |> Enum.map(fn 1 -> [@black, " "] 0 -> [@white, " "] end) |> IO.write() IO.puts([@white, " ", @black]) end) IO.puts(edge) end end System.argv() |> Enum.each(&QR.show_as_qr_code/1)
スクリプトを書いたら elixir
コマンドで実行です。
$ elixir qr.exs https://elixir-lang.org
初回だけ、パッケージのインストールが実行された後にQRコードが表示されます。
2回目以降は、すぐに結果を表示してくれるはずです。