少し前に書いたけれども、このサイトの記事を検索するAPIサーバをScala + Playで作り始めている。雑に仕上がってきたので仕上がり具合を記録しておく。

作りかけているやつ


lv-fox

開発方針


方針はとにかく手を抜く。終わって稼働させるところまでもっていかないと意味がないので手を抜きまくる。下記は当初やる予定だったがやらないことにした。

  • テストコード
  • カバレッジ
  • CI
  • ドキュメント

実装が単純だし自分しか使わないのでこれらはやらないことにした。READMEも書きかけているけどめんどくさいのでこれ以上書かない。実装そのものも多少おかしかろうが例外吐こうがどうせ自分しか使わないので手を抜きまくる。

技術的なの


別段書くところはないけど、MariaDBで行くことにした。はじめはMongoDBを使おうと思ったけど、MongoDBが日本語の全文検索対応していないらしいので諦めた。データベースライブラリは前回と同じくquillを使うことにしたが、これがMariaDBの全文検索(FULLTEXT INDEX)をできるかどうかわからない(というかたぶんできない???)ので普通にlike検索かけることにした。現時点で740記事ほどなので大した問題にならないだろう。

catsも使ってみようかと思ったけど時間が爆散四散しそうなので稼働させることに注力しようと思う。

実装したとこ


基本的なところの実装は終わった。

  • 記事の登録用のAPI
  • 記事の更新用のAPI
  • 記事を単独の用語で検索するAPI

単純なPOSTとGETだけなので昨日今日あたり少し時間を割くだけで進捗が出てしまった。quillがupsertをサポートしていたので実装も楽だった。

下記はローカルで雑に直近10件ほどの記事を放り込んで動かしたものだが、例えばクエリパラメータに電子レンジと入れると先日の記事が引っかかる。DB登録前にHTMLのタグとか改行コードは全部消すようにした。

残りの実装予定


もちろん、現在の実装だけだと不十分なので残り下記を実装しようと思っている。

  • トークンを用いた認可
  • 入力値のサニタイズ
  • 入力値のバリデーション
    • 禁則文字
    • 最低文字数
  • AND検索
  • 検索結果から入力値の前後の文章を切り出して返す
  • CORS

検索結果から入力値の前後の文章を切り出して返すのとAND検索がちょっとめんどくさそう。AND検索は最悪諦めてもいいかとおもっている。PlayFrameworkのプロダクションビルドを試したところ何故かエラーを吐きまくってビルドできないというのが今後の最大の課題かもしれない。PlayFramework 2.6の時はできたはずなのに…。Windowsなのが問題な気がする…。どうせ本番はDokcerで動かすのでDokcerイメージ作る際にやってしまえば良いかなとも思っている。

本番にのせるのを考えるとめんどくさい気持ちが高まりマクリスティして億劫になってきた。コミットグラフをみると既にInitial commitから一ヶ月経ってしまったみたいだ。とにかく今月中には稼働させたい。