ネイティブアプリケーションってなに
ネイティブアプリケーションとは
ネイティブアプリケーションとは、特定のオペレーティングシステム (OS) に対応した実行ファイルとして作成されるアプリのことである。
たとえば Windows で動作するアプリは Windows 用に作られたネイティブアプリであり、iOS や Android ではそのまま動かない。
ネイティブアプリの特徴
OS に合わせて動く
ネイティブアプリは、それぞれの OS の特性を正確に利用したアプリを作成できる。
そのため、OS に合わせて実行ファイル拡張子が異なる。
OS | ファイル拡張子 |
---|---|
Windows | .exe ファイル |
macOS | .app ファイル |
Android | .apk ファイル |
iOS | .ipa ファイル |
デバイスの機能をフル活用できる
カメラや GPS、センサー、Bluetooth など、ハードウェアの機能に広範囲かつ安定してアクセスできるのはネイティブアプリならではの利点である。近年は Web アプリ(PWA など)でも一部の機能にアクセスできるようになってきているが、プラットフォームによって制限があったり、すべての機能にアクセスできるわけではない。そのため、高度なハードウェア制御や OS 連携が必要なアプリでは、ネイティブアプリが依然として有利である。
インストールが必要
ネイティブアプリは、利用する前にあらかじめ端末にインストールする必要がある。これは、アプリを動作させるためのプログラム本体(実行ファイル) や 必要なリソース(画像、音声、設定ファイルなど) をあらかじめ端末に保存するためである。
スマートフォンの場合は、App Store(iOS) や Google Play(Android) といった公式のストアを通じてインストールを行うのが一般的である。また、パソコンの場合は、Web サイトやアプリストアなどからインストーラー(.exe や.pkg など) をダウンロードしてインストールする。
ネット接続がなくても動作可能
ネイティブアプリは、インターネットに接続していなくても多くの機能を使えるのが強みである。これは、必要なプログラムやデータがあらかじめ端末内に保存されているため、外部のサーバーにアクセスしなくても動作する仕組みになっているからだ。
たとえば、メモ帳や電卓、オフライン対応のゲームなどは、通信環境に左右されずいつでも使える。
ただし、アプリが外部のサーバーやデータベース(DB)と連携して動作する場合は、ネットワーク接続が必要となる。たとえば、最新のデータを取得したり、ユーザーの情報を保存するような処理は、通信を介してサーバーにアクセスする必要がある。
よく使われるネイティブアプリ開発環境・言語
Windows アプリ: .NET Framework / .NET (C#, VB.NET)
- Visual Studio を使って開発する。
コンソールアプリケーションであれば、vsCode で開発できるが
Windows Forms 等は、Visual Studio を使用する必要がある。 - Windows Forms, WPF などで UI を作成する。
Visual Studio 上でボタンやテキストボックスなどの部品を画面に配置するだけで、直感的にアプリのためを作成できる。
.NET については、以下の記事も参考にすると理解が深まるのでぜひ。
macOS/iOS アプリ: Swift / Objective-C (Xcode)
- Apple 公式の Xcode を使用する。
Xcode という IDE を使用することで、開発が可能。
IDE で、エミュレータを動かすことが可能。
MacOS のみだったが、現在では、windows OS でも開発できるらしい。 - Swift が現在の主流である。
元々は、Apple が開発した C 言語にオブジェクト指向を取り入れた言語であるObjective-C (C++とは別)を使用していたが、現在では swift を使用することが多い。
Android アプリ: Java / Kotlin (Android Studio)
- Google 公式の Android Studio を使用する。
Android Studio という IDE を使用することで、開発が可能。
IDE で、エミュレータを動かすことが可能。 - Kotlin が主流になりつつある。
Google が Kotlin を Android 開発の公式言語として発表したこと、Java の相互運用性があること(Java のコードやライブラリが使用できること)等などがあり、現在では Kotlin を使用することが多い。
クロスプラットフォーム (ネイティブ対応)
Flutter (Dart)
Flutter は Google が開発しているオープンソースの UI フレームワークであり、Dart という言語で記述する。ひとつのコードベースで iOS、Android、Web、デスクトップ(Windows, macOS, Linux) といった複数のプラットフォームに対応したアプリを開発できる。
UI 部品がすべて独自実装されているため、プラットフォームに依存せず に一貫した見た目と動作を実現できる。一方で、OS ごとの細かな見た目の違いを再現したい場合は、工夫が必要になることもある。
React Native (JavaScript)
React Native は Meta(旧 Facebook)によって開発された、JavaScript を用いてモバイルアプリを構築するためのフレームワークである。React のコンポーネントベースの思想を引き継ぎながら、iOS や Android のネイティブコンポーネントに変換してくれる。
Web 開発者が比較的短期間でモバイルアプリ開発に取り組みやすく、既存の JavaScript ライブラリやエコシステムも活用しやすい。ただし、複雑な処理やパフォーマンスが求められる箇所では、ネイティブコード(Swift や Java/Kotlin)との連携(ブリッジ)が必要になることがある。
MAUI (.NET)
MAUI(.NET Multi-platform App UI)は、Microsoft が開発するクロスプラットフォーム向けの UI フレームワークであり、.NET(C#)を使って Windows、macOS、Android、iOS 向けのアプリをひとつのコードベースで開発できる。
WPF や Xamarin.Forms の後継として位置付けられており、Visual Studio を使って簡単にクロスプラットフォーム開発が行える。C# や .NET の知識をそのまま活かせるため、既存の .NET 開発者にとって親和性が高い。
Discussion