モバイルアプリケーションの分類

「モバイルアプリケーション」や「モバイルアプリ」という用語を使用する場合、モバイルデバイス上で動作するように設計された自己完結型コンピュータプログラムを指します。発行時点で、Android および iOS オペレーティングシステムは累計で モバイル OS 市場シェアの 99 %以上 を占めており、モバイルインターネットの使用率は歴史上初めてデスクトップ使用率を上回りました。これはモバイルアプリが 最も広く普及しているインターネット対応アプリの種類 であることを意味します。

また、このガイドではモバイル OS 上で動作するあらゆる種類のアプリケーションを指す一般的な用語として「アプリ」という用語を使用します。通常、アプリは設計されたプラットフォーム上で直接動作するか、スマートデバイスのモバイルブラウザ上で動作するか、あるいはこれら二つの方法をミックスして使用します。この章では、すべてのアプリをカテゴリに適合するモバイルアプリの分類を作成し、各アプリカテゴリのバリエーションについて説明します。

モバイルアプリを四つのカテゴリに分水します。

ネイティブアプリ

モバイル OS に特化したアプリを開発するためにソフトウェア開発キット (Software Development Kit, SDK) で開発されたモバイルアプリはその OS に対して ネイティブ と呼ばれます。ネイティブアプリについて議論している場合、そのオペレーティングシステム向けの標準プログラミング言語、iOS では Objective-C や Swift、Android では Java や Kotlin、で実装されていると想定します。

ネイティブアプリ 特定の OS 向けに設計され、その OS 向けのツールを使用しているため、最高の信頼性で最速の性能を提供する能力を備えています。それらは通常、プラットフォーム固有の設計原則 (Android デザインの原則 など) に準拠するため、 ハイブリッド アプリや ウェブ アプリと比べてより一貫性のあるユーザーインタフェース (UI) となります。オペレーティングシステムとの密接に統合しているため、ネイティブアプリ は一般的にデバイスのほとんどすべてのコンポーネント (カメラ、センサー、ハードウェア支援のキーストアなど) に直接アクセスできます。

しかし、Android は二つの開発キット Android SDK と Android NDK を提供しているため、このプラットフォームの ネイティブアプリ という用語にはいくらかあいまいさがあります。SDK は Java および Kotlin プログラミング言語をベースとしており、アプリ開発のデフォルトですが、プラットフォームの NDK (Native Development Kit, ネイティブ開発キット) は C/C++ キットであり、低レベル API (OpenGL など) に直接アクセスできるバイナリライブラリを開発するために使用されます。これらのライブラリは SDK で構築された通常のアプリに含めることができます。したがって私たちは、Android ネイティブアプリ (つまり、SDK を使用して構築されている) は NDK を使用して構築された ネイティブ コードを持つ可能性がある、と表現します。

ネイティブアプリ の最も明白な欠点はひとつの特定のプラットフォームに限定されることです。開発者が Android と iOS の両方に対して同じアプリを構築したい場合は、二つの独立したコードベースを維持するか、多くの場合二つのプラットフォームを一つのコードベースに移植するために複合開発ツールを導入する必要があります。

以下に開発者が Android と iOS の両方で単一のコードベースをコンパイルできるマルチプラットフォームフレームワークをいくつか示します。

これらのフレームワークを使用して開発されたアプリは、各システムにネイティブな API を内部的に使用し、ネイティブアプリと同等のパフォーマンスを提供します。また、これらのアプリは GPS、加速度計、カメラ、通知システムなど、すべてのデバイス機能を利用できます。最終的な出力は前述の ネイティブアプリ と非常に似ているため、これらのフレームワークを使用して開発されたアプリも ネイティブアプリ といえます。

ウェブアプリ

モバイルウェブアプリ (または単に ウェブアプリ) は ネイティブアプリ のようなルックアンドフィールで設計されたウェブサイトです。これらのアプリはデバイスのブラウザ上で動作し、通常はモダンなウェブページと同様に HTML5 で開発されています。ランチャーアイコンは ネイティブアプリ にアクセスするのと同じような感覚となるように使用することができます。但し、これらのアイコンは基本的にブラウザのブックマークと同じで、単にデフォルトのウェブブラウザを開いて参照先のウェブページを読み込むだけです。

ウェブアプリはブラウザの制限内で動作するため、デバイスの一般的なコンポーネントとの統合が制限されて (すなわち「サンドボックス化」されて) おり、一般にネイティブアプリと比較して性能が低くなります。開発者はウェブアプリでは一般的に複数のプラットフォームを対象としているため、通常、その UI は特定のプラットフォームの設計原則に従いません。しかし、開発者が単一のコードベースを使用することで開発および保守のコストを削減し、プラットフォーム固有のアプリストアを経由せずにアップデートを配信できるため、ウェブアプリ は人気があります。例えば、ウェブアプリ 用の HTML ファイルへの変更は実行可能なクロスプラットフォームのアップデートとして機能することができますが、ストアベースのアプリへの更新はかなりの労力を必要とします。

ハイブリッドアプリ

ハイブリッドアプリネイティブアプリウェブアプリ の長所を生かそうとするものです。このタイプのアプリは ネイティブアプリ のように動作しますが、プロセスの大部分はウェブテクノロジーに依存しています。つまり、アプリの一部が埋め込み型ウェブブラウザ (通常は "WebView" と呼ばれる) 内で動作します。そのため、ハイブリッドアプリネイティブアプリウェブアプリ の長所と短所の両方を継承します。これらのアプリはウェブからネイティブへの抽象レイヤーを使用して、純粋な ウェブアプリ にはアクセスできないデバイス機能にアクセスできます。開発に使用されるフレームワークによっては、ハイブリッドアプリ コードベースはさまざまなプラットフォームを対象とし、オリジナルのプラットフォームのものによく似た UI を利用する複数のアプリを生成できます。

以下は ハイブリッドアプリ を開発するためのより一般的なフレームワークです。

プログレッシブウェブアプリ

プログレッシブウェブアプリ (PWA) は最近のブラウザが提供するウェブのさまざまなオープンスタンダードを組み合わせて、リッチなモバイルエクスペリエンスの利点を提供します。シンプルな JSON ファイルである Web App Manifest を使用して、「インストール」後にアプリの動作を設定できます。これらのアプリは通常のウェブページと同じようにロードしますが、いくつかの点で通常のウェブアプリとは異なります。

たとえば、オフラインで作業したり、モバイルデバイスのハードウェアにアクセスすることが可能ですが、これは ネイティブアプリ のみが利用できる機能でした。PWA は Android および iOS の両方でサポートされていますが、まだすべてのハードウェア機能が利用できるわけではありません。たとえば、プッシュ通知、iPhone X の Face ID、拡張現実のための ARKit はまだ iOS では利用できません。

Last updated