Imported from team-mirai/mirai-gikai (
AGENTS.md). Install upstream withnpx skills add team-mirai/mirai-gikai. Copyright stays with the author.
Repository Guidelines
Note:
CLAUDE.mdã¯AGENTS.mdãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ããã«ãŒã«ã®è¿œå ã»ç·šéã¯å¿ ãAGENTS.mdãçŽæ¥ç·šéããŠãã ããã
å¿ é ã«ãŒã«
Worktreeå¿ é
倿Žäœæ¥ã¯ãå¿ ã git worktree ãäœæããŠããéå§ããããšãã¡ã€ã³ã®ãªããžããªãã£ã¬ã¯ããªã§ã¯çŽæ¥å€æŽãè¡ããªãã
# 1. worktreeãäœæïŒå¿
ãdevelopããåå²ããããšïŒ
git worktree add ../mirai-gikai-<branch-name> -b <branch-name> develop
# 2. settings.local.jsonãã³ããŒïŒæš©éèšå®ã®ããå¿
é ïŒ
mkdir -p ../mirai-gikai-<branch-name>/.claude
cp .claude/settings.local.json ../mirai-gikai-<branch-name>/.claude/
# 3. .envãã³ããŒïŒç°å¢å€æ°ã®åŒãç¶ãïŒ
cp .env ../mirai-gikai-<branch-name>/
# 4. äŸåããã±ãŒãžãã€ã³ã¹ããŒã«
cd ../mirai-gikai-<branch-name> && pnpm install --frozen-lockfile
-
å¿ ã
developããåå²ãã:git worktree addã®æ«å°Ÿã«developãæå®ããããšãçç¥ãããšçŸåšã®ãã©ã³ãïŒHEADãå¥ãã©ã³ããæããŠããå ŽåïŒããåå²ããç¡é¢ä¿ãªã³ããããPRã«æ··å ¥ããåå ã«ãªãã -
ç®ç: developãã©ã³ããåžžã«ã¯ãªãŒã³ã«ä¿ã¡ãäœæ¥ã®åé¢ãšäžŠåäœæ¥ã容æã«ãã
-
developã«å€æŽãæ®ã£ãŠããå Žåã®ãªã«ããª: worktreeãäœæããåã«ãdevelopãã©ã³ãã®å€æŽãå¿ ãã¯ãªãŒã³ã¢ããããããšãäœæ¥éäžã®å€æŽãdevelopã«æ®ãããŸãŸworktreeãäœæã»äœæ¥ããããšã¯çŠæ¢ã
# 倿Žãéé¿ããŠããworktreeãäœæ git stash --include-untracked git worktree add ../mirai-gikai-<branch-name> -b <branch-name> # worktreeã«ç§»åããŠéé¿ãã倿Žãé©çš cd ../mirai-gikai-<branch-name> git stash pop
å®è£ å®äºåŸã¯å³PRäœæ
å®è£ å®äºåŸã¯ãã³ãããããŸããïŒãçã®ç¢ºèªãæãŸããã³ããã â push â PRäœæãŸã§äžæ°ã«é²ããããšããŠãŒã¶ãŒãžã®ç¢ºèªã¯äžèŠã
ã»ã«ãã¬ãã¥ãŒå¿ é
å®è£ å®äºåŸïŒã³ãããåïŒã«ã以äžã®é ã§å¿ ãã»ã«ãã¬ãã¥ãŒã宿œããããšïŒ
/simplifyãå®è¡: 倿Žã³ãŒãã®éè€ã»å¯èªæ§ã»å¹çã®èгç¹ããèªå·±ä¿®æ£ãè¡ããæãããªåé¡ãå ã«æœ°ããŠããããšã§ãåŸæ®µã®/reviewã®ææãã€ãºãæžããã/reviewãå®è¡: Codexã¬ãã¥ãŒã»test-guidelines-checkerã«ãããã¹ãã¬ã€ãã©ã€ã³ãã§ãã¯ã»code-quality-checkerã«ããã³ãŒãå質ãã§ãã¯ãåæã«å®è¡ãããææãããã°ä¿®æ£ããã
äž¡æ¹ãééãããããŠãŒã¶ãŒã«ç¢ºèªãããã®ãŸãŸã³ããã â push â PRäœæãŸã§äžæ°ã«é²ããããšïŒgh pr createïŒã
UI倿޿ã®ã¹ã¯ãªãŒã³ã·ã§ããå¿ é
PRäœæåŸã倿Žå·®åã«UIé¢é£ãã¡ã€ã«ïŒweb/src/, admin/src/ é
äžã® .tsx, .css çïŒãå«ãŸããå Žåã¯ãå¿
ã /pr-screenshot ã¹ãã«ãå®è¡ããããšãã¹ãã«ãèªåã§devãµãŒããŒèµ·åâã¹ã¯ãªãŒã³ã·ã§ããæ®åœ±âR2ã¢ããããŒãâPRæ¬ææŽæ°ãŸã§è¡ãã
䞊åPRäœæ
è€æ°ã®ç¬ç«ããPRãäœæããå Žå㯠/parallel-pr ã¹ãã«ã䜿çšããããšã
Linearã¿ã¹ã¯ã®ã¹ããŒã¿ã¹ç®¡ç
Linear issue IDïŒäŸ: MIR-123ïŒãå«ãã¿ã¹ã¯ãäŸé Œãããå Žåã以äžã®ã¿ã€ãã³ã°ã§ /linear ã¹ãã«ãå®è¡ããããšïŒ
- äœæ¥çææ:
/linear start <issue-id>ã§ã¹ããŒã¿ã¹ãIn Progressã«æŽæ° - PRäœæåŸ:
/linear review <issue-id>ã§ã¹ããŒã¿ã¹ãIn Reviewã«æŽæ°ããPR URLãissueã«ãªã³ã¯
Project Structure & Module Organization
web/ã¯å ¬éçš Next.js ã¢ããªãå ±é UI ã¯src/componentsãVitest ã®ãã¹ãã¯src/**/*.test.tsã«é 眮ããŸããadmin/ã¯ããŒã 3001 ã§åã管ççš Next.jsã審è°ãããŒãããã·ã¥ããŒãã¯ããã«éçŽããŸããpackages/supabase/ã¯å ±æ Supabase ã¯ã©ã€ã¢ã³ããšåå®çŸ©ãæäŸããçæçµæã¯types/ã«ä¿åããŸããpackages/shared/ã¯webãšadminã®äž¡æ¹ã§äœ¿ãå ±éããžãã¯ïŒAI ã¢ãã«å®çŸ©ãã¹ããªãŒã åŠççïŒãæäŸããŸããpackages/seed/ã¯ããŒã«ã«ããŒã¿æå ¥çšã® TypeScript ã¹ã¯ãªãã (run.ts,data.ts) ã管çããŸããsupabase/ã¯ãã€ã°ã¬ãŒã·ã§ã³ãšèšå®ãã¡ã€ã«ãä¿æããŸãã- èšèšããã¥ã¡ã³ãã¯
docs/ã«æ ŒçŽããã«ãŒãã®èšå®ãã¡ã€ã«ïŒbiome.json,pnpm-workspace.yamlãªã©ïŒã¯å šäœããªã·ãŒãšããŠæ±ããŸãã - web ãš admin ã§ã®ã³ãŒãå
±æ: åäžããžãã¯ã
web/ãšadmin/ã®äž¡æ¹ã§äœ¿ãå Žåã¯ãpackages/é äžã® workspace ããã±ãŒãžã«åãåºãããšãåãã³ãŒããäž¡ã¢ããªã«éè€é 眮ããã®ã¯çŠæ¢ãæ¢åã®@mirai-gikai/sharedããã±ãŒãžã«è¿œå ããããçšéã«å¿ããŠæ°ããããã±ãŒãžãäœæããã
Next.js ã¢ãŒããã¯ãã£æé
- Bulletproof React ã® feature ããŒã¹æ§æãæ¡çšããŸãã
app/é äžã®page.tsxã¯ãURL ãã©ã¡ãŒã¿ïŒparamsãsearchParamsïŒã®ååŸãš Feature ã³ã³ããŒãã³ããžã®åãæž¡ãã®ã¿ãæ åœããèãã©ãããŒãšãããã¥ãŒãããžãã¯ã¯features/é äžã«å®è£ ããŸãã- export çšã®
index.tsã¯äœæãããå¿ èŠãªãã¡ã€ã«ããçŽæ¥ import ããŸãã - Server Components ãæšæºãšããç¶æ
管çã»ã€ãã³ãåŠçãå¿
èŠãªå Žåã®ã¿
"use client"ãä»äžãã Client Component ã远å ããŸãã - ãã¡ã€ã«åã¯ã±ããã±ãŒã¹ãã³ã³ããŒãã³ãã¯ãã¹ã«ã«ã±ãŒã¹ã颿°ã¯ãã£ã¡ã«ã±ãŒã¹ã§çµ±äžããŸãã
Feature ãã£ã¬ã¯ããªæ§é
è€é㪠feature ã§ã¯ server/client/shared ã®3å±€æ§é ãæ¡çšããŸãïŒ
src/features/{feature}/
âââ server/
â âââ repositories/ # ããŒã¿ã¢ã¯ã»ã¹å±€ïŒSupabaseåŒã³åºããéçŽïŒ
â âââ components/ # Server Components
â âââ loaders/ # Server ComponentsçšããŒã¿ååŸé¢æ°
â âââ actions/ # Server Actions ("use server")
â âââ services/ # ããžãã¹ããžãã¯å±€
â âââ utils/ # Serverå°çšãŠãŒãã£ãªãã£
âââ client/
â âââ components/ # Client ComponentsïŒServer/Clientäž¡æ¹ã§äœ¿ãããã®ãå«ãïŒ
â âââ hooks/ # ã«ã¹ã¿ã ããã¯
â âââ utils/ # Clientå°çšãŠãŒãã£ãªãã£
âââ shared/
âââ types/ # å
±éåå®çŸ©
âââ utils/ # å
±éãŠãŒãã£ãªãã£
web/ ãš admin/ ã®äž¡æ¹ã§åã server/client/shared æ§æãæ¡çšããŸãããã ã admin/ ã§ã¯ Server Components ãäžå¿ã®ãã client/ ãã£ã¬ã¯ããªãçç¥ããŠãã feature ããããŸãã
- ServeråŽãã¡ã€ã«ã«ã¯
"server-only"ããClient Componentsã«ã¯"use client"ãä»äž - åå®çŸ©ãServer/Clientäž¡æ¹ã§äœ¿ã颿°ã¯
shared/ã«é 眮 - çŽç²é¢æ°ã®åãåºã: æ°èŠå®è£
æãå€éšäŸåïŒDBã»APIã»èªèšŒçïŒãæããªãèšç®ã»å€æã»å€å®ããžãã¯ã¯çŽç²é¢æ°ãšããŠ
utils/ã«åãåºãããšãé 眮å ã¯çšéã«å¿ããŠshared/utils/ãserver/utils/ãclient/utils/ãéžæããã - ã·ã³ãã«ãª feature ã¯åŸæ¥ã®
components|actions|api|typesæ§æã§ãå¯
Repository ã¬ã€ã€ãŒã®è©³çŽ°ã¯ docs/repository-layer.md ãåç §ã
Build, Test, and Development Commands
- äŸåå°å
¥ã¯
pnpm installãå šãŠã®ã¹ã¯ãªãã㯠pnpm çµç±ã§å®è¡ããŸãã pnpm devã¯.envãå ±æãã€ã€webã»adminã»åããã±ãŒãžã® dev ãµãŒããŒã䞊åèµ·åããŸããpnpm testã§ã¯ãŒã¯ã¹ããŒã¹æšªæã® Vitest ãå®è¡ã屿å®è¡ã¯pnpm --filter web testãtest:watchãå©çšããŸãã- å質ã²ãŒããšããŠ
pnpm lintïŒBiome format+lintïŒãšpnpm typecheckã PR åã«ééãããŸãã - DB é¢é£ã¯
pnpm db:resetãpnpm db:migrateãpnpm db:types:genãpnpm seedãçšéã«å¿ããŠçµã¿åãããŸãã
Coding Style & Naming Conventions
- Biome ã 2 ã¹ããŒã¹ã€ã³ãã³ããLFãããã«ã¯ã©ãŒããã»ãã³ãã³ã80 æåå¹ ã匷å¶ããŸãã
- React ã³ã³ããŒãã³ããšå ¬éå㯠PascalCaseãããã¯ããŠãŒãã£ãªãã£ã¯ camelCase ãç¶æããŸãã
- ãã¡ã€ã«åã¯
bill-contents-data.tsã®ããã«ããŒã¯ãŒãã€ãã³ã§è¡šèšããã¹ã¿ã€ã«ã¯ Tailwind ãŠãŒãã£ãªãã£ãå ã«æ€èšããŸãã - ã¢ã€ã³ã³: ã€ã³ã©ã€ã³SVGã¯çŠæ¢ã§ããå¿
ã
lucide-reactããã¢ã€ã³ã³ã³ã³ããŒãã³ããã€ã³ããŒãããŠäœ¿çšããŠãã ããã - ãã¿ã³:
<button>ã¿ã°ã®äœ¿çšã¯çŠæ¢ã§ããå¿ ã@/components/ui/buttonã®Buttonã³ã³ããŒãã³ãã䜿çšããŠãã ããã - è²: ã€ã³ã©ã€ã³ã«ã©ãŒã³ãŒãïŒ
text-[#xxx],bg-[#xxx],border-[#xxx]çã® arbitrary value ã style 屿§ã§ã®çŽæ¥æå®ïŒã¯çŠæ¢ã§ããå¿ ãglobals.cssã®@theme inlineã§å®çŸ©æžã¿ã®ã«ã©ãŒããŒã¯ã³ïŒtext-mirai-text,bg-primary,border-primary-accentçïŒã䜿çšããŠãã ãããæ°ããè²ãå¿ èŠãªå Žåã¯ããŸãglobals.cssã«ããŒã¯ã³ã远å ããŠãã䜿çšããããšãæ¢åããŒã¯ã³äžèЧã¯web/src/app/globals.cssã®@theme inlineãããã¯ãåç §ã - Figmaå®è£
: Figmaã®URLããUIãå®è£
ããéãã¹ã¯ãªãŒã³ã·ã§ããã ãã§è²ããµã€ãºãæšæž¬ããªãããšãå¿
ã
get_variable_defsãget_design_contextã§ã«ã©ãŒã³ãŒãã»ãã©ã³ããµã€ãºã»ã¹ããŒã·ã³ã°çã®æ£ç¢ºãªå€ãååŸããæ¢åã®ãã¶ã€ã³ããŒã¯ã³ãšã®å¯Ÿå¿ã確èªããŠããå®è£ ããã
admin å éšã«ãŒãå®çŸ©
- admin ã¢ããªã®å
éšãªã³ã¯ïŒLink href, router.push, redirectïŒã«ã¯
@/lib/routesã®é¢æ°ã䜿çšããããšãæååãªãã©ã«ã§ã®ã«ãŒãçŽæžãã¯çŠæ¢ã - æ°ããããŒãžïŒpage.tsxïŒã远å ããã
admin/src/lib/routes.tsã«ãã«ãŒã颿°ã远å ããããšããã¹ãïŒroutes.test.tsïŒã page.tsx ãšã®åæãæ€èšŒããã
web å éšã«ãŒãå®çŸ©
- web ã¢ããªã®å
éšãªã³ã¯ïŒLink href, router.push, redirect, revalidatePathïŒã«ã¯
@/lib/routesã®é¢æ°ã䜿çšããããšãæååãªãã©ã«ã§ã®ã«ãŒãçŽæžãã¯çŠæ¢ã - æ°ããããŒãžïŒpage.tsxïŒã远å ããã
web/src/lib/routes.tsã«ãã«ãŒã颿°ã远å ããããšããã¹ãïŒroutes.test.tsïŒã page.tsx ãšã®åæãæ€èšŒããã - preview ä»ããªã³ã¯çæã¯
interview-links.tsã®ã©ãããŒé¢æ°ã䜿çšããããšã
Testing Guidelines
- Vitest ã®åäœãã¹ãã
*.test.tsãšããŠå®è£ ãšåéå±€ã«é 眮ããAI ã³ã¹ãèšç®ã Markdown åŠçãªã©ããŒã¿å€æã®å€æŽæã¯å¿ ãååž°ãã¹ãã远å ããŸãã - çŽç²é¢æ°ã«ã¯ãã¹ãå¿
é :
utils/ã«åãåºããçŽç²é¢æ°ã¯ãæ°èŠäœææã«å¿ ã*.test.tsãåéå±€ã«äœæããŠãã¹ããæžããŠãã ããã - mock ã¯æ¥µå䜿ããªã:
vi.mock("server-only")çã®ã¢ãã¯ã«é Œããããã¹ã察象ã®ããžãã¯ãçŽç²é¢æ°ãšããŠshared/ã«åãåºããŠãããã¹ãããŠãã ãããserver-onlyãå€éšäŸåãå«ããã¡ã€ã«ãã㯠re-export ã§åç §ãç¶æããŸãã - ããŒã«ã«ãµãŒãã¹ã¯ real ã§åãã: Supabase ãªã©ããŒã«ã«ã§èµ·åã§ãããµãŒãã¹ã¯ã¢ãã¯ãããå®éã®ããŒã«ã«ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããŠãã¹ãããŸãã
- DB functionïŒRPCïŒã«ã¯çµ±åãã¹ãå¿
é :
supabase/migrations/ã§DB function ã远å ã»å€æŽããå Žåãtests/supabase/db-function/ã«çµ±åãã¹ããäœæããããšããã¹ããã¡ã€ã«åã¯{function-name}.test.tsãšããtests/supabase/utils.tsã®ãã«ããŒãå©çšããããœãŒãã»ãã£ã«ã¿ã»éèšããžãã¯ãDBåŽã«ããå Žåãã¢ããªå±€ã®ãŠããããã¹ãã§ã¯æ€åºã§ããªããã°ïŒäŸ: ãã«ããŒãã«ã¹ãã£ã³ãäžæ£ãªãœãŒãé ïŒã鲿¢ã§ããŸãã - å€éš API 㯠DI ã§ã¢ãã¯ãã: OpenAI ãªã©ã®å€éš API ã¯ã©ã€ã¢ã³ãã¯ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ãããã¹ãã§ã¯ Fake/Mock å®è£ ã«å·®ãæ¿ããŸãã
- PR åã«
pnpm --filter web test:watchã§å€±æãæ©ææ€ç¥ããå¿ èŠã«å¿ããŠvitest run --coverageã§ã«ãã¬ããžäœäžã確èªããŸãã - ãã¹ãã®æžãæ¹ã»æ§é åã»ã³ãŒãäŸãªã©ã®è©³çŽ°ã¯ docs/ãã¹ãã¬ã€ãã©ã€ã³.md ãåç §ã
Commit & Pull Request Guidelines
- pushåã®ããŒã«ã«æ€èšŒïŒå¿
é ïŒ:
git pushã®åã«ãCIãšåãæ€èšŒã³ãã³ããããŒã«ã«ã§å®è¡ããŠééã確èªããããšãCIã§èœã¡ãŠããçŽãã®ã§ã¯ãªããæå ã§äºåã«æ€ç¥ãããpnpm lint # Biome format + lint ãã§ã㯠pnpm typecheck # TypeScript åãã§ã㯠pnpm build # Next.js ãã«ããã§ã㯠pnpm test # å šã¯ãŒã¯ã¹ããŒã¹ã®ãã¹ãå®è¡ - push / PRäœæåã®GitHubç¶æ
確èªïŒå¿
é ïŒ:
git pushãPRäœæãè¡ãåã«ãå¿ ãgh pr listãgh pr view <çªå·>ã§GitHubäžã®PRç¶æ ïŒopen/merged/closedïŒã確èªããããšãããŒãžæžã¿ãã©ã³ããžã®è¿œå pushããæ¢ã«ã¯ããŒãºãããPRãšã®éè€ãé²ãã - PRã®ã¹ã³ãŒããå³å®: PRã«ã¯çŸåšã®ã¿ã¹ã¯ã«é¢ä¿ãã倿Žã®ã¿ãå«ããããšãã¬ãã¥ãŒãã»ã«ãã¬ãã¥ãŒã§ç¡é¢ä¿ãªå€æŽïŒå¥ã¿ã¹ã¯ã®ä¿®æ£ãã€ãã§ã®ãªãã¡ã¯ã¿çïŒãæ··å ¥ããŠããå Žåã¯ãã³ãããåã«åãé€ãã
- ã³ãããã¡ãã»ãŒãžã¯æ¢åå±¥æŽåæ§ãçãåœä»€åœ¢äž»äœïŒæ¥æ¬èªå¯ïŒãšãã課é¡é£æºã¯
(#id)ãä»äžããŸãã - PR ã§ã¯ã¹ã³ãŒãæŠèŠãå®è¡ãã¹ãèšé²ïŒäŸ:
pnpm dev,pnpm --filter web testïŒãUI 倿޿ã®ã¹ã¯ãªãŒã³ã·ã§ããã GIF ãæ·»ä»ããŸãã - ã¹ããŒãã»ã·ãŒãã»ç°å¢å€æ°ã®å€æŽã¯æ¬æã§æç€ºããã¬ãã¥ãŒãã£ãŒãããã¯ãžã®å¯Ÿå¿ç¶æ³ã远跡ã³ã¡ã³ãã§å ±æã㊠Ready for Review ã«åãæ¿ããŸãã
- ã€ã·ã¥ãŒé£æº: ç¹å®ã®ã€ã·ã¥ãŒã«å¯Ÿå¿ãã PR ãäœæããå ŽåãPR æ¬æã«
Resolves #123ã®åœ¢åŒã§èšèŒããŠãã ãããããã«ãã PR ããŒãžæã«ã€ã·ã¥ãŒãèªåã¯ããŒãºãããŸããè€æ°ã®ã€ã·ã¥ãŒãéããå Žåã¯Resolves #123, Resolves #456ã®ããã«åæããŸãã - PRäœæåŸã®ç¶æ
確èªïŒå¿
é ïŒ: PRäœæåŸã以äžã®4ç¹ã確èªããããšïŒ
- Conflict確èª:
gh pr view <çªå·> --json mergeable,mergeStateStatusã§ããŒãžå¯èœã確èªãconflictãããã°è§£æ¶ããŠpushããã - CI確èª:
gh pr checks <çªå·>ã§CIã®ç¶æ ã確èªã倱æãããã°åå ã調æ»ãä¿®æ£ããŠpushãããCIãå®è¡äžã®å Žåã¯å®äºãŸã§åŸ ã€ã - CodeRabbitã¬ãã¥ãŒç¢ºèª: CodeRabbitã®ã¬ãã¥ãŒãå±ããŸã§åŸ
ã£ãŠããã³ã¡ã³ãã確èªãããã¬ãã¥ãŒã¯éåžž2ã3åã§å±ãã
gh api repos/{owner}/{repo}/pulls/{number}/commentsã§ã³ã¡ã³ããååŸãã空ãªãå°ãåŸ ã£ãŠåååŸãããMinor以äžïŒMinor/Major/CriticalïŒã®ææã¯ãã¹ãŠå¯Ÿå¿ãå¿ é ã 察å¿ãšã¯ãä¿®æ£ããŠpushããŸãã¯ãã¹ãããçç±ã該åœã³ã¡ã³ãã«è¿ä¿¡ãã®ãããããNitpickã®ã¿ã¹ãããå¯ã - å¯Ÿå¿æžã¿ã³ã¡ã³ããžã®è¿ä¿¡ãšresolveïŒå¿
é ïŒ: å¯Ÿå¿æžã¿ã³ã¡ã³ãïŒä¿®æ£pushããå Žåã»ã¹ãããããå Žåã®äž¡æ¹ïŒã«å¯ŸããŠã該åœã³ã¡ã³ããžè¿ä¿¡ããäžã§GraphQL APIã§resolveãããè¿ä¿¡ãªãã§é»ã£ãŠresolveããã®ã¯çŠæ¢ã
# 1. 該åœã³ã¡ã³ãã«è¿ä¿¡ïŒå¯Ÿå¿å å®¹ã®æŠèŠãèšèŒãä¿®æ£ã®å Žåã¯ã³ãããSHAãå«ããïŒ gh api repos/{owner}/{repo}/pulls/{number}/comments -X POST \ -F in_reply_to=<ã³ã¡ã³ãID> \ -f body='ä¿®æ£ããŸãã (<ã³ãããSHA>)ã<察å¿å 容ã®èŠçŽ>' # 2. ã¹ã¬ããäžèЧååŸïŒisResolved=falseã®ãã®ãæªresolveïŒ gh api graphql -f query='{ repository(owner: "{owner}", name: "{repo}") { pullRequest(number: <çªå·>) { reviewThreads(first: 50) { nodes { id isResolved comments(first: 1) { nodes { body path } } } } } } }' # 3. å¯Ÿå¿æžã¿ã¹ã¬ãããresolve gh api graphql -f query='mutation { resolveReviewThread(input: {threadId: "<ã¹ã¬ããID>"}) { thread { isResolved } } }'
- Conflict確èª:
Supabase & Environment Notes
- ããŒã«ã«éçºåã«
npx supabase startãå®è¡ãã.env.exampleã.envã«ã³ããŒããŠå€ãæŽããŸãã - ã¹ããŒã倿޿ã¯
supabase/migrationsã®ãã€ã°ã¬ãŒã·ã§ã³ãšpackages/supabase/types/supabase.types.tsã®åçæãã¡ã€ã«ãã»ããã§ã³ãããããŸãã pnpm seedã¯admin@example.com / admin123456ãå«ãæ€èšŒããŒã¿ãæå ¥ãããããéçºçšéã«éå®ããŠãã ããã- RLSãšã¢ã¯ã»ã¹ãã¿ãŒã³: ãã€ã°ã¬ãŒã·ã§ã³ã§ã¯å¿
ã
alter table <ããŒãã«å> enable row level security;ãèšè¿°ããŠRLSãæå¹åããããšããã ã ããªã·ãŒã¯å®çŸ©ããªãïŒããã©ã«ãå šæåŠïŒãããŒã¿ã¢ã¯ã»ã¹ã¯ãã¹ãŠcreateAdminClient()ïŒSupabase Secret KeyïŒçµç±ã§è¡ããèªå¯ããžãã¯ã¯ã¢ããªã±ãŒã·ã§ã³å±€ïŒServer Actions / LoadersïŒã§å®è£ ããã
ããã¥ã¡ã³ãäœæã«ãŒã«
- èŠä»¶å®çŸ©ãå®è£ èšç»ããŸãšããéã¯è«ç¹ãå ã«æŽãåºããäžæç¹ã確èªããŠãã Markdown ã§æŽçããŸãã
- èšèšææžã¯
docs/é äžã«YYYYMMDD_HHMM_äœæ¥å 容.mdã§ä¿åããŠãã ããïŒäŸ:docs/20250815_1430_ãŠãŒã¶ãŒèªèšŒã·ã¹ãã èšèš.mdïŒã - æ¢åè³æã«å€§ããªå€æŽãå ããå Žåã¯æ°ãããã¡ã€ã«ãšããŠæ®ããæŽæ°å±¥æŽããã©ããããã«ããŸãã
GitHub Issueäœæã«ãŒã«
GitHub Issueãäœæããéã¯ã以äžã®ã«ãŒã«ã«åŸãããšïŒ
- ãã©ã³å 容ãç°¡ç¥åããããã®ãŸãŸissueã«èšèŒãã
- ã³ãŒãäŸãSQLãåå®çŸ©ãªã©ã®è©³çްãªå®è£ å 容ãå«ãã
- æ€èšŒæ¹æ³ãå ·äœçã«èšèŒãã
