๐• f B! L
ๆกˆไปถใƒปๆฑ‚ไบบๆ•ฐ 12,345ไปถ
ๆกˆไปถใ‚’ๆŽขใ™๏ผˆๆบ–ๅ‚™ไธญ๏ผ‰ ใ‚จใƒผใ‚ธใ‚งใƒณใƒˆใ‚’ๆŽขใ™๏ผˆๆบ–ๅ‚™ไธญ๏ผ‰ ใŠๅฝน็ซ‹ใกๆƒ…ๅ ฑ ใƒญใ‚ฐใ‚คใƒณ
ๆกˆไปถใƒปๆฑ‚ไบบๆ•ฐ 12,345ไปถ
OpenAI Codex CLIใฎใ‚ซใ‚นใ‚ฟใƒ ่จญๅฎšใจใ‚จใ‚คใƒชใ‚ขใ‚นๆดป็”จๆณ•

OpenAI Codex CLIใฎใ‚ซใ‚นใ‚ฟใƒ ่จญๅฎšใจใ‚จใ‚คใƒชใ‚ขใ‚นๆดป็”จๆณ•

OpenAI Codex CLI่จญๅฎšใ‚จใ‚คใƒชใ‚ขใ‚นใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บSESใ‚จใƒณใ‚ธใƒ‹ใ‚ข
็›ฎๆฌก
โšก 3็ง’ใงใ‚ใ‹ใ‚‹๏ผใ“ใฎ่จ˜ไบ‹ใฎใƒใ‚คใƒณใƒˆ
  • codex.yaml ใงใƒขใƒ‡ใƒซใƒปtemperatureใƒปใ‚ตใƒณใƒ‰ใƒœใƒƒใ‚ฏใ‚นใƒใƒชใ‚ทใƒผใ‚’ใ‚ฐใƒญใƒผใƒใƒซใซ่จญๅฎšใงใใ€ๆฏŽๅ›žใฎใ‚ชใƒ—ใ‚ทใƒงใƒณๆŒ‡ๅฎšใŒไธ่ฆใซใชใ‚‹
  • AGENTS.md ใ‚’ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใซ็ฝฎใใ“ใจใงใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎๆŒ‡็คบใƒปใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ‚’AIใซๅธธๆ™‚ไผใˆใ‚‰ใ‚Œใ‚‹
  • ใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’่จญๅฎšใ™ใ‚Œใฐใ€Œcxfใ€ใ€Œcxtใ€ใชใฉใฎ็Ÿญ็ธฎใ‚ณใƒžใƒณใƒ‰ใงๆ—ฅๅธธ็š„ใชๆ“ไฝœใ‚’็žฌๆ™‚ใซๅฎŸ่กŒใงใใ‚‹

OpenAI Codex CLIใ‚’ไฝฟใ„ๅง‹ใ‚ใฆๆ•ฐๆ—ฅ็ตŒใคใจใ€ใ€ŒๆฏŽๅ›žๅŒใ˜ใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใฎใŒ้ขๅ€’ใ€ใ€Œใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ‚’ใ„ใกใ„ใก่ชฌๆ˜Žใ™ใ‚‹ใฎใŒๅคงๅค‰ใ€ใจใ„ใ†ๆ‚ฉใฟใŒๅ‡บใฆใใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎšใฎใพใพใงใฏใ€Codex CLIใฎ็œŸใฎๅŠ›ใ‚’ๅผ•ใๅ‡บใ›ใฆใ„ใพใ›ใ‚“ใ€‚

้ฉๅˆ‡ใซใ‚ซใ‚นใ‚ฟใƒ ่จญๅฎšใจใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’ๆ•ดๅ‚™ใ™ใ‚‹ใ“ใจใงใ€ไฝœๆฅญๅŠน็އใฏๆ ผๆฎตใซไธŠใŒใ‚Šใพใ™ใ€‚ๆœฌ่จ˜ไบ‹ใงใฏใ€OpenAI Codex CLIใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎๆ›ธใๆ–นใ‹ใ‚‰ใ€ๅฎŸ็”จ็š„ใชใ‚จใ‚คใƒชใ‚ขใ‚นใƒ‘ใ‚ฟใƒผใƒณใ€SES็พๅ ดใงใฎๆŽจๅฅจ่จญๅฎšใพใงใ€ๅฎŸ่ทต็š„ใชๅ†…ๅฎนใ‚’็ถฒ็พ…ใ—ใฆ่งฃ่ชฌใ—ใพใ™ใ€‚

Codex CLIใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซไฝ“็ณปใ‚’็†่งฃใ™ใ‚‹

Codex CLIใซใฏ2็จฎ้กžใฎไธป่ฆใช่จญๅฎšใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ™ใ€‚ใใ‚Œใžใ‚Œใฎๅฝนๅ‰ฒใ‚’ๆญฃ็ขบใซ็†่งฃใ™ใ‚‹ใ“ใจใŒ่จญๅฎšใฎ็ฌฌไธ€ๆญฉใงใ™ใ€‚

2็จฎ้กžใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎ้•ใ„
ใƒ•ใ‚กใ‚คใƒซ้…็ฝฎๅ ดๆ‰€้ฉ็”จ็ฏ„ๅ›ฒไธปใช็”จ้€”
codex.yaml~/.codex/codex.yamlใ‚ฐใƒญใƒผใƒใƒซ๏ผˆๅ…จใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ๏ผ‰ใƒขใƒ‡ใƒซใ€temperatureใ€ใ‚ตใƒณใƒ‰ใƒœใƒƒใ‚ฏใ‚นใชใฉใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎš
AGENTS.mdใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆ็‰นๅฎšใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใฟใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๆฆ‚่ฆใ€็ฆๆญขไบ‹้ …

ใ“ใฎ2ใคใ‚’็ต„ใฟๅˆใ‚ใ›ใ‚‹ใ“ใจใงใ€ใ€Œใฉใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใ‚‚ๅ…ฑ้€šใฎๅ‹•ไฝœใ€ใจใ€Œใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎๆŒ‡็คบใ€ใ‚’ๅˆ†ใ‘ใฆ็ฎก็†ใงใใพใ™ใ€‚

codex.yaml โ€” ใ‚ฐใƒญใƒผใƒใƒซ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ

ๅŸบๆœฌๆง‹้€ ใจ่จญๅฎš้ …็›ฎ

~/.codex/codex.yaml ใฏใƒ›ใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎ .codex ใƒ•ใ‚ฉใƒซใƒ€ๅ†…ใซไฝœๆˆใ—ใพใ™ใ€‚

# ่จญๅฎšใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ไฝœๆˆ
mkdir -p ~/.codex

# ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’้–‹ใ
code ~/.codex/codex.yaml

ๅŸบๆœฌ็š„ใช่จญๅฎšไพ‹๏ผš

# ~/.codex/codex.yaml

# ไฝฟ็”จใ™ใ‚‹ใƒขใƒ‡ใƒซใฎๆŒ‡ๅฎš
model: gpt-4o

# ๅ‡บๅŠ›ใฎๅ‰ต้€ ๆ€งใƒฌใƒ™ใƒซ๏ผˆ0.0ใ€œ2.0ใ€ไฝŽใ„ใปใฉไธ€่ฒซๆ€ง้‡่ฆ–๏ผ‰
temperature: 0.1

# ใ‚ตใƒณใƒ‰ใƒœใƒƒใ‚ฏใ‚นใƒใƒชใ‚ทใƒผ๏ผˆๅพŒ่ฟฐ๏ผ‰
sandbox: workspace-write

# ใ‚ฟใ‚คใƒ ใ‚ขใ‚ฆใƒˆ่จญๅฎš๏ผˆ็ง’๏ผ‰
timeout: 120

# ใƒญใ‚ฐใƒฌใƒ™ใƒซ๏ผˆdebug, info, warn, error๏ผ‰
log-level: warn

# ่‡ชๅ‹•ๆ‰ฟ่ชใƒใƒชใ‚ทใƒผ๏ผˆon-failure, on-request, never๏ผ‰
approval-policy: on-failure
temperatureใฎ้ธใณๆ–น

ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ็”จ้€”ใงใฏ 0.1 ๅ‰ๅพŒใฎไฝŽใ„ๅ€คใŒๆŽจๅฅจใงใ™ใ€‚้ซ˜ใ„temperatureใฏๅ‰ต้€ ็š„ใชๆ–‡็ซ ็”Ÿๆˆใซใฏๅ‘ใใพใ™ใŒใ€ใ‚ณใƒผใƒ‰ใงใฏไบˆๆธฌไธ่ƒฝใชๅค‰ๆ›ดใŒๆททๅ…ฅใ—ใ‚„ใ™ใใชใ‚Šใพใ™ใ€‚่จญๅฎšใ—ใชใ„ๅ ดๅˆใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฏ 1.0 ใงใ™ใ€‚

ใƒขใƒ‡ใƒซใฎ้ธๆŠž

2026ๅนด2ๆœˆๆ™‚็‚นใงๅˆฉ็”จๅฏ่ƒฝใชไธป่ฆใƒขใƒ‡ใƒซ๏ผš

# ๆœ€้ซ˜็ฒพๅบฆ๏ผˆ่ค‡้›‘ใชใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใƒป่จญ่จˆไฝœๆฅญๅ‘ใ‘๏ผ‰
model: o3

# ใƒใƒฉใƒณใ‚นๅž‹๏ผˆๆ—ฅๅธธ็š„ใชใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐไฝœๆฅญๅ‘ใ‘๏ผ‰
model: gpt-4o

# ้ซ˜้€ŸใƒปไฝŽใ‚ณใ‚นใƒˆ๏ผˆๅ˜็ด”ใชใ‚ฟใ‚นใ‚ฏใƒป้ ป็นใช็ขบ่ชๅ‘ใ‘๏ผ‰
model: gpt-4o-mini

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆ€ง่ณชใซๅฟœใ˜ใฆใƒขใƒ‡ใƒซใ‚’ไฝฟใ„ๅˆ†ใ‘ใ‚‹ใ“ใจใŒใ‚ณใ‚นใƒˆๆœ€้ฉๅŒ–ใซใคใชใŒใ‚Šใพใ™ใ€‚SES็พๅ ดใงใฎๅฎŸๅ‹™ใงใฏ gpt-4o ใŒใƒใƒฉใƒณใ‚นๅž‹ใจใ—ใฆๆœ€ใ‚‚ไฝฟใ„ใ‚„ใ™ใ„้ธๆŠžใงใ™ใ€‚

approval-policyใฎ่จญๅฎš

approval-policy ใฏCodex CLIใŒใƒ•ใ‚กใ‚คใƒซๅค‰ๆ›ดใƒปใ‚ณใƒžใƒณใƒ‰ๅฎŸ่กŒใ‚’่กŒใ†้š›ใซ็ขบ่ชใ‚’ๆฑ‚ใ‚ใ‚‹ใ‚ฟใ‚คใƒŸใƒณใ‚ฐใ‚’ๅˆถๅพกใ—ใพใ™ใ€‚

# on-failure: ๅคฑๆ•—ใ—ใŸใจใ๏ผˆใพใŸใฏๅฑ้™บใชๆ“ไฝœ๏ผ‰ใ ใ‘็ขบ่ชใ‚’ๆฑ‚ใ‚ใ‚‹
# โ†’ ่‡ชๅ‹•ๅŒ–ใ‚’ๅ„ชๅ…ˆใ—ใŸใ„ๅ ด้ขใซ้ฉใ—ใฆใ„ใ‚‹
approval-policy: on-failure

# on-request: ใƒขใƒ‡ใƒซใŒ็ขบ่ชใ‚’ๆฑ‚ใ‚ใŸใจใใ ใ‘
# โ†’ ใƒใƒฉใƒณใ‚นๅž‹ใ€‚้€šๅธธใฏใ“ใ‚Œใงๅ•้กŒใชใ„
approval-policy: on-request

# never: ๅธธใซ็ขบ่ชใชใ—ใงๅฎŸ่กŒ
# โ†’ ๅฎŒๅ…จ่‡ชๅ‹•ๅŒ–ใ€‚ๆœฌ็•ช็’ฐๅขƒใ‚„้‡่ฆใชใƒชใƒใ‚ธใƒˆใƒชใงใฏ้žๆŽจๅฅจ
approval-policy: never

AGENTS.md โ€” ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎๆŒ‡็คบใƒ•ใ‚กใ‚คใƒซ

AGENTS.md ใฏใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ้…็ฝฎใ™ใ‚‹Markdownใƒ•ใ‚กใ‚คใƒซใงใ™ใ€‚Codex CLIใฏใ‚ฟใ‚นใ‚ฏใ‚’ๅฎŸ่กŒใ™ใ‚‹ๅ‰ใซๅฟ…ใšใ“ใฎใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใฟใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใจใ—ใฆไฝฟ็”จใ—ใพใ™ใ€‚

๐Ÿ‘ค
ๆฏŽๅ›žใ€Œใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฏTypeScriptใงใ€ใƒ†ใ‚นใƒˆใฏVitestใ‚’ไฝฟใฃใฆใ€ใจ่ชฌๆ˜Žใ™ใ‚‹ใฎใŒ้ขๅ€’ใงใ™ใ€‚
๐Ÿค–
AGENTS.md ใซใใฎๆƒ…ๅ ฑใ‚’ๆ›ธใ„ใฆใŠใ‘ใฐ่งฃๆฑบใงใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใซ็ฝฎใใจใ€ๆฏŽๅ›žใฎๆŒ‡็คบใชใ—ใซ่‡ชๅ‹•ใงใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใŒไผใ‚ใ‚Šใพใ™ใ€‚

AGENTS.mdใฎๅŸบๆœฌใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆ

# AGENTS.md

## ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๆฆ‚่ฆ
ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฏTypeScript + Node.js๏ผˆv20๏ผ‰ใงๆง‹็ฏ‰ใ•ใ‚ŒใŸRESTful APIใ‚ตใƒผใƒใƒผใงใ™ใ€‚
Express 5.x ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚

## ๆŠ€่ก“ใ‚นใ‚ฟใƒƒใ‚ฏ
- ่จ€่ชž: TypeScript 5.x
- ใƒฉใƒณใ‚ฟใ‚คใƒ : Node.js 20
- ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏ: Express 5
- ORM: Prisma
- ใƒ†ใ‚นใƒˆ: Vitest + Supertest
- Linter: ESLint + Prettier
- ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใƒžใƒใƒผใ‚ธใƒฃใƒผ: pnpm

## ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๆง‹้€ 

src/ controllers/ # HTTPใƒชใ‚ฏใ‚จใ‚นใƒˆใƒใƒณใƒ‰ใƒฉใƒผ services/ # ใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏ repositories/ # ใƒ‡ใƒผใ‚ฟใ‚ขใ‚ฏใ‚ปใ‚นๅฑค models/ # ๅž‹ๅฎš็พฉใƒปPrismaใ‚นใ‚ญใƒผใƒž utils/ # ใƒฆใƒผใƒ†ใ‚ฃใƒชใƒ†ใ‚ฃ้–ขๆ•ฐ middleware/ # Express ใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ข tests/ unit/ integration/


## ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„
- ใ™ในใฆใฎ้–ขๆ•ฐใซ JSDoc ใ‚ณใƒกใƒณใƒˆใ‚’่จ˜่ฟฐใ™ใ‚‹ใ“ใจ
- ใ‚จใƒฉใƒผใƒใƒณใƒ‰ใƒชใƒณใ‚ฐใฏ `src/utils/errors.ts` ใฎๅ…ฑ้€šใ‚ฏใƒฉใ‚นใ‚’ไฝฟใ†ใ“ใจ
- async/await ใ‚’ไฝฟใ„ใ€Promise ใƒใ‚งใƒผใƒณใฏ้ฟใ‘ใ‚‹ใ“ใจ
- any ๅž‹ใฎไฝฟ็”จใฏ็ฆๆญขใ€‚unknown ใ‚’ไฝฟใฃใฆๅž‹ใ‚ฌใƒผใƒ‰ใง็ตžใ‚‹ใ“ใจ
- ใƒ•ใ‚กใ‚คใƒซใฎใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใฏ named export ใ‚’ไฝฟใ„ใ€default export ใฏ้ฟใ‘ใ‚‹ใ“ใจ

## ใƒ†ใ‚นใƒˆ่ฆ็ด„
- ใƒ†ใ‚นใƒˆใƒ•ใ‚กใ‚คใƒซใฏ `*.test.ts` ใฎๅ‘ฝๅ่ฆๅ‰‡
- ใƒฆใƒ‹ใƒƒใƒˆใƒ†ใ‚นใƒˆใฏ `tests/unit/` ใซ้…็ฝฎ
- ็ตฑๅˆใƒ†ใ‚นใƒˆใฏ `tests/integration/` ใซ้…็ฝฎ
- ใƒ†ใ‚นใƒˆใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฏ Vitest ใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจ๏ผˆJestใฏไฝฟใ‚ใชใ„๏ผ‰
- ใƒขใƒƒใ‚ฏใฏ vi.mock() ใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจ

## ็ฆๆญขไบ‹้ …
- console.log ใ‚’ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใซๆฎ‹ใ•ใชใ„ใ“ใจ๏ผˆlogger.ts ใ‚’ไฝฟใ†ใ“ใจ๏ผ‰
- ็’ฐๅขƒๅค‰ๆ•ฐใ‚’็›ดๆŽฅ process.env ใงๅ‚็…งใ—ใชใ„ใ“ใจ๏ผˆconfig.ts ็ตŒ็”ฑใงๅ–ๅพ—ใ™ใ‚‹ใ“ใจ๏ผ‰
- node_modules ใ‚’็›ดๆŽฅ็ทจ้›†ใ—ใชใ„ใ“ใจ
- prisma/migrations/ ใƒ•ใ‚กใ‚คใƒซใ‚’ๆ‰‹ๅ‹•ใง็ทจ้›†ใ—ใชใ„ใ“ใจ

ใƒžใƒซใƒใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅฏพๅฟœใฎAGENTS.md

่ค‡ๆ•ฐใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงไฝœๆฅญใ™ใ‚‹ๅ ดๅˆใ€ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚‚ AGENTS.md ใ‚’้…็ฝฎใงใใพใ™ใ€‚Codex CLIใฏใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช้šŽๅฑคใ‚’้กใฃใฆ่ค‡ๆ•ฐใฎ AGENTS.md ใ‚’็ตๅˆใ—ใฆ่ชญใฟ่พผใฟใพใ™ใ€‚

my-monorepo/
โ”œโ”€โ”€ AGENTS.md          # ใƒขใƒŽใƒฌใƒๅ…จไฝ“ใฎๅ…ฑ้€š่จญๅฎš
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ frontend/
โ”‚   โ”‚   โ””โ”€โ”€ AGENTS.md  # ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ๅ›บๆœ‰ใฎ่จญๅฎš
โ”‚   โ””โ”€โ”€ backend/
โ”‚       โ””โ”€โ”€ AGENTS.md  # ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ๅ›บๆœ‰ใฎ่จญๅฎš
โ””โ”€โ”€ packages/
    โ””โ”€โ”€ shared/
        โ””โ”€โ”€ AGENTS.md  # ๅ…ฑๆœ‰ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใฎ่จญๅฎš
# apps/frontend/AGENTS.md

## ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ๅ›บๆœ‰่จญๅฎš
- ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏ: React 19 + Vite
- ใ‚นใ‚ฟใ‚คใƒชใƒณใ‚ฐ: Tailwind CSS v4
- ็Šถๆ…‹็ฎก็†: Zustand
- ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใƒ†ใ‚นใƒˆ: Vitest + Testing Library
- E2Eใƒ†ใ‚นใƒˆ: Playwright

## ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆ่ฆ็ด„
- ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฏ้–ขๆ•ฐใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฎใฟไฝฟ็”จ
- props ใฎๅž‹ๅฎš็พฉใฏ interface ใงใฏใชใ type ใ‚’ไฝฟใ†ใ“ใจ
- ใ‚นใ‚ฟใ‚คใƒซใฏใ™ในใฆ Tailwind ใ‚ฏใƒฉใ‚นใง่จ˜่ฟฐ๏ผˆCSS modules ใฏไฝฟใ‚ใชใ„๏ผ‰

ใ‚จใ‚คใƒชใ‚ขใ‚นใฎ่จญๅฎšใจๆดป็”จๆณ•

ใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’่จญๅฎšใ™ใ‚‹ใ“ใจใงใ€ใ‚ˆใไฝฟใ†ใ‚ณใƒžใƒณใƒ‰ใ‚’็Ÿญ็ธฎใงใใพใ™ใ€‚ใ‚ทใ‚งใƒซใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใซ่ฟฝ่จ˜ใ—ใพใ™ใ€‚

ๅŸบๆœฌ็š„ใชใ‚จใ‚คใƒชใ‚ขใ‚น่จญๅฎš

# ~/.zshrc ใพใŸใฏ ~/.bashrc ใซ่ฟฝๅŠ 

# ๅŸบๆœฌใ‚จใ‚คใƒชใ‚ขใ‚น
alias cx="codex"

# ใƒ•ใƒซใ‚ชใƒผใƒˆๅฎŸ่กŒ๏ผˆ็ขบ่ชใชใ—๏ผ‰
alias cxf="codex --approval-policy=never"

# ใƒ†ใ‚นใƒˆ็”Ÿๆˆๅฐ‚็”จ
alias cxt="codex 'ใƒ†ใ‚นใƒˆใ‚’ๆ›ธใ„ใฆ'"

# ใ‚ณใƒผใƒ‰ใƒฌใƒ“ใƒฅใƒผๅฐ‚็”จ
alias cxr="codex 'ใ‚ณใƒผใƒ‰ใ‚’ใƒฌใƒ“ใƒฅใƒผใ—ใฆๅ•้กŒ็‚นใ‚’ๆŒ‡ๆ‘˜ใ—ใฆ'"

# ใƒ‡ใƒใƒƒใ‚ฐๆ”ฏๆด
alias cxd="codex 'ใ“ใฎใ‚จใƒฉใƒผใฎๅŽŸๅ› ใ‚’่ชฟๆŸปใ—ใฆไฟฎๆญฃใ—ใฆ'"

# ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ็”Ÿๆˆ
alias cxdoc="codex 'ใ“ใฎใ‚ณใƒผใƒ‰ใซJSDocใ‚ณใƒกใƒณใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ'"

# ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐ
alias cxrefactor="codex 'ใ“ใฎใ‚ณใƒผใƒ‰ใ‚’ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใ—ใฆใ€‚ๅฏ่ชญๆ€งใจไฟๅฎˆๆ€งใ‚’้‡่ฆ–ใ—ใฆ'"

่จญๅฎšๅพŒใฏไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใงๅๆ˜ ๏ผš

source ~/.zshrc
# ใพใŸใฏ
source ~/.bashrc

ๅผ•ๆ•ฐใ‚’ๅ—ใ‘ๅ–ใ‚‹้–ขๆ•ฐใ‚จใ‚คใƒชใ‚ขใ‚น

ใ‚ˆใ‚ŠๆŸ”่ปŸใชไฝฟใ„ๆ–นใฎใŸใ‚ใซใ€ใ‚ทใ‚งใƒซ้–ขๆ•ฐใจใ—ใฆๅฎš็พฉใ™ใ‚‹ๆ–นๆณ•ใ‚‚ใ‚ใ‚Šใพใ™๏ผš

# ~/.zshrc ใซ่ฟฝๅŠ 

# ็‰นๅฎšใƒ•ใ‚กใ‚คใƒซใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ™ใ‚‹้–ขๆ•ฐ
cxtest() {
  codex "$(echo "$1") ใฎใƒฆใƒ‹ใƒƒใƒˆใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚ใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใ‚‚ๅซใ‚ใฆ"
}

# ็‰นๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ใƒฌใƒ“ใƒฅใƒผใ™ใ‚‹้–ขๆ•ฐ
cxreview() {
  codex "$(echo "$1") ใ‚’ใ‚ณใƒผใƒ‰ใƒฌใƒ“ใƒฅใƒผใ—ใฆใ€‚ใƒใ‚ฐใ€ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นๅ•้กŒใ€ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃไธŠใฎๆ‡ธๅฟต็‚นใ‚’ๆŒ‡ๆ‘˜ใ—ใฆ"
}

# PRใฎๅค‰ๆ›ดใ‚’ใƒฌใƒ“ใƒฅใƒผใ™ใ‚‹้–ขๆ•ฐ
cxpr() {
  local diff=$(git diff HEAD~1)
  codex "ไปฅไธ‹ใฎgit diffใ‚’ใƒฌใƒ“ใƒฅใƒผใ—ใฆๅ•้กŒ็‚นใ‚’ๆŒ‡ๆ‘˜ใ—ใฆ๏ผš
$diff"
}

# ใ‚จใƒฉใƒผใƒกใƒƒใ‚ปใƒผใ‚ธใ‹ใ‚‰ไฟฎๆญฃๆ–นๆณ•ใ‚’่ชฟในใ‚‹้–ขๆ•ฐ
cxfix() {
  codex "ไปฅไธ‹ใฎใ‚จใƒฉใƒผใ‚’ไฟฎๆญฃใ—ใฆ๏ผš$(echo "$*")"
}

ไฝฟ็”จไพ‹๏ผš

# ็‰นๅฎšใƒ•ใ‚กใ‚คใƒซใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
cxtest src/utils/validation.ts

# ็‰นๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ใƒฌใƒ“ใƒฅใƒผ
cxreview src/services/payment.service.ts

# ๆœ€ๆ–ฐใ‚ณใƒŸใƒƒใƒˆใฎdiffใ‚’ใƒฌใƒ“ใƒฅใƒผ
cxpr

# ใ‚จใƒฉใƒผใƒกใƒƒใ‚ปใƒผใ‚ธใ‹ใ‚‰ไฟฎๆญฃ
cxfix "TypeError: Cannot read property 'id' of undefined at line 42"

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎใ‚จใ‚คใƒชใ‚ขใ‚น่จญๅฎš

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ”ใจใซ็•ฐใชใ‚‹ใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’็ฎก็†ใ—ใŸใ„ๅ ดๅˆใฏใ€.envrc๏ผˆdirenv๏ผ‰ใ‚„ .project.zshrc ใ‚’ๆดป็”จใงใใพใ™๏ผš

# .envrc๏ผˆdirenvใ‚’ไฝฟใ†ๅ ดๅˆ๏ผ‰
export CODEX_PROJECT="my-express-api"

# ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’่ชญใฟ่พผใ‚€
if [ -f .project.zshrc ]; then
  source .project.zshrc
fi
# .project.zshrc๏ผˆใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใซ้…็ฝฎ๏ผ‰

# Prismaใƒžใ‚คใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณไฝœๆฅญ
alias cxmigrate="codex 'Prismaใฎใ‚นใ‚ญใƒผใƒžๅค‰ๆ›ดใซๅˆใ‚ใ›ใฆใƒžใ‚คใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใƒ•ใ‚กใ‚คใƒซใ‚’็”Ÿๆˆใ—ใฆ'"

# APIใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆ่ฟฝๅŠ 
alias cxapi="codex 'RESTful APIใฎใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใ‚’่ฟฝๅŠ ใ—ใฆใ€‚controller, service, repositoryใฎ3ๅฑคๆง‹้€ ใง'"

# ใƒ†ใ‚นใƒˆๅฎŸ่กŒใจไฟฎๆญฃ
alias cxtest-fix="codex 'vitest ใ‚’ๅฎŸ่กŒใ—ใฆๅคฑๆ•—ใ—ใŸใƒ†ใ‚นใƒˆใ‚’ไฟฎๆญฃใ—ใฆ'"

ใ‚ตใƒณใƒ‰ใƒœใƒƒใ‚ฏใ‚นใƒใƒชใ‚ทใƒผใฎ่ฉณ็ดฐ่จญๅฎš

ใ‚ตใƒณใƒ‰ใƒœใƒƒใ‚ฏใ‚นใƒใƒชใ‚ทใƒผใฏCodex CLIใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใจ่‡ชๅ‹•ๅŒ–ใฎใƒใƒฉใƒณใ‚นใ‚’ๆฑบใ‚ใ‚‹้‡่ฆใช่จญๅฎšใงใ™ใ€‚

๐Ÿ‘ค
sandboxใฎ่จญๅฎšใฎ้•ใ„ใŒใ‚ˆใใ‚ใ‹ใ‚Šใพใ›ใ‚“ใ€‚ใฉใ‚Œใ‚’้ธในใฐใ„ใ„ใงใ™ใ‹๏ผŸ
๐Ÿค–
ไฝœๆฅญๅ†…ๅฎนใซใ‚ˆใฃใฆไฝฟใ„ๅˆ†ใ‘ใ‚‹ใฎใŒใƒ™ใ‚นใƒˆใงใ™ใ€‚ใ‚ณใƒผใƒ‰ใƒฌใƒ“ใƒฅใƒผใ‚„่ชฟๆŸปใชใ‚‰ read-onlyใ€ๅฎŸ่ฃ…ไฝœๆฅญใชใ‚‰ workspace-writeใ€ๅค–้ƒจ้€šไฟกใŒไธ่ฆใชไฝœๆฅญใชใ‚‰ network-disabled ใŒ้ฉๅˆ‡ใงใ™ใ€‚

ใ‚ตใƒณใƒ‰ใƒœใƒƒใ‚ฏใ‚นใƒใƒชใ‚ทใƒผใฎ็จฎ้กž

# read-only: ใƒ•ใ‚กใ‚คใƒซใฎ่ชญใฟๅ–ใ‚Šใฎใฟ่จฑๅฏ
# โ†’ ใ‚ณใƒผใƒ‰ใƒฌใƒ“ใƒฅใƒผใ€่ชฟๆŸปใ€่ณชๅ•ใธใฎๅ›ž็ญ”ใซๆœ€้ฉ
sandbox: read-only

# workspace-write: ใƒฏใƒผใ‚ฏใ‚นใƒšใƒผใ‚นๅ†…ใฎใƒ•ใ‚กใ‚คใƒซๆ›ธใ่พผใฟใ‚’่จฑๅฏ
# โ†’ ๅฎŸ่ฃ…ใ€ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใ€ใƒ†ใ‚นใƒˆ่ฟฝๅŠ ใซๆœ€้ฉ
sandbox: workspace-write

# network-disabled: ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใ‚ขใ‚ฏใ‚ปใ‚นใชใ—
# โ†’ ใ‚ชใƒ•ใƒฉใ‚คใƒณ็’ฐๅขƒใ‚„ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใŒๅŽณใ—ใ„็’ฐๅขƒใซ้ฉใ—ใฆใ„ใ‚‹
sandbox: network-disabled

ใ‚ทใƒŠใƒชใ‚ชๅˆฅๆŽจๅฅจ่จญๅฎš

# ใ‚ณใƒผใƒ‰ใƒฌใƒ“ใƒฅใƒผ็”จใฎ่จญๅฎš๏ผˆ~/.codex/codex-review.yaml๏ผ‰
model: o3
temperature: 0.0
sandbox: read-only
approval-policy: on-request

# ๅฎŸ่ฃ…ไฝœๆฅญ็”จใฎ่จญๅฎš๏ผˆ~/.codex/codex-impl.yaml๏ผ‰
model: gpt-4o
temperature: 0.1
sandbox: workspace-write
approval-policy: on-failure
timeout: 300

่ค‡ๆ•ฐใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹ใ‚จใ‚คใƒชใ‚ขใ‚น๏ผš

# ~/.zshrc ใซ่ฟฝๅŠ 

# ใƒฌใƒ“ใƒฅใƒผใƒขใƒผใƒ‰
alias cxrev="CODEX_CONFIG=~/.codex/codex-review.yaml codex"

# ๅฎŸ่ฃ…ใƒขใƒผใƒ‰
alias cximpl="CODEX_CONFIG=~/.codex/codex-impl.yaml codex"

ใƒžใƒซใƒใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ่จญๅฎš็ฎก็†

่ค‡ๆ•ฐใฎSESๆกˆไปถใ‚’ๆŽ›ใ‘ๆŒใกใ™ใ‚‹ๅ ดๅˆใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ”ใจใซ็•ฐใชใ‚‹่จญๅฎšใ‚’ๅŠน็އ็š„ใซ็ฎก็†ใ™ใ‚‹ๆ–นๆณ•ใ‚’็ดนไป‹ใ—ใพใ™ใ€‚

ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๆง‹ๆˆไพ‹

~/.codex/
โ”œโ”€โ”€ codex.yaml              # ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎš๏ผˆใƒ•ใ‚ฉใƒผใƒซใƒใƒƒใ‚ฏ๏ผ‰
โ”œโ”€โ”€ profiles/
โ”‚   โ”œโ”€โ”€ typescript-web.yaml # TypeScript Webใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ‘ใ‘
โ”‚   โ”œโ”€โ”€ python-api.yaml     # Python APIๅ‘ใ‘
โ”‚   โ”œโ”€โ”€ java-spring.yaml    # Java Springๅ‘ใ‘
โ”‚   โ””โ”€โ”€ legacy-php.yaml     # PHPใƒฌใ‚ฌใ‚ทใƒผๆกˆไปถๅ‘ใ‘
โ””โ”€โ”€ scripts/
    โ””โ”€โ”€ switch-profile.sh   # ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซๅˆ‡ใ‚Šๆ›ฟใˆใ‚นใ‚ฏใƒชใƒ—ใƒˆ
# ~/.codex/profiles/typescript-web.yaml
model: gpt-4o
temperature: 0.1
sandbox: workspace-write
approval-policy: on-failure

# ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎ่ฟฝๅŠ ๆŒ‡็คบ๏ผˆAGENTS.mdใ‚’่ฃœๅฎŒ๏ผ‰
system-prompt-suffix: |
  TypeScriptใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใ™ใ€‚
  ๅž‹ๅฎ‰ๅ…จๆ€งใ‚’ๆœ€ๅ„ชๅ…ˆใซใ—ใฆใใ ใ•ใ„ใ€‚
  anyๅž‹ใฎไฝฟ็”จใฏๅŽŸๅ‰‡็ฆๆญขใงใ™ใ€‚
# ~/.codex/profiles/legacy-php.yaml
model: gpt-4o
temperature: 0.2
sandbox: workspace-write
approval-policy: on-request  # ใƒฌใ‚ฌใ‚ทใƒผใ‚ณใƒผใƒ‰ใฏๆ…Ž้‡ใซ

system-prompt-suffix: |
  ใƒฌใ‚ฌใ‚ทใƒผPHPใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใ™ใ€‚
  PHP 7.4ใจใฎไบ’ๆ›ๆ€งใ‚’็ถญๆŒใ—ใฆใใ ใ•ใ„ใ€‚
  ๆ—ขๅญ˜ใฎใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐใ‚นใ‚ฟใ‚คใƒซใ‚’ๅฐŠ้‡ใ—ใ€ๅคงๅน…ใชๅค‰ๆ›ดใฏ้ฟใ‘ใฆใใ ใ•ใ„ใ€‚
  ๅค‰ๆ›ดๅ‰ใซๅฟ…ใšๅฝฑ้Ÿฟ็ฏ„ๅ›ฒใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚

ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซๅˆ‡ใ‚Šๆ›ฟใˆใ‚นใ‚ฏใƒชใƒ—ใƒˆ๏ผš

#!/bin/bash
# ~/.codex/scripts/switch-profile.sh

PROFILES_DIR="$HOME/.codex/profiles"
CODEX_CONFIG="$HOME/.codex/codex.yaml"

if [ -z "$1" ]; then
  echo "ไฝฟ็”จๆ–นๆณ•: switch-profile.sh <ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซๅ>"
  echo "ๅˆฉ็”จๅฏ่ƒฝใชใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซ:"
  ls "$PROFILES_DIR" | sed 's/\.yaml//'
  exit 1
fi

PROFILE="$PROFILES_DIR/$1.yaml"

if [ ! -f "$PROFILE" ]; then
  echo "ใ‚จใƒฉใƒผ: ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซ '$1' ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“"
  exit 1
fi

cp "$PROFILE" "$CODEX_CONFIG"
echo "ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซ '$1' ใ‚’้ฉ็”จใ—ใพใ—ใŸ"
# ใ‚จใ‚คใƒชใ‚ขใ‚นใจใ—ใฆ็™ป้Œฒ
alias cxswitch="~/.codex/scripts/switch-profile.sh"

# ไฝฟ็”จไพ‹
cxswitch typescript-web
cxswitch legacy-php

SES็พๅ ดใงใฎๆŽจๅฅจ่จญๅฎšใƒ‘ใ‚ฟใƒผใƒณ

SESใ‚จใƒณใ‚ธใƒ‹ใ‚ขใŒๅฎŸ้š›ใฎ็พๅ ดใงไฝฟใ„ใ‚„ใ™ใ„่จญๅฎšใ‚’ใพใจใ‚ใพใ—ใŸใ€‚

SES็พๅ ดใงใฎๅŸบๆœฌใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—

Step 1: ใ‚ฐใƒญใƒผใƒใƒซ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆ

mkdir -p ~/.codex
cat > ~/.codex/codex.yaml << 'EOF'
model: gpt-4o
temperature: 0.1
sandbox: workspace-write
approval-policy: on-failure
log-level: warn
timeout: 180
EOF

Step 2: ๅŸบๆœฌใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’่จญๅฎš

cat >> ~/.zshrc << 'EOF'

# Codex CLI ใ‚จใ‚คใƒชใ‚ขใ‚น
alias cx="codex"
alias cxf="codex --approval-policy=never"
alias cxt="codex 'ใƒ†ใ‚นใƒˆใ‚’ๆ›ธใ„ใฆ'"
alias cxr="codex 'ใ‚ณใƒผใƒ‰ใ‚’ใƒฌใƒ“ใƒฅใƒผใ—ใฆๅ•้กŒ็‚นใ‚’ๆŒ‡ๆ‘˜ใ—ใฆ'"
alias cxdoc="codex 'ใ“ใฎใ‚ณใƒผใƒ‰ใซใ‚ณใƒกใƒณใƒˆใจใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ'"
alias cxfix="codex 'ใ“ใฎใ‚จใƒฉใƒผใ‚’ไฟฎๆญฃใ—ใฆ:'"
EOF
source ~/.zshrc

Step 3: ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซAGENTS.mdใ‚’ไฝœๆˆ

ๆ–ฐใ—ใ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๅ‚็”ปใ—ใŸใ‚‰ใ™ใใซAGENTS.mdใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใ‚’็ฟ’ๆ…ฃใซใ™ใ‚‹ใ€‚

็พๅ ดๅˆฅใฎAGENTS.md่จญๅฎšไพ‹

้‡‘่ž็ณปSESๆกˆไปถๅ‘ใ‘๏ผš

# AGENTS.md๏ผˆ้‡‘่ž็ณปๆกˆไปถๅ‘ใ‘๏ผ‰

## ้‡่ฆ: ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใƒปใ‚ณใƒณใƒ—ใƒฉใ‚คใ‚ขใƒณใ‚น่ฆไปถ
- ๅ€‹ไบบๆƒ…ๅ ฑ๏ผˆๆฐๅใ€ไฝๆ‰€ใ€้›ป่ฉฑ็•ชๅท๏ผ‰ใ‚’ใƒญใ‚ฐใซๅ‡บๅŠ›ใ—ใฆใฏใ„ใ‘ใชใ„
- ้‡‘่žใƒ‡ใƒผใ‚ฟ๏ผˆๆฎ‹้ซ˜ใ€ๅ–ๅผ•ๅฑฅๆญด๏ผ‰ใฎๅ–ใ‚Šๆ‰ฑใ„ใซใฏ็‰นๅˆฅใชๆณจๆ„ใ‚’ๆ‰•ใ†ใ“ใจ
- ใ™ในใฆใฎๅ…ฅๅŠ›ๅ€คใฏๅฟ…ใšใ‚ตใƒ‹ใ‚ฟใ‚คใ‚บใƒปใƒใƒชใƒ‡ใƒผใ‚ทใƒงใƒณใ™ใ‚‹ใ“ใจ
- SQLใฏๅฟ…ใšใƒ—ใƒชใƒšใ‚ขใƒ‰ใ‚นใƒ†ใƒผใƒˆใƒกใƒณใƒˆใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจ

## ๆŠ€่ก“ใ‚นใ‚ฟใƒƒใ‚ฏ
- Java 17 + Spring Boot 3.x
- Oracle Database 19c
- MyBatis๏ผˆORMใจใ—ใฆไฝฟ็”จ๏ผ‰

## ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„
- ใƒกใ‚ฝใƒƒใƒ‰ๅใฏๅ‹•่ฉžใ‹ใ‚‰ๅง‹ใ‚ใ‚‹ใ“ใจ๏ผˆget/set/create/update/delete๏ผ‰
- ไพ‹ๅค–ใฏๅฟ…ใšๆฅญๅ‹™ไพ‹ๅค–ใ‚ฏใƒฉใ‚นใ‚’็ถ™ๆ‰ฟใ—ใฆไฝœๆˆใ™ใ‚‹ใ“ใจ
- Nullใƒใ‚งใƒƒใ‚ฏใฏๅฟ…ใš่กŒใ„ใ€NullPointerExceptionใ‚’้˜ฒใใ“ใจ

ใ‚นใ‚ฟใƒผใƒˆใ‚ขใƒƒใƒ—็ณปSESๆกˆไปถๅ‘ใ‘๏ผš

# AGENTS.md๏ผˆใ‚นใ‚ฟใƒผใƒˆใ‚ขใƒƒใƒ—ๅ‘ใ‘๏ผ‰

## ้–‹็™บๆ–น้‡
- ใ‚นใƒ”ใƒผใƒ‰ใ‚’้‡่ฆ–ใ—ใคใคใ€ๆŠ€่ก“็š„่ฒ ๅ‚ตใ‚’ๆœ€ๅฐ้™ใซๆŠ‘ใˆใ‚‹
- ใ‚ทใƒณใƒ—ใƒซใ•ใ‚’ๅ„ชๅ…ˆใ—ใ€้ŽๅบฆใชๆŠฝ่ฑกๅŒ–ใฏ้ฟใ‘ใ‚‹
- ใ‚ณใƒผใƒ‰ใ‚ˆใ‚Šๅ‹•ใใƒ—ใƒญใƒ€ใ‚ฏใƒˆใ‚’ๅ„ชๅ…ˆใ™ใ‚‹ใŒใ€ใƒ†ใ‚นใƒˆใฏๆ›ธใ

## ๆŠ€่ก“ใ‚นใ‚ฟใƒƒใ‚ฏ
- TypeScript + Next.js 15
- Supabase๏ผˆDB + Auth๏ผ‰
- Vercel Edge Functions

## ็ฉๆฅต็š„ใซไฝฟใฃใฆใ„ใ„ใ‚‚ใฎ
- async/await
- TypeScript strict mode
- ๆœ€ๆ–ฐใฎESๆง‹ๆ–‡
  • ๆ–ฐใ—ใ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๅ‚็”ปใ—ใŸใ‚‰ใพใšAGENTS.mdใ‚’ไฝœๆˆใ™ใ‚‹
  • ใƒใƒผใƒ ใฎใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ‚’AGENTS.mdใซใ‚ณใƒ”ใƒผใ—ใฆๅŒๆœŸใ™ใ‚‹
  • ๅฎšๆœŸ็š„ใซAGENTS.mdใ‚’่ฆ‹็›ดใ—ใฆๆœ€ๆ–ฐใฎๆƒ…ๅ ฑใซๆ›ดๆ–ฐใ™ใ‚‹
  • ใ‚จใ‚คใƒชใ‚ขใ‚นใฏใƒ‰ใƒƒใƒˆใƒ•ใ‚กใ‚คใƒซใง็ฎก็†ใ—ใฆGitHubใซใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—ใ™ใ‚‹
  • ๆœฌ็•ช็’ฐๅขƒใซ้–ขใ‚ใ‚‹ใƒชใƒใ‚ธใƒˆใƒชใงใฏ approval-policy ใ‚’ on-request ใซใ™ใ‚‹

่จญๅฎšใฎใƒ‡ใƒใƒƒใ‚ฐใจใƒˆใƒฉใƒ–ใƒซใ‚ทใƒฅใƒผใƒ†ใ‚ฃใƒณใ‚ฐ

่จญๅฎšใŒๆญฃใ—ใๅๆ˜ ใ•ใ‚Œใฆใ„ใ‚‹ใ‹็ขบ่ชใ™ใ‚‹ๆ–นๆณ•๏ผš

# ็พๅœจใฎ่จญๅฎšใ‚’็ขบ่ชใ™ใ‚‹
codex --show-config

# ็‰นๅฎšใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ๆŒ‡ๅฎšใ—ใฆๅฎŸ่กŒ
codex --config ~/.codex/codex.yaml "ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆง‹ๆˆใ‚’่ชฌๆ˜Žใ—ใฆ"

# ใƒ‡ใƒใƒƒใ‚ฐใƒญใ‚ฐใ‚’ๆœ‰ๅŠนใซใ—ใฆๅฎŸ่กŒ
codex --log-level=debug "ใƒ†ใ‚นใƒˆ็š„ใช่ณชๅ•"

# AGENTS.mdใŒๆญฃใ—ใ่ชญใฟ่พผใพใ‚Œใฆใ„ใ‚‹ใ‹็ขบ่ช
codex "ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ‚’่ชฌๆ˜Žใ—ใฆ"
# โ†’ AGENTS.mdใฎๅ†…ๅฎนใ‚’ๅ…ƒใซๅ›ž็ญ”ใŒ่ฟ”ใ‚Œใฐๆญฃใ—ใ่ชญใฟ่พผใพใ‚Œใฆใ„ใ‚‹
ใ‚ˆใใ‚ใ‚‹่จญๅฎšใƒŸใ‚น

AGENTS.md ใ‚’ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‹ใ‚‰ๅฎŸ่กŒใ™ใ‚‹ใจ่ชญใฟ่พผใพใ‚Œใชใ„ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚codex ใ‚ณใƒžใƒณใƒ‰ใฏใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใ‹ใ‚‰ๅฎŸ่กŒใ™ใ‚‹ใ‹ใ€--cwd ใ‚ชใƒ—ใ‚ทใƒงใƒณใงใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„ใ€‚

FAQ

codex.yaml ใจ AGENTS.md ใฎไธกๆ–นใซ่จญๅฎšใŒใ‚ใฃใŸๅ ดๅˆใ€ใฉใกใ‚‰ใŒๅ„ชๅ…ˆใ•ใ‚Œใพใ™ใ‹๏ผŸ
ๅŸบๆœฌ็š„ใซใฏใ‚ˆใ‚Šๅ…ทไฝ“็š„ใชใ‚นใ‚ณใƒผใƒ—ใฎใ‚‚ใฎใŒๅ„ชๅ…ˆใ•ใ‚Œใพใ™ใ€‚AGENTS.md ใฏใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ›บๆœ‰ใฎใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใจใ—ใฆๆฉŸ่ƒฝใ—ใ€codex.yaml ใฎใ‚ฐใƒญใƒผใƒใƒซ่จญๅฎšใ‚’่ฃœๅฎŒใ—ใพใ™ใ€‚ใƒขใƒ‡ใƒซใ‚„temperatureใชใฉใฎใƒ‘ใƒฉใƒกใƒผใ‚ฟใฏ codex.yaml ใŒๅ„ชๅ…ˆใ•ใ‚Œใ€ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐๆŒ‡็คบใƒป่ฆ็ด„ใชใฉใฎใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆๆƒ…ๅ ฑใฏ AGENTS.md ใŒๆฉŸ่ƒฝใ—ใพใ™ใ€‚
ใƒใƒผใƒ ใงAGENTS.mdใ‚’ๅ…ฑๆœ‰ใ™ในใใงใ™ใ‹๏ผŸ
ใฏใ„ใ€AGENTS.md ใฏGitใƒชใƒใ‚ธใƒˆใƒชใซใ‚ณใƒŸใƒƒใƒˆใ—ใฆใƒใƒผใƒ ใงๅ…ฑๆœ‰ใ™ใ‚‹ใ“ใจใ‚’ๅผทใใŠๅ‹งใ‚ใ—ใพใ™ใ€‚ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ‚„็ฆๆญขไบ‹้ …ใ‚’ๅ…จๅ“กใŒๅŒใ˜ๅŸบๆบ–ใงAIใซไผใˆใ‚‰ใ‚Œใ‚‹ใŸใ‚ใ€AIๆดป็”จใฎไธ€่ฒซๆ€งใŒไฟใŸใ‚Œใพใ™ใ€‚ใŸใ ใ—ใ€ๅ€‹ไบบใฎ่ช่จผๆƒ…ๅ ฑใ‚„็’ฐๅขƒๅ›บๆœ‰ใฎๆƒ…ๅ ฑใฏๆ›ธใ‹ใชใ„ใ‚ˆใ†ใซๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚
SES็พๅ ดใงใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใƒใƒชใ‚ทใƒผไธŠใ€codex.yamlใซๆ›ธใ„ใฆใฏใ„ใ‘ใชใ„ใ“ใจใฏใ‚ใ‚Šใพใ™ใ‹๏ผŸ
APIใ‚ญใƒผใ€ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ€ๆŽฅ็ถšๆ–‡ๅญ—ๅˆ—ใชใฉใฎๆฉŸๅฏ†ๆƒ…ๅ ฑใฏ็ตถๅฏพใซๆ›ธใ‹ใชใ„ใงใใ ใ•ใ„ใ€‚codex.yaml ใฏใƒ›ใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ใ‚‹ใŸใ‚ไป–ใฎใƒ—ใƒญใ‚ปใ‚นใ‹ใ‚‰ใ‚‚่ชญใฟๅ–ใ‚Šๅฏ่ƒฝใงใ™ใ€‚ใพใŸใ€้กงๅฎขใฎใ‚ทใ‚นใƒ†ใƒ ใซ้–ขใ™ใ‚‹ๆฉŸๅฏ†ๆƒ…ๅ ฑ๏ผˆIPใ‚ขใƒ‰ใƒฌใ‚นใ€ๅ†…้ƒจURLใชใฉ๏ผ‰ใ‚‚ๆ›ธใ‹ใชใ„ใ‚ˆใ†ใซใ—ใพใ—ใ‚‡ใ†ใ€‚ๆฉŸๅฏ†ๆƒ…ๅ ฑใŒๅฟ…่ฆใชๅ ดๅˆใฏ็’ฐๅขƒๅค‰ๆ•ฐใ‚’ไฝฟใฃใฆใใ ใ•ใ„ใ€‚
ใ‚จใ‚คใƒชใ‚ขใ‚นใŒ่จญๅฎšๅพŒใ‚‚ๅŠนใ‹ใชใ„ๅ ดๅˆใฏใฉใ†ใ™ใ‚Œใฐใ„ใ„ใงใ™ใ‹๏ผŸ
ใพใš source ~/.zshrc๏ผˆใพใŸใฏ source ~/.bashrc๏ผ‰ใ‚’ๅฎŸ่กŒใ—ใฆ่จญๅฎšใ‚’ๅ†่ชญใฟ่พผใฟใ—ใฆใใ ใ•ใ„ใ€‚ใใ‚Œใงใ‚‚ๅŠนใ‹ใชใ„ๅ ดๅˆใฏใ€which codex ใงcodexใ‚ณใƒžใƒณใƒ‰ใŒๆญฃใ—ใใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใ‹็ขบ่ชใ—ใพใ™ใ€‚zsh ใจ bash ใ‚’ไฝฟใ„ๅˆ†ใ‘ใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ๆญฃใ—ใ„่จญๅฎšใƒ•ใ‚กใ‚คใƒซใซ่ฟฝ่จ˜ใ•ใ‚Œใฆใ„ใ‚‹ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚
AGENTS.mdใ‚’ๆ›ธใ„ใŸใŒใ€Codex CLIใŒๆŒ‡็คบใ‚’ๅฎˆใ‚‰ใชใ„ๅ ดๅˆใฏ๏ผŸ
AGENTS.mdใŒๆญฃใ—ใ„ๅ ดๆ‰€๏ผˆใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆ๏ผ‰ใซใ‚ใ‚‹ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ใพใŸใ€ๆŒ‡็คบใฎๆ›ธใๆ–นใŒๆ›–ๆ˜งใ ใจๅฎˆใ‚‰ใ‚Œใชใ„ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ใ€Œใงใใ‚Œใฐใ€œใ—ใฆใใ ใ•ใ„ใ€ใงใฏใชใใ€Œๅฟ…ใšใ€œใ™ใ‚‹ใ“ใจใ€ใ€Œใ€œใฏ็ฆๆญขใ€ใฎใ‚ˆใ†ใชๆ˜Ž็ขบใชๅ‘ฝไปคๅฝขใงๆ›ธใใ€้‡่ฆใชๆŒ‡็คบใฏใ€Œ## ้‡่ฆใ€ใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎๅ†’้ ญใซ่จ˜่ผ‰ใ™ใ‚‹ๅทฅๅคซใŒๆœ‰ๅŠนใงใ™ใ€‚

ใพใจใ‚

OpenAI Codex CLIใฎใ‚ซใ‚นใ‚ฟใƒ ่จญๅฎšใจใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’้ฉๅˆ‡ใซ่จญๅฎšใ™ใ‚‹ใ“ใจใงใ€ๆ—ฅๅธธ็š„ใช้–‹็™บไฝœๆฅญใŒๅคงๅน…ใซใ‚นใƒ ใƒผใ‚บใซใชใ‚Šใพใ™ใ€‚

่จญๅฎšๅฎŒไบ†ใƒใ‚งใƒƒใ‚ฏใƒชใ‚นใƒˆ

ใ‚ฐใƒญใƒผใƒใƒซ่จญๅฎš

  • ~/.codex/codex.yaml ใซใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใƒขใƒ‡ใƒซใจtemperatureใ‚’่จญๅฎšใ—ใŸ
  • approval-policy ใ‚’ไฝœๆฅญใ‚นใ‚ฟใ‚คใƒซใซๅˆใ‚ใ›ใฆ่จญๅฎšใ—ใŸ
  • sandbox ใƒใƒชใ‚ทใƒผใ‚’้ฉๅˆ‡ใซ่จญๅฎšใ—ใŸ

ใ‚จใ‚คใƒชใ‚ขใ‚น่จญๅฎš

  • cx ๏ผˆๅŸบๆœฌ๏ผ‰ใ€cxf ๏ผˆใƒ•ใƒซใ‚ชใƒผใƒˆ๏ผ‰ใ€cxt ๏ผˆใƒ†ใ‚นใƒˆ๏ผ‰ใ€cxr ๏ผˆใƒฌใƒ“ใƒฅใƒผ๏ผ‰ใ‚’่จญๅฎšใ—ใŸ
  • source ~/.zshrc ใง่จญๅฎšใ‚’ๅๆ˜ ใ—ใŸ

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ่จญๅฎš

  • ็พๅœจใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซ AGENTS.md ใ‚’ไฝœๆˆใ—ใŸ
  • ๆŠ€่ก“ใ‚นใ‚ฟใƒƒใ‚ฏใ€ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ€็ฆๆญขไบ‹้ …ใ‚’่จ˜่ผ‰ใ—ใŸ
  • AGENTS.md ใ‚’Gitใƒชใƒใ‚ธใƒˆใƒชใซใ‚ณใƒŸใƒƒใƒˆใ—ใŸ

ใƒžใƒซใƒใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅฏพๅฟœ๏ผˆ่ค‡ๆ•ฐๆกˆไปถใŒใ‚ใ‚‹ๅ ดๅˆ๏ผ‰

  • ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒซใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช ~/.codex/profiles/ ใ‚’ไฝœๆˆใ—ใŸ
  • ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ็จฎๅˆฅใ”ใจใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’็”จๆ„ใ—ใŸ

่จญๅฎšใฏไธ€ๅบฆๆ•ดใˆใฆใ—ใพใˆใฐ้•ทใไฝฟใˆใพใ™ใ€‚็‰นใซ AGENTS.md ใฏๅ‚็”ปใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใŒๅค‰ใ‚ใ‚‹ใŸใณใซใ™ใไฝœใ‚‹็ฟ’ๆ…ฃใ‚’ใคใ‘ใ‚‹ใจใ€AIใจใฎๅฏพ่ฉฑๅ“่ณชใŒๆ ผๆฎตใซไธŠใŒใ‚Šใพใ™ใ€‚SES็พๅ ดใงใฎ็”Ÿ็”ฃๆ€งๅ‘ไธŠใซใœใฒๆดป็”จใ—ใฆใใ ใ•ใ„ใ€‚

ใ“ใฎ่จ˜ไบ‹ใฏๅฝนใซ็ซ‹ใกใพใ—ใŸใ‹๏ผŸ

Link1 Link2 Link3

ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚ใ‚

SESๆกˆไปถใ‚’ใŠๆŽขใ—ใงใ™ใ‹๏ผŸ

SES่จ˜ไบ‹ใ‚’ใ‚‚ใฃใจ่ชญใ‚€ โ†’
๐Ÿ—๏ธ

SES BASE ็ทจ้›†้•ท

SESๆฅญ็•Œๆญด10ๅนดไปฅไธŠใฎใƒกใƒณใƒใƒผใŒๅœจ็ฑใ™ใ‚‹็ทจ้›†ใƒใƒผใƒ ใ€‚SESไผๆฅญใงใฎๅ–ถๆฅญใƒปใ‚จใƒณใ‚ธใƒ‹ใ‚ข็ตŒ้จ“ใ€ใƒ•ใƒชใƒผใƒฉใƒณใ‚น็‹ฌ็ซ‹็ตŒ้จ“ใ‚’ๆŒใคใƒกใƒณใƒใƒผใŒใ€ๆฅญ็•Œใฎใƒชใ‚ขใƒซใชๆƒ…ๅ ฑใ‚’ใŠๅฑŠใ‘ใ—ใพใ™ใ€‚

๐Ÿ“Š ๆฅญ็•Œใƒ‡ใƒผใ‚ฟใซๅŸบใฅใ่จ˜ไบ‹ๅˆถไฝœ ๐Ÿ” IPAใƒป็ตŒๆธˆ็”ฃๆฅญ็œใƒ‡ใƒผใ‚ฟๅ‚็…ง ๐Ÿ’ผ SESๅฎŸๅ‹™็ตŒ้จ“่€…ใŒๅŸท็ญ†ใƒป็›ฃไฟฎ