Azureにおけるセキュリティを考えてみる2

・Azureにおけるセキュリティを考えてみるのその2です
今回は全体的な環境を考えてみましょう

まあ、よくある販売購買やってる会社的な感じかな?

AzureやMSのクラウド製品群に関して言えば、MSのサブスクリプションによるセキュリティが一番大きなくくりとなります。
ポータルや管理画面などでのユーザー制御や、サービス制御がそれにあたります。

つまりここでの管理者アカウントや上位権限ユーザーアカウントの漏洩が最も大きなセキュリティリスクとなります。
これは当然のことだと思うので、管理や引継ぎはしっかり行うべきですね。

On-PremissでのActiveDirectory(以下AD)情報はAzureAD(以下AAD)へAD Connectサービスで同期が可能ですが、クラウドサービスへ軸足を移すのであれば、On-PremissのADをAADを正にするように移行を計画するべきでしょう。

On-Premiss ADはAADのOn-Premissサービス用認証サービスとして、AD FSもそのためのサービスとして運用を切り替えましょう。

D365での認証についてですが、AADでの認証を標準とした構成にしないとAzure連携アプリが非常に作成しにくくなります。
もちろん、証明書認証に関するコードを用意することでAD FSも含んだOn-Premiss側認証を利用できますが、環境によって開発工数変わるんではないでしょうか。

・簡単に言えばどういうこと?
AzureはActive Directory(AAD)で認証、セキュリティが担保されるようになっているので、それをもとに各種機能をAADにアプリケーション登録することでAD認証配下とし、AD認証を必須としてください。

さて、ここのところが普段アプリ系記事しか書いてない私が、こんな記事書いた理由です。
アプリ書いてるとなると、Azure サービスプリンシパルでの認証がよくやることとですが、上記の部分がきちんと立てつけられていないと、そもそもセキュリティを考慮したも何もあったもんではないとうことで、書きました。

今後さらにクラウド上へ自社サービスやシステムの構築ということが行われ、On-Premiss環境との連携はクラウド側が主体となることが多くなっていくことでしょう。

開発者はいろいろなIaaS/PaaS/SaaS/FaaSを駆使しながら開発を行うこととなりますが、セキュリティへの考慮が特に求められることとなっていきます。
Azureでは各種サービスをシークレットキーで基本的に守る形となっていますが、万が一の漏洩に対しては、Azure Key Vaultを使用し、自動でシークレットキーが更新され続ける機能もあります。

シークレットキーの管理に関しては、そもそも内部犯行許さないようにしてれば、Key Vaultまではと思いますが、高セキュリティが求められる場合は仕方がないですね。

また、StorageServiceにもファイヤウォールが登場し、もともと暗号化などはされていましたが、アクセス制御が可能となり、データ保護が一段と進みました。

クラウドサービスでUWPアプリ開発しようぜ!
いや、クラウドサービスそのものの開発もしますがw

Azureにおけるセキュリティを考えてみる

・Azureってなに?
 AzureとはMicrosoftが提供しているCloud Serviceです。
 たとえば、AmazonのAWS、GoogleのCloud PlatformなどもCloud Serviceとなります。

・なんでセキュリティの話?
 経験上、仕事の際などにどれだけセキュリティが高いのかや、どうやってもっとセキュリティを高めればいいのかを、聞かれたり、考えたりということをする機会が増えたので、自分のメモ的に現在(2018/02)時点での考えを取りまとめるためにちょうどいいのでBlogのネタにしました。

 まあ、概要がここに書いてあったりするんですけど。
 Microsoft Azure セキュリティの概要
 https://docs.microsoft.com/ja-jp/azure/security/azure-security-getting-started

 というわけで、この見解は私の個人的な独断と想像、いじれた範囲からの記事であることをご承知下さい。

 この辺に関しては、全体的な構成図と一緒にどこかでMS社に公開してほしいような気がするんですが、、、

・Cloudとは言っても物理的なサーバは存在しているはずで、そのセキュリティは?
 Azure本体(データセンター)のセキュリティといった部分ですね。
 現在世界各国で42 リージョンが存在しているそうですが、当然そこのセキュリティは強固です。
 クラウドのサービス拠点として、日本は東日本、西日本と書かれますが、どこに置かれているかの正確な場所は非公表ですし、MSの中の方々でも知っている方はほとんどいないのではないかと思います。

 https://azure.microsoft.com/ja-jp/overview/datacenters/how-to-choose/

 ちなみに、ディスクドライブの廃棄の際は、構内の専用箇所でデータの消去作業後、最低4つに分断、かつ専用コンテナでそれぞれ違う国の処分場へ輸送の上で、最終処分を行うとのことです。

・AzureってMSが監視しているの?
 契約クラウドサービスそのものの完全監視は行っていないようですが、その基盤は当然MSの監視下であり、今までもMS本体へ世界中からアタックを受けながらも、セキュリティを確保している高度なセキュリティレベルをクラウドサービスの基盤部分でも実施しているそうです。

 よく、自前のほうが安全ではないかという方々がおられますが、MSと同等の金額と人員規模、技術力をそろえることが
できているのかご確認ください。
 なお、セキュリティセンターの入り口の写真(ロゴの壁)とか、内部イメージはたまにMSの講演で表示されることがあります。

・インターネットにさらされているんだから全部IP制御させろ
 全部は無理です。
 とはいえ、外部アクセス制御そのものはNSG(ネットワークサービスゲートウェイ)などで行うことができます。
 また、PasS/SaaS/FaaSで作成されるAPIに関しては、各種サービスを組み合わせることで制御可能ですが、そんなにアクセス不能にすると自身で開発したサービスの継続開発や運用に支障をきたします。

・どんな開発の組み合わせがあるの?
 開発でよくあるのは「WebApps(ApiApps)」「LogicApps」「Funcsions」の組み合わせでしょうか。

 「ApiApps」に関しては以前はAppricationGateWay(AppGW)を使用するにはAzure App Service Environment(ASE)を作成し、その中に配置することでIP遮断とGW制御が可能となっていました。

 とはいえ、いまならASEを使用しなくてもAppGWをApiAppsに使用可能なので、NSGによる制御で十分ではないでしょうか?

 ASEのもう一つの利点としては閉塞ネットワーク制御に便利といった部分でしょうか。

 Azure のネットワーク セキュリティの概要
 https://docs.microsoft.com/ja-jp/azure/security/security-network-overview

 「Funcsions」もApiAppsと同じように制限可能です。

 そして自分がかかわった中ではよく議題に上がるのが「LogicApps」に関してです。
 機能としては「Logic Flow」と呼ばれるサービスになるのですが、これは外部に公開することを前提としたサービスのため、IP制御が基本的にはできません。(IPアドレス制限はできる)

 「WebApps(ApiApps)」「LogicApps」「Funcsions」に対してセキュリティ保護をかけるのであれば、API Management Serviceを使用し、Azure Active Directoryと連携した総合API管理を行うのが良いと思っていますが、なかなかそこまでという場合は、そもそも公開しないか、クラウドでやるのか再検討してくださいとしか言えません。

・個人想像での図としてはこんな感じかなと
 その2に続く

de:code 2017 Day2 ちょっと遅くなった報告

・HoloLens – 真のエンジニアが知るべき実装
最初のセッションはHoloLensで
HoloLensのアプリは前日のセッションでもあったのですが9割がUnity製……ですが、DirectXを使用し、HoloLensというテクノロジーを理解というセッション
DirectX – Windows Mixes Reality – UWP を連携して行える
Unityと比べた際の利点は、制御をこちらで行えるので、制御をきちんとすれば、Unityよりも省電力でよい表現が可能とのこと。

・ホログラフィック アプリテンプレート(Holographic DirectX 11 App)
ベースとなるテンプレートはHolographic SDKインストールで使用できる
見ていてDirectX12ではなくDirectX11なので、今後アップデートで変わるのかなと

テンプレートを使用した処理の流れが説明されました。

DirectXでのシェーダーはテンプレートで提供されているものを参考に
・CreateDeviceDependentResource
・GeometryShader.hlsl
・PixelShader.hlsl
・VertexShader.hlsl
・VRRTVertexShader.hlsl

座標の追従、ボイス入力、サウンド(SpatialSound UWPサンプル)

空間マッピングを利用するには、「package.appmanifest」に「spatialPerception」を追記する必要があります。
(HolographicSpatialMapping UWPサンプル)

カメラはMedia Foundationを利用してトラッキングなどを行う
(HolographicFaceTracking UWP サンプル)

入力反応はBluetoothによるイベントハンドラーになります

CPUベンチマークを取るとCore i7 6600Uを1として比較すると、HoloLensは0.15、Lumia830で0.048程のスペックであることを認識しておくべき。

HoloLensアプリを作成する際のパフォーマンスの検討

HoloLensが認識する空間データは穴が開いていたり、幻(存在しない)の面が出たり、偏りが発生する。
また、ほぼ平面なのにメッシュが細かく、パフォーマンスなどに影響が出る

「ポアソンサーフスリコンストラクション」を使用するなど、データを整える必要がある。

HoloLensだけではなく、いくつかのテクノロジーを組み合わせることで、空間と時間を超えることができる!

・IoTのセキュリティアーキテクチャと実装モデル
 2セッション目はIoTに関して
 現在IoTが増えているが、乗っ取り、漏洩、破壊の脅威が増えてきている
 セキュリティを確保するには分断されたセクションで考えるのではなく、全体を通してセキュリティを確保する必要がある。
 どこからどこに引き渡しが存在するのか、その引き渡し元/先は本当に意図した引き渡し先なのか

 今後、AIとセンサーが融合することで、デバイスの相互作用に関するリスクが顕在化するはず、今から包括的にセキュリティを確保しましょう。

・GTC2017直送! NVIDIA GPU技術最前線
 ランチセッションです
 しょっぱなから「謎の企業」ネタで沸いていました。
 また、NVIDIAは全部大文字で読みは「エヌビディア」ですとアピール
 新たなNVIDIAのGPU Volta を搭載したTesla V100やスパコンDGX
 そして、NVIDIAが提供するGPGPUCloudサービスは他のクラウドサービスにも接続可能など、まさにGTC2017直送でした

・知っておくべき UWP アプリ開発の A to Z
 いまUWPといった場合は、Windows10用アプリプラットフォーム
 Desktop、Mobile、Xbox、IoT、IoT headless HoloLensがデバイスファイミリー
 クロスプラットフォームも作る場合はXamarinで
 Win32アプリはDesktop Bridge でUWP化する(Desktop App Converter)
 Windows Template StudioでUWPアプリ開発の効率化
 HockryAppでクラッシュレポートを収取
 UWPはいいぞー(個人の感想です)

・C#の現状と今後を徹底解説!「この素晴らしいC#に祝福を!」
 C#は7.0に到達
 6.0が出るまでに時間がかかり、機能更新も少ないように見える
 Roslyn、オープンソース化、C#による再実装で時間がかかったが、これは次の10年、20年に向け末永く戦える環境のため!
 .NET Frameworkも同じように再実装による停滞期に
 .Net Coreへの移植もあり、C#にも影響が出ている
 今を抜ければ.NETも次の10年、20年を戦える体制に
 IDE(VisualStudio、VisualStudio Code、VisualStudio for Mac)もクロスプラットフォーム化を進めているので、しばらく大変かも
 C#はdata、performanceを強化していくことになる
 今後も楽しみ

ちょっと休憩でEXPO会場に
 
Alex氏のサイン

・Build 2017 Updates ~ Application UI Design
 Build 2017で発表された、今後Application UI Designとして導入されるデザインガイド「Fluent Design」に関して
 今後Windowsはデスクトップだけではなく、マウスやタッチパネルだけではなくなる
 音声入力、ジェスチャー入力など幅が広がる事に対応しよう


これらの新しいデザインは勝手に適用されるという事はない、新しくアプリを作成する際に新しいコントロール、または新しいスタイルを適用しない限りそのまま

このスタイルは「Fall Creators Update SDK」から可能
Fluent Design System
Fluent Designのページ

Syncfusion Essential Studio に COMMUNITY LICENSE が!

Syncfusion 社の「ESSENTIAL STUDIO」に≪COMMUNITY LICENSE≫が追加されました!

ESSENTIAL STUDIOって?

ESSENTIAL STUDIOはアプリを開発する際に使用可能なコンポーネントライブラリです。
android、iOS、Xamarin(Android,iOS,Forms)、JavaScript、ASP.NET、ASP.NET MVC、Windows Forms、WPF、WinRT、UWP、Windows Phoneの各種プラットフォームに対応しています。

何ができるの?

自作しようとすると面倒になりがちな「チャート」や「カレンダー」、「ダイアグラム」、「PDF」などをコンポーネント提供してくれています。

COMMUNITY LICENSEって結局なに?

・個人開発者
・年間売り上げ100万$(約1億円)以下の企業
・使用可能な開発ユーザー5人まで
上記の条件を満たしていれば「無償」で使用可能なライセンスになっています!
しかも、「商用アプリも可」というすごいライセンスです。

なんでそんなすごいライセンスが提供されたの?

マイクロソフト社が「Visual Studio Community」という開発ソフトの無償ライセンスの拡充を行ったことに触発されて、Syncfusion 社が提供に踏み切ったそうです。

使うにはどうするの?

COMMUNITY LICENSEのページ≫からユーザー登録をしてダウンロード後、インストールしてください。
専用のアンロックキーが提供されますので、キーの入力で使用可能になります。

さて、さらにありがたいことにSyncfusion 社は≪METRO STUDIO≫というフリーのアイコンツールも提供していただけています。
アプリの作成時に必要な各種アイコンはこれでほぼ事足りますので、ぜひ一緒に使用しましょう。

そして最後にVisual StudioXamarinを利用して、ぜひアプリを作りませんか?

Windows Phone/Windows 10 Mobile に関するゲームパッド考察

ゲームパッドを使用することができるのか?

さて、「Windows Phone/Windows 10 MobileでGamePadは使用できるのか?」ですが、結論から先に言っておきます、条件付きで可能、ふつうは無理です。

WindowsPhone8/8.1用として実は「MOGA Game On Anywhere(以下 MOGA)」が出したコントローラーがBTを利用した(おそらく)シリアル通信的な方法で、使用できるようにしていました。
ただこれは専用SDKが提供されない限り使用できないという形で、更新をしていない状況から今後使用できることはないだろうと思います。

次に目を付けたのは「Windows8.1 UpDate2(以下 WP8.1UP2)」から解禁された「Bluetooth HID Profile」の存在です。
HID(Human Interface Device)、USBにもありますが所謂入力機器の受け取りができる機能です。

さてこれを実験だと思ったのですが、残念ながら手持ちの端末には「WP8.1UP2」が降りてこないという状況でしたが、この機能は「Windows 10 Mobile(以下W10M)」でも使用可能になりました。

これはやるしかないということで、いろいろ仕込んでいたのですが、まずは先だって開催された「Microsoft MVP Asia Meet Up」イベントに参加した際にMADOSMAをW10Mにアップされた方が持ってきているよなと思い、接続を試させていただくことにしました。

結果

BT機器があるということは認識するもののペアリングは却下されるという状況でした。
もちろんイベントの隙間を利用した短時間での確認のため、これだけで出来ないということは確定できないですが、正直どうしようと思いました(汗

次の一手

wp_ss_20150411_0003
あきらめるわけにもいかないので、1320にInsider Programでアップデートをかけて実験という形にしました。

wp_ss_20151211_0003
こちらでも認識(SS取れなかったですがキーボードHID認識のようです)はしました。

wp_ss_20151211_0004
そして、ペアリングも完了!

なら使うぞ!

UWP向けにAPIが追加されているのですが、その中に「Windows.Gaming.Input」というそのものずばりなAPIがあります。
で、APIを確認している限りではMobileに対する縛りはないようなので、「これは使える!」と実験開始

いきなりモバイルというわけにもいかないのでまずはDesktopUWPで実験、、、困ったことにWindows上では認識しているもののUWPのAPI上では存在しないというのが返ってきました。
とりあえずAPIの確認のためDevice転送でチェックしたところAPIはそのまま通りました。
機能宣言は「AllJoin」「Bluetooth」にはチェックを入れたものの、HIDに関する項目ないなこれ(汗
API条件に宣言しなければいけないようなことは記載されていないので、API自体はチェックなしでもエラーなく動きます。

さて、「Windows.Gaming.Input」ですが、内部的には「XInput」ではなかろうかと思います。
となるとMoga2では認識しないですよねこれ、、、
手持ちにXInput対応機器がないので、自分には検証しきれませんでした。

というわけで最初に書いた通りなのですが、「条件付きで可能 / ふつうは無理」が今のところの結論です。
もちろんもっと深く探っていけば可能になるんではと思ってはいます。
もう少しさっくり対応できるようになっていると「A端末とかi端末で出来るのに、WP出来ないから~」とは言われなくて済むかなーと

まあ、解放できない理由は、セキュリティーとか考えるとわからないでもないので………

というわけで、「ゲームコントローラー周りの対応状況をぼそっと公開してくれないかなー>MS様」等と書くためだけのネタ記事でした。

「Windows 10 Mobile」は良い端末ですし、まだまだこれからさらに良くなっていくことでしょう。

おまけ

さて、これだけで何なのでちょっとおまけを

WP_20151212_10_16_39_Pro
こんなのを入手したわけですよ。
ええ、ご想像の通りです…………「1320はUSB OTG非対応
何をつなごうが全く認識しません(;´Д`)

Windows Phone / Windows 10 Mobile Advent Calendar 2015」に参加しています。

裏ではいろいろ仕込んでるんですが、公開レベルに持っていけなくてこんな記事になりましたが、ほかの方の記事には良いものがあるので、是非一読を!

※追記(2015/12/12/21:30)

DirectInputじゃダメなの?

もちろんこうなれば「DirectInput」をラップ実装してというのは頭の片隅にあったのですが、XInputをストアアプリ荷を調べていた際に「XInput and DirectInput」というMicrosoftの公式ページを見つけましてそこに

Note Use of legacy DirectInput is not recommended, and DirectInput is not available for Windows Store apps.

レガシーでストアアプリには対応していないと書かれていました。

WindowsPhone8.1アプリをリリースしました

Ama買取サービス非公式バーコード検索アプリ

Amazon買取サービス非公式バーコード検索アプリ

バーコードデータを手入力では面倒なので、バーコード読み取りを利用して検索できるようにしたアプリ
検索を実行するとWebブラウザが起動して買い取りURLを開きますが、ブラウザの設定を「モバイル用サイト」ではなく「デスクトップ用サイト」に変更する必要があります。

このアプリはAmazon社とは一切関係がない検索お助けツールアプリです。
Amazon Japanの検索にのみ対応しています。

wp_ss_20150712_0002

wp_ss_20150712_0003

MADOSMAもリリースされたことだし、何かアプリをと思い構想2日、WindowsPhone 8.1 SilverLight & C#で制作実質2日でした。

※追記 2015/07/16
 MADOSMAとLumia930で正常に動作しない可能性があるようです。
 カメラがデバッグに使用したLumia1320とは違いがあるようで、フォーカスと配置に対する処理に差があるようでMADOSMAを手に入れないと何が違うのかが判別できない状態です。
 使用できるように変更を考えてみます。

UnrealEngine4がついに(売上金額しだいでは)無償化!

UnrealEngine4が月額サブスクリプションから基本無料に

四半期ごとの売上金額3000$を超えた際に5%のロイヤリティーが発生する形になりました。
また、教育、建築、ビジュアライゼーションやVR、映像制作やアニメ等、ゲームやアプリに使用していなければ無償で使用可能とのこと。

If You Love Something, Set It Free 〜UE4無料化

UE4はどなたにでも無料でダウンロードしていただくことが可能になりました。将来のアップデートもすべて無料です!

ダウンロードしたUE4は、ゲーム開発や教育、建築、ビジュアライゼーションやVR、映像制作やアニメ等、様々な用途にご利用いただけます。ゲームやアプリケーションを制作・販売された場合には、四半期ごとの総売上のうち3千ドルを超えた部分に対して5%のロイヤリティが発生します。UE4ユーザーの皆様が成功を収めて初めて、我々Epicもそのお裾分けをいただくというビジネスモデルです。

UnrealEngine4の開発はC++による制御となっていますが、「Mono for Unreal Engine」というプラグインがあり、C#での開発が可能になるようです。

Unreal Engine 4のWindowsPhone/WindowsRuntime対応は?

残念ながら現在のところ対応作業中ということしかわかりませんでした。
もちろんWindowsApplicationとしては作成可能ですので、まずはPC向けに作成しつつ、対応を待つというのもアリではないでしょうか?

MWCでWindowsPhone日本発売の光明が増えました

Mobile World Congress(MWC) 2015でfreetelと京セラの端末が公開

マウスコンピュータに続いて国内メーカーから発表がありました。

freetelブランドの端末はMWC前にプレスリリースが行われました。
最新 Windows Phone OS 搭載スマートフォン、 2015 年夏までに国内発売予定のお知らせ
なんと夏までに出すという表明です。
freetelは日本向けのSIMフリー端末販売会社なので、日本向け端末が確定したことになります。

京セラはプロトタイプとして高耐久端末にWindowsPhone8.1を搭載したようです。
engadgetさんのレポート記事がありました。
京セラがWindows Phone 8.1スマホをMWC出展。『Windows Phoneは高耐久と親和性が高い』
元々のAndroid端末にWP8.1を搭載しましたという段階のようで、端末のボタンがAndroidのままですね

AcerからWindows10 for Phones対応確約端末が発表(日本発売未定)

PC watchさんにAcer社がWP8.1端末が出すとの記事が出ました。
Acer、79ユーロでWindows 10へのアップグレードを保証したスマホ
端末としては欧州向けローエンドですが、Acer社は日本向けにAndroid端末をブックオフ経由で発売していることを考えると、もしかして選択肢が増えるということかなと思いたいところです。

Microsoftからは新端末(日本発売未定)

MWCではMicrosoftからLumia640/640XLが発表されました。
端末としてはミドルレンジの端末になるようです。
追加の特徴としては「Office 365サブスクリプション1年分」と「OneDrive 1GB 1年分」が標準でサポートされ散ることでしょうか。

開発者に向けて

それぞれの端末はWindowsPhone8.1ではありますが、Windows 10 for Phonesが視野に入っているようで、時期が来ればOS更新が降ってくることになると思います。
Windows 10 からはさらにデスク/ノートOSとモバイルOSの融合が進みます。
A社やG社のOSに比べても使用率の大きなWindowsというデスク/ノート向けOSと連携するには非常に心強い環境が整ってきます。

もちろんデスク/ノート向けがそのまま動くということはないですが、いわゆるWindowsストアアプリであれば、ユニバーサルアプリとして、モバイルにもゲームコンソールにも展開可能になり強い連携を生み出すことができる基盤が、クラウド(Azure)も含んでOneSolution/OneStoaが実現してきます。

VisualStudioによるストアアプリ、マルチデバイス開発はC/C++/C#/HTML5(JavaScript)/F#等で可能になってきていますし、UnityやUnreal Engineなどによるマルチデバイス開発もできます。

開発の親和性も非常に高い環境ですので、ぜひ開発者の皆さんには飛び込んできてほしいと思います。

マルチデバイス開発選択肢としてのMicrosoft Visual Studio

マルチデバイス開発環境の選択肢

自身の開発環境上、Windowsベースとなりますが、現在いくつかの、マルチデバイス開発環境があります。

ゲームに向いているもの

細かいのを入れるともう少しありますが、Windowsで有名どころとなるとこんなところでしょうか?

開発環境としてVisualStudioを選択すべきか?

私はアプリの開発環境ということでVisualStudioを選択してるわけですが、Windows環境がメインであるというのが大きな理由ではあります。
では、ほかの方に開発環境としてVisualStudioを薦めるのか?ということになります。

標準で対応している使用可能な言語も多くあります。

  • C/C++
  • C#
  • Visual Basic
  • Visual F#
  • JScript
  • Python
  • HTML5
  • JavaScript
  • TypeScript

基本的には非常に強力なVisualStudioという開発環境もあり、Windowsという世界で広く流通、使用されているOSであるということを考えれば、薦めることに何の問題もないと思います。

なぜ基本的なのかですが、iOS/OSX専用アプリのみ開発するというのであれば、Mac環境を選択するしかないわけですので、VisualStudioを薦めるというのは難しく、Linuxなどの環境についても同じく、専用アプリだけということであれば、VisualStudioを勧めることはできないです。

ですが、Windows/WindowsPhone/iOS/Android/Web/クラウド/IoTと多岐の環境へのアプリリリースが求められる状況が増えています。

MacやLinuxでもかなりのマルチデバイス対応開発は行えますが、現在どれかしらへの開発が行えないという状況が多くあります。

もちろんVisualStudioでも単独では開発できないiOSアプリ、Macアプリ等があります。
現在VisualStudioでiOSを開発するにはどうしてもMacが別途必要で、XCodeコンパイラを経由する必要があります。
単独で開発できないだけでVisualStudioを使用した開発が可能な物は多いです。

MacにはBoot CampというWindowsをインストール可能にする公式ツールがあります。
ネイティブなWindowsをMacにインストールし、VisualStudioを使用するというのが可能です。

Boot Camp

Visual Studioに関して

さて、VisualStudioですが、MicrosoftイベントConnect();において VisualStudio Community Edition(以下 VSCE)が発表され、今までのExpress Edition(VSEE)は今後廃止されることになりました。(VSEE2015は出ないそうです)

VisualStudio Community Edition 日本語ページ

VSCEはVSEEと同じく無償で使用可能なVisualStudioですが、大きな違いがあります。
VSEEは非常に制限が大きく、各種拡張機能が使用できない、使用用途ごとにエディション(desktop、Web等)が存在するというものでしたが、VSCEはProfessional Editionに準拠した1エディションになり、今まで使用できなかったVS tools for Unity等の拡張機能が使用できるようになります。

使用条件は、個人開発者が無償または有償のアプリの開発に使用可能、オープンソースコミュニティへの貢献開発もOK、企業の場合でも条件によっては使用可能、ただし受託開発に使用するのには制限有となっているようです。
詳しくはMicrosoftのライセンス ホワイトペーパーを確認の上でお願いします。

Microsoft Visual Studioによるマルチデバイス開発ですが、標準ではWindowsデスクトップアプリ(ネイティブ、WPF、DirectX)、ASP.NET(WEB)、Azure(クラウド)、Windowsストアアプリ、WindowsPhoneアプリ、Kinect等、各種Windowsプラットフォームアプリの開発が可能です。

これ以外の場合、Xamarin(BusinessLicense以上)、Cordova(Visual Studio Tools for Apache Cordova)、Unity(Visual Studio 2013 Tools for Unity)をインストールすることで、Android、iOS向けの開発がVisual Studio上でも可能になります。

さらに.NET MicroFramework(以下 NETMF)をインストールすることで.NET Gadgeteerの開発(.NET Gadgeteer SDKと実機が必要)が可能になり、組み込み開発が比較的手軽に行えます。

.NET MicroFramework
.NET Gadgeteer 日本代理店

Windows Embedded環境向けの開発もSDKを導入することで可能ですが、EmbeddedはOSの入手がMSDNユーザー以外では開発会社くらいでしょうから、少々厳しいかもしれません。
もっともWindows Embedded 8.1 HandheldはWindowsPhone8.1用アプリが使用可能になっていますので、WindowsPhone8.1アプリ開発が、Embedded向けアプリの開発ともいえるかもしれません。

XamarinはC#.NET、CordovaはHTML5+JavaScript(TypeScript)ですので、慣れた開発言語を選択するというのも手です。

また、これらを使わなくても実は可能な方法が存在はしています。

最近Microsoft Officeがマルチデバイス対応しています。(Office 365の契約が必要な機能もあります)
AndroidでもiPadでも限定的ではあるものの編集可能なOfficeが提供されています。

さて、MS OfficeはどうやっているのかというのがMSの講演などで判明しており、内部的にはコアをC++で再利用な形で作り、OSごとに薄いレイヤを作って、UI/UXを載せるという形になっているそうです。

マイクロソフトは、C++でいかにしてMicrosoft Officeのクラスプラットフォームを実現したのか 

銀の弾丸はない。唯一のアプローチは、コストとリスクとベネフィットのトレードオフを考えることだ。

・ 良く定義された組み立て可能なコンポーネント
・ 可能なかぎりメカニカルなリファクタリングを行う
・ つねにすべてのプラットフォームで(開発中のコードが)動くようにした
・ 毎日全てのプラットフォームで大規模なドッグフーディング

XamarinはAndroid、iOS、Formsという形式がVS上で開発可能です。
Android、iOSは名前の通りそれぞれ単独用です。(MVVM Crossを使うなどで共通化は可能)
FormsはXAMLベースのコントロールが使用可能でAndroid、iOS、WinodwsPhone8.0の開発が共通化されています。

CordovaはAdobe社が構築したもので元の名前が「PhoneGap」という名称です。
そのためCrdovaで情報を探すよりはPhoneGapで探したほうが情報が見つかりやすいと思います。

連載:初めての PhoneGap 第1回 - ハイブリッドアプリのメリット・デメリット

Unityはゲームアプリまたはリッチな表現を多くしたいアプリに向いています。
Visual Studio Tools for Unityを導入することで、Visual Studio上でコード記述、デバッグ作業が行えます。

Visual Studioを、できればMSDNライセンス付きで使用してぜひ快適な開発環境の構築を行いましょう。

VisualStudio2015PreviewでXamarin.Androidを作業するために

VisualStudio 2015 のインストールは少々変更が図られています。
本体のインストールの後に、SecondaryInstallerが立ち上がり、追加機能のインストールを行う形になっています。
セカンダリインストーラー

セカンダリインストーラー2

セカンダリインストーラー3

この中で注目したいのは「Microsoft Visual Studio Emulator for Android」です。
このEmulatorはHyper-Vへx86ベースのAndroid4.4が搭載されたもので、WindowsPhone8.1Emulatorと同じように加速度のテストなどもEmulator上で可能になりますし、Hyper-Vベースなので、今までのVirtualBoxベースのエミュでは毎回Hyper-VのON/OFF切り替えをしなければならかったことから解放されます。

VisualStudio 2015 Preview をインストールしたあとAndroidアプリの作成を行うと、Xamarinのダウンロードを促す画面が表示されます。

Xamarin01

さて、すでにXamarinをインストール済みの方も多いと思うのですが、この画面のリンクから表示されるホームページに掲載されているXamarinは「XamarinInstaller-VS2015」という専用のXamarinが用意されています。
すでにインストールして最新のXamarinにしている場合は、一度アンインストールしてから「XamarinInstaller-VS2015」をインストールする必要があります。
また、インストール後にXamarinのアップデートを行えますが、アップデートしてしまうとVS2015対応が削除されてしまうそうなので、アップデートは避けましょう。

さて、早速テストしようと思いブランクを作成してコンパイルを行うと「”MergeApkRecipelists” task was not given a value for the required parameter “RecipeFiles”」が発生してコンパイルが行えません。

エクセルソフトの田淵さんもBlogで同じ現象が起きていることを書かれていたのですが、田淵さんからツイッターでコメント欄に回避方法が乗っていますと教えていただき、試したところ無事ビルドしてNexus7に転送して起動することまでは確認できました。

手順としては、ソリューションへプロジェクトの追加で「Visual C++>Cross Platform」で「Dynamic Shared Library (Android)」を追加します。
追加したプロジェクトを、メインのAndoroidプロジェクトから参照します。

Xamarin02

次に「C:\Program Files (x86)\MSBuild\Xamarin\Android」にある「Xamarin.Android.Common.After.targets」を書き換えて、「Import Project」をコメントアウトしておきます。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
    <Import Project="$(MSBuildThisFileDirectory)\Xamarin.Android.Common\ImportAfter\*"
            Condition="Exists('$(MSBuildThisFileDirectory)\Xamarin.Android.Common\ImportAfter')"/>
-->
</Project>

AndroidのBuild設定ですが「Dynamic Shared Library (Android)」が「API Lebel 19」を指定されているので、メインプロジェクトの設定も「API Lebel 19」に設定する必要があります。

これでとりあえずビルドが通り、実行可能にはなります。

さて、自分の一番の目的は「Microsoft Visual Studio Emulator for Android」だったのですが、「Emulator start error: VS Emulator Android Phone」とだけ表示され、起動させることができていません。

まずは入口に立ったというだけですが、もう少し探ろうと思います。

※追記

 増田さんのBlogに書かれていたのですが、Xamarin.Formsを使用する場合は上記の設定をわざわざしなくてもBuild可能とのことです。
 「Microsoft Visual Studio Emulator for Android」を起動可能な方法を記載されていますが、やはり茨の道で、まだまだこれからのようです。
 自分がいろいろ試していたところ、やりすぎて開発環境のVS2013が不調になったため、VS2015Preをアンインストールして、VS2013Up4を修復インストールすることで、無事元の状態に戻せました。