今週は小ネタ。あまり時間が取れなかった...
RubyからAzure Storage Queueにアクセスする
Azure Storage Queueにたくさんのデータを登録しようと思い、簡単なプログラムを書いて動かそうとしたらちょっとハマったので、備忘録で残しておきます。
公式ドキュメントが古すぎる件
まずは公式ドキュメントを見るようにしているので、公式ドキュメントを探してみると、そのものズバリの記事が以下にあります。が、結論から言うと以下のドキュメントに書かれている方法では動きませんでした。
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にメッセージが溜まっていることが確認できました。
ソース
ソースは以下。gemをGemfile
に入れたり、アプリのソースをlib
以下に格納していますが、本質は変わらないかなと。