アロカップ

PassionPulse

https://github.com/Mcpu3/honnaka_backend

Next.js

GitHub

TypeScript

Azure

Python

趣味や推し事, 好きなことを布教する、一期一会のSNSサイト。

岩本圭介

推しアイデア

多くのSNSで採用されているリスト形式の表示を使わず、Card形式で全てのユーザーの投稿をランダムに表示させることで、独自性を出した。

作った背景

一人暮らしが始まり、暇な時間が増えたため、新たな趣味を探したくなった。 そこで、自分の興味に合わせた趣味を探せるようなアプリを作るため、タグや、その趣味を楽しむ場所で絞り込めるような機能を盛り込むことも考えた。 同じような考えを持つ人も多いと思うため、需要はあると思う。

推し技術

OpenAIのAPIを利用し、自分の投稿を要約する機能を作成した。 また、フロントエンドにおいてカード形式な表示をMaterial-UIのCardコンポーネントを利用し、よりおしゃれな見た目となるようにした。

プロジェクト詳細

概要

  • 趣味や好きなことなどを、以下のような情報と一緒に投稿できるSNS。
    • いつからその趣味にはまったか
    • その趣味はどこで行うことが多いか
    • その趣味に関連するURL
    • その趣味を表す画像
  • Twitterなどのように過去の投稿が一覧表示されるのではなく、ランダムな投稿が1つ表示される一期一会なシステム。
  • 投稿にはいいねやスターなどを押すことができ、後で見返すことも可能。

技術

バックエンド

今回、初めてクラウド上にデプロイを行った。

  • Python
  • FastAPI
  • Azure Functions
  • Azure SQL Database

フロントエンド

Vercelと連携の取りやすさを考え、フレームワークにNext.jsを採用した。 また、見た目、即ちデザインを整えやすいようにMUIを利用した。 TypeScriptで型宣言をしておくことで、開発途中でエラーが出た際に対処しやすいようにしている。

  • TypeScript
  • Next.js
  • Vercel

技術構成図

image

APIドキュメント

DBについて

今回のDBの設計において、以下のテーブルを作成した。

  • Users: ユーザ名及びハッシュ化されたパスワードなどを保持。
  • Posts: 投稿の内容 (タイトルやテキスト要約, 本文など) を保持。UsersのPKを外部キーとして持つ。
  • Tags: ユーザが投稿に設定したタグを保持。他のユーザが設定したタグの検索などに用いる。
  • Locations: ユーザが投稿に設定した、主にその趣味を楽しむ場所を保持。「インドア」などで投稿を検索できるようにするために用意。
  • Images: ユーザが投稿に設定した、その趣味を表す画像を保持。画像データはサイズが大きいため、このテーブルに独立して保存。
  • Reactions: ユーザが投稿に対して行ったリアクションを保持。ある投稿のいいね数の合計などを取得する際は、このテーブル上でSQLを実行。

今後の展望

  • 自分の投稿の修正, 削除機能の追加。
  • タグなどで投稿を検索する機能の追加。

岩本圭介

@mcpu3