ハンズオンMicrosoft は、Raspberry Pi 2 または 3、Dragonboard、または Minnowboard で実行される Windows のバージョンである Windows 10 Anniversary for IoT Core をリリースしました。
同社はまた、2016年8月のIntel Developer Forumで発表されたモノのインターネット(IoT)コンピューティングモジュールであるIntel Jouleのサポートも発表しているが、これに対応するWindowsソフトウェアはまだ一般公開されていない。
これを書きながら、Windows 10 IoT Core が Raspberry Pi 3 にシステム アップデートを適用する様子を見ています。これは非常に時間がかかっていますが、Pi で Linux アップデートを実行したときは、通常はもっと速く、再起動も必要ありません。
短時間のハンズオンでは、ブラウザベースのダッシュボードからエラーダイアログボックスが表示されたり、キーボードレイアウトを「英語(米国)」以外に設定できないといった奇妙な動作がいくつか発生したりと、いくつか困った点もありました。別のキーボードを選択すると画面が灰色になり、そのまま変更せずに再びキーボードに戻りました。不思議なことに、これは後でリモートセッションで試してみたところ、問題なく動作しました。
これはWindowsですが、魅力的な点がいくつかあります。具体的には、Visual StudioでC#、C++、その他様々な言語を使ってアプリケーションを構築できること、System Center Configuration Managerを使ってIoT Coreデバイスを管理対象として登録できること、そしてIoT CoreをAzureサービスに簡単に接続してデータを処理できることなどが挙げられます。
MicrosoftのIoT Coreの提示方法は不可解だ。2つの目標があるように思える。1つは、開発者をプラットフォームに惹きつけるために、趣味の「メーカー」コミュニティを支援すること、もう1つは、大企業にエンドツーエンドのIoTソリューションを提供することだ。ビジネスの可能性が最も高いのは後者だが、MicrosoftのWindows 10 IoT Core開発者サイトにアクセスすると、エアホッケーロボットやインターネット接続型クロックラジオなど、趣味的な雰囲気のサンプルアプリケーションが見られる。
Windows 10 IoT Core は、本質的には Windows の簡易版であり、センサーやその他のデバイスと通信してデータを送信する長時間実行アプリケーションをヘッドレスで実行するように、またはグラフィカルインターフェイスを備えた Windows UWP (ユニバーサル Windows プラットフォーム) アプリケーションを実行するように設計されています。フォアグラウンドで実行できる UWP アプリケーションは 1 つだけです。IoT Core では、長時間実行タスク用に、GUI のない特殊な UMP「バックグラウンド アプリ」を実行することもできます。起動時に実行されるアプリを構成することもできます。実際、ホーム画面自体が IoT Core デフォルト アプリと呼ばれる UWP アプリです。このアプリのコードは GitHub からダウンロードでき、私が遭遇したキーボード構成のバグも修正されている可能性があります。
Microsoftは、私が最後に確認した1年以上前からプラットフォームを大幅に進化させています。IoTダッシュボードアプリケーションが登場し、導入が簡単になりました。SDカードリーダーをお持ちであれば、このアプリケーションがオペレーティングシステムをダウンロードしてカードに書き込み、デバイス名と管理者パスワードを設定してくれます。
また、IoT Hub を使用して Azure 接続を自動的にプロビジョニングし、複数のデバイスを管理および通信することもできます。
Windows 10 IoT Core 搭載の Pi へのリモート デスクトップ
もう一つの新機能は、Windows 10搭載のPC、タブレット、スマートフォンで動作するWindows IoTリモートクライアントです。名前の通り、これはデバイスへのリモートデスクトップです。実際には、グラフィカルユーザーインターフェースを備えたアプリケーションを作成しない限り、リモートPowerShellセッションの方が一般的に便利です。
PowerShellとリモートクライアントの両方で、いくつか面倒な点がありました。PowerShellリモート処理を動作させるには、マジックEnter-PsSession
コマンドを実行する前に、WinRMサービスを起動し、Raspberry PiをTrustedHostsに追加するという手順をいくつか踏む必要があります。リモートクライアントを使用するには、Raspberry Pi上でリモートサーバーが動作している必要があるため、リモートクライアントを試す場合はおそらくこの手順が必要になるでしょう。ブラウザベースのダッシュボード(デバイスポータル)からこれを有効にできるはずですが、私が試した際にはエラーが発生しました。これはよくあることのようです。
解決策は、PowerShellを使用して、起動時にNanoRDPタスクを実行するスケジュールタスクを追加することです。この方法を試してみましたが、うまく機能せず、リモートクライアントが接続する前にPowerShellでタスクを手動で実行する必要があり、それでもうまくいかないことがあります。
デフォルトアプリにコマンドプロンプトが組み込まれましたが、これを有効にするにはPowerShellでレジストリキーを追加する必要があります。そうしないと、cmd.exeを実行しようとすると「アクセスが拒否されました」というエラーが表示されます。これが完了すると、対話型ログオンが以前よりも大幅に便利になります。
Microsoftはストア統合も追加しましたが、これはデスクトップ版Windows 10で慣れ親しんだ機能とは異なります。ストアからアプリケーションをインストールするには、Windowsイメージングおよび構成デザイナー、パッケージの作成、そして再起動前にデバイス上の専用フォルダーへのコピーという複数のステップが必要です。また、初期OSイメージの作成時に、互換性のあるストアアプリをプリインストールすることも可能です。真のメリットは、ストアアプリが自動更新されるため、導入後のメンテナンスが簡素化されることです。Microsoftはもう一つの新機能を「複数のフォアグラウンドアプリのサポート」と表現しています。これは、スタート画面などのランチャーアプリケーションを作成できることを意味します。
IoTivity AllJoynデバイスシステムブリッジのサポートも開始されました。AllJoynとIoTivityはどちらもデバイスの接続と制御のためのフレームワークです。WindowsはAllJoynをサポートしていますが、このブリッジによってIoTivityデバイスとの連携が可能になります。
Raspberry Piで動作するWindows IoT Coreは優れたプラットフォームであり、その可能性は明らかです。特に.NET開発スキルとAzureアカウントを持つ企業にとっては大きな魅力です。Raspberry Piでフル機能のOSを使いたい場合、Linuxの代替にはなりませんが、ホームオートメーション、ロボット工学、マルチメディアなど、あらゆるプロジェクトに活用できます。
IoTプラットフォームにとって安定性とメンテナンスの負担軽減が重要であることを考えると、初期セットアップで多くの煩わしさに遭遇し、まだビジネスに使える状態ではないという印象を受けたのは残念です。とはいえ、アプリケーションが動作し、デプロイされれば問題ないかもしれません。Visual Studioとの統合も良好です。
最後にもう 1 つ考えてみましょう。Microsoft が .NET Core を Linux で動作させようとしていることを考えると、Pi などのデバイス上の IoT を Windows と .NET のエコシステムに組み込む代替ルートの方が、最終的にはより生産的になるのではないかと考えるのは当然です。®