Synthetic Station

saken649 / イチカベサケンの音楽とプログラミングのブログ。それ以外もあるかも。

夢川ゆいのユメ語録を再現してみる続編、Webアプリ化しました

1月も半ばになってしまいましたが、明けましておめでとうございます。
saken649です。
2019年も、どうぞよろしくお願い致します。

12/22に、プリッカソン Advent Calendar 2018の一環として、このような記事を書きました。 syn-station.hatenablog.com

その時に、形態素解析を用いて、アイドルタイムプリパラの夢川ゆいちゃんの独特な喋り方をプログラムで再現する試みをしたはいいものの、Webアプリ化が間に合わず、中途半端な状態になっていました。
リベンジではないですが、Webアプリ化が完了しましたので、公開します。

◯Webアプリ本体 yumegen.herokuapp.com

※朝にアクセスすると見れない可能性があります

GitHub github.com

使い方

何か文言を入れて「ゆめかわっ!」ボタンを押下すると、 ゆめかわになって返ってくる 、というものです。
…もう少しちゃんと言うと、アイドルタイムプリパラの夢川ゆいちゃんの独特な喋り方を再現するべく、特定の言葉の前に「ユメ」を付けて返します。
「夢川ゆいはかわいい」→「夢川ゆいはユメかわいい」といった感じです。

ブラウザからだけでなく、外部からの呼び出し可能なAPIとしても使えます。

詳細は先述の記事「形態素解析を用いて、夢川ゆいのユメ語録を再現してみる試み」をご覧ください。

使用言語など

  • Nuxt.js
    • Vuetify.js
  • Node.js v11.5.0
  • MeCab v0.996
  • Docker

概要

ざくっとやったことを書いていきます。

yumegen-apiの整備

形態素解析を用いて、夢川ゆいのユメ語録を再現してみる試み - Synthetic Station で適当にAPI的なものを作っていましたが、ExpressのAPIとしてちゃんと整備しました。
https://github.com/saken649/yumegen/blob/master/server/yumegen.js

名付けて yumegen-api 。POSTで叩ける単独のAPIとしても使用可能です。外部アプリからでもユメ使ってあげてください。
需要があるのかは知りません。

$ curl -X POST \
  https://yumegen.herokuapp.com/api \
  -H 'Content-Type: application/json' \
  -d '{
    "text": "夢川ゆいはかわいい"
}'

Response

{
    "text":"夢川ゆいはユメかわいい"
}

yumegen-feを作成

Webアプリ化するにあたり、フロントエンドも簡易的にですが作りました。
せっかくなので、この程度のアプリには大仰過ぎますが、Nuxt.js + Expressで作りました。
CSSのFWも、これまた大仰ですが、Vuetify.jsを採用しました。

あまりに小規模過ぎて、Nuxt.jsならではの機能などはほとんど活用出来ていませんが、有名どころのCSS FWがテンプレから選べるのは、下準備の手間が省けて意外と助かりました。

結果的にyumegen-apiが、単独でAPIとしても使えるようになったので結果オーライですが、Nuxt.jsでなくても、Vue.jsのままでも規模的には問題無いと思います。

Heroku Hosting with Docker

固定のURLが欲しかったので、アレコレ考えてHerokuでホスティングすることにしました。
このちょっとしたアプリのためにAWS EC2でホスティングしてドメインや固定IP取るか。。。?というと微妙だったので。

普通のNode.jsのアプリであればHerokuにデプロイするのは、そう難しくない(はずな)のですが、今回はMeCabをインストールしないといけない、という問題がありました。
Heroku上に直接MeCabをインストールすることは出来ないので、MeCabをインストールしたLinuxコンテナを丸ごとDockerイメージ化して、それをデプロイすることにしました。
https://github.com/saken649/yumegen/blob/master/docker/Dockerfile

なんでAlpine Linuxとか使わないで、よりにもよってAmazon Linuxなのか、というと、単純にRedHat系以外のLinuxに慣れていないからです。。
普通にCentOSで良くね感はあるのですが、そこは 気分で 。それで良いのか。
MeCabがちゃんと動くか、というかそもそも楽にインストールが出来るのか、の検証が取れれば、Alpine Linuxに移し替えるのは十分アリですね。

Herokuのアプリは何もしないでおくと、すぐsleepに入ってしまってアプリの立ち上がりが遅くなる、という問題がありますが、以下の記事を参考にして、sleepしないようにしてあります。
qiita.com

ただ、無料版の限界で、朝は落ちてます。これは許容範囲ですね。
(そういえばsleep中のエラーページの設定してませんでした)

複数アプリをsleep対策した上で公開しようとすると無料枠足りなさそうですが、とりあえずでやるにはちょうど良さそうです。

結構ハマりどころが多かったのですが、それについてはまた後日別記事で。
いざ書いてみたら、文量が多くなり始めたので。。

ひとまずは、yumegen-feを使ってあげてください。