promise の概要 (JavaScript による Windows ストア アプリ向け)

Windows ストア アプリを JavaScript で記述する場合、非同期 API を含む処理を記述しようとすると、その種類にかかわらずすぐに promise (英語) と呼ばれるコンストラクターに遭遇します。間もなく、連続する非同期操作で自然にプロミスのチェーンを使うようになります。 また開発作業の中では、実際にどのような処理が行われているか完全には理解できないような promise の使用方法に出会うことも珍しくありません。そうした例が、HTML ListView のパフォーマンス最適化のサンプル (英語) にある、ListView コントロールのアイテム レンダリング関数の最適化です。これに関する記事も今後公開する予定ですが、//build 2012 で Josh Williams 氏が説明した WinJS の Deep Dive (英語) も参考になります (多少変更されています)。 list.reduce(function callback (prev, item, i) { var result = doOperationAsync(item); return WinJS.Promise.join({ prev: prev, result: result}).then(function (v) { console.log(i + ", item: " +…

1

ListView の項目レンダリングの最適化

コレクションを利用する JavaScript を使って作成された Windows ストア アプリの場合、アプリのすばらしいパフォーマンスを実現するには、通常、WinJS ListView コントロール (英語) とのスムーズな連携がきわめて重要です。これは意外なことではなく、数千個にもなり得る項目の管理と表示を処理する場合、項目に対するすべての最適化がものを言います。最も重要なことは、各項目がどのように表示されるか、つまり、ListView コントロール内の各項目がどのように、また、どのタイミングで、DOM によって組み立てられ、アプリの一部として表示されるかです。実際、このプロセスの “タイミング” の部分は、リスト内ですばやくパン操作を行った場合に、そのスピードに遅れずにリストの表示が変わることが期待されている場合は、特に重要な要素になります。 ListView 内でレンダリングされる項目は、HTML で定義された宣言型テンプレートか、リスト内の項目ごとに呼び出されるカスタムの JavaScript “レンダリング関数” によって処理されます。宣言テンプレートを使う方法が最も簡単ですが、このプロセスに対して特定の制御を行う場合の自由度は限られます。一方、レンダリング関数を使うと、項目ごとにレンダリングをカスタマイズでき、HTML ListView パフォーマンス最適化のサンプル (英語) に実装されているように、複数の最適化が可能です。この関数では、次のような最適化を実現できます。 項目データと表示要素の非同期配信の実現。これには、基本のレンダリング関数を使用します。 ListView の全体的なレイアウトを決めるために必要な、項目の形状の作成と、内部の要素との分離。これには、プレースホルダー レンダラーを使用します。 以前作成した項目要素 (とその子) のデータを置き換えて再利用。要素作成の大半のステップを省略できます。これには、プレースホルダー再利用レンダラーを使用します。 項目が表示され、ListView のパン操作のスピードが落ち着くまで、イメージの読み込みやアニメーションなど、負荷の高いビジュアル操作の遅延。これには、多段階レンダラーを使用します。 同じビジュアル操作をまとめて、DOM の再レンダリングを最小限に抑制。これには、多段階レンダラーを使用します。 この記事では、上記の全ステージを取り上げ、各ステージが ListView の項目レンダリング プロセスとどのように連携するかを説明します。お察しのとおり、項目をレンダリングするタイミングの最適化には、非同期操作、ひいては promise を多用します。したがって、この記事を読み進むにつれて、promise 自体の理解も、このブログの前回の記事「promise の詳細」(英語) の知識からさらに深めることができます。 すべてのレンダラーに言えることですが、常に、中心となる項目のレンダリング時間 (遅延操作を除く) を最小限に抑えることが重要です。ListView の最終的なパフォーマンスは、ListView の更新と画面の更新間隔がどの程度同期するかに大きく左右されるため、1 つの項目レンダラーで数ミリ秒余分にかかると、次の画面の更新までの間の ListView 全体のレンダリング時間が増大し、結果としてフレーム落ちや画面の乱れが発生します。つまり、項目レンダラーは、JavaScript コードの最適化を図る場合、本当に有効な領域です。 基本レンダラー まず、項目レンダリング機能…

0

Game On Virtual Event にご参加ください

ゲームは、Windows ストアにおける重要なアプリの 1 つです。Windows ストアのゲーム開発の方法を模索している皆様に、ゲーム開発支援を目的とした仮想イベントをお知らせいたします。これは、初めての開発者にもプロの開発者にも役立つ、参加無料のイベントです。 本イベントでは、YoYo Games の GameMaker: Studio (英語) を使って、高品質なゲームをかつてないスピードで開発、公開する方法をお伝えします。GameMaker:Studio には豊富な設計オプションが組み込まれ、各ツールはドラッグ アンド ドロップで操作できるので、ゲームのアイデアがなくても、また開発経験を持たない方でも開発を始めることができます。もちろん、プロフェッショナルの皆様の要求に応える高度なツールも備えておりますので、独自のゲーム エクスペリエンスの開発に挑戦していただくことができます。 このオンライン イベントは 6 月 15 日午前 10 時 (太平洋夏時間) に開催されます。ローンチ セッションとライブ チャットで幕を開け、さまざまなゲームの種類、基本的なゲームにグラフィック、レベル、サウンドを追加する方法、ゲームにオリジナリティを加える方法などを紹介していきます。サポートは 1 週間にわたり継続され、GameMaker フォーラムを通して 1 対 1 のサポートが提供される予定です。 学生の皆様、開発を初めたばかりの方、経験豊かなプロフェッショナルの皆様は、ゲームの開発を開始、アップロードし、Windows ストアに公開するために必要なすべての情報を、イベントを通して学ぶことができます。イベントの詳細、登録方法、無料のツールとリソースに関する情報については、http://msdnevents.com/gameon/ (英語) をご覧ください。 –Robert Rodriguez-Lawson、シニア コンテンツ パブリッシング マネージャー、Windows 開発者コンテンツ チーム

0

資格情報保管ボックス: Windows ストア アプリのユーザー名とパスワード処理のソリューション

Windows ストア アプリで使用できる資格情報保管ボックスついてご存知なければ、ここでぜひ知っておいてください。理由は、資格情報保管ボックスを使うと、ユーザー資格情報の格納と取得の作業を簡略化できるだけでなく、資格情報を安全に格納でき、ユーザーの Microsoft アカウントと合わせて “無料で” ローミングできるからです。 たとえば、メディア ファイルやソーシャル ネットワークなど、保護されたリソースにアクセスするサービスに接続するアプリがあるとします。サービスを利用するには、ユーザーごとにログイン情報が必要です。そこで、ユーザーのユーザー名とパスワードを取得し、それを使ってサービスにユーザーをログインする UI をアプリに組み込みました。すべてがスムーズに機能しています。 今度はさらに、ユーザーの利便性を考えて、アプリを使うたびにログインしなくても済むようにログイン情報を安全に格納したいと考えました。そこで、資格情報保管ボックスの出番です。資格情報保管ボックス API を何回か呼び出すだけで、ユーザーのユーザー名とパスワードを格納し、ユーザーが次にアプリを開くときに、簡単に格納した情報を取得して、自動でユーザーのログインを処理できます。 安全な保存スペース アプリにとっての資格情報保管ボックスの最大のメリットは、ユーザー資格情報が安全な場所に格納されることです。資格情報は、ディスク上に格納されるとき、暗号化されます。もちろん、アプリに使うユーザー資格情報をファイルに保存してローカルの保存スペースに格納することもできますが、ユーザー資格情報をプレーンテキストで格納すると、大きなセキュリティ ホールになります。ユーザーのシステムが何かの形で侵害された場合、ユーザーのユーザー名とパスワードにアクセスして操作することは簡単です。ユーザー名とパスワードが資格情報保管ボックスを使って格納されていれば、悪意のあるソースは暗号化されたファイルを入手するのが関の山です。 資格情報保管ボックスは各 Windows PC ユーザーに一意であり、資格情報を格納したアプリしか、その資格情報にアクセスできません。つまり、その特定のアプリのために格納した資格情報以外は取得できません。同様に、他のアプリは、この特定のアプリによって資格情報保管ボックスに格納されている資格情報にはアクセスできません。 資格情報のローミング ユーザーに提供できるもう 1 つのメリットは、資格情報保管ボックスを使ってユーザー名とパスワードを格納すると、格納された資格情報はユーザーの Microsoft アカウントと共に、ユーザーがその Microsoft アカウントを使う限りどの信頼済みコンピューターにもローミングされることです。その結果、ユーザーの Microsoft アカウントに関連付けられていて、アプリがインストールされていれば、どの信頼済みコンピューターからでも、ユーザーはアプリに自動的にログインできる (ユーザーに資格情報の入力が求められない) ため、セキュリティで保護されたアプリはユーザーにとってさらに便利なものになります。 ドメイン アカウントの場合は、処理が少し異なります。Microsoft アカウントを使って格納されている資格情報があり、そのアカウントをドメイン アカウント (仕事で使うアカウントなど) に関連付けている場合、資格情報はそのドメイン アカウントにローミングされます。ただし、そのドメイン アカウント使ってサイン オンするときに追加された新しい資格情報は、ローミングされません。これにより、そのドメイン固有の資格情報が、ドメイン外部に知られないようにしています。 ユーザー資格情報の格納 資格情報保管ボックスへのユーザー資格情報の格納は、簡単な 2 ステップのプロセスです。最初に、Windows.Security.Credentials 名前空間の PasswordVault オブジェクトを使って、資格情報保管ボックスへの参照を取得します。次に、アプリの識別子、ユーザー名およびパスワードを保持する PasswordCredential オブジェクトを作成し、このオブジェクトを PasswordVault.Add() メソッドに渡して、資格情報を資格情報保管ボックスに追加します。 C#…

0

位置情報と Bing マップを使用して位置認識アプリを作成する

ユーザーの位置情報とアプリのビジネス ロジックを組み合わせることによって、天気、クーポン、スポーツ イベント、コンサートの一覧などの情報を、アプリ ユーザーの現在地に合わせて簡単に提供できるようになります。Windows 8 の位置情報機能を Bing マップ SDK と共に使用することで、強力な位置認識 Windows ストア アプリを開発できます。 この記事では、位置情報サービスを使用するアプリが、IP アドレス、Wi-Fi ネットワーク、GPS データのいずれかを使用してその場所固有の情報をユーザーに提供する方法について説明します。位置情報を取得した後は、Bing マップ SDK を使用して現在地を表示します。 位置情報を取得する 位置情報の取得には Windows.Devices.Geolocation 名前空間を使用します。GPS、Wi-Fi ネットワーク、IP アドレスうちどの情報をユーザーの位置情報の取得に使用するかは、主に以下の 2 つの要因がかかわってきます。 要求される精度の正確性: アプリの必要性に応じた最適な精度です。 位置情報データの利用可能性: GPS 機能を搭載していないデバイスがある、または、ネットワークや Wi-Fi 接続が利用できない状況で位置情報が要求される場合があるということです。 適切な精度 位置情報を要求する場合は、アプリが適切な精度を指定して、指定した精度の範囲内で位置情報データが最も速く返されるようにする必要があります。精度のレベルは、位置情報の種類に応じてそれぞれ以下のように異なります。 GPS – GPS は、約 10 m という最も高い精度を提供します。ただしGPS センサーを起動状態にして衛星データを取得し、データを三角測量する場合、詳細な位置情報を返すのに 1 ~ 2 分間かかる場合があります。一方、GPS が衛星との接続を確立した後は、次の位置情報ポイントは最初よりも早く取得されます。もちろん GPS の使用頻度が高くなると消費電力も高くなります。GPS を有効化してデータを取得するには、Geolocator.DesiredAccuracy プロパティを High…

0

Windows デベロッパー センターの新しいエクスピリエンスの紹介

Windows デベロッパー センターの 2011 年 10 月の開設以来、Microsoft では世界中の開発者やデザイナーと連携しながら、アプリ開発者に向けた最適なアドバイスや、アイデア、サンプルのより良い提供方法について取り組んできました。この取り組みでは、非常に多くのアクセスと提供されたフィードバックを基に、ご好評いただいたものと改善する必要があるエクスペリエンスについて検証してきました。 新着情報 Windows チームは、現在も勢いよく成長しているアプリ エコシステムに重点を置いています。これは、優れたアプリ、経済的価値、そして新しいビジネス チャンスという形によって効果が表れます。新しいデベロッパー センターでは、アプリ開発者、デザイナー、ビジネスの連携をサポートし、優れたアプリの開発と Windows ビジネスの成功に役立つリソースを提供します。 これらの目的を達成するために、以下の点を強化しました。 ナビゲーション モデルを変更したことにより、アプリの開発ライフサイクルの進捗状況に応じた関連コンテンツを検索できるようになりました。 サイトのデザインが、上位タスク、シナリオ、新しいコンテンツをハイライトできるようになりました。 また、開発者が必要とするコンテンツ、サンプル、各種ダウンロードに加え、デザイナーやビジネス向けのリソースへのアクセスが簡単になりました。 開発するアプリに応じて、Windows ストア アプリ、Internet Explorer、Windows デスクトップ、および ハードウェアの 4 つの分野ごとにアクセスすることができます。これらのサイトでは、上述した新しく実装されたエクスペリエンスを提供しています。今回の投稿では Windows ストア アプリ特有の変更点について詳しく説明します。 役割にあった最適なコンテンツを どんなに情報豊かな Web サイトでも、探している情報が見つからないと役に立ちません。何十万ものトピックを提供しているデベロッパー センターでは、情報が整理されていることや、必要な情報の見つけやすさがとても重要です。Windows ストア アプリの開発においては、デザイナーやビジネスを効率的にサポートするために必要な情報を集約しておくなど、担当する役割とシナリオに応じた分類が必要不可欠です。主な例は次のとおりです。 開発者 Windows ストア アプリの効果的な開発に必要なコンテンツを簡素化しました。Windows ストア アプリ ホーム ページでは次のことを確認できます。 “主要なタスクとコンテンツ” がわかりやすく表示されているため、必要なコンテンツをすぐに閲覧できます。国または地域固有のイベントや、サイトに新しく追加されたリソースがハイライトされます。 コーディングに役立つ資料のほか、アプリ開発を始めるために必要なすべてのリソースや、アプリを Windows ストアに提出するための詳細なガイドラインをダウンロードすることができます。 重要なコード サンプルはハイライトされ、開発ライフサイクルに沿った視点から手順を分かりやすく説明しています。 “One…

0

ターゲット アプリに対する共有

「Sharing from your app」(英語) では、サンプル アプリ Food with Friends (英語) のコンテンツを複数のターゲット アプリで共有するというアイデアを紹介しました。これらのターゲット アプリによりユーザーは、リッチなエンド ツー エンド シナリオを実現できます。Windows 8 アプリは、皆さんのユーザーが、友達や他のアプリとの間で共有したいと思うような興味深いコンテンツを提供しています。魅力的で優れたデザインの共有ターゲット アプリは、ユーザーのソーシャルな “つながり” のエクスペリエンスの中心になることができます。 この記事では、特に Food with Friends のようなアプリでの共有ターゲット コントラクトの使用方法について考えます。このコントラクトを使用するとアプリは、他のアプリからコンテンツを受信して、そのコンテンツを品質向上に役立てることができます。私たちは、皆さんのアプリをそれぞれのカテゴリで最高のアプリへ導くお手伝いがしたいのです。 ターゲット アプリは、共有ターゲット コントラクト (英語) を使用して構築されており、すばやく簡単に共有を実現できるよう設計されています。Windows のすべてのアプリが共有ターゲットになるわけではありませんが、アプリがコンテンツを発行、変換、格納、または、他のアプリから受信したコンテンツになんらかの方法で価値を追加することができる場合は、共有ターゲットを作成するとメリットがあります。 アプリは常にターゲット アプリのリストに表示されるようになります。アプリはすぐに必要なデータを共有できる他のアプリと関連し、つながります。 共有コントラクトにより、アプリとあらゆるソース アプリの間にブリッジが作成されます。どちらのアプリでも、1 対 1 で統合する必要はありません。 共有チャームが常に OS に存在し、使用可能であるため、ターゲット アプリが OS でアプリの境界を越えて表示されるようになります。これにより、さらに多くのユーザーをアプリに集客することが可能になるでしょう。 共有コンテンツの受信 共有ターゲット アプリで魅力的なエクスペリエンスをどのように提供できるかを示す例をいくつか見てみましょう。 Windows 8 のメール アプリや People アプリについては、既によくご存知かもしれません。メールでは複数の友人のコンテンツを受信して共有できる共有ターゲットの簡単でパーソナルなエクスペリエンスが作成されます。People…

0

NFC を使った最先端のアプリの開発

近距離無線通信 (NFC) は、現在発展しつつある短距離のワイヤレス テクノロジです。NFC を利用すると、ちょうど 2 cm の範囲内で、デバイスどうしを物理的にタップしてコンテンツの送受信を行うことができます。タップすると、何か (またはだれか) をすばやく選択できます。これはすばやいだけでなく、わかりやすい操作でもあります。一度見れば理解できるので、説明書は必要ありません。 たとえば、友だちと一緒に写真を見ているとき、その友だちがあなたの写真をほしがったとします。NFC を使えば、あなたのデバイスを友だちの PC に対してタップするだけで写真を送信できます。この説明は少々単純化しすぎているかもしれませんが、要点は、デバイス間でのコンテンツの共有がシンプルになるということです。 図 1: Nokia 360 スピーカーで Bluetooth ペアリング情報を Windows Phone と共有しているところ Bluetooth や Wi-Fi と同様に、NFC は標準ワイヤレス プロトコルの 1 つで、NFC フォーラム (英語) によって定義されています。NFC を利用するには、PC が NFC 通信機能を搭載している必要があります。Windows 8 PC には、NFC 通信機能が直接組み込まれているものが多くあります。お使いの PC に NFC が搭載されていない場合は、NFC ドングルを購入して PC に装着することもできます。 NFC は便利な機能を実現します。タップして写真を送信したり、レストランでメニューをタップして料理を注文したりできるほか、タップして Bluetooth デバイスをペアリングすることも可能です。これらは互いに大きく異なるシナリオですが、”タップ” して操作を始めるという点が共通しています。NFC…

0

接続された Windows ストア アプリの作成

私たちの周囲には、ネットワークに接続されたデバイスがあふれています。冷蔵庫や洗濯機でさえ、最近ではインターネットやホーム ネットワークに接続できるのです。ですから、アプリも同じようにネットワークに接続したいとエンド ユーザーが考えても不思議はありません。これらの “接続アプリ” は、Web 上の最新コンテンツ (ソーシャル メディア、デジタル メディア、ブログなど、さまざまな種類のコンテンツ) を利用します。接続アプリの開発は標準になりつつありますが、ネットワークの切断、従量制課金接続のコスト、パフォーマンスなどの一般的な問題への対応が課題として残っています。Windows 8 では、接続アプリを今までにないほど簡単に開発できます。 この記事では、Windows ストア アプリのユーザーに、高速かつ滑らかで手間のかからない接続エクスペリエンスを提供するための有効なヒントについてご説明します。 シナリオに合った API を選ぶ 適切なネットワーク機能を選ぶ アプリの動作を従量制課金接続に対応させる ネットワークの状態の変化に対応する コンテンツをキャッシュして滑らかな動作を実現する では、それぞれのヒントについて詳しく説明していきましょう。 適切な API を選ぶ 家を建てようとする場合、適切な道具が必要ですね。釘を打つなら金づち、板を切るならのこぎり、ネジを締めるならドライバーがそれぞれ必要です。同様に、ネットワークに接続される Windows ストア アプリを開発する場合にも、適切な Networking API を使用する必要があります。Windows 8 には、アプリがインターネットとプライベート ネットワークのどちらを介して他のコンピューターやデバイスと通信する場合にも使用できる、さまざまな Networking API が用意されています。したがって、最初のステップは、開発するアプリに必要なネットワーク機能を把握することです。 ネットワークにおける最も一般的なシナリオは、Web サイトにアクセスして情報を取得または保存することです。簡単な例として、Web サイトを使用してユーザー情報やスコアを保存するゲームがあります。もう少し複雑な例としては、REST ベースの Web サービスに接続し、その Web サービスが提供するライブラリを使用して情報へのアクセスや保存を行うアプリがあります。Windows 8 には、Web サービスや Web サイトに接続する API がいくつかあります。アプリでこれらの API…

0

//build/ 2013 の参加登録が開始されました

先週の Steve Guggenheimer による発表のとおり、//build/ 2013 を 2013 年 6 月 26 日~ 28 日にサンフランシスコ Moscone Center で開催いたします。//build/ は、Windows ストア アプリの開発について詳しく知る絶好の機会です。質の高いプレゼンテーション、デモ、情報セッションにご興味に合わせてご参加ください。また、デモを発表し皆様の質問に答えるため、Microsoft エンジニアリング チームの多くがサンフランシスコに集結する予定です。//build/ 2013 は、Windows ストア アプリ開発に関する最も新しく、最も有意義な情報が得られる場所になるでしょう。 参加登録は本日 4 月 2 日より開始いたします。すべての詳細情報と登録については、www.buildwindows.com をご覧ください。 会場でお会いできることを楽しみにしております。

0