アプリ開発論

アプリ開発をするためには ②

この記事は約9分で読めます。
スポンサーリンク

こんにちは、まっさん(@Tera_Msaki)です。

この記事はSIベンダーで28年あまりシステムエンジニアとして、いろいろなシステムを開発してきた経験をもとにアプリ開発についてまとめたものです。

今回は、このサイトを開設にするあたり開発したAndroidアプリを題材に「アプリ開発するためにはどうすればいいのか」を具体化してみたいと思います。

前回ご紹介した「gymkhana Archive」というAndroidアプリを題材にしたいと思います。

・アプリ開発に興味がある人
・アプリ開発=プログラミングと思っている人
・アプリ開発の設計ってどんなことするの?を知りたい人

この記事を読めば、アプリ開発の設計でどんなことをすれば良いかが分かります

 

アプリ開発の設計

設計と聞くと、設計書を書くことを思い浮かべますが、考えや、すべきことを整理する、仕様や思いをメンバや未来の自分に共有することが目的ですので、アウトプットにこだわる必要はありません。
ただし、実務レベルでは、成果物や納品物となることが多いので作成が必要になってきます。
また、フェーズを段階的に進めることをウォーターフォール開発、フェーズを短いサイクルで繰り返し回していくことをアジャイル開発と呼んでいます。フェーズ自体に違いはありませんので、開発に適したアウトプットや開発手法を選択すればよいと思います。なお、アジャイル開発の中には、スクラム、XP、FDDといった開発手法が細分化されています。

要件定義

今回開発したアプリの要件は、以下のとおりです。

・ジムカーナの練習会や競技会でクルマのセッティング情報を紙に書いて残しているけど、データとして整理したい
・クルマのセッティング情報のほかに、走行データ(GPSの走行軌跡、加速度)も一緒に記録したい
・走行時の条件下データとして温度や湿度や天候などを記録したい
・データ入力はできるだけ省力化したい(できれば自動設定)
・ノートPCでEXCELやnotepadに記録するのでもよいが、スマホだと便利
・自分が使っているスマホはAndroidなのでAndroidで動作する
・GPSの走行軌跡データをメールで送信して、解析ソフト(LAP+)で読み込めるようにしたい
・GPSの走行軌跡データは1秒間に5回ぐらいは記録したい

これを要件定義として、分類、一覧化します。

・ジムカーナの練習会や競技会でクルマのセッティング情報を紙に書いて残しているけど、データとして整理したい
・クルマのセッティング情報のほかに、走行データ(GPSの走行軌跡、加速度)も一緒に記録したい
・GPSの走行軌跡データをメールで送信して、解析ソフト(LAP+)で読み込めるようにしたい
・走行時の条件下データとして温度や湿度や天候などを記録したい
・データ入力はできるだけ省力化したい(できれば自動設定)

これは、実現したい機能=目的に該当します。

・ノートPCでEXCELやnotepadに記録するのでもよいが、スマホだと便利
・自分が使っているスマホはAndroidなのでAndroidで動作する

これは、動作する環境に該当します。

・GPSの走行軌跡データや加速度は1秒間に5回は記録したい

これは、求められる性能に該当します。

基本設計

基本設計の構成は、以下のとおりです。

システム方式
  ハードウェア構成図
  ソフトウェア構成図
  ネットワーク構成図
画面設計
  画面一覧
  画面遷移図
  画面レイアウト
  画面入出力項目一覧
  画面アクション定義
テーブル・ファイル設計
  テーブル関連図
  テーブル・ファイル一覧
  テーブル定義
  CRUD図
外部インターフェース設計
  外部システム関連図
  外部インターフェース一覧
  外部インターフェース定義

最初に要件定義で検討できていない部分を、もう少し掘り下げて検討します。

動作する環境は、Androidスマホ
・Androidのアプリを開発するには、android stadio(無償)が必要(ダウンロードで入手、インストール)
・android stadioで扱える言語は、JavaとKotlinがあり、汎用性の高いJavaを採用。

クルマのセッティング情報と走行データを記録する機能
・走行データ(GPSの走行軌跡)を記録する
・走行軌跡を表示は、散布図が扱えるライブラリを利用する
・利用シーンを考え、スマホを縦レイアウトと横レイアウトの両方に対応する(Constraintlayout)
・AndroidでGPSデータを扱えるライブラリを使用して、走行軌跡を取得する
・Android内蔵の加速度センサーと磁気センサーを使用して、加速度、傾きを取得する
・Android内蔵の圧力センサーを使用して、気圧を取得する
・Android内蔵のカメラを使用して、コース図を撮影する
・データの保存先として、外部ストレージ(SDカード)を使用する
・画像データやGPSの走行軌跡データはファイル、ファイルの管理はデータベース(Room)を使用する
・走行データを補完入力する、表示する画面を用意する
・動作に必要なパラメータを設定する画面を用意する
・走行データとして、温度、湿度、天候などの気象データを外部連携する
・温度、湿度はBluetooth接続でSwitchBot温湿度計から外部連携する
・起動時にGPSの位置情報から周辺の気象データをインターネット(OpenWeatherMap)から外部連携する
・走行データをメールで送信する
・使用しているライブラリのライセンス表示する

SwitchBot温湿度計は温度と湿度をBluetooth接続でインタフェースできるスマート家電です。

GPSの走行軌跡データや加速度は1秒間に5回記録
・1秒間に5回記録するためには、外付けGPSセンサーが必要で、処理が内蔵GPSと共用できるDG-PRO1を利用する。

DG-PRO1はGPS位置情報を1秒間に最大18回記録することが可能なGPSロガーです。

 

システム方式

・スマホの他に外部連携として、SwitchBotとDG-PRO1などのIoTセンサー機器を利用しますので、これをハードウェア構成図として表現します。
・GPSセンサーを制御するサービス、使用するライブラリを、ソフトウェア構成図として表現します。
・気象データはインターネット、温度と湿度はBluetooth(※)で接続しますので、これをネットワーク構成図として表現します。

※Bluetooth接続は、MACアドレスを使用して、データリンク層で接続しますので、ネットワーク接続として扱います

画面設計

要件から機能を実現する画面を洗い出します。


・クルマのセッティング情報、コース図を扱うマスタ登録画面
・走行データの記録指示、また記録を一覧表示する画面
・記録した走行データを表示する画面
・動作に必要なパラメータを設定する画面
・走行データを補完入力する、表示する画面
・コース図を撮影する画面

Androidアプリの画面として、ActivityとFragmentの2種類あります。
両方とも同じように画面レイアウトをもつことが可能で、Activityが画面本体、FragmentはActivity の中に組み込むことが出来るUIコンポーネントです。たとえば、入力するだけの画面、複数の選択肢から選択する画面、削除の実行を確認する画面はFragmentで実装するほうがよいでしょう。なお、ダイアログ画面もFragmentの一種として扱います。

Androidアプリでは、画面レイアウトはXML形式ファイルで、画面の処理はClassファイルになります。
画面IDはXMLファイル名とし、ファイル名の一部にFragmentかActivityを識別する文字を含めておくとわかりやすいと思います。洗い出した画面を一覧化したものを画面一覧、画面の遷移を画面遷移図としてまとめます。

画面レイアウトに関しては、android stadioのLayout Editorを使用して作成するほうが良いでしょう。
Layout Editorで画面レイアウトを作成する際に、画面上の項目(コンポーネント)には、idを採番しますので、idごとの振る舞い(アクション)を画面アクション定義、画面上の項目(コンポーネント)を一覧化したものを画面入出力項目一覧としてまとめます。

Androidアプリでは、コンポーネントの標準的なアクションはクリックで、コーディングではクリックリスナーをセットし、処理を記述します。クリック以外のアクションとして、ピンチイン・ピンチアウト、ダブルタップ、ロングタップなどがありますこれらのアクションには、クリックリスナーとは違うリスナーを使用します。

テーブル・ファイル設計

要件からエンティティ(データとして管理したい対象)を洗い出します。


・走行データファイル
・撮影データファイル
・走行データの一覧情報
・セッティング情報
・セッティング情報の基になるマスタ情報(パーツ)
・コース図の一覧情報

画面設計の各画面と各エンティティの扱い(追加[C]、読込[R]、更新[U]、削除[D])を、マトリクス表にまとめたものがCRUD図です。

Androidアプリでは、データベースとしてRoom(SQLite)が使用できます。
ランダムアクセスが必要な場合はデータベースに格納、そうでない場合はファイルとして管理で良いと思います。
エンティティを一覧化したものをテーブル・ファイル一覧、テーブルの場合は管理する項目をテーブル定義としてまとめます。

AndroidアプリのRoom(SQLite)で管理できる項目のデータ型は、INTEGER(符号付整数)、REAL(浮動小数点数)、TEXT(テキスト)、BLOB(バイナリ)の4種類です。4種類の他に、データ型を指定しないNONEというのがあります。
データベースに格納にするエンティティの場合、エンティティの関係性をテーブル関連図としてまとめます。
エンティティの関係性とは、「セッティング情報」には「セッティング情報の基になるマスタ」のコードだけを管理し、「セッティング情報の基になるマスタ」に名称などの属性情報を管理することです。

外部インターフェース設計

要件から外部連携の対象を洗い出します。

温度、湿度、天候などの気象データを外部連携する
→ インターネット経由でWebサービス(OpenWeatheMap)に接続し、レスポンスを取得する。

・温度、湿度はBluetooth接続でSwitchBotから外部連携する
→ SwitchBotにBluetooth接続し、温度、湿度データを取得する。

走行データをメールで送信する機能
→ 走行データファイルを添付ファイルとしてメールアプリを起動する。

使用しているライブラリのライセンス表示
→ ブラウザアプリを起動して使用ライブラリの開発元サイトを表示する。

洗い出した外部インターフェースの関連を外部システム関連図として表現します。
洗い出した外部インターフェースを一覧化したものを外部インターフェース一覧としてまとめます。
各外部インターフェース仕様を外部インターフェース定義としてまとめます。

Webサービス(OpenWeatheMap)のレスポンスは、JSON形式(XML形式も可)で受信します。
レスポンスデータの key, value を外部インターフェース定義にまとめます。

SwitchBotからの温度、湿度データは広告パケットとして受信します。
広告パケットのレイアウトを外部インターフェース定義にまとめます。

Androidアプリからメールアプリやブラウザアプリの起動はintentを使用します。
intentに設定する内容を外部インターフェース定義にまとめます。

今回はここまでとなります。
次回は、続きで詳細設計以降を具体化してみたいと思います。

アプリ開発に興味があって、最初の一歩が踏み出せない方には、オンラインで学べるスクールがおススメです。

ブログランキング・にほんブログ村へにほんブログ村

コメント欄

タイトルとURLをコピーしました