Giter Club home page Giter Club logo

ai-cat-frontend's Introduction

ai-cat-frontend

ci codecov chromatic

ねこの人格を持った AI とお話できるサービスの Web フロントエンド

Getting Started

Node.js のインストール(既に終わっている場合は省略)

18 系の最新安定版を利用する。

asdf などを使ってバージョン管理を出来るようにするのがオススメ。

参考までに Mac に asdf をインストールして Node.js のバージョン管理をしていた時の記録を貼っておく。

Vercel CLI の導入

以下を参考に導入する。

https://vercel.com/docs/cli

以下でコマンドをインストールする。(グローバルインストールで良い)

npm i -g vercel

インストール環境後に vercel を実行する。

以下のような選択肢が出るので認証方法を選択してログインを行う。(GitHub で登録しているケースが多いと思う)

? Log in to Vercel
● Continue with GitHub
○ Continue with GitLab
○ Continue with Bitbucket
○ Continue with Email
○ Continue with SAML Single Sign-On
  ─────────────────────────────────
○ Cancel

正常にログインが終わるとセットアップしてデプロイを行うかを聞かれるので以下のように回答しながら初期化する。

> Success! GitHub authentication complete for [email protected]
? Set up and deploy “~/gitrepos/ai-cat-frontend”? [Y/n] y
? Which scope do you want to deploy to? nekochans
? Found project “nekochans/ai-cat-frontend”. Link to it? [Y/n] y

デプロイが開始される。(Preview 環境が作られる)

デプロイが正常に完了すれば Vercel CLI のセットアップは完了。

環境変数の取得

ローカル環境で動作させる為に必要な環境変数を取得する。

以下のコマンドを実行。

vercel env pull .env.local

ローカル環境に .env.local が存在する場合は以下のようなメッセージが出る事があるが上書きしてしまって問題ない。

? Found existing file ".env.local". Do you want to overwrite? [y/N] y

これで開発に必要な環境変数が .env.local に展開される。

環境変数が増える度にこのコマンドの実行が必要になるので開発環境が正常に動作しない場合はこの手順を再度実行してみると良い。

開発環境の起動

以下を実行する。

npm run dev

以下の URL でアクセスが可能です。

http://localhost:22222

デプロイについて

GitHub 上にコミットが行われる度に Preview 環境の URL が発行されます。

本番環境に関しては main ブランチにマージされる事でデプロイが実施されます。

ai-cat-frontend's People

Contributors

keitakn avatar

Stargazers

ゆうご avatar Zalenski Egor avatar Ryota Murakami avatar

Watchers

 avatar

ai-cat-frontend's Issues

トップページの設計・コーディングを行う

完了の定義

  • トップページのデザインが確定している事
  • トップページのコーディングが完了している事

補足情報

何を載せるべきか?を考えるところからなので少し時間がかかりそう。場合によってはこのissue自体を複数のissueに分割する。

Linter、Formatterの設定を行う

完了の定義

  • Linter、Formatterの設定が完了している事
  • Linterに違反するコードが存在しない状態になっている事
  • Formatterで未整形のコードが存在しない状態になっている事

補足情報

ESLintとPrettierを利用する。

https://github.com/keitakn/ai-cat-prototype の設定内容やpackage構成を移植する形で問題なし。

npm packageを最新安定版に更新

完了の定義

  • 依存packageが最新安定版に更新されていること

補足情報

msw-storybook-addon 等が 2.0.0 になっているので最新版に更新する。

eslint に関しては 9 以降のバージョンで正常動作するか確認する。

匿名のユーザーIDはエンドユーザーのIPアドレスにする

完了の定義

  • 未ログインユーザーの場合IPアドレスがユーザーIDとして設定されるようになっている事

補足情報

現状だと ServerComponents の中でUUIDを生成しているがこれだとページをリフレッシュをしたら会話履歴が失われるのでIPをユーザーIDとして渡すようにする。

npm packageを最新安定版に更新する

完了の定義

  • 利用しているnpm packageが最新安定版に更新されている事
  • 不要なpackageが存在する場合は削除されている事

補足情報

開発が落ち着いたら一度整理する。

利用規約ページの作成

完了の定義

  • 利用規約ページが作成されている事

補足情報

利用規約の内容を考えるところがメイン。

独自のエラーページの作成

完了の定義

  • 独自デザインの404ページが作成されている事
  • 独自デザインの500ページが作成されている事
  • エラー用のComponentが共通Componentとして定義されている事

補足情報

特になし。

chatのURLを変更する

完了の定義

  • /chat のURLにねこの名前が入るように変更されている事

補足情報

今はこのURLで良いが後の為に対応しておく。

独自ドメインで動作するように改修を行う

完了の定義

  • フロントエンドアプリケーションがVercel上にデプロイされている事
  • 独自ドメインで動作するように必要な設定が追加されている事

補足情報

サービス名とドメイン名をどうするか考える必要がある。

npm packageを最新安定版に更新する

完了の定義

  • 利用しているnpm packageが最新安定版に更新されている事

補足情報

各packageがアップグレードされているので一度最新にしておく。

Storybookの導入を行う

完了の定義

  • Storybookが書ける状態になっている事
  • 主要ComponentのStorybookが書かれている状態になっている事
  • StorybookがChromaticにデプロイ出来る状態になっている事

補足情報

特になし

LLMのAPIをコールする関数を分離

完了の定義

  • Component内にハードコードされているLLMをコールする関数が分離され汎用的な関数として実装されている事
  • 上記で作成した関数のテストコードが実装されている事

補足情報

先に #5 を対応する。

テスト実行環境をVitestに移行する

完了の定義

  • 既存のテストケース全てがVitestで動作するように変更されている事
  • Jest関連の設定ファイルが全て削除されている事

補足情報

きっかけは #67 のissue。

mswjs/msw#1952 (comment) のコメントの通り、Jestはトラブルが多く現状の構成のまま動作させるには修正パッチを当てる必要があり無駄に複雑になってしまうのでいっその事、次世代のテストフレームワークであるVitestに移行する。

CIの設定を追加する

完了の定義

  • PR作成時にLinter、Testの実行が行われるようになっている事
  • コードカバレッジの結果が閲覧出来るようになっている事

補足情報

現状だとLinterに違反するコードやテストが通っていない状態でマージされてしまうリスクがあるので早めに対応する。

テストを書ける環境を構築する

完了の定義

  • テストコードが書ける状態になっている事
  • 最低でも1件のテストコードが実装されている状態になっている事

補足情報

#4 の前本件を終わらせておく。

fetchCatMessageの名前を変更する

完了の定義

  • fetchCatMessagegenerateCatMessage に変更されている事

補足情報

生成AIを使った機能なので generate のほうが適切だと思われるので対応する。

リンクにaccessible nameを付与する

完了の定義

  • タイトルの内容が実行されている事

補足情報

1. テキスト

<a href="https://example.com">詳細はこちら</a>

2. 画像リンク

<a href="https://example.com"><img src="link-image.jpg" alt="詳細ページへ"></a>

3. aria-label属性

リンクに直接的なテキストコンテンツがない場合、aria-label属性を使用してアクセシブルネームを提供できます。

<a href="https://example.com" aria-label="詳細ページへ移動">詳細</a>

4. aria-labelledby属性

他の要素のテキストをリンクのアクセシブルネームとして使用したい場合は、aria-labelledby属性を利用します。この属性は、ラベルを提供する他の要素のIDを参照します。

<span id="link-name">詳細ページ</span>
<a href="https://example.com" aria-labelledby="link-name">こちら</a>

/chat/{catId} の画像を正式な物に変更する

完了の定義

  • ねこの画像、ゲストユーザーの画像が正式な物に置き換わっている事

補足情報

初期リリースではログイン機能はないのでゲストユーザーの向けのアイコンを作成する。

Sentryの導入を行う

完了の定義

  • Sentryが導入されている事
  • エラー発生時にエラー内容がSentryに送信されるようになっている事
  • APIのレスポンスHeaderの Ai-Meow-Cat-Request-Id がSentryに送信されるようになっている事

補足情報

AppRouterになって初めてのSentryの導入なのでハマりポイント等がないか確認しながら進める。

sitemap.xml の作成を行う

完了の定義

  • sitemap.xml が作成されている事
  • sitemap.xml がSearchConsole上に送信されている事

補足情報

特になし

npm packageを最新安定版に更新する

完了の定義

  • 利用されている npm packageが最新安定版に更新されていること

補足情報

Next.jsが14になっているので一旦最新版に更新する。

Streamingメッセージが欠落して表示される

概要

タイトルの通り。

以下のように時々一部のメッセージが欠落して表示されてしまう。

表示されているメッセージ

にゃーん🐱こんにちは、ちん!もこだゃん😺 どうしたのちゃんは元気?もこはいつも元気いっぱだにゃん🐱 どんなことがあったの?もこ聞かせてくれるかにゃん?😺

実際にDBに保存されているメッセージ

にゃーん🐱こんにちは、ちゃん!もこだにゃん😺 どうしたの?ちゃんは元気?もこはいつも元気いっぱいだにゃん🐱 どんなことがあったの?もこに聞かせてくれるかにゃん?😺

再現手順

  1. https://www.ai-meow-cat.com/chat/moko に遷移
  2. 会話を始めると一定確率で発生

再現環境

最新バージョンで全てのWebブラウザで発生。

このバグによって引き起こされる問題

ユーザーに正しいメッセージが伝わらない可能性がある。

スクリーンショット、エラーメッセージ

なし

補足情報

バックエンドのDBにはちゃんと欠落していないメッセージが記録されているので、これはフロント側の問題という事で間違いなさそう。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.