空きアカウント検索サービス「Availy」をリリースしました

Nov 13, 2016

予てより開発を進めていた「Availy」をようやくリリースしました。 開発をサボっていた時期が長く、リリースまでに1年を要してしまいましたが、なんとか公開できる形にもってこれました。

Availy

どんなサービスか

Availyは、SNSやWebサービスの空きアカウントを検索できるサービスです。 Twitterの@usernameのようなユーザ名の空き状況を、色々なWebサービスをまたいで検索することができます。

ちなみにサービス名は、Availy (アベイリー) と読みます。Available(利用できる)からとっています。

なぜ作ったか

自分のユーザー名を考える際に、この手のサービスを使っていましたが、 幾つか不満点がありました。

一つは検索が遅いこと。サービスの性質上、キャッシュができないため、 ユーザ名が入力される度に、全Webサービスに対してアカウントが空いているか確認しなければなりません。 そのため、普通に実装するとリクエストにかなり時間がかかってしまうのですが、 WebSocket, 並列処理, HEADリクエスト等の技術を使うことで、かなりの時間を短縮することができました。 ここに関して、詳しくは後述します。

二つ目は、日本のサービスが皆無である点。 既存のサービスが海外製ということもあり、Qiitaやはてななど、 日本でしか使われていないサービスに対応していませんでした。 日本人としてはこの辺りのユーザー名も取れるか気になるところなので、 日本のサービスも検索できるものを作ろうと思いました。

判定ロジック

どのようにして空きアカウントの判定をしているのか説明します。 基本的にはユーザー名を含むURLにアクセスし、レスポンスのステータスコードを見て判定を行います。

例えば、ユーザー名としてfooが入力された場合、https://twitter.com/foohttps://github.com/foo にリクエストを投げます。その際、ステータスコードが200であれば、ユーザーが存在しているため利用不可(unavailable)、 404であればユーザーが存在しないため利用可(available)といった具合です。

リクエストを投げる際のHTTPメソッドとして、HEADを使っています。 HEADは、GETとほぼ同じですが、HTTPヘッダーのみを取得する際に使います。 上記の例であれば、ステータスコードがわかれば、ユーザー名が使用可能かどうか 判定ができるわけですから、HTTPヘッダーだけで十分です。 当然GETよりもレスポンスが速いのでHEADを使っています。

また、より高速化するため、リクエストを並列で投げています。 加えて、ブラウザ<->サーバー間をWebSocketで接続し、判定が終わったものを随時クライアントにPushすることでより高速化を図っています。

ロジック

使用した技術

以下の技術を用いて開発しました。

フロントエンド

  • React
  • Redux
  • PostCSS

バックエンド

  • Golang
  • Gin

インフラ

  • Ansible
  • Cloudflare
  • Conoha VPS

直していきたいところ

  • CIによるデプロイ自動化
  • サーバーサイドレンダリングより初期描画のコストを抑える

おわりに

デザインに悩み、インフラで手が止まり、結果、着想からリリースまで1年を要してしまいました。 ほとんどが空白の期間なので、手を動かしていたのは実質1ヶ月程度でしょうか。 長い時間がかかってしまいましたが、納得のいく形でリリースできたことが嬉しいです。