NLPを個人開発アプリに導入して、生活記録の自動分析を実装した方法

## **はじめに**

自分が作っている個人開発アプリに、
**「せっかくなら最新のAI技術を取り入れたい」** と思ったりしたことはないですか？
私は、自分でローカルで動かせるような（外部APIを使わずに）機能を作ってみたいと思っていました。
→学習の一環として基礎的なことを身につけるためでもあります。


本記事では、もともとは「カテゴリー」という概念のなかった生活記録アプリに対し、自作の分析APIを通じてNLP（自然言語処理）を活用し、**自動分析機能を実装した事例** をご紹介します。

最初は小さな機能からスタートし、徐々に拡張していくアプローチで行ったので、
NLPを個人開発アプリで実装していったプロセスも解説しようと思います。

---

## **開発の背景とアプローチ**

### **導入前の課題**
- 生活記録は単なる「タイトル」や「詳細」を入力するだけで、分類の概念が存在しませんでした。
- 記録が増えるにつれ、傾向やパターンを振り返って把握することが困難だと感じていました。
- 記録が『ただのデータ蓄積』に留まらず、『実用的な分析』に繋がる仕組みを導入したいと考えました。

---

### **NLPを導入した理由**
1. **せっかく実装するならAIを使いたい**  
   NLPを活用することで、記録データを自動で分類・分析する仕組みを実現。
2. **シンプルな機能からスタート**  
   最初は「タイトル」と「詳細」を基にカテゴリを割り当てる簡単な分析機能を実装し、将来的な拡張を見据えました。[当個人開発の開発記録はこちら](https://qiita.com/kaminuma/items/3209ffbd8356c746e3cc)
3. **応用範囲の広さ**  
   NLPを使えば、将来的に感情分析や傾向予測など、さらなる機能追加のアイデアを出しやすくなると思っていました。

---

## **アーキテクチャとシステム構成**

このプロジェクトは以下の3つの主要コンポーネントで構成されています。

1. **フロントエンド**: ユーザーがデータを入力し、分析結果を確認するVue.jsベースのインターフェース。
2. **バックエンド**: Spring Bootを使用してAPIリクエストを処理。
3. **分析API**: Flask + NLPモデルでデータを分析。

---

![カテゴリ分析.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233529/3f8369f1-9b9e-907d-093f-98d6526803fe.png)



### **1. 活動記録の登録・更新・削除フロー**

以下は、ユーザーが活動記録をデータベースに登録・更新・削除する際のフローです。

![登録更新削除.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233529/27846fe1-ca2e-752a-fc83-c1ec9f020511.png)

#### **フロー説明**
- **登録 (POST)**: 活動記録をデータベースに保存。
- **更新 (PUT)**: 既存の記録を編集。
- **削除 (DELETE)**: 指定した記録を削除。

---

### **2. 分析フロー**

以下は、NLPを用いた分析APIのフローです。

![分析.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233529/508a80e0-f6f4-60bf-6d07-f34d6c1a3381.png)


#### **フロー説明**
1. フロントエンドから分析期間を指定したリクエストを送信。
2. バックエンドが分析APIにリクエストを送信。
3. 分析APIがデータベースから活動記録を取得し、NLPでカテゴリ分類を実施。
4. 分析結果をフロントエンドに返却。

---

## **NLPモデルの選定と実装**

### **ステップ1: モデルの選定**
- **最初に試したモデル**: `facebook/bart-large-mnli`  
  - **特徴**: 英語での高精度な分類が可能。  
  - **課題**: 日本語対応が弱く、日本語データの分類には**翻訳を挟む必要があったため、効率的ではなかった** 。  

- **選定したモデル**: `xlm-roberta-base`  
  - **特徴**: 軽量で多言語対応が可能。日本語のデータにも十分な精度を発揮。  
  - **利点**:
    - サーバー負荷を軽減。
    - 翻訳を必要とせず、日本語データを直接解析可能なモデルとして選定。

---

### **ステップ2: 初期機能の実装**
- 「タイトル」と「詳細」を基にしたカテゴリ分類を実装。
- 分析結果はドーナツグラフで可視化し、活動別の傾向を分かりやすく表示。

---

### **ステップ3: 拡張の計画（考えるだけで楽しい）**
1. 月間の傾向分析（過去の一週間と、今週のデータ比較などの複雑な期間分析）。
2. 感情分析や傾向予測を導入し、さらに高度な分析を実現。
3. スマートウォッチなどのウェアラブルデータを用いた、より実用性の高い機能の追加

---

## **導入後の成果**

1. **データ管理が簡単に**  
   - UIからボタンを押すだけで分析結果が返ってくるようになり、振り返りが効率的に行えるようになりました（従来のカレンダー形式は視覚的にわかりやすい反面、振り返りの効率には限界がありました）。

2. **傾向の可視化**  
   - 指定期間のカテゴリごとの合計時間をグラフで表示。
   - カレンダー形式で入力された記録と連携して、期間指定のデータ一覧が表示可能。

3. **システムの拡張性**  
   - NLPモデルの柔軟な入れ替えが可能な設計。
   - 新たな分析機能を容易に追加できるアーキテクチャ。

---

## **NLPを導入してみて感じたポイント**

1. **シンプルなところから始めるのが安心**  
   - 私自身、初めてのNLP実装で「カテゴリ分類」というシンプルな機能から始めました。小さく始めると成功体験を得やすく、次のステップにも自信を持って進めるのかなと思いました。

2. **既存のモデルがとても便利**  
   - 自分でゼロから作るのは敷居が高いので、Hugging Faceの事前学習済みモデルを活用しました。おかげで時間を大幅に節約でき、すぐに結果を確認できました。  
   また、外部APIを利用せずに自前で実装してみたのは、**コストの削減** や応答速度の確認、そして仕組みをざっくりでもいいので学びたかったから。自分で環境を用意することで、APIに依存せず自由にカスタマイズができるという今後のメリットも感じました。

3. **思った以上に応用の幅が広い**  
   - 最初は「カテゴリ分類」だけを考えていましたが、仕組みを理解すると『感情分析』や『テキスト要約』など、他にもやりたいことが次々と浮かびました。小さな機能から始めたことで、実現可能性が見え、より多くのアイデアを具体化してみようと思うようになりました。」

---

NLPの導入はとても難しそうな印象がありましたが、実際にやってみると「少しずつ試す」ことで着実に進められることがわかりました！スモールステップで今後も行っていきたいと思います。


## **まとめ**

本プロジェクトでは、NLPを用いて生活記録をカテゴリ別に自動分類し、分析結果を可視化する仕組みを実装しました。  
個人的にここまでを振り返って非常に重要だったと思っているのは再度になってしまいますが、

**「小さく始めて拡張する」** アプローチを採用したことだとおもっています。
これにより、無理なくNLPを個人開発のアプリに統合することができました。
「NLPを導入してみたい」と考えている方にとって、本記事が参考になれば幸いです！