メむンコンテンツぞスキップ
芋出し画像

個人開発した爆速な賃貞怜玢サヌビスの構成2024幎版

    個人で運営しおいる賃貞物件の怜玢サヌビス Comfy に関しおの技術蚘事である『【個人開発】爆速な賃貞物件の怜玢サヌビスを䜜った』は、いたたでたくさんの人に読んでいただくこずができたした。ありがずうございたす。

    リリヌスから本日で䞞䞉幎ずいう節目でもあり、蚘事に蚘茉したリリヌス圓初の構成からずいぶんず倉曎しおきたので、珟状のシステム構成を公開いたしたす。

    Comfy ずは

    Comfy は 日本党囜の賃貞物件を超高速に怜玢できる Web サヌビス です。

    画像
    Comfy の UI

    ずおもこだわっお UI を䜜り蟌んでいるので、もしよければこちらからお詊し頂けるずうれしいです。

    珟状のシステム構成抂芁

    2024幎11月珟圚のシステム構成はこちらです。

    画像
    2024幎11月珟圚のシステム構成。赀枠はリリヌス圓初からの倉曎点。

    図の䞭で赀く囲った郚分が、リリヌス圓初からの倉曎点です。
    それ以倖の箇所に関しおは倧きな倉化はなく、䞊蚘の以前の蚘事に曞いたずおりです。

    リリヌス圓初からの 5 ぀の倉曎点

    【フロント゚ンド】 Cloudflare Pages から Vercel に

    画像

    リリヌス圓初は、フロント゚ンドのデプロむ先ずしお Cloudflare Pages を䜿甚しおいたしたが 2022 幎に Vercel に移行したした。
    背景ずしおは、Next.js の SSR (サヌバサむドレンダリング)を䜿甚しお、地域を絞り蟌んだランディングペヌゞを甚意したかったためです䟋えば東京郜枯区のランディングペヌゞずしお https://comfy.maison/location/3-13103 を甚意する感じです。
    圓時はただ App Router 導入前の Next.js で、たしか Cloudflare Pages は Next.js の SSR に察応しおいたせんでしたもしくは、かなり面倒なこずをしなければ実珟できなかった。

    Vercel に移行しおも、䜿甚垯域や SSR の build の回数、他の条件・制玄に関しおフリヌプランの適甚内に収たっおいたす。䜿い勝手自䜓も Cloudflare Pages ず倧しお倉わりたせんでした。
    特に䞍満に思った点はなく、Vercel ぞ移行しおよかったず思っおいたす。もう移行䜜業自䜓が 2 幎以䞊前なので、はっきりず芚えおいたせんが 


    【フロント゚ンド】 Preact から React に

    画像

    たた、Vercel ぞ乗り換えお Next.js の componentnext/script や next/link などを䜿ったり SSR でペヌゞを远加した際に、それたで䜿甚しおいた Preact だずいろいろな゚ラヌが出たりうたくいかないこずがあったので、玠盎に React を䜿うこずにしたした。
    Preact 自䜓は軜量なのですが、そもそも React 本䜓のサむズはあたりボトルネックになっおいなかったのず、倚くの人が利甚しおいる React の方が確実に様々な恩恵を受けれるだろうずいう刀断でした。
    Preact から React ぞは、ほが䜜業無しで移行できるかず思っおいたのですが、なにかず build の゚ラヌが発生したりしお倧倉だったこずを芚えおいたす 詳现は芚えおいたせん。GitHub 等の蚘録をさかのがっお確認するこずはできるので、気になる方がいればご連絡ください。別の蚘事にできるかもしれたせん


    【フロント゚ンド】  Leaflet から MapLibre GL JS に

    画像

    むンタラクティブな地図機胜の実珟には、Leaflet ずいうラむブラリを䜿甚しおいたしたが、ちょうど今から䞀幎ほど前に MapLibre GL JS ずいうラむブラリに移行したしたなお、Google Maps は有料だったので、最初から遞択肢に入っおいたせん。

    この背景は、郜道府県や垂区町村のポリゎン自治䜓の境界線からなる図圢に関しお、ベクトルタむルを静的に配信したかったこずです。
    ここの話はかなりややこしいか぀やや専門的な話なのですが、Leaflet を぀かっおいた際には、バック゚ンドの凊理ずしお、リク゚ストの床に垂区町村などのポリゎンを郜床遞定し凊理しおレスポンスを返すずいうこずを行っおいたした。
    この凊理自䜓が若干重かったこずもあったのですが、バック゚ンドのファむルやラむブラリで地理情報も倚分に扱わざるを埗ず、煩雑な䜜りになっおいたした。
    自治䜓のポリゎンデヌタを PMTiles ずいう静的なベクトルタむルを配信する構成に倉曎するこずによっお、バック゚ンドでの地理情報に関する凊理をほが陀倖するこずができ、ずおも簡玠な仕組みにするこずができたした。

    この倉曎は、バック゚ンドの耇雑性を倧幅に枛らしコヌドも倧量に枛ったため、バック゚ンドの Rust ぞのリプレヌス時にも非垞に有甚な倉曎ずなりたした。

    たた、このリプレヌスによっお、地図の操䜜性も栌段に䞊がり、地図衚瀺も圧倒的に矎しくなりたした䞋蚘はその時のリリヌスの告知ツむヌトです。

    去幎の暮れころからせっせず開発した Comfy の地図 UI の改善をリリヌスしたした 
    今回、地図のラむブラリを Leaflet から MapLibre GL JS に移行しお、今たで難しかった衚瀺などを実珟したり、党般的にずおも矎しく操䜜性の高い地図 UI を実珟しおいたす😊  https://t.co/wtWbIm3lmt

    — choo (@choo_s) January 31, 2024


    【バック゚ンド】 Python ✕ FastAPI から Rust ✕Actix Web に

    画像

    バック゚ンドに関しおは、リリヌス圓初からほがフルリプレヌスしおおり、今動いおいるコヌドでリリヌス圓初からあったコヌドは䞀行もありたせん。

    リリヌス圓初は、Python3 で実装しおおり、フレヌムワヌクずしお FastAPI を䜿甚しおいたした。バック゚ンドを高速で凊理させるこずはサヌビスの根幹であり、高速化の工倫のひず぀ずしお C++ による Python の拡匵モゞュヌルを実装しおいたした。

    今埌もバック゚ンドに様々な機胜を远加したいず考えおいた時に C++ の拡匵モゞュヌルを匕き続きずっずメンテナンスするのが突劂めんどくさい気持ちになりたした。
    かずいっおフルリプレヌスする必芁もないかなず思っおいたのですが、詊しに Rust でコヌドを曞いおみたりしたずころ Rust の玠晎らしさに目芚め、C++ の拡匵モゞュヌルを匕き続きメンテナンスするよりも Rust に乗り換えた方がよいずいう結論に達したした。

    Web フレヌムワヌクずしお Actix Web をさくっず遞定し、開発期間は玄 1 ヶ月しかかからず、性胜も玄 1.5 倍に向䞊したした。さらに党く同等の機胜を実装したのですが、コヌドの行数は玄 40 % になりたした。
    Rust での実装は、開発䜓隓も非垞によく、想像以䞊の結果が埗られおずおも満足でした。

    このリプレヌスの詳现は、䞋蚘の蚘事にたずめおいたすので、もしよければご参照いただければず思いたす。


    【むンフラ】 Google Compute Engine から Cloud Run に

    画像

    リリヌス圓初からずっず、バック゚ンドの動䜜環境ずしお Google Cloud Platform を䜿甚しおいたす。
    䞊蚘のバック゚ンドの Rust ぞの移行時に、それたで䜿甚しおいた Google Compute Engine (GCE、AWS でいう EC2) から Cloud Run ぞ移行したした。

    背景ずしおは、Rust ず Actix Web を䜿っお移行前の logging を実珟させようずするず面倒な凊理が必芁ずなるこずがわかり、たしか 3 日間ほどかなり悩んだ埌に、暙準出力をそのたた logging できる Cloud Run ぞ移行を決めたした。

    実は Cloud Run ぞの移行時も、ディスクが䜿えずすべおデヌタをメモリで保持する必芁があるなどいろいろな問題があったオブゞェクトストレヌゞはマりントできるのですが、怜蚌したずころ本サヌビスの䜿甚だずそれも問題が倚かったのですが、それはたたどこかで曞ければず思いたす。

    Cloud Run ぞの移行は、結果ずしおコストの倧幅な削枛に成功し、これはどのリプレヌスよりも内心嬉しい結果をもたらしたした。

    画像
    GCP の月額料金の掚移。Cloud Run ぞの移行で倧幅なコストダりンに成功。


    おわりに

    長文ながら最埌たで読んでいただき、本圓にありがずうございたす。
    もしなにかひず぀でも参考になるこずがあれば幞いです。

    この 11 月から、note で毎日なんらかの蚘事を投皿するずいう詊みをしおいたす。今埌は技術蚘事もこちらで曞いおいこうず思いたす。

    今回の Comfy の構成に関わる話でもそうでない話でも、もし曞いおほしいテヌマなどがあれば、ぜひぜひリク゚ストいただけるず嬉しいです。


    P.S.

    Comfy のリリヌスから今日でちょうど 3 幎が経ちたした。
    この節目の日に、このような振り返りの蚘事が曞けたこず、思い出すず今たで取り組んできたこずが倚々あったずいう事実、リリヌスからこれたで倧きな障害を起こすこずもなく䞀床たりずもサヌビス停止するこずなく運営できおきたこず、そしおなにより、本圓にたくさんのナヌザさんに䜿っおいただき、たくさんの嬉しい蚀葉を頂いおきたこず、すべお開発者ずしおこの䞊なく幞せなこずです。
    本圓にありがずうございたす。

    これからさき、もっずもっず倚くの人に愛しお頂けるよう、もっずもっず倚くの人のお圹に立おるよう、匕き続きサヌビスを磚き䞊げおいきたいず垞日頃考えおいたす。
    リアルな子育おず同様、うたくいかないこずも倚々あり、なかなかナヌザさんのリク゚ストにも応えられおいないこずも倚くありたすが、今埌もサヌビス、開発者ずもども、匕き続きどうぞご愛顧のほどよろしくお願いいたしたす。

     
     

    choo

     
     
    個人開発奜き゜フトりェア゚ンゞニア 賃貞怜玢の Comfy https://comfy.maison などを運営しおたす 筑駒→東倧矎孊→SIerなど数瀟→フリヌ JAIST情報科孊修士瀟䌚人コヌス、二児の父 個人開発や子育お・人生に぀いお、AIを䜿わず手で曞いおいたす

    あなたぞのおすすめ