Blog


1/22のWindows10の発表をアプリ開発者目線でまとめた

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_1-58-2_No-00_hoge

1/22 2:00(日本時間)から、Windows10の新しい発表がありました。
とりあえずいろいろ変更があったっぽいのでアプリ開発者目線でまとめます。

私は英語全然できないので間違った訳があるかもしれません

 Introduction

Windows10の方向性について言ってました。

  • 発売日? – Last september
  • ユニバーサルアプリがXbox oneにくる
  • OnePlatforn OneStore
  • タッチでスライドすると仮想デスクトップを移動できる
  • More PersonalComputing
    • エクスペリエンスが変わった
    • セキュアで信頼性が高い
    • 自然なインタラクション

Voice,pen,gesture,gaze

  • Windows10Windows8.1,Windows7,WP8.1から無償アップデート(最初の一年のみ)
  • 次週(1月の第4週)に新しいbuild
  • Phoneは2月

3Dモデル

ビデオの中で何回か3Dモデルを表示して触ってるシーンがありました。

Windows10からDirectX12はWindows10のサブセットとなるので3DがAPIからあつかいやすくなるんですかね

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-11-4_No-00_hoge

 

OnePlatform OneStore

これは以前から言われてました。現状、Windows8.1とWindowsPhone8.1ではストアが違うのでいちいち別々にアップロードしなければいけませんが、一回のストア申請でPhoneでもPCでもOKになります。

タッチでスライドすると仮想デスクトップ移動

ビデオでそれっぽい描写がありました。

build9879でタッチして仮想デスクトップ移動できたか覚えてませんがタッチでスライドすると仮想デスクトップ移動できるっぽい

gazeについて

More Personal Copmupingということで、入力デバイスとしてvoice,pen,gesture,gazeが挙げられていました。

中でもひときわきになるのがgaze。

gazeは日本語で熟視するとかいう意味っぽいですが、これは「視線入力」を表してる?んですかね。

現状視線入力のAPIはないので期待できるところだけどどうも視線入力っていまいちできそうな気がしないので僕の聞き間違いかも

無償アップデート(最初の1年のみ)

WIndows7,Windows8.1、WindowsPhone8.1からは最初の1年だけ無償アップデートらしいです。Phoneが無償なのはいいっすね

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-17-25_No-00_hoge

 

 

Windows10のデモ

WindowsPhoneのイベントとかでよく出てくるJoeがWindows10のデモをしていました。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-20-10_No-00_hoge

 

  • デモ
    • スタートメニューと8スタイルのスタート画面
    • Action Centorが右から
    • Action Centorにイメージとかコントロールとかインタラクティブななにかできる
    • キーボード外すと右下押すとフルスクリーンタッチモード
    • キーボードつけて右下押すとデスクトップモード
    • 左スワイプでタスクスイッチもOK
    • 8インチで上下スワイプして閉じると次のアプリに切り替わる
  • Cortana
    • かなり応答が自然な対話?
    • Windows10デスクトップでCortanaうごくよ!
    • Hey CortanaとデスクトップでいうとコルタナにフォーカスあたってなくてもOK
    • 質問応答がちゃんとできてる
    • Notebook というものにユーザーについていろいろ記録してる
    • スポーツニュースアプリから情報だせるってことはなんかのアプリからコルタナに情報を遅れるかも
    • 検索ケイパビリティでドライブとかOneDriveも検索
    • 12月の写真をみせる。検索能力すごい
    • 検索窓にクエリを入力するとアプリとか賢く検索
    • ミュージック流せ→ミュージックアプリ起動→黙れ
    • 対話でアプリ内のタスクをこなしている?
  • Windows10- Phones and tables
    • Action CentorDesktopsyncされる
    • 通知から入力できる?
    • 仮想スペースキーをドラッグするとキーボードフローティングするやん!
    • キーボードに音声入力
    • Windows10用の新しいOffice
    • PhoneWordとか タッチベース
    • Wireless printing
    • UniversalOutlook
    • ListViewLeftSwype RightSwype
    • Same codeOK
    • Calendar APIが活躍するかも?
    • Androidっぽい左からでてくるメニューUI
    • アプリバーてきな概念が上について常にでてるメニューバーになる?
    • OneDrive アプリデータSyncがええかんじ?
    • チャーム廃止?右上にツールバーてきなのがあってそこを押すと右からPane出てきてOK
    • チャームだったもののなかにCortanaある
    • タスクバーにアイコンの大きさが違うのがあるけどWindows10用のアプリはアイコンでかくなる?
    • 3D Model
  • スパルタン
    • SearchBox内にCortanaが介入できるっぽい

 

タッチモードとデスクトップモード

Surfaceでデモされてました。

キーボードをつけてる時は、Windows10のスタートメニューが表示されて

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-20-42_No-00_hoge

 

キーボードを外すとスタート画面になる。

しかしスタート画面かっちょよくなりましたね。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-20-51_No-00_hoge

 

ActionCentor

Windows10の通知センターことActionCentorの表示が新しくなってました。

右からスッと出てくる感じ

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-21-43_No-00_hoge

 

ActionCentorの中に、ImageとかTextBoxとかが出てるデモがありました。

つまり、WindowsRuntimeからActionCentorに干渉できるAPIが出そうな気がします。

XAMLでUI定義して、ActionCentorに置くことができるようになるんですかね。

ActionCentorにUIを置くことができれば、いちいちアプリを立ちあげなくてもActionCentorからちょっとしたタスクなら実行できそうです。

 

右下タップでモード切り替え

ウインドウの右下をタップするとデスクトップモードとタッチモードが切り替わってました。

右下タップで

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-23-5_No-00_hoge

 

フルスクリーンに

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-23-9_No-00_hoge

 

今まで右下タップでなにか起こることはなかったのでおもしろいです。

アプリのコードからデスクトップモードとウインドウモードの判定ができそうな気もしますね。

 

Cortana

Windows10の最大の進化といえばCortanaだと個人的に思います。

発表の非常に多くの時間をCortanaに割かれていました。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-28-17_No-00_hoge

 

Windows10のCortanaはどこにあるかというとタスクバーのここ。リーク情報どおりでした。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-30-23_No-00_hoge

 

Joeが「Hey Cortana」としゃべると、CortanaにフォーカスがあたってないのにCortanaが起動しました。AndroidのOK Googleと似てる

 

Cortanaと対話することでメールを送信するタスクをこなすデモがありました。

これがもしWindowsRuntimeから操作できるなら、独自のアプリでCorntanaと対話することで何かタスクを実行するアプリを作れるかもしれませんね。

現状iOSもSiriとの対話でメールを送信できますが多分あれAppleの特定のアプリじゃないとできなかったはずなのでWindowsでもできない気がしますが。

 

現状、Cortanaの操作はWindowsPhone8.1のみでVoice CommandをXMLで定義して、Cortanaに話しかけてアプリ起動もしくはパラメータ渡して起動とかぐらいしかできないのでCotranaともう少し対話できるアプリ作成できるようなAPIほしいですね。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-39-37_No-00_hoge

 

アプリを閉じる動作でアプリが切り替わる

現状、アプリを上から下にスワイプするとアプリが閉じられ、スタート画面に戻りますが、デモではアプリを閉じると別のアプリにタスクスイッチしてました。

 

Phoneの壁紙設定できる

現状、タイルの背景画像は変更できますが、デモではタイルの裏側の背景画像を変更してました。

ホントPhone8.1が黒歴(ry

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-42-17_No-00_hoge

 

 

コントロールパネルについて

長らく進化を遂げてなかったコントロールパネルですが進化してました。(UIが)

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-22-28_No-00_hoge

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-43-13_No-00_hoge

 

 

Phoneの通知

Phoneの通知でもデスクトップ同様に通知バーからメッセージを返信してました。

XAMLで書けるようになるといいなぁ

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-44-12_No-00_hoge

 

フロートキーボード

仮想キーボードのスペースキーをドラッグすると、キーボードが動く!!(やったね!)

キーボードに音声認識

キーボードの上に音声認識ボタンが付いてて音声入力

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-44-38_No-00_hoge

 

新しいOffice

Word2013っぽいUIの新しいOfficeのデモがありました。

現状WIndowsPhoneよりiOSのOfficeのほうが使える謎状態を打破するかもしれない

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-48-44_No-00_hoge

 

ListViewの左右スワイプ動作

デモではListViewのItemを左右にスワイプすることでフラグを立てたり、削除したりしてました。

あれ?このUIどこかで(ry

(イメージ的にはiOSの標準メールアプリと一緒)

カレンダーコントロールっぽいなにか

カレンダーめっちゃよくなってました。

これXAMLコントロールで提供されるんですかね?

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-55-27_No-00_hoge

 

新しいユニバーサルアプリのUI

かなり気になったのが、新しいアプリのUIです。

下図の水色の部分を見ると、タイトルバーっぽいものがあります。戻るボタンもある。

Windows8.1ではもっと戻るボタンとかタイトルとかデカかったのですが、スッキリとまとまりました。

そして下図の赤色の部分。

何やらツールアイコンっぽいものが数個並んでいます。

あれ?これアプリバーのしごとじゃね?ってかんじですが、アプリバー廃止の可能性が濃厚です。

build9879ではマウスでチャームがめっちゃつかいにくかったですが、下図右上の赤枠部分みたいな感じで使いやすくなりそうです。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-58-28_No-00_hoge

 

 

新しいブラウザスパルタン

なんか検索ボックスにCotranaいたりしますがこれSearchBoxコントロールにCortana介入できるようになるんですかね

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-7-7_No-00_hoge

 

 

タスクバーのアプリアイコンの大きさの違い

なんかよく見てみると、タスクバーにあるアプリアイコンの大きさが違います。

なにこれ?Windows10用にビルドしたらこんなアプリアイコンにできるんですかね

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-14-3_No-00_hoge

 

 

ゲーム

ゲームに関してもかなり言及されていました。XBox Oneと統合すると長らく言われていましたがついにきそうです。

  • Gameing is Personal
  • もっとソーシャルでインタラクティブになるで
  • XBOXアプリでFliendMessaging
  • マイクラの動画シェアしてる
  • マウスでいい感じに
  • Win+G →ゲームクリップを保存
  • DirectXWindows10のサブシステムになる
  • DirectX12 11よりもハイパフォーマンス
  • UnityとかUnrealといい感じに接続?
  • Xbox live連発してるから今度こそAPIから干渉できるようにしてほしい
  • Xbox onetWindows10クロスプレイ
  • Xbox streaming
  • New ways game make better

XBoxアプリ

XBoxアプリからゲームの動画をシェアしたり、フレンドにメッセージを送ったりできるらしい。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-14-52_No-00_hoge

XBox live

ひたすらXBox liveの単語を連発してました。

現状XBoxのソーシャル部分に絡もうとするゲームはXBoxコンパニオンな会社じゃないとできないですが個人開発者にも提供してほしいなぁ

DirectX12

現状、DirectX11ですが、バージョンアップです。

おそらくWindows10のAPIのサブセットとして提供されるのでつかいやすくなるかな?

build9879のwinmdファイルのdiffをとってみるとWindows.Graphics名前空間にDirectXの名前があったりするんですけどね..

 

new ways to make games better

この文が一番きになりました。

ゲームを作る新しい環境、ちゃんと整備してほしいですねぇ

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-28-20_No-00_hoge

 

 

Surface Hub

  • デカタブレット?
  • One note designed large screen
  • 会議用?
  • Skype for Business (Lyncの入室音)
  • 84インチ

 SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-32-10_No-00_hoge

企業の会議向けっぽい84インチのデカタブレットなのでぶっちゃけどうでもいいけど一度は触ってみたい感じ。

タッチで3Dモデル回転とか

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-34-23_No-00_hoge

Microsoft Hololens

MS製Oculusみたいな感じ。

オキュラスよりもちょっとメガネっぽい。

この中にCPUとGPUのってるっぽいのでこのアプリつくれるならちょっと期待ですね。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-49-20_No-00_hoge

 

ホログラム

かなりVRとホログラムについて言ってました。

Microsoftも仮想ワールドとリアルワールドを結びつけることに今後力をいれそうですね。

ちゃんとデモで動いててすごい

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_3-59-28_No-00_hoge

 

 

まとめ

いい感じに進化してると思います。

もうすこし開発者視点でも言及してほしかったですが、まあ今回はWindows10のお披露目ってことでまた別の機会に新しいAPIの発表あるんすかね。

 

やっぱり気になったのは新しいユニバーサルアプリのUIです。

ユニバーサルアプリはVisualStudioがデフォルトで提供するプロジェクトテンプレートにUIが依存するので

Windows10ではユニバーサルアプリを作成するとき、このような感じのUIに統一されるのかなーとか思いました。

SnapCrab_Windows 10 The Next Chapter - Internet Explorer_2015-1-22_2-54-59_No-00_hoge

 

あとCortana。

日本語に是非とも対応してほしいですが、Windowsは日本でもたくさん売れているので確実に日本語対応してくるとおもいます。

そこでAPIを立たけるようになったら、ついに音声入力によるおもしろいアプリがたくさん出るようになるんですかね。




REST APIでデータを挿入するには

REST API

Azure Mobile Servicesでは、Clientライブラリが使えない場合、Http通信で操作できるようにREST APIが用意されています。

データを挿入するには

に向かってjsonコンテンツをPOSTします。

 

要求ヘッダー

REST APIでは必要なヘッダーコンテンツを指定してPOSTすることでMobileServicesにアクセスすることができます。

REST APIのリファレンスのサイトに必要項目が書いてあります。

http://msdn.microsoft.com/ja-jp/library/azure/jj677200.aspx

要求ヘッダー 必須項目
Accept × このヘッダーには、application/json を設定します。
Content-Length 要求本文の長さ。
Content-Type × このヘッダーには、application/json を設定します。
X-ZUMO-APPLICATION 条件 モバイル サービスのアプリケーション キー。テーブル操作へのアクセスに必要な場合は、有効なアプリケーション キーを指定する必要があります。これは既定のテーブル操作のアクセス権です。
X-ZUMO-AUTH 条件 認証されたユーザーのためのサービス生成された認証トークン。テーブル操作へのアクセスが必要な場合は、認証されたユーザーのためのトークンを指定する必要があります。
X-ZUMO-MASTER 条件 サービス マスター キー。テーブル操作へのアクセスに管理者アクセスが必要な場合は、このキーのみを含める必要があります。

 

X-ZUMO-APPLICATIONですが、モバイルサービスへのデータ挿入をアプリケーションキーを持っている場合のみにしている場合していする必要があります。

すべてのユーザーがデータ挿入可能にしているならば必要ありません。

SnapCrab_NoName_2015-1-20_7-16-43_No-00

 

.Netのサンプル

System.Net.HttpClientを利用した場合以下の様なコードでデータを挿入することができます。

テーブル名は「testtable」、モバイルサービス名は「testgarimobile」でjson形式でコンテンツを送信します。

SnapCrab_NoName_2015-1-20_7-18-56_No-00

 

 

レコードの挿入操作

http://msdn.microsoft.com/ja-jp/library/azure/jj677200.aspx




Streamによる入出力

Streamとは

テキストファイルのデータを読み込むとき、WindowsRuntimeではこのようなコードでデータを読み込むことができます。

FileIOのReadTextAsyncの1つのメソッドでファイルのすべてを読み込むことができるので非常に便利です。

しかし、このテキストファイルが非常に巨大だった場合どうなるでしょうか。

 

ReadTextAsyncは非同期メソッドですがいつまでも非同期読み込み処理が終わらず、巨大なデータのすべてが必要でない場合余計なデータまで読み込むためアプリのレスポンスが悪くなります。

ファイルの読み込みもそうですが、動画のネットワークデータ転送などの場合、すべてのデータを転送しないと動画を再生できないようなアプリケーションは非常に非効率的です。動画を現在転送できているデータ分だけ再生できるようにすべきです。

 

そのような問題を解決するために、WindowsRuntimeではStreamという概念を用意しています。(.Netでもあります)

Streamとはデータが流れてくる川のようなもので、データを徐々に読み取ったりデータの一部だけ切り取って読み取ることができたりします。

13

 

 

先ほども書いたように、ファイルの読み取りやネットワークデータ転送などのI/Oですべてのデータを転送しきってからじゃないと読み取れないのは非効率なのでStreamのインターフェースはさまざまな入出力で用意されています。

 

WindowsRuntimeのStream

WindowsRuntimeで用意されているStreamは以下の4つがあります。

  • IInputStream
  • IOutputStream
  • IRandomAccessStream
  • InMemoryRandomAccessStream

IInputStreamはストリームからメモリへの読み込みStreamを提供し、

IOutputStreamはメモリからストリームへの書き込みStreamを提供します。

IRandomAccessStreamは以下の継承関係の図のように、IInputStreamとIOutputStreamを継承、つまり読み込みと書き込みを提供します。

InMemoryRandomAccessStreamはメモリ内からメモリ内へのストリームに限定したStreamを提供します。

 

 

 

14

 

IInputStreamの実装を見てみます。

15

 

ReadAsyncメソッドのみを提供しています。

つまり、「何バイトを読み込む」ことしかできません。ReadAsyncを呼び出すたびにその数のバイトずつStreamから読み込むことができるので逐次的な読み込みを提供します。

 

IOutputStreamの実装を見てみます。

16

WriteAsyncとFlushAsyncの2つのメソッドを提供します。

WriteAsyncはそのバッファのデータ分だけStreamに逐次的に書き込みを行います。

FlushAsyncメソッドは少し特殊なメソッドでほとんど使用することがありません。

Windowsはストリームからデータを書き込むときに内部バッファにデータをキャッシュします。内部バッファがいっぱいになったときか、一定時間内部バッファにアクセスがなかった場合、内部バッファのデータを書き込みます。

つまり内部バッファがデータを保持しているときにシステムがダウンするとファイルにデータが書き込まれないわけです。

そこで重要なデータの場合、FlushAsyncメソッドを使用することで内部バッファのデータをファイルに即座に書き込みます。

 

しかし本当に重要なデータ以外でFlushAsyncメソッドを頻繁に使用するとアプリのパフォーマンスが低下してしまうためほとんどのアプリでFlushAsyncを使用する必要はありません。

 

IRandomAccessStreamの実装を見てみます。

IInputStreamとIOutputStreamはデータの逐次的な書き込みか読み込みを提供します。しかし「データのここからここまでを書き込みたい」とか、「データの最後何バイトだけ読み込みたい」みたいなことを実現することができません。

 

その機能を提供するのがIRandomAcccessStreamです。

IRandomAccessStreamはSeekメソッドを提供し、ストリームの好きな位置まで移動することができ、好きな位置からデータを読み込み、書き込みすることができます。まさにランダムアクセスが可能なわけです。

17

 

 

ストリームのサンプル

ではストリームによるファイル読み込みと書き込みの簡単なサンプルを見てみましょう。

“ABCDEFG”7文字のデータ、つまりASCIIエンコードで7バイトのデータをファイルに書き込みます。

StorageFileのOpenAsyncメソッドでFileAccessModeをReadWriteにすると、読み込みと書き込みどちらもできるストリームを取得することができます。

WindowsRuntimeでストリームに書き込むためにはIBuffer型にしなければいけないので変換し、データを書き込みます。

 

データサイズをみてみると、7バイトすべて書き込めていることがわかります。

18

 

 

では次にこのファイルをストリームで読み込んでみましょう。

IRandomAccessStreamのReadAsyncメソッドの第二引数に読み込むバイトサイズを指定します。

今回は7バイトすべてを読み込んで出力してみます。

 

“ABCDEFG”の7バイトすべてを読み込むことができました。

19

 

 

ではストリームの機能を生かして3バイトから6バイトまでの4バイトを読み込んでみましょう。

Seekメソッドを使用することで指定バイトまでカーソルをシークすることができます。

ReadAsyncでカーソルの位置から4バイト読み込みます。

つまり、3バイトから4バイトまで読み込むランダムアクセスによる読み込みです。

結果、CDEFの4バイトを読み込むことができました。

20

 

 

DataReaderとDataWriter

ストリームを使って読み込んだり書き込んだりするにしても、double型のデータとかstring型のデータとか、いちいちIBufferに変換したりするのは面倒です。

そこでストリームにintやdouble、stringなどの標準データ型を書き込みやすくするためにWindowsRuntimeではDataReaderとDataWriterを提供しています。

 

DataWriterは内部バッファという内部にデータを保持する領域を持っています。

Write**から始まるさまざまなメソッドがありますが、すべて内部バッファに書き込むために存在しています。

23

 

そしてStoreAsyncメソッドを実行することで初めてファイルに内部バッファからデータがストリームに書き込まれます。

21

 

 

DataReaderも同様に内部バッファを保持しています。

LoadAsyncメソッドはStreamから指定したバイトだけ内部バッファに読み込みます。

内部バッファに読み込んだデータは、Read**から始まるさまざまなメソッドによって標準型に変換することができます。

24

つまりLoadAsyncを実行したあと、Read**メソッドを実行することでデータを読み込むことができるわけです。

22