スマホアプリの開発方法は色々
Webサイト制作であれば、フロントエンド側はHTML・CSSとJavaScriptを使って作成するのが普通であり、王道と言えます。
WordPressやWixなどのWebサイト作成支援ツールを利用するにしても、HTML・CSSの基礎知識は必須と言えるので、Webサイトを作りたいという初心者の方には、『じゃあまずはHTMLとCSSの勉強から始めよう』とアドバイスしやすいです。
一方、モバイルアプリ制作の場合、『これが普通』と言える開発方法が決まっているわけではありません。
もちろん、モバイルアプリ開発用の主たるプログラミング言語はあるのですが、それについて詳しく知らなくてもモバイルアプリを開発できる仕組みが複数存在します。
後になって『違う方法で開発すれば良かった…!』とならないよう、スマホアプリ開発を始める前に、まず代表的なスマホアプリの開発方法を把握しておくことが重要です。
代表的なスマホアプリの開発方法は、大きく分けて次の2つです。
- ・モバイルアプリ開発用のプログラミング言語を使って開発する
- ・クロスプラットフォームを利用して開発する
モバイルアプリ開発用のプログラミング言語で開発するのはなんとなくイメージできるかと思いますが、クロスプラットフォームには聞き馴染みがないという方もいるかもしれませんね。
詳しくは後述しますが、クロスプラットフォームとは、『一つの技術(プログラミング言語)で、複数のOSに向けたアプリを開発できる仕組み』です。
ご存知のように、スマホ市場はほとんどiOS(iPhone)と、Androidで占められており、それぞれOSが異なるので動作するプログラムやシステムが異なります。
ですが、クロスプラットフォームを使えばそういったOSの違いを気にせずに、iPhone・Androidどちらでも動くアプリを開発できます。
逆に言えば、モバイルアプリ開発用のプログラミング言語では、それぞれのOSに向けたアプリしか開発できないということです。
それを聞くと、このように思いませんか?
『え?じゃあクロスプラットフォーム一択じゃない?』
…確かに、クロスプラットフォームには『iPhoneとAndroidの両方のアプリを一度に開発できる』という、強力なメリットがありますが、デメリットがないわけではありません。
iPhoneもしくはAndroidの、どちらか一方のアプリしか開発できなくても、モバイルアプリ開発用のプログラミング言語を使って開発する方法を選択した方が良い場合もあります。
次の章では、モバイルアプリ開発用のプログラミング言語を使って開発した方が良いケースについて考えてみましょう!
POINT!
- ・モバイルアプリ開発方法は色々あり、どれが王道とは一概には言えない!
- ・クロスプラットフォームを使って開発したアプリは、iOS・Androidどちらでも動作する!
- ・モバイルアプリ開発用のプログラミング言語を使って開発したアプリは、対応するOSでしか動作しない!
デバイスの機能をフル活用したい場合
スマホの端末(デバイス)には、カメラやマイク、位置情報、Bluetoothなどなど、様々な機能が搭載されていますよね。
これらは生活を豊かにしてくれる便利な機能ですが、外部からこういった機能が自由に操作されてしまうと、ユーザーの個人情報が漏れたりなどの不利益が生じる恐れがあります。
そのため、デバイスの機能へのアクセスや利用には制限がかけられており、簡単にはアクセスできないような仕組みになっています。
こういう事情があるので、クロスプラットフォームを使ってモバイルアプリを開発する場合は、デバイスに搭載されている機能を使うのが難しかったり、面倒くさかったり、ライブラリに頼るしか方法がなかったりする場合が多いです。
クロスプラットフォームの場合、OSのアップデートでライブラリが動作しなくなったとか、利用していたライブラリの更新が止まってしまって代替のライブラリを探さないといけなくなったとか、様々なリスクを抱えてしまうことになります。
一方、モバイルアプリ開発用のプログラミング言語を使った開発では、そのモバイル(OS)に最適なプログラミング言語を使用しているということもあり、デバイスの機能をフル活用することができます。
OSのアップデートにもいち早く対応することができ、最新の機能などもライブラリの登場を待つことなく利用できる点は大きなメリットと言えるでしょう。
よって、デバイスの機能をフル活用したアプリを開発したい場合は、モバイルアプリ開発用のプログラミング言語を使って開発した方が良いと言えます。
ちなみに、モバイル開発用のプログラミング言語は、iOSならSwift、AndroidならKotlinがオススメです。
※SwiftはiOS以外にMacOS向けのアプリなども開発できますし、厳密に言えばモバイルアプリ開発用のプログラミング言語というわけではありません。が、ここでは便宜上、モバイルアプリ開発用のプログラミング言語と表現します。
SwiftやKotlinをすすめるのは、なるべく新しい言語・技術を選んでおいた方が何かと有利だからです。
一般的に、新しい言語の方がコードをシンプルに書くことができますし、これからさらに発展を遂げる可能性が高いと言えます。
そういう意味で、これからモバイルアプリ開発を始める人があえてObjective-CやJavaを選択するメリットは薄いかと思います。
※ただし、Javaはモバイルアプリ開発以外でも色々と活躍の場面があるので、状況次第では選択の余地が十分にあります。
また、デバイスの機能をフル活用したいというだけでなく、Google AdMob(モバイルアプリ用のGoogle広告)を入れたい場合も、SwiftやKotlinで開発した方が良いかもしれません。
というのも、Googole AdMobの公式の導入手順説明は、基本的にSwiftやKotlinでそれぞれのOS用に開発することを前提としているからです。
クロスプラットフォームを使う場合は公式の導入手順を参考にできないため、別途、広告挿入用のライブラリを探してライブラリの使い方を学ぶ必要があるなど、けっこう面倒くさいです。
初心者が個人で開発したアプリを有料でダウンロードしてくれる人はほぼいません。収益化を考えるなら、広告をつけるのが現実的な選択でしょう。
なので、AdMobの導入のしやすさは開発手段を選ぶ上でけっこう重要な要素です。
公式の導入手順に沿ってAdMobを利用したい場合は、SwiftやKotlinでの開発も検討してみた方が良いでしょう。
POINT!
- ・モバイルアプリ開発用のプログラミング言語を使った開発では、デバイスの機能をフル活用できる!
- ・iOSならSwift、AndroidならKotlinというプログラミング言語を選択しよう!
- ・Google AdMobを公式の手順に沿って導入したい場合も、SwiftやKotlinでの開発を選択した方が良いかも!
クロスプラットフォームを活用したい場合
デバイスの機能をフル活用したい場合は、モバイルアプリ開発用のプログラミング言語で開発するのがベストと述べましたが、クロスプラットフォームを使った開発ではデバイスの機能を利用できないというわけではありません。
クロスプラットフォームでは自力でデバイスの機能を利用することは確かに難しいのですが、ライブラリを利用することで多くの問題は解決できます。
特に、カメラなどアプリでよく使われる基本的機能であれば、クロスプラットフォームでも特に問題なくデバイスの機能を利用できると考えて大丈夫です。
初心者の方が、とりあえずスマホで動くアプリを作ってみたいというぐらいであれば、クロスプラットフォームによるデバイス機能の制限を感じることはほぼないと言えるでしょう。
ゆくゆくはモバイルアプリ開発専門のエンジニアとして活躍したいのであればSwiftやKotlinを覚えた方が良いと思いますが、趣味・副業でモバイルアプリ開発を楽しみたいという場合は、クロスプラットフォームを利用した方がメリットが大きいかもしれません。
というのも、世界的にはAndroidのシェアが高い(約7割)一方で、日本ではiOS(iPhone)のシェアが高い(約6割)ので、多くの人にアプリを届けるには両方のOSに対応させることが重要となります。
であれば、一度の開発で複数のOSに対応できるクロスプラットフォームのメリットはとても魅力的ですよね。
個人開発の場合、アプリ開発に注げる時間や労力が限られるので、まずはクロスプラットフォームによる開発を第一の選択肢として検討したいところです。
ここでは、クロスプラットフォームの中でも近年勢いを増していて注目度の高いFlutter(フラッター)と、Flutterが世に出る前より存在し、根強い人気と安定感を誇るReact Nativeに触れます。
Flutterの特徴
FlutterはGoogleが開発したクロスプラットフォームで、プログラミング言語はDartです。
また、Flutterは実はモバイルアプリだけでなく、デスクトップアプリなども作ることができるようになっており、活躍の幅が非常に広いのが特徴と言えます。
2023年現在、開発コミュニティの動きも活発で、少し大きめの書店に行けば、日本語の解説本(最新の情報に対応したもの)が簡単に手に入ります。
この『できるだけ新しい情報が掲載された日本語の本(紙)を手に入れやすい』というポイントは、初心者にとってはかなり重要な要素だと筆者は考えています。
ネット検索やChatGPTから得られる情報は断片的なものが多く、エラーを解決したい時などは役立ちますが、アプリ開発の過程を一から体系的に学ぶには向きません。
開発環境の構築からアプリ制作の基礎・応用まで体系的に学ぶには、多くの人が編集に関わり、順序立てて書かれた本を読むのが一番だと思います。
また、紙の本であれば書店で本の内容を直接確認できますし、買う前に自分に合う本かどうかも判断しやすいでしょう。そういった意味で、電子書籍版しか存在しないものより、紙の本の方がおすすめです。
※ただし、本の確認(立ち読み)に関しては本屋さんのルールに従い、店舗や著作者に迷惑をかけないようにしましょう!
近年、注目を集め続けるFlutterは将来性もあり、書籍も豊富なので初心者におすすめのクロスプラットフォームなのですが、注意点もあります。
一番大きなポイントは、開発言語がDartであるという点でしょう。
Flutterに将来性があると言える以上、今後Dart言語の需要も高まるかもしれませんが、現状としてはFlutterありきの言語であり、それ以外でも活躍しているプログラミング言語ではないと言えます。
プログラミング言語として将来性・汎用性が高くて人気のあるPythonなどと比べると、Dartを学ぶモチベーションを保つのは(現状)少し難しいかもしれません。
Flutterの解説本はそれなりにありますが、Flutterで動作するDart言語に関する専門的な本・情報量はまだまだ少ないです。
また、FlutterではWebアプリも作ることができますが、Webの分野ではHTML/CSSやJavaScriptの知識も必要になります。
Flutterの活躍の幅は広いですが、だからと言って全てFlutter(Dart)で解決できるとは思わない方が賢明だと思います。
React Nativeの特徴
クロスプラットフォームの中で最も勢い・人気があるのはFlutterですが(2023年3月時点)、Flutterがどうしても自分に合わないと感じる場合は別のクロスプラットフォームを検討するのもアリです。
特に、『Web制作をしたことがある(JavaScriptは分かる)』という人にとって有力な選択肢となるのが、React Native(リアクトネイティブ)でしょう。
React Nativeは、Meta(旧フェイスブック)が開発したクロスプラットフォームで、使用言語はJavaScriptあるいはTypeScriptです。
名前に【React】と入っている通り、Webアプリ開発のライブラリであるReactの兄弟のようなもので、Reactの仕組み・コードの書き方をそのままモバイル開発に活かすことができます。
Reactは、Web開発の分野においてかなり有名なライブラリであり、2023年3月現在、Webアプリ開発のライブラリの中で最も人気・需要の高いライブラリと言っても過言ではありません。
なので、Flutterは全くの未経験でも、『Reactならちょっと触ったことがある』という人は多いのではないでしょうか?(筆者もまさにこのパターンでした。)
そしてReactの経験があればReact Nativeを学ぶハードルは低いので、クロスプラットフォームとしてReact Nativeを選択するのもオススメと言えます。
プログラミング言語はJavaScript(またはTypeScript)なので、プログラミング言語を学ぶための情報量はめちゃくちゃ多く、言語の習得に困ることはまずないでしょう。
React Nativeに関する日本語の書籍はとても少ないのですが、Reactに関する本や情報は豊富なので、Reactの基本に関しては学びやすい環境が整っています。
以上から、Web制作経験者にとっては夢のようなクロスプラットフォームと言えるReact Nativeですが、注意点もあります。
それは、React NativeだけではSwiftやKotlin、その他モバイルアプリ開発周りの専門知識が多少なりとも必要となるため、Webアプリ制作と同じ感覚ではできない…という点です。
ReactやJavaScriptが分かるからといって、それだけでモバイルアプリが作れるかというと、そういうわけではありません。
メインの部分は、Reactの仕組み + JavaScriptを使ってコードを書けますが、細かいところの対応はSwiftやKotlinを使ったモバイルアプリ開発の経験がないと難しいかと思います。
また、前述のようにReact Nativeの日本語の解説本・情報を得られにくいというのも、初心者の方にとっては辛いポイントかもしれません。
JavaScriptやReactの情報量は豊富なので、根本的な部分を学ぶハードルは低いのですが、React Nativeならではの機能を知るには、公式チュートリアル(英語)を理解できるレベルが必要です。
検索で出てくる日本語のページは、情報が少し古いものが多いので注意しましょう。(概ね2年以上前の情報は、古くて参考にできないケースが多いです)
であれば、結局、React Nativeは使いづらくて、Flutterの方が良いということになってしまうのでしょうか?
実はそんなことはありません。次の章では、React Nativeの強力なツール(サービス)について触れたいと思います。
POINT!
- ・より多くの人にアプリを届けたい場合は、クロスプラットフォームの利用がオススメ!
- ・近年、最も勢いがあって注目を集めているのはFlutter(フラッター)!
- ・Reactを使った開発経験があればReact Nativeもオススメだが、React Nativeだけでは難しい場合も!
React NativeならExpoの利用がオススメ
前章で、React Nativeは決して万能ではなく、SwiftやKotlinなどモバイルアプリ開発の専門知識も必要とするので、結局React Native(JavaScript)だけではアプリは作れない…という弱点を述べました。
この大きな弱点がある以上、React Nativeを選択するメリットはあまりないように思えますよね。
ですが、心配は無用です。React Nativeにはこの弱点をカバーする方法がちゃんと用意されています。
それが、Expoというツールセットです。
Expoを利用しない場合は、XcodeとAndroid Studioが必要となり、開発環境を構築する手順もそれぞれ異なるため、初期設定だけでもかなり大変です。
正直、Expoを利用しないのであれば、もはや最初からSwiftとKotlinで開発を始めた方が良いんじゃないか?…っていう感じです。笑
ですが、Expoを利用することで、初心者が最もつまずきやすい開発環境の構築を全て自動でやってくれます。
その上、XcodeもAndroid Studioも必要なく、VScodeなどWeb制作でもお馴染みのテキストエディタを利用することができます。
また、Expoを使うことでSwiftやKotlinの知識がゼロでも開発が可能となります。
細かな設定をExpoに委ねることで、開発者はJavaScriptだけでモバイルアプリを開発することができるようになっています。
さらにさらに、モバイルアプリ開発で厄介なのが各証明書の発行と設定なのですが、Expoを利用すると、この証明書関係の設定も自動でやってくれます。
『証明書?なにそれ?そんなのが必要なの?』…というレベルでも全く問題はありません。
このように、React NativeにExpoというツールセットをプラスすることで、モバイルアプリ開発のハードルをグンと下げることができます。
そのため、ExpoはReact Nativeの公式サイトでも初心者が開発する方法として推奨されています。
公式チュートリアルの説明も丁寧で非常にわかりやすいです。(英語ですが)
JavaScriptを習得していることと、Reactの基本的な仕組みをマスターしていることが前提条件にはなりますが、その条件が揃っているならば、React Native + Expoという選択もかなりオススメです。
筆者が初めてモバイルアプリを開発するにあたり、FlutterとReact Native(+Expo)のどちらを選ぶか悩んだのですが、最終的に次の要因が決め手となり、React Native(+Expo)を選びました。
- ■筆者がReact Native(+Expo)を選んだ理由
- ・Android Studioなどをインストールする必要がない(SDKとか知らなくても大丈夫)
- ・FlutterのためだけにDart言語を学ぶ必要がない
- ・ReactのuseStateなど便利な状態管理機能を使える
- ・React Nativeの勢いが衰えても、Reactはしばらく生き残りそう(長く使える技術である)
ただし、Expoにもデメリットがないわけではありません。
たとえば、Expo利用の場合はExpoに対応したライブラリしか使用できないので、ライブラリの選択の幅は狭まります。
また、細かな設定をExpoに委ねる反面、開発者側で細かい設定を行うことができない(やりづらい)といったような、『長所は短所』的な面もあります。
とは言え、モバイルアプリ開発に欠かせないライブラリは一通り揃っているので、比較的シンプルなアプリを個人で開発するぐらいであれば困ることはほぼないかと思います。
むしろ、初心者にとってライブラリの選択肢が多すぎることは、逆にデメリットになり得ます。
ライブラリの範囲が限られる=ライブラリの選定に時間を取られない…という見方をすれば、逆にメリットと言えるかもしれません。
Expoで使えるライブラリで満足できなくなる頃には、モバイルアプリ開発にもだいぶ慣れて知識や経験も深まっていることでしょう。
その時が来たら違う方法も試してみる…というのも良いかもしれませんね!
POINT!
- ・ExpoはReact Nativeの開発を簡単にしてくれる強力なツールセット!
- ・React Nativeの公式サイトでも初心者におすすめの方法としてExpoが推奨されている!
- ・使用できるライブラリの幅は狭まるが、ライブラリの選定に時間を取られないと考えることもできる!
ゲーム開発ならUnityも
この記事をご覧になっている方の中には、スマホゲームアプリを作ってみたいと考えている方もいるかもしれません。
これまで紹介してきたプログラミング言語やフレームワーク(クロスプラットフォーム)でもゲームアプリを作ることは可能ですが、ゲームアプリの場合はゲーム制作に特化した開発ツール(クロスプラットフォーム)があるので、そちらの方が有力候補になるかと思います。
それが、Unity(ユニティ)です。
Unityを使って開発することで、ゲームアプリをiOS・Androidどちらにも公開することが可能です。
ゲームに欠かせないグラフィックのアセット(素材)なども使えるので、個人でも様々なゲームを開発することができるようになっています。
ただし、ゲームアプリを作りたい場合、それなりの覚悟が必要になると、筆者は思っています。
…というのも、ゲームの場合、個人ではどうやってもプロ集団(法人)に太刀打ちできない条件が揃ってしまっているため、開発のモチベーションの維持がとても大変だからです。
イメージしてみてください。
シンプルな電卓アプリであれば、個人が作っても、プロ集団(法人)が作っても、そこまで大きな差はつきにくいと言えます。
特定の機能に特化させるなど、アイデア次第で個人がプロ集団に勝てる(差別化できる)余地はいくらでもあると言えるでしょう。
一方、ゲームの場合は、美しいグラフィック、個性あふれる魅力的なキャラクター、思わず口ずさんでしまうようなBGMなど、プログラムの部分以外にも様々な要素が絡んできます。
無料のアセットではどうしても限界がありますし、かといって個人で全て自作するのは現実的ではありません。
有料のものを使ったり外注したりすると、開発費が大きく膨らんでしまうでしょう。
この部分に人とお金を注ぎ込めるプロ集団(法人)には、どうしても勝ちづらい構図が出来上がってしまっているのです。
個人では有名なキャラクラーとコラボするなんていうことも当然難しく、良いゲームを作っても埋もれてしまいやすいので、どうしても開発のモチベーションを維持するのが難しいところがあります。
また、他にもメンテナンスの問題もあります。
たとえば課金アイテムを作ったとして、それに関する不具合が起こってしまったとしましょう。
その場合における迅速な返金対応・不具合の修正など、個人では管理がなかなか難しく、リスクがかなり高いと言えます。(これに関しては、課金要素を用意しなければよいだけの話ではあるのですが)
趣味の範囲で、家族や友達の間でひっそりと楽しめれば良いという感じで作るのであれば良いかもしれませんが、そうではない場合、個人開発者でも勝負しやすい分野を選んだ方がハードルは低いかもしれません。
後々ゲーム開発をやってみるにしても、まず最初はゲーム以外の分野で、モバイルアプリ開発に必要な基礎知識と経験を手堅く積んでからチャレンジするのもアリかと思います!
POINT!
- ・ゲーム開発ならUnityがおすすめ!
- ・ただし、良いゲームを作れても埋もれやすく、開発のモチベーション維持が難しいことも…!
- ・まずは他の分野でモバイルアプリ開発の知識と経験を積むのもアリ!
まとめ
今回の記事のポイントをまとめると、次のことが言えます。
- ■Swift or Kotlinで開発するのがおすすめな人
- ・デバイスの機能をフル活用したい
- ・OSのアップデートや最新機能に柔軟に対応したい
- ・将来的に、モバイルアプリ開発の専門家として活動したい
- ■Flutterで開発するのがおすすめな人
- ・2023年3月時点で、最も人気・勢いのあるフレームワークを選びたい
- ・モバイルアプリ以外に、デスクトップアプリなど他の分野の開発にも興味がある
- ・開発を始める上で、日本語の解説本を頼りにしたい
- ■React Native(+Expo)で開発するのがおすすめな人
- ・既にJavaScriptとReactを習得済みである
- ・開発環境の構築など、面倒な手順はできるだけ簡略化したい
- ・英語のチュートリアルを読んで理解するのが苦ではない
加えて、ゲームアプリ開発をしたいのであれば、Unityが有力な選択肢になる…という感じですね。
また、そもそもスマホアプリとしてリリースする必要があるのか?という点をしっかり検討することも大事です。
大量のデータのやり取りを必要としないようなシンプルなアプリであれば、レンタルサーバーを借りてWebアプリとして公開するのが一番楽です。
ストアの審査を通す必要がなくなりますし、修正やアップデートも管理者の権限で簡単に行うことができます。(スマホアプリの場合、アップデートも基本的に審査を通す必要があります)
スマホの機能は進化を続けており、Webアプリ(Webページ)をスマホのホーム画面に設置することもできるようになったので、これからの時代はスマホアプリにこだわる必要性が薄くなっていくかもしれません。
POINT!
- ・デバイスの機能をフル活用したいなら、Swift・Kotlin!
- ・近年、勢いがすごいのがFlutter、Web制作経験者に有利なのはReact Native!
- ・ゲーム開発がしたいなら、ゲーム制作に特化しているUnity!