azure-storage パッケージのインストール
Node.js から Azure Table Storage を操作するには、azure-storage
というライブラリを使用します。
npm
コマンドで簡単にインストールすることができます。
$ npm install --save azure-storage
TableService オブジェクトの生成
Azure Storage にアクセスするには、接続情報(ストレージアカウント名とキー)が必要になるので、Azure ポータル で確認しておいてください。
接続情報としてデフォルトの環境変数を使用する
Node.js から Table Storage を扱うには、azure-storage
モジュールが提供する TableService クラス を使用します。
TableService
のインスタンスは下記のように生成することができます。
const azure = require('azure-storage');
const tableService = new azure.TableService();
上記のように、TableService
のコンストラクのパラメータを何も指定しないと、接続のために下記のような環境変数が参照されます。
- AZURE_STORAGE_ACCOUNT … Azure Storage の「ストレージアカウント名」
- AZURE_STORAGE_ACCESS_KEY … Azure Storage の「キー」
- AZURE_STORAGE_CONNECTION_STRING … Azure Storage の「接続文字列」
1 と 2 を両方とも設定するか、3 を設定しておけば Azure Storage にアクセスできるようになります。
接続情報を明示的に指定する
TableService
のコンストラクタの引数で、明示的に接続情報を渡すこともできます。
// 接続文字列だけを渡す場合
const tableService = new azure.TableService(connectionString);
// ストレージアカウント名とキーのペアを渡す場合
const tableService = new azure.TableService(storageAccount, storageAccessKey);
複数のストレージアカウントを使い分けたい場合は、独自の環境変数に「接続文字列」を設定しておくとよいでしょう。
ここでは、MAKU_AZURE_STORAGE_CONNECTION_STRING
という環境変数に「接続文字列」を設定してみます。

const azure = require('azure-storage');
// Azure Storage の接続文字列を環境変数から取得
const connectionString = process.env.MAKU_AZURE_STORAGE_CONNECTION_STRING;
if (typeof connectionString === 'undefined') {
console.error('MAKU_AZURE_STORAGE_CONNECTION_STRING is not set');
process.exit(1);
}
// TableService オブジェクトを取得
const tableService = new azure.TableService(connectionString);
プロキシ環境からアクセスする場合
TableService
クラスをプロキシ環境内で使用する場合は、OS の https_proxy
環境変数で設定してしまうのが簡単です。
OS の https_proxy
環境変数を設定するのを避けたいときは、TableService
クラスの setProxy()
メソッドを使ってプロキシを設定することもできます。
tableService.setProxy('http://proxy.example.com:12345');
プロキシ情報は環境変数で定義したいけど、OS の https_proxy
環境変数を設定するのは避けたいということであれば、例えば、独自の MAKU_AZURE_PROXY
のような 独自の環境変数 を用意するとよいでしょう。
// MAKU_AZURE_PROXY 環境変数が設定されていたらプロキシ情報として使う
if (process.env.MAKU_AZURE_PROXY) {
tableService.setProxy(process.env.MAKU_AZURE_PROXY);
}
テーブルの操作
ここから先のテーブル操作に関しては、前述の TableService
オブジェクトの生成が終わっていることを想定しています。
テーブルを作成する (createTable, createTableIfNotExists)
Table Storage 上に、新しいテーブルを作成するには、TableService
クラスの下記のメソッドを使用します。
tableService.createTableIfNotExists('mytable', function(error, result, response) {
if (error) {
console.error(error);
process.exit(1);
}
// result contains true if created; false if already exists
console.log(result);
});
{
isSuccessful: true,
statusCode: 204,
TableName: 'mytable',
created: true
}
{
isSuccessful: true,
statusCode: 200,
TableName: 'mytable',
created: false
}
エンティティの操作
エンティティを取得する (queryEntities)
条件を指定してエンティティのリストを取得するには、TableService
クラスの queryEntities() メソッド を使用します。
tableService.queryEntities('books', null, null, function (error, result) {
if (error) {
console.error(error);
process.exit(1);
}
const entries = result.entries;
console.log(entries);
});
[
{
PartitionKey: { '$': 'Edm.String', _: 'book' },
RowKey: { '$': 'Edm.String', _: '001' },
Timestamp: { '$': 'Edm.DateTime', _: 2020-01-29T02:28:15.137Z },
Title: { _: 'まくの秘密' },
Author: { _: 'まく' },
'.metadata': { etag: `W/"datetime'2020-01-29T02%3A28%3A15.1370872Z'"` }
},
{
PartitionKey: { '$': 'Edm.String', _: 'book' },
RowKey: { '$': 'Edm.String', _: '002' },
Timestamp: { '$': 'Edm.DateTime', _: 2020-01-29T02:29:48.875Z },
Title: { _: 'へむの秘密' },
Author: { _: 'へむ' },
'.metadata': { etag: `W/"datetime'2020-01-29T02%3A29%3A48.8751116Z'"` }
},
{
PartitionKey: { '$': 'Edm.String', _: 'book' },
RowKey: { '$': 'Edm.String', _: '003' },
Timestamp: { '$': 'Edm.DateTime', _: 2020-01-29T02:30:28.677Z },
Title: { _: 'ちいの秘密' },
Author: { _: 'ちい' },
'.metadata': { etag: `W/"datetime'2020-01-29T02%3A30%3A28.6771054Z'"` }
}
]
queryEntities()
メソッドの第2パラメータに TableQuery オブジェクト を渡すと、エンティティを検索するための条件を指定することができます。
const query = new azure.TableQuery()
.top(3) // 最大 3 件まで取得
.where('PartitionKey eq ?', 'book') // PartitionKey が book である
.and('RowKey >= ?', '2') // かつ RowKey が 002 以上である
.select('Title') // Title プロパティのみを取得
tableService.queryEntities('books', query, null, function (error, result) {
if (error) {
console.error(error);
process.exit(1);
}
const entries = result.entries;
console.log(entries);
});
[
{
Title: { _: 'へむの秘密' },
'.metadata': { etag: `W/"datetime'2020-01-29T02%3A29%3A48.8751116Z'"` }
},
{
Title: { _: 'ちいの秘密' },
'.metadata': { etag: `W/"datetime'2020-01-29T02%3A30%3A28.6771054Z'"` }
}
]
関連記事
- Azure Table Strage を使ってみる (2) 接続情報(キー)を確認する
- Azure Table Strage を使ってみる (3) Python からテーブル操作してみる
- Azure Table Strage を使ってみる (1) テーブルの作成
- チャットボット: 独自のミドルウェアを作成してログを記録する
- チャットボット: 独自のミドルウェアを作成して禁止ワードを拒否するようにする
- チャットボット: Bot Builder SDK の Dialog で会話の流れをデザインする (2) スタック管理
- チャットボット: Bot Builder SDK で画像やリストなどのリッチなメッセージを送る (MessageFactory)