独自の Windows ランタイム コンポーネントの作成による優れた Metro スタイル アプリ開発

Windows 8 では、プラットフォームを完全に刷新することによって、開発者の皆さんがそれぞれ知識を培ってきたプログラミング言語とテクノロジを使って、デバイスやフォーム ファクターに最適化されたアプリを開発できるようになりました。1 つのアプリ内でさらに簡単に複数の言語を使うための方法が Windows ランタイムです。たとえば、独自の Windows ランタイム コンポーネントを C++ で作成することで、Xbox 360 コントローラーと対話できる優れた Metro スタイル アプリを HTML と JavaScript で開発することができます。また、再利用可能な XAML コントロールを作成して Windows ランタイム コンポーネント経由で公開し、C++ と C# の両方で記述された Metro スタイル アプリですぐに利用することができます。妥協することなく自分の専門言語を使えるというのが、Windows 8 プラットフォームのアプリ開発が備える基本的な特長です。 このブログ記事では、独自の Windows ランタイム コンポーネントを作成するために必要な知識について説明します。 基本的事項 多様な言語の選択を可能にする中心的な存在が Windows ランタイムです。Windows ランタイム経由で公開することによって、JavaScript、C++、C#、Visual Basic から通常どおりの自然な方法で呼び出すことができます。この基盤を、独自の API を開発する場合にも利用できます。 皆さんが作成してアプリ内にパッケージ化する Windows ランタイム コンポーネントは、Windows 8 プラットフォームに既に組み込まれているファースト パーティ コンポーネントと区別して、一般にサード…


Windows ランタイムの非同期性により高速で滑らかなアプリにする

人間はもともと非同期な生き物です。このことは、私たちがアプリの反応に何を期待するかに直接影響を与えます。Windows ランタイム (WinRT) では、高速で滑らかな Metro スタイル アプリを構築するための一級市民としてこの非同期性が採用されています。Metro スタイル アプリを構築する場合、ある時点で非同期コードを記述する必要があります。この記事では、WinRT で非同期プログラミングがなぜ非常に一般的になっているかについてお話しし、アプリで非同期プログラミングを使用する基本的な方法やそのしくみの背景について説明します。 高速で滑らかなアプリは反応性が高くなければならない Windows アプリを使っていて応答が止まったことや、アプリがグレー表示になってドーナツ型のカーソルが回転したことは何回くらいありますか。間違いなく、予想される最悪の時間に思えます。さらに悪いことに、このような状況に陥ると、努力してきた作業がたくさん失われてしまう可能性があります。 ユーザーは、アプリがすべての対話的操作に応答することを期待します。お気に入りのニュース閲覧アプリを使うとき、ニュース フィードを追加したり、新しい記事を読んだり、新しい記事を保存したりします。アプリがインターネットから最新の記事を取得しているときでも、ユーザーがこれらの操作をすべて行うことができる必要があります。 これは、ユーザーがタッチを使ってアプリを操作しているときは特に重要です。ユーザーは、アプリが “指に吸い付かない” ことに気付きます。パフォーマンス上の小さい問題でも、ユーザー エクスペリエンスが低下し、高速で滑らかな感覚が失われる可能性があります。 ユーザーの入力時にアプリの応答が停止する場合、アプリは高速で滑らかとは言えません。では、アプリが応答を停止するのはなぜでしょうか。主な理由は、アプリが同期的であるということです。ある処理が終わるのを待っているとき (インターネットからデータを取得するなど)、ユーザーの入力には応答できません。 最近のアプリの多くは、ソーシャル Web サイトに接続したり、クラウドにデータを保存したり、ハード ディスク上のファイルを操作したり、他のガジェットやデバイスと通信したりします。これらの要因によって予測できないレイテンシが生じると、高速で滑らかなアプリの作成が難しくなることがあります。正しく構築しないと、アプリが外部環境の待機に使う時間が長くなり、ユーザーのニーズへの応答に使う時間が短くなります。 私たちが Windows ランタイム (WinRT) の API を設計し始めた頃、いつでもつながるこの世界に対応することが中心的な原則でした。高速で滑らかなアプリにつながる強力な API サーフェスを既定で提供することが重要と感じていました。 これらの目標を達成するため、Windows ランタイムで I/O にバインドされる可能性がある多くの API を非同期にしました。同期的に記述した場合、視覚的なパフォーマンスが低下する可能性が高いものがあります (実行に 50 ミリ秒以上長く時間がかかる可能性があるなど)。API へのこのような非同期アプローチにより、高速で滑らかなコードを既定で記述できるようになり、Metro スタイル アプリ開発におけるアプリの応答性の重要性が高まります。 非同期パターンに慣れていない方は、WinRT の非同期性を、ある人に電話越しにコールバック番号を教えることに置き換えてみてください。その人にコールバック番号を教えて電話を切り、必要な他の仕事を続けます。その人があなたと話す準備ができたら、教えてもらった番号であなたにコールバックできます。これが WinRT における非同期性の本質的なしくみです。 WinRT の非同期的な性質についてよく理解するため、まずこれらの非同期 API を直接的な方法で使う方法を見てみます。次に、WinRT に導入された非同期プリミティブ…