💬

【個人開発 x iOS】OpenAIを使って、雑談のテーマを生成してくれるアプリ「TopicGen(トピックジェン)」をつくった 💬

2023/02/22に公開

kamimi です。こんにちは。

2月になったと思ったらもう終わりそうです。早すぎる。。
ということで(?)またアプリを作りました。(今まで作ったものはこちら

このリモートワークになってから仕事で雑談をする機会を積極的に設けるようにしていて、こんな感じに雑談会を主催していたりもします。

ただ毎日主催者あるあるの問題なのが、テーマの準備。。
(もはや準備していない、、なんて言えない、、いや即興で話せる力がついたに違いない、、!!)

・・・とここで話は大幅に変わりますが、最近話題の OpenAI で何か作ってみたいという欲も生まれてきました。

こうなったらもうできるのは、雑談テーマ生成しかないですね!なかったんです。私の頭の中には。
というわけで作りました。「TopicGen(トピックジェン)」といいます。

ちなみに今までは知り合いの方に教えてもらった、雑談マンというテーマジェネレータを使っていました。とても便利でよく使っています。
ただもうちょっとシチュエーションを限定的にしたいなと思ったので、OpenAI を使って実現してみようとなったわけです。

こんな機能

いつ、どこで、だれと話すシチュエーションなのかを入力すると、それに合ったテーマを生成します。

https://twitter.com/kamimi_01/status/1628153171448307712?s=20

動画を見れば一目瞭然の機能ですね!笑
アイコン、もうちょっと生成してる感出したかったけど、、Canva の無料プランと私のデザインセンスに限界を感じました・・・🙃

インストール方法

App Storeのリンクはこちらです。

https://apps.apple.com/jp/app/topicgen/id1673161138?l=ja

制作過程

リリースまでは多分6,7時間くらいですかね。
いつも思うのですが、コード書き終わってから審査に出すまでがやはり時間かかりますね。。😇

使用した技術

  • Swift
  • SwftUI

ライブラリは

  • Lottie
  • AppInfoList
    • 自作ライブラリです!使えるの嬉しい!そして楽・・・

実装

前述で匂わせてきた通り、OpenAI API を使用しています。
使用するのは初めてだったので、ドキュメントを読んで Usage Limit の設定なんかもしました。

ドキュメントを読むのが一番だとは思うのですが、自分のためにスクラップを作ったりもしました。

https://zenn.dev/kamimi01/scraps/7ac672ecc098dc

事前に何回かリクエストをしてみて、リクエストパラメータを調整してみた結果、こんな感じになりました。

'https://api.openai.com/v1/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API Key>' \
--data-raw '{
  "model": "text-davinci-003",
  "prompt": "<聞きたいこと>",
  "temperature": 0.8,
  "max_tokens": 200,
  "top_p": 1.0,
  "frequency_penalty": 0.0,
  "presence_penalty": 1.0
}'

もうこれをアプリからリクエストするだけでいいなんてすごい時代がきた、、と思います。

コアな機能はもうこれだけで終わりなので、私はアプリの UI デザインやちょっとした使い勝手を良くしていくことに集中できました。

審査

一度リジェクトされました。

訳あって(※この章の最後に記載)レビューの詳細が確認できなくなってしまったので、詳細なメッセージは載せられないのですが、
一言で言うと、ちょうど OpenAI がダウンしている時間帯にレビューが行われてしまい、Internal Server Errorになって動いておらず、リジェクトされました。

そのメッセージがきた約2時間後には OpenAI が復活したので、メッセージを返しそのまま approve をもらいました。

今回のように外部サービスに完全に依存していると、そのサービスが落ちた時にアプリ側の価値がゼロになってしまうのはなんとかしたいなあと思いました。
返答が遅いモデルを使っていることもあって、OpenAI からのレスポンスも早くないので、何か対策を考えたいなと思ってはいます。

レビューの詳細が確認できなくなってしまった訳

一度リジェクトされた時点から、App Store ConnectのApp情報の名前を変更したためです。
ここが変更されると元の名前に紐づいていたアプリの情報は見れなくなってしまうようですね。。もし確認する方法をご存知の方がいれば教えてください・・・🥲

このスクショの「iOS App」の「1.1」の下には「1.0」がいたのです・・・

ちなみになぜ変更したのかというと、App Store Connectにバイナリをアップロードした時点では、まだアプリ名が決まっておらず、仮の名前をつけていたのです。
その後アプリ名を決め、プロジェクト側のDisplay Nameは変えましたが、App Store Connectの方は変えるのを忘れたまま、審査に出してしまい、審査でもそのチェックが抜けてapprove されてしまいました。
その結果、App Store に出ているアプリ名とインストール後にアイコン下に表示されるアプリ名が異なるという自体になってしまいました。

前回別のアプリを審査に出した際も、App Store Connect側を変更するのを忘れてしまっていたのですが、その時はレビュー時に指摘されそれが原因でリジェクトとなりました。
今回もまた私が直さないままアプリを提出し、レビューでのチェックも抜けた結果、こういう自体になりました。。

自分でおかしいことに気づいてApp Store Connect側を修正し、再度レビューに出して、無事正常な状態で1.1が公開されたという訳です。

まあ正直最新リリースバージョンの情報さえ見れれば問題ないのですけど、残っててくれたら嬉しいなと思った次第でした。。Apple さん・・・

おわりに

OpenAI API を作ったアプリ一度は作ってみたかったので、入門するには簡単で始めやすい題材だったなと思います。

ただ OpenAI API に毎度リクエストするのだとレスポンスが遅いと感じるので、リクエストパラメータを調整してもっと早いモデルを使うとか(その方が安いし)、アプリ側で取得した結果データを保存して見れるようにしておくとか、そういう工夫をしたいなと思っています。

でもとりあえず、「状況に合った雑談テーマを生成する」と「OpenAI API を使ってみる」という2つの大目的が達成できたので満足しました。
今日から社内の雑談会前に使おうと思います。

みなさんもテーマを用意して、本題の前の場を温めてみませんか?😊

Discussion