アラフォー初心者だけどスマホアプリを開発~リリースまでがんばってみた
初稿:
更新:
- 12 min read -
はじめに
この度、素人ながらスマホアプリ開発に挑戦してみた。
今回の記事では概要と経緯について書き綴ってみたい。
実際に行った作業の詳細は、以下リンクを参照。
- 検討フェーズ(どんなアプリを作るか)
- 要件フェーズ(どんな要件のアプリにするか)
- 調査フェーズ(どんな技術を使うか)
- 設計フェーズ(どうやって作るか)
- 開発フェーズ(実際に作りはじめる)
- 公開フェーズ(アプリを公開する)
- 保守フェーズ(公開から現在まで)
作ったアプリ「OneThird」の概要
毎日の睡眠を入力によって記録するアプリ。
インストールはこちらから。
基本的な機能
- 寝た時間、起きた時間、5段階評価、メモ(150文字以内)を記録する
- 月単位や直近の平均睡眠時間(7日、30日、1年)を表示する
データの保存
- サインアップするとクラウド上にデータを保存できる。
- サインインしない場合はローカルDBにデータを保存する。
- 後からサインアップし、ローカルに貯めたデータをクラウドにアップロードすることも可能。
なぜに睡眠アプリ?
技術の習得やリリース後の保守におけるモチベーションを維持するには毎日自分が使うものにしようと最初に決めた。
個人的に物心つく頃から今に至るまで睡眠が大の苦手。
寝付くも地獄、目覚めも地獄、滅べよ睡眠、と思って生活してきた。
睡眠がなくても生きられる進化を遂げてこなかった祖先たちを軽く恨んでいる。
睡眠を自動で記録してくれるアプリなど、これまで色々と試してきた。しかしいまいちフィットせず、習慣に至らず。
シンプルに記録する機能に絞ったものであれば続くかもしれない、ましてや自分で作ったのなら…
そんな期待を込めての選択。
そもそもなぜスマホアプリを作ってみようと思ったのか
昨年2020年夏ごろ、幸いコロナ禍による致命的な被害はないものの、鬱々とした気分に陥りやすくなっていた。
守り受け身の姿勢で生活を送っていると精神が死ぬ。
何か新しいことを始めてみよう!というのが一番のキッカケ。
わたしは誰だ
アラフォー超絶小規模不動産会社勤務のリーマン。
プログラミングとは無縁の生活を送っている。
システムエンジニアとしてのキャリア
文系高卒、最終学歴は海外の底辺語学学校。
コンピュータサイエンスとは無縁の人生。アラサーのとき、まったくの異業種からシステムエンジニアの門を叩く。
当時、情シスとしてコードを書く機会が多少あった程度。
言語はC#、「ASP.NET Web Forms」(バージョンは2.0だった)という、いま思えばとてもウェブアプリとは言い難いフレームワークを扱っていた。
また「SAP」というごっついパッケージソフトのお守りをしていた。
「プログラマ」というよりは、業務分析・設計とかの作業が多かったと記憶。
5年ほどいたが、諸事情によりいまの会社へ移る。以降約10年、プログラマとしてはなんもしていない。
作りたいものを考えつつ準備学習したこと
さて何をつくろう?と考え始めると同時に、どうやって作るか?の学習を開始。
まったくイチから始めるか、錆びついているとはいえ .NETを使うか迷うも結局 .NET開発を選択。
C#も当時からかなりバージョンが上がり復習を兼ねて以下を読んだ。
※読んだ順
Peacock-ANDERSON
ウェブコンテンツ型の学習サイト。
有料の講座があるが、無料で読めるコンテンツが結構ある。
とりあえず以下をひと通り読みつつチュートリアルをやってみた。
- Xamarin.Fomrs
- Prism
- ドメイン駆動開発
- テスト駆動開発
オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)
アラン・シャロウェイ氏、ジェームズ・R・トロット氏による書籍。
デザインパターンに主眼を置き、デザインパターンを実践するためにオブジェクト指向言語の機能性を併せて理解する、といった感じの内容。
テスト駆動開発
ケント・ベック氏による書籍。
当時、テストという概念が著しく欠如した環境にいたので「テスト駆動開発」は大きなインパクトがあった。
テスト駆動開発のやり方というより、TDDを実践すると設計に良い効果をもたらすという点を掘り下げた内容。
ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
成瀬允宣氏による書籍。
ドメイン駆動によるアプリケーション開発を実際にコード(C#)を示しつつ解説してくれる。
とっつきやすい構成、非常にわかりやすかった。
Clean Architecture 達人に学ぶソフトウェアの構造と設計
ロバート・C・マーチン氏による書籍。
良いコード、良い設計を目指してもう一歩踏み込みたい、と思って選んでみた一冊。
ここまで読んできたのはどちらかというと「How」に寄った内容ばかりだった。本書は「Why」を口酸っぱく説いてくれる本。非常にためになった。
そもそもソフトウェアって?なんで設計すんの?という本質的な部分を、すごい短い言葉で表現していてカッコいい。
Microsoft Learn
マイクロソフトの公式ウェブラーニングサイト。
無料で利用できる。
実際にやってみたのは以下。
- Xamarin.Forms関連
- Azure関連(基本、B2C、CosmosDB)
- App Center
Microsoft Docs
マイクロソフト公式のドキュメント
必要に応じて検索し参照する、という感じで利用した。
開発環境
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構成
Domain
睡眠記録のドメインモデル。
- いつからいつまでを当日分とするか
- 二度寝を記録できるようにする
- 重複した時間帯は保存しない
といったビジネスルール、Repositoryインターフェイスを実装した。
Application
Xamarin側のCoreと、ドメインのインターフェイスを介したInfrastructureとのやり取りを中継する。
Core
Xamarin Formsのcommonプロジェクト。Android、iOSの共通部分を実装。
Android・iOS
各プラットフォームに依存する部分を実装。
Infrastructure
RealmとCosomosDBとのやり取りを実装。
ユーザがログインしていればCosmosDB、そうでなければRealmに接続する。
RealmはSQLiteのようなローカルDBを提供してくれる製品。
今後の目標
直近は見つけた不具合修正、あるべきだけど抜けてた機能実装などを頑張る。
最初の到達点として、分析を充実させたいという思いがある。
記録を続け振り返り、寝つきが悪かった時期と天候・気温差などと比較してみたい。
自分なりの睡眠対策を発見するために、気づきを与えてくれるようになれば成功だと考えている。
人生の約3分の1を過ごすと言われている睡眠の時間を少しでも幸せな時間にしたい。
まとめ
素人のアプリ開発チャレンジについて長々と失礼した。
学んでいる時間や壁を超える作業の繰り返しは、精神安定には非常に良かったと思う。
ざっくりとした日記のような情報価値の低い記事だが、調べたことで日本語情報が少なかったものを後日まとめていきたい。
はじめてスマホアプリを作ってみた 記事一覧
- 検討フェーズ(どんなアプリを作るか)
- 要件フェーズ(どんな要件のアプリにするか)
- 調査フェーズ(どんな技術を使うか)
- 設計フェーズ(どうやって作るか)
- 開発フェーズ(実際に作りはじめる)
- 公開フェーズ(アプリを公開する)
- 保守フェーズ(公開から現在まで)
Top photo by Christina Morillo in Pexels