03.はじめてスマホアプリを作ってみた(調査フェーズ)
初稿:
更新:
- 12 min read -
記事の概要
こちらの一覧の3つ目、「調査フェーズ」の記事。
- 検討フェーズ(どんなアプリを作るか)
- 要件フェーズ(どんな要件のアプリにするか)
- 調査フェーズ(どんな技術を使うか)【今回】
- 設計フェーズ(どうやって作るか)
- 開発フェーズ(実際に作りはじめる)
- 公開フェーズ(アプリを公開する)
- 保守フェーズ(公開から現在まで)
ダイジェストで読みたい方はこちらの記事を。
アラフォー初心者だけどスマホアプリを開発~リリースまでがんばってみた【Android・Xamarin.Forms】
あらすじ この度、素人ながらスマホアプリ開発に挑戦してみた。今回の記事では概要と経緯について書き綴ってみたい。実際に行った作業の詳細は、全7回に分けた記事を別途作成
インストールはこちらから。
はじめてのスマホアプリ開発 調査フェーズ
スマホアプリってどんな技術を使うのか調べる
前回は、大まかではあるが、アプリの要件を決定していく過程について書いた。
今回は設計作業の前段として、「どうやって作るか」を決めていく過程をまとめてみたい。
今回わたしが目指しているのは「シンプルに睡眠記録を登録・閲覧できるアプリ」。
考えないといけないのは、だいたい以下の3つだろうとあたりを付け調べ始めた。
- アプリのプラットフォーム
- 開発フレームワーク・言語
- データベース
以上の各項目ごとに、考えたことや決定していく過程をまとめていく。
アプリのプラットフォームを考える
まずこちらの記事を見てみると、世界全体では「Android」のシェアが多いが、日本では「iPhone」の方がシェアは高いらしい。
【iPhone VS Android】世界と日本におけるスマホOSのシェア比較 – XERA
日本ではiPhoneが圧倒的に人気ですが、iOSシェア率は約70%。しかし世界ではAndroidの方がシェアが高い結果に。2017年の最新データで分析しています。
当初、定めた今回の要件の中に「多言語対応」がある。
英語と日本語に対応したモノをつくろうと思っているが、国内で半数以上を占める「iPhone」は無視できないとの思いが頭をよぎる。
しかし第一の条件は「自分が使う」、そしてわたしが普段利用しているのは「Android」。
ということで、今回は「Androidアプリを作る」ことに決める。
開発フレームワーク・言語を考える
作るのは「Androidアプリ」に決定した。
続いて、どのような言語、開発環境が必要かを調べる。
まずはこちらの記事を参考にした。
Android開発目線でJavaとKotlinとDart(Flutter)を比較
「Androidのアプリ開発には興味あるけど、Kotlinの方がいいのかな?」「最近は Flutterを使ったアプリ開発も盛んみたい...」「Android、どの言語を選べばいいの?」「Javaは学ばないほうがいいの?」という方向けに、 Java と Kotlin と Dart の違い、適性についてご紹介させて頂きます。
Googleが提供する「Android Studio」という開発環境で「Java」または「Kotlin」という言語で開発するのがスタンダードと言えそうだ。
一方、「Flutter」というフレームワークと「Dart」という言語で開発する方法にも触れている。
Flutter & DartでAndroidとiPhone両方のアプリを一度に開発できるというメリットあるとのこと。
これはすごい、お得じゃないか!となるわけだが、上の記事にもある通りJavaやKotlinに比べると圧倒的に情報量が少ないとのこと。
作っていく過程で初心者は絶対つまずくことは知っている。
ものすごい回数つまずくため情報量が多いことはとても重要。
ということで、Flutterは却下とした。
では、Android StudioをインストールしてJavaかKotlinどちらにするか決めるのかと思いきや、まだ早い。
わたしはかつて、中途半端に「C#」という言語を使っていた経験がある。
これが無ければ、迷わず「Android Studio」をインストールしていたと思う。
そしてそれが正解だったなと思う。
ところが、「Xamarin.Forms」なるものを知ってしまうのだ。
この記事では、Xamarin.Forms と関連ライブラリについて紹介します。
なんと、「C#」でAndroidとiPhoneアプリを開発できるではないか。
そして、Microsoftによるドキュメントやチュートリアルなども結構充実している。
ということで、わたしは「Xamarin.Forms」を使ってアプリを作ることに決めた。
が、のちのち細かいところで行き詰り、調べるたびに「Javaにしておけば良かった」という状況にしばしば直面する。
やはり「情報量」は大事。
公式ドキュメントが揃っているとはいえ、実際作り始めると細かい問題に直面し、さらなる情報を求めるようになる。
そうなると、開発人口が多い言語の方が解決にたどり着くスピードが早まると思う。
また、Xamarin.FormsはiPhoneアプリも同時に開発できるがリリースまで行うには最低限iPhone端末、できればMacが必要。
【Mac不要】.NET製iOSアプリをiPhone実機配備する手順 - Qiita
2023/12/02 追記Xamarin.Forms の後継である MAUI を使った記事を投稿しました。【Mac不要】.NET MAUI 製 iOS アプリを iPhone に手軽にデバッグ配…
結果的に、わたしは「Xamarin.Forms」を選択した。
が、まったくのイチから考える場合、「Androidアプリを作りたければAndroid Studio & JavaまたはKotlin」、「iPhoneアプリを作りたければMac & Xcode & Swiftまたは Objective-Cなど」が良いと思う。
わたしのように「C#」や「.NET」にあるていど親しみがあれば、プログラミング学習をスキップできるため「Xamarin.Forms」も良いかもしれない。
ただ先ほども書いたとおりAndroidネイティブやiPhoneネイティブ開発に比べると情報量はグッと少ない。
とりあえず、今回の選択は下記の通り。
- 開発環境
- Visual Studio Community 2019
- フレームワーク
- Xamarin.Forms
- 言語
- C#
データベースを考える
前項がだいぶ長くなってしまったが、続いて「データベース」について書きたい。
今回のアプリでは「睡眠記録を保存」そして「記録を閲覧」する機能を実装する予定。
そうなると、データの永続化を考える必要がある。
Xamarin.Forms公式にチュートリアルが掲載されている「SQLite」を使用することに、この時点では決めた。
取り扱いも非常に簡単。
Xamarin.Forms ローカル データベース - Xamarin
Xamarin.Forms は、SQLite データベース エンジンを使ったデータベース駆動型アプリケーションをサポートしています。これにより、共有コードでのオブジェクトの読み込みと保存が可能になります。 この記事では、Xamarin.Forms アプリケーションが SQLite.Net を使って、ローカルの SQLite データベースに対してデータの読み書きを行う方法について説明します。
しかし、実際にリリースしたアプリではsqliteとは異なる2つのデータベースを使用した。
ローカルDBは「Realm」、クラウドDBは「Azure CosmosDB」。
当初、上にも書いた通り「SQLite」で開発を進めていたが、調べている過程で「Realm」を知った。
Realmの基礎知識 〜特徴と強みの再認識〜| 開発者ブログ | 株式会社アイソルート
「Realmの基礎知識 〜特徴と強みの再認識〜」「モバイル データベース」で検索すると真っ先に出てくるRealm。既に広く使われているRealmの基礎と特徴を解説します。
.NET用のドキュメントもある。
当初はローカルだけ保存できればいいと考えていたが、機種変など別の端末に移った場合を考慮し、「サーバ上に保存したい」となった。
そこで見つけたのが「Azure CosmosDB」。
統合 AI データベース - Azure Cosmos DB
AI 時代のデータベース - Azure Cosmos DB は、オペレーショナル データのニーズに合わせて比類のない信頼性と柔軟性を提供する NoSQL、リレーショナル、ベクター データベースです。
おそらく、同様のサービスであればamazonが提供する「AWS」などを利用したほうが安く、情報量もあることが分かった。
ただ、.NET開発に関してはMicrosoftによる「Azure CosmosDB」の方がドキュメントがあると感じた。
結果的に、サインアップせずに使用するユーザはローカルの「Realm」、サインアップしサーバ上にデータを保存した人は「CosmosDB」を使い分ける仕様に決めた。
ただXamarin.Formsでローカルに保存したいだけであれば、「Realm」よりも「SQLite」の方が情報は多く見つかる。
とりあえず、わたしが選択したのは下記の通り。
- 開発当初
- SQLite
- 最終的に採用
- Realm
- Azure CosmosDB
その他
以下は、最初は考えていなかったことで、後から追加したモノ。
最終的にサインアップする機能を追加したため「Azure Active Directory B2C」というサービスを使用することにした。
Azure Active Directory B2C のドキュメント
Azure Active Directory B2C を使用して、アプリケーション使用時の顧客のサインアップ、サインイン、プロファイル管理をカスタマイズして制御する方法について説明します。
クラウドサービスを利用するため、ランニングコストが発生することになった。
これを補うため、ごく一部に広告を入れることとし「Google AdMob」というサービスを使用した。
アプリ内広告を使ってモバイルアプリからの収益を増やしましょう。行動につながるインサイトも入手でき、使いやすいツールでアプリの成長も後押しできます。
まとめ
長くなったが、今回のアプリで「どんな技術を使うか」について考えた過程をまとめた。
各フレームワーク、言語、サービスなど詳細については、つまずいた部分などにフォーカスして別途記事を書きたい。
先日読んだ「Clean Architecture 達人に学ぶソフトウェアの構造と設計」という書籍は、今回書いたようなフレームワークやデータベースなどは「詳細」である、と書かれていた。
『Clean Architecture 達人に学ぶソフトウェアの構造と設計』を読んだ
ソフトウェア開発から離れて10年以上が経過している。昨年夏ごろからスマホアプリでも開発してみようと一念発起。化石と化した脳みそをアップデートするために読んだ一冊。刺さった箇所などを備忘録としてメモしておく。第1章の冒頭にそもそも「アーキテクチャって何ぞ?」がある。何で設計するの?何でよい設計を
おそらく経験を積むと、そう考えることができると思うのだが、初心者にとって「実際に使う道具が何であるか」は、とても重要だと思う。
どのような道具を使うのかまったくイメージせずにビジネスコアを詰めていく作業はとっても高度なスキルだと感じるからだ。
またスマホアプリを作りたいと思う人であれば、言語やフレームワークへの興味も高いはず。
これらを選定する作業は楽しいしやる気も上がる。 実際、わたしはそうだった。
次回は、設計フェーズ(どうやって作るか)についてまとめていきたい。