ニュースタイトルから575を抽出して、川柳を作れるアプリを作った話
クソアプリ Advent Calendar 2019 2日目の記事です。
https://qiita.com/advent-calendar/2019/kuso-app
Advent Calendar参加欲が急にわいたので、急遽エントリー。
アプリ概要
ニュース川柳(βです)
- ニュース記事から川柳を作るサービス。
- ニュースサイトのRSSを形態素解析し、5文字・7文字の単語を抽出しています。
- ユーザーは抽出された単語を選んで、川柳として投稿できます。
- 投稿された川柳からは、元のニュース記事に飛べるので、眺めていると、直近で話題になっているニュースが分かる予定。
背景
- コラージュ川柳(新聞の見出しの切り抜きで作る川柳)から着想。
- 機械学習の勉強をしてみたかったが、教師データが無い→言語解析系の教師データを集めるためのWebサービス作ればいいんじゃ?→川柳いいかも
- 本業でWebのお仕事できていないので、新しめのフレームワークを触って、時代に置いて行かれないようにしたい
使用した技術
SPAではじめて作りました。
バックエンド
- Laravel(PHP)+PostgreSQL…API、認証まわり等
- Node.js…形態素解析まわり
形態素解析
- kuromoji.js
php-mecabのインストールに挫折した(笑)ので、簡単に使えそうだったこちらを使用させて頂いた。
フロントエンド
- Ionic(v3) + Angular
IonicはアプリライクなUIコンポーネントが多数用意されている、Angularベースのフレームワークです。
普通に作ればPWAにデフォルトで対応しているのもメリット。
ちんたら作っている間にv4がリリースされてしまいましたが、v4ではReactやVueにも対応した様子。
SPAを初めて作る僕にとって、どう作るべきなのか迷うことが多々あったが、下記
公式のチュートリアルアプリがかなり参考になった。
https://github.com/ionic-team/ionic-starter-super
インフラ
- Laradock
DockerでLaravelを使うためのツール群。全部入り。
docker-composeをベースに、アプリケーションサーバ、WEBサーバ、DBサーバと、それぞれ別コンテナとして作ってくれる。
もしサービスがスケールしたらコンテナをまるっとAWS上にデプロイ…等つぶしがきくかな、と思って選定。
工夫した点
575を抽出するロジック
単純に5文字・7文字を抽出するだけでは単語の羅列になってしまい川柳にならないので、「年内」+「の」のように前後で合計5文字・7文字となるものを1ワードとして抽出した。
超ざっくりロジックだが、ある程度うまく拾えている。
あと「山口達也」など、意識せず話題のニュースからワードが抽出されてて面白かった。
反省点
構想から形にするまで、めちゃめちゃ時間がかかった
- アイデア自体は4年前くらいのもの
- 開発着手したが、残業続きでモチベーションが完全になくなったり、気が向いたら再開したり、を繰り返し、気付けば未完成のままここまで来ちゃった。
- 新しいこと(Laravel、Ionic、SPA、Docker)を盛り込みすぎた。躓いてはモチベーションが下がった。
SPAなので本来トークンで認証すべきだが、横着してセッションでやってしまった
下記、参考にさせて頂きました。
まとめ・感想
個人開発について
- 個人開発はモチベーション維持が大変
- 新しいことは、盛り込みすぎない方が良い
- 誰かと一緒に作ったら良いかも
Ionic(Angular)について
- エラーメッセージ、どこが悪いのか直感的に分かりにくい
- でもTypeScriptでカッチリ型指定して書けるのは好み
- 良くも悪くも全部入りなので、ファイル構成・デプロイの仕組み、周辺ライブラリの選定に迷うことはないのは良い
川柳、投稿してみてもらえると、嬉しいです!
ツイート機能つけた。お試しTweet。不謹慎。
— すぱいす@WEBサービス開発中 (@sp_i_c_e) 2019年12月1日
*ーーーーーーーーーーーーーーーーーーーーーーーー*
トランプ氏
ミサイル発射
うっとりと
*ーーーーーーーーーーーーーーーーーーーーーーーー*
https://t.co/jrF1KQuNIU #ニュース川柳