Skip to content

kaminuma/laravel-graphql-memo-app

Repository files navigation

✨ Laravel + GraphQL + React (Material UI) TODO アプリ 📝

All Contributors


🚀 概要

このプロジェクトは、Laravel(バックエンド)・GraphQL API・React(Material UI, TypeScript)によるモダンな TODO アプリです。


💡 このプロジェクトについて

このアプリは「みんなでオープンに開発する」ことを目的に作成しています。
もともとはバイブコーディングで作成した機能をベースに、今後もどんどん新しい機能を追加していく予定です。

💬 誰でも気軽に Issue や Pull Request を送ってください!
📦 ある程度の機能が揃った段階で正式リリースを予定しています。

みなさんのご参加・ご貢献をお待ちしています!

  • 🔧 バックエンド: Laravel + rebing/graphql-laravel
  • 🎨 フロントエンド: React + TypeScript + Material UI + Apollo Client
  • 🗄️ DB: MySQL(Docker コンテナ)

📦 必要なもの

  • 🐳 Docker / Docker Compose
  • 🟢 Node.js(開発時のみ、Docker 内で完結も可)
  • 🧰 Git

⚙️ セットアップ手順

  1. 📥 リポジトリをクローン
    git clone <このリポジトリのURL>
    cd laravel-graphql-memo-app
    以下は、絵文字付きで装飾された `README.md` の後半部分(手順・起動方法・テスト・Contributors)をマークダウン形式で再構成したものです。元の構成は変えず、絵文字のみ追加しています。

🛠️ セットアップ手順(続き)

🔐 環境変数の設定

cp .env.example .env
cp server/.env.example server/.env

※ 必要に応じて .env を編集してください。

フロントエンドの環境変数(オプション):

Docker 環境ではデフォルト設定で動作しますが、ローカル開発時に API URL を変更する場合は以下を実行してください。

cp frontend/.env.example frontend/.env.local
# frontend/.env.local を編集して REACT_APP_API_URL を設定

📖 詳細は「API 接続先(REACT_APP_API_URL)の切り替え方法」セクションを参照してください。

📦 Docker コンテナの起動

docker-compose up -d

📦 バックエンド依存インストール(初回のみ)

docker-compose exec backend composer install

🔑 アプリケーションキー生成(初回のみ)

docker-compose exec backend php artisan key:generate

📁 必要に応じて以下も実行

docker-compose exec backend php artisan config:cache

🗃️ DB マイグレーション・シーディング(初回のみ)

docker-compose exec backend php artisan migrate --seed

🧩 フロントエンド依存インストール(初回のみ)

docker-compose exec frontend npm install

▶️ 起動方法


🔄 API 接続先(REACT_APP_API_URL)の切り替え方法

フロントエンドの GraphQL API 接続先は環境変数 REACT_APP_API_URL で設定できます。

Docker 環境で使用する場合(デフォルト)

docker-compose.yml に設定されているため、特別な設定は不要です。

# docker-compose.yml で自動的に設定されます
environment:
  - REACT_APP_API_URL=http://localhost:8000/graphql

ローカル開発環境で API URL を変更する場合

フロントエンドディレクトリに .env.local ファイルを作成して設定します。

# フロントエンドディレクトリに移動
cd frontend

# .env.example をコピー
cp .env.example .env.local

# .env.local を編集してAPI URLを設定
# 例: REACT_APP_API_URL=http://localhost:8000/graphql

本番環境で使用する場合

本番環境のビルド時に環境変数を設定するか、.env.production ファイルを作成します。

# frontend/.env.production
REACT_APP_API_URL=https://your-production-domain.com/graphql

package.json の scripts で API URL を指定する方法

package.jsonscripts セクションで直接指定することもできます。

{
  "scripts": {
    "start": "REACT_APP_API_URL=http://localhost:8000/graphql react-scripts start",
    "start:prod": "REACT_APP_API_URL=https://api.example.com/graphql react-scripts start"
  }
}
  • .env.local ファイルは .gitignore に含まれているため、リポジトリにコミットされません
  • Create React App での環境変数ファイルの優先順位(高い順):
    1. .env.local (ローカル開発用、Git 管理外)
    2. .env.production.local, .env.development.local (環境別ローカル設定)
    3. .env.production, .env.development (環境別設定)
    4. .env (全環境共通のデフォルト設定)
  • 注意: Docker 環境では docker-compose.ymlenvironment 設定が上記ファイルより優先されます
  • React アプリでは REACT_APP_ で始まる環境変数のみが使用できます
  • 詳細は Create React App のドキュメントを参照してください

🛠️ MySQL 接続情報(外部ツール用)

  • Host: localhost
  • Port: 3306
  • User: todo_user
  • Password: todo_password
  • Database: todo_app

💡 .env ファイルで DB_HOST_PORT を変更することでポート競合回避が可能です。

例:.envDB_HOST_PORT=13306 と設定すれば、localhost:13306 で MySQL に接続できます。


🧪 テスト実行方法

🎨 フロントエンド単体テスト

cd frontend
npm test

🧩 E2E テスト(Cypress)

# フロントエンドディレクトリに移動
cd frontend

# Cypressを開発モードで実行(GUIあり)
npm run cypress:open

# または、コマンドライン実行(ヘッドレスモード)
npm run cypress:run

🔧 バックエンド(Laravel)

cd server
./vendor/bin/phpunit
# または
php artisan test

📝 その他

📚 詳細な開発手順やコマンドは docs/SETUP.md を参照してください。 ❓ 不明点・トラブルは issue または README 末尾に追記してください。


📕 AI 仕様書自動生成システム

このプロジェクトでは、AI を活用した仕様書の自動生成・更新の仕組みを構築しています。 現在は GraphQL API 仕様書の生成に対応しており、今後はデータベース設計書やテストケースなど、様々な仕様書を自動生成する予定です。

🎯 現在の機能(Phase 1.5)

  • GraphQL API 仕様書の自動生成: スキーマファイル(.graphql)を Gemini AI で解析
  • 階層構造での整理: Query/Mutation/Type 別に分類された読みやすい構造
  • Notion 連携: 階層構造で Notion ワークスペースに自動アップロード

🚀 使い方

# 1. Python仮想環境のセットアップ(初回のみ)
cd scripts
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 2. 環境変数設定(初回のみ)
# .envファイルに以下を設定:
# - GEMINI_API_KEY (Google AI Studio から取得)
# - NOTION_TOKEN (Notion Integration から取得)
# - NOTION_PARENT_PAGE_ID (Notion親ページID)

# 3. 仕様書生成・アップロード
python generate_spec_structured.py
python upload_to_notion_structured.py

📊 生成される構造イメージ

仕様書📕
├── 📊 Query仕様
│   ├── todos, categories, user, todo, me
├── ✏️ Mutation仕様
│   ├── createTodo, updateTodo, deleteTodo
│   ├── createCategory, updateCategory, deleteCategory
│   └── login, logout, register
└── 🧱 型定義
    └── Todo, Category, User, Priority

詳細は scripts/README.md を参照してください。


🔧 GraphQL Codegen 活用ガイド

フロントエンドで GraphQL Code Generator を活用して型安全な開発を行います。

セットアップ手順

このリポジトリは、GraphQL Code Generator の設定ファイル(frontend/codegen.ts)や package.json のスクリプトがすでに含まれています。

  1. 依存パッケージのインストール
cd frontend
npm install
  1. コード生成の実行
# Dockerコンテナ内で実行(推奨)
docker-compose exec frontend npm run codegen

# または、ローカルで実行
cd frontend
npm run codegen

⚠️ 注意点

  • バックエンド(Laravel)が起動している必要があります
  • Docker 環境では http://backend:8000/graphql をエンドポイントとして使用します
  1. 生成されたコードの利用例
import { useGetTodosQuery } from "../generated/graphql";

const { data, loading, error } = useGetTodosQuery({
  variables: {
    /* クエリ変数 */
  },
});

⚡ クローン直後は npm install だけで OK!設定ファイルやスクリプトの再作成は不要です。

この機能は開発の生産性向上と型の安全性確保に役立ちます。


� GraphQL Codegen 設定内容メモ

このリポジトリは、下記のように GraphQL Code Generator の設定がすでに済んでいます。

手動セットアップ手順(参考)

  1. 必要なパッケージをインストール
cd frontend
npm install @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-operations @graphql-codegen/typescript-react-apollo --save-dev
  1. 設定ファイル作成例

💡 TypeScript 形式の設定ファイルのメリット

  • 型安全性: TypeScript の型チェックにより設定ミスを防止
  • エディタサポート: 自動補完やインラインドキュメントが利用可能
  • 柔軟性: プログラマティックな設定が可能
// frontend/codegen.ts
import type { CodegenConfig } from "@graphql-codegen/cli";

const config: CodegenConfig = {
  schema: {
    "http://backend:8000/graphql": {
      headers: {
        Accept: "application/json",
      },
    },
  },
  documents: [
    "./src/**/*.graphql",
    "./src/services/**/*.ts",
    "./src/features/**/graphql/**/*.graphql",
  ],
  generates: {
    "src/generated/graphql.ts": {
      plugins: [
        "typescript",
        "typescript-operations",
        "typescript-react-apollo",
      ],
      config: {
        withHooks: true,
        withComponent: false,
        withHOC: false,
        skipTypename: false,
        documentMode: "documentNode",
        dedupeFragments: true,
      },
    },
  },
};

export default config;

⚡ Docker 環境では backend:8000 で GraphQL エンドポイントに接続します。 ローカル環境では localhost:8000 に変更してください。

  1. package.json にスクリプト追加例
"scripts": {
  "codegen": "graphql-codegen --config codegen.ts"
}

test1

�👥 Contributors ✨

Thanks goes to these wonderful people (emoji key):

Arnesh Pal
Arnesh Pal

📖
emilythedev
emilythedev

📖
Add your contributions

📘 This project follows the all-contributors specification. 💬 Contributions of any kind welcome!

About

LaravelとGraphQL(Lighthouse)で作られたTODOアプリ。みんなでオープンに開発するOSSプロジェクトです。学習や練習にお使いください!!バイブコーディングで作成した機能をベースに、今後も機能追加・リリース予定!

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors