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

2021/02/13

目次 [隠す]

トップ画像
出典:Christina Morillo in Pexels

はじめに

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

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


作ったアプリ「OneThird」の概要

毎日の睡眠を入力によって記録するアプリです。

OneThird ストア画像

こちらでインストールできます
※iOSは実装は作ったもののAppleIDがないので現在リリース未定です。

Google Play で手に入れよう

基本的な機能

寝た時間、起きた時間、5段階評価、メモ(150文字以内)を記録することができます。
月単位や直近の平均睡眠時間(7日、30日、1年を知ることができます。

データの保存

サインアップするとクラウド上にデータを保存することができます。
サインインしなくてもローカルにデータを保存し、使うことができます。
後からサインアップし、ローカルに貯めたデータをクラウドにアップロードすることも可能です。

なぜに睡眠アプリ?

技術の習得やリリース後の保守におけるモチベーションを維持するには毎日自分が使うものにしようと最初に決めました。

わたしは物心つく頃から今に至るまで睡眠が大の苦手です。
寝付くも地獄、目覚めも地獄、滅べよ睡眠、と思って生活しています。
睡眠がなくても生きられる進化を遂げてこなかった祖先たちを軽く恨んでいたりします。

睡眠を自動で記録してくれるアプリなど、これまで色々と試してきましたが、設定の複雑さ・不便さなどが気になり習慣にすることができませんでした

シンプルに記録する機能に絞ったものであれば続くかもしれない、ましてや自分で作ったのなら...
そんな期待を込めての選択です。

そもそもなぜスマホアプリを作ってみようと思ったのか

昨年2020年夏ごろ、幸いコロナ禍による致命的な被害はないものの、鬱々とした気分に陥りやすくなっていました。
守り受け身の姿勢で生活を送っていると精神が死ぬ。
何か新しいことを始めてみよう!というのが一番のキッカケです。

わたしは誰だ

アラフォーです。
超絶小規模不動産会社勤務のリーマンです。
プログラミングとは無縁の生活をしています。

システムエンジニアとしてのキャリア

文系高卒、最終学歴は海外の底辺語学学校。
コンピュータサイエンスとは無縁の人生でしたが、アラサーのとき全くの異業種からシステムエンジニアの門を叩きました。

当時、情シスエンジニアとしてコード書いたりしてました。
言語はC#、「ASP.NET Web Forms」(バージョンは2.0だったかな)という、いま思えばとてもウェブアプリとは言い難いフレームワークを扱っていました。
またドイツの「SAP」というごっついパッケージソフトのお守りをしていました。
「プログラマ」というよりは、業務分析・設計とかの作業が多かったと記憶しています。

で5年ほどいたのですが、諸事情によりいまの会社へ移り、それ以降約10年の間、プログラマとしてはなんもしてませんでした。

作りたいものを考えつつ準備学習したこと

さて何をつくろうか?と考え始めると同時に、どうやって作るかの学習を開始。

まったくイチから始めるか、発掘した鉄器なみに錆びついているとはいえ.NETを使うか迷いましたが、結局.NET開発を採用することにしました。

C#も当時からかなりバージョンが上がっており復習を兼ねて以下を読んでいきました。
内容について簡単に記載してますが、素人の感想なので悪しからず。

※読んだ順

Peacock-ANDERSON

school.anderson02.com

ウェブサイトですね。
有料の講座があるようですが、無料で読めるコンテンツが結構あり以下を一通り読みつつチュートリアルをやってみました。

  • Xamarin.Fomrs
  • Prism
  • ドメイン駆動開発
  • テスト駆動開発

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

アラン・シャロウェイ氏、ジェームズ・R・トロット氏による書籍です。
デザインパターンに主眼を置き、デザインパターンを実践するためにオブジェクト指向言語の機能性を併せて理解するといった感じの内容です。

テスト駆動開発

ケント・ベック氏による書籍。
当時、テストという概念が著しく欠如した環境にいたので「テスト駆動開発」、「TDD」というキーワードにすごく引き寄せられるんですね。
テスト駆動開発のやり方というよりは、TDDを実践すると良い設計をすることができるようになるよという内容です。

ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本

成瀬 允宣氏による書籍。
ドメイン駆動によるアプリケーション開発を実際にコード(C#)を示しつつ解説してくれます。
とっつきやすくなるような構成になっており、非常にわかりやすかったですね。

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

ロバート・C・マーチン氏による書籍。
良いコード、良い設計を目指してもう一歩踏み込みたい、と思って選んでみた一冊。

ここまで読んできたのはどちらかというと「How」に寄った内容ばかりで、本書は「Why」を口酸っぱく説いてくれる本で非常にためになった。
そもそもソフトウェアって?なんで設計すんの?という本質的な部分を、すごい短い言葉で表現していてカッコいい。惚れる。

Microsoft Learn

https://docs.microsoft.com/ja-jp/documentation/

マイクロソフトの公式ウェブラーニングサイトです。
無料で利用できます。
実際にやってみたのは以下。

  • Xamarin.Forms関連
  • Azure関連(基本、B2C、CosmosDB)
  • App Center

Microsoft Docs

https://docs.microsoft.com/ja-jp/learn/

マイクロソフト公式のドキュメント
必要に応じて検索し参照するという感じで読みました。

上記以外にも数多くの方のブログなどを参考にさせていただきましたが、敬意を表しつつ割愛させていただきます。

開発環境

IDE

Visual Studio 2019 Community

デバッグ用端末

ASUS ZenFone 3 Max (Android 7.1)
SHARP SH-41A (Android 11.0)

ソース・タスク管理

Azure DevOps

リリース管理

Visual Studio App Center

サーバ

Microsoft Azure

言語

C# 8.0

フレームワーク・プラグイン

.NET Standard 2.1
Xamarin.Forms 5
Prism 8
xUnit 2.4.1

データベース

CosmosDB
Realm 10.0

その他

Azure AD B2C (ユーザ認証用)

アプリの仕様概要

機能一覧

  • 睡眠記録を保存・修正・削除する。(就寝・起床時間、5段階評価、メモ)
  • データをローカルまたはクラウドのDBに保存する。
  • 月単位で睡眠記録の一覧と平均睡眠時間を表示する。
  • 直近の睡眠時間を表示する。(直近7・30・365日間)
  • メールアドレスまたはSNSアカウント(Google・Twitter・Facebook)でサインアップする。
  • サインアップアカウントでユーザ認証する。
  • ユーザ設定として、デフォルトの就寝・起床時間を保存する。
  • ローカルに保存した睡眠記録をクラウドにアップロードする。
  • プライバシーポリシー、ヘルプページを表示する。
  • 広告を表示する。
  • 複数の言語で表示する。(日本語・英語、端末の言語環境に依存)

Project構成

Project構成図
Project構成図

Domain

睡眠記録のドメインモデル、何時から何時までを当日分とするとか、二度寝は記録できるけど重複した時間帯は保存しないといったビジネスルール、Repositoryインターフェイスなどを実装しています。

Application

Xamarin側のCoreと、ドメインのインターフェイスを介したInfrastructureとのやり取りを中継しています。

Core

Xamarin Formsのcommonプロジェクトです。Android、iOSの共通部分を実装しています。

Android・iOS

各プラットフォームに依存する部分を実装しています。

Infrastructure

RealmとCosomosDBとのやり取りを実装しています。
ユーザがログインしていればCosmosDB、そうでなければRealmに接続します。
RealmはSQLiteのようなローカルDBを提供してくれる製品です。

realm.io

今後の目標

直近は見つけた不具合修正や、あるべきだけど抜けてた機能実装などを頑張る。

最初の到達点として、分析を充実させたいという思いがあります。
記録を続け振り返り寝つきが悪かった時期と、天候・気温差などと比較したり。
自分なりの睡眠対策を発見するための気づきを与えてくれるようになれば成功だと考えています。 他には、不眠症が多い国に随時ローカライズしていきたいですね。

人生の約3分の1を過ごすと言われている睡眠の時間を、少しでも幸せな時間にしたい。

まとめ

素人のアプリ開発チャレンジについて長々と失礼しました。

学んでいる時間や壁を超える作業の繰り返しは、精神安定には非常に良かったです。

世界はいまだ不安定な状況で連日大変な思いをしている方々がいることを思うと苦しい気持ちになりますが、没頭することで何とか人間に戻ることができます。

ざっくりとした日記のような情報価値の低い記事ですが、別途いろいろ調べたことなどで日本語情報が少なかったものなどを後日まとめていきたいと思います。

長文駄文しつれいしました。

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