iOSアプリをWindowsに移植してみた | HMDT Blog

iOSアプリをWindowsに移植してみた


何度もここに書いてるけど、HMDTはDropTalkっていうアプリにかなり力を入れてやっています。もう、7年目になるのかな。最初はiPhone向けに開発して、iPadに移植してプチブレイクした。去年はAndroidにも移植したけど、これはぜんぜんダウンロード数伸びなかったねー。iPadの1/10以下で、誤差の範囲内でした。

で、今年はWindowsに移植しました。ずっと要望は多かったんですよ。ようやく出せました、という感じです。先週あたりからMicrosoftストアにも登場しています。ダウンロード数伸びてくれるといいんだけど。

今回、初めてiOSアプリをWindowsに移植してみたんで、そのときの技術的な話を書いてみたいです。

マシンと開発環境の整備

Windowsへの移植を始めたのは、ちょうど一年前くらいかな。2016年の12月あたりからです。まずヨドバシカメラにWindowsマシンを買いに行くことから始めました。個人で使うWindowsマシンを買うのは、初めての体験だった。キャーキャー言いながら悩んで、ASUSのノートPCに決めました。安かったから。15万くらいだったかな。一緒に行った社員の人は、Surface選んでました。

入っていたOSは、Windows 10。この年はWindows 10への無料アップグレードが終わるとかで、その告知が執拗に出てくることがニュースになってたので、噂では知ってたけど、触るのは初めてでした。これが10か、と感動することしきり。そういや、その前に触ったWindowsはなんだっけ? と、思い出してみたら、Vistaでした。Vista以来のWindowsになります。

続いて開発環境を整えます。IDEは、Visual Studioで決まり。フレームワークは何使えばいいのかな、と検索してみたら、なんかいっぱいあるのね。Win32とか、Windows Formとか、WFPとか、UWPとか。どれがどれで、何が何よ?! 調べれば調べるほどわからなくなるので、こっちの条件を羅列してみました。

  • 新規に作る(レガシーコードはない)
  • いわゆるネイティブアプリにする
  • ストアで配布したい
  • タブレットPCで動かしたい(タッチ必須)

以上の条件から絞り込むと、どうやらUWPになるらしいです。この中ではいちばんモダンになるのかな。Windows 10より前では動かないみたいだけど、うーん、まぁいいやということで決めました。ほんとは、DropTalkのターゲットは教育市場なので、Windows 10への移行はものすごく遅れているのでちょっと厳しいです。でも、これから5年とか10年とかサポートし続けていくものなので、中途半端なレガシーは切り捨てることにしました。

ちなみに、Xamarinは最初から選択肢に入ってませんでした。クロスプラットフォームは幻想だと確信してるので。

プログラミング言語

プログラミング言語は、C#にしました。ずっとC言語由来の言語ばっかり触っているので、C#も30分程度勉強したら書き始めることできました。印象としては、モダンさの度合いとしては、Objective-C以上Swift以下ってとこですか。ラムダ式とかLINQとか使い出したら楽しくなってきた。でも余計な記述が多くなって、言語全体が古臭くなって来ている感は否めないですね。そろそろ、後継言語が欲しいです。SwiftやKotlinレベルのものを。C##とかいう名前になるのか。それか、KotlinをUWPに対応させた方が速いのかも。

UWP

GUIフレームワークとしてのUWPは、最初はとにかくXAMLにとまどいました。ユーザインタフェースは、XMLベースのXAMLっていうフォーマットで記述します。Visual Studioに付属するビジュアルエディタを使おうとしたのが失敗でしたね。Interface Builderみたいなものかと期待したけど、ぜんぜんダメだった。XML直接手書きに切り替えてからは、サクサクと開発進むようになりました。

あと、見た目のカスタマイズが厄介ですね。UWPでは、見た目のかなりの部分まで、XAMLで記述されています。だから、このXAMLを変更することにより、柔軟に、そしてコーディングなしでカスタマイズできる、ってのが売りです。でも、なんでもできるってことは、やらなきゃいけないこともたくさんある、ってことにつながります。ちょっとした変更をするにも、なかなかに記述量が多くて大変でした。

もうひとつとまどったのは、View Model。UWPは全体的に、データはView Modelの形式で与えることになってます。Cocoaでいうと、Bindingみたいなもんですね。モデルを管理すれば、ビューの更新は自動的に行われる、素晴らしい仕組みです。でもこれ、便利なのはその仕組みの枠内だけで使っているときだけなんですよ。ビューの表示の仕方をちょっと変えようとすると、とたんにイバラの道が待っています。できないわけじゃないんだけど、書き換えないといけないところが多すぎる。これだったら、View Model使わないで、ベタにViewを触った方が圧倒的に速いよ、ってのがしょっちゅう出てくる。

というわけで、UWPはXAMLとかView Modelとか、かなり洗練されたアーキテクチャを備えるんだけど、その仕組みから外れると途端に使いにくくなります。UWPの枠内で、素早く簡単なアプリを作りたいときにはこれでいいんですよ。でも正直なところ、それで収まるアプリなんてほとんどないです。結局、XAMLやView Modelの枠に縛られないようにプログラムを書いていきました。なんだかなー。高度に統合されたものよりも、緩やかに連携するものの方が、アプリ作る上では使いやすいんだよね。

AFTERWARD

そんなことで、どうにかリリースできるものを作り上げました。思ったより楽しかったです。違う世界を体験すると知見が広がるので、iOSアプリを作っている人もトライしてみるといいと思います。

ただね、いまどきWindows PCで何かやりたい人は、かなり少数派だよね。iPhoneとiPadの方が高機能で高効率になっちゃったから。DropTalkは、いまだ教育分野ではWindows PCを使っているという背景があるから移植したけど、それ以外の分野では必然性が薄いよね。そこがいちばんの問題かな。

  1. コメントはまだありません。

  1. トラックバックはまだありません。