RubyからAzure Storage Queueにアクセスする

今週は小ネタ。あまり時間が取れなかった...

RubyからAzure Storage Queueにアクセスする

Azure Storage Queueにたくさんのデータを登録しようと思い、簡単なプログラムを書いて動かそうとしたらちょっとハマったので、備忘録で残しておきます。

公式ドキュメントが古すぎる件

まずは公式ドキュメントを見るようにしているので、公式ドキュメントを探してみると、そのものズバリの記事が以下にあります。が、結論から言うと以下のドキュメントに書かれている方法では動きませんでした。

docs.microsoft.com

Ruby 3.0の環境で動かそうとすると以下のエラーメッセージが出てrequire azureすら動きません。

/Users/hoge/bundle/ruby/3.0.0/gems/azure-0.7.10/lib/azure.rb:21:in `require': cannot load such file -- rexml/document (LoadError)
    from /Users/hoge/bundle/ruby/3.0.0/gems/azure-0.7.10/lib/azure.rb:21:in `<top (required)>'
    from lib/app.rb:2:in `require'
    from lib/app.rb:2:in `<main>'

また、azure gemのソースコードリポジトリであるAzure/azure-sdk-for-rubyのREADMEには2021年5月24日時点で以下の記述がされていました。

As of February 2021, Azure Resource Management SDK for Ruby has entered a retirement phase and is no longer officially supported by Microsoft.

もうメンテナンスされないので、別の方法を見つける必要があります。

Microsoft Azure Storage Client Library for Ruby

何か別の方法はないかなと探していたところ、Microsoft Azure Storage Client Library for Rubyを見つけました。azure gemのバージョン0.7.10からAzure Storage関係は別リポジトリに分かれたようです。

メンテナンスも(2021年5月24日時点で)行われているようなので、安心して使えます。以下ではこれを使います。

Azure Storage Queueにアクセスする

READMEに書いてあることそのままですが、念のため試してみます。試した環境は以下の通りです。

  • Ruby 3.0.0
  • azure-storage-queue gem 2.0.2

Azure Storage Queueにアクセスするにはazure-storage-queueを使います。gem install azure-storage-queueでgemをインストールして、以下のようなプログラムを書きます(追記:初出時、Base64.encode64を使って送信するメッセージをエンコードする処理を記述していませんでした。これによりメッセージを受け取ることはできなくなることがあります)

require 'azure/storage/queue'
require 'base64'

client = Azure::Storage::Queue::QueueService.create(
  use_development_storage: true
)

QUEUE_NAME = "myqueue"

client.create_queue(QUEUE_NAME)

100.times do |index|
  client.create_message(QUEUE_NAME, Base64.encode64("test message #{index}"))
end

REAMEには

Against local Emulator (Windows Only)

と書かれていますが、macでも動きます。Azuriteを起動しておいて、上記プログラムを実行すると、画像のようにQueueにメッセージが溜まっていることが確認できました。

f:id:miyohide:20210524213835p:plain

ソース

ソースは以下。gemをGemfileに入れたり、アプリのソースをlib以下に格納していますが、本質は変わらないかなと。

github.com