ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Windows Runtime Support Lib for JavaScript version 0.1.0 をリリースしました

Windows Runtime Support Lib for JavaScript (WinRSJS) の最初のバージョンである version 0.1.0 をリリースしました。

どんなライブラリか

Windows ストアアプリ、および Windows Phone アプリを JS で開発する際に使用できる便利な機能を詰め込んだライブラリです。 C# で書かれた Windows Runtime コンポーネントJavaScript (TypeScript) で書かれた便利クラス群、およびそれらの API の TypeScript 型定義ファイル (.d.ts ファイル) で構成されています。

JS からの直接の生成方法がわからない Windows Runtime 型のオブジェクトの生成を行う機能や Google Analytics のクライアントが含まれていたりします。

バージョン 0.1.0 のターゲットプラットフォームは Windows 8.1Windows Phone 8.1 です。

セットアップ方法

バージョン 0.1.0 では NuGet パッケージの配布は行っていませんので、直接 ZIP ファイルをダウンロードして展開して、ライブラリを使用するソリューションのディレクトリ中に展開して使用してください。

  1. 下記のダウンロードページから ZIP ファイルをダウンロードする。
  2. ダウンロードした ZIP ファイルを展開し、ソリューションのディレクトリに展開する。 (ソリューションの中の libs ディレクトリなどに置く。 配置場所はどこでも良い。)
  3. ライブラリを使用するプロジェクトの References に、ライブラリの WinRS.winmd ファイルを追加する。
  4. ライブラリを使用するプロジェクトの HTML ファイル (default.html ファイルなど) に 「/js/winrsjs.js」 ファイルの読み込みを追加する。
    • <script src="/js/winrsjs.js"></script> という感じ。
    • この JS ファイルはライブラリ中に PRIResource として含まれているので、別途用意する必要はない。
  5. TypeScript から使用する場合は、ライブラリ中の winrsjs.d.ts ファイルを reference path に追加する。

これでセットアップは完了です。 後は JavaScript あるいは TypeScript のコードを書いて実際に使用していきます。

将来的には NuGet パッケージも配布したいと思います。

ライブラリに含まれる機能

Windows Runtime 型のオブジェクトの生成機能

Windows Runtime 型のオブジェクトの一部は、JS から直接生成することが困難です。 例えば IMapのオブジェクトを生成することは、Windows Runtime API を使用するだけではできません *1。 そのようなオブジェクトを生成する機能があります。

IMap<K, V> オブジェクト

WinRSJS.Collections.createMap(keyType: string, valType: string) メソッドにより、IMap<K, V> オブジェクトを生成できます。 Key および Value の型は、文字列によって C# での型を指定する必要があります。

//  IMap<string, string> オブジェクトを生成。 (C# において String 型は System.String。)
var map = <Windows.Foundation.Collections.IMap<string, string>>WinRSJS.Collections.createMap("System.String", "System.String");
Guid オブジェクト

WinRSJS.Guid.newGuid() メソッドにより、Guid 型の値を生成できます。 Windows Runtime の Guid 型は JS では string 型で現されるので、実際に JS で扱う際は文字列となります。

UUID (GUID) を JS で生成したい場合に使用できます。

// 文字列の形式は "12345678-abcd-abcd-abcd-123456789abc" というハイフン区切りの 16 進数表記。
var guid: string = WinRSJS.Guid.newGuid();

このメソッドは、Guid.NewGuid() メソッドのラッパーです。

HResult に関する機能

Windows Runtime API 内部でエラーが発生して HResult 値が返された場合、JS 側には例外として WinRTError オブジェクトが届きます。 そして、WinRTError#number プロパティを見ることで HResult 値を得ることができます。

一般的に、HResult 値は 16 進数文字列で表示されますが、WinRTError#number プロパティには値を符号付 32 ビット整数値として解釈された数値が入っています。 ユーザーに表示する場合 (HResult 値をユーザーに表示するのがいいかどうかは謎ですが)、HResult 値を符号無 32 ビット整数値として解釈して 16 進数文字列に変換して表示すべきです。 そのための関数がライブラリに含まれています。

if (err instanceof WinRTError) {
    var hresultHexStr = WinRSJS.HResults.convertHResultStyleFromInt32To8DigitHexStr(err.number);
    // 必要に応じて hresultHexStr をユーザーに表示。
}

HTTP 通信に関する機能

application/x-www-form-urlencoded 形式の POST リクエストを投げるための機能も含まれています。 WinRSJS.HttpUtils.postWwwFormUrlEncodedContent(uriStr: string, data: { [key: string]: string; }) メソッドです。

Google Analytics のクライアント

Google Analytics のクライアントとして WinRSJS.GoogleAnalytics.GAClient クラスが含まれています。

var gaClient = new WinRSJS.GoogleAnalytics.GAClient("tracking_id", "app_name", "app_version", "client_id");
// Send Appview.
gaClient.sendAppview("screen_name");
// Send Event.
gaClient.sendEvent("category", "action", "label");

是非ご利用ください

最近 MADOSMA がリリースされましたしもうすぐ Windows 10 がリリースされて Windows ストアアプリも便利になりますし、この機会に Windows / Windows Phone アプリを開発してみようという方は是非ご利用ください!

フィードバック等頂けると嬉しいです。

*1:いろいろ調べた結果できないという結論に達しましたが、もしかしたら実はできるのかもしれません。