TACO に関する質問にお答えします!


 

本記事は、マイクロソフト本社の The Visual Studio Blog の記事を抄訳したものです。
【元記事】 Answers to your top TACO questions 2016/10/20

 

先月開催された Microsoft Ignite カンファレンスで、光栄にもパネル ディスカッションに参加させていただきました。モバイル アプリ開発に関するディスカッション (英語) で、Xamarin のスペシャリストの James Montemagno、Visual Studio C++ チームの Ankit Asthana、UWP チームの Daniel Jacobson と共に Visual Studio Tools for Apache Cordova (略称 “TACO”) についてお話ししました。セッションでは、オーディエンスの方々から非常に興味深い質問を多数いただきました。よくいただく質問もありましたので、Visual Studio ブログ読者の皆様のご参考になるように、この記事では TACO に関して寄せられた特に一般的な質問への回答を載せたいと思います (TACO は「タコス」ではないので、ソフトシェルがいいかハードシェルがいいかというご質問にはお答えしかねます!)。

この記事で取り上げていない内容についてご不明な点がありましたら、ページ下部のコメント欄までお寄せいただければ幸いです。重要なご質問には追加記事でお答えさせていただきます。

TACO とは何ですか?

TACO は Tools for Apache Cordova の略称で、Web テクノロジ (HTML、JavaScript、CSS) を使用したモバイル アプリケーション開発をより簡単に、よりわかりやすく、より迅速に進めるための一連のユーティリティで構成されており、Android、iOS、Windows の各デバイス向けのアプリ開発に使用できます。TACO はマイクロソフトが開発した製品スイートであり、以下のものがあります。

.NET と Web 開発の両方のスキルがある開発者は、モバイル開発に Xamarin と Cordova のどちらを選ぶべきですか?

私もそうですが、Visual Studio ブログ読者の多くは .NET と Web ベースのテクノロジの両方の開発経験を持っています。そのため、.NET のスキルをモバイルに活かせる Xamarin と、Web ベースのスキルを活かせる Apache Cordova のどちらもモバイル開発にとっては魅力的に映るでしょう。だからこそこの質問は、何年経っても一番多く寄せられる質問なのです。また、マイクロソフトが Xamarin を買収し、Xamarin を Visual Studio で無料で使用できるようになったため、今後はさらに増えると思われます。

この質問に対しては、「場合による」としかお答えできません。アプリや開発チームの事情はそれぞれ違うので、開発者やチームのスキルを考慮してどちらのテクノロジがより適切であるかを判断する必要があります。なお、どちらを使っても既存のコードのほぼ 100% を iOS、Android、Windows の各アプリケーションで再利用できます。

Cordova が適しているケース

  • JavaScript、HTML、CSS、およびこれらのテクノロジをベースに構築されたライブラリを用いて開発する場合
  • 既に Web サイトや Web コンテンツを所有していて、それらをモバイル アプリで再利用したい場合
  • カメラなどの特に一般的なデバイス機能の利用を計画している場合
  • 不具合の修正や差分更新をアプリに発行する際にストアへの再登録を不要にする CodePush (英語) などのサービスを活用したい場合

Cordova ではあらゆる種類のモバイル アプリを作成できますが、ゲームなどのグラフィックやデータ処理の負荷が高いアプリケーション、また、高機能でネイティブ アプリ並みのユーザー エクスペリエンスとアニメーションを備えるアプリの構築には向いていません (ネイティブ並みのアプリを構築できるフレームワークを使用するという方法はあります)。お客様からお話を伺ったところ、Cordova の用途で共通していたのは、「基幹業務」機能のモバイル化や、データ入力やデータ フォームをベースとする Web アプリのモバイル化でした。たとえば、経費や勤務時間の追跡、販売店の在庫管理、投資ポートフォリオ追跡などです。

Xamarin と Cordova のどちらでもデバイス ネイティブ機能を利用することはできますが、そのしくみには大きな違いがあります。Xamarin にはデバイスのネイティブ API のサポートがすべて組み込まれていますが、Cordova では各種のオープン ソース プラグインを追加する必要があります (プラグインの詳細については後述のセクションを参照)。プラグインは品質が一定しておらず、また Xamarin ほど頻繁には更新されません。Adobe やマイクロソフトなどの企業では、特にビジネスやエンタープライズ企業で頻繁に使用されるプラグインが正常に動作するよう保守を怠らないようにしていますが、それ以外のプラグインについては規模の大きいコミュニティに委ねられています。

Xamarin が適しているケース

  • ネイティブ API 機能に完全にアクセスしたい場合
  • 最新のユーザー インターフェイス ガイドラインに沿ったアプリケーションを作成する必要がある場合
  • C#、.NET、XAML (Xamarin.Forms の場合)、およびこれらのテクノロジをベースに構築されたフレームワークで開発する場合
  • 既に .NET ライブラリ (JSON.NET など) やその他の .NET アセットを所有していて、これらをモバイル アプリで再利用する場合
  • デバイスのパフォーマンスを最大限に発揮したい場合

Xamarin では NuGet などの既存の .NET エコシステムのテクノロジを使用でき、ネイティブ アプリと同等のパフォーマンスで動作する完全にネイティブなアプリケーションを構築できます。各プラットフォームの API を利用できるため、それぞれのプラットフォームで提供されている最新の優れた機能を活用することができます。ネイティブなプラットフォームを使用してアプリを構築する場合は Xamarin を使用することをお勧めします。

どちらを選択してもやるべきこと

どちらのツールを使用するにしても、まずはツールを試すためにプロトタイプをいくつか作成し、開発スタイルやアプリケーションのニーズに本当に適合しているかをご確認ください。

既に Web アプリはあります。モバイル化に Cordova を利用したいのですがどうすればよいですか?

既存の Web アプリケーションをモバイル化する最も簡単な方法は、いわゆるホステッド Web アプリケーションを作成することです。つまり、Cordova アプリケーションを作成し、そのすべてのコンテンツをデバイスのローカル ドライブに保存するのではなく Web サーバー上でホストするのです。これは、Web 開発者にはお馴染みの Web サーバーでホストされる従来のモデルを踏襲したものです。そのため既存の Web アセットを活用できるうえ、作成したアプリをアプリ ストアに公開することができます。ホストされた Web アプリを Apache Cordova で作成する方法については、TACO のドキュメント サイトのチュートリアル (英語) をご覧ください。このホステッド Web アプリ モデルでは、これまでのようにアプリケーション内で Web サイトをホストできるだけでなく、Cordova プラグイン モデルを使用してホステッド Web アプリケーションからデバイス ネイティブ機能にアクセスすることも可能です。

このモデルでは多少のダウンサイズが可能ですが、ネットワーク接続がない状況でオフラインでの動作が可能なアプリケーションを作成する必要がある場合には追加作業が発生します (ネットワーク接続を使用できないときは Web サーバーからアプリのコンテンツを取得できないため)。

ほかにも、モバイル デバイス専用の別のバージョンを作成することもあるでしょう。その場合には共通のコードを共有できます。詳細については以降のセクションを参照してください。

Cordova と新しい Progressive Web Apps モデルにはどのような違いがありますか?

Progressive Web Apps (PWA) では、エンド ユーザーがホーム画面に追加可能な形のモバイル バージョンの Web サイトを構築できます。この PWA のアプリは Web サーバーで実行されますが、オフライン キャッシュの処理、プッシュ通知の送信、バックグラウンドでのコンテンツ更新などの機能を追加できます。Geolocation などの現在使用可能な Web 標準 API を使用すると、ネイティブ アプリのように機能する Web エクスペリエンスを簡単に作成できるため、アプリ ストアでアプリを探す必要がなくなります。詳細については、Ionic チームが執筆したこちらの記事 (英語) をご覧ください。

Apache Cordova と現在の形式の PWA との大きな違いは、主に下記の 3 つです。

  1. PWA ではデバイスのネイティブ機能に完全にアクセスすることができません。標準 Web API でサポートされている機能にのみアクセスできます。Cordova では、特定の機能を提供するプラグインさえ作成されていれば、すべてのデバイス機能を使用することも不可能ではありません。
  2. PWA はアプリ ストアで公開されません。作成したアプリをアプリ ストアで公開する場合は、Cordova で作成する必要があります。現在 Microsoft Edge チームでは PWA アプリを Windows ストアで公開する方法 (英語) を検討していますので、今後にご注目ください。
  3. PWA をサポートしているモバイル プラットフォームは現時点では限られています。iOS や Windows のデバイスでは現在 PWA モデルをサポートしておらず、最新バージョンの Android と Chrome のみがサポートしています。この記事の執筆時点では、PWA は Chrome ブラウザーで使用可能です。Firefox と Opera の各 Web ブラウザーでも試験版の機能として使用できます。Microsoft Edge に関しては今後 PWA のサポートを追加することが発表されています (英語)。あらゆる大手デバイス メーカーや主要なフォーム ファクターに対応し、エンド ユーザーに幅広く提供するためには、現時点では Cordova を使用することをお勧めします。

Apache Cordova ではプッシュ通知などのネイティブ機能を使用できますか?


はい。Apache Cordova でプラグインを使用すれば、さまざまなデバイス ネイティブ機能を使用できます。たとえば、カメラ、バッテリ状態、プッシュ通知などのデバイスの機能に対応したプラグインがあります。Cordova プラグイン リポジトリ (英語) を検索すると、特に一般的なデバイス機能に対応した各種プラグインが見つかります。プッシュ通知を連携させる場合は、Azure App Services を使用して Cordova アプリでプッシュ通知を追加する方法をお読みください。

プラグインを作成すると次のようなことが可能になります。

  • サポートされているすべてのプラットフォームで単一の JavaScript API を使用する
  • サポートされているプラットフォームのそれぞれのネイティブなコードを実装する (iOS の場合は Swift、Android の場合は Java、Windows の場合は C#)

チームでは、企業のビジネスにとって最も重要なプラグインが確実に動作するよう支援を行っています。精力的に活動している Cordova 開発者コミュニティでも、その他の機能の開発が進められています。マイクロソフトでは、Android、iOS、Windows のプラットフォームでサポートされているテクノロジについては、それに対応する重要なコア プラグインがそれらのデバイスで正常に動作することを確認しています。

どうすれば 5 ~ 10 年使い続けられるモバイル アプリを作成できますか?

私が過去に携わったプロジェクトでは、開発チームによる保守作業が 5 年以上ほとんど必要ないソリューションを構築したことがありました。同じような経験をされた開発者様も多く、このように長く使用できるモバイル アプリの作成方法についてご質問をいただいています。これほど長期の使用に耐えるモバイル Web アプリを開発したことがある方なら、Cordova で同様のモバイル アプリを作成することも必ずできます。

ただし、複雑なアプリを作成する場合には事情が変わってきます。たとえば、画面が複数あって、デバイス ネイティブ機能にアクセスしたり、プッシュ通知などの機能に対応したサードパーティ サービスも使用するようなアプリです。このようなアプリは、今市場に出回っているデバイスだけを考慮して設計すればよいわけではなく、5 ~ 10 年の間に主流となるデバイスに変化があることを考慮しておかなければなりません。未来のデバイスで UI がどのように動作し、どのようなデバイス機能がサポートされているかを検討し、今後も使用し続けられるサービスを選択する必要があります。しかし、私も例外なく、多くの方にとって将来の要件を正しく予想する困難と言えます。

Microsoft Ignite カンファレンスでのモバイル関連のパネル ディスカッションでは、Cordova、Xamarin、Objective-C、Swift、Java、その他どのサービスを使用しても、モバイル アプリの将来について予測することは不可能であるという意見で概ね一致しました。それよりは、将来の要件やモバイル デバイスの変化に対応するためにスケーリング可能なサービス層を構築することが有効であると考えます。たとえば、ビジネス ロジックをアプリケーションに直接コードとして組み込むのではなく、RESTful API などを使用してアプリケーションから呼び出されるサービス層をバックエンドに作成して、そこからロジックを処理するようにします。こうすると、時間が経ってアプリケーションのニーズが変化したときに、または新しいモバイル アプリを作成した場合に、コードを変更することなく既存のサービス層をそのままアプリから使用することができます。

アプリのサービス層をサポートする以外に、次のマイクロソフトのサービスがお客様の業務に活用できないか検討してみてください。

他にご質問はありますか? いつでもお待ちしています!

この記事では、開発者の皆様から寄せられた一般的な質問の一部を取り上げましたが、他にもさまざまな疑問をお持ちかと思います。どうぞお気軽に下部のコメント欄までご質問ください。また、メールでも受け付けています。Cordova に関する問題やベスト プラクティスについては、Stack Overflow の “visual-studio-cordova” タグ (英語) もご参照ください。TACO の詳細についてはこちらのドキュメント サイト (英語) もご覧ください。

Jordan Matthiesen (@JMatthiesen)

Tools for Apache Cordova 担当プログラム マネージャー

Jordan Matthiesen は、マイクロソフトで Web アプリケーションおよびモバイル アプリケーション開発者向けの JavaScript ツールを担当しています。それ以前にも 18 年以上の開発経験があり、現在は優秀なモバイル開発者からできるだけ多くの意見を取り入れることに力を入れています。プライベートでは、妻と 4 人の子ども、2 匹の猫、1 匹の犬と共にコーヒーを飲みながらゆっくり過ごす時間を大切にしています。

 

Comments (0)