Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

AutoRest フレームワークを使って Azure SDK for Javaを生成してみる

何度かBLOGってますが、Azure SDKはSwagger API (JSON) から 自動でSDKを生成しています。SDKに依存しないピュアなコードも生成できるみたいなのですが、そこは割愛してAzure SDK for Java を生成してみます。

github.com

ビルド

上記、GitHubからリポジトリをクローンします。Java向けは「javavnext」ブランチなので、切り替えてます。ビルドは以下で説明されています。

autorest/building-code.md at master · Azure/autorest · GitHub

かいつまんで説明しますと

  • VS 2015 Update2 と、 CoreCLR RC2 が必要
  • Java 1.8 が必要、JAVA_HOMEの設定をお忘れ無く
  • gradle が必要、2.6 と書かれてますが、最新で問題ないかと思います Download Gradle l Open Source Enterprise Build Automation からインスコしてPathに通しておきます
  • 普通のJava向けだけ欲しいのですが、Androidも一緒にJavaでひとくくりみたいなので、23.0.1 以上のAndroid SDKが必要です。必要に応じてANDROID_HOME の設定します
.\gradlew.bat build

順調にいくと、.\binaries\net45 配下に DLLとかEXEができあがります。 .\binaries\net45\autorest.exe を叩くと

f:id:StateMachine:20160621105409p:plain

こんな感じでヘルプが表示されます。コード生成オプションが見えますが、Azure.Java と Javaでちょっと違う仕様みたいですね。Fluent APIも生成できるような感じです。

コード生成

Azure SDKのSwagger APIの定義は、以下で公開されています。

GitHub - Azure/azure-rest-api-specs: The source for REST API specifications for Microsoft Azure.

とりあえず、以下を実行してみますと、

.\binaries\net45\AutoRest.exe  -input https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/arm-compute/2016-03-30/swagger/compute.json

GeneratedフォルダにC#のソースが出まが、Java向けは以下のようにオプションを指定する必要がありあmす。

.\binaries\net45\AutoRest.exe  -input https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/arm-compute/2016-03-30/swagger/compute.json -CodeGenerator Azure.Java -Namespace hoge

Generatedフォルダの様子。

f:id:StateMachine:20160621110620p:plain

Fluentはまだ生成できませんでした、残念。