🎃

小規模開発APIを支える技術

2024/01/25に公開

商業登記簿PDFを取得・解析できるAPIサーバーを開発しており、採用している技術について記載する。

前提

  • B2Bかつニッチなサービスなのでスケールは求めていない
    • ReadもWriteも重くない
  • レイテンシはそれほど重要ではない。外部が律速
  • 可用性を損なわない範囲で安く済むことを重視
  • サービスにとってコアではないところには時間をかけず、OSSやサービスを利用させてもらう
    • 無料で使うためのハックなどはしない
    • 運用コストをできるだけ下げる
  • 時雨堂クラウドサービスを支える技術にかなり影響されている

Backend

  • Goを利用
  • Ubuntu 22.04を利用
  • labstack/echo/v4
    • Cloudflareでhttps化するのでhttpで利用
  • PuerkitoBio/goquery
    • 登記簿取得に利用
    • DOM解析
  • sqlc-dev/sqlc
    • シンプルで良い
  • mailgun/mailgun-go/v4
    • アカウント登録時のメール送信に利用
    • シンプルかつ基本料金無料プランがあるのがよい
  • minio-go/v7
    • Cloudflare R2のクライアントとして利用している
    • S3のSDKはパッケージのバージョンのテトリスが辛くてやめた
    • ファイルの読み書きだけできればよかったので十分
  • newrelic/go-agent/v3
    • Datadogが高すぎるのでNewRelicを採用
    • あまり使いやすくはないが、一人ならAPMも無料なので重宝している
  • testcontainers-go
    • テストではモックを使いたくないので利用
    • sqlcのテスト、e2eテストに利用している
  • tychy/toukibo_parser
    • 自分で作った登記簿パーサーライブラリ

インフラ

Cloudflare LB → Cloudflare Tunnel → APIサーバーの構成

  • Cloudflare LB
    • とにかく安い
    • TLS終端させている
  • Cloudflare Tunnel
    • Tailscale FunnelはCPUを食いすぎたのでやめた
    • ngrokはかなり有力だったが、Cloudflare Tunnelで十分だった
  • SakuraとDigital Ocean + ローカルのサーバー
    • Digital Oceanはシンガポールなので比較的遅い。乗り換え検討中
    • ローカルのサーバーもcloudflare tunnelを使えば簡単にLBにぶら下げられるので満足している
  • Cloudflare R2
    • とにかく安い
    • S3 SDKと微妙に互換性がなくてかなり困ったがminioにしたら問題なくなった
    • とにかく安い
  • PostgreSQL 15
    • Digital OceanのマネージドDBが心配になるくらい安かったので採用
    • 最悪DBが飛んでもなんとかなる類のサービスなのでユーザーが増えてきたらちゃんとしたところにマイグレーション予定

デリバリー

    • makeファイルとsupervisorctlを利用している
    • makeをAnsibleに乗り換えることは検討中だが、そんなに困っていない

Discussion