03.はじめてスマホアプリを作ってみた(調査フェーズ)【 Android / Xamarin.Forms 】

2021/03/02

目次 [隠す]

OneThird ストア画像

記事の概要

こちらの一覧の3つ目、「調査フェーズ」の記事となります。

はじめてスマホアプリを作ってみた 記事一覧
  1. 検討フェーズ(どんなアプリを作るか)
  2. 要件フェーズ(どんな要件のアプリにするか)
  3. 調査フェーズ(どんな技術を使うか)
  4. 設計フェーズ(どうやって作るか)
  5. 開発フェーズ(実際に作りはじめる)
  6. 公開フェーズ(アプリを公開する)
  7. 保守フェーズ(公開から現在まで)

こちらでインストールできます
※アンドロイド版のみです。iPhoneユーザの方すみません。
Google Play で手に入れよう

全7回に分割して書いていますが長いので、ダイジェストで読みたい方はこちらの記事をご覧ください。

アラフォー初心者だけどスマホアプリを開発~リリースまでがんばってみた【Android・Xamarin.Forms】 | neputa note

この度、素人ながらスマホアプリ開発に挑戦してみました。今回の記事では概要と経緯について書き綴ってみたいと思います。実際に行った作業の詳細は、今後それぞれ記事を書き、こちらにリンクを追記します。作っ

blog card

はじめてのスマホアプリ開発 調査フェーズ

スマホアプリってどんな技術を使うのか調べる

an image of tools
Photo by:Anna Shvets in Pexels

前回は、大まかではありますが、アプリの要件を決定していく過程について書きました。

今回は、設計作業の前段として、「どうやって作るか」を決めていった過程をまとめてみたいと思います。

今回わたしが目指しているのは、シンプルに睡眠記録を登録・閲覧できるアプリです。
考えないといけないのは、だいたい以下の3つだろうとあたりを付け調べ始めました。

  • アプリのプラットフォーム
  • 開発フレームワーク・言語
  • データベース

以上の各項目ごとに、考えたことや決定していく過程をまとめていきます。

アプリのプラットフォームを考える

an image of platforms
Photo by:Obi Onyeador in Unsplash

これは2択ですね。いや両方を選択肢に入れたら3択か。

まずこちらの記事を見てみると、世界全体では「Android」のシェアが多いものの、どうやら日本では「iPhone」の方がシェアが高いそうです。

【iPhone VS Android】世界と日本におけるスマホOSのシェア比較 | XERA

日本ではiPhoneが圧倒的に人気ですが、iOSシェア率は約70%。しかし世界ではAndroidの方がシェアが高い結果に。2017年の最新データで分析しています。

blog card

当初、定めた今回の要件の中に「多言語対応」があります。
英語と日本語に対応したモノをつくろうと思っていますが、国内で半数以上を占める「iPhone」は無視できないなとの思いが頭をよぎります。

しかし第一の条件は「自分が使う」、そしてわたしが普段利用しているのは「Android」。

ということで、今回は「Androidアプリを作る」こととしました。

開発フレームワーク・言語を考える

作るのは「Androidアプリ」に決定しました。

続いて、どのような言語、開発環境が必要かを調べていきます。

まずはこちらの記事を参考にしました。
Android開発目線でJavaとKotlinとDart(Flutter)を比較

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 の概要 - Xamarin | Microsoft Docs

この記事では、Xamarin.Forms と関連ライブラリについて紹介します。

blog card

なんと、「C#」でAndroidとiPhoneアプリを開発できると言うではないか。
そして、Microsoft によるドキュメントやチュートリアルなども結構充実している。

ということで、わたしは「Xamarin.Forms」を使ってアプリを作ることに決めました。

が、のちのち細かいところで行き詰り調べる際に、Javaにしておけば良かったかなといった状況にしばしば直面します。

やはり、「情報量」は大事です。

公式ドキュメントが揃っているとはいえ、実際作り始めて細かい問題に直面すると役に立ちません。
そうなると、開発人口が多い言語の方が、解決にたどり着くスピードが早まると思うからです。

また、Xamarin.Forms は iPhone アプリも同時に開発できますが、リリースまで行うには最低限iPhone端末、できればMacが必要となります。
【Mac不要】.NET製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#

データベースを考える

an image of thinking
Photo by:Tobias Fischer in Unsplash

前項がだいぶ長くなってしまいましたが、続いて「データベース」について書きたいと思います。

今回のアプリでは、「睡眠記録を保存」そして「記録を閲覧」する機能を実装したいと考えています。
そうなると、データの永続化を考える必要があります。

Xamarin.Forms の公式にチュートリアルもあるので「SQLite」というローカルデータベースを使用することに、この時点では決めました。
取り扱いも非常に簡単です。

:::no-loc(Xamarin.Forms)::: ローカルデータベース - Xamarin | Microsoft Docs

:::no-loc(Xamarin.Forms)::: は、SQLite データベースエンジンを使用したデータベース駆動型アプリケーションをサポートします。これにより、共有コードでオブジェクトを読み込

blog card

しかし、実際にリリースしたアプリでは2つのデータベースを使用しています。
ローカルDBは「Realm」、サーバDBは「Azure CosmosDB」です。

当初、上にも書いた通り「SQLite」で開発を進めていましたが、調べている過程で偶然「Realm」を知りました。

Realmの基礎知識 〜特徴と強みの再認識〜| 開発者ブログ | 株式会社アイソルート

「Realmの基礎知識 〜特徴と強みの再認識〜」「モバイル データベース」で検索すると真っ先に出てくるRealm。既に広く使われているRealmの基礎と特徴を解説します。

blog card

.NET用のドキュメントもあります
.NET Latest Documentation

そして、当初はローカルに保存できればいいと考えていましたが、機種変など別の端末に移った場合を考えると「サーバ上に保存したい」となるわけです。

そこで見つけたのが「Azure CosmosDB」です。

Azure Cosmos DB の概要 | Microsoft Docs

Azure Cosmos DB について説明します。 このグローバルに分散されたマルチモデル データベースは、少ない待ち時間、柔軟なスケーラビリティ、高可用性を実現し、NoSQL データのネイティブ

blog card

おそらく、同様のサービスであればamazonが提供する「AWS」などを利用したほうが安く、情報量もあるとは思います。
ただ、.NET開発にとっては、Microsoftによる「Azure CosmosDB」の方がドキュメントが充実していました。

結果的に、サインアップせずに使用するユーザはローカルの「Realm」、サインアップしサーバ上にデータを保存した人は「CosmosDB」と使い分ける形になりました。

ただ、Xamarin.Forms で、ローカルに保存したいだけであれば、「Realm」よりも「SQLite」の方が情報は多く見つかります。

とりあえず、わたしが選択したのは下記の通りです。

  • 開発当初
    • SQLite
  • 最終的に採用
    • Realm
    • Azure CosmosDB

その他

以下は、最初は考えていなかったことで、後から追加したモノになります。

最終的にサインアップする機能を追加したので、「Azure Active Directory B2C」というサービスを使用しました。

Azure Active Directory B2C のドキュメント | Microsoft Docs

Azure Active Directory B2C を使用して、アプリケーション使用時の顧客のサインアップ、サインイン、プロファイル管理をカスタマイズして制御する方法について説明します。

blog card

結果的にクラウドサービスを利用するため、ランニングコストが発生することになりました。
これを補うために、ごく一部に広告を入れることとし、「Google AdMob」というサービスを使用しました。

Google AdMob - モバイルアプリの収益化light-bulb iconrising-rate iconbar-graph iconwrench iconearth iconsize iconcategory icon

アプリ内広告を使ってモバイルアプリからの収益を増やしましょう。行動につながるインサイトも入手でき、使いやすいツールでアプリの成長も後押しできます。

blog card

まとめ

an image of a conclusion
Photo by:Ann H in Pexels

長くなってしまいましたが、今回のアプリで「どんな技術を使うか」について考えた過程をまとめてみました。

各フレームワーク、言語、サービスなどの詳細については、つまずいた部分などにフォーカスして別途記事を書きたいと思います。

先日読んだ「Clean Architecture 達人に学ぶソフトウェアの構造と設計」という書籍では、今回書いたようなフレームワークやデータベースなどは「詳細」である、と書かれています。

Clean Architecture 達人に学ぶソフトウェアの構造と設計 | neputa note

ソフトウェア開発から離れて10年以上が経過している。 昨年夏ごろからスマホアプリでも開発してみようと一念発起。 化石と化した脳みそをアップデートするために読んだ一冊。 刺さった箇所などを備忘録としてメ

blog card

おそらく経験を積むと、そう考えることができると思うのですが、初心者にとっては、「実際に使う道具が何であるか」は、とても重要だと思います。

どのような道具を使うのかまったくイメージせずにビジネスコアを詰めていく作業はとっても高度なスキルだと思うからです。

またスマホアプリを作りたいと思う人であれば、言語やフレームワークへの興味も高いと思います。
これらを選定する作業は楽しいしやる気も上がります。 実際、わたしはそうでした。

次回は、設計フェーズ(どうやって作るか)についてまとめます。

はじめてスマホアプリを作ってみた 記事一覧
  1. 検討フェーズ(どんなアプリを作るか)
  2. 要件フェーズ(どんな要件のアプリにするか)
  3. 調査フェーズ(どんな技術を使うか)
  4. 設計フェーズ(どうやって作るか)
  5. 開発フェーズ(実際に作りはじめる)
  6. 公開フェーズ(アプリを公開する)
  7. 保守フェーズ(公開から現在まで)