Windows Azure のCLIツール「azure-cli」の使い方


## 概要
- 「[azure-cli](https://npmjs.org/package/azure-cli)」はWindowsAzureの様々な情報をコマンドラインから管理できるnode.jsのパッケージ。
- コマンドラインツールを使うにはnode.jsをインストールしておく必要がある。

## 対象範囲
- この記事では主にモバイルサービスでよく使う機能について記載する。

## 環境

```
% azure --version
0.7.4 (node: 0.8.16)
```

## インストール・証明書インポート
以下を参照してインストール、証明書のインポートを行う。
- [Mac および Linux 用 Windows Azure コマンド ライン ツール](http://nnasaki.hatenablog.com/entry/2013/05/15/061708)
- [Windows Azure Mobile Services をコマンドラインツールで操作する](http://www.windowsazure.com/ja-jp/manage/linux/other-resources/command-line-tools/)

## サブスクリプションの切り替え
1つのアカウントに複数のサブスクリプションが存在する場合、対象のサブスクリプションを指定する必要がある。
それには、`azure account set`コマンドで操作対象のサブスクリプションを切り替えることができる。
現在指定しているサブスクリプションは`azure account list`コマンドで確認することができる。
Currentがtrueになっているのが現在のサブスクリプション。

```
% azure account list
info:    Executing command account list
data:    Name   Id                                    Current
data:    -----  ------------------------------------  -------
data:    無料評価版  xxxx  true   
data:    従量課金   yyyy  false  

% azure account set yyyy
info:    Executing command account set
info:    Setting subscription to “yyyy”
info:    Setting service endpoint to: https://management.core.windows.net/
info:    Changes saved

% azure account list                                    
info:    Executing command account list
data:    Name   Id                                    Current
data:    -----  ------------------------------------  -------
data:    無料評価版  xxxx  false  
data:    従量課金   yyyy  true   
```


## ログの参照
`azure mobile log`コマンドにて、モバイルサービスのログを参照する。

【コマンド】

```
azure mobile log <サービス名> <オプション>
azure mobile log --help # Help
```

【オプション】

```
--json                           出力結果をJSON形式にする
-r, --query <query>              ログクエリを実行して検索する
-t, --type <type>                information、warning、errorのいずれかのタイプで検索する
--source <source>                ソース名で検索する
-c, --continuationToken <token>  Token IDの位置から表示する
-p, --top <top>                  結果を先頭から指定した行数分表示する
```

【注意】
--query パラメーターは、--type、--top より優先される。
--queryオプションのパラメータはOData（Open Data Protocol）で定義されているURIパラメータの記述方法に従う。
参考：http://msdn.microsoft.com/ja-jp/library/windowsazure/jj677199.aspx

なお、以下のオプションについては動作することができなかった。
-k（—skip）オプションは正常に動作しなかった（helpにも表示されないのでおそらく廃止された？）
-r（—query）オプションは以下のエラーが出力された。

```
% azure mobile log <サービス名> --query "$top=5&$skip=2"
info:    Executing command mobile log
+ Retrieving logs                                                              
error:   When querying user logs, a $top query option must be specified and the value must be positive and less than 200.
error:   mobile log command failed
```
エラーに書いてある$topパラメータは指定しているが、なぜかエラーとなってしまう。。

## データの参照
`azure mobile data read`コマンドにて、テーブルのデータを参照する。

【コマンド】

```
azure mobile data read <サービス名> <テーブル名> <オプション> <クエリ>
azure mobile data read —help # Help
```

【オプション】

```
--json                   出力結果をJSON形式にする
-k, --skip <top>         先頭から指定した行数を除く
-t, --top <top>          先頭から指定した行数を表示する
-l, --list               出力結果をlist形式にする
```

【クエリ】
このコマンドの<クエリ>の指定方法についての情報が見つからない。。

## スクリプトの操作
`azure mobile script`コマンドにて、各種スクリプトの操作を行う。

①スクリプト一覧の参照

```
azure mobile script list <サービス名> <オプション>
azure mobile script list --help # Help
```

②スクリプトの取得

```
azure mobile script download <サービス名> <ディレクトリ名/スクリプト名> <オプション>
azure mobile script download --help # Help
```

③スクリプトのアップロード

```
azure mobile script upload <サービス名> <ディレクトリ名/スクリプト名> <オプション>
azure mobile script upload --help # Help
```

④スクリプトの削除

```
azure mobile script delete <サービス名> <ディレクトリ名/スクリプト名> <オプション>
azure mobile script delete --help # Help
```

モバイルサービス内でスクリプトが配置されているディレクトリ・スクリプト名は以下の通り。

|タイプ|ディレクトリ名/ファイル名|
|------------|------------|
|tableスクリプト|table/＜tableName＞.{insert｜read｜update｜delete}|
|schedulerスクリプト|scheduler/＜scriptName＞|
|custom APIスクリプト|api/＜scriptName＞|
|sharedスクリプト|shared/＜scriptname＞|

- table,scheduler,custom APIは、モバイルサービスの管理画面にあるそれぞれの機能のスクリプト。
- アップロードする際は、カレントディレクトリに対象のディレクトリを作成し、その中にファイルを配置して、アップロードコマンドの<ディレクトリ名/ファイル名>を指定すれば良い。
- 現在はuploadの--overrideオプションは廃止されているようで、何も指定しなくても上書きができる。
- sharedスクリプトはHelper関数であり各種スクリプトからrequireして使うことができるが、今のところ管理画面では作成することができない。（これについては別のエントリーにて記述する）
- この他に、node_modulesというフォルダを作成しnpmを使用することもできる。（これについても別のエントリーにて記述する）

## その他のツール
### cliのヘルパー 
 [SaschaDittmann / azure-cli-helper](https://github.com/SaschaDittmann/azure-cli-helper/tree/master/node_modules/winston)
とりあえず見つけたのでメモ。使い方は調査中。

（2014/01/18 追記）
使い方が書いていないので詳しいことは分からないが、ソース見る限りモバイルサービスのスクリプトの操作（参照・アップロード・ダウンロード・削除）ができるよう。
 
### GUIでモバイルサービスのログを参照できるツール
[Azure Mobile Log Viewer , an app to easily query Azure Mobile Log data](http://jeremiedevillard.wordpress.com/2013/09/18/azure-mobile-log-viewer-an-app-to-easily-query-azure-mobile-log-data/)
試してみたところ、証明書をセットしてSubscriptionまでは選択できるが、ServiceNameが表示されず、ログの取得まで至らなかった。

- - - 

誤りや不明点などについてはコメント下さい。
logの--queryオプションと、data readのクエリについてご存知の方がいましたらフォロー下さい。