{"id":39628723,"url":"https://github.com/nekochans/lgtm-cat-frontend","last_synced_at":"2026-05-09T06:01:23.048Z","repository":{"id":38002450,"uuid":"339009965","full_name":"nekochans/lgtm-cat-frontend","owner":"nekochans","description":"lgtm-cat（サービス名 LGTMeow https://lgtmeow.com) のフロントエンド用","archived":false,"fork":false,"pushed_at":"2026-05-09T04:01:38.000Z","size":13395,"stargazers_count":26,"open_issues_count":16,"forks_count":2,"subscribers_count":1,"default_branch":"staging","last_synced_at":"2026-05-09T04:39:01.907Z","etag":null,"topics":["nextjs","react","typescript"],"latest_commit_sha":null,"homepage":"https://lgtmeow.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nekochans.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2021-02-15T08:23:18.000Z","updated_at":"2026-05-09T02:49:59.000Z","dependencies_parsed_at":"2023-11-10T18:31:43.582Z","dependency_job_id":"29db0447-e7bd-4ac1-b5b0-3098ebf66e9f","html_url":"https://github.com/nekochans/lgtm-cat-frontend","commit_stats":null,"previous_names":[],"tags_count":102,"template":false,"template_full_name":null,"purl":"pkg:github/nekochans/lgtm-cat-frontend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nekochans%2Flgtm-cat-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nekochans%2Flgtm-cat-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nekochans%2Flgtm-cat-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nekochans%2Flgtm-cat-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nekochans","download_url":"https://codeload.github.com/nekochans/lgtm-cat-frontend/tar.gz/refs/heads/staging","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nekochans%2Flgtm-cat-frontend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32809147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nextjs","react","typescript"],"created_at":"2026-01-18T08:40:14.588Z","updated_at":"2026-05-09T06:01:22.992Z","avatar_url":"https://github.com/nekochans.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lgtm-cat-frontend\n\n[![ci](https://github.com/nekochans/lgtm-cat-frontend/actions/workflows/ci.yml/badge.svg)](https://github.com/nekochans/lgtm-cat-frontend/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/nekochans/lgtm-cat-frontend/branch/main/graph/badge.svg?token=PQ4VYSDNFX)](https://codecov.io/gh/nekochans/lgtm-cat-frontend)\n[![chromatic](https://github.com/nekochans/lgtm-cat-frontend/actions/workflows/chromatic.yml/badge.svg)](https://github.com/nekochans/lgtm-cat-frontend/actions/workflows/chromatic.yml)\n\nlgtm-cat（サービス名 LGTMeow https://lgtmeow.com のフロントエンド用プロジェクトです。\n\n# Getting Started\n\n## 環境変数の設定\n\n`.env.local`を作成し、下記を設定してください。\n\n数がそれなりに多いので `vercel env pull .env.local` で環境変数をダウンロードするのがオススメです。\n\nhttps://vercel.com/docs/cli#commands/dev/when-to-use-this-command\n\n```\nNEXT_PUBLIC_APP_ENV=local\nNEXT_PUBLIC_APP_URL=本アプリケーションのURL、ローカルの場合は http://localhost:2222\nNEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=GTM-から始まるGoogle Tag ManagerのIDを指定\nEDGE_CONFIG=Vercel Edge ConfigのURL（Vercel上の値を参照）\nCOGNITO_TOKEN_ENDPOINT=/oauth2/token で終わるCognitoのエンドポイントを指定\nCOGNITO_CLIENT_ID=CognitoUserPoolのClient IDを指定\nCOGNITO_CLIENT_SECRET=CognitoUserPoolのClient Secretを指定\nLGTMEOW_API_URL=https://github.com/nekochans/lgtm-cat-api が稼働しているAPIサーバーのURLを指定\nIMAGE_RECOGNITION_API_URL=ねこ画像判定APIが稼働しているAPIサーバーのURLを指定\nUPSTASH_REDIS_REST_URL=upstash Redis REST APIのURLを指定\nUPSTASH_REDIS_REST_TOKEN=upstash Redis REST APIのトークンを指定\nR2_ENDPOINT_URL=Cloudflareの /r2/overview で確認できるR2のエンドポイントURLを指定（S3 APIという項目）\nR2_ACCESS_KEY_ID=CloudflareのR2のアクセスキーIDを指定\nR2_SECRET_ACCESS_KEY=CloudflareのR2のアクセスキーシークレットを指定\nR2_BUCKET_NAME=CloudflareのR2バケット名を指定\nTURSO_DATABASE_URL=ローカル用 Turso DB（local-lgtm-cat-auth）の URL\nTURSO_AUTH_TOKEN=ローカル用 Turso DB（local-lgtm-cat-auth）のトークン\nBETTER_AUTH_SECRET=openssl rand -base64 32 で生成したローカル用シークレット\nBETTER_AUTH_URL=http://localhost:2222\n```\n\n### 認証 DB（Turso）の使い分け\n\n[Issue #478](https://github.com/nekochans/lgtm-cat-frontend/issues/478) 以降、認証用に Turso DB を 3 種類運用しています。\n\n| 環境                               | DB 名                 | 用途                                                                                   |\n| ---------------------------------- | --------------------- | -------------------------------------------------------------------------------------- |\n| ローカル開発                       | `local-lgtm-cat-auth` | 各開発者のローカル `.env.local` で利用。マイグレーションの動作確認をまずここで担保する |\n| ステージング (Preview/Development) | `stg-lgtm-cat-auth`   | Vercel Preview / Development 環境で利用                                                |\n| 本番                               | `prod-lgtm-cat-auth`  | Vercel Production 環境で利用                                                           |\n\nローカル開発者は **個人用の `local-lgtm-cat-auth` を Turso CLI で作成** してください。マイグレーションをローカルで安全に試した後、本リポジトリで構築済みの GitHub Actions 自動適用フロー（`staging` / `main` ブランチへのマージで stg / prod に順次適用）に乗せます。詳細は「[認証 DB のマイグレーション運用](#認証-db-のマイグレーション運用)」を参照。\n\n```bash\n# Turso CLI でローカル用 DB を作成\nturso db create local-lgtm-cat-auth\n\n# 接続情報の取得\nturso db show local-lgtm-cat-auth --url\nturso db tokens create local-lgtm-cat-auth\n```\n\n\u003e :warning: **重要**: `TURSO_STG_*` / `TURSO_PROD_*` は **GitHub Actions の Environment Secret 経由で staging / prod のマイグレーションワークフローからのみ参照** します。これらの値を **`.env.local` や手元シェルの環境変数に書き込まないでください**。手元のシェルから誤って stg / prod の DB に書き込む経路を完全に塞ぐための運用ルールです。`.env.local` に記載するのは個人ローカル DB（`local-lgtm-cat-auth-\u003cyour-handle\u003e` 等）の URL / トークンのみとします。\n\n`BETTER_AUTH_SECRET` は `openssl rand -base64 32` で生成した値（最低 32 文字）を設定します。**接続先 DB が異なる環境（local / stg / prod）ごとに別の値** にしてください。同じ DB を共有する環境（Preview / Development）は同じ値で問題ありません。\n\nローカルでSentryやChromaticの動作確認を実施する場合 [direnv](https://github.com/direnv/direnv) を使って `.envrc` に以下の環境変数を設定します。\n\n```bash\nexport CHROMATIC_PROJECT_TOKEN=Chromaticのトークンを指定\nexport NEXT_PUBLIC_APP_ENV=local\nexport NEXT_PUBLIC_APP_URL=http://localhost:2222\nexport SENTRY_ORG=Sentryの組織を指定（Vercel上の値を参照）\nexport SENTRY_PROJECT=Sentryのプロジェクト名（Vercel上の値を参照）\nexport NEXT_PUBLIC_SENTRY_DSN=SentryのDNS（Vercel上の値を参照）\nexport SENTRY_AUTH_TOKEN=Sentryのトークン（Vercel上の値を参照）\n```\n\n`CHROMATIC_PROJECT_TOKEN` に関しては `npm run chromatic` を利用しない限りは設定不要です。\n\n以下の環境変数は Sentry の初期化に必須です。\n\n- `NEXT_PUBLIC_APP_ENV`\n- `SENTRY_ORG`\n- `SENTRY_PROJECT`\n- `NEXT_PUBLIC_SENTRY_DSN`\n- `SENTRY_AUTH_TOKEN`\n\n## 認証 DB のマイグレーション運用\n\n認証 DB（Turso、3 環境）のスキーマ管理は [drizzle-kit](https://orm.drizzle.team/docs/migrations) で運用しています。Atlas は採用していません（経緯は [Issue #479](https://github.com/nekochans/lgtm-cat-frontend/issues/479) のクローズコメント参照）。\n\n### 通常運用フロー\n\n1. **ローカルでスキーマ変更**: `src/lib/better-auth/schema.ts` を編集\n2. **マイグレーション SQL を生成**\n\n   ```bash\n   npm run auth-db:generate -- --name \u003c意味のある変更名\u003e\n   # 例: npm run auth-db:generate -- --name add_user_role_column\n   ```\n\n   `migrations/\u003cNNNN\u003e_\u003c名前\u003e.sql` と `migrations/meta/` 配下のファイルが追加 / 更新される。\n\n3. **ローカル DB へ適用して動作確認**\n\n   ```bash\n   npx dotenv-cli -e .env.local -- npm run auth-db:migrate\n   ```\n\n4. **生成された全ファイルをコミットして PR を出す**: `migrations/` 配下のファイルは **手動編集禁止**。生成物をそのままコミットする。\n5. **PR 検証ワークフロー（`auth-db-migration-validate`）の SQL プレビューコメントをレビューする**: PR コメントに新規 SQL の内容が自動投稿される。意図と一致しない SQL が出ている場合は schema.ts を修正して再 generate する。\n6. **`staging` ブランチにマージ** → `auth-db-migration-apply-staging` が自動実行され、`stg-lgtm-cat-auth` に適用される。\n7. Vercel Preview で動作確認後、**`main` ブランチへのリリース PR をマージ** → `auth-db-migration-apply-prod` が自動実行され、`prod-lgtm-cat-auth` に適用される。\n\n### よく使うコマンド\n\n```bash\n# マイグレーション SQL の生成（ローカルでのスキーマ変更後に必須）\nnpm run auth-db:generate -- --name \u003cname\u003e\n\n# マイグレーションをローカル DB に適用\nnpx dotenv-cli -e .env.local -- npm run auth-db:migrate\n\n# meta/_journal.json と SQL ファイルの整合性チェック（CI が自動実行）\nnpm run auth-db:check\n```\n\n### マイグレーション失敗時の確認手順\n\n#### staging への自動適用が失敗した場合\n\n1. GitHub Actions の `auth-db-migration-apply-staging` ジョブログで失敗箇所と SQL エラーメッセージを確認\n2. `stg-lgtm-cat-auth` の現在の状態を確認（K に依頼するか、Turso Dashboard 経由で `__drizzle_migrations` を参照する）\n3. 失敗の原因を schema.ts 側で修正し、新しいマイグレーション PR を起票（forward fix）。`migrations/\u003cNNNN\u003e_*.sql` を **手動編集して再 push しない**。\n\n#### prod への自動適用が失敗した場合\n\nprod の自動適用が失敗した時点で、Vercel 側のアプリケーションは「新スキーマ前提のコード × 旧スキーマの DB」状態になり、認証機能が壊れる可能性があります。\n\n1. 即時 GitHub Actions の `auth-db-migration-apply-prod` ジョブログを確認\n2. **失敗が一過性のもの（DB 接続瞬断等）の場合**: Actions UI から `Re-run failed jobs` を実行\n3. **失敗が SQL レベルの問題の場合**: forward fix の修正 PR を作成し、緊急に `staging` → `main` を辿って適用\n4. 致命的なデータ毀損が発生した場合は Turso の **Point-in-Time Recovery (PITR)** を利用（提供条件は契約プランに依存するため、最新の Turso ドキュメント https://docs.turso.tech/ を参照。Turso Dashboard から復旧時刻を指定）\n\n### ロールバック方針: forward fix 原則\n\n本リポジトリでは `drizzle-kit` の `migrate down` 相当の機能を **採用しません**。理由は以下の通りです。\n\n- drizzle-kit 自体が `migrate down` を提供しない（Atlas には存在したが、Atlas を採用しない方針）\n- Better Auth 4 テーブルのスキーマ変更頻度は低く、down マイグレーションを維持するコストに見合わない\n- **問題発生時はロールバックではなく forward fix（修正 SQL を新規マイグレーションとして適用）で対処する**\n\n\u003e どうしても元のスキーマに戻したい場合は、過去マイグレーションを参考にした「逆操作 SQL」を新規マイグレーションとして書き、PR フローに乗せて段階適用してください（ただし、まず Vercel 側のコードロールバックで一時凌ぎする方が安全です）。\n\n### 認証 DB の Point-in-Time Recovery（PITR）\n\nTurso は Point-in-Time Recovery によるデータ復旧を提供しています。マイグレーションでデータ毀損が発生した場合の最終手段として利用します。\n\n- 操作は Turso Dashboard / `turso db restore` 経由で行います\n- 復旧操作は K（リポジトリオーナー）が実施します。実装担当者は症状を Issue / Slack で報告するに留めてください\n\n### Turso CLI のインストール（任意）\n\n\u003e 本リポジトリの通常開発では Turso CLI は **不要** です。`@libsql/client` および drizzle-kit は `.env.local` の `TURSO_DATABASE_URL` / `TURSO_AUTH_TOKEN` を使って Turso に直接接続するため、Turso CLI の認証セッションは経由しません。\n\u003e\n\u003e 以下のような **管理・調査用途** で Turso CLI を使いたい場合のみインストールしてください。\n\u003e\n\u003e - DB 一覧の確認 (`turso db list`)\n\u003e - DB シェルでの直接調査 (`turso db shell \u003cdb-name\u003e`)\n\u003e - 新規 DB の発行 (`turso db create`) — 通常は管理者作業\n\n```bash\n# macOS (Homebrew)\nbrew install tursodatabase/tap/turso\n\n# その他環境\ncurl -sSfL https://get.tur.so/install.sh | bash\n\n# ログイン（CLI で管理コマンドを実行する場合のみ）\nturso auth login\n```\n\n## Node.js のインストール\n\n24 系の最新を利用して下さい。\n\n複数プロジェクトで異なる Node.js のバージョンを利用する可能性があるので、Node.js 自体をバージョン管理出来るようにしておくのが無難です。\n\n以下は [mise](https://github.com/jdx/mise) を使った設定例です。\n\n```bash\nmise install node@24.12.0\n\nmise use node@24.12.0\n```\n\n## 依存 package のインストールと開発用アプリケーションサーバーの起動\n\n`npm ci` で依存 package をインストールします。\n\nその後 `npm run dev` でホットリロードが有効な状態でアプリケーションサーバーを起動します。\n\n`http://localhost:2222` でアクセス可能です。\n\n## メンテナンスモードについて\n\n[Vercel Edge Config](https://vercel.com/docs/storage/edge-config) を利用してメンテナンスモードを実現しています。\n\n以下から Vercel Edge Config を編集可能です。\n\nhttps://vercel.com/nekochans/lgtm-cat-frontend/stores\n\nそれぞれ以下のように対応しています。\n\n- `lgtm-cat-frontend-store` （本番用）\n- `stg-lgtm-cat-frontend-store` （ローカルを含む開発、ステージング用）\n\n\u003cimg width=\"1416\" alt=\"VercelEdgeConfig\" src=\"https://github.com/nekochans/lgtm-cat-frontend/assets/11032365/7cf65e37-9009-4a79-b039-8f9353ec5c54\"\u003e\n\nメンテナンスモードに移行する為には `isInMaintenance` を `true` に変更します。\n\n編集後は「Save」を押下するか `Command + s` で保存しないと反映されません。\n\n\u003cimg width=\"1415\" alt=\"VercelEdgeConfigEdit\" src=\"https://github.com/nekochans/lgtm-cat-frontend/assets/11032365/e61c7ff4-ded5-4e42-9ce9-0be2abb371bc\"\u003e\n\nメンテナンスモードになると全てのページでメンテナンス中を示すエラーページが表示されます。\n\n\u003cimg width=\"1069\" height=\"923\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/2fa02175-0214-426b-a702-19083c6f0917\" /\u003e\n\n## 開発でよく使うコマンド\n\n### `npm run lint`\n\n様々な linter を実行します。\n\n現在採用している linter は以下の通りです。（Prettier はどちらかと言うと Formatter）\n\n- [Prettier](https://prettier.io/)\n- [Ultracite](https://www.ultracite.ai/)\n\nルールは Ultracite の推奨ルールをそのまま利用しています。\n\nこちらのチェックでエラーになったコードは CI のチェックを通過する事が出来ません。\n\n### `npm run format`\n\nlinter で利用しているツールの format 機能を利用してソースコードの整形を行います。\n\n### `npm run storybook`\n\nStorybook のサーバーを起動します。\n\n`http://localhost:6006` でアクセス可能です。\n\n### `npm run test`\n\nテストを実行します。\n\n## npm package の注意点\n\n### `dependencies` と `devDependencies` を明確に使い分ける\n\n`npm install [package名]` を実行すると `package.json` の `dependencies` に追加されます。\n\n開発にしか利用しない package（テストコードや Linter, Storybook とか）は `devDependencies` に追加します。\n\n`devDependencies` に追加を行う為には `--save-dev` オプションを利用します。\n\n`npm install [package名] --save-dev`\n\n### `npm install` より `npm ci` を利用する\n\npackage 内容に変更を加えない場合は `npm install` ではなく `npm ci` を利用します。\n\n`npm install` は `package-lock.json` が変更されてしまう可能性がある為です。\n\nまた `npm ci` のほうが高速に動作します。\n\n### 場合によっては `--legacy-peer-deps` オプションを利用する\n\nnpm の 7 系からは依存 package の整合性を厳密にチェックするようになりました。\n\n具体的には [こんな感じのエラー](https://github.com/nekochans/lgtm-cat-frontend/issues/87#issuecomment-864349773) が発生します。\n\nこれを回避する為には、 `npm install --legacy-peer-deps` のように `--legacy-peer-deps` オプションを使って対応します。\n\nあまり良い方法ではありませんが、依存先の package が対応しない限りは、こちらではどうしようもないので、一時的に `--legacy-peer-deps` が必要な場合もあります。\n\n### `npm dedupe` でモジュールの依存関係を整理する\n\n`npm dedupe` を実行すると、モジュールの重複を整理してくれるので、複数の package を入れた後はこちらを実行するようにします。\n\n`npm install` 実行時に `--legacy-peer-deps` を実行した場合は `npm dedupe --legacy-peer-deps` のように実行する必要があります。\n\nhttps://docs.npmjs.com/cli/v7/commands/npm-dedupe\n\n## デプロイについて\n\nこのアプリケーションは [Vercel](https://vercel.com) によってホスティングされています。\n\nデフォルトブランチである `staging` ブランチにマージされるとステージング環境へデプロイされます。\n\n`staging` ブランチにマージされると以下のように `main` ブランチに対してリリース用のPRが自動で作成されます。（追加で `staging` にPRがマージされるとそれもリリース用のPRに追加されます）\n\n[リリースPRの例](https://github.com/nekochans/lgtm-cat-frontend/pull/423)\n\n`main` ブランチにマージされた時点で本番環境へデプロイが行われます。\n\n### Vercel 上の環境変数について\n\nアプリケーションで利用する環境変数が増えた場合は [こちら](https://vercel.com/nekochans/lgtm-cat-frontend/settings/environment-variables) より設定が必要です。\n\n環境変数は以下の環境毎に必要です。\n\n- Production\n  - 本番環境\n- Preview\n  - GitHub のブランチにプッシュされる度に一時的に生成される環境\n- Preview (staging)\n  - ステージング環境専用の環境変数が必要な場合は `staging` ブランチ用に設定します\n- Development\n  - [vercel dev](https://vercel.com/docs/cli#commands/dev) コマンドでローカル環境を起動した場合、この環境変数が利用されます。\n\n※ 全環境で共有な環境変数を設定する事も可能です。\n\n## 設計方針\n\nAI向けのドキュメントを参照してください。\n\n- [src/AGENTS.md](https://github.com/nekochans/lgtm-cat-frontend/blob/staging/src/AGENTS.md)\n\n## AI Coding Agent 向けの開発環境セットアップ\n\nこのプロジェクトは AI Coding Agent（Claude Code、Codex CLI 等）による開発を前提としています。AI エージェントの能力を最大限活かすために、以下のセットアップを推奨します。\n\n### 利用推奨 MCP サーバー\n\n`.mcp.json` に定義済みです。利用する AI エージェントから接続できるようにしておくと開発効率が大きく向上します。\n\n| MCP サーバー      | 用途                                 |\n| ----------------- | ------------------------------------ |\n| `serena`          | コード検索・シンボル単位の編集       |\n| `chrome-devtools` | ブラウザデバッグ・UI 動作確認        |\n| `next-devtools`   | Next.js のドキュメント調査・構成確認 |\n| `figma-desktop`   | Figma デザインの取り込み             |\n\n以下は `.mcp.json` をプロジェクトルートに設定する例です。\n\n※ `uvx` の利用には `uv` のインストールが必要です。 `brew install uv` などでインストールしてください。\n\n※ `serena` の `--project` には **このリポジトリをクローンした先の絶対パス** を指定する必要があります。下記サンプル中の `/path/to/lgtm-cat-frontend` の部分はご自身の環境に合わせて書き換えてください（例: `/Users/yourname/gitrepos/lgtm-cat-frontend`）。\n\n```json\n{\n  \"mcpServers\": {\n    \"serena\": {\n      \"type\": \"stdio\",\n      \"command\": \"uvx\",\n      \"args\": [\n        \"--from\",\n        \"git+https://github.com/oraios/serena\",\n        \"serena\",\n        \"start-mcp-server\",\n        \"--context\",\n        \"claude-code\",\n        \"--project\",\n        \"/path/to/lgtm-cat-frontend\"\n      ],\n      \"env\": {}\n    },\n    \"chrome-devtools\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"chrome-devtools-mcp@latest\"],\n      \"env\": {}\n    },\n    \"next-devtools\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"next-devtools-mcp@latest\"]\n    },\n    \"figma-desktop\": {\n      \"type\": \"http\",\n      \"url\": \"http://127.0.0.1:3845/mcp\"\n    }\n  }\n}\n```\n\n### 推奨ユーザーグローバル Skill\n\nブラウザ操作を伴う品質確認を AI エージェントに任せたい場合、[`agent-browser`](https://github.com/vercel-labs/agent-browser) のインストールを推奨します。\n\n[skills.sh](https://skills.sh/) 提供の `npx skills` CLI が、利用中の AI エージェントを自動検出し、それぞれの公式パスへ Skill を配置してくれます。\n\n```bash\nnpx skills add vercel-labs/agent-browser\n```\n\n各 AI エージェントの配置パスは以下のとおりです（自動検出されたエージェントすべてに配置されます）。\n\n| AI エージェント | 配置パス                          |\n| --------------- | --------------------------------- |\n| Claude Code     | `~/.claude/skills/agent-browser/` |\n| Codex CLI       | `~/.codex/skills/agent-browser/`  |\n\n特定のエージェントのみに限定したい場合は `-a` オプションを利用してください。\n\n```bash\n# Codex CLI のみに配置する例\nnpx skills add vercel-labs/agent-browser -a codex\n```\n\n#### Codex CLI 利用時の補足\n\nCodex CLI では、バージョンによって Skill 機能の有効化フラグが必要な場合があります。\n\n```bash\ncodex --enable skills\n```\n\n詳細は [Codex 公式の Agent Skills ドキュメント](https://developers.openai.com/codex/skills) を参照してください。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnekochans%2Flgtm-cat-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnekochans%2Flgtm-cat-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnekochans%2Flgtm-cat-frontend/lists"}