“使ってもらえる”アプリは企画と技術設計が9割

## はじめに
この記事では、誰かに使ってもらえるアプリを作るためには、企画と技術設計は重要だということを述べます。
なお、タイトルは書籍「人は〇〇が9割」シリーズを~~パｋ~~参考にさせていただきました。

この記事は、「鳥羽商船高等専門学校 Advent Calendar 2024」の12月4日の記事です。

https://qiita.com/advent-calendar/2024/tobakosen


## 結論
- ドーパミンを刺激してアプリの利用を促そう
- 実現したい世界を明確にし、それを基に企画を進めよう
- その世界に共感する具体的なユーザーを考えよう
- ユーザーが日常生活で自然にアプリを使いたくなる場面を見つけよう
- 快楽や目的達成感を提供する機能をアプリに組み込もう
- 毎日使いたくなる仕掛けや定期的なアップデートでユーザーの関心を維持し、アプリを継続して使ってもらおう
- ビジネスロジック（アプリの主な機能や動作の基盤となる部分）に集中できる環境や、ユーザー行動を分析しやすい仕組みを技術的に整えよう
- マネージドサービスやノーコードツール、フレームワークを活用して開発を効率化しよう
- ユーザーの声を積極的に取り入れ、アプリを継続的に改善しよう


## 自己紹介
皆さんこんにちは。たからーん ([@takara2314](https://x.com/takara2314)) といいます。

今年3月に[鳥羽商船高等専門学校](https://www.toba-cmt.ac.jp/) 情報機械システム工学科を卒業し、今は東京のIT企業でソフトウェアエンジニアをやらせてもらっています。

学生時代は高専ロボコン（2年生で幽霊部員になった）や高専プロコン、DCONなどのコンテスト活動や、業務委託でアプリ開発やプログラミング教室の先生を行っていました。

フロントエンドやバックエンド、インフラ、デザイン、要件定義など、幅広く経験しています。


## 対象読者
- アプリ開発に興味がある高専生や学生
- ヒットアプリを作りたいと考えている開発者
- 技術設計に重点を置くソフトウェアエンジニア
- ユーザーに継続的に使われるアプリを目指すプロジェクトマネージャー


## 今回話さないこと
- 具体的な技術選定
- 詳細な技術設計
- マーケティング戦略
- 収益化モデルの構築
- チーム開発の方法論
- セキュリティ
- テスト戦略
- アプリ開発のプロセス
- 詳細なUI/UXデザインの手法


## 気づけば使ってしまうアプリ、ありますよね？
あなたは普段気づけば使ってしまうアプリはありますか？
または、毎日使っているアプリはありますか？

おそらくX(Twitter)やYouTube、TikTok、Duolingoなどが浮かんだと思います。

自分から強い意志を持って、アプリのアイコンをタップしていないですよね。「気づいたらアプリを開いていて、時間が過ぎていた。」ってことが日常的に起きています。

この記事を読んでくださっている皆さんは、これらのアプリを自分（自分たち）も作りたいと思っているんだと思います。

今回は、これらのアプリがなぜ気づけば使ってしまうものなのか、その秘密を生物学的に解説し、さらにその秘密を活かしたアプリ開発のコツを紹介します。

### 毎日使いたくなるアプリの秘密
人間の頭が求めているものは何だと思いますか？

一言でいうと、**ドーパミン**です。

ドーパミンとは快楽物質と呼ばれている神経伝達物質の一種で、楽しいことをしているときや目的を達成したとき、褒められたときに分泌されます。

つまり、**人間は快楽や目的達成を求めているのです。**

#### 1. 快楽が多ければ多いほど使ってもらいやすい
例えばX(Twitter)を例に出してみましょう。
Xでは、タイムラインをスクロールするたびに新しい投稿が表示され、その中から興味深い投稿を見つけると「いいね」をタップしたり、リポストしたりすることができます。

この一連の行動で、以下のようなドーパミン分泌のサイクルが生まれています。

1. **新しい情報への期待** （スクロールするたびに新しい投稿が表示され、「次は何が出てくるだろう？」という期待感が生まれる）
2. **発見の喜び** （興味深い投稿を見つけたときの「あっ！」という感覚）
3. **承認欲求が満たされる** （いいねやリポストをすることで、その投稿への共感を表現できる）
4. **社会的つながりの実感** （コメントやリプライを通じて他者とコミュニケーションが取れる）

このように、人間の脳が本能的に求める要素（新規性・発見・承認・つながり）を、スマートフォンの画面上で簡単に得られる仕組みになっているのです。

YouTubeやTikTokも同様で、動画コンテンツを通じて同じようなドーパミンのサイクルを生み出しています。

つまり、**快楽が多ければ多いほど、使ってもらえるアプリになります。**

```mermaid
graph LR
    A1[新しい情報への期待]
    A2[発見の喜び]
    A3[承認欲求の充足]
    A4[社会的つながりの実感]
    B[快楽]
    C[使ってもらえる]

    A1 -->|ドーパミン分泌| B
    A2 -->|ドーパミン分泌| B
    A3 -->|ドーパミン分泌| B
    A4 -->|ドーパミン分泌| B
    B -->|結果として| C
```

では、これらの要素を踏まえて、どのようにアプリを企画・開発すればユーザーに“使ってもらえる”のでしょうか。

#### 2. 目的達成が早いと使ってもらいやすい
この他にも、目的達成におけるドーパミン分泌方法もあります。

例えば、日常生活でわからないことや課題に遭遇したとき、今のあなたならどのように調べますか？

今の時代は「Googleで調べる」より「ChatGPTに聞く」が増えてきています。
それは「わからないことをわかるようになる」という目的達成が、「ChatGPTに聞く」という行動によって早く達成できるからです。
人間が自然に便利なものを求めるのは、目的達成が早くできる、つまりドーパミンを早く出したいからです。

つまり、**目的達成が早ければ早いほど、使ってもらえるアプリになります。**

#### 3. そのアプリを使わないと目的達成ができない
皆さんは普段TeamsやSlack、Zoomを使っていますか？

これらのアプリを使わないと、授業を受けられない、仕事ができない、という人も少なくないかと思います。

つまり、そのアプリを使わないと目的達成ができない、**アプリを使わざるを得ない状況を作ると、アプリを使ってもらえるようになります。**

スタートアップやWebアプリの界隈では「ビタミン剤か？鎮痛剤か？それとも治療薬か？」という3つの分類がよく使われます。

https://blog.btrax.com/jp/product-types/

| 分類 | 説明 | 例 |
|------|------|-----|
| **ビタミン剤** | これといった課題は解決してくれないけど、あれば嬉しい。でも無くても困らないサービス | YouTube、Instagram、TikTok |
| **鎮痛剤** | ユーザーが感じている具体的な課題（ペイン）を解決してくれるサービス | Teams、Slack、Zoom |
| **治療薬** | ユーザーの課題の根本を解決してくれるサービス | Azure、AWS、セキュリティソフト |

この中で、鎮痛剤や治療薬のようなサービスは、ユーザーが抱える本質的な課題を解決するため、必然的にアプリを使わざるを得ない状況を生み出すことができます。


## 企画のポイント
“使ってもらえる”アプリを作るために、どんな企画（要件定義）をすればいいのでしょうか？

僕はこれまでアプリ開発において、数多くのポイントに気を配りながら取り組んできました。

その中でも、特に重要だと感じているのは以下の5つです。
特に前半2つは、アプリ開発以外の企画においても重要なポイントだと思います。

1. **どんな世界にしたいのかを考えよう（最重要）**
2. 一人でもその世界に“刺さる”ユーザー（ターゲット）を考えよう
3. ユーザーの日常に溶け込む場所（アプリを使う場面）を探そう
4. ドーパミンを刺激する要素（アプリの機能）を生み出そう
5. 継続して使ってもらうために

### 1. どんな世界にしたいのかを考えよう（最重要）
アプリ開発において、実現したい世界を明確にすることが最も重要です。
なぜなら、それが全ての企画の出発点となるからです。

実現したい世界が定まっていないと、開発の途中で「このアプリは何のために作っているのか」「どんな機能を実装すべきか」といった根本的な部分で迷走してしまいます。

良い例として、Googleの使命を見てみましょう。

> 世界中の情報を整理し、世界中の人がアクセスできて使えるようにすること

(引用元: https://about.google/?hl=JA)

この明確なビジョンがあるからこそ、Googleは検索エンジンを中心に、Googleマップ、Googleフォトなど、一貫した方向性を持った様々なサービスを展開できているのです。

このように、実現したい世界は具体的で、壮大で、かつワクワクするようなものであることが理想的です。そうすることで、開発する側のモチベーションも高まり、結果としてユーザーにもそのポジティブな想いが伝わっていくからです。

もし、解決したい課題が明確にある場合は、その課題を解決できた先の世界を考えてみてください。

![98ee5999494f493b8fbf47343d6635ee.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613648/c36fa25d-0bc2-e039-135f-cd44fb978d71.jpeg)

### 2. 一人でもその世界に“刺さる”ユーザー（ターゲット）を考えよう
当たり前ですが、アプリはユーザーがいなければ使われません。

「時間をかけてアプリを作ったけども、誰も使ってくれない・・・」なんてことになってしまったら、せっかく作ったアプリが無駄になってしまいます。

そこで、どんなユーザーに刺されば前段で考えた世界が実現できるのかを考えましょう。
ここでの「刺さる」とは、その世界に共感し、アプリを使うことで自分の課題が解決できると感じることを指します。

例えば、「健康管理が簡単にできるスマートライフの世界」を考えてみましょう。
このような世界に共感してくれそうな人は、どのような人でしょうか？
その人のライフスタイルも含め、なるべく具体的に考えてみてください。
（いわゆる「ペルソナ」というやつです）

- **忙しいビジネスパーソン**
    - 平日は朝6時に起床し、7時に出社。昼食はコンビニで済ませることが多い。
    - 仕事中はデスクワーク中心で、会議や外出が多く、運動する時間が取れない。
    - 夕方6時に退社し、週に2回ジムに通うが、モチベーションの維持が課題。
    - 休日は家族と過ごす時間を大切にしているが、健康管理のための時間が不足しがち。
- **30代ほどのフィットネス愛好者**
    - 自宅での作業が中心で、フリーランスならではの柔軟な働き方を楽しんでいる。
    - 週に4回ジムに通っており、筋力トレーニングと有酸素運動を組み合わせている。
    - 健康的な食事に興味があり、オーガニック食品を積極的に取り入れている。
    - 友人とのトレーニングセッションやフィットネスイベントに参加することがモチベーションの源。
- **60代ほどの高齢者**
    - 毎朝6時に起床し、近所の公園でウォーキングをする習慣がある。
    - 週に1回、地域のボランティア活動に参加しており、コミュニティとの交流を楽しんでいる。
    - 子供たちが独立しており、孫との時間を大切にしている。
    - 定期的に健康診断を受けており、慢性的な高血圧を管理している。
- **部活やアルバイトも頑張る高専生**
    - 平日は朝8時に起床し、授業と自習に追われる日々。
    - 部活動ではサッカー部に所属しており、週に3回の練習がある。
    - アルバイトとしてカフェで働きながら、学業との両立を図っている。
    - 友人との時間や趣味に割く時間が限られており、効率的な時間管理を求めている。

このような具体的なユーザー像を考えることで、アプリがどのように彼らの生活に役立つかを明確にイメージできます。**課題解決のためのアプリを提供することで、ドーパミンを刺激し、アプリの利用を促すことができます。**

:::note warn
たまに「社会人全員」みたいに、大勢を対象にしたアプリを作ることを考えてしまうかもしれません。

それだと一人一人の課題が異なるため、全員の課題を解決しようとすると中途半端な機能が増えてしまい、結果として誰の課題も十分に解決できず、**アプリを使ってもらえなくなる可能性が高くなります。**
:::

### 3. ユーザーの日常に溶け込む場所（アプリを使う場面）を探そう
YouTubeやTikTokのように、「気づいたらアプリを開いていた」という状況を作るためには、対象ユーザーの日常生活を理解し、アプリをどこに組み込めるかを検討することが重要です。

ここでは、前章で紹介した具体的なユーザー像を基に、現状（As-Is）の生活スケジュールと理想（To-Be）のアプリ活用シーンを対比させて説明します。

#### 部活やアルバイトも頑張る高専生の1日
##### 現状（As-Is）
| 時間 | 活動 | 現状の課題 |
|------|------|------------|
| 6:30 | **起床** | 朝の準備に時間がかかり、急いでスケジュールを確認するためにスマホを見るが、効率的に管理できていない。 |
| 8:00 | **授業開始** | 授業中に集中しすぎて、定期的な休憩や軽い運動を忘れがち。 |
| 12:00 | **昼食** | 学食のメニューは限られており、栄養バランスを考えた選択が難しい。時には不健康な食事を選んでしまうことも。 |
| 16:00 | **部活動** | 練習後の体のケアやリカバリーが不十分で、疲労回復が遅れることがある。 |
| 19:00 | **アルバイト** | アルバイトと学業のスケジュール管理が煩雑で、予定の調整に時間を取られる。 |
| 21:00 | **帰宅** | 帰宅後の健康管理や学習時間のバランスが取れず、効率的に時間を使えない。 |
| 22:00 | **自習** | 長時間の自習で体力を消耗し、ストレスを感じやすくなる。 |
| 24:00 | **就寝準備** | リラクゼーション方法が固定されておらず、寝つきが悪くなることがある。 |

##### 理想（To-Be）
| 時間 | 活動 | アプリの活用シーン |
|------|------|-------------------|
| 6:30 | **起床** | アプリが今日のスケジュールを自動で確認し、効率的な日程管理をサポート。朝の準備時間を短縮するためのTo-Doリストを表示。 |
| 8:00 | **授業開始** | 授業の合間にアプリから運動リマインダーが届き、短時間でできるストレッチや軽い運動を促進。集中力を維持するための瞑想ガイドも提供。 |
| 12:00 | **昼食** | アプリが学食のメニューを分析し、栄養バランスの良い選択肢を提案。過去の食事履歴に基づいて、健康的な食事をサポート。 |
| 16:00 | **部活動** | 練習後にアプリがリカバリータイムのガイドやストレッチ動画を提供。体調管理のための健康データを自動記録し、最適な回復プランを提案。 |
| 19:00 | **アルバイト** | アプリが学業とアルバイトのスケジュールを自動で調整し、効率的な時間管理を支援。リマインダー機能で重要なタスクを通知。 |
| 21:00 | **帰宅** | 帰宅時にアプリがその日の活動データを分析し、健康管理アドバイスやリラクゼーション方法を提供。家族と共有できる健康レポートも生成。 |
| 22:00 | **自習** | アプリが学習タイムと健康管理をバランスよく配置するためのタイムマネジメント機能を提供。適度な休憩時間を提案し、ストレス軽減をサポート。 |
| 24:00 | **就寝準備** | アプリのリラクゼーション機能（瞑想ガイド、ストレッチ動画、リラックス音楽）を利用して、ストレスを解消し質の良い睡眠を促進。睡眠の質をモニタリングし、翌日の最適な起床時間を提案。 |

どこまで具体的にするか、考えるスケジュールの時間的な幅は、アプリが叶えたい世界や目的によって変わってきます。

ここで考えた理想は、すべて実現する必要はありません。まずは、1つのタイミングで1つの課題を解決するアプリを作ることを意識しましょう。
あくまで、そのユーザーの日常生活において、どの部分でアプリが役に立つかを考えることが重要です。

このように、各ユーザーの日常生活の現状と理想的なシナリオを対比させることで、アプリがどのようにユーザーの生活に自然に溶け込み、具体的な課題を解決する助けとなるかを明確に示します。**課題を感じているタイミングでアプリを活用することで、ユーザーは目的を達成しやすくなり、結果としてアプリを使ってもらもらえる可能性が上がります。**

### 4. ドーパミンを刺激する要素（アプリの機能）を生み出そう
最初に述べた通り、人間の頭はドーパミンを求めています。

ドーパミンとは快楽物質と呼ばれている神経伝達物質の一種で、楽しいことをしているときや目的を達成したとき、褒められたときに分泌されます。

ドーパミンを刺激すれば刺激するほど、アプリが使ってもらえるのです。

つまり、ドーパミンを刺激するために必要な、**楽しい要素や目的を達成できる要素を生み出すことが重要です。**

#### 楽しい要素の例
ここでは、[「ビタミン剤か？鎮痛剤か？それとも治療薬か？」](https://blog.btrax.com/jp/product-types/)のうち、ビタミン剤（これといった課題は解決してくれないけど、あれば嬉しい。でも無くても困らないサービス）のサービスの例を紹介します。

| アプリ名 | 実現したい世界 | 対象者 | 日常に溶け込む場所 | 楽しい要素 |
|----------|-----------------|--------|---------------------|------------|
| TikTok | 誰もが表現者になれる世界 | 10-20代の若者 | 暇な時間、通学・通勤中 | ・短い動画で飽きない<br>・音楽に合わせて踊れる<br>・フィルター効果で盛れる |
| Duolingo | 言語学習を楽しめる世界 | 語学学習者 | 通勤・通学時、寝る前 | ・キャラクターが可愛い<br>・ゲーム感覚で学べる<br>・達成感が得られる |
| Pokémon GO | 現実世界でポケモンと出会える世界 | ポケモンファン | 外出時、散歩中 | ・ポケモンを集められる<br>・友達と交換できる<br>・実際に歩くことで冒険できる |
| Pokémon Trading Card Game Pocket | いつでもどこでもポケモンカードゲームを楽しめる世界 | ポケモンカードゲームプレイヤー、スマホゲームユーザー | 通勤・通学時、休憩時間、ちょっとした空き時間 | ・カードを集めてデッキを作成できる<br>・オンライン対戦が可能<br>・友達と戦略を練りながら楽しめる |
| Instagram | 日常の美しい瞬間を共有できる世界 | SNSユーザー | 食事時、イベント時 | ・写真加工で映える<br>・いいねがもらえる<br>・ストーリーで気軽に投稿できる |
| Netflix | いつでもどこでも映像を楽しめる世界 | 動画視聴者 | 通勤・通学時、休憩時間 | ・次話自動再生<br>・おすすめ機能<br>・ダウンロードしてオフライン視聴可能 |


#### 目的を達成できる要素の例
ここでは、[「ビタミン剤か？鎮痛剤か？それとも治療薬か？」](https://blog.btrax.com/jp/product-types/)のうち、鎮痛剤（ユーザーが感じている具体的な課題を解決してくれるサービス）のサービスの例を紹介します。

| アプリ名 | 実現したい世界 | 対象者 | 日常に溶け込む場所 | 目的を達成できる要素 |
|----------|-----------------|--------|---------------------|-------------------|
| Microsoft Teams | 効率的なチームコラボレーションを可能にする世界 | ビジネスマン、学生、企業チーム | オフィス、リモート作業、勉強時 | ・チャットやビデオ会議の容易な実施<br>・ドキュメントの共有と共同編集<br>・タスク管理と統合されたアプリ連携 |
| LINE | シームレスなコミュニケーションと情報共有ができる世界 | 一般ユーザー、友人、家族、ビジネスユーザー | チャット時、通勤中、休憩時間 | ・メッセージやスタンプの送受信<br>・無料通話とビデオ通話機能<br>・公式アカウントやタイムラインでの情報発信 |
| Uber Eats | 好きな時に好きな食事を楽しめる世界 | 忙しい社会人 | 食事時、仕事中 | ・配達状況のリアルタイム追跡<br>・豊富な店舗から選択可能<br>・注文履歴の管理 |
| Google マップ | どこにでも迷わずに行ける世界 | 運転者、徒歩の移動者、旅行者 | 移動時、旅行計画時、近所の探索時 | ・リアルタイムのナビゲーションと交通情報<br>・目的地の検索と提案<br>・ストリートビューやレビューの提供 |
| Shazam | 簡単に音楽を識別し共有できる世界 | 音楽愛好者、一般ユーザー | 外出時、友人との集まり中、カフェで | ・ワンタップで曲を識別<br>・お気に入りに追加<br>・共有機能で友人とシェア |
| セキュリティソフト | 安全で安心なデジタルライフを送れる世界 | 個人ユーザー、企業、オンライン活動者 | PC使用時、スマートフォン使用時、インターネット接続時 | ・ウイルスやマルウェアの検出と除去<br>・ファイアウォールと侵入防止機能<br>・データ暗号化とプライバシー保護 |


### 5. 継続して使ってもらうために
せっかくアプリを作ったのなら、ユーザーに継続的に利用してもらいたいですよね？
しかし、「一発屋」のサービスでは、その後利用が減少し、せっかくの開発努力が無駄になってしまいます。

継続的な利用を促進するためには、以下の2つのポイントが重要です。

1. 「毎日使いたい」「使わないといけない」という雰囲気を作る
2. 定期的なアップデートを行う

#### 1. 「毎日使いたい」「使わないといけない」という雰囲気を作る
ユーザーに毎日使ってもらうためには、日常生活の一部として自然に組み込まれる必要があります。
語学学習アプリのDuolingoを例にとってみましょう。

- **キャラクターからのメッセージ機能**：学習を進めるごとにキャラクターから励ましのメッセージが届きます。これにより、ユーザーは自然と学習を続けたいという気持ちが湧き上がります。
- **ホーム画面の連続記録カウント機能**：スマホのホーム画面には、連続学習日数が表示されます。「連続記録を途切れさせたくない」というユーザーの心理を刺激し、毎日アプリを開く習慣を形成します。
- **ゲーム感覚の導入**：レッスンをクリアするごとにポイントやバッジが獲得できる仕組みがあり、遊び感覚で学習を楽しめるようになっています。これにより、継続的な利用が促進されます。
- **通知機能**：学習するタイミングを通知してくれる機能があります。これにより、ユーザーは学習を忘れずに行うことができます。

これらのような、**ユーザーの心理を刺激する要素を組み込むことで、ユーザーはアプリを毎日使う習慣を身につけることができます。**

#### 2. 継続的なアップデートを行う
アプリを長期間利用してもらうためには、継続的なアップデートが欠かせません。
心理学的な研究によれば、人間は新しい刺激や情報に対して自然と興味を持ち、探求する傾向があります。この特性を活かして、以下のようなアップデートを行うことが効果的です。

- 新機能（コンテンツ）の追加
- バグの修正
- デザインの改善
- パフォーマンスの最適化

さらに、ユーザーからのフィードバックを積極的に取り入れ、改善を重ねることで、**ユーザー自身がアプリの成長に貢献しているという感覚を持たせることができます。**

これにより、ユーザーはアプリに対して愛着を持ち、長期間にわたって利用し続ける意欲が高まります。


## 一度休憩しましょう
ここまで読んでくださってありがとうございます。
折り返し地点に来ました。

一旦お茶を飲んで休憩しましょう。

![tea.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613648/65e810d0-1541-7b89-7a7f-52ed541a3214.png)


## 企画と技術設計はセットだ！
ここからは技術の話になります。

タイトルにもある通り、“使ってもらえる”アプリを作るためには企画だけでなく、技術設計も重要です。
前章で述べたポイントのうち、以下の2つは技術設計によって実現しやすくなるかが変わってきます。

- ドーパミンを刺激する要素（アプリの機能）を生み出す
- 継続して使ってもらえる

```mermaid
graph TD
    A[ドーパミンを刺激する要素を生み出す]
    B[ユーザーが楽しいと感じる要素を提供する]
    C[創造的な機能を実装する]
    D[ビジネスロジックに集中しやすい設計]
    E[魅力的なデザインを作る]
    F[デザインを組みやすい設計]
    G[ユーザーの目的達成を支援する要素を提供する]
    H[ユーザーのニーズを理解し、問題を解決する]
    I[ユーザーの行動を分析しやすい設計]
    J[目的達成を少しでも早くするためのデザインを作る]
    K[デザインを組みやすい設計]

    A -->|実現するには| B
    A -->|実現するには| G
    B -->|そのために| C
    B -->|そのために| E
    C -->|必要な技術設計| D
    E -->|必要な技術設計| F
    G -->|そのために| H
    G -->|そのために| J
    H -->|必要な技術設計| I
    J -->|必要な技術設計| K
```

```mermaid
graph TD
    A[継続して使ってもらえる]
    B[「毎日使いたい」という雰囲気を作る]
    C[ユーザーの関心を引き続けるための施策を実施する]
    D[ビジネスロジックに集中しやすい設計]
    E[継続的なアップデートを行う]
    F[アップデート（機能変更・機能追加）を行いやすい設計]
    G[UI/UXを向上させる]
    H[デザインを組みやすい設計]

    A -->|実現するには| B
    A -->|実現するには| E
    A -->|実現するには| G
    B -->|そのために| C
    C -->|必要な技術設計| D
    E -->|必要な技術設計| F
    G -->|必要な技術設計| H
```


## 技術設計のポイント
前章で述べた必要な技術設計のポイントをまとめましょう。

1. ビジネスロジックに集中しやすい
2. ユーザーの行動を分析しやすくする
3. デザインを組みやすい
4. アップデート（機能変更・機能追加）を行いやすい

### 1. ビジネスロジックに集中する技術構成のコツ
ビジネスロジックとは、アプリの主な機能や動作の基盤となる部分です。

#### とにかく楽に開発することを意識しよう
アプリを開発するとき、すべてを一からコードで書く必要があると感じたことはありませんか？

開発初期段階では、特にスピードが重要になります。
まずは動くものを作ることに集中し、完璧を目指さずに、必要最低限の機能を実装することを意識しましょう。

技術選定においても、学習コストが低く、すぐに使いこなせる技術を選択することが重要です。

初めから保守性を過度に考えず、例えばサーバーの準備（インフラ構築）を手動で行うなど、シンプルなアプローチを取ることも大切です。

また、ライブラリ選びに時間をかけることも有効です。
コードを書く時間を減らすために、ライブラリ選びは慎重に行いましょう。

#### ノーコードツールの活用を検討してみよう
本当にプログラミングを行う必要があるのか、一度考えてみてください。
プログラムを書くという欲求を抑え、ノーコードツール（プログラムを書かなくてもアプリを作れるツール）を利用してアプリを作成することも一つの手法です。

ノーコードでアプリが作れるツールの例として、Azure Power Appsやn8n、Difyなどがあります。

https://powerapps.microsoft.com/ja-jp/

https://n8n.io/

https://dify.ai/

### 2. ユーザーの行動を分析しやすい技術構成のコツ
#### とにかくユーザーの行動を記録しよう
あなたは、アプリを使っているユーザーがどんなことをしているのか知りたいと思いませんか？
ユーザーの行動をしっかりと把握することで、アプリをもっと良くするヒントが見つかります。

まずは、難しいことは考えずに、簡単な方法から始めてみましょう。例えば、C言語の`printf`関数やPythonの`print`関数を使って、ユーザーがどのボタンをクリックしたのか、いつログインしたのかなどを記録してみましょう。

```python
# 簡単なログ収集の例
print(f"ユーザーID: {user_id}がログインしました")
print(f"ボタンがクリックされました: {button_name}")
```

ユーザーID、イベント名、タイムスタンプ、関連データなどを記録することで、後からユーザーの行動を見返すことができます。

例えばホームページやWebアプリの場合、Google アナリティクスを使うと、簡単にユーザーの行動を記録できます。

https://developers.google.com/analytics?hl=ja

https://support.google.com/analytics/answer/12159447?hl=ja

ログは、ユーザーがアプリ内でどんな操作をしているのかをそのまま示してくれる貴重なデータです。これを分析することで、アプリのどこを改善すればユーザーにとって使いやすくなるのかが見えてきます。

また、直接ユーザーに意見を聞くのは難しいことも多いですが、ログを活用すれば、ユーザーがどんな機能をよく使っているのか、どこで離脱してしまうのかなど、客観的なデータとして得られます。
これにより、ユーザーのニーズに応じた改善策を立てやすくなります。

#### 可視化する方法を考えよう
ログを可視化することで、ユーザーの動きを直感的に理解できるようになります。

たとえば、どのボタンがよくクリックされているのか、どのページで時間を過ごしているのかをグラフやチャートで見ることで、ユーザーの行動パターンをしっかりと把握し、アプリの改善点を見つけやすくなります。

ユーザーの動きを視覚的に捉えることで、より使いやすいアプリの作成に役立ちます。

ログデータを手動または自動で集計して、Excelなどで可視化してみましょう。

#### アンケートやフィードバックフォームへの導線を作ろう
ユーザーの行動を正しく分析するためには、ユーザーの声を直接聞くことがとても大切です。

例えば、サイトを利用しているときに「この記事は役に立ちましたか？」というポップアップが表示されることがありますよね。これはユーザーからのフィードバックを得る一つの手段です。

このように、簡単にアクセスできるフィードバックフォームやアンケートをアプリ内に設置することで、ユーザーの意見や要望を集めることができます。

**フィードバックを収集することで、ユーザーがどのようにアプリを利用しているか、どこで困っているかを理解し、アプリの改善に役立てることができます。**

定期的にユーザーの声を反映させることで、より使いやすく、愛されるアプリを作ることができるでしょう。

### 3. デザインを組みやすい技術構成のコツ
#### フレームワークを活用しよう
Webアプリケーションの開発においては、Tailwind CSSやMantineなど、コンポーネントをブロック状に組み合わせてデザインを構築できるフレームワークを積極的に活用しましょう。

https://tailwindcss.com/

https://mantine.dev/

Androidアプリの場合はMaterial Design、iOSアプリの場合はSwiftUIなど、各プラットフォームに適したデザインフレームワークを選ぶことも重要です。

https://m3.material.io/

https://developer.apple.com/jp/xcode/swiftui/

最新のデザイントレンドに対応したフレームワークを選ぶことで、モダンで魅力的なデザインを効率的に実現できます。

#### デザインエディタを使おう
FigmaやStorybookといったデザインエディタを活用することで、デザイン制作の効率が大幅に向上します。

https://www.figma.com/

https://storybook.js.org/

これらのツールを使用すると、デザインが視覚的に可視化されるため、UI/UXの設計に集中する余裕が生まれます。また、最近ではデザインから直接コードを出力できる機能を備えたエディタも増えており、デザインからアプリケーションへの反映がよりスムーズになっています。

### 4. アップデートしやすい技術構成のコツ
#### システム構成はシンプルに！
システム構成をシンプルに保つことは、開発やメンテナンスをスムーズに進めるためにとても大切です。シンプルな構成にすることで、企画やUI/UXにもっと時間をかけることができます。

また、最近ではマネージドサービスやBaaS(Backend as a Service)を活用することで、サーバーの複雑な処理を任せて開発効率を高めることができます。例えば、FirebaseやSupabaseを使うと、データベース、ストレージ、認証といった機能を簡単に実装できます。

https://firebase.google.com/

https://supabase.com/

サーバーを自分で管理する必要が本当にあるのか、一度考えてみてください。クライアント側で、外部サービスのAPIを利用するだけでサービスが開発できるかもしれません。サーバーを用意しないシステム構成（アーキテクチャ）を採用することで、開発スピードが格段に上がります。

#### デプロイ環境を整えよう
デプロイ（作ったアプリやアップデートしたアプリをインターネット上で公開する作業）に時間をかけすぎていませんか？

公開作業が面倒だと、新しい機能を考える時間が減ってしまったり、プログラミングのやる気が下がってしまったりすることがあります。

時間はかかりますが、最初の段階で、GitHubにコードをプッシュするだけで自動的にアプリが公開される環境を整えておくと便利です。（詳しくはCI/CDやGitHub Actionsについて調べてみてください）

https://docs.github.com/ja/actions

Webアプリでは、VercelやCloudflare Pagesといった、とても便利なサービスが増えています。
GitHubにコードをプッシュするだけで自動的にアプリが公開されるので、手間がかからず効率的です。

https://vercel.com/

https://pages.cloudflare.com/

このような便利なツールを使うことで、アプリの公開にかかる時間を大幅に短縮することができます。ぜひ一度お試しください。

#### あえて分離しない設計
ReactやTailwind CSSなどの技術が革命的な理由をご存知ですか？
通常、WebアプリではHTML、CSS、JavaScriptの各ファイルを分けて作成し、それぞれで役割を果たします。

しかし、ReactではHTMLに対して直感的にスクリプトを書くことができ、Tailwind CSSではHTMLに対して直感的にデザインを適用できます。

ReactとTailwind CSSの両方を活用した構成を取ることで、ファイルを分離せずに同じファイル内で複雑な処理やデザインを組み込むことが可能になります。

**複数のファイルをまたがずにスムーズにコードを書くことができるため、コードの変更が容易になり、開発効率が向上します。**

:::note info
コンポーネント（UIの部品）指向の設計においては、適切な粒度でファイルを分割することが重要です。ReactとTailwind CSSを組み合わせる真のメリットは、コンポーネント（UIの部品）ベースでUIを構築しやすく、スタイルの再利用性を高められる点にあります。
:::


これらのポイントを押さえることで、技術構成がアップデートしやすくなり、アプリの改善や新機能の追加がスムーズに行えるようになります。

皆さんもぜひ、これらのコツを活用して、効率的な開発を目指してみましょう。


## さあ、簡単なアプリを作ってみよう！
ここまでの内容を踏まえて、簡単なアプリを作ってみましょう。
まずは身近な友達や部活仲間、家族に使ってもらえるアプリを作ってはいかがでしょうか？
使ってもらうたびにフィードバックをもらうことを忘れないようにしてください。

実際のアプリ開発の流れは以下の記事を参考にするといいでしょう。

https://qiita.com/tags/%e3%82%a2%e3%83%97%e3%83%aa%e9%96%8b%e7%99%ba


## おわりに
ここまで読んでいただきありがとうございました。
少しでもお役に立てれば幸いです。