๐• f B! L
ๆกˆไปถใƒปๆฑ‚ไบบๆ•ฐ 12,345ไปถ
ๆกˆไปถใ‚’ๆŽขใ™๏ผˆๆบ–ๅ‚™ไธญ๏ผ‰ ใ‚จใƒผใ‚ธใ‚งใƒณใƒˆใ‚’ๆŽขใ™๏ผˆๆบ–ๅ‚™ไธญ๏ผ‰ ใŠๅฝน็ซ‹ใกๆƒ…ๅ ฑ ใƒญใ‚ฐใ‚คใƒณ
ๆกˆไปถใƒปๆฑ‚ไบบๆ•ฐ 12,345ไปถ
Claude Codeใงๅ˜ไฝ“ใƒ†ใ‚นใƒˆใ‚’่‡ชๅ‹•็”Ÿๆˆ๏ผใ‚ซใƒใƒฌใƒƒใ‚ธๅ‘ไธŠใฎๅฎŸ่ทตใƒ†ใ‚ฏใƒ‹ใƒƒใ‚ฏ

Claude Codeใงๅ˜ไฝ“ใƒ†ใ‚นใƒˆใ‚’่‡ชๅ‹•็”Ÿๆˆ๏ผใ‚ซใƒใƒฌใƒƒใ‚ธๅ‘ไธŠใฎๅฎŸ่ทตใƒ†ใ‚ฏใƒ‹ใƒƒใ‚ฏ

Claude Codeใƒ†ใ‚นใƒˆ่‡ชๅ‹•ๅŒ–ๅ˜ไฝ“ใƒ†ใ‚นใƒˆใ‚ซใƒใƒฌใƒƒใ‚ธSESใ‚จใƒณใ‚ธใƒ‹ใ‚ข
็›ฎๆฌก
โšก 3็ง’ใงใ‚ใ‹ใ‚‹๏ผใ“ใฎ่จ˜ไบ‹ใฎใƒใ‚คใƒณใƒˆ
  • Claude Codeใฏ่‡ช็„ถ่จ€่ชžใฎๆŒ‡็คบใ ใ‘ใงJestใƒปVitestใƒปpytestใƒปGo testใƒปRSpecใชใฉไธป่ฆใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฎๅ˜ไฝ“ใƒ†ใ‚นใƒˆใ‚’่‡ชๅ‹•็”Ÿๆˆใงใใ‚‹
  • ใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’่ชญใพใ›ใฆใƒ†ใ‚นใƒˆไธ่ถณ็ฎ‡ๆ‰€ใ‚’็‰นๅฎšใ•ใ›ใ‚‹ใ€Œใ‚คใƒณใ‚ฟใƒฉใ‚ฏใƒ†ใ‚ฃใƒ–ๆ”นๅ–„ใƒซใƒผใƒ—ใ€ใŒๆœ€ใ‚‚ๅŠน็އ็š„
  • SES็พๅ ดใฎใƒฌใ‚ฌใ‚ทใƒผใ‚ณใƒผใƒ‰ใ‚„ๆ—ขๅญ˜ใ‚ณใƒผใƒ‰ใธใฎใƒ†ใ‚นใƒˆ่ฟฝๅŠ ใซใ‚‚ๆœ‰ๅŠนใงใ€ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใฎๅฎ‰ๅ…จ็ถฒใจใ—ใฆๆฉŸ่ƒฝใ™ใ‚‹

ใ€Œใƒ†ใ‚นใƒˆใ‚’ๆ›ธใๆ™‚้–“ใŒใชใ„ใ€ใ€Œใ‚ซใƒใƒฌใƒƒใ‚ธใ‚’ไธŠใ’ใ‚ใจ่จ€ใ‚ใ‚Œใฆใ‚‚ไฝ•ใ‹ใ‚‰ๆ‰‹ใ‚’ใคใ‘ใ‚Œใฐ่‰ฏใ„ใ‹ใ‚ใ‹ใ‚‰ใชใ„ใ€โ€”โ€”SES็พๅ ดใงใ“ใ†ใ„ใฃใŸๆ‚ฉใฟใ‚’ๆŠฑใˆใ‚‹ใ‚จใƒณใ‚ธใƒ‹ใ‚ขใฏๅฐ‘ใชใใ‚ใ‚Šใพใ›ใ‚“ใ€‚็‰นใซๆ—ขๅญ˜ใฎใ‚ณใƒผใƒ‰ใƒ™ใƒผใ‚นใซๅพŒใ‹ใ‚‰ใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ™ใ‚‹ไฝœๆฅญใฏใ€ใ‚ณใƒผใƒ‰ใฎๆ„ๅ›ณใ‚’่ชญใฟ่งฃใๅฟ…่ฆใŒใ‚ใ‚Šใ€ๆ€ใฃใŸไปฅไธŠใซๆ™‚้–“ใŒใ‹ใ‹ใ‚Šใพใ™ใ€‚

Claude Codeใ‚’ไฝฟใˆใฐใ€ใ“ใ†ใ—ใŸ่ชฒ้กŒใ‚’ๅคงๅน…ใซ่ปฝๆธ›ใงใใพใ™ใ€‚่‡ช็„ถ่จ€่ชžใงๆŒ‡็คบใ™ใ‚‹ใ ใ‘ใงใ€ๅฏพ่ฑกใ‚ณใƒผใƒ‰ใ‚’่งฃๆžใ—ใฆ้ฉๅˆ‡ใชใƒ†ใ‚นใƒˆใ‚ฑใƒผใ‚นใ‚’่‡ชๅ‹•็”Ÿๆˆใ—ใฆใใ‚Œใ‚‹ใฎใงใ™ใ€‚ๆœฌ่จ˜ไบ‹ใงใฏใ€Claude Codeใ‚’ๆดป็”จใ—ใŸๅ˜ไฝ“ใƒ†ใ‚นใƒˆ่‡ชๅ‹•็”ŸๆˆใฎๅฎŸ่ทต็š„ใชไฝฟใ„ๆ–นใ‚’ใ€ใ‚ณใƒžใƒณใƒ‰ไพ‹ใ‚’ไบคใˆใชใŒใ‚‰่ฉณใ—ใ่งฃ่ชฌใ—ใพใ™ใ€‚

Claude Codeใฎใƒ†ใ‚นใƒˆ็”ŸๆˆๆฉŸ่ƒฝใจใฏ

Claude Codeใฏใ€AnthropicใŒ้–‹็™บใ—ใŸCLIๅž‹AIใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐใƒ„ใƒผใƒซใงใ™ใ€‚ใ‚ฟใƒผใƒŸใƒŠใƒซใ‹ใ‚‰็›ดๆŽฅใ‚ณใƒผใƒ‰ใฎ็”Ÿๆˆใƒป็ทจ้›†ใƒปใƒฌใƒ“ใƒฅใƒผใŒใงใใพใ™ใŒใ€็‰นใซใƒ†ใ‚นใƒˆ็”ŸๆˆใซใŠใ„ใฆ้ซ˜ใ„ๅฎŸ็”จๆ€งใ‚’็™บๆฎใ—ใพใ™ใ€‚

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

Claude Codeใฎใƒ†ใ‚นใƒˆ็”ŸๆˆใŒๅพ—ๆ„ใชใ“ใจ

้–ขๆ•ฐใฎๅผ•ๆ•ฐใƒ‘ใ‚ฟใƒผใƒณใ‚’็ถฒ็พ…ใ—ใŸใ‚ฑใƒผใ‚น็”Ÿๆˆใ€ใ‚จใƒฉใƒผๅ‡ฆ็†ใƒปไพ‹ๅค–ใƒ•ใƒญใƒผใฎใƒ†ใ‚นใƒˆใ€้žๅŒๆœŸๅ‡ฆ็†ใฎใƒ†ใ‚นใƒˆใ€ไพๅญ˜ใƒขใ‚ธใƒฅใƒผใƒซใฎใƒขใƒƒใ‚ฏใƒปใ‚นใ‚ฟใƒ–็”Ÿๆˆใ€ๆ—ขๅญ˜ใƒ†ใ‚นใƒˆใ‚นใ‚คใƒผใƒˆใซๅˆใ‚ใ›ใŸใ‚นใ‚ฟใ‚คใƒซใงใฎ่ฟฝ่จ˜

ๅฏพๅฟœใ—ใฆใ„ใ‚‹ใƒ†ใ‚นใƒˆใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏ

Claude Codeใฏไธป่ฆใชใƒ†ใ‚นใƒˆใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใซๅฏพๅฟœใ—ใฆใ„ใพใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ๏ผˆpackage.jsonใ€pyproject.tomlใ€go.modใชใฉ๏ผ‰ใ‚’่‡ชๅ‹•ๆคœๅ‡บใ—ใฆใ€้ฉๅˆ‡ใชใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

่จ€่ชžๅฏพๅฟœใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏ
JavaScript/TypeScriptJestใ€Vitestใ€Mocha
Pythonpytestใ€unittest
Gotesting๏ผˆๆจ™ๆบ–ใƒฉใ‚คใƒ–ใƒฉใƒช๏ผ‰
RubyRSpecใ€Minitest
JavaJUnit 5ใ€TestNG
Rustcargo test๏ผˆๆจ™ๆบ–๏ผ‰

ๅŸบๆœฌ็š„ใชใƒ†ใ‚นใƒˆ็”Ÿๆˆใ‚ณใƒžใƒณใƒ‰

JavaScript/TypeScriptใฎใƒ†ใ‚นใƒˆ็”Ÿๆˆ

ๆœ€ใ‚‚ใ‚ทใƒณใƒ—ใƒซใชไฝฟใ„ๆ–นใฏใ€ใƒ•ใ‚กใ‚คใƒซใ‚’ๆŒ‡ๅฎšใ—ใฆใ€Œใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€ใจๆŒ‡็คบใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚

# ็‰นๅฎšใƒ•ใ‚กใ‚คใƒซใฎใƒฆใƒ‹ใƒƒใƒˆใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "src/utils/date.ts ใฎใƒฆใƒ‹ใƒƒใƒˆใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆ"

# ใƒ†ใ‚นใƒˆใƒ•ใ‚กใ‚คใƒซใฎๅ‡บๅŠ›ๅ…ˆใ‚‚ๆŒ‡ๅฎšใ™ใ‚‹ๅ ดๅˆ
claude "src/utils/date.ts ใฎJestใƒ†ใ‚นใƒˆใ‚’ src/utils/date.test.ts ใซ็”Ÿๆˆใ—ใฆ"

# ็‰นๅฎšใฎ้–ขๆ•ฐใ ใ‘ใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใŸใ„ๅ ดๅˆ
claude "src/utils/date.ts ใฎ formatDate ้–ขๆ•ฐใฎใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆใ€‚ๅขƒ็•Œๅ€คใ‚‚ๅซใ‚ใฆ"

ใŸใจใˆใฐใ€ไปฅไธ‹ใฎใ‚ˆใ†ใชๆ—ฅไป˜ใƒฆใƒผใƒ†ใ‚ฃใƒชใƒ†ใ‚ฃ้–ขๆ•ฐใŒใ‚ใฃใŸๅ ดๅˆ๏ผš

// src/utils/date.ts
export function formatDate(date: Date, format: string): string {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');

  return format
    .replace('YYYY', String(year))
    .replace('MM', month)
    .replace('DD', day);
}

export function isWeekend(date: Date): boolean {
  const day = date.getDay();
  return day === 0 || day === 6;
}

Claude Codeใฏไปฅไธ‹ใฎใ‚ˆใ†ใชใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใพใ™๏ผš

// src/utils/date.test.ts๏ผˆClaude CodeใŒ็”Ÿๆˆใ—ใŸใƒ†ใ‚นใƒˆไพ‹๏ผ‰
import { formatDate, isWeekend } from './date';

describe('formatDate', () => {
  it('YYYY-MM-DD ใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใงๆ—ฅไป˜ใ‚’ใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ™ใ‚‹', () => {
    const date = new Date(2026, 1, 26); // 2026-02-26
    expect(formatDate(date, 'YYYY-MM-DD')).toBe('2026-02-26');
  });

  it('MM/DD/YYYY ใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใงๆ—ฅไป˜ใ‚’ใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ™ใ‚‹', () => {
    const date = new Date(2026, 0, 1); // 2026-01-01
    expect(formatDate(date, 'MM/DD/YYYY')).toBe('01/01/2026');
  });

  it('1ๆกใฎๆœˆใƒปๆ—ฅใ‚’ใ‚ผใƒญใƒ‘ใƒ‡ใ‚ฃใƒณใ‚ฐใ™ใ‚‹', () => {
    const date = new Date(2026, 2, 5); // 2026-03-05
    expect(formatDate(date, 'YYYY/MM/DD')).toBe('2026/03/05');
  });

  it('ๆœˆใฎๆœ€็ต‚ๆ—ฅใ‚’ๆญฃใ—ใใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ™ใ‚‹', () => {
    const date = new Date(2026, 11, 31); // 2026-12-31
    expect(formatDate(date, 'YYYY-MM-DD')).toBe('2026-12-31');
  });
});

describe('isWeekend', () => {
  it('ๅœŸๆ›œๆ—ฅใฏtrueใ‚’่ฟ”ใ™', () => {
    const saturday = new Date(2026, 1, 28); // 2026-02-28๏ผˆๅœŸ๏ผ‰
    expect(isWeekend(saturday)).toBe(true);
  });

  it('ๆ—ฅๆ›œๆ—ฅใฏtrueใ‚’่ฟ”ใ™', () => {
    const sunday = new Date(2026, 2, 1); // 2026-03-01๏ผˆๆ—ฅ๏ผ‰
    expect(isWeekend(sunday)).toBe(true);
  });

  it('ๅนณๆ—ฅใฏfalseใ‚’่ฟ”ใ™', () => {
    const monday = new Date(2026, 1, 23); // 2026-02-23๏ผˆๆœˆ๏ผ‰
    expect(isWeekend(monday)).toBe(false);
  });

  it('้‡‘ๆ›œๆ—ฅใฏfalseใ‚’่ฟ”ใ™', () => {
    const friday = new Date(2026, 1, 27); // 2026-02-27๏ผˆ้‡‘๏ผ‰
    expect(isWeekend(friday)).toBe(false);
  });
});

Pythonใฎใƒ†ใ‚นใƒˆ็”Ÿๆˆ

# pytestใƒ†ใ‚นใƒˆใ‚’ๅ…จใƒกใ‚ฝใƒƒใƒ‰ใซ็”Ÿๆˆ
claude "payment_service.py ใฎpytestใƒ†ใ‚นใƒˆใ‚’ๅ…จใƒกใ‚ฝใƒƒใƒ‰ใซ็”Ÿๆˆใ—ใฆ"

# ็‰นๅฎšใ‚ฏใƒฉใ‚นใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "models/user.py ใฎ UserModel ใ‚ฏใƒฉใ‚นใฎใƒ†ใ‚นใƒˆใ‚’ tests/test_user.py ใซ็”Ÿๆˆใ—ใฆ"

# ใƒ•ใ‚ฃใ‚ฏใ‚นใƒใƒฃใ‚’ไฝฟใฃใŸใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "payment_service.py ใฎใƒ†ใ‚นใƒˆใ‚’pytestใƒ•ใ‚ฃใ‚ฏใ‚นใƒใƒฃใ‚’ๆดป็”จใ—ใฆ็”Ÿๆˆใ—ใฆ"
# payment_service.py ใฎใƒ†ใ‚นใƒˆ็”Ÿๆˆไพ‹
# claude "payment_service.py ใฎpytestใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆ" ๅฎŸ่กŒๅพŒ

import pytest
from unittest.mock import Mock, patch
from decimal import Decimal
from payment_service import PaymentService, PaymentError

class TestPaymentService:
    @pytest.fixture
    def payment_service(self):
        return PaymentService(api_key="test_key")

    @pytest.fixture
    def mock_gateway(self):
        return Mock()

    def test_process_payment_success(self, payment_service, mock_gateway):
        """ๆญฃๅธธใชๆ”ฏๆ‰•ใ„ๅ‡ฆ็†ใŒๆˆๅŠŸใ™ใ‚‹ใ“ใจใ‚’็ขบ่ช"""
        mock_gateway.charge.return_value = {"status": "success", "id": "ch_123"}
        payment_service.gateway = mock_gateway

        result = payment_service.process_payment(
            amount=Decimal("1000.00"),
            currency="JPY",
            card_token="tok_test"
        )

        assert result["status"] == "success"
        mock_gateway.charge.assert_called_once()

    def test_process_payment_insufficient_funds(self, payment_service, mock_gateway):
        """ๆฎ‹้ซ˜ไธ่ถณใฎๅ ดๅˆใซPaymentErrorใŒ็™บ็”Ÿใ™ใ‚‹ใ“ใจใ‚’็ขบ่ช"""
        mock_gateway.charge.side_effect = Exception("insufficient_funds")
        payment_service.gateway = mock_gateway

        with pytest.raises(PaymentError, match="insufficient_funds"):
            payment_service.process_payment(
                amount=Decimal("999999.00"),
                currency="JPY",
                card_token="tok_test"
            )

    def test_process_payment_invalid_amount(self, payment_service):
        """็„กๅŠนใช้‡‘้กใงValueErrorใŒ็™บ็”Ÿใ™ใ‚‹ใ“ใจใ‚’็ขบ่ช"""
        with pytest.raises(ValueError):
            payment_service.process_payment(
                amount=Decimal("-100.00"),
                currency="JPY",
                card_token="tok_test"
            )

Goใฎใƒ†ใ‚นใƒˆ็”Ÿๆˆ

# Goๆจ™ๆบ–testingใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "pkg/calculator/calculator.go ใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆ"

# ใƒ†ใƒผใƒ–ใƒซ้ง†ๅ‹•ใƒ†ใ‚นใƒˆใง็”Ÿๆˆ
claude "pkg/validator/validator.go ใฎใƒ†ใ‚นใƒˆใ‚’ใƒ†ใƒผใƒ–ใƒซ้ง†ๅ‹•ใƒ†ใ‚นใƒˆใ‚นใ‚ฟใ‚คใƒซใง็”Ÿๆˆใ—ใฆ"
// Claude CodeใŒ็”Ÿๆˆใ™ใ‚‹Goใƒ†ใ‚นใƒˆใฎไพ‹๏ผˆใƒ†ใƒผใƒ–ใƒซ้ง†ๅ‹•ใƒ†ใ‚นใƒˆ๏ผ‰
func TestCalculate(t *testing.T) {
    tests := []struct {
        name     string
        a, b     float64
        op       string
        want     float64
        wantErr  bool
    }{
        {"ๅŠ ็ฎ—๏ผšๆญฃๅธธใ‚ฑใƒผใ‚น", 10, 5, "+", 15, false},
        {"ๆธ›็ฎ—๏ผšๆญฃๅธธใ‚ฑใƒผใ‚น", 10, 5, "-", 5, false},
        {"ไน—็ฎ—๏ผšๆญฃๅธธใ‚ฑใƒผใ‚น", 10, 5, "*", 50, false},
        {"้™ค็ฎ—๏ผšๆญฃๅธธใ‚ฑใƒผใ‚น", 10, 5, "/", 2, false},
        {"้™ค็ฎ—๏ผšใ‚ผใƒญ้™ค็ฎ—ใ‚จใƒฉใƒผ", 10, 0, "/", 0, true},
        {"ไธๆ˜Žใชๆผ”็ฎ—ๅญใ‚จใƒฉใƒผ", 10, 5, "%", 0, true},
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got, err := Calculate(tt.a, tt.b, tt.op)
            if (err != nil) != tt.wantErr {
                t.Errorf("Calculate() error = %v, wantErr %v", err, tt.wantErr)
                return
            }
            if got != tt.want {
                t.Errorf("Calculate() = %v, want %v", got, tt.want)
            }
        })
    }
}

ใ‚ซใƒใƒฌใƒƒใ‚ธใ‚’็ขบ่ชใ—ใฆไธ่ถณใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ™ใ‚‹ใƒ—ใƒญใ‚ปใ‚น

ๆœ€ใ‚‚ๅŠน็އ็š„ใชใƒ†ใ‚นใƒˆๆ”นๅ–„ๆ–นๆณ•ใฏใ€ใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’Claude Codeใซ่ชญใพใ›ใฆๆŒ‡็คบใ™ใ‚‹ใƒ‘ใ‚ฟใƒผใƒณใงใ™ใ€‚

๐Ÿ‘ค
ใ‚ซใƒใƒฌใƒƒใ‚ธใŒ50%ใ—ใ‹ใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใฉใ“ใ‹ใ‚‰ๆ‰‹ใ‚’ใคใ‘ใ‚Œใฐใ„ใ„ใงใ™ใ‹๏ผŸ
๐Ÿค–
ใพใšใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€็งใซ่ฆ‹ใ›ใฆใใ ใ•ใ„ใ€‚ๆœชใ‚ซใƒใƒผใฎ่กŒใ‚’็‰นๅฎšใ—ใฆใ€ๅ„ชๅ…ˆๅบฆใฎ้ซ˜ใ„็ฎ‡ๆ‰€ใ‹ใ‚‰ๅŠน็އ็š„ใซใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆใ„ใใพใ—ใ‚‡ใ†ใ€‚

Step 1: ใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็”Ÿๆˆใ™ใ‚‹

# JavaScript/TypeScript๏ผˆJest๏ผ‰
npx jest --coverage --coverageReporters=text

# JavaScript/TypeScript๏ผˆVitest๏ผ‰
npx vitest run --coverage

# Python๏ผˆpytest-cov๏ผ‰
pytest --cov=src --cov-report=term-missing

# Go
go test ./... -coverprofile=coverage.out && go tool cover -func=coverage.out

Step 2: ใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’Claude Codeใซๆธกใ™

# ใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็ขบ่ชใ—ใฆไธ่ถณใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ 
claude "ใƒ†ใ‚นใƒˆใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็ขบ่ชใ—ใฆใ€ใ‚ซใƒใƒฌใƒƒใ‚ธใŒไฝŽใ„็ฎ‡ๆ‰€ใฎใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ"

# ็‰นๅฎšใฎใ‚ซใƒใƒฌใƒƒใ‚ธ็›ฎๆจ™ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ๅ ดๅˆ
claude "src/services/ ้…ไธ‹ใฎใ‚ซใƒใƒฌใƒƒใ‚ธใŒ80%ๆœชๆบ€ใฎใƒ•ใ‚กใ‚คใƒซใ‚’ๆŽขใ—ใฆใ€ไธ่ถณใ—ใฆใ„ใ‚‹ใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ"

# ใƒฌใƒใƒผใƒˆใ‚’็›ดๆŽฅ่ฒผใ‚Šไป˜ใ‘ใฆๆŒ‡็คบใ™ใ‚‹ๅ ดๅˆ
claude "ไปฅไธ‹ใฎใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’่ฆ‹ใฆใ€ใ‚ซใƒใƒฌใƒƒใ‚ธใŒไฝŽใ„ src/utils/validation.ts ใฎๆœชใ‚ซใƒใƒผ่กŒใซใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ๏ผš
[ใƒฌใƒใƒผใƒˆใฎๅ†…ๅฎนใ‚’ใƒšใƒผใ‚นใƒˆ]"

Step 3: ๆฎต้šŽ็š„ใซใ‚ซใƒใƒฌใƒƒใ‚ธใ‚’ๅ‘ไธŠใ•ใ›ใ‚‹

ไธ€ๅบฆใซใ™ในใฆใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใ‚ˆใ†ใจใ™ใ‚‹ใจๅ“่ณชใŒ่ฝใกใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ไปฅไธ‹ใฎใ‚ˆใ†ใซๆฎต้šŽ็š„ใซ้€ฒใ‚ใ‚‹ใฎใŒใ‚ณใƒ„ใงใ™๏ผš

# ใพใšใƒใƒƒใƒ”ใƒผใƒ‘ใ‚นใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "src/services/order.ts ใฎๆญฃๅธธ็ณปใƒ†ใ‚นใƒˆใ‚’ใ™ในใฆ็”Ÿๆˆใ—ใฆ"

# ๆฌกใซใ‚จใƒฉใƒผใ‚ฑใƒผใ‚นใ‚’่ฟฝๅŠ 
claude "src/services/order.ts ใฎใ‚จใƒฉใƒผใ‚ฑใƒผใ‚นใƒปไพ‹ๅค–ๅ‡ฆ็†ใฎใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ"

# ๆœ€ๅพŒใซๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ 
claude "src/services/order.ts ใฎๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆ๏ผˆ็ฉบๆ–‡ๅญ—ๅˆ—ใ€nullใ€undefinedใ€ๆœ€ๅคงๅ€คใƒปๆœ€ๅฐๅ€ค๏ผ‰ใ‚’่ฟฝๅŠ ใ—ใฆ"
1

็พ็ŠถๆŠŠๆก

ใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็”Ÿๆˆใ—ใฆใƒœใƒˆใƒซใƒใƒƒใ‚ฏใ‚’็‰นๅฎšใ™ใ‚‹

2

ๆญฃๅธธ็ณปใƒ†ใ‚นใƒˆ่ฟฝๅŠ 

ใƒใƒƒใƒ”ใƒผใƒ‘ใ‚นใฎใƒ†ใ‚นใƒˆใ‹ใ‚‰ๅง‹ใ‚ใ‚‹ใ€‚Claude Codeใซใ€Œๆญฃๅธธ็ณปใƒ†ใ‚นใƒˆใ‚’ใ™ในใฆ็”Ÿๆˆใ—ใฆใ€ใจๆŒ‡็คบ

3

็•ฐๅธธ็ณปใƒ†ใ‚นใƒˆ่ฟฝๅŠ 

ใ‚จใƒฉใƒผๅ‡ฆ็†ใƒปไพ‹ๅค–ใƒ•ใƒญใƒผใฎใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ€‚ใ€Œใ‚จใƒฉใƒผใ‚ฑใƒผใ‚นใฎใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆใ€ใจๆŒ‡็คบ

4

ๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆ่ฟฝๅŠ 

null/undefined/็ฉบๆ–‡ๅญ—ๅˆ—/ๆœ€ๅคงๆœ€ๅฐๅ€คใชใฉใฎๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ 

5

CI/CDใซ็ต„ใฟ่พผใ‚€

ใ‚ซใƒใƒฌใƒƒใ‚ธ้–พๅ€คใƒใ‚งใƒƒใ‚ฏใ‚’ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใซ็ต„ใฟ่พผใ‚“ใง็ถ™็ถš็š„ใซ็ถญๆŒ

ใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใƒปๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆใฎ็”Ÿๆˆ

้€šๅธธใ€้–‹็™บ่€…ใŒใƒ†ใ‚นใƒˆใ‚’ๆ›ธใใจๆญฃๅธธ็ณปใซๅใ‚ŠใŒใกใงใ™ใ€‚Claude Codeใฏใ‚ณใƒผใƒ‰ใ‚’้™็š„่งฃๆžใ—ใฆใ€่ฆ‹่ฝใจใ—ใŒใกใชใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใ‚’่‡ชๅ‹•็š„ใซ่€ƒๆ…ฎใ—ใฆใใ‚Œใพใ™ใ€‚

# ใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใซ็‰นๅŒ–ใ—ใŸใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "src/utils/validation.ts ใฎ validateEmail ้–ขๆ•ฐใฎใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚
ๅ›ฝ้š›ๅŒ–ใƒ‰ใƒกใ‚คใƒณใ€็‰นๆฎŠๆ–‡ๅญ—ใ€ๆฅต็ซฏใซ้•ทใ„ใ‚ขใƒ‰ใƒฌใ‚นใ€Unicodeๆ–‡ๅญ—ใ‚’ๅซใ‚€"

# ๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆใ‚’ๆ˜Ž็คบ็š„ใซๆŒ‡ๅฎš
claude "src/models/product.ts ใฎ price ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใฎๅขƒ็•Œๅ€คใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚
0ๅ††ใ€่ฒ ใฎๅ€คใ€ๆœ€ๅคงๆ•ดๆ•ฐๅ€คใ€ๅฐๆ•ฐ็‚นไปฅไธ‹ใฎๆ‰ฑใ„ใ€null/undefinedใ‚’ๅซใ‚€"

Claude CodeใŒ็”Ÿๆˆใ™ใ‚‹ใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใƒ†ใ‚นใƒˆใฎไพ‹๏ผš

describe('validateEmail - ใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚น', () => {
  // ๆœ‰ๅŠนใชใ‚ฑใƒผใ‚น
  it('ๆจ™ๆบ–็š„ใชใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใฏๆœ‰ๅŠน', () => {
    expect(validateEmail('[email protected]')).toBe(true);
  });

  it('ใ‚ตใƒ–ใƒ‰ใƒกใ‚คใƒณใ‚’ๅซใ‚€ใ‚ขใƒ‰ใƒฌใ‚นใฏๆœ‰ๅŠน', () => {
    expect(validateEmail('[email protected]')).toBe(true);
  });

  it('ใƒ—ใƒฉใ‚น่จ˜ๅทใ‚’ๅซใ‚€ใ‚ขใƒ‰ใƒฌใ‚นใฏๆœ‰ๅŠน', () => {
    expect(validateEmail('[email protected]')).toBe(true);
  });

  // ็„กๅŠนใชใ‚ฑใƒผใ‚น
  it('@ใŒใชใ„ใ‚ขใƒ‰ใƒฌใ‚นใฏ็„กๅŠน', () => {
    expect(validateEmail('userexample.com')).toBe(false);
  });

  it('ใƒ‰ใƒกใ‚คใƒณใŒใชใ„ใ‚ขใƒ‰ใƒฌใ‚นใฏ็„กๅŠน', () => {
    expect(validateEmail('user@')).toBe(false);
  });

  it('็ฉบๆ–‡ๅญ—ๅˆ—ใฏ็„กๅŠน', () => {
    expect(validateEmail('')).toBe(false);
  });

  it('nullใฏfalseใ‚’่ฟ”ใ™', () => {
    expect(validateEmail(null as any)).toBe(false);
  });

  it('undefinedใฏfalseใ‚’่ฟ”ใ™', () => {
    expect(validateEmail(undefined as any)).toBe(false);
  });

  it('255ๆ–‡ๅญ—ใ‚’่ถ…ใˆใ‚‹ใ‚ขใƒ‰ใƒฌใ‚นใฏ็„กๅŠน', () => {
    const longEmail = 'a'.repeat(250) + '@e.com';
    expect(validateEmail(longEmail)).toBe(false);
  });

  it('ใ‚นใƒšใƒผใ‚นใ‚’ๅซใ‚€ใ‚ขใƒ‰ใƒฌใ‚นใฏ็„กๅŠน', () => {
    expect(validateEmail('user @example.com')).toBe(false);
  });
});

ใƒขใƒƒใ‚ฏใƒปใ‚นใ‚ฟใƒ–ใฎ่‡ชๅ‹•็”Ÿๆˆ

ๅค–้ƒจใ‚ตใƒผใƒ“ใ‚นใ‚„ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซไพๅญ˜ใ™ใ‚‹ๅ‡ฆ็†ใ‚’ใƒ†ใ‚นใƒˆใ™ใ‚‹้š›ใ€ใƒขใƒƒใ‚ฏใƒปใ‚นใ‚ฟใƒ–ใฎไฝœๆˆใŒๅฟ…่ฆใงใ™ใ€‚Claude Codeใฏใ‚ณใƒผใƒ‰ใ‚’่งฃๆžใ—ใฆ้ฉๅˆ‡ใชใƒขใƒƒใ‚ฏใ‚’็”Ÿๆˆใ—ใฆใใ‚Œใพใ™ใ€‚

๐Ÿ‘ค
ๅค–้ƒจAPIใ‚’ๅฉใ„ใฆใ„ใ‚‹ใ‚ตใƒผใƒ“ใ‚นใฎใƒ†ใ‚นใƒˆใ‚’ๆ›ธใใŸใ„ใฎใงใ™ใŒใ€ใƒขใƒƒใ‚ฏใฎๆ›ธใๆ–นใŒ่ค‡้›‘ใงๅ›ฐใฃใฆใ„ใพใ™ใ€‚
๐Ÿค–
ๅฏพ่ฑกใƒ•ใ‚กใ‚คใƒซใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„ใ€‚ไพๅญ˜้–ขไฟ‚ใ‚’ๅˆ†ๆžใ—ใฆใƒขใƒƒใ‚ฏใ‚’่‡ชๅ‹•็”Ÿๆˆใ—ใพใ™ใ€‚jest.mock()ใ‚„pytest-mockใชใฉใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใซๅˆใ‚ใ›ใŸใƒขใƒƒใ‚ฏใ‚ณใƒผใƒ‰ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚
# ๅค–้ƒจAPIใธใฎไพๅญ˜ใ‚’ใƒขใƒƒใ‚ฏๅŒ–ใ—ใŸใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "src/services/notification.ts ใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚
SendGridใธใฎAPIๅ‘ผใณๅ‡บใ—ใฏใƒขใƒƒใ‚ฏๅŒ–ใ—ใฆ"

# ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นไพๅญ˜ใฎใƒขใƒƒใ‚ฏใ‚’็”Ÿๆˆ
claude "src/repositories/user.repository.ts ใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚
Prismaใฎใ‚ฏใ‚จใƒชใฏใ™ในใฆใƒขใƒƒใ‚ฏๅŒ–ใ—ใฆใ€‚jest.mock()ใ‚’ไฝฟใฃใฆ"
// Claude CodeใŒ็”Ÿๆˆใ™ใ‚‹ใƒขใƒƒใ‚ฏใƒ†ใ‚นใƒˆใฎไพ‹
import { jest } from '@jest/globals';
import { NotificationService } from './notification';

// SendGridใƒขใ‚ธใƒฅใƒผใƒซใ‚’ใƒขใƒƒใ‚ฏๅŒ–
jest.mock('@sendgrid/mail', () => ({
  setApiKey: jest.fn(),
  send: jest.fn(),
}));

import sgMail from '@sendgrid/mail';

describe('NotificationService', () => {
  let service: NotificationService;

  beforeEach(() => {
    service = new NotificationService();
    jest.clearAllMocks();
  });

  it('ใƒกใƒผใƒซ้€ไฟกใŒๆˆๅŠŸใ™ใ‚‹', async () => {
    (sgMail.send as jest.Mock).mockResolvedValue([{ statusCode: 202 }]);

    await service.sendWelcomeEmail('[email protected]', 'ใƒ†ใ‚นใƒˆใƒฆใƒผใ‚ถใƒผ');

    expect(sgMail.send).toHaveBeenCalledWith(
      expect.objectContaining({
        to: '[email protected]',
        subject: expect.stringContaining('ใ‚ˆใ†ใ“ใ'),
      })
    );
  });

  it('APIๅคฑๆ•—ๆ™‚ใซใ‚จใƒฉใƒผใ‚’ใ‚นใƒญใƒผใ™ใ‚‹', async () => {
    (sgMail.send as jest.Mock).mockRejectedValue(
      new Error('API rate limit exceeded')
    );

    await expect(
      service.sendWelcomeEmail('[email protected]', 'ใƒ†ใ‚นใƒˆใƒฆใƒผใ‚ถใƒผ')
    ).rejects.toThrow('API rate limit exceeded');
  });
});

CI/CDใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใจใฎ้€ฃๆบ

ใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใŸใ‚‰ใ€CI/CDใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใซ็ต„ใฟ่พผใ‚“ใงใ‚ซใƒใƒฌใƒƒใ‚ธใ‚’็ถ™็ถš็š„ใซ็ถญๆŒใ—ใพใ—ใ‚‡ใ†ใ€‚

# GitHub Actionsใฎใƒฏใƒผใ‚ฏใƒ•ใƒญใƒผใƒ•ใ‚กใ‚คใƒซใ‚’Claude Codeใง็”Ÿๆˆ
claude ".github/workflows/test.yml ใ‚’ไฝœๆˆใ—ใฆใ€‚
Node.js 20ใงJestใ‚’ๅฎŸ่กŒใ—ใ€ใ‚ซใƒใƒฌใƒƒใ‚ธใŒ80%ๆœชๆบ€ใฎๅ ดๅˆใฏCIใ‚’ๅคฑๆ•—ใ•ใ›ใ‚‹่จญๅฎšใง"

Claude CodeใŒ็”Ÿๆˆใ™ใ‚‹GitHub Actionsใฎไพ‹๏ผš

# .github/workflows/test.yml
name: Test

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main, develop]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run tests with coverage
        run: npx jest --coverage --coverageThreshold='{"global":{"branches":80,"functions":80,"lines":80,"statements":80}}'

      - name: Upload coverage report
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: coverage-report
          path: coverage/
ใ‚ซใƒใƒฌใƒƒใ‚ธ้–พๅ€คใฎ่จญๅฎšใซใคใ„ใฆ

ๆœ€ๅˆใ‹ใ‚‰80%ใ‚’็›ฎๆŒ‡ใ™ใฎใฏ้›ฃใ—ใ„ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚ใพใš็พ็Šถใฎใ‚ซใƒใƒฌใƒƒใ‚ธ+10%ใ‚’็›ฎๆจ™ๅ€คใซ่จญๅฎšใ—ใ€ๅพใ€…ใซๅผ•ใไธŠใ’ใฆใ„ใๆ–นๆณ•ใŒ็พๅฎŸ็š„ใงใ™ใ€‚Claude Codeใซใ€Œ็พๅœจใฎใ‚ซใƒใƒฌใƒƒใ‚ธใฏโ—‹โ—‹%ใงใ™ใ€‚ใพใšใใ‚Œใ‚’็›ฎๆจ™ๅ€คใจใ—ใฆ่จญๅฎšใ—ใŸJestใฎ่จญๅฎšใ‚’ๆ•™ใˆใฆใ€ใจ็›ธ่ซ‡ใงใใพใ™ใ€‚

SES็พๅ ดใงใฎๆดป็”จไพ‹

ใ‚ฑใƒผใ‚น1: ๆ—ขๅญ˜ใ‚ณใƒผใƒ‰ใธใฎใƒ†ใ‚นใƒˆ่ฟฝๅŠ 

SESๆกˆไปถใงใ‚ˆใใ‚ใ‚‹ใฎใŒใ€ใ€Œใƒ†ใ‚นใƒˆใŒไธ€ๅˆ‡ใชใ„ใ‚ณใƒผใƒ‰ใƒ™ใƒผใ‚นใ‚’ๅผ•ใ็ถ™ใ„ใ ใ€ใจใ„ใ†ใ‚ฑใƒผใ‚นใงใ™ใ€‚

# ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๅ…จไฝ“ใฎใƒ†ใ‚นใƒˆ็Šถๆณใ‚’็ขบ่ช
claude "src/services/ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎใƒ•ใ‚กใ‚คใƒซใ‚’็ขบ่ชใ—ใฆใ€ใƒ†ใ‚นใƒˆใƒ•ใ‚กใ‚คใƒซใŒใชใ„ใ‚‚ใฎใ‚’ใƒชใ‚นใƒˆใ‚ขใƒƒใƒ—ใ—ใฆๅ„ชๅ…ˆๅบฆ้ †ใซไธฆในใฆ"

# ๅ„ชๅ…ˆๅบฆใฎ้ซ˜ใ„ใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰้ †็•ชใซใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ
claude "src/services/order.service.ts ใฏใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏใฎๆ ธๅฟƒใชใฎใงใ€
ใพใšใ“ใฎใƒ•ใ‚กใ‚คใƒซใฎใƒ†ใ‚นใƒˆใ‚’ๅŒ…ๆ‹ฌ็š„ใซ็”Ÿๆˆใ—ใฆใ€‚ใƒขใƒƒใ‚ฏใ‚‚ๅซใ‚ใฆ"
  • ๅค–้ƒจAPIใ‚„DBใซไพๅญ˜ใ™ใ‚‹ใ‚ตใƒผใƒ“ใ‚นๅฑคใ‹ใ‚‰ๅ„ชๅ…ˆ็š„ใซใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ™ใ‚‹
  • ใƒใ‚ฐไฟฎๆญฃๆ™‚ใฏๅฟ…ใšใใฎใƒใ‚ฐใ‚’ๅ†็พใ™ใ‚‹ใƒ†ใ‚นใƒˆใ‚’ๅ…ˆใซๆ›ธใ๏ผˆใƒชใ‚ฐใƒฌใƒƒใ‚ทใƒงใƒณ้˜ฒๆญข๏ผ‰
  • ๆ–ฐๆฉŸ่ƒฝ่ฟฝๅŠ ๆ™‚ใซClaude Codeใงใƒ†ใ‚นใƒˆใ‚’่‡ชๅ‹•็”Ÿๆˆใ—ใฆใ‹ใ‚‰ใƒฌใƒ“ใƒฅใƒผใซๅ‡บใ™
  • ้€ฑ1ๅ›žใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็ขบ่ชใ—ใฆไฝŽใ„็ฎ‡ๆ‰€ใ‚’ๆ”นๅ–„ใ™ใ‚‹็ฟ’ๆ…ฃใ‚’ใคใ‘ใ‚‹

ใ‚ฑใƒผใ‚น2: ใƒฌใ‚ฌใ‚ทใƒผใ‚ณใƒผใƒ‰ใฎใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐๆ”ฏๆด

ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐๅ‰ใซใƒ†ใ‚นใƒˆใ‚’็”จๆ„ใ™ใ‚‹ใ“ใจใงใ€ๅ‹•ไฝœไฟ่จผใŒใงใใพใ™ใ€‚

# ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐๅ‰ใซใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆ๏ผˆๅ‹•ไฝœไฟ่จผใจใ—ใฆ๏ผ‰
claude "legacy/payment_processor.php ใฎ็พๅœจใฎๅ‹•ไฝœใ‚’ใ™ในใฆใ‚ซใƒใƒผใ™ใ‚‹ใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚
ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใฎๅฎ‰ๅ…จ็ถฒใจใ—ใฆไฝฟใ„ใŸใ„ใฎใงใ€็พๅœจใฎไป•ๆง˜ใ‚’ๆญฃ็ขบใซๅๆ˜ ใ—ใŸใƒ†ใ‚นใƒˆใซใ—ใฆ"

# ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐๅพŒใซๅทฎ็•ฐใŒใชใ„ใ“ใจใ‚’็ขบ่ช
claude "ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐๅพŒใฎใƒ†ใ‚นใƒˆใ‚’ๅฎŸ่กŒใ—ใฆใ€ๅคฑๆ•—ใ—ใŸใƒ†ใ‚นใƒˆใŒใ‚ใ‚ŒใฐๅŽŸๅ› ใ‚’่ชฟๆŸปใ—ใฆไฟฎๆญฃๆกˆใ‚’ๆ็คบใ—ใฆ"
ๆณจๆ„

ใƒฌใ‚ฌใ‚ทใƒผใ‚ณใƒผใƒ‰ใฎใƒ†ใ‚นใƒˆใ‚’Claude Codeใง็”Ÿๆˆใ™ใ‚‹้š›ใ€ใƒใ‚ฐใŒๅซใพใ‚Œใฆใ„ใ‚‹ใ‚ณใƒผใƒ‰ใ‚’ใใฎใพใพใƒ†ใ‚นใƒˆใ™ใ‚‹ใจใ€Œใƒใ‚ฐใ‚’ใƒ†ใ‚นใƒˆใงไฟ่จผใ™ใ‚‹ใ€็Šถๆ…‹ใซใชใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ใƒ†ใ‚นใƒˆ็”ŸๆˆๅพŒใฏๅฟ…ใšไบบ้–“ใŒใƒฌใƒ“ใƒฅใƒผใ—ใฆใ€ไป•ๆง˜ใจใ—ใฆๆญฃใ—ใ„ใ‹ใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚

ใ‚ˆใใ‚ใ‚‹ๅคฑๆ•—ใƒ‘ใ‚ฟใƒผใƒณใจๅฏพๅ‡ฆๆณ•

ๅคฑๆ•—1: ๆŒ‡็คบใŒๆผ ็„ถใจใ—ใ™ใŽใฆใ„ใ‚‹

# NG: ๆผ ็„ถใจใ—ใ™ใŽใŸๆŒ‡็คบ
claude "ใƒ†ใ‚นใƒˆใ‚’ๆ›ธใ„ใฆ"

# OK: ๅ…ทไฝ“็š„ใชใƒ•ใ‚กใ‚คใƒซใจ่ฆไปถใ‚’ๆŒ‡ๅฎšใ™ใ‚‹
claude "src/utils/price-calculator.ts ใฎ calculateDiscountedPrice ้–ขๆ•ฐใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚
10%ๅ‰ฒๅผ•ใ€ๆœ€ๅคงๅ‰ฒๅผ•50%ใฎๅˆถ้™ใ€ๅ‰ฒๅผ•้ฉ็”จๅ‰ๅพŒใฎไพกๆ ผๅขƒ็•Œๅ€คใ‚’ๅซใ‚€"

ๅคฑๆ•—2: ็”Ÿๆˆใ•ใ‚ŒใŸใƒ†ใ‚นใƒˆใ‚’็ขบ่ชใ›ใšใซไฝฟใ†

Claude CodeใŒ็”Ÿๆˆใ—ใŸใƒ†ใ‚นใƒˆใฏๅฟ…ใšๅฎŸ่กŒใ—ใฆ็ขบ่ชใ—ใพใ™ใ€‚

# ใƒ†ใ‚นใƒˆ็”ŸๆˆๅพŒใ™ใใซๅฎŸ่กŒ็ขบ่ช
claude "src/utils/date.ts ใฎใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆใ€‚็”ŸๆˆๅพŒใ™ใใซ npx jest src/utils/date.test.ts ใ‚’ๅฎŸ่กŒใ—ใฆ็ตๆžœใ‚’็ขบ่ชใ—ใฆ"

ๅคฑๆ•—3: ใƒขใƒƒใ‚ฏใŒๅฎŸ่ฃ…ใฎ่ฉณ็ดฐใซไพๅญ˜ใ—ใ™ใŽใ‚‹

# ใƒขใƒƒใ‚ฏใŒๅฃŠใ‚Œใ‚„ใ™ใ„ๅ ดๅˆใฎไฟฎๆญฃๆŒ‡็คบ
claude "็”Ÿๆˆใ•ใ‚ŒใŸใƒ†ใ‚นใƒˆใฎใƒขใƒƒใ‚ฏใŒๅ†…้ƒจๅฎŸ่ฃ…ใซไพๅญ˜ใ—ใ™ใŽใฆใ„ใพใ™ใ€‚
ๅค–้ƒจใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใƒผใ‚นใฎใฟใ‚’ใƒขใƒƒใ‚ฏๅŒ–ใ™ใ‚‹ใ‚ˆใ†ใซไฟฎๆญฃใ—ใฆ"
๐Ÿ‘ค
็”Ÿๆˆใ•ใ‚ŒใŸใƒ†ใ‚นใƒˆใŒๅ…จ้ƒจใƒ‘ใ‚นใ™ใ‚‹ใ‘ใฉใ€ๆ„ๅ‘ณใฎใ‚ใ‚‹ใƒ†ใ‚นใƒˆใซใชใฃใฆใ„ใ‚‹ใ‹ๅฟƒ้…ใงใ™ใ€‚
๐Ÿค–
ใƒŸใƒฅใƒผใƒ†ใƒผใ‚ทใƒงใƒณใƒ†ใ‚นใƒˆใ‚’่ฉฆใ—ใฆใฟใพใ—ใ‚‡ใ†ใ€‚ใ€Œ็”Ÿๆˆใ•ใ‚ŒใŸใƒ†ใ‚นใƒˆใซๅฏพใ—ใฆใƒŸใƒฅใƒผใƒ†ใƒผใ‚ทใƒงใƒณใƒ†ใ‚นใƒˆใ‚’ๅฎŸ่กŒใ—ใฆใ€ใƒ†ใ‚นใƒˆใฎๅ“่ณชใ‚’็ขบ่ชใ—ใฆใ€ใจๆŒ‡็คบใ™ใ‚‹ใ‹ใ€ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใ‚’ๆ„ๅ›ณ็š„ใซๅฃŠใ—ใฆใƒ†ใ‚นใƒˆใŒๅคฑๆ•—ใ™ใ‚‹ใ‹ใ‚’็ขบ่ชใ™ใ‚‹ๆ–นๆณ•ใŒใ‚ใ‚Šใพใ™ใ€‚

FAQ

Claude Codeใฎใƒ†ใ‚นใƒˆ็”Ÿๆˆใฏใฉใฎใใ‚‰ใ„ๆญฃ็ขบใงใ™ใ‹๏ผŸ
ใƒ†ใ‚นใƒˆใฎๅŸบๆœฌๆง‹้€ ใจไธป่ฆใชใ‚ฑใƒผใ‚นใฏ้ซ˜็ฒพๅบฆใง็”Ÿๆˆใ•ใ‚Œใพใ™ใ€‚ใŸใ ใ—ใ€ใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏใฎ็ดฐใ‹ใ„ใƒ‹ใƒฅใ‚ขใƒณใ‚นใ‚„ใ€ใ‚ณใƒผใƒ‰ๅค–ใฎไป•ๆง˜๏ผˆUIใฎๅ‹•ไฝœใ‚„ๅค–้ƒจAPIใฎๆŒฏใ‚‹่ˆžใ„๏ผ‰ใซใคใ„ใฆใฏไบบ้–“ใฎใƒฌใƒ“ใƒฅใƒผใŒๅฟ…่ฆใงใ™ใ€‚็”ŸๆˆๅพŒใฏๅฟ…ใšๅฎŸ่กŒใ—ใฆ็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚
ๆ—ขๅญ˜ใฎใƒ†ใ‚นใƒˆใ‚นใ‚ฟใ‚คใƒซใซๅˆใ‚ใ›ใฆใใ‚Œใพใ™ใ‹๏ผŸ
ใฏใ„ใ€‚ใ€Œๆ—ขๅญ˜ใฎใƒ†ใ‚นใƒˆใ‚นใ‚ฟใ‚คใƒซใซๅˆใ‚ใ›ใฆใ€ใจๆ˜Ž็คบใ™ใ‚Œใฐใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆ—ขๅญ˜ใƒ†ใ‚นใƒˆใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‚็…งใ—ใฆใ‚นใ‚ฟใ‚คใƒซใ‚’็ตฑไธ€ใ—ใฆใใ‚Œใพใ™ใ€‚ใ€Œsrc/utils/__tests__/existing.test.ts ใจๅŒใ˜ใ‚นใ‚ฟใ‚คใƒซใง็”Ÿๆˆใ—ใฆใ€ใฎใ‚ˆใ†ใซๅ…ทไฝ“็š„ใชใƒ•ใ‚กใ‚คใƒซใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ‚ˆใ‚Š็ขบๅฎŸใงใ™ใ€‚
1000่กŒใ‚’่ถ…ใˆใ‚‹ๅคงใใชใƒ•ใ‚กใ‚คใƒซใฎใƒ†ใ‚นใƒˆใ‚‚็”Ÿๆˆใงใใพใ™ใ‹๏ผŸ
ๅคงใใชใƒ•ใ‚กใ‚คใƒซใ‚‚ๅ‡ฆ็†ใงใใพใ™ใŒใ€ไธ€ๅบฆใซๅ…จ้ƒจ็”Ÿๆˆใ—ใ‚ˆใ†ใจใ™ใ‚‹ใจๅ“่ณชใŒ่ฝใกใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ใ‚ฏใƒฉใ‚นใ‚„้–ขๆ•ฐๅ˜ไฝใงๅˆ†ๅ‰ฒใ—ใฆๆŒ‡็คบใ™ใ‚‹ๆ–นใŒ้ซ˜ๅ“่ณชใชใƒ†ใ‚นใƒˆใŒ็”Ÿๆˆใ•ใ‚Œใพใ™ใ€‚ใ€ŒUserService ใ‚ฏใƒฉใ‚นใฎ create ใƒกใ‚ฝใƒƒใƒ‰ใฎใƒ†ใ‚นใƒˆใ ใ‘็”Ÿๆˆใ—ใฆใ€ใฎใ‚ˆใ†ใซ็ตžใ‚Š่พผใ‚“ใงใใ ใ•ใ„ใ€‚
ใƒ†ใ‚นใƒˆใŒๅคฑๆ•—ใ—ใŸๅ ดๅˆใ€ไฟฎๆญฃใ‚‚ๆ‰‹ไผใฃใฆใ‚‚ใ‚‰ใˆใพใ™ใ‹๏ผŸ
ใ‚‚ใกใ‚ใ‚“ใงใ™ใ€‚ใ€Œไปฅไธ‹ใฎใƒ†ใ‚นใƒˆใŒๅคฑๆ•—ใ—ใฆใ„ใพใ™ใ€‚ใ‚จใƒฉใƒผใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’่ฆ‹ใฆๅŽŸๅ› ใ‚’็‰นๅฎšใ—ใฆไฟฎๆญฃใ—ใฆ๏ผš[ใ‚จใƒฉใƒผๅ†…ๅฎน]ใ€ใจๆŒ‡็คบใ™ใ‚‹ใ ใ‘ใงใ€ใƒ†ใ‚นใƒˆใ‚ณใƒผใƒ‰ใพใŸใฏใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฎๅ•้กŒใ‚’็‰นๅฎšใ—ใฆไฟฎๆญฃใ—ใฆใใ‚Œใพใ™ใ€‚
SES็พๅ ดใงClaude Codeใ‚’ไฝฟใ†ๅ ดๅˆใ€ๅฎขๅ…ˆใฎๆ‰ฟ่ชใฏๅฟ…่ฆใงใ™ใ‹๏ผŸ
ใ‚ณใƒผใƒ‰ใ‚’AIใซ้€ไฟกใ™ใ‚‹ใŸใ‚ใ€ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใƒใƒชใ‚ทใƒผใซใ‚ˆใฃใฆใฏไบ‹ๅ‰ๆ‰ฟ่ชใŒๅฟ…่ฆใชๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚็‰นใซ้‡‘่žใƒปๅŒป็™‚ใƒปๅฎ˜ๅ…ฌๅบ็ณปใฎๆกˆไปถใงใฏๆ…Ž้‡ใซ็ขบ่ชใŒๅฟ…่ฆใงใ™ใ€‚Claude Codeใซใฏใƒญใƒผใ‚ซใƒซๅฎŸ่กŒใƒขใƒผใƒ‰ใŒใ‚ใ‚Šใ€ใ‚ณใƒผใƒ‰ใ‚’ๅค–้ƒจ้€ไฟกใ›ใšใซไฝฟใ†ๆ–นๆณ•ใ‚‚ๆคœ่จŽใงใใพใ™ใ€‚ๆกˆไปถๅ‚็”ปๅ‰ใซ็พๅ ดใฎ่ฆ็ด„ใ‚’็ขบ่ชใ™ใ‚‹ใ“ใจใ‚’ๅผทใใŠๅ‹งใ‚ใ—ใพใ™ใ€‚

ใพใจใ‚

Claude Codeใซใ‚ˆใ‚‹ๅ˜ไฝ“ใƒ†ใ‚นใƒˆ่‡ชๅ‹•็”Ÿๆˆใฏใ€SESใ‚จใƒณใ‚ธใƒ‹ใ‚ขใฎ็”Ÿ็”ฃๆ€งใ‚’ๅคงๅน…ใซๅ‘ไธŠใ•ใ›ใพใ™ใ€‚้‡่ฆใชใƒใ‚คใƒณใƒˆใ‚’ใŠใ•ใ‚‰ใ„ใ—ใพใ™ใ€‚

Claude Codeใƒ†ใ‚นใƒˆ็”Ÿๆˆ ๅฎŸ่ทตใพใจใ‚

ๅŸบๆœฌใ‚ณใƒžใƒณใƒ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • claude "[ใƒ•ใ‚กใ‚คใƒซๅ] ใฎใƒฆใƒ‹ใƒƒใƒˆใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆ" โ€” ใ‚ทใƒณใƒ—ใƒซใชไธ€่จ€ๆŒ‡็คบใง้–‹ๅง‹
  • claude "ใƒ†ใ‚นใƒˆใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็ขบ่ชใ—ใฆใ€ใ‚ซใƒใƒฌใƒƒใ‚ธใŒไฝŽใ„็ฎ‡ๆ‰€ใฎใƒ†ใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆ" โ€” ใ‚คใƒณใ‚ฟใƒฉใ‚ฏใƒ†ใ‚ฃใƒ–ๆ”นๅ–„
  • claude "[ใƒ•ใ‚กใ‚คใƒซๅ] ใฎใ‚จใƒƒใ‚ธใ‚ฑใƒผใ‚นใƒ†ใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใฆ" โ€” ๅขƒ็•Œๅ€คใƒป็•ฐๅธธ็ณปใƒ†ใ‚นใƒˆ่ฟฝๅŠ 

SES็พๅ ดใงใฎๆดป็”จๆˆฆ็•ฅ

  1. ๆœ€ๅˆใซใ‚ซใƒใƒฌใƒƒใ‚ธใƒฌใƒใƒผใƒˆใ‚’็”Ÿๆˆใ—ใฆ็พ็ŠถๆŠŠๆก
  2. ใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏไธญๅฟƒใฎใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰ๅ„ชๅ…ˆ็š„ใซใƒ†ใ‚นใƒˆ่ฟฝๅŠ 
  3. ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐๅ‰ใซๅฟ…ใšใƒ†ใ‚นใƒˆใงๅ‹•ไฝœไฟ่จผ
  4. CI/CDใซใ‚ซใƒใƒฌใƒƒใ‚ธ้–พๅ€คใƒใ‚งใƒƒใ‚ฏใ‚’็ต„ใฟ่พผใ‚“ใง็ถญๆŒ

ๅ“่ณชใ‚’ไฟใคใŸใ‚ใฎใƒใ‚คใƒณใƒˆ

  • ็”Ÿๆˆใ•ใ‚ŒใŸใƒ†ใ‚นใƒˆใฏๅฟ…ใšๅฎŸ่กŒใ—ใฆ็ขบ่ชใ™ใ‚‹
  • ใƒขใƒƒใ‚ฏใŒๅ†…้ƒจๅฎŸ่ฃ…ใซไพๅญ˜ใ—ใ™ใŽใชใ„ใ‚ˆใ†ๆณจๆ„ใ™ใ‚‹
  • ไบบ้–“ใฎใƒฌใƒ“ใƒฅใƒผใงไป•ๆง˜ใฎๆญฃ็ขบใ•ใ‚’ๆ‹…ไฟใ™ใ‚‹

ใƒ†ใ‚นใƒˆใŒใชใ„ใ‚ณใƒผใƒ‰ใƒ™ใƒผใ‚นใ‚’ๅผ•ใ็ถ™ใ„ใ ใจใใ€ใƒฌใ‚ฌใ‚ทใƒผใ‚ณใƒผใƒ‰ใ‚’ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใ—ใŸใ„ใจใใ€ๆ–ฐๆฉŸ่ƒฝใฎใ‚ซใƒใƒฌใƒƒใ‚ธใ‚’็ด ๆ—ฉใไธŠใ’ใŸใ„ใจใโ€”โ€”Claude Codeใฏใใฎใ‚ˆใ†ใชๅ ด้ขใงๅผทๅŠ›ใชๆญฆๅ™จใซใชใ‚Šใพใ™ใ€‚ใพใšใฏๅฐใ•ใชใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰่ฉฆใ—ใฆใฟใฆใใ ใ•ใ„ใ€‚

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

Link1 Link2 Link3

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

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

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

SES BASE ็ทจ้›†้•ท

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

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