クロスプラットフォーム開発のベストアプローチ

以前、ちらっと書いたけれど、

クロスプラットフォームのネイティブなアプリ開発

  • クロスプラットフォーム開発とクロスデバイス開発は別もの。
  • クロスプラットフォームの開発を謳ったものでも、
  1. 抽象度(つまりは最小共通項)を高めれば高めるほど出来る事が少なくなる。
  2. 抽象度を低めたただの薄いラッパーにすると、ネイティブで作った方がマシ。
  3. サードパーティー製に頼ると、いざと言うときに死ぬ。
  4. どの道、ターゲットプラットフォームネイティブのシステム開発に理解がないとまともなものは作れない。

という落とし穴がある。

なので、クロス・プラットフォームとクロス・デバイスを突き詰めると、出来る事がブラウザ上の表示と同じになるので、結局、ただのウェブページでいいじゃん、なんて話しになったりする。

ネイティブにコンパイルできるFlutter や Delphi のFiremonkey でも、独自にGUIウィジェットのUIをレンダリングすると、いかに似せていようとも、プラットフォーム固有の(例えばテーマを変えた、OSバージョン違い)挙動と異なってしまって、微妙な違和感(これが結構重大)浮いてしまう。簡単な表示だけなら問題ないけれども、それなら、またまた単なるウェブページでいいじゃん、という話しにw。

ネイティブにコンパイルできて、ネイティブのAPIをシームレスに呼べて、ネイティブのウィジェットを使えるLazarus/Object Pascal が唯一で一番なのだけれども。。。(Electronみたいなのも作ろうと思えば作れる)、モバイルが弱い。

じゃ、そもそもどういうものが理想かというと。。。

MVVMで、Viewと、ViewModel, Model をかっちり分離した(例えばWPF+XAML のように) スタイル。

これで、Viewだけを iOS用、Windowsデスクトップ用、android用、Linuxデスクトップ用、作って、切り替えるだけ、みたいな。もちろん、裏で各プラットフォーム・デバイスのネイティブのUIウィジェットを使う。そうすれば、ロジックは共通、Viewだけ切り替えで済む。

現状、ちゃんとMVVMで作ったWPFだとViewだけの切り替えは異常に簡単。でも、対象プラットフォームがWindowsのみ。機能制約版WPFのUWPにしても、結局Windowsのみ。しかも、.Net上でしか動かない。ネイティブじゃない。

そこで、Xamarin.Forms 。これがどこまでネイティブに近づけるか。。。

因みに、Xamarin.iOS って、C#でiOSネイティブ開発が出来ますってだけで、だったらSwift使った方が良い。だって、結局MacのSDKとにらめっこだし。Swift+xcodeの知識ないと何かあった時に対応できない。Swift+xcodeの知識あるなら、そっちで作ればよいじゃんwという。。。

Xamarin.Forms は、バックエンドにiOS, Android, だけでなく、Windowsデスクトップ(WPF)や、Linuxデスクトップ(GDK)もサポートしてくるらしいので、出来具合によっては、なかなか面白い事になりそう。

 

Leave a Reply