【チーム開発】コミックマーケット向け！オフライン対応のデジタル地図アプリを作ってみた【概要編】

# :star2:はじめに

こんにちは、OhaGiです。
友人の @godhexagon , @TKQuQ 他2名とチームを組み、コミックマーケットでの使用を想定したアプリ『  **こみっぷ**  』を開発しました！
チーム開発の経験を積むことと、開発の勉強を目標に制作を進めました。

![こみっぷアイコン大](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/e7bf0ba9-c5db-ae52-ea49-4812e943269f.png)

 **Github URL** 

https://github.com/TYTTNTeam/ComikeApp

:::note info
この記事は、こみっぷの使用方法、開発背景についてまとめた **概要編** です。
コミュニケーション面でのトラブルをまとめた **コミュニケーション編** は[こちら](https://qiita.com/OhaGi_/items/59323643384f0cc6e545)からご覧ください!
:::

***

# :speech_balloon:こみっぷ紹介

## :white_check_mark:概要

* 『こみっぷ』は、コミックマーケットを **より楽しく、そして快適に** 参加できるようサポートするアプリです
* **従来の紙の地図の代わりとなるアプリ** であり、作成した地図を簡単に確認できること目標としています
* コミケ当日に紙の地図と同様の使用感を維持するため、 **地図表示の軽量化** にこだわっており、スムーズでストレスフリーな体験を可能にしています
* サークルやブースの詳細な調査機能は追加せず、 **当日のためのメモ機能のみを搭載** し、シンプルで使いやすい設計にしています

## :map:使用方法

<table style="width:100%; border-collapse: collapse;">
  <tr>
    <th style="width:50%; text-align:center; padding: 10px;">地図追加機能</th>
    <th style="width:50%; text-align:center; padding: 10px;">地図表示・切り替え機能</th>
  </tr>
  <tr>
    <td style="text-align:center; padding: 10px;">
      <img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/2a8e7f61-92a9-efac-50cc-889e28f17894.gif">
    </td>
    <td style="text-align:center; padding: 10px;">
      <img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/a4590422-3f8c-128c-c424-c1d815ac9768.gif">
    </td>
  </tr>
  <tr>
    <td style="text-align:center; padding: 10px;">登録したいPDFファイルを指定し、地図の名前を入力出来ます。</td>
    <td style="text-align:center; padding: 10px;">表示する地図を切り替えることが出来ます。地図の拡大縮小も可能です。</td>
  </tr>
</table>

<table style="width:100%; border-collapse: collapse; margin-top: 20px;">
  <tr>
    <th style="width:50%; text-align:center; padding: 10px;">地図編集機能</th>
    <th style="width:50%; text-align:center; padding: 10px;">手書きメモ機能</th>
  </tr>
  <tr>
    <td style="text-align:center; padding: 10px;">
      <img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/488119a9-4c3e-2678-3266-e2f2e3c52f14.gif">
    </td>
    <td style="text-align:center; padding: 10px;">
      <img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/dac61842-11b3-e49b-2d1c-b7896649c140.gif">
    </td>
  </tr>
  <tr>
    <td style="text-align:center; padding: 10px;">登録した地図の名前の編集と地図の削除を行うことが出来ます。</td>
    <td style="text-align:center; padding: 10px;">手書きでメモを書き込める機能です。このモードを終了すると自動で内容が保存され、地図表示機能に反映されます。</td>
  </tr>
</table>

<table style="width:100%; border-collapse: collapse; margin-top: 20px;">
  <tr>
    <th style="width:50%; text-align:center; padding: 10px;">手書きメモ機能(ペンモード)</th>
    <th style="width:50%; text-align:center; padding: 10px;">手書きメモ機能(消しゴムモード)</th>
  </tr>
  <tr>
    <td style="text-align:center; padding: 10px;">
      <img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/2eede6fd-67c6-fb4a-22ba-1ddddcfcd081.gif">
    </td>
    <td style="text-align:center; padding: 10px;">
      <img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/2bcae69b-26dc-3d38-dad5-ffc4cb6e266a.gif">
    </td>
  </tr>
  <tr>
    <td style="text-align:center; padding: 10px;">色、太さ、濃さを変更可能なペンで地図にメモを残せます。</td>
    <td style="text-align:center; padding: 10px;">ペンモードで書き込んだメモを削除出来ます。</td>
  </tr>
</table>

## :tools:使用技術

<img src="https://img.shields.io/badge/-Kotlin-000000.svg?logo=kotlin&style=for-the-badge" alt="Kotlin"> <img src="https://img.shields.io/badge/-Android_Studio-000000.svg?logo=androidstudio&logoColor=3DDC84&style=for-the-badge" alt="Android Studio"> <img src="https://img.shields.io/badge/-Jetpack_Compose-000000.svg?logo=jetpackcompose&logoColor=4285F4&style=for-the-badge" alt="Jetpack Compose">

### 技術選定理由

コミックマーケット会場の通信回線が不安定なため、ネット通信が不要な **ネイティブアプリ** を作成することにしました。
専門学校でJavaを学んでいるため、学習の延長として **Kotlin** を採用しました。これにより、理解しやすくスムーズに開発を進めることができました。

## :file_folder:使用ツール

<dl>
  <dt>GitHub</dt>
  <dd>言わずと知れたソフトウェア開発のプラットフォーム</dd>
　<dt>Discord</dt>
  <dd>連絡・タスク通知・実装の相談、オンラインでのデイリースクラム等の連絡ツールとして使用。実際の企業で使用されているslackも見当したが、無料で制限なく使える上普段から使い慣れているためDiscordを採用。</dd>
　<dt>Mindmeister</dt>
  <dd>マインドマップの作成に使用。無料で複数人での利用が可能だったため採用した。</dd>
  <dt>Figma</dt>
  <dd>画面設計、詳細設計の作成に利用。</dd>
　<dt>Notion </dt>
  <dd>タスクボード、ドキュメントの管理等に使用。</dd>
</dl>

# :fire:開発背景

## :seedling:開発動機

* コミックマーケットに参加した際、 **紙の地図はかさばって使いにくい** と感じたこと
* 現在リリースされているアプリは **サークル調査機能を重視** したアプリが多く、 当日の使用に特化 した紙の地図のような使用感のアプリがなかったこと

以上の理由から、「 **当日の使用感** 」に焦点を当てて、機能を作成することにしました。

## :shamrock:開発過程

### 1.案を練る

 **マインドマップ** を作成し、アイデアを出し合いました。
複数人が好きなタイミングで自由に、気軽に書き込めるよう、MindMeisterを使用して多くのアイデアを引き出しました。

 **実際に作ったマインドマップ** 
![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/69ff56fa-d869-fef3-4848-91f9259a8560.png)

### 2.要件定義

#### 機能要件

* 地図を取り込み、複数保存
* 任意の地図を表示
* 地図ごとにメモを追加
* 2本指で地図を拡大・縮小 

#### 非機能要件

- 地図の表示は早くする
- 誤操作を低減

### 3.画面設計

Figmaを使用したことで、視覚的にわかりやすい設計が可能になり、チーム内での意見交換がスムーズに行えました。

![画面設計](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/c9938220-de22-71f1-1788-3eecbf758af1.png)

### 4.詳細設計
コンポジションツリー、クラス図共にFigmaを利用して作成しました。
#### コンポジションツリー

<details><summary>コンポジションツリー(開けます)</summary>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/1f28c252-901a-b0cd-77c3-a3f56d30d090.png">

</details>

#### クラス図

<details><summary>クラス図(開けます)</summary>

<img src= "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/990735d2-0e0e-ec21-7743-9c3988df71ea.png">
</details>

### 5.タスク管理

タスクの可視化を目的に、Notionで **タスクボード** を作成して管理しました。
また、 **デイリースクラム** を実施し、タスクの割り当てや進捗状況の確認を行いました。

![タスクボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/83ac2b50-55b5-dbad-f312-0780bc636bb9.png "タスクボード")

## :rotating_light:苦労したこと

今回の開発における1番の課題で、1ヶ月近くタスクの遅れをもたらした存在。
それは...

　　
 **コミュニケーションエラー**  

　　
 です。
 我々はコミュニケーションのトラブルに何度もぶつかりコミュニケーションの難しさを身をもって思い知らされました...

:::note momo
具体的なコミュニケーションの問題と解決策についての記事は[こちら](https://qiita.com/OhaGi_/items/59323643384f0cc6e545)からご覧ください。
:::

## :iphone:実際に使用してみて...
@OhaGi_ 
* 開発動機で挙げた問題点を解決できるアプリになりコミックマーケットをより楽しむことが出来た
* 自分が設計したUIやDBが実際に採用され、それがアプリとして動作するのを見たときに大きな達成感を感じた
* 当日にバグやクラッシュが発生しないか非常に不安だったが、無事に問題なく動作してくれたので安心した

@godhexagon
* 1回以上クラッシュすると予想していたが、当日最後までクラッシュしなかったので予想外だった
* 描画機能において、線の最大太さの調整や、ストロークの検出判定を改善するなどの自分の変更が、実際の利用で快適に操作できることにつながっていることがとても楽しく感じた。フロントエンドのうち、特にユーザが直接感じる部分に関しては、アイディアを形にするのが重要だと思った
* 画像処理はデータベースアクセスなどと比べて圧倒的に長い

@TkQuQ
* コミケ会場で、人が多すぎてインターネットに繋がりにくかったので、ネイティブアプリにして良かった
* 地図の画像を変える時のロード時間はほぼ無く、スムーズに変えられるのでストレス無く使うことができた
* 線の太さや濃さを変えるスライダーの当たり判定がシビアなので改善の余地があると感じた

# :green_book:学んだこと

<dl>
  @OhaGi_
  <dt>コミュニケーションの重要性</dt>
  <dd>チームワークの大切さや意思疎通の難しさを学べました。コミュニケーションは<strong>相互に</strong>意思を伝達し合うことが大事！</dd>
  @godhexagon
  <dt>メモを取ることは効果的</dt>
  <dd>すべてをメモろうとするときりがないですが、メモという中期記憶はメリットもあるので適せん使っていくといいと思いました。他人にメモを取るようお願いするのもいいかもしれません。</dd>
  @TkQuQ
  <dt>可読性の高いコードを書く重要性</dt>
  <dd>コードレビューを通じて、他のメンバーが理解しやすいコードを書くことの大切さを学びました。</dd>
</dl>

# :calendar:開発スケジュール

![開発スケジュール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584262/683c5c44-93ad-d1e6-e7e0-50d15b8a133c.png)

# :checkered_flag:さいごに

以上が、従来の紙の地図に代わるアプリ『 **こみっぷ** 』の紹介です。
開発メンバーのほとんどが初心者でしたが、無事に期間内に完成させることができました。今回の開発を通して、 **チームでのコミュニケーション** や、**自分の役割に対する理解を深める** ことができたと感じています。
今後も、チーム内での意思疎通を大切にしながら、 **開発スキル** と **コミュニケーション能力** をさらに向上させていきたいと思います！