GithubHelp home page GithubHelp logo

nerdle's Introduction

Nerdle

このリポジトリはNerdleのクローンアプリを React/Express/Firebase で作成したリポジトリです。

実装戦略について

Demo Site

Nerdle

環境構築

NodeJS

NodeJS は .node-version に記載のバージョンを利用してください。
fnmなど.node-versionに対応している NodeJS のバージョン管理ツールの利用をオススメします。

Visual Studio Code

Visual Studio Code の利用を推奨しています。
静的解析、デバッグ機能などが利用できるよう設定が記載済みです。
本プロジェクトを開いた際に、推奨される拡張機能が表示されると思うので指示に従ってインストールしてください。

Getting Started : Build on your own machine

Firebase Emulator のセットアップ

install dependencies

// npm workspaces 機能を利用しているため、フロントエンド・API 個別に行う必要はありません
npm ci

Backend API の起動 (Firebase Emulator functions/firestore)

※ Firebase 関連の設定が必要になる場合は .firebaserc などの設定を設定してください

npm run dev -w functions
// View in Emulator Functions : http://127.0.0.1:4000/functions
// View in Emulator Firestore : http://127.0.0.1:4000/firestore

初期データの投入

初期の問題データ(sampleData)を curl コマンドや POSTMAN を利用して登録します

curl -X POST \
     -H "Content-Type: application/json" \
     -d @./docs/sampleData/rule.json \
     http://127.0.0.1:5001/{YOUR_APP_NAME}/asia-northeast1/api/v1/rules

Path や URL は適宜自身の環境で変更が必要です

Frontend App の設定 / 起動

./packages/web/.env.local.example をコピーして、.env.local を作成します。

その後、内部の API のエンドポイント指定を先ほど立ち上げた API の URL に書き換えてください。

e.g

VITE_API_BASE_URL=http://127.0.0.1:5001/nerdle/asia-northeast1/api

上記設定を完了後、フロントエンドのアプリを立ち上げます

npm run dev -w web
// Access to (http://127.0.0.1:5173/)

Getting Started  : Tips

  • 開発時にブレークポイントなどを設定して動作を確認したい時は、vscode の 実行とデバッグ 機能を利用することができます。起動オプションなどの詳細は .vscode/launch.json を確認してください。

Firebase へのデプロイ

自身の Firebase にデプロイする際は下記の方法で実施してください。

  1. Firebase のプロジェクト作成
  2. Firebase CLI でログイン & 1 で作成したプロジェクトをワークスペースと関連付けする
  3. .firebaserc の設定プロジェクト名を変更
  4. プロジェクトのビルド (npm run build で Web/API 両プロジェクトビルドされます)
  5. firebase deploy コマンドを実行

注意点として、Firebase CloudFunctions を利用しているため無料プランでは WebAPI をデプロイすることができません。

その他、補足事項

このプロジェクトのフォルダ構成

このプロジェクトは packages/webpackages/frontend で構成される monorepo です。

プロジェクトルートで、firebase の構成と eslint のルールを管理しています。

  • packages/web は Typescript + React + Vite で構成された SPA
  • packages/functions は Typescript + Express で構成された API
.
├── README.md
├── firebase.json
├── firestore.indexes.json
├── firestore.rules
├── package-lock.json
├── package.json
├── packages
│   ├── functions   // API
│   └── web         // WebApp
└── sampleData
    ├── guess.json
    └── rule.json

アーキテクチャ

Architecture

将来的に実装したいアーキテクチャ/設計

  • 共通
    • セッション管理方法の再検討
      • バックエンド側でセッション管理ができないためサーバー側で管理するかライフサイクルを設計する必要がある
    • フロントエンド/バックエンド間の型定義を共通化
    • CI/CD
    • 管理者用のツール作成
  • フロントエンド (packages/web)
    • Storybook / Jest の導入と単体試験
    • Nerdle.hook.tsx の分離とリファクタリング
      • 振る舞いを全て管理しているが、関心ごとに応じて分離すべき
      • パフォーマンスに懸念点があるので解消する
  • バックエンド (packages/functions)
    • DI Container の導入
    • バリデーション
    • ID 発行サービスの作成
    • モデルの再設計
      • e.g) 式を入力する箱をバックエンド側で全て生成する必要はなく、無駄に通信量がかかっている

nerdle's People

Contributors

daishoyokoyama avatar

Watchers

 avatar

nerdle's Issues

Firebase Cloud Hosting と Cloud Functionsの連携設定

概要

公式ドキュメントでは、
.firebaserchosting.rewrites の設定でCloudFunctionsの関数を直接呼び出せることが明言されている。

ドキュメントの通り設定を試みたが、上手くリダイレクトせずロギングからもまともな情報を得ることができなかった。
調査に時間を要してしまう可能性があるので一旦保留とする。

FYI

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.