なかしょの技術日誌

業務でプログラミングをしなくなったのでプライベートで調査した技術情報を書き留めていきます。

Xamarin.Formsでスマートウォッチアプリ開発

f:id:nakasho_dev:20171210023727p:plain

はじめに

本エントリーは Xamarin Advent Calendar 2017 11日目のエントリーです。 スマートウォッチアプリ開発というとAndroid Wearかwatch OSを思い浮かべ、本記事を開いた方もいらっしゃるのではないでしょうか。ですが、その両OSともにXamarin.Formsでの開発に対応していません。
以下のRoadmapにもありません。 forums.xamarin.com

そもそも、スマートウォッチアプリのようなUIが特殊で機能が限定されているものにXamarin.Formsは向かないような気もします。そんな中、Xamarin.Formsでスマートウォッチアプリが開発できる環境が誕生しました。それがTizen.NETです。 本記事ではTizen OS搭載スマートウォッチアプリを.NETで開発する環境構築方法を紹介します。

Tizen.NETについて

Tizenの.NET対応については、こちらの記事をご覧ください。

nakasho-dev.hatenablog.jp

本記事執筆時点の最新バージョンはTizen 4.0 M2です。
このバージョンからWatch用のエミュレータも提供されています。

Tizen.NETの環境構築

こちらの記事にて説明があります。

developer.tizen.org

前提条件

  • 1.5GB以上のディスクスペース
  • Visual Studio 2017:以下のオプションは必須
    • .NET desktop development
    • .NET Core cross-platform development
  • Java Development Kit (JDK) 8
    • OpenJDKは非対応

エミュレータの必要条件

  • Intel Hardware Accelerated Execution Manager(HAXM)のインストール
  • Hyper-V の無効化

Visual Studio Tools for Tizen のインストール

  • 拡張機能と更新プログラムから「Tizen」をキーワードに検索
    • 検索でヒットした「Visual Studio Tools for Tizen」をインストール

Tizen Baseline SDK のインストール

  • ツール > Tizen > Tizen Package Manager を選択してダイアログを表示
    • Install new Tizen SDKを選択
    • 利用規約を承諾
    • インストール先のフォルダを指定後、インストールが開始

エミュレータイメージのインストール

  • ツール > Tizen > Tizen Package Managerを選択してダイアログを表示
    • 4.0 WEARABLE (Preview)の行のINSTALLボタンを押下

以上で準備が整いました。

Tizen.NETアプリの作成

  • Visual Studio の新規プロジェクトからVisual C# > Tizen > Cross-Platform > Blank App(Xamarin.Forms)を選択

f:id:nakasho_dev:20171210232642p:plain

  • Project Wizardにて、Profileの項目で「Wealable(preview)」を選択

f:id:nakasho_dev:20171210232715p:plain

これでアプリができました。ソリューションエクスプローラーの構成は以下になります。

f:id:nakasho_dev:20171210233020p:plain

${ソリューション名}.Tizen.Wealable のプロジェクトを右クリックしてデバッグ > 新しいインスタンスを開始 でエミュレータが立ち上がり、アプリが起動します。

f:id:nakasho_dev:20171210233411p:plain

以上でXamarin.FormsでTizenOSのスマートウォッチアプリの開発環境が準備できました。



Xamarin.Forms以外でのTizenアプリ開発

Xamarin.Formsで提供されるUI部品はOSネイティブのそれと比べるとプアであることは否めません。
Tizen用アプリでXamarin.FormsよりもリッチなUIを使いたい、TizenのネイティブUIを使いたい、という要望もあるかと思います。安心してください、あるんです。

f:id:nakasho_dev:20171210234423p:plain

最新の開発環境ではXamarin.Formsの他にElmSharpとTizen.NUIを選択できます。

  • ElmSharp
    • Tizen NativeのUI FrameworkであるEFLをベースに開発したもののようです。
  • Tizen.NUI (Natural User Interface)
    • Tizen Nativeで用意されているAPIの.NETのラッパーです。

去年のConnect();2016で発表された際は、UI部分をXamarin.FormsでまかないNativeのUI部品は可能な限り対応する、という後ろ向きな内容でしたが、1年経った今、NativeのUI部品も充実してきました。
Windows 10 Mobileの新規機能が事実上終了した今、第3のOSとしてTizenに注目があつまっていることでしょう。
Tizen.NETの正式リリースが待ち遠しいですね。

Tizenの.NET対応について

5月27日の「JXUGC #23 Xamarin 無料化一周年記念勉強会!」にて、Tizenの.NET対応について登壇してきました。

jxug.connpass.com

発表した資料はこちらです。

docs.com

以下、資料の補足です。

Tizenとは?

Tizenの特徴

f:id:nakasho_dev:20170530012738p:plain

.NET対応する前のTizenはC/C++ベースとHTML5+JavaScriptベースの2つの開発方法が用意されていました。

f:id:nakasho_dev:20170530014233p:plain

TizenにはTizenコンプライアンスというものが定義されており、Device Profileの共通コンポーネントを「Tizen Common」レイヤーで管理することでDevice Profileの依存性を軽減できます。

f:id:nakasho_dev:20170530015107p:plain

アップストリーム・ファーストは素晴らしい考えだと思います。
バグを直した独自のソースを管理するのは非常にコストがかかるものです。
アップストリーム・ファーストによって、常に最新の安定板をOSS側のリポジトリから取得できます。

Tizenの状況

f:id:nakasho_dev:20170530020308p:plain

Linux Foundationの公式プロジェクト

TizenはSamsungの所有物ではなく、Linux Foundationで開発が進められているオープンソースソフトウェアです。

スマートフォン

徐々に展開先を増やしているようです。
ロシアについては断念せざるを得ない事態がありますが後述します。

スマートウォッチ

スマートウォッチはAndroidWearのシェアを上回っており、日本でも展開されているので期待が持てるのではないでしょうか。

スマートTV

スマートTVについては最近のシェアを確認できるものが見つからなかったのですが、Samsungのテレビ販売台数が10年連続世界一なことも考えると期待は持てると思います。ただし、日本はB-CASの仕組みがあり一度撤退しているので、再参入してくるかは疑問です。

車載用OS

TizenにはLiMo Foundationの流れからあるモバイル端末OSとしての役割以外に、Automotive Grade Linux(AGL)の流れからある車載用OSとしての役割も重要でした。
しかし、車載用OSについてはTizenとは異なるUnified Code Base(UCB)へ移行することとなってしまいました。Tizenの車載用OSについては現在は開発が停止しています。

TizenOS誕生までの流れ

f:id:nakasho_dev:20170531235458p:plain

この流れで注意しなくてはいけないのはSailfish OSです。
前述のロシアでTizenの展開が中止となったのはロシア政府がAndroidの代替OSとしてSailfish OSを認可したからです。

jp.techcrunch.com

ロシア以外でも中国、ボリビアなどの、Google主導のAndroidの独占に疑念を持つ国がSailfish OSに興味を持っています。
ひょっとしたら第3のOS第4のOSはTizenではなく、Sailfish OSとなるかもしれません。

weekly.ascii.jp

Tizen Assosiation

f:id:nakasho_dev:20170601002315p:plain

現在のBoard Membersは上図の通りです。 そして、Tizen Assosiationのパートナープログラムに加入している日本企業は、AccessKONAMI、NTT DATA、Panasonicなどがあります。 まだ、日本市場でワンチャンあるかもしれません。

Tizen Mobile App Incentive Program for 2017

f:id:nakasho_dev:20170601002946p:plain

Samsungがスポンサーになっているインセンティブプログラムです。
期間中TOP100を独占すれば900万ドルがゲットできるのですが、そのような状況にはなっていません。

日本での状況

f:id:nakasho_dev:20170601004453p:plain

芳しくない状況です。
特に書籍についてはGOOGLE WAVEの悲劇が思い出されます。

f:id:nakasho_dev:20170601005008p:plain

Tizenちゃん、かわいいよ、Tizenちゃん...

Tizenの初めての.NET対応

f:id:nakasho_dev:20170601005129p:plain

MonoTizen の誕生

f:id:nakasho_dev:20170601005148p:plain

Kitsliano Software社のコーポレートスローガンってカッコいいですよね。
この会社はMono for Sailfish、MonoHTML5にも着手していました。が、完成はしていないようです
MonoHTML5はTizenのHTML5実装にヒントを得ていたようです。

MonoTizen の開発延期

f:id:nakasho_dev:20170601011117p:plain

開発開始からわずか2か月で開発延期となったのは、本当に驚きです。

MonoTizen の開発延期の理由

f:id:nakasho_dev:20170601011228p:plain

Kitsliano SoftwareのメンバーはMonoTizenの開発を延期した今でもEathereumのクライアントライブラリをTizenやSailfish向けに開発しているなんて本当にLinuxが大好きなんでしょうね。

Tizen.NETの誕生

f:id:nakasho_dev:20170601012046p:plain

Tizenの.NET対応について

f:id:nakasho_dev:20170601012111p:plain

2016年11月16日にTizenの.NET対応が発表されてから定期的にPreview版がアップデートされています。

Tizenの.NET対応に最も驚いた人

f:id:nakasho_dev:20170601012757p:plain

MonoTizenのリードプログラマだったDimitar Dobrev氏がTizenの.NET対応に加わりたい旨を表明しています。
CppSharpの貢献者でありQtSharpの開発者である彼が加わることで、Tizenの.NET対応が加速することを期待しています。

なぜ.NET対応をするのか

f:id:nakasho_dev:20170601013417p:plain

Tizen ProjectではC言語ベースとHTML5ベースで開発する際の課題を.NETの採用により解決できると考えています。

Tizen.NET アーキテクチャ

f:id:nakasho_dev:20170601013806p:plain

前述のTizenの特徴で表示した図の左側に.NET関連の機能が追加されました。
TizenではMonoではなく.NET CoreをRuntimeとして選択しています。
.NET Coreを用いてTizen Platform-Specific APIはP/Invoke(プラットフォーム呼び出し)により.NETのコードから、TizenのC/C++APIを呼び出しています。
Xamarin.AndroidやXamarin.iOSと同様にネイティブの機能を呼び出しています。

Tizen Platform-Specific API 構成例

f:id:nakasho_dev:20170601021043p:plain

DevDaysのハンズオンアプリなどでみんな大好きなText-To-Speechの機能についてリポジトリを見てみると、Interopフォルダ内に「Interop.Libraries.cs」と「Interop.Tts.cs」が存在します。ここでP/Invokeの処理を実装しています。
実際にC#でのコーディング時にアプリのコードから呼び出すのはTizen.Uix.Ttsフォルダ内にあるクラスとなります。

Tizen .NET Developer Preview1

f:id:nakasho_dev:20170601022154p:plain

最初にリリースされた際の状況です。 正直、このままでは実用に耐えうるものではありませんでした。

Tizen .NET Developer Preview2

f:id:nakasho_dev:20170601022256p:plain

Preview2ではOpenGLViewが不完全とはいえ、Formsの部品は一通りそろえています。固有のAPIについても31pkgから49pkgに増えました。
SmartTV向けの開発もできるようになりTool類も充実し始めました。

Tizen .NET Developer Preview3

f:id:nakasho_dev:20170601022544p:plain

Preview3では開発環境の充実もさることながら、Tizen固有のForms部品であるTizen.Xamarin.Forms.Extensionとして、ボタン、ポップアップ、グリッド、カレンダービューなどが実装されたことが特徴です。
本来、共通部品を用意することが主目的なはずのFormsで独自部品のみ用意するとはUIをXamarin.Forms頼りにしているTizenならではかと思います。

Tizen .NETのRoadmap

developer.tizen.org

Preview3でほぼ機能は実装したので、Tizen4.0 M1 リリースに向けてブラッシュアップをしていることでしょう。

Tizenの .NET関連のリポジトリ

f:id:nakasho_dev:20170601023621p:plain

定期的にコミットが観測されており、開発は進んでいるようです。

Tizen 関連情報

f:id:nakasho_dev:20170601023814p:plain

Tizen関連のサイトのURLです。
Tizen ExpertはTizenの状況を幅広く知るために良いサイトです。

資料の説明については以上です。

.NETラボでAI×Office365についてLTしてきました。

報告にずいぶん間があいてしまいましたが、4月22日の.NETラボ勉強会でAI×Office365についてLTしてきました。

dotnetlab.connpass.com

LTのタイトルは「AI時代のOffice365」です。

docs.com

MicrosoftはAIに注力しておりOffice365製品・サービスにもAIが活用されています。
日本マイクロソフトも働き方改革第2章によってOffice365で蓄積されたデータからAIによる気づきを活用することで働き方の質を目指すと発表しています。

その営みの中でOffice365を活用すべきと判断する企業が増えてくることを期待して、Office365開発を学ぼうという趣旨の資料です。

今回はLTの5分用資料だったのですが、活用方法、開発方法等もまとめて30分~40分くらいのセッション資料にはまとめたいと思っています。

初心者歓迎XamarinのLT会!Xamarin入門者の集い #2 でLTしてきました。

ずいぶん間があいてしまいましたが、4月17日に「初心者歓迎XamarinのLT会!Xamarin入門者の集い #2」 でLTしてきました。

jxug.connpass.com

一般枠で申し込んでいたのですが急用の方のキャンセルで前日の段階でLT枠が空いたのでLT枠に乗り換えました。
そして私が1日で作成するとしたらどんなテーマを選ぶかですが、当然Tizenですよね。
ちょうどPreview3が出た直後で、それを紹介したいこともあり、さらっと作成できました。

docs.com

Preview3で一通り機能を出したという認識になったのか、Gitのログを見ても新しいAPIを実装するよりもすでに実装したAPIのテコ入れをしている感じです。
Tizen.NETはTizen4.0で正式リリースとなります。待ち遠しいですよね。

.NETラボでTizen .NET Developer Preview2リリースについてLTしてきました。

3月25日の.NETラボ勉強会でTizen .NET Developer Preview2リリースについてLTしてきました。

dotnetlab.connpass.com

当日はBotFrameworkについてのセッションで登壇したのですが、Tizenについても語りたいので資料を作成しました。いつものネタ枠です。

docs.com

内容について以下に補足します。

Tizen .NET Developer Preview2 リリース内容

Preview1の時は2015にしか対応していなかったですが、Preview2で2017に対応しました。 また、Tizenの.NET対応についてMicrosoftからの反応もConnect();2016に引き続き観測できています。

launch.visualstudio.com

Visual Studio 2017 launch eventではミゲルからTizenという言葉が出ていました。

connpass.com

日本マイクロソフトVisual Studio 2017 Release Celebrationでもスライドで
Visual Studio Tools for Tizen for Visual Studio
という表記がありました。明らかにVisual Studioが被っているのをおかしいと思わなかったのかな...

Tizenの.NET対応やXamarin.Forms対応はMS主導ではないので、MS側からの情報発信はあまりないのかな、と思っていたのですが、発信してくれているようです。

  • TVアプリケーションの開発に対応

Preview2からTVアプリケーションも.NETで開発できるようになりました。

  • プロジェクトウィザードを実装

パッケージ名の入力や、Mobile,TVのProfileに対応するか否かを選択できるようになりました。

  • 証明書マネージャ

Preview1ではダミーのものを入れることしかできませんでしたが、ちゃんとGUIから作成して管理できるようになりました。

Preview1ではマニフェストファイルを直接編集していましたが、GUIから編集できるようになりました。

以前は単一のスマートフォンエミュレータのみだったのですが、画面サイズの指定ができるようになり、TVかモバイルかを選べるようになりました。

バッテリー状況やGPS情報などをGUIからコントロールできるようになりました。

  • プラットフォーム固有のAPIを追加
    • Media Recorder (capi-media-recorder)
    • Push (libpush)
    • Smart Card (capi-network-smartcard)
    • NFC (capi-network-nfc)
    • System Setting (capi-system-system-settings)
    • Media Controller (capi-media-controller)
    • Web URL Download (capi-web-url-download)
    • Speech to Text (stt)
    • Text to Speech (tts)
    • Account Service (account-svc)
    • Media Vision (capi-media-vision)
    • Geofence Manager (capi-geofence-manager)
    • OAuth2 (liboauth2)
    • WiFi Direct (capi-network-wifi-direct)

Preview1リリース時は60%しか対応していないとしていましたが、だいぶ追加してきたようです。

Roadmap

これは若干悲しい発表でした。
たぶんTizen3.0では正式に.NET対応をリリースせず、Tizen4.0のリリースに合わせてくる内容だったからです。
Tizen4.0の一部として2017年9月にリリースするとありますが、Tizen4.0はPublicM2が2017年10月ということなので正式リリースは年末か年明けになるんじゃないでしょうか。
Tizen.NETを実機で動かせる日が待ち遠しいですね。

.NETラボでBot Frameworkについて登壇してきました。

3月25日の.NETラボ勉強会でBot Frameworkについて登壇してきました。

dotnetlab.connpass.com

Bot Frameworkについてのノウハウが蓄積してきたので、.NETラボ主催者の木澤さんに登壇を申し出たところ、枠を確保してくださいました。

そんなわけでTwitterでつぶやいたところ、以下のようにテーマが重なっていることが判明。

でも、俯瞰的な内容メインとLUISメインでそんなに重ならないかな、と思いつつ、より俯瞰的な資料にしようとして作成したものがこちらです。

docs.com

内容について以下に補足します。

P.4 ~ P.6 チャットサービス

チャットを利用している人は年々増え、チャットボットプラットフォームも様々なものが増えています。
なぜ、チャットボットプラットフォームが増えているのでしょうか。
それにはチャットボットの可能性について色々な期待があるからです。

P.7 ~ P.10 チャットボットへの期待

チャットボットへの期待について以下の方々からの意見を載せています。

なぜ、IT業界だけでなくシンクタンクの情報を重視するかというとお客様や自社の営業に提案する際には有効だからです。
ITに詳しくない人へFacebookMicrosoftのCEOの意見だけ見せても、売りたいものを魅力的に言っているんでしょ、と判断されてしまうことがあります。また、直接のお客様担当者はITの知識があり魅力的に思っても、その上長や役員クラスを担当者が説得できないこともあります。
そんなとき、国内のメジャーなシンクタンクの記事や総務省の情報通信白書は経験上有効です。古い体質の大きな会社ほどその傾向があります。
今回の資料にはありませんでしたが、以下のような記事も参考になります。

P.11 ~ P.12 Microsoftによる知的アシスタントといえば

笑いを取ろうと狙っていたのは事実ですが、イルカも立派な対話的インタフェースでした。
MicrosoftはこのころからAIに力をいれていたと考えさせられます。

セッションでは伝え忘れてしまいましたが、りんなはしっかりビジネス展開できていることも紹介したかったです。

news.microsoft.com

また、Tayによる失敗の際にナデラ氏が語ったことは非常に前向きで共感できました。

  • 「我々が対処した最初の方法は、実際にリスクを取った行為をチームが悔やまないように念押しすることだった」
  • 「もし過ちを犯したら、必ず(過ちから)学ぶようにしなければならない」

www.nikkei.com

P.13 AIの民主化

誰もが人工知能の恩恵を受ける世の中にあるとき、人間との橋渡しの一部はチャットボットが担うと私は考えています。

P.16 ~ P.19 BotFramework関連図

Bot Connectorの説明でワンソースでマルチチャネルの説明の際にXamarinの話を絡めたのは意図的です。だってJXUGだもの。

P.20 ~ P.32 Bot Builder

ワンソースでマルチチャネルと言っても、チャットサービスによっては対応できないものもあります。
それをかくにんするのにChannel Inspectorは重要です。
サンプルアプリはDialogやStateの使い方がすごく参考になります。 また、ここで紹介するのを忘れたのですが、なぜかDirectX関連のGitHubのところにもサンプルがあります。

github.com

P.33 ~ P.42 Developer Portal

Botの登録・管理について説明しました。
各チャットサービスとの連携方法についてDeveloper Portal上で丁寧に説明してくれているのはありがたいです。
チャネルについて説明ついでにDirectLineAPIについて説明しました。
LINEに公式対応して欲しいですね。
また、DirectLineAPIの紹介でXamarinのサンプルを絡めたのは意図的です。だってJXUGだもの。

P.43 ~ P.45 Bot Directory

そういや公式には検索機能があるって記述あるけど検索フォームなくなっていますよね。

P.46 Azure Bot Service

・・・

P.47 ~ P.51 サーバ構成例

全部Azure上で構築したほうがレスポンスは速くなります。
クラウドには社内ルール等で置けない情報資産を扱う場合はオンプレミスでの方法もあるが、インターネット上の通信が多くなるのでレスポンスが遅くなる懸念があります。
オンプレミスの注意点として.NET Coreに対応していないので原則WindowsServerとなります。
現在、コミュニティがPorting中だけれど待てない人はmonoでXSPを使いましょう。
自分でPortingしてContributeするのもありですね。

P.52 情報資産に関する注意点

Bot Directoryで公開することが前提であり、Bot Connectorは会話情報を匿名化してサービス改善の目的で使用するかもしれません。
でも、Skype for Business や Microsoft Teamsなど、守秘義務を扱いそうなサービスでもBot Frameworkの利用を促しているので、方針変更するのを期待しています。

P.53~P.56 関連情報

参考になるので見てください。

では、楽しいチャットボットライフを!

.NETラボでXamarin.Formsについて登壇してきました。

1月28日の.NETラボ勉強会でXamarin.Formsについて登壇してきました。

dotnetlab.connpass.com

登壇するきっかけは11月の.NETラボ勉強会でMicrosoftMVPの西村誠さんが登壇された「Xamarin入門(技術というより心構え編)」というセッションで色々とコメントしたら、西村さんから「君がXamarinについてしゃべりなよ」と言われたので、登壇することとなりました。

Xamarinを始めたのが昨年の無償化後で、まだまだXamarinが使えているとは言えない状況の自分ですが、ハンズオンのメンターなどを何度か経験し、初心者向けのセッションであれば対応可能だと判断しました。

そんなわけでタイトルは「Xmarin.Formsから始めるクロスプラットフォーム開発」として、資料を作成しました。

docs.com

構成は以下のようにしました。

  • Xamarin
  • Xamarin.Forms
  • コードの共通化
  • Xamarin.FormsでPlatform固有の機能を扱う手段
  • Xamarinのデメリット
  • Xamarin.Formsの学び方
    • 書籍編
    • ハンズオン編
    • ツール・ライブラリ編
    • Prism編
    • Azure編
    • DevOps編
    • サンプルアプリ編
    • コミュニティ編
  • Xamarin関連情報
  • Xamarin Advent Calendar 2016

40分も時間をいただいたので、なるべく詰め込もうとしたらスライド88枚にもなり詰め込みすぎ感が...

また、発表練習が足りず、だいぶパワポのメモに頼ったスピーチになってしまいました。参加者の方からは「スライドを見ながらナレーションを聞いているようで聞きやすかった」との意見ももらいましたが、メモを見ずにスピーチしたいものです。

今回の発表で自分にとって良い復習にも予習にもなりました。 今後もセッションの機会があれば積極的に対応したいと思います。

後日共有いただいたアンケート結果では、このセッション目当ての方もけっこういらっしゃって期待に応えられたか不安ではあるのですが、おおむね好意的な意見を頂けました。
もっと突っ込んだ内容が聞きたかったという意見の方は、なぜ隣の部屋でやっていたJXUGのイベントに行かなかったんだ、と小一時間問い詰めたい

おまけ

真面目にしゃべったら知恵熱が出てしまったので、ネタをやらねばとLT枠でTizenについて発表してきました。

docs.com