📐

LGTM画像を投稿・シェアするサービスをエッジな構成で作りました

2023/09/06に公開

はじめに

LGTM画像を投稿・シェアするサービスをプラハの有志メンバー達と一緒に作りました。
今回はこちらのサービスについて紹介させて頂きます。

サービスの紹介

https://looks-to.me

LGTM画像を投稿・シェア出来るサービスです。
Goodの文字は変更可能で、下記のようにLooks Cat To Meといった画像も投稿できます。

LCTM
僕の愛猫「くるり」ちゃんです

LooksToMeは下記のOrganizationの元で管理されており、AGPL3.0のOSSとして公開しています。
https://github.com/looks-to-me/looks-to-me

使い所

PRをApproveする際などに、「LGTM」とコメントする代わりに利用する事を想定しています。

Goodを通り越して神な時はLooks God To Me。
LGTM

寿司食いてぇなって時はLooks Sushi To Meと、その時の気分に合わせて使う事ができます。
LSTM

なぜ作ったのか

既存のLGTM画像サービスを個人的に利用していたのですが、下記のような不満点がありました。

  • サービスがダウンしている事がそこそこある
  • 不適切な画像が表示される事がそこそこある
  • 文字が縁取りされていないので、背景によっては文字が見えなくなる
  • に対応していないので都度ページリロードするしかない
  • 投稿した後にレスポンスが無く、投稿できたのかどうかわからない
    • 同じ画像が何度も投稿されている事があるのは恐らくこれが原因

CEOとの1on1の中で、LGTM画像サービスを作ってみたいという話をした際、「それは面白そうだね。週に1回、業務時間を使って取り組んでもいいよ」というありがたい提案をいただき、それに従いプロジェクトをスタートすることになりました。

追加予定の機能

現時点では最低限の機能しかなく、閲覧と投稿ができるのみとなっています。

  • Tag機能
    • 投稿にTagを付与出来るようにする機能です。
    • Tagで投稿を検索できるようにする想定です。
  • Star機能
    • 投稿にStar(お気に入り)を付けれる機能です。
    • GitHubのようにStarリストを作れるようにする想定です。
  • Fork機能
    • 投稿をFork(複製)できる機能です。
    • Goodの文字部分を変更した投稿を複製できるようにする想定です。
  • Block機能
    • 投稿/アカウントをBlock(非表示)出来る機能です。
    • Block数が多い投稿/アカウントは自動で削除する等の機能も考えています。
  • ActivityPub対応
    • Edge環境でActivityPubを実装するのが現実的に可能なのか不明

他にもこんな機能が欲しいという要望がありましたら、下記のレポジトリにissueを頂けると嬉しいです。
https://github.com/looks-to-me/looks-to-me/issues

技術構成

Cloudflare上にNext.jsをデプロイしAppRouterフル活用で稼働しています。
下記が利用している技術スタックです。

  • サーバー
    • Cloudflare Pages
    • Cloudflare Workers
      • 画像合成Worker
        • Cloudflare Imagesを用いた画像合成Workerが動いています。
      • CDN Worker
        • Cloudflare Imagesのコスト対策でCloudflare R2にキャッシュするCDN Workerが動いています。
  • 画像配信
    • Cloudflare Images
    • Cloudflare R2
  • データベース
    • Cloudflare D1
  • 認証
    • Supabase Auth
      • NextAuthがEdge環境にまだ対応していなく、ここだけSupabaeを使っています。
      • Edge対応のNextAuthが公開され次第乗り換えたいです。

最後に

最後まで読んでいただきありがとうございました。
今後も継続して開発していく予定なので、ぜひ利用していだけると嬉しいです。

最後に、業務時間を利用する許可をくださったCEO、そして開発に参加してくれた有志メンバーの皆様に心から感謝申し上げます。

LGTM

アガルートテクノロジーズ/PrAha

Discussion