Introduction

Visual Studio上で、しかもC#を使って、IoTデバイス上で動作できるアプリが簡単に作れる!!っていうのが、Microsoftのエコシステムの強みなんですけど、Visual Studioのどこから作成できるのかがわかりにくいのでメモ。

Instructions

Application Types

まず前提として、IoTデバイス上で動作するアプリは

  • GUIあり (UWP)
    • Foreground Apps
  • GUIなし(UWP)
    • Background Apps
  • 非UWP (C++のみ)
    • Non-UWP Apps

の3種になります。
パフォーマンスとか考えると、C++の非UWPって気もしますが、そもそもパフォーマンス云々ならWindows IoTなんか選択しません。

Windows IoTを選ぶのは、開発効率の高さ、既存資産の流用、多数の言語サポートなのですから。

Foreground Apps

で、前述の通り、GUIなら選択肢はForeground Appsしかないといっています。
Developing foreground applicationsによれば、

All of the standard UWP languages and project templates are fully supported on IoT Core.

訳: 全ての基本的なUWPの言語及びプロジェクトテンプレートはIoTコア上で完全にサポートされます。

とあるので、普通にUWPアプリを作ればそれで動くはずです。

Background Apps

問題は、GUIを使わないタイプ。
Background Appとよばれる、このタイプはコンソールアプリなのですが、従来のMainメソッドから構成されるものとは異なり、どちらかといえばサービスアプリケーションに近い印象を受けます。そもそもコンソール画面は表示されないので、コンソールアプリとも言えませんが。

Background Appsを作成するには、Windows.ApplicationModel.Background.IBackgroundTask インターフェイスを継承したクラスを作成するだけです。
そのクラスはタスクとして扱われ、バックグラウンドで実行されるという仕組みです。

サンプルを見る限りは非常に簡単ですが、ここはテンプレートを利用しましょう。
というか、MSDNにもそう書いてあります。
でも、Visual Studioをインストールしてもテンプレートは存在せず、Visual Studio Marketplaceから入手せよとのこと。えぇ…

入手したインストーラを実行し、新しいプロジェクトを開くと、Windows IoT Coreが追加されます。

ターゲットのWindows 10のビルドを選択します。

作成されたプロジェクトは、StartupTask.csというソースが一つ(+他の細々したもの)というシンプルなものです。

これを元に作成していけば、アイデアを形に出来るでしょう。きっと。