SwiftUIを始めて3ヶ月でApp Storeにリリースしたお話

11 min read読了の目安(約10300字

はじめに

最近、IsTalkというLINEトークを分析して可視化するアプリをリリースしました。

私は日本語の自然言語処理エンジニア(8年目)×Pythonエンジニア(5年目)でして、開発エンジニアとして働き始めてから9年もの間、バックエンドエンジニアとして生きてきましたので、こうして自分が開発したものが人の目に直接触れるようなことになるとはつい最近まで想像できませんでした。

今回、このIsTalkを開発した経緯と、アプリリリースまでの道のりを記事としてまとめましたので、App Storeにアプリを出したいと考えている方の参考になれば幸いに思います。

https://apps.apple.com/jp/app/istalk/id1555905116

これまでどのようなことをやってきた人間なのか

私は、25歳の時に自然言語処理エンジニアとして独立・法人化し、ロボット会話の開発や研究開発などに注力していました。

25歳になるまでは、SEとして会社勤めをしておりました。
(※VBAやPerlなどがまずまず書けるプログラマーでしたw)

給与的にも将来的にも健康的にも不安になった私は、3年でSEの会社を辞め、父の知り合いのエンジニア派遣会社を紹介してもらい、こちらの会社の派遣先が自然言語処理という技術で人工知能を作っているということで、ご縁あってそちらで働かせていただくことになり、会社員として半年程度お仕事をさせていただいた後、独立の話を派遣元の社長に相談しました。

独立した直後は、プログラムを書くことがメインではあったのですが、実はバーテンダーをやったり、定期的にイベントを開いたりして人脈作りにも勤しんでおりました。その時の派遣先の社長から、「君はエンジニアの気質ではないね」とよく言われていたのを思い出します。
当時は、自然言語処理の技術本や論文を読んでは開発・実験を繰り返し、会話の本質を探りながら会話チャットボットを作っていました。

2014年になり、Word2Vecという技術が出始めてから間も無く、Google DeepMind社が出したAlphaGoをきっかけにAIという技術が巷で騒がれ始めます。
既に、自然言語処理だけで何か世の中に面白いものを出すというのは限界が来ていましたので、AlphaGoDeepQLearningという技術は革新的に感じました。

それから、会話チャットボット開発の他にも広告代理店でビッグデータを分析するお仕事や、世の中のあらゆるリアルタイムの情報から独自のコーパスを作るといったお仕事、また、SNSのデータをAIを用いてユーザの特徴を分析したりと、様々な経験を積み、現在は、昨今賑わいを見せている自然言語処理のAIモデルBERTを使ってAIを作ることが中心となり、自然言語処理AIエンジニアという形で幅広く活動しています。

なぜこのアプリを作ったのか

自然言語処理やAIという技術は、私がこの技術に携わって以来、年々成長しています。

2017年にGoogleが発表したBERTを機に、TransformerというモデルがベースとなったAIモデルが次々に発表されています。このモデルは並列処理計算を可能とし、これまでのニューラルネットワークよりも高速・高精度に処理できるようになったのです。

以前までは、自然言語処理の技術のみでプロダクトを作ることは新鮮味やインパクトがないという理由で難しく、AIのモデルは処理が重いという問題を抱えていました。しかし、そのような時代は既に終わり、今や、自然言語処理はAIと掛け合わせることでプロダクト化するのに十分な技術レベルだ、と思うようになりました。

そこで、まずは何か形にして、自然言語処理という技術を知ってもらおうと模索し始めたのが2020年末のことです。

得意分野としては言語処理、AI、ビッグデータだなと思っていました。他社がまだやっていないことで、普段の生活の中の生きる情報から、まず何が気軽にサービスとして使ってもらえるだろうか、と考えていると、LINEのトークが浮かびました。
LINEならトーク履歴を送信できる機能がある。特に、若い世代は日常的に使っているものだし、ビッグデータとしての量も十分だろう。自分の得意の言語処理も活かせる。また、LINEのトークを相性分析みたいな感じで可視化させてみたら面白いかもしれない、というようなことを考えていました。

もし、LINE分析アプリを作れば、多くの若い世代の子達が注目してくれるのではないか。
SNSあっての今、若い世代の子達の凄まじい影響力で、アプリを面白いと思ってもらって注目されれば、この技術がオープンになっていき、自然言語処理を世の中に必要な価値として捉えてもらえる可能性も広がるのではないか。そうすれば、自然言語処理とAIを技術的に説明できるチャンスも広がる。将来的に多くの新しい雇用を生むきっかけとなるアプリに成長する可能性が十分にある。

そんな想像を膨らませながら、LINEトーク分析のアプリを開発することを決意しました。

IsTalkの誕生

アプリを作るにしても、自分はPythonエンジニアで、今から新しいプログラミング言語を習得して、尚且つ、リリースするなど、一体いつになるんやらと考えていました。一体どうしたら良いものかと深く考えて悩むよりも、まずは行動してみる性格なので、なんとなくSwiftUIの入門本をKindleで購入したのが2020年12月末のことになります。

本で基礎的なことを学び、2021年1月になってからは、SwiftUIでサンプルプログラムを動かしたり、APIサーバとの連携アプリ、音声認識のアプリを作ったりと少しずつ物作りをはじめ、2021年2月の中旬ごろからIsTalkの実装に踏み入りました。

作業時間ですが、普段平日は別の仕事があるため、仕事終わりと休日を使って実装していました。(※空き時間があれば、ひたすらSwiftUIを書いていました。)

また、2021年3月までにはリリースしたいと考えていたので、今の知識では1ヶ月でリリースは間に合わない!と思い、ココナラというサイトでメンターを探し、常に相談できる体制を作って進めました。

こうした1ヶ月の集中的な動きで、SwiftUIに触れて3ヶ月でLINE分析アプリIsTalkが生まれたのでした。

※ちなみに、IsTalkとは Analyze Talk = アナライズトーク(=トークの分析)の略の「イズトーク」が名前の由来となります。

アプリリリースまでの道のり

2021年2月中旬からIsTalkの開発が始まったわけですが、当然、思い通りに動いてくれないのがプログラミングというものです。新しい言語であれば、尚更です。
しかも、不安はさらに募ります。実装が終わったところで、そもそもLINEのデータって個人情報だし、IsTalkを作っても世の中に出せるのか(Appleの審査は果たして通るのだろうか)。ここから本当の戦いが始まります。

どんな感じで進めたか

サーバに接続して分析するということは、個人情報保護の観点から適切ではないということと、Appleの公式サイトを見てもユーザのプライバシー保護の観点から審査には受からないだろうと思っていたので、オフライン分析を行うことを決めました。オフライン分析を行うために開発言語として決めたのは、もちろん、SwiftUIです。

SwiftUIにはViewというものがあり、デバッグしてみると若干特殊な動きになっています。例えていうなら、HTMLの中にPHPを埋め込むような感覚だと思うのですが、フロント側のプログラム経験が皆無な私は、このViewの動きに慣れるまで苦労しました。

また、SwiftUIは2019年にAppleが発表したばかりということもあり、2021年3月現在、SwiftUIの情報がそこまで多いわけではありません。とは言え、Swift言語やUIkitの記事なら多く存在するので、最悪SwiftUIで書かなくても良いか、と思いながら開発していました。外国人エンジニアのQAサイトやYoutubeを見て問題を解決したりすることも多かったです。Twitterでの情報収集も毎日欠かさずやっていました。
メンターさんにも度々相談し、完璧とは程遠い、微々たる理解でモノを作ることを優先して突っ走ったという感じです。

Apple Developer Programへの参加

登録費用99米ドル(日本円で約12000円)を支払い、Appleディベロッパーの登録を行います。
また、2021年3月現在、App Store Small Business Programというものがあり、こちらは有料のAppおよびApp内課金の手数料率が15%に引き下げられる制度となっています。
行く行くはアプリ内課金を導入しようと思っていたので、一応登録はしておくことにしました。

https://developer.apple.com/jp/
https://developer.apple.com/jp/app-store/small-business-program/

TestFlightでのテスト

いよいよテスト段階となります。
TestFlightに審査を出してみると・・・

なんと一発合格!

ここは、Appleの本審査よりハードルはかなり低く、人手によるチェックは行われていない模様です。TestFlightを使うと、テストしてもらいたい人にパブリックリンクを共有することができます。メールアドレスの招待なども可能です。大体30人くらいの人にテストをしてもらい、感想をいただきました。

TestFlight審査にかかる時間ですが、初回と2回目の審査は6時間程度、その後はTestFlightに審査を出せば出すほどチェックが早くなってくる印象でした。リリース後は、アップロードと同時くらいに審査が終わります。(果たしてそれは審査と呼べるのかw)

Google Admobへの登録、アプリとのリンク

広告をつけて収益化を行うための準備です。

https://admob.google.com/intl/ja/home/
ところが、セットアップしようと思ったらできません。ヘルプセンターを調べてみると、こんな表記が。

どうやら新しい審査・承認プロセスが追加されたようです。このタイミングでかと嘆く他ありません。

承認は思ったよりも早く、1日くらいで通りました。この後は、アプリに広告を埋め込むViewを実装し、アプリとのリンクになるのですが、こちらは、2021年3月23日現在、App Storeにアプリが公開された後、Google Admobのデータベースにアプリが登録されリンクができるようになるまで少なくとも2週間程度かかるという噂です。IsTalkを公開してから5日経ちますが、やはり検索してもアプリは出てきません。気長に待つしかないようですね。

Appleの本審査

さて、いよいよ本番審査です。私が食らったリジェクト3つについて攻略方法を公開致しますので、ご参考になれば幸いです。また、本番審査は基本的には1日1回しかチャンスがないので、慎重に行う必要があります。

  • スクリーンショットの作成
    こちらは2021年3月現在、6.5インチディスプレイ(1242×2688)、5.5インチディスプレイ(1242×2208)、12.9インチディスプレイ(2048×2732)でサイズをそれぞれ準備しておく必要があります。また、スクリーンショットに載せるスマホはそれぞれ対応端末でなければならないようです。

例えば、12.9ディスプレイのスクリーンショットの中に5.5インチディスプレイのiPhoneの画像を載せるということはNGで、iPadの画像を載せてスクリーンショットを作成する必要があります。ここで違反した場合、「2.3 Performance Accurate MetaData」という理由でリジェクトを食らうことになります。こちらは、再ビルドを行う必要はなく、そのまま問題解決センターのメッセージに返信すれば、深夜過ぎ頃から再レビューしてくれます。

Guideline 2.3.3 - Performance - Accurate Metadata

We noticed that your screenshots do not sufficiently show your app in use.
Specifically, your 12.9-inch iPad Pro and 12.9-inch iPad Pro (3rd Generation) screenshots show an iPhone device frame.

To help users understand your app’s functionality and value, your screenshots should highlight your app's core concept. 
For example, a gaming app should feature screenshots that capture actual gameplay within the app.

Next Steps

Please revise your screenshots to ensure that they accurately reflect the app in use on the supported devices.

(〜中略〜)

Bug Fix Submissions

If this is a bug fix submission and you'd like to have it approved at this time, reply to this message in Resolution Center to let us know. You do not need to resubmit your app for us to proceed.

Alternatively, if you'd like to resolve these issues now, please feel free to resubmit. Let us know if you have any questions about the issues we found in our review.

You may appeal your app rejection if you believe this decision was made incorrectly. We also invite you to provide feedback on our review guidelines.


12.9インチディスプレイ(2048×2732)にiPhoneの画像を載せてはいけない模様です

  • 相性占いやマッチングアプリは本番審査に通らない(?)
    2021年3月現在、相性占いアプリや出会い系のアプリが飽和状態となっており、審査がかなり厳しい状態になっています。これからマッチングアプリを作ったとしても、それを世の中に出すことは極めて困難ということになります。
    すなわち、マッチングアプリ業界でのペアーズやタップルは、自動車業界で言えば、トヨタ、ホンダということになります。

IsTalkはトークの相性占いアプリとしてリリースしたかったのですが、この問題が大きな壁として立ちはだかることになります。

これはあくまで私の推測なのですが、キーワード、プロモーションテキスト、概要、スクリーンショットのテキスト(OCR判定されている?)などでアプリ種別を判定している可能性が高く、「占い」のようなキーワードが入っていると、以下のように、「4.3.3 Design Spam」という理由でリジェクトを食らいます。

このリジェクトを食らってしまった場合は、アプリで使用している占い関係に共起性の高いワードの全除去、及び、プロモーションテキスト、概要、キーワードなどに含まれる「占い」に関係するワードは全て削除しておいた方が無難です。実質のアプリ種別の転換をしろという非常に厳しいお知らせです。

文言の修正を余儀なくされた私は、結果的に、LINEトーク相性占いアプリではなく、LINEトーク分析アプリという少しお堅めな形で着地しました。

Guideline 4.3 - Design - Spam

Your app primarily features astrology, horoscopes, palm reading, fortune telling or zodiac reports. 
As such, it duplicates the content and functionality of many other similar apps currently available 
on the App Store.

While these app features may be useful, informative or entertaining, 
we simply have enough of these types of apps on the App Store, and they are considered a form of spam.

Next Steps

We encourage you to review your app concept and incorporate different content and features 
that are in compliance with the App Store Review Guidelines.
  • App Reviewに関する情報の記載ルール
    審査に関してもう一つ重要なのは、どのようなアプリなのかを説明した動画を作成しておくことです。 これがないと審査に通らないようです。
    具体的には、デモンストレーションの動画を実機で撮って作成し、Youtubeなどにアップロードして動画URLを載せておく必要があります。ここで、URLが記載されていなかったり場合は、以下のように、「2.1 Information Needed」という理由でリジェクトを食らいます。こちらは、再ビルドを行う必要はなく、そのまま問題解決センターのメッセージに返信すれば、深夜過ぎ頃から再レビューしてくれます。
Guideline 2.1 - Information Needed
We're looking forward to completing our review of
your app. Before we can continue, we need a video
that demonstrates the current version in use on a
physical iOS device.

Keep these requirements in mind as you make your
demo video:

- Only use footage of your app running on a physical
iOS device, not on a simulator.
- Make sure the video clearly documents all relevant
app features, services, and user permission
requests.
- You can use a screen recorder to capture footage
of your app in use.

4.3. Design Spam、 2.1 Information Needed、 2.3.3 Performanceをなんとかクリアし、
2021年3月18日に晴れてアプリをリリースすることができたのでした。

今後の課題

LINEトークでは、相手の行動や気持ちの変化などをロジカル的に検出することもできると考えています。例えば、恋愛をしていれば、「最近、彼/彼女のレスポンス遅くなっている・・・」と感じることがあるかもしれません。これを時系列でグラフィカルに分析することで、いつ何がどういった理由でそう思わせているのかという理由を可視化させ、「なんとなく」ではなく、「根拠」として確認することができます。
特に、相手のことを好きになればなるほど、その相手の返信のレスポンスや内容が気になるものです。周りが見えなくなってしまった時にこそ、IsTalkを使って自分の気持ちのコントロールができるサポートの機能を用意したいと考えております。

さらに、これはサーバとの連携が必要なため、同意いただけるユーザ限定となりますが、私が開発しているAIエージェントとのサーバ連携を加えることで、自分や他人ですら気付くことができないエリアの自己/客観分析ができるとも確信しております。

おわりに

最後まで見ていただき、ありがとうございました。

私自身、Appleの本審査はリジェクトを4回も食らい、特に 4.3.3 Design Spamに関しては、調べても調べても解決方法が分からず、メンターさんはじめ、Twitterで最近アプリをリリースした方の知恵をお借りしたり、600個アプリをリリースしてきたという超人の方に相談もしました。皆さんのお力がなければ能力的にもメンタル的にも、リリースはかなり厳しかったと思います。

Appleの本審査は非常に厳しいです。アプリが完成したとしても、このAppleの審査に挫折してApp Storeに出せなかったものも多いだろうと感じました。しかし、だからこそ品質が保たれていて、健全なアプリが多いのではないかとも思います。

リジェクトを受けると精神的にもかなりやられますが、とにかく諦めず、気合いでなんとか頑張るしかありません。Appleの審査でリジェクトされた場合、英語でアピールもできるので、
 「そのアプリが世の中になぜ必要なのか」
を英語でうまく伝えられる人は有利かもしれません。

この記事で、多くの興味深いアプリを世の中に配信するためのアシストになることを期待し、終わりの挨拶とさせていただきます。