30
わんくま同盟 名古屋勉強会 #25 2012/12/1 BluewaterSoft biac Windows 8 ストア ・アプリ / Windows Phone 8 アプリ 両面 撃破作戦

わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

Embed Size (px)

DESCRIPTION

サンプルコードは SkyDrive にあります。 http://t.co/Z9DnR4ho

Citation preview

Page 1: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

2012/12/1BluewaterSoft

biac

Windows 8 ストア・アプリ / Windows Phone 8 アプリ、

両面撃破作戦

Page 2: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Windows 8 と Windows Phone 8

• 同じアプリを作る!

例: 「クラウディアさんタイマー」※両方ともストアに公開済み

Page 3: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Windows 8 と Windows Phone 8

• できるだけコピペしたくない!!

• それじゃ、コードは!?

「クラウディアさんタイマー」では、画像と音声のリソースは、リンクして使った。

・画像と音声は Win8 のプロジェクトに置いた。・WP8 のプロジェクトからは、リンクして取り

込んだ。

【本日のテーマ】

・どちらからも使える DLL を作る (=PCL)・ソースコードをリンクして使う

Page 4: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

自己紹介著書

「速攻入門 C#」 (2012/3)技術評論社、共著「ソフトな彼女とハードな彼氏。」(2012/3) アジャイルマインドvol.1 掲載

記事連載 「C#でTDD入門」

CodeZine週刊連載「WinRT/Metro Tips」

@IT - .NET開発者中心…etc.

biac (山本 康彦)

BluewaterSofthttp://www.bluewatersoft.jp/

• 名古屋大学工学部(修士)• HONDA R&Dで自動車設計• 1994~ ソフトウェア業界• 2012~ BluewaterSoft

ソフトウェア開発

Windows 8 Metro Style App.Windows Phone 8…Windows系の最新技術

TDD(コーディング技法)の普及

著作

Page 5: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

自己紹介 (続き)

• 最近は、こんなアプリを書いてます

5

・青空文庫リーダー・ライト・クラウディアさんタイマー・bwNotepad: 簡易メモ帳・bwDevTools: Metro Color Chart

Windowsストアで公開中!!

Page 6: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

かつて Metro と呼ばれていた何か⇒ "Windows 8 ストア・アプリ"(?)

• Windows 8

• Windows RT

• Windows Phone 8

Page 7: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

ん!?

「Windows RT」って、ナニ?

• プログラマ的には…

Windows Runtime の略

• Metroスタイル・アプリの開発に使うAPIセット。

• 実体はCOM

.NETから使いやすい仕掛けが付いた。Windows APIの再創造だと思ってもいい。

• 商品名としては…

ARM用の Windows 8

• ARM CPUで動くWindows 8

• Metroスタイル・アプリとOffice 2013のみ。ユーザーには、ネイティブアプリのインストールを許さない。

• Windows Phone 8 のOSは、Windows RTベース。

Page 8: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

開発環境

• Windows 8 (必須)

• Visual Studio (必須)

・Express (無償) で OK

・Windows Phone 8 は、SDK を別途インストール(Express もアリ)

• 開発者アカウント (必須)

年会費Windows 8 4,900円 (個人)

Windows Phone 9,800円※キャッシュカード必須

• お、お金が・・・ orz

• 学生なら! (高専、大学等)⇒ DreamSparkプログラム

http://t.co/fdunBKad

• 設立 3年以内のベンチャーなら!⇒ BizSpark プログラム

http://t.co/GqDpfCog

どちらも、開発ツールとアカウントが無料に!!

Page 9: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Win8 Metro アプリの作り方 (ざっくりw

• .NET プログラマー向き

XAML + C# (VB)

• C++も使えるDirectX 使うには C++ 必須

• サンプルコード等は、C# C# C# C# C# C# C# ・・・VBは不利

• Web プログラマー向き

HTML + JavaScript

• ただしクラスライブラリは、C# 等で作る必要がある

• ごめん、C#er には JavaScript

でのコーディングはタルすぎて・・・JavaScriptの偉い人にお任せ!

※ WP8 もやるなら、JavaScript は無い。

Windows Phone API reference

http://msdn.microsoft.com/library/windowsphone/develop/ff626516

Page 10: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Windows Phone 7 と 8 の比較

http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2012/06/20/announcing-windows-phone-8.aspx

WP 8 WP 7.x

OSカーネル

Windows RT(ARM版Win8)

CE 6.0

画面解像度800 x 4801280 x 7201280 x 768

800 x 480

RAM512MB1GB

256MB512MB

開発MetroXNA

SilverlightXNA

Windows Phone 8

Page 11: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

世界スマートフォン市場シェア推移予測 (2012年/2016年)出典: IDC Worldwide Quarterly Mobile Phone Trackerhttp://www.itmedia.co.jp/news/articles/1206/07/news077.html

ところで、Windows Phone って、どーよ!?

※ 予想した会社によってバラつくが、数年でiPhoneに追いつくだろうという点では一致している。

Page 12: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Win8 Metro と WP8 の API

• WP8 は Win8 Metro のサブセット

• UIコントロール … だいぶ違うWP8のは、WP7から引き継いだ感じ

• WinRT / .NET API … だいぶ違う少ないだけじゃない。WP8独自のも。

• WinMD … WP8では使えない (たぶん)

…とは、言い難い!

Page 13: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

UIに使うコントロール

• ずいぶん違う

ただし、共通のものはけっこうコピペ出来る (^^)

XAML controls comparison between Windows Phone 8 and Windows 8

http://msdn.microsoft.com/library/windowsphone/develop/ff626516

Page 14: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

WinRT

• だいぶ違う

共通部分の一部を、PCLとしてバイナリで共用可能

残りの共通部分は、コードレベルで共用可能

"Windows Phone API reference" 掲載の図から描き起こしhttp://msdn.microsoft.com/library/windowsphone/develop/ff626516

Page 15: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

PCL - Portable Class Library

• 複数の.NETプラットフォームで共用できるクラスライブラリ (DLL)

ロジックやデータ周りはけっこうイケル♪

• とりあえず、このへん読んで!

MSDN マガジン 2011年 8月号「ポータブル クラス ライブラリ: 入門」

http://msdn.microsoft.com/ja-jp/magazine/hh335063.aspx

Page 16: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

PCL を作るには Visual Studio の Pro. 版以上

• Expressのプロジェクト テンプレートには、無い

※ Win8 Metro と WP8 に限定する(右の画像)と、かなり使える API が増える (^^)

Page 17: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

WinMD - Windows ランタイムコンポーネント

• バイナリの拡張子が .winmd※語源は Windows Meta Data

• 使い道・Win8 Metro のバックグラウンド タスク※バックグランド タスクには必須

・Win8 Metro アプリをJavaScript で作るときに使えるクラス ライブラリ

• とりあえず、このへん読んで!MSDN マガジン Windows 8 Special Issue 2012

「Windows Runtime Components in a .NET World」http://msdn.microsoft.com/ja-jp/magazine/jj651570.aspx

Page 18: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Win8 / WP8 / PCL / WinMD …ややこしいっ

Win8 Metro アプリ

WP8 アプリ

Win8 Metroバックグラウンド

タスクWinMD

クラスライブラリ

P C L

Win8 Metro 用クラスライブラリ

WP8 用クラスライブラリ

Win8 Metro

ランタイム

WP8

ランタイム

Page 19: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

PCLの例では、PCLの実例をいくつかご紹介。あ、WinMDも。

Page 20: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Hello, PCL! (1/3 - from Win8)

• ごくシンプルなクラス

PCL

Win8

XAML

Win8コードビハインド

Page 21: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Hello, PCL! (2/3 - from WP8)

• ごくシンプルなクラス

PCLWP8

XAML

WP8コードビハインド

Page 22: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Hello, PCL! (3/3 - 実行結果)

• ごくシンプルなクラス

PCL

WP8

Win8

Metro

Page 23: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Hello, PCL! (番外 - WinMDから使う)

• ごくシンプルなクラス

PCL

WinMD

Win8コードビハインド

Page 24: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

INotifyPropertyChangedを実装してバインド

• 使える! (WinMDもOK)

PCL

WinMD

Page 25: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

ObservableCollectionを公開してバインド

• PCLならイケる! (WinMDでは使えない)

PCL

Page 26: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

Web アクセス

• WebClientは無い。HttpWebRequestを使う。

• …んが!? WP8でShift-JISがエンコードできん!! orz

Page 27: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

PCL の罠

• コンパイルできるからと言って、Win8 と WP8 で挙動が同じとは限らない!

* WP8 では実装されてなかったり、例外が出たり… orz

* ユニットテストの楽な Win8 側で作る。でも、WP8 でのテストも必須 !!

Page 28: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

UI系はPCLに入っていない

• Win8とWP8に共通でも、PCLに入っていないものがある。例: Windows.System.Launcher

ソースをリンクして使うっきゃない!!

Page 29: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

まとめ

• Win8とWP8なら、ロジックはだいたいPCL でイケるよ!!

Page 30: わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」

わんくま同盟 名古屋勉強会 #25

ご清聴ありがとうございました