プログラミング初心者がアプリ開発をするための第一歩
スマートフォンやiPhoneが普及して急激に広まってきたアプリ(アプリケーション)。
世界中でたくさんのアプリが今日も開発されていますが、どのように開発されているのか、個人でも未経験からアプリ開発できるのか。
今回は初心者が未経験からアプリを開発するために必要な一連の流れや最近の開発トレンド、使用技術に至るまでといった幅広い話を、G’s ACADEMYで講師を務めたこともある現役エンジニアの山本(やまたつ)さんに聞きました。
山本 竜也
モバイルアプリのエンジニア。熊本県出身の27歳。
新卒で未経験エンジニアとして入社した会社では全くコードを書かず、将来に不安を感じたため、2018年11月にジーズアカデミーのDev12期として入学。在学中に個人アプリをリリースし、卒業後はiOSエンジニアとしてスタートアップにジョイン。その後、フリーランスになり、現在は正社員として働いている。
Flutter を使用した開発が得意で、iOS、Android アプリを開発している。
Twitterはこちら
目次
アプリってなに?
大堀 ”アプリ”という言葉を頻繁に耳にするようになってから10年程度経ちました。
いまさらな気もしますがアプリとは何を指すのですか?あれもこれもアプリといわれているような印象があります。
山本 一般的にアプリといわれるものはWebアプリとネイティブアプリという二つに分かれています。Webアプリは、Webブラウザ上で動かすことができるアプリケーション全般を指します。
大堀 WebブラウザというとGoogle ChromeやFirefox、Safariなどがありますよね。
山本 そうですね。一方のネイティブアプリはGoogle PlayやApp Storeでダウンロードが必要なやつです。
Webアプリとネイティブアプリは開発の仕方が全然違うので、アプリを開発したいと漠然と考えている場合はまずこの二つの違いを整理する必要があります。
Webアプリとネイティブアプリの違い
大堀 Webアプリとネイティブアプリの違いをもっと詳しくおしえてください!
山本 Webアプリの特徴はユーザーが最初に利用するまでの手間が少なく、開発コストも低いことですね。
大堀 Webアプリ開発に関する話は以前山崎先生にも詳しく伺いましたね。
山本 Webアプリ開発に関しては別記事を参照してもらうとして、一方のネイティブアプリは端末にインストールしないと使えないので、いかにユーザーにインストールしてもらえるかは大きな課題です。
大堀 正直、知らないアプリはあまりインストールしたくないですよね。
山本 多くのユーザーも同じ心理なので、この点は工夫が必要です。
ただ、ネイティブアプリは一度インストールしてもらった後は本領を発揮して、Webアプリよりも快適なユーザー体験(UX)を提供しやすいという特徴があります。
一度インストールしているので全体的に動作が早かったり、アプリによってはオフラインでも利用できたり。他にもGPS機能やプッシュ通知、音楽再生等の機能はスマホ本体機能と連携してより快適に動作したりします。
ですのでWebアプリもネイティブアプリも長所があり、最終的に知名度が高いサービスはWebアプリもネイティブアプリも両方提供して相互補完的に運用されていることが多いですね。
大堀 では何か一つ、具体的にサービスを作りたいときはWebアプリとネイティブアプリどちらで開発するのがいいですかね?
山本 ネイティブアプリ中心の記事でいうのもなんですが、Webアプリ開発からスタートするのがおすすめです。(笑)
Webアプリはひとつ開発すれば誰でも自由にアクセスできて利用できますが、ネイティブアプリはiOSアプリとAndroidアプリ両方を作らないと網羅的にユーザーにサービスを提供できないんですよね。しかもそれぞれ時間をかけて作る必要があるので、先ほど挙げたネイティブアプリのメリットを生かしたサービスでない限りはWebアプリから開発するのがおすすめです。
アプリ開発の全体像
山本 アプリ開発の全体的な流れは下の通りです。
基本的にはWebアプリもネイティブアプリも同様の流れで開発は進んでいき、ネイティブアプリは最後にApp StoreやGoogle Playでアプリ公開の申請が必要になります。
1. 要件定義
1. 大まかな機能やデザイン、コンセプトを決める
2. 基本設計
1. 大まかな機能に必要なデータ設計や他に必要な機能を詰める
2. デザインもここで大体決定
3. 詳細設計
1. 実装上必要な細かい条件を決める
-ニックネームは何文字まで?等
2. 細かいデザインの動きも決める
-エラー時、押せない時等のメッセージ等
4. 実装
5. テスト
6. アプリの申請(App Store か Google Play)
1. ストアに申請するときに開発者プログラム登録費用が必要
2. リジェクトされる可能性もある。リジェクトされたら
7. リリース
アプリ開発に使うプログラミング言語
iOSアプリ開発ならSwift
大堀 アプリ開発ではどんなプログラミング言語を使うんですか?
山本 どのOSのアプリを開発するかで使用する言語は異なってきますが、iOSだと主流はAppleが提供しているプログラミング言語のSwiftですね。
大半のiOSアプリはこのSwiftで開発されています。
大堀 iPhoneのOSがiOSでスマートフォンはAndroidですね。
Androidアプリ開発ならKotlin
Androidの場合はKotlinが多いです。以前はJavaを使った開発が多かったけど、GoogleからAndroidアプリ開発の公式言語に採用されたこともあり、現在は多くの開発案件でKotlinを使われている印象があります。
そのほかにもiOSアプリ、Androidアプリ両方の開発(クロスプラットフォーム)に対応しているFlutterやReact Native、Xamarin等を使ってネイティブアプリ開発をすることもできます。
特に Flutter は Webアプリも同じコードで開発できてコストをかなり抑えられるメリットもあるので最近は注目度が上がってきていますね!Flutter も Kotlin同様、 Google が開発しているので信頼できると思っています。
プログラミング言語は目的にあわせて選定しよう
大堀 OSごとに違うし、両方開発できるものもあるんですね。
初心者が未経験からアプリ開発を始める場合iOSアプリとAndroidアプリどちらから開発するのがいいんですか?
山本 正直なところ、未経験から始めるアプリ開発は自分がもっているデバイスで選べばよいと思います。AndroidもiOSもシェアは半分くらいずつですし、自分のデバイスでテストできるだけでも開発のストレスは減りますし。
それと、個人的にとても大事だと思うのはアプリが公開されて自分のデバイスにインストールできたときの感動体験かな。これは本当に感動しますよ!
大堀 自分のアプリをApp Storeからダウンロードできるって、あまりできない体験ですね。
山本 ぼくも自分のアプリがiPhoneにインストールされたときは感動しました!
大堀 こちらですね!
先ほどの話に戻ると、例えばクロスプラットフォームに対応しているFlutterは両方開発できて便利ですよね。iOSアプリ開発ではSwiftとFlutterどちらがおすすめですか?
山本 うーん、ケースバイケースですね。
個人でアプリを開発することがゴールの場合はFlutterを用いて開発するのでも良いです。その後Androidアプリを開発する場合に開発コストが比較的ひくいですし。
ただ、後々エンジニアとしての転職等を視野に入れている場合は現状SwiftやKotlinで開発するのがおすすめです。
なぜかというと、現状のネイティブアプリ開発案件の多くは Swift や Kotlin がメインだからです。初心者が開発にジョインする場合、保守運用・機能開発フェーズの方が入りやすく、そのフェーズの Flutter 案件はまだ少ないです。
Flutter の案件も増えてきていますが、新規開発やプロトタイプ作成の案件が多いです。Flutter は2年前くらいから盛り上がってきた技術なので、案件数はそこまで多くなく、開発者もまだ少ない印象です。
ゼロからリリースまで丸っと求められるような案件が多いので、実務経験が乏しいとたとえFlutterの技術だけがあっても仕事にたどり着けなかったりするんです。
だけど、Flutter を使った案件は確実に増えていくと思うので、エンジニアとして差別化したいなら Flutter に挑戦しても良いと思います!2年程 Flutter で開発していますが今でも楽しいです!
大堀 既に基礎技術があるエンジニアがさらに上を目指して学ぶのにおすすめということですかね。
山本 そんな感じです!
おすすめの勉強法
大堀 実際にアプリを開発するとなると、どのように学ぶことが良いのでしょうか。
山本 細かい勉強法は人によって合う合わないがあると思います。ぼくがおすすめする勉強法はこちらのような流れです。
1. デザインツールでアプリを作成してみる
a. デザインは他のアプリを真似して、同じようなものにする
b. おすすめは Figma
2. Udemy で動画を見ながらコードを書く練習をする
3. 実際にコードを描きながらアプリを作成
a. 最初にデザイン
b. その後にデータの保存とか、アカウント作成とか機能を入れる
c. 詰まったら、MENTAやCodeBoyで聞く
d. 必要ならオンラインサロン的なやつに入ってみる
4. 最低限の機能でリリースする
独学で挑むか、スクールに通うか
大堀 こちらにあるUDEMYやMENTAの活用というのは、あくまで独学で進めるうえでつまずきやすいところで多少お金を払って乗り越える、というやり方ですよね。
山本 そうですね。つくりたいプロダクトによって勉強しなければならないことも変わってくるので、まずはどんなプロダクトを開発したいか明確にすることが重要だと思います。ゴールが明確になれば必要なものも分かってきますし、独学でやり切れる人もいるとは思います。
人によってこの流れで事足りる人もいれば、もっと総合的にしっかり学んでいきたい、自分のモチベーションを高める場所に所属したいという人もいると思うので、そういった方はスクールを利用するのがいいと思います。
アプリ開発に必要な費用
山本 ちなみにアプリ開発は学習コストこそかかりますがそれ以外の費用はあまりかかりません。
Swiftを使ってiOSアプリを開発する場合はXcodeという開発専用のソフトウェアをインストールする必要があるのでMacが必須です。それ以外だとApp Storeでアプリを公開するためにApple Developer Programへの登録費用$99が発生します。
その他にアプリ公開後はサーバー代が発生します。おすすめはFirebaseなどのクラウドサービスの利用で、通信の回数の上限を越えなければ料金もが発生しないのでユーザーが数百人いても無料で使用できます。使用されていてもよほどのユーザー数でなければ数百円程度です。
Androidアプリ開発も同じような流れで、Google Playでアプリを公開するためにGoogle Play Developer Consoleに加入する際に$25発生します。
大堀 あとは学習にどれだけお金を使うかですよね。
山本 学習に使うお金はほんとに人それぞれです。ぼくはジーズに通って同期と一緒にモチベーション高めながらアウトプット中心の学習をしましたが、
独学でいけるぜって方は Udemy でアプリ開発に関する講座を買って動画学習でもいいと思います。それこそ5000円程度で一通り学習できますし、最近の動画教材はかなり丁寧ですからね。
独学はモチベーション維持が非常に難しいので、スクールに通うのでもコストを抑えて独学でチャレンジしてみるのでも、肌に合う方でチャレンジしてみるのが良いです。つくりたいアプリがあるならとにかく一歩踏み出すが重要です!
プログラミング不要のノーコードツールも
大堀 最近はコードを書かずにアプリを開発できるノーコードツールも増えてきましたよね。
山本 日本発のノーコードツールだとYappli等がありますが、かなり便利だと聞いています。
大堀 ノーコードツールを使うメリットデメリットはどんなことがあるのでしょうか。
山本 スピード感でいうとノーコードツールの方が圧倒的に早いです。
作りたいアプリが決まっていてノーコードで機能を満たせるのなら、ノーコードツールで作ってしまえばいいと思います。簡単だし、そこまで時間もかかりませんので。
大堀 そりゃそうですね。
山本 デメリットでいうと、ノーコードツールは簡単に開発ができる分、複雑なアプリを作ることは難しいです。なので本格的なオリジナルアプリはやはりプログラミングを学んで開発しないといけませんね。
大堀 あとはエンジニアを目指す場合も当然プログラミングと向き合う必要がある、と。
山本 ですね。無料のツールも増えていますし、考えるより実際に使ってみるのが良いと思います!
大堀 アプリ開発の全体像をよくわかりました。ありがとうございます!
G’s ACADEMYでは毎週学校説明会を開催しています。
未経験の方向けにプログラミングの全体像もお伝えしていますので、第一歩を踏み出したいという方はぜひ学校説明会にお越しください!