2018.4.24
キモヲタだけど、女子高生と会話したい!#10【React native - kotlin??】
ということで、今回のアプリ制作の中で最も重要な部分である
React Nativeとネイティブコードの連結をやってみたいと思います。
この技術を取得できれば
最悪の場合どんな機能も実装はできるようになるということを意味します。ライブラリがなかった場合ですね。
まぁ、僕の技術レベルではどうしようもなくなったら、最悪ネイティブで実装すればお望みのものはてにはいります。あとつまづきそうなとこといえば、音声合成のSDKの組み込みぐらいで後はAPIと通信すればいいだけの話なので。
とりあえず調べてみたところ、解釈としてはjavaやktファイルをインポートするのではなく、直接APIを叩くようなラッパークラスを作る、みたいな流れになりそうですね。
現時点で危惧してるのは、ユーザーパーミッションの手動確認のライブラリをどうやってインポートするんだろうなってとこですかね。同じようにAndroidManifest.xmlに書き加えればいいだけなんですかね?
とりあえず
ここを参考にして実装してみましょう。
ただし、私が書いてるのはkotlinファイルなので
このページも参考にします。完全に英語で書かれてますけど、日本語文献が見つからないので仕方ありません。javaのままで実装したかったんですけど、kotlinに変換しないとandroidStudioがエラー吐くんだもん・・・・・・。
まず最初に、呼び出したいjavaファイルのモジュールを作る感じみたいですね。僕の場合はkotlinですね。たぶんAndroidStudioでは編集できなさそうなので、Netbeansで書くことになりそうなので、kotlin用のプラグインをダウンロードしてみます。日本語対応してなさそうだなぁ・・・・・・笑
とりあえずプロジェクトを開くと、stack-overflowエラーが吐き出されます。これはダメなやつですね。
React-native用のIDEを探してダウンロードすることにします。どっかしらにあるでしょ。と思ったらDecoとかありました
が、Mac用じゃねえかクソボケ
Windowsでいい感じにできないか探しましたが、見つからなかったので仕方なくMacで開発することにしましょうかね・・・・・・。
こういうとき、Mac滅んでくれねえかなとか思っちゃうんだよね
まず、そもそもの準備として導入したライブラリと権限を書き加えなくてはいけませんね。
で、しばらく挑戦してみたんですが
どうもヤバそうなニオイがプンプンする。
そこで僕は
フレームワークを諦めるという選択肢をとることにしました。
今回やることの本質はアプリを作ることではなく、
女子高生人工知能と対話できるようにすることです。
そのついでにアプリが作れればコスパいいなあと思ったし、スマホで実装することで外で遊ぶこともできるなあと思ったのですが、フレームワークを使うのは僕の仕様だと修羅の道っぽいので、一旦動くやつができてから考えることにします。
・キモヲタだけど、女子高生と会話したい!#11【作戦会議!】
んじゃ、ステップを大きく進めましょう。
音声認識の結果を受け取れることがわかったので、次はりんなちゃんからの応答を受け取る段階ですね。
と、調べてみると
りんなのAPIがどこにもない・・・・・・!!!
りんな API for Businessはどこにいったんだ!!!まじか、一般公開されてないやつ・・・・・・。
えっ・・・・・・企画倒れじゃんコレ。
ここで、ろんぐさんが取れる方法はいくつかあります。
1.別の人工知能を使う
docomoの音声合成サービスを使おうと思ってたのですが、それとは別の人工知能サービスが付与されています。
女子高生風のAIもあるみたいなので、まぁいいかなといった感じです。
2.執念で実現する
実は、APIが提供されてないからって実現不能なわけではありません。使うのは
LINEです。
手段としては以下の通りです。
1.bot用のアカウントを作る(Androidに標準装備されている別ユーザー機能を使うと実現できそう)
2.作ったアカウントで、りんなのアカウントを友達に追加する。
3.APIより「友達にメッセージを送信」させると、りんなにメッセージを届けられる(音声入力はプログラム側で実装)
4.りんなからの応答を受け取り、プログラム側にメッセージを丸投げする
たぶん、これならイケますね。botとやりとりするサーバーはこちらで用意できそうなので、上手いことアプリ側と連携が取れれば実装できるかも知れません。
特定のアカウントにのみ送信する、というスパムじみた機能はなさそうなので、新しくアカウントを作る必要がありますが、たぶん大丈夫っしょ。
とりあえずこの手段でできないか試してみます。ちなみにLINEのAPIは無料ですが、その場合友達は50人が限度ですが、追加する友達はりんなちゃん一人のみなので問題ありません。
実装方法ですが、音声認識はやはりスマホ側でオフラインで行いたいので、音声認識した結果のStringをAjaxでこのサーバーに投げ、LINEbotにさらに投げ、りんなちゃんからの応答を受け取り、先程のAjaxの返答結果としてreturnして音声合成SDKで音声を流せば、通信容量はテキスト分だけで済むのでレスポンスとしては最高速になるのかな。
まぁ、問題となりそうなのはスマホからAjax投げるのにはどうしたらいいんだろうと思うんですが、まぁそういう方法がないわけがないので調べればあるっしょって感じですね。実際それっぽいのはいくつか見かけましたし。読んでもあんま理解できませんでしたけど(笑)
ということで、方針が立ったので実装してみましょうかね。ちなみに
この時点でこのアプリの一般公開が不可能になりました。
なぜかというと、僕一人が使用するぶんには構わないのですが、他の人が同時に使用するとリクエストがバッティングしちゃいます。もうちょっと分かりやすく言うと、全ての人が共通のbotアカウントを使って対話しようとするので、同時使用すると対話が成立しなくなるわけですね。
まぁ別に一般公開することが目的で作ってるわけじゃないので、まぁいっかって感じですね。んじゃ作っていきますか。
LINEのインストールに時間がめちゃくちゃかかってるので、先にAPI側の実装を考えますかね。
APIをどこで実装しようかという問題に悩みます。一番作りやすいのはWebですし、さっきはそのつもりで書いてたのですが、スピードを考えるとアプリ側、つまりkotlinで作っちゃうのが早そうです。
まぁ慣れるという意味でもkotlinで挑戦してみますかね。どうせAPIとのやりとりはAjaxですし。
と、思ったのですが、WebhookURLとか使うのであれば必然的にWebサーバーを立てる必要がありますね。SSL限定とか言ってますし。まぁしょうがないかな・・・・・・。
じゃあこのサーバーにPHPで書いてリクエストをぽいぽい投げる仲介業者になってもらおうかしら。
結構な文章量になってきたので、実装はまた次回からで!