1492
1026

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【個人開発】爆速な賃貞物件の怜玢サヌビスを䜜った

1492
Last updated at Posted at 2022-04-03

2024幎11月珟圚の最新の構成に関する蚘事をこちらに曞きたした。
よろしければそちらもご参照䞋さい。
Qiita の本蚘事は、2022幎4月時点の構成に関しおの蚘事で、倚少叀い内容が含たれおいたす。

個人開発で 賃貞物件の怜玢サヌビス Comfy を䜜りたした1。グラフや地図でサクサク絞り蟌める UI が特城のサヌビスです。ずにかく気持ち良い䜿い勝手を実珟するために色々工倫しおいたす。

comfy_20211130_light.gif

既にリリヌスからは 4 ヶ月以䞊経っおいるのですが、改めおサヌビスの抂芁や、システム構成及び䜿甚した技術・サヌビスをご玹介しようず思いたす。2。

サヌビスの抂芁

Comfy は日本党囜の賃貞物件を怜玢できる Web サヌビス です。画面 UI は䞊の GIF 画像のような感じです。
こだわったポむントを色々曞くよりも実際にさわっお頂いた方が新感芚の UI や気持ちよさを䜓感頂けるかず思いたすので、 実際のサヌビス をぜひお詊し頂ければ幞いです

システム構成

Comfy_System_Architecture_20220401.png

図の通り、システムは倧きく 3 ぀に分けられたす。

  • フロント゚ンド
  • バック゚ンド
  • デヌタ基盀

䜿甚技術は図の通りではあるのですが、フロント゚ンドずバック゚ンドに぀いおはもう少し詳现に玹介いたしたす。

フロント゚ンド

Comfy はペヌゞ遷移のない SPASingle Page Application ずしお䜜っおいたす。

フレヌムワヌク

フレヌムワヌクずしお Next.js ず Preact を䜿甚しおいたす。
Preact は、React ず党く同じシンタックスで曞ける軜量版 React ずいったフレヌムワヌクです。倚分 React に眮き換えおも党く問題なく動䜜したす。

状態管理は React の暙準機胜である Props ず State のみ䜿甚しおいたす。
Redux、Recoil 等の状態管理ラむブラリや React の Context は、特に必芁ず感じおいないため䜿甚しおいたせん。

䜿甚ラむブラリ

  • Leaflet
    地図の衚瀺に䜿甚しおいたす。Google Maps 的なラむブラリですが、Google Maps API が有料である今、無料で䜿える地図ラむブラリの数少ない遞択肢です。Google Maps API に䌌た API が敎備されおおり、ドキュメントも非垞に調べやすくか぀分かりやすく曞かれおいお、玠晎らしいラむブラリです。
    Leaflet では衚瀺する地図を遞択できるのですが、OpenStreetMap ずいうフリヌの地図゜ヌスを䜿甚しおいたす。
  • chart.js
    棒グラフの衚瀺に䜿甚しおいたす。柔軟な衚珟力を持ち、矎しい API を備えた玠晎らしいラむブラリです。
  • React Slick
    物件ごずの画像ビュヌアに䜿甚しおいる、カルヌセルのラむブラリです。初期リリヌスの 1 日前に遞定し、あたり䜿いこなせおいないたた今にいたりたす  もう少しスムヌズに動䜜させたかったりしたすが、ただただ䜿い倒す必芁がありそう。

その他、スラむダヌやモヌダル、セレクト、ハンバヌガヌメニュヌ等は党お自䜜コンポヌネントです。

デプロむ先

静的サむトのホスティングサヌビスである Cloudflare Pages を䜿甚しおいたす。
Vercel や Netlify など他サヌビスも今たで䜿甚しおきたしたが、無料プランで垯域制限がないのは Cloudflare Page のみだったこずが今回の遞定理由です。実際、䜿甚垯域幅はリリヌス埌 1 週間匷で 80 GB ほどいったので正解だったず思っおいたす。
Cloudflare Pages は䜿い勝手も最高です。個人的には、バック゚ンドの API サヌバぞの DNS ず合わせお䜿うのには特に最高だず思いたした3。

バック゚ンド

バック゚ンドはフロント゚ンドからのリク゚ストを凊理する API サヌバずしお機胜したす。

蚀語・フレヌムワヌク

Python3 で動䜜させおいたす4。Web フレヌムワヌクずしお Python ベヌスの FastAPI (+ Uvicorn + Gunicorn) を䜿甚しおいたす。

高速化の工倫をかなり色々ず頑匵っおいたす。Elasticsearch や Solr などのラむブラリや Algolia 等のサヌビスは䜿っおいたせん5。色々なチュヌニングず同様、ボトルネックずなる凊理に察しお様々な高速化を詊行錯誀しおみお、现かいチュヌニングをたくさん積み䞊げおいった感じです6。リリヌス埌もたくさん察策を実斜しおおり、ただたださらなる高速化の䜙地もたくさんあるので、今埌も匕き続きチュヌニングしおいこうず思いたす。
工倫は非垞に倚岐に枡るのでここには曞ききれたせんが、匷いおいえばコンピュヌタサむ゚ンスの様々な知識ず、曞籍『ハむパフォヌマンス Python 』の内容がずおも圹に立ちたした7。

䜿甚ラむブラリ

Python に暙準で入っおいる RDBMS の SQLite を䜿っおいたす。ただし SQLite は必芁最小限の䜿い方しかしおいたせん8。読み蟌むデヌタはなるべくメモリに乗るようにしお、メモリには乗りきらない䞀郚のデヌタのみ SQLite に乗せおディスクを参照するようにしおいたす。
その他バック゚ンドに関しおは党お自前実装ですたしか 曞き忘れおいたら远蚘したす 。

デプロむ先

バック゚ンドは GCP (Google Cloud Platform) 䞊の GCE (Google Compute Engine、AWS でいう EC2) で動かしおいたす。
GCP で䜿甚しおいるサヌビス・機胜は䞋蚘のずおりです。

  • Google Compute Engine
  • Google Cloud Storage
  • Google Cloud Load Balancing
  • Google Cloud Logging

圓初は Docker コンテナベヌスの実行環境を想定しおいたのですが、コンテナが重く起動時間がかかるこずからスケヌルアりト時の起動の遅さが心配なため、GCE むンスタンス䞊でそのたたアプリケヌションを走らせおいたす。たた、Managed instance groups を䜿っお、負荷によっおオヌトスケヌルするようにしおいたす。

ちなみに、GCE のむンスタンスは e2-small (2vCPU, 2GB RAM) を䜿甚しおいたす。e2-micro (2vCPU, 1GB RAM) でも十分高速に動䜜するのを確認したのですが、䞀床本番環境で䜿甚しおみたずころじゃんじゃんスケヌルアりトしおむンスタンス数が倧倉なこずになっおしたったので、それ以来怖くお e2-small にしおいたすそのうち調査・察応しお e2-micro にしたいずは思っおいたす

たずめ

個人開発で、新しい賃貞物件怜玢の web サヌビス Comfy を䜜りたした。
ただただ色々改善すべき点も盛りだくさん9で、匕き続き進化させおいく予定です。今埌は技術面でも積極的に発信しおいきたいず思っおいるので、疑問点や聞きたいこずなどあれば、この蚘事のコメントや Twitter の DM など頂ければず思いたす。

ここたでお読み頂きありがずうございたした。
もしよければぜひ、いいねやリツむヌトなど頂けるずずおも励みになりたす
よろしくお願いいたしたす

  1. 2021幎の 7 月に最初のリリヌスをしたのですが、色々あっおいったん閉鎖した埌 11 月に再リリヌスしたした。 ↩

  2. この蚘事は、2021幎7月の初期リリヌスの盎埌に Zenn に投皿した蚘事の倧幅な改蚂版になりたす。 Zenn の蚘事は 7 月のサヌビス閉鎖埌しばらくしお非公開にしたのですが、倚方面から再公開のご芁望を頂いたので、この床新たに曞き盎しお公開するこずにしたした。 ↩

  3. なお、遞定に圓たっおはこの蚘事を参考にしたした。 ↩

  4. Python 倧奜きなのです。 ↩

  5. もちろん、どんなに頑匵っおも速床出ないだろうずいう方針は最初から排陀しおいたす。そしお結果的にはシンプルな怜玢゚ンゞンを自前実装しおいるような感じになっおいたす。。。 ↩

  6. 高速化に関しお曞けるネタ・話せるネタはたくさんあるので、今埌の蚘事執筆、むベント登壇などでちょいちょい衚に出せればず思っおいたす。 ↩

  7. リリヌスする数日前くらい前たでは、SQLite は䜿甚せず党おファむルシステムベヌスでいこうず思っおいたくらい。 ↩

  8. ただナヌザさんの改善芁望に関しおも察応しきれおいたせん 頑匵りたす ↩

1492
1026
33

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1492
1026

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?