|
1 |
| -# DeviceConnect-Codegen |
| 1 | +# DeviceConnect Codegen |
| 2 | + |
| 3 | +## はじめに |
| 4 | +DeviceConnect Codegenは、DeviceConnectシステム上で動作するプラグインおよびアプリケーションのスケルトンコードを生成するためのコマンドラインツールです。(以下、本ツールと呼びます) |
| 5 | + |
| 6 | +本ツールへの入力として、DeviceConnectプロファイルの定義ファイルを自前で用意しておく必要があります。標準プロファイルについては全API仕様を定義したファイルを提供しますので、適宜編集してください。 |
| 7 | + |
| 8 | +### 前提知識 |
| 9 | +- OpenAPI Specification 2.0 |
| 10 | + |
| 11 | +### サポート範囲 |
| 12 | +本ツールで生成可能なスケルトンコードのタイプは下記のとおりです。 |
| 13 | + |
| 14 | +- Androidプラグイン |
| 15 | +- iOSプラグイン |
| 16 | +- [node-gotapi](https://github.com/futomi/node-gotapi)プラグイン |
| 17 | +- HTMLアプリケーション |
| 18 | +- DeviceConnectエミュレータ |
| 19 | +- DeviceConnectAPIリファレンス |
| 20 | + - HTML |
| 21 | + - Markdown |
| 22 | + |
| 23 | +## ファイル構成 |
| 24 | +本ツールはzipで配布されます。圧縮されているファイルの構成は下記のとおりです。 |
| 25 | + |
| 26 | +|ファイル名|説明| |
| 27 | +|:--|:--| |
| 28 | +|bin/deviceconnect-codegen.jar|本ツールのバイナリ。| |
| 29 | +|src/deviceconnect-codegen|本ツールのソースコード。| |
| 30 | +|standard-profile-specs/*.json|DeviceConnect標準のプロファイル定義ファイル群。| |
| 31 | +|samples/android-plugin.sh|Androidプラグインのスケルトンコードを生成するシェルスクリプトのサンプル。| |
| 32 | +|samples/ios-plugin.sh|iOSプラグインのスケルトンコードを生成するシェルスクリプトのサンプル。| |
| 33 | +|samples/profiles-specs|シェルスクリプトのサンプルに入力するプロファイル定義ファイル群。| |
| 34 | + |
| 35 | +## Get Started |
| 36 | +[deviceconnect-codegen-project-1.8.3-dist.zip](https://github.com/TakayukiHoshi1984/DeviceConnect-Experiments/releases/tag/codegen-v1.8.3) をPC上の任意の場所にダウンロードし、解凍してください。 |
| 37 | + |
| 38 | +解凍後、ターミナルを起動し、以下のコマンドによりをサンプルのスケルトンコードを生成してください。 |
| 39 | + |
| 40 | +生成後の手順については、各出力先のREADME.mdを参照してください。 |
| 41 | + |
| 42 | +### Androidプラグインの場合 |
| 43 | +``` |
| 44 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 45 | +$ ./android-plugin.sh |
| 46 | +``` |
| 47 | + |
| 48 | +出力先: samples/output/Android/MyPlugin |
| 49 | + |
| 50 | +### iOSプラグインの場合 |
| 51 | +``` |
| 52 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 53 | +$ ./ios-plugin.sh |
| 54 | +``` |
| 55 | + |
| 56 | +出力先: samples/output/iOS/MyPlugin |
| 57 | + |
| 58 | +### node-gotapiプラグインの場合 |
| 59 | +``` |
| 60 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 61 | +$ ./node-plugin.sh |
| 62 | +``` |
| 63 | + |
| 64 | +出力先: samples/output/NodeJS/node-gotapi-plugin-sample |
| 65 | + |
| 66 | +### HTMLアプリケーションの場合 |
| 67 | +``` |
| 68 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 69 | +$ ./html-app.sh |
| 70 | +``` |
| 71 | + |
| 72 | +出力先: samples/output/html/MyApp |
| 73 | + |
| 74 | +### DeviceConnectエミュレータの場合 |
| 75 | +``` |
| 76 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 77 | +$ ./emulator.sh |
| 78 | +``` |
| 79 | + |
| 80 | +出力先: samples/output/NodeJS/Emulator |
| 81 | + |
| 82 | +### DeviceConnectAPIリファレンス (HTML) の場合 |
| 83 | +``` |
| 84 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 85 | +$ ./html-docs.sh |
| 86 | +``` |
| 87 | + |
| 88 | +出力先: samples/output/html/Device_Connect_RESTful_API_Specification |
| 89 | + |
| 90 | +### DeviceConnectAPIリファレンス (Markdown) の場合 |
| 91 | +``` |
| 92 | +$ cd deviceconnect-codegen-project-X.Y.Z-dist/samples |
| 93 | +$ ./md-docs.sh |
| 94 | +``` |
| 95 | + |
| 96 | +出力先: samples/output/html/Device_Connect_RESTful_API_Specification |
| 97 | + |
| 98 | +## リファレンス |
| 99 | + |
| 100 | +### 実行方法 |
| 101 | +下記のようなJavaコマンドで実行してください。指定可能なオプションは次節参照。 |
| 102 | + |
| 103 | +``` |
| 104 | +java -jar bin/deviceconnect-codegen.jar [オプション] |
| 105 | +``` |
| 106 | + |
| 107 | +### オプション一覧 |
| 108 | + |
| 109 | +<table> |
| 110 | +<thead><tr><th>オプション</th><th>説明</th><th>省略</th></tr></thead> |
| 111 | +<tbody> |
| 112 | + |
| 113 | +<tr> |
| 114 | +<td valign="top"><pre>--lang</pre></td> |
| 115 | +<td valign="top"> |
| 116 | +スケルトン生成対象の指定。下記のいずれかの値を引数とする。 |
| 117 | +<ul> |
| 118 | +<li>Androidプラグイン: deviceConnectAndroidPlugin</li> |
| 119 | +<li>iOSプラグイン: deviceConnectIosPlugin</li> |
| 120 | +<li>node-gotapiプラグイン: gotapiNodePlugin</li> |
| 121 | +<li>HTMLアプリケーション: deviceConnectHtmlApp</li> |
| 122 | +<li>DeviceConnectエミュレータ: deviceConnectEmulator</li> |
| 123 | +<li>DeviceConnectAPIリファレンス (HTML): deviceConnectHtmlDocs</li> |
| 124 | +<li>DeviceConnectAPIリファレンス (Markdown): deviceConnectMarkdownDocs</li> |
| 125 | +</ul> |
| 126 | +</td> |
| 127 | +<td valign="top">-</td> |
| 128 | +</tr> |
| 129 | + |
| 130 | +<tr> |
| 131 | +<td valign="top"><pre>--input-spec</pre></td> |
| 132 | +<td valign="top"> |
| 133 | +スケルトンコードでサポートするプロファイル仕様の指定。プロファイル仕様定義ファイルへの絶対パスまたは相対パスを引数とする。ファイルの形式はJSON・YAMLのいずれかとする。指定したファイル内にサポートするすべてのAPIを定義すること。 |
| 134 | +</td> |
| 135 | +<td valign="top">*1</td> |
| 136 | +</tr> |
| 137 | + |
| 138 | +<tr> |
| 139 | +<td valign="top"><pre>--input-spec-dir</pre></td> |
| 140 | +<td valign="top"> |
| 141 | +スケルトンコードでサポートするプロファイル仕様の指定。プロファイル仕様定義ファイルを格納したディレクトリへの絶対パスまたは相対パスを引数とする。各ファイルの形式はそれぞれJSON・YAMLのいずれかとする。ファイル名は <プロファイル名>.<拡張子>であること。 |
| 142 | +</td> |
| 143 | +<td valign="top">*1</td> |
| 144 | +</tr> |
| 145 | + |
| 146 | +<tr> |
| 147 | +<td valign="top"><pre>--output</pre></td> |
| 148 | +<td valign="top"> |
| 149 | +スケルトンコードの出力先の指定。PC上の任意のディレクトリへの絶対パスまたは相対パスを引数とする。<br> |
| 150 | +<br> |
| 151 | +存在しないディレクトリが指定された場合は、そのディレクトリを新規で作成する。存在していた場合は、出力内容を強制的に上書きする。 |
| 152 | +</td> |
| 153 | +<td valign="top">-</td> |
| 154 | +</tr> |
| 155 | + |
| 156 | +<tr> |
| 157 | +<td valign="top"><pre>--display-name</pre></td> |
| 158 | +<td valign="top"> |
| 159 | +<b>[プラグインまたはアプリケーションのみ有効]</b><br> |
| 160 | +スケルトンコードの名前の指定。<br> |
| 161 | +<br> |
| 162 | +プラグインの場合、System APIによって取得できるデバイスプラグインの名前として使用される。アプリケーションの場合、主にアプリケーションのタイトルとして表示する名前として使用される。<br> |
| 163 | +<br> |
| 164 | +デフォルト値は、プラグインの場合は "MyPlugin"、アプリケーションの場合は "MyApp"。 |
| 165 | +</td> |
| 166 | +<td valign="top">o</td> |
| 167 | +</tr> |
| 168 | + |
| 169 | +<tr> |
| 170 | +<td valign="top"><pre>--connection-type</pre></td> |
| 171 | +<td valign="top"> |
| 172 | +<b>[Androidプラグインのみ有効]</b><br> |
| 173 | +Device Connect Managerとの連携タイプの指定。下記のいずれかの値を引数とする。デフォルト値は、"binder"。 |
| 174 | +<ul> |
| 175 | +<li>broadcast: IntentのブロードキャストによってDevice Connect Managerと通信する。</li> |
| 176 | +<li>binder: Device Connect Managerとバインドし、AIDLで定義されたインターフェース経由でIntent形式のメッセージを送受信する。</li> |
| 177 | +</ul> |
| 178 | +</td> |
| 179 | +<td valign="top">o</td> |
| 180 | +</tr> |
| 181 | + |
| 182 | +<tr> |
| 183 | +<td valign="top"><pre>--package-name</pre></td> |
| 184 | +<td valign="top"> |
| 185 | +<b>[Androidプラグインのみ有効]</b><br> |
| 186 | +スケルトンコードのパッケージ名の指定。デフォルト値は、"com.mydomain.myplugin"。 |
| 187 | +</td> |
| 188 | +<td valign="top">o</td> |
| 189 | +</tr> |
| 190 | + |
| 191 | +<tr> |
| 192 | +<td valign="top"><pre>--template-dir</pre></td> |
| 193 | +<td valign="top"> |
| 194 | +<b>[Androidプラグインのみ有効]</b><br> |
| 195 | +Androidプラグインのテンプレートを独自テンプレートに差し替えたい場合に、テンプレートをまとめたディレクトリへのパスを指定する。<br> |
| 196 | +<br> |
| 197 | +本オプションが省略された場合、本ツールにデフォルトのテンプレートが使⽤される。本オプションによって指定したテンプレートとデフォルトのテンプレートの間でファイル名の衝突が発⽣した場合は、本オプションで指定した⽅が優先される。 |
| 198 | +</td> |
| 199 | +<td valign="top">o</td> |
| 200 | +</tr> |
| 201 | + |
| 202 | +<tr> |
| 203 | +<td valign="top"><pre>--sdk</pre></td> |
| 204 | +<td valign="top"> |
| 205 | +<b>[Androidプラグインのみ有効]</b><br> |
| 206 | +独自テンプレート向けのオプション。<br> |
| 207 | +<br> |
| 208 | +ソースコードで提供されたDeviceConnect SDKを使用する場合に、そのフォルダへの絶対パスまたは相対パスを指定する。 |
| 209 | +<br> |
| 210 | +<br> |
| 211 | +指定した⽂字列は、テンプレート側から {{{sdkLocation}}} という名前で参照可能。デフォルトのテンプレートでは参照されない。 |
| 212 | +</td> |
| 213 | +<td valign="top">o</td> |
| 214 | +</tr> |
| 215 | + |
| 216 | +<tr> |
| 217 | +<td valign="top"><pre>--signing-configs</pre></td> |
| 218 | +<td valign="top"> |
| 219 | +<b>[Androidプラグインのみ有効]</b><br> |
| 220 | +独自テンプレート向けのオプション。<br> |
| 221 | +<br> |
| 222 | +Androidプラグインのビルド時に使用される署名情報の保存されているフォルダへの絶対パスまたは相対パスを指定する。<br> |
| 223 | +<br> |
| 224 | +指定した⽂字列は、テンプレート側から {{{signingConfigsLocation}}} という名前で参照可能。デフォルトのテンプレートでは参照されない。 |
| 225 | +</td> |
| 226 | +<td valign="top">o</td> |
| 227 | +</tr> |
| 228 | + |
| 229 | +<tr> |
| 230 | +<td valign="top"><pre>--gradle-plugin-version</pre></td> |
| 231 | +<td valign="top"> |
| 232 | +<b>[Androidプラグインのみ有効]</b><br> |
| 233 | +プラグインのビルドツールとして使⽤するAndroidPlugin for Gradle のバージョン名を指定する。省略された場合は 3.0.0 とする。<br> |
| 234 | +<br> |
| 235 | +指定した⽂字列は、テンプレート側から {{{gradlePluginVersion}}} という名前で参照可能。デフォルトのテンプレートからも参照される。 |
| 236 | +</td> |
| 237 | +<td valign="top">o</td> |
| 238 | +</tr> |
| 239 | + |
| 240 | +<tr> |
| 241 | +<td valign="top"><pre>--class-prefix</pre></td> |
| 242 | +<td valign="top"> |
| 243 | +<b>[Androidプラグイン・iOSプラグインの場合のみ有効]</b><br> |
| 244 | +出力されるクラス名のプレフィクスの指定。<br> |
| 245 | +<br> |
| 246 | +標準プロファイルを実装する場合に、SDK側から提供される既定クラスと名前を区別するために使用される。独自プロファイルの場合は適用されない。<br> |
| 247 | +<br> |
| 248 | +デフォルト値は、 "My"。 |
| 249 | +</td> |
| 250 | +<td valign="top">o</td> |
| 251 | +</tr> |
| 252 | + |
| 253 | +</tbody> |
| 254 | +</table> |
| 255 | + |
| 256 | +*1: `--input-spec` または `--input-spec-dir` のいずれかを必ず指定すること。両方指定された場合は `--input-spec` が優先される。 |
| 257 | + |
| 258 | +## 開発環境 |
| 259 | +### 開発ツール |
| 260 | +- Apache Maven 3.3.9+ |
| 261 | +- Python 2.x |
| 262 | + |
| 263 | +### ビルド方法 |
| 264 | +DeviceConnectCodegenのルートディレクトリで下記のコマンドを実行すると、本ツールをビルドできます。 |
| 265 | + |
| 266 | +``` |
| 267 | +$ mvn package |
| 268 | +``` |
| 269 | + |
| 270 | +ビルドを実行すると、本ツールのバイナリと[配布用zip](#ファイル構成)がそれぞれ下記の場所に出力されます。 |
| 271 | + |
| 272 | +|項目|出力先| |
| 273 | +|:--|:--| |
| 274 | +|バイナリ|DeviceConnectCodegen/bin/deviceconnect-codegen.jar| |
| 275 | +|配布用zip|DeviceConnectCodegen/target/deviceconnect-codegen-project-1.8.3-dist.zip| |
| 276 | + |
| 277 | +### バージョン更新 |
| 278 | +新しいバージョンを開発する場合は、以下のPython 2.x スクリプトで全体的にバージョン設定を書き換えること。 |
| 279 | + |
| 280 | +例: バージョン a.b.c に変更する場合 |
| 281 | + |
| 282 | +``` |
| 283 | +$ cd DeviceConnect-Experiments/DeviceConnectCodegen |
| 284 | +$ python tools/version.py a.b.c |
| 285 | +``` |
| 286 | + |
| 287 | +正常に変更された場合は、以下のログが標準出力される。 |
| 288 | + |
| 289 | +``` |
| 290 | +Changed: /(略)/DeviceConnect-Experiments/DeviceConnectCodegen/pom.xml |
| 291 | +Changed: /(略)/DeviceConnect-Experiments/DeviceConnectCodegen/modules/deviceconnect-codegen/pom.xml |
| 292 | +Changed: /(略)/DeviceConnect-Experiments/DeviceConnectCodegen/README.md |
| 293 | +Completed |
| 294 | +``` |
| 295 | + |
| 296 | +## 参考リンク |
| 297 | +- [Swagger](http://swagger.io/) |
0 commit comments