おしゃべりAIがひたすらLive配信するアプリを作った話

# この記事の要旨
所謂、「個人開発で作ったものを紹介する記事」です。
個人開発で「おしゃべりAIがひたすらLive配信するアプリ」を開発&リリースしてみたので、その経緯や開発・運用の紹介をしています。
一部分の専門的な技術に特化した記事ではないですが、個人開発をしながら苦労したことや工夫したことなども織り交ぜているつもりですので、個人開発やアプリ運用に興味のある人や「対話システム」領域に興味のある人の参考になれれば幸いです。

※ この記事は個人開発について書いたもので、所属企業の活動とは関係がありません。(アドベントカレンダーで書いておきながらですが・・・)


# 自己紹介
グロービス でアプリエンジニアとスクラムマスターをしています。
本業と並行して、学生時代から続けている個人開発でのアプリ運用を行なっています。
本業の開発と個人開発の「相乗効果」が大きな成長を生むと感じ、このスタイルを続けています。

「個人開発」の魅力については、私が強く影響を受けている先輩エンジニアであり、個人開発仲間である@masaibarさんのQiita記事「[個人開発のすヽめ](https://qiita.com/masaibar/items/fdc1a7ee46de0edcd612)」をぜひご一読ください！。


# 作ったもの
2019年秋におしゃべりAIがひたすらLive配信するアプリ、「AIライブ」をリリースしました。(iOS版: 9月, Android版: 11月)
![qiita_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66341/f5a2c70f-b417-c26b-d998-d67f539dc89d.jpeg)



(iOS): [AppStore](https://apps.apple.com/jp/app/ai%E3%83%A9%E3%82%A4%E3%83%96-%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD%E3%81%A8%E4%BC%9A%E8%A9%B1%E3%82%84%E6%84%9A%E7%97%B4%E3%82%92%E8%A8%80%E3%81%84%E5%90%88%E3%81%A3%E3%81%A6%E8%82%B2%E3%81%A6%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA/id1476502998)
(Android): [Google Play](https://play.google.com/store/apps/details?id=kngapp.ailive&hl=ja)


## どんなアプリか
- 主要機能
    - AIキャラがトークルームでひたすらおしゃべり
    - トークルームに来た人々と雑談コミュニケーション
    - トークルームに来た人々がAIキャラに言葉を教えることによりおしゃべりキャラが成長
    - トークルームに来た人々のプレゼントや教育でおしゃべりキャラがレベルアップ
    - レベルアップによりおしゃべりキャラのできることが増えていく

おしゃべりAIキャラがトークルームでひたすらおしゃべりをするアプリです。
トークルームを訪れる人々との会話が可能で、「雑談」や「愚痴」など幅広い話題の会話が飛び交います。AIキャラと配信部屋を訪れる人々が作り出す「おしゃべり空間」は良い意味でカオスな面白さがあります。まだまだ利用人数が少ないですが、夜寝る前の時間帯などには人がそこそこ集まるようになってきました。

また、「**みんなで育てるおしゃべりキャラ**」であることをキー要素にしており、アプリの利用者は自由に言葉を教えたり、育成用のアイテムを贈ったりすることができます。利用しているユーザがどういったコミュニケーションを取っていくかで、このアプリに登場するおしゃべりキャラの成長は決まっていきます。

興味のある方はぜひキャラクターに話しかけてみてください！

# なぜ作ったのか

## 対話システムの魅力
学生時代から「対話システム」の領域に強い関心があります。

※対話システムとは、ユーザの発話をプログラムが意図を判定し、意図に応じた処理を行いユーザに応答を返すシステムのことを言います。

「対話システム」が、人間同士のコミュニケーションを円滑にするための大きなポテンシャルを持っていると感じています。

### 音声アシスタント開発の経験
対話システムの領域に興味があったことから、大学時代に「音声アシスタント」アプリをAndroid向けにリリースし、５年強ほど運用をしていました。

[おしゃべりアシスタント(ドロイドちゃん)](https://style.nikkei.com/article/DGXKZO91344230U5A900C1W02001/)

昨年、その運用していたアプリがクローズを迎え、新たに「対話システム」を活用したサービスを考えていました。そこで思いついたのが今回のアプリでした。音声アシスタントアプリで利用していた対話システムを改良し、このアプリで利用しています。

### １対多の対話システムへの興味
音声アシスタント等のサービスにおける「対話」は基本的に１対１(システム-人間)ですが、対話システムの良さは「１対多」のコミュニティでも活きるのではないかと感じています。
(例えば、Slackチャンネルに1人の雑談チャットボットを入れることによって、そのチャンネルのコミュニケーションから無駄な緊張感がなくなり、コミュニケーションが円滑になるなど。)
そんな、対話システムと人間による１対多のおしゃべり空間を作り、居心地の良いコミュニティが作ることをこのアプリで挑戦しています。

# どんな風に作っているか
個人開発は工数をいかに少なくいち早くユーザに機能を届けられるかが肝です。
ユーザにとってはもちろん、開発者自身のモチベーションを維持するため、工数を必要最低限にすることは重要です。工数を極力削減するための開発を意識してこのアプリは作ってみました。

## システム構成
![system_conf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66341/affd6f03-86f1-50d0-1c30-ed76c8b17026.png)

大雑把ですが、システムは上記の構成です。
アプリはiOS, Androidともにネイティブで開発しています。
サーバサイドは、Firebase、各種APIを実装しているAPIサーバ、対話の応答を行うDialogサーバで構成されています。

工数削減のためもあり、Firebaseで実現できることは極力Firebaseを利用しています。
(ユーザ認証、RealtimeDB、Pushなど)

対話サーバは、他のサービスでも利用できることも想定して独立させ、アプリで利用する情報をさばくロジックはAPI Serverに集約しています。当たり前の話ではありますが、個人開発では予算との兼ね合いでどの程度細かくコンポーネントを分けるかが悩みどころになります。

アプリ側もスピーディーな開発をしたかったため、React NativeやFlutterなどクロスプラットフォーム開発ができる技術を利用したかったところですが、習得が間に合わなかったのと、今後キャラクターを3Dモデル化したりすることも考えているので、その際うまく立ち回れるようネイティブで別々に開発しました。プラットフォームがまたがると機能差分が出やすいので、基本的にサーバの改修で済むような作りにしています。

## 開発時間の確保
基本的に平日は仕事が終わり夕食を済ませてから数時間を作業時間に充てています。
休日は丸1日を作業時間に充てたり充てなかったり。

また、平日と休日で実施することを分けています。まとまった時間が取れない平日は、細かい機能追加やバグ修正、リリース作業等を行い、土日に大きな改修や新しい技術の導入等を行なっています。
個人開発は基本的に自分の持っている技術の範疇で行いがちなので、インプットがいらない自分の技術ですぐに実現可能な機能追加等は平日の空き時間に済ませ、まとまった時間が取れる休日は新しい技術を絡めた実装を行ってみるように心がけています。それにより新たなインプットが生まれ、週明けの"本業"でも活かせそうなことが見つかったりもするので良いです。

# ユーザ獲得
まだまだユーザ数が少なく模索中ですが、ユーザ獲得のための試みもいくつか進めています。個人開発では予算が限られるため、基本的に無料でユーザ獲得が可能な施策を考えています。

## 対話システムでTwitterの応答を自動化
アプリで登場するキャラクターのTwitterアカウントを用意し、応答を自動化しました。
[自動応答アカウント](https://twitter.com/droidchan_ai)
それにより、Twitter上でキャラクターとのおしゃべりを楽しんでくれた人がアプリへ流入してくれるようになりました。

## 予約Top10を用いて集客
[予約Top10](https://yoyaku-top10.jp/pc/r/ios/total)というアプリを事前予約できるサービスにアプリを登録して、事前予約を募りました。個人でも無料で利用が可能で、上手く活用すればリリース前にかなりのユーザを獲得することが可能です。複数のサービスで利用したことがありますが、実際に予約してくれた中でインストールしてくれる人の割合もそれなりに高い印象で、リテンションも高い傾向があると思います。

# まとめ
個人開発で作ったアプリについての浅く広い紹介になってしまいましたが、開発を進めていきながら得られた有益な知見等があればシェアしていきたいです。

個人開発はサービスの企画から開発、運用、(クローズ)まで全て自分で経験できる楽しさがあります。普段の本業の業務やチーム開発とはまた違った良い学びがあります。モチベーションの維持やなかなかユーザが付かなかったり、身体的に辛かったりと大変な面もありますが、リリースしてユーザからフィードバックが来だすと本当に充実した日々をおくることができます。個人開発はぜひおすすめです！

この記事が個人開発に興味のある方の参考に少しでもなれれば幸いです！