学生自主研究 成果報告書 「地震を知らせるアプリ作り」
1年 システム科学技術学部 情報工学科
山村 蓮
准教授 システム科学技術学部 情報工学科
1. はじめに(研究目的)
私の出身は福島県であり,福島県は,過去20年間で震度5弱以上の揺れが発生している回数が日本一の県でもある.※1 そのような場所で育ち,3.11の経験もある私は,地震の発生に特に敏感になった.それは私だけでなく,福島県民や,宮城・岩手県民,更には,“大地震”を経験した地域の住民に共通することであろう.小さな揺れでも気になる中で,自分の周辺地域で起きた地震を即座にスマホに知らせるアプリを作りたいと考えた.
スマホの位置情報を活用し,自分のいる位置から半径○kmで発生した地震をセレクトしてプッシュ通知を行い,さらに画面上にそれを表示させるアプリを作ることをゴールに設定した.
※1 気象庁地震・震度データベースによる.
2. 開発方法(環境)
Mac book に,Appleが提供している統合開発環境(IDE)であるX Codeをインストールし,Apple社が開発したオープンソースのプログラミング言語であるSwiftを用いて,開発を行った.私自身,Swiftを用いたプログラミングの経験がなかった為,書籍『たった2日でマスターできるiPhoneアプリ開発集中講座』を参考に,アプリの開発を行った.
また,地震の詳細な情報は,独立研究開発法人防災科学技術研究所(以下 防災科研)がインターネットで公開している,Hi-net 好感度地震観測網から引用した.
3. 実際に開発したアプリ
実際に作成したアプリは以下の通りである.
アプリ名 地震速報
アイコン 図1
完成したアプリをスマホのホーム画面で見ると図2のようになる.
なお,ファイル読み書きをマスターするのに膨大な時間を要し,設定したゴールには到達できなかった事は初めに記述しておく.
このアプリについて,以下の5つの項目に分けて説明する.
(1) 取り扱う問題
(2)利用する方法
(3) 作成したアプリの使用法
(4) 作成したプログラムの設計と実装
(5) 作成したプログラムの考察
(1) 取り扱う問題
上記にもある通り,地震の発生を通知するアプリを作る.防災科研が公開している高感度地震観測網Hi -netには,地震発生日時,震源時誤差,緯度,南北誤差,経度,東西誤差,震源の深さ,深さ誤差,マグニチュードの8個のデータがあり,CSVファイルでダウンロードが可能である.ダウンロードしファイルを読み取り,出力する作業を行う.
(2) 利用する方法
Hi-netでダウンロードしてきたcsvファイルをtxtファイルとして保存し,プロジェクト内に保存する.その後,ファイル読み取りを行う,そして,読み取ったファイルをX Codeシュミレータ上のiPhone上(図3)に表示する.
また実行ボタンを押す毎にファイルを表示させる為,条件分岐を用いた.用いたプログラムは以下である
aが1の時,ファイルから読み込んだテキストが表示されることになる.aは7行目の式により,aを0と1の時で場合分けができる.
(3) 作成したプログラムと使用法
アプリの利用方法はシンプルである.まず,アプリを開き,中央にある実行ボタンをクリックする.そうすると防災科研Hi-netにある情報が表示される.(図4)
(4) 作成したプログラムの設計と実装
作成したプログラムは以上の通りである.構造体とエラーメッセージについて説明する.
<ContentView構造体>
Viewプロトコルに準拠している.
@State var a = 0: アプリ内で状態を管理する為のaという整数型のStateプロパティーであり,初期値は0である.
bodyプロパティ: UIの構造を定義する.VStackを使用し,要素を垂直に配置している.
Button: “実行“というテキストを表示するボタンがある.ボタンがタップされた時に実行される.クロージャ内で,aの値が変更され,readFromRile()メソッドが呼び出される.
<writingToTile(text:)メソッド>
引数としてテキストを取り,それをファイルに書き込むメソッドである.
File Managerを使用し,ドキュメントフォルダのURLを取得し,そのフォルダ内に”output,txt”という名前のファイルを作成する.
指定されたテキストをUTF-8エンコーディングでファイルに書き込む.
<readFromFile()メソッド>
ファイルからテキストを読み込むメソッドである.
File Managerを使用して,ドキュメントフォルダのURLを取得,”output.txt”ファイルのURLを取得する.
ファイルからテキストを読み取り,その内容を文字列として返す.
<フォルダURL取得エラー>
FileManager.default.urls(for:in)メソッドは,指定された検索パスに対するディレクトリのULRを返す.しかし,何らかの理由でディレクトリが見つからない場合,guard文により,nilが返され,それによりプログラムがfatalError(“フォルダURL取得エラー“)の行で停止し,エラーが発生する.
例に挙げると,ファイルシステムの問題やアクセス権の不足などが原因として考えられる.
<ファイルの書き込みエラー>
try text.write(to:atomically:encording:)メソッドは,指定されたURLにテキストを書き込む.その際エラーが発生する可能性がある.例を挙げると,ディスク容量不足,ファイルがロックされているなどが考えられ,エラーが発生した場合はcatchブロックが実行され,エラーメッセージが表示される.
<ファイル読み込みエラー>
String(contentsOf:)メソッドは,指定されたURLから文字列を読み取る.その際エラーが発生する場合がある.例を挙げると,ファイル自体が存在しない,アクセス権の不足,ファイルが破壊されている場合などである.エラーが発生した場合には,guardブロック内のfatalErrorが呼び出され,ログラムが停止し,エラーが表示される.
( 5 )作成したプログラムの考察
このプログラムは,処理に少し時間が掛かる為,あまり良いプログラムとはいえない.また,時間の関係で実現できなかった機能(位置情報を利用し自分の周辺の地震を表示する,最新の地震情報を表示,プッシュ通知する など)を考えると,まだまだ改善の余地はあると考えらえる.
4. 研究成果
目標到達点には届かなかったが,発生した地震の情報を表示させるiOSアプリの開発に成功した.
5. まとめ
ファイル読み書きに時間が大幅に掛かってしまった為,目標到達はできなかった.しかし,出来るようになったファイル読み書きを用いて作れるアプリの幅は大きく広がったと思う.今後としては,利便性を向上させた地震速報のアプリ開発と,私が一番作りたいアプリである,チラシの情報を一元化する“FLYER”の開発に取り組んでいきたい.また,iOSとAndroidどちらにも対応している,Dart言語の習得を目指し,プログラミングの学習を進めていきたい.
6. 参考文献
・ SwiftUI対応 たった2日でマスターできるiPhoneアプリ開発集中講座
この記事が気に入ったらサポートをしてみませんか?