『自転車事故を減らしたい』高校生の想いをカタチに。Swift×AIで挑んだアプリ開発支援の記録

はじめに

ソーイ株式会社の西浦です。
入社1年目で、普段はWEBアプリケーションの開発に従事しています。

今回はモバイルアプリの開発支援のご依頼をいただき、熊本市立千原台高等学校の「探究活動」の技術支援に携わらせていただきました。

ソーイ株式会社はアプリ開発を専門としており、教育分野に限らず、企業向けの開発支援や技術伴走も行っています。今回の取り組みも、そうした日頃の開発支援の延長線上として、実装指導からApp Store審査対応までを一貫してサポートさせていただきました。

目標は、生徒たちが企画した「事故防止アプリ」を実際にApp Storeでリリースすることです。

事故防止アプリは学校周辺の危険箇所をアプリに登録し、危険箇所接近時に通知を送ることで、通学中の事故を未然に防ぐことを目的としています。

プロのエンジニアとして、いかに生徒たちの熱意をアプリに反映するかを意識して取り組んできました。


なぜノーコードからネイティブアプリに変更したのか

当初、生徒たちはノーコードツールを使用しアプリの作成を行っていました。しかし、現在のツールでは正確な位置情報の取得・追跡が難しいということがわかりました。

  • 左:当初の「どすこいマップ」
  • 右:Swiftで開発・リリースした「事故防止アプリ」

今回のアプリの目的は、自転車走行中の事故を未然に防ぐこと

登録された危険地点にユーザーが近づいた際に通知で知らせる必要があります。
この目的達成には、バックグラウンドでの位置情報監視など、OSレベルでの制御が必要となるため、「ネイティブアプリ開発」を選択しました。

そこで、開発ツール・言語を「Xcode」と「Swift」へ移行し、ゼロからアプリを作り直すことにしました。
ツールの制約に合わせて機能を削るのではなく、技術の力で本来の目的を達成すること。これが、私たちが提供できる価値だと考えたからです。

方針が決まると、早速、新しい環境での開発に向けて仕様書と画面設計書の作成に取り掛かりました。実際に生徒たちが作成した資料がこちらです。

実装した機能と採用した仕組み

本アプリでは、生徒たちが考えた要件を実現するため、以下のように実装しました。

1. ユーザーが利用する機能

  • マップ画面:
    アプリを開くと現在地周辺の地図が表示され、自分がどこにいるかを即座に確認できます。
  • 危険箇所のピン表示:
    事故が起きやすい場所に「赤いピン」を立てて可視化し、視覚的に注意を促します。
  • 危険箇所一覧画面:
    危険箇所の一覧を閲覧でき、危険箇所の詳細を確認できます。
  • プッシュ通知:
    危険エリアに近づくと、スマホの画面に警告通知が表示されます。アプリを閉じていても通知が届くため、移動中にスマホを操作する必要がありません。

2. 実現するための技術
上記のUIを支えるため、iOS標準のフレームワークを用いて以下の処理を実装しました。

  • 地図描画 (MapKit):
    標準マップ機能を組み込み、ピンの配置や現在地の追従を行っています。
  • 位置情報監視 (CoreLocation):
     現在地を高頻度で取得し、危険箇所に近づいていることをリアルタイムで検知できるようにしています。バックグラウンドモードを有効にし、アプリを閉じていてもGPS位置情報を取得し続ける仕組みを構築しました。
  • 通知 (UserNotifications):
    取得した現在地と危険箇所の座標との距離を常に計算し、半径10m以内に入った瞬間にローカル通知を発火させます。これにより、即座に危険箇所への接近を認知できます。

このバックグラウンド監視と通知連携により、自転車通学中でもスマホの画面を見ることなく、音と振動だけで危険箇所に接近したことを知ることができる、安全な仕組みを実現しています。

なお、本アプリは教育目的での利用を前提としており、位置情報の取り扱いや運用にあたっては、プライバシーや安全面に十分配慮しています。
位置情報を外部サーバーへ送信することはなく、個人を特定するようなプライバシー情報も取得していません デバイス内(端末内)だけで完結する仕組みにすることで、生徒たちが安心して使えるよう設計されています。

AIを活用した最短開発

実際の授業日程は以下の通りで、実質的なコーディング期間は極めて短いものでした。

  • 11月19日:要件定義
    仕様書・画面設計書の作成
  • 11月26日:開発
    マップ表示と危険箇所表示の実装
  • 12月3日:開発
    バックグラウンド位置情報監視・通知の実装
  • 12月10日:審査提出
    Appleへの申請
  • 12月17日:振り返り
    実地テスト結果のフィードバック、次期構想

授業内でコーディングに充てられる時間は4時間程度でした。
限られた時間内でSwiftを習得し、リリースまで漕ぎ着けるのは本来極めて困難です。

そこで、生成AIをフル活用した「壁打ち手法」で、最短でのアプリ開発を行いました。

「壁打ち手法」とは、AIにやりたいことを投げてコードを生成させ、エラーが出ればその内容を再びAIに投げて解決策を聞く、という対話を繰り返す開発スタイルです。

生徒たちが考えた仕様や設計内容を言語化・資料化し、それをもとにAIへ説明する形でコードを生成し・実装を行いました。エラーが発生した場合や、技術的な用語・概念が分からない場面では、主にこちらがサポートに回る形で開発を進めました。

これは、プログラミング未経験である生徒たちが主体的、かつ時間内にアプリを完成させるための工夫です。
AIという強力なアシストを得ることで、技術的な障壁に挫折することなく、限られた時間内での実装を完了することができました。

App Storeリリースとその後

最終的に、アプリを無事にApp Storeへリリースすることができました。


このリリース作業も、私たちがすべて代行するのではなく、生徒たちと一緒に画面を見ながら進めました。審査通過後、実際にストアに自分たちの作ったアプリが並び、手元のスマホで動くことに感動している様子でした。

リリース後は、生徒たちに宿題として実地テストを行ってもらい、その結果をもとに以下のディスカッションを行いました。

  • テスト結果に基づく改善点の洗い出し
  • 次期バージョンの仕様書作成
  • 全校生徒にどのようにアプリを使ってもらうかの作戦会議

以上をもって、私たちからの技術支援は一区切りとなります。
しかし、アプリにとってはここからが本当のスタートです。

これまでは「どう作るか」という開発フェーズでしたが、これからは「どう広め、どう使ってもらうか」という運用フェーズへと移行します。
全校生徒に実際に使ってもらい、データを集め、「本当に事故防止に役立ったのか?」を検証する。

完成したアプリを活用して、彼らの探究活動がここからさらに加速し、実りあるものになることを心から願っています。

おわりに

自分たちのアイデアを形にして実際に作ったアプリがApp Storeに並ぶという経験は特に生徒たちにとって、貴重な経験であったと思います。

私自身も初のiOS開発・リリースという挑戦でしたが、生徒たちへ技術を「教える」というプロセスを通じ、理解を深めながらプロジェクトを完遂することができました。技術的な挑戦と、プロジェクトを目標達成まで導くという指導経験は、エンジニアとして大きな財産となりました。

この経験を活かし、これからもエンジニアとして積極的に挑戦しながら、ステップアップしていきたいと思います。