🏡

個人開発した賃貸物件検索サービスのシステム構成と使用技術

3 min read 7

本記事で紹介している賃貸物件検索サービス Comfy は 2021/07/30 13:48 をもって閉鎖いたしました。使用していた物件データに関して、データの掲載元より利用許諾を得られなかったためです。本記事で紹介しているサービスが閲覧いただくことができなくなってしまい、大変申し訳ございません。本記事は、サービスに関する一部の内容を削除した上で、使用技術等に関する内容についてはいったんそのまま残しておきますが、近いうちに記事自体を削除するかもしれません。

※ 2021/07/30 19:00 頃追記
こちらを見に来ていただいた方に、サービスが動いていた頃の動画を下記ツイートにアップロードしています。
サービスを直接お試しいただけない状態で申し訳ございませんが、少しでもサービスの雰囲気が伝われば幸いです。


下記、元の記事の内容です


個人開発で 賃貸物件検索サービス Comfy (上記サービス閉鎖に伴い、リンクを外しました) を作りました。
先週、リリース後の告知ツイートをしたのですが、幸いなことに多くの人にリツイート・いいねの反響を頂きました(リアクションして頂いた方、本当にありがとうございます…!!!)

この記事では、Comfy のシステム構成及び使用した技術・サービスを紹介します。

システム構成

図の通り、システムは大きく 3 つに分けられます。

  • フロントエンド
  • バックエンド
  • スクレイピング基盤

上記 3 つのサブシステムについて、使用している技術をそれぞれ述べます。

フロントエンド

Comfy は一切ページ遷移のない SPA(Single Page Application) として作っています。
2021/07/28 現時点では Routing もない(URL が https://comfy.maison/ のみ)、ガチなシングルページのアプリケーションです。

フレームワーク

フレームワークとして Next.js + Preact を使用しています。
Preact は、React と全く同じシンタックスで書ける軽量版 React といったフレームワークです。多分 React に置き換えても全く問題なく動作します。

状態管理は、React の標準機能である Props と State のみ使用しています。
Redux, Recoil 等の状態管理ライブラリや React の Context は使用していません。

使用ライブラリ

  • Leaflet
    地図の表示に使用しています。Google Maps 的なライブラリですが、Google Maps API が有料である今、無料で使える地図ライブラリの数少ない選択肢です。Google Maps API に似た API が整備されており、ドキュメントも非常に調べやすくかつ分かりやすく書かれていて、素晴らしいライブラリです。
  • chart.js
    棒グラフの表示に使用しています。柔軟な表現力を持ち、美しい API を備えた素晴らしいライブラリです。
  • React Slick
    物件ごとの画像ビューアに使用している、カルーセルのライブラリです。リリース 1 日前に使用し始めてまだ全く使いこなせていません。。。もう少しスムーズに動作させたかったりしますが、まだまだ使い倒す必要がありそう。

その他、スライダーやモーダル、セレクト、ハンバーガーメニュー等は自作コンポーネントです。

デプロイ先

静的サイトのホスティングサービスである Cloudflare Pages を使用しています。
VercelNetlify など他サービスも今まで使用してきましたが、無料プランで帯域制限がないのは Cloudflare Page のみだったことが今回の選定理由です。実際、使用帯域幅はリリース後 1 週間強ですでに 80 GB ほどいっているので正解だったなーと思っています。
Cloudflare Pages は使い勝手も最高です。個人的には、バックエンドの API サーバへの DNS と合わせて使うのにも最高だと思います[1]

バックエンド

バックエンドは Ajax のリクエストを処理する API サーバとして機能します。

言語・フレームワーク・ライブラリ

Python3 で動作させています[^0]。Web フレームワークとして Python ベースの FastAPI (+ Uvicorn + Gunicorn) を使用しています。
また、使用ライブラリとしては、Python に標準で入っている RDBMS の SQLite を使っています。

デプロイ先

バックエンドは GCP (Google Cloud Platform) 上の GCE (Google Compute Engine) で動かしています。
GCP で使用しているサービス・機能は下記のとおりです。

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

当初は Docker コンテナベースの実行環境を想定していたのですが、コンテナが重く起動時間がかかることからスケールアウト時の起動の遅さが心配なため、GCE インスタンス上でそのままアプリケーションを走らせています。また、Managed instance groups を使って、負荷によってオートスケールするようにしています。

脚注
  1. なお、選定に当たっては CatNose さんによる比較記事 をめちゃくちゃ参考にしました。 ↩︎

Discussion

驚くほどレスポンスが速く、使い勝手も非常に良いサービスだなと感じました。

https://sumaity.com/help/kiyaku.html
質問させてください。上記利用規約の第17条(禁止事項)にて以下のとおり記載があります。

1.ご利用者は、本サービスを利用するに際して、次の行為を行うことができません。
(1)本サービスによって提供される情報を、当社の事前の同意なく、複写、もしくはその他の方法により再生、複製、送付、譲渡、頒布、配布、転売、改変またはこれらの目的で使用するために保管すること

無許諾ということでこちらの禁止事項に抵触するように思われたのですが、どのようにお考えでしょうか?

記事を読んで頂き、コメントまで頂きありがとうございます。

そして利用規約に関してのご指摘、ありがとうございます。
スマイティさんのデータを利用するにあたり、僕もそちらの条項を拝読しています。

僕は法律の専門家ではないので、利用規約の法的効力などについては詳しくありません。
ただ、今回公開した Web サービスと利用規約との関連についてもっとも大事な点は「スマイティさんにとって不利益となる行為かどうか」という点ではないかと考えています。
この Web サービスは、スマイティさんにとっての競合などではなく、「検索部分をユーザさんにとってより快適なものとした上で送客をする」という位置づけにあります。つまり、競合や不利益ではなく、スマイティさんの利益となるように設計しています(少なくとも現時点では)。データの利用に関しての著作権法での位置づけに関しては、「このサービスについて」の「使用している物件情報に関する注意」に記載いたしましたので、もしよろしければそちらもご覧頂ければと思います。

ただし、僕の気づいていない点でスマイティさん側の不利益になる行為が絶対にないとは言い切れません。もしくは本サービスの運営自体で気付かぬどなたかにご迷惑がかかっているかもしれません。
「このサービスについて」という箇所に記載をした通り、万が一スマイティさん及びデータの著作権者の不利益につながることがある場合には、サービスの即刻停止など然るべき対応を取る所存です(なお、2021/07/28 現時点ではスマイティさんからの問い合わせはありません)。

また、このまま無断でデータを使用させていただくのは、挙げていただいた利用規約の点などサービスの運営に納得感がないユーザさんに対しても不誠実な点と言えるかもしれません。それは絶対に避けなければいけないと考えているので、可能な限り迅速に、直接コンタクトを取りご相談させていただいた上で承認を頂きたいと考えています。そして安心してユーザさんにご利用頂けるサービスとして運営していきたいと思っています。

長文となりすみません。もしよろしければ、たろすけさんのご意見・お考えもお聞きできれば幸いです(もちろんお返事いただかなくてもだいじょぶです!!)。

どうぞよろしくお願いいたします。

返信ありがとうございます。

規約にあることを承知のうえで禁止事項を犯しているとのことで、率直に申し上げ、技術者倫理に欠ける振る舞いと感じました。
スマイティに益するサービスを目指すのであれば、規約に則りまずは同意を得た上でデータの収集を開始するのが筋かと思います。

また少し調べただけでもスマイティにとって不利益となりうるケースは想定できます。
~【注意】物件情報の無断掲載はトラブルの元~ などご参照ください。仮に許諾が得られていても、最新の情報の即時反映ができない仕組みのように見受けられました。

専門家の方に意見を聞いてから再度再開するか決めてもいいかと思います。

内容見る前に閉じられていましたので、把握できていませんが、
情報をスクレイピング・クローラーで集めて、一部表記(元サイト名表記)、該当のリンクへ飛ばす。
といった検索エンジンのようなものであれば、

【利用規約について】
利用規約の同意は基本的に、同意していなければ問題ありませんし、今回の場合は
みなし同意に当てはまると思うのですが、フッターにリンクを貼ってあるだけでは
同意したとみなすことは難しいと言われています。

【検索エンジンとしての著作物利用について】
さらに、2019年には検索エンジンとしての著作権利用は合法(細かな要件はありますが)と
なっているようですが、私もよくわからないので調べたほうがいいかと思いますが。

というように、諦めてしまうのはもったいないかと思われます。
同意を得られることが一番かもしれませんし、技術者倫理に欠けるという意見もあるようですが、

サービス提供者という立場で考えれば、法律を調べ、専門家とも話をして、
合法的(ギリギリ)に戦うことも大事なことではないかと思います。
全員ではなくても、多くの人に認められるグーグルやアップル、
その他大企業のサービスもそうだと思います。実際訴えられて戦ったりしてますし。

今さらながらのお返事、すみません…
コメントを頂き、本当にありがとうございました。

合法的(ギリギリ)に戦うことも大事なことではないかと思います。
全員ではなくても、多くの人に認められるグーグルやアップル、
その他大企業のサービスもそうだと思います。実際訴えられて戦ったりしてますし。

上記の点はとても励まされました。ありがとうございます。

利用規約に関する点及び著作権まわりの議論に関しては、
(色々な考え方や意見はありますが)僕も同意いたします。

初めまして!
私も「まだ諦めなくても良いのではないか」と感じました。

この Web サービスは、スマイティさんにとっての競合などではなく、「検索部分をユーザさんにとってより快適なものとした上で送客をする」という位置づけにあります。

chooさんのこの言い分も個人的には納得できます。
Google検索エンジンと同じようなものであり決して敵対的なものではない、と熱意を持って伝えればまだまだ可能性はあるのではないでしょうか!

また、熱意を伝える相手も重要だと思います。末端の担当者レベルだと「機械的に禁止」という対応になるかと思いますが、プロダクトに対する裁量がある人と話すことができればメリットを理解してもらえて、前に進む可能性もあるかもしれません。


その他、スレッドで論点となっていた、相手方のデメリットという点でいくと、個人的には以下の点が考えられるなと感じました。

  • スマイティの検索画面にある広告収益の減少
  • スクレイピングによる負荷

これらの点に関しても、解決の余地はあるかなと感じました

  • Comfyの収益を分配する(レベニューシェア)ことで、損失を穴埋めする。Comfyの完成度によってはトラフィックが通常よりも増えて、むしろ相手の利益になる可能性もある。
  • スクレイピングの頻度について負荷にならない範囲で取り決めをする。または、スクレイピングではなくスマイティのシステムと連携してDBにアクセスさせてもらう。もしくは、Comfyのサービスを買い取ってもらえないか交渉する。

拙い考えですが、少しでも参考になれば幸いです。
Twitterでサービスにかける熱意も見ました。応援しています!

今さらながらのお返事、すみません…
温かい言葉のコメント、本当にありがとうございました。
(色々落ち着いてからちゃんとお返事しようと思っていたら、こんなに時間が経っておりました…💦)

とてもあたたかく熱のこもったコメントを頂き、本当に嬉しかったです!
こんな風に応援して下さる方がいる、というのは本当にありがたい限りです。

引き続き色々と頑張っているので、今後もどうぞよろしくお願いします!😊

ログインするとコメントできます