
Git
ã€ãã³ã

ãã¬ãžã³
æè¡ããã°
æ¬èšäºã¯ 2026 幎 7 æ 6 æ¥ ã«å
¬éãããã Deploying VCF 9.1 on Amazon EVS with End-to-End Automation ãã翻蚳ãããã®ã§ãã ã¯ããã« Amazon Elastic VMware Service (Amazon EVS) ã䜿çšãããšãAmazon VPC å
ã® AWS ãã¢ã¡ã¿ã« EC2 ã€ã³ã¹ã¿ã³ã¹äžã§ VMware Cloud Foundation (VCF) ãçŽæ¥å®è¡ã§ããŸããEVS ã§ã¯ã䜿ãæ
£ãã VMware ã¹ã¿ãã¯ã®éçšäžè²«æ§ãç¶æããªãããAWS ã¯ã©ãŠããµãŒãã¹ã®åŒŸåæ§ãã»ãã¥ãªãã£ãè±å¯ãªæ©èœã掻çšã§ããŸãã VCF 9 㯠VMware Cloud Foundation ã®ææ°ãªãªãŒã¹ã§ããã以åã® VCF 5.2 ãªãªãŒã¹ãšã¯æ ¹æ¬çã«ç°ãªãæ¹æ³ã§ Amazon EVS ãšé£æºããŸããVCF 5.2 ã§ã¯ãEVS ãµãŒãã¹ããããã€å
šäœããšã³ãããŒãšã³ãã§åŠçããŠããŸãããVLAN ãµããããã®ãããã€ããã¹ããå«ã EVS ç°å¢ãããã³å®å
šãª VCF ã¹ã¿ãã¯ã¯ãã¹ãŠããµãŒãã¹ãèªåçã«ããããžã§ãã³ã°ããã³èšå®ããŠããŸãããVCF 9 ã§ã¯ãAmazon EVS ã¯ã»ã«ããããã€ã¢ãŒããšåŒã°ããæ¹åŒã§ã®ã¿åäœããŸãã ã»ã«ããããã€ã¢ãŒããšã¯ïŒ ã»ã«ããããã€ã¢ãŒãã§ã¯ãAmazon EVS ãåºç€ãšãªã AWS ã€ã³ãã©ã¹ãã©ã¯ãã£ãããããžã§ãã³ã°ããŸããå
·äœçã«ã¯ãVCF ã«å¿
èŠãª VLAN ãµãããããšãéžæãã ESXi ããŒãžã§ã³ïŒ9.0 ãŸã㯠9.1ïŒãå®è¡ãããã¢ã¡ã¿ã« EC2 ãã¹ãã§ãããã ãããµãŒãã¹ãæ
ãã®ã¯ãããŸã§ã§ããEVS 㯠VCF èªäœã®ã€ã³ã¹ããŒã«ãèšå®ã¯è¡ããŸãããEVS ã代ããã« VCF 9 ããããã€ãããªãã·ã§ã³ã¯ååšããŸããã ã€ãŸããEVS ããã¹ããšãããã¯ãŒã¯ãæäŸããåŸã¯ãVCF ã®ã€ã³ã¹ããŒã«ã¯ã客æ§ã®è²¬ä»»ãšãªããŸããVMware ã®ããã¥ã¡ã³ãã«åŸã£ãŠæåã§ã€ã³ã¹ããŒã«ããããèªååã䜿ã£ãŠããã°ã©ã çã«åŠçã§ããŸããæ¬ããã°èšäºã§ã¯ãŸãã«ãã®èªååãåãäžããŸããAWS ãå
¬éãã ãšã³ãããŒãšã³ãã®èªååããŒã«ããã ã¯ãåææ¡ä»¶ãšãªã AWS ã€ã³ãã©ã¹ãã©ã¯ãã£ãš EVS ç°å¢ã®ããããžã§ãã³ã°ãããVCF ã®ã€ã³ã¹ããŒã«ããã³èšå®ãŸã§ãã¯ãŒã¯ãããŒå
šäœãåŠçããŸãããã®ããŒã«ããã㯠VCF 9.0 ãš 9.1 ã®äž¡æ¹ã«å¯Ÿå¿ããŠããŸãã VCF ãããã€ãèªååããçç± ã»ã«ããããã€ã¢ãŒãã§ã¯ VCF 9 ã®ã€ã³ã¹ããŒã«ã¯ã客æ§ã®è²¬ä»»ã§ãããããèªååãç¹ã«å¹åãçºæ®ããŸããVCF ã®æåã€ã³ã¹ããŒã«ã«ã¯ãæ°åãã®èšå®ã¹ããããè€é㪠JSON 仿§ã®äœæããã¹ã¯ãŒãçæããããŠæ°æéã®åŸ
æ©ãå¿
èŠã§ããæ¬ããŒã«ãããã¯ããã 3 ã€ã® CLI ã³ãã³ãã«éçŽããŸãã åçŸæ§ïŒãªãŒãžã§ã³ãã¢ã«ãŠã³ãããŸããã§åäžç°å¢ããããã€å¯èœ ã¹ããŒãïŒæ°æéãããæåããã»ã¹ã 3 ã³ãã³ãã«ççž® ç£æ»æ§ïŒãã¹ãŠã®èšå®å€æãããŒãžã§ã³ç®¡çãããã³ãŒãã«èšé² ãšã©ãŒåæžïŒDNS ã¬ã³ãŒããVLAN CIDRãbringup 仿§ã«ãããæåå
¥åãã¹ãæé€ ã»ãã¥ãªãã£ïŒãã¹ã¯ãŒããèªåçæã㊠AWS Secrets Manager ã«ä¿å æ§ç¯ãããã® èªååããŒã«ããã㯠VCF 9.0 ãš 9.1 ã®äž¡æ¹ã«å¯Ÿå¿ããŠããŸãããæ¬ããã°ã§ã¯ VCF 9.1 ã®ãããã€ã«çµã£ãŠèª¬æããŸãããã®ãŠã©ãŒã¯ã¹ã«ãŒãå®äºãããšã以äžãæ§ç¯ãããŸãã Route 53 DNSãBGP å¯Ÿå¿ Route Serverãå¿
èŠãªãããã¯ãŒãã³ã°ãåãã VPC ESXi 9.1 ãå®è¡ãã 3 å°ã®ãã¢ã¡ã¿ã«ãã¹ããæã€ Amazon EVS ç°å¢ å®å
šã«åäœãã VCF 9.1 ã¹ã¿ãã¯ïŒvCenterãSDDC ManagerãNSX ManagerãVCF OperationsãVCF Cloud Proxyã2 å°ã® NSX Edge NSX ãªãŒããŒã¬ã€ã»ã°ã¡ã³ããš VPC ã«ãŒãããŒãã«éã§åçãªã«ãŒãäŒæãè¡ã Tier-0 ããã³ Tier-1 ã²ãŒããŠã§ã€ EVS ãµãŒãã¹å
ã® Ops Manager Connector ã³ã¹ãã®èæ
®äºé
æ¬èªååã§ãããã€ããããªãœãŒã¹ã«ã¯ãEC2 ãã¢ã¡ã¿ã«ã³ã³ãã¥ãŒãã£ã³ã°ãAmazon EVS ã³ã³ãããŒã«ãã¬ãŒã³ãVPC Route ServerãTransit GatewayïŒæå¹åããå ŽåïŒãNAT GatewayãEBS ããªã¥ãŒã ãRoute 53 ãã¹ããŸãŒã³ãªã©ãçžåœãªæé¡è²»çšãçºçããŸãããããã€åã« Amazon EVS æéããŒãž ã確èªãã AWS Pricing Calculator ã䜿ã£ãŠç°å¢å
šäœã®ã³ã¹ããææ¡ããããšããå§ãããŸãã ã¢ãŒããã¯ãã£ã®æŠèŠ æ¬èªååã¯ãå®å
šãª Amazon EVS ç°å¢ãš VCF 9 ã 3 ã€ã®ã¹ããŒãžã«ããã£ãŠãããã€ããŸãïŒ1 ã¹ããŒãžã«ã€ã 1 ã€ã®ã¬ã€ã€ãŒïŒãæåã«èšå®ã®è©³çްãå
¥åããã ãã§ãåã¹ããŒãžã§çæããããªãœãŒã¹ ARN ãªã©ã®ã¡ã¿ããŒã¿ãšãšãã«èšå®å€ã次ã®ã¹ããŒãžãžèªåçã«åŒãç¶ãããŸããåãæ
å ±ã 2 床å
¥åããå¿
èŠã¯ãªããèšå®ãã¹ã倧å¹
ã«åæžã§ããŸããåã¹ããŒãžã®å
å®¹ã¯æ¬¡ã®ãšããã§ãã AWS åææ¡ä»¶ãšã¢ã³ããŒã¬ã€ïŒ VPCããµãŒãã¹ã¢ã¯ã»ã¹ãµãããããRoute 53ïŒãã©ã¯ãŒãããã³ãªããŒã¹ãŸãŒã³ïŒã2 ã€ã® BGP ãšã³ããã€ã³ããæã€ Route Serverãã»ãã¥ãªãã£ã°ã«ãŒãããªãã·ã§ã³ã® Transit Gatewayããªãã·ã§ã³ã® Windows ãžã£ã³ãããã¯ã¹ïŒèžã¿å°ãµãŒããŒïŒããªãã·ã§ã³ã®ãããªãã¯ãŸãã¯ãã©ã€ããŒã HCX æ¥ç¶ãªã©ãæ§ç¯ããŸãã EVS ã¬ã€ã€ãŒïŒ ãŸãã管çãvMotionãvSANãvTEPããšããžã¢ãããªã³ã¯ãªã©ã«äœ¿çšãã 10 åã® VLAN ãµãããããäœæããEVS ç°å¢ãæ§ç¯ããŸããæ¬¡ã«ãESXi 9.1 ã§èµ·åãã 3 å°ã®ãã¢ã¡ã¿ã«ãã¹ãïŒãŠãŒã¶ãŒãæå®ãã i4i.metal ãŸã㯠i7i.metal-24xlïŒãããããžã§ãã³ã°ããŸããæåŸã«ãVCF Installer ãã¹ããŒãžã³ã°ããããŒã¿ã¹ãã¢ãšã㊠EBS ããªã¥ãŒã ãäœæããããããã®ãã¹ãã«ããŠã³ãããŸãã VCF ã®ã€ã³ã¹ããŒã«ãš NSX ã«ãŒãã£ã³ã°ïŒ VCF Installer ã®ãããèšå®ããã¿ãŒã²ãã VCF ããŒãžã§ã³ã«åºã¥ããŠãã€ããªã®ããŠã³ããŒããèªåçã«ããªã¬ãŒããŸããæ¬¡ã« vCenterãSDDC ManagerãNSX ManagerãVCF OperationsãVCF Cloud Proxyãã¢ã¯ãã£ã/ã¹ã¿ã³ãã€æ§æã® 2 å°ã® NSX Edge ããããã€ããŸãããšããžã¯ BGP ã§ AWS Route Server ãšãã¢ãªã³ã°ããNSX ã»ã°ã¡ã³ãã«ãŒãã VPC ã«ã¢ããã¿ã€ãºããŸãã 3 ãã§ãŒãºã®èªååã¢ãããŒã æ¬èªåå㯠3 ã€ã®é 次ãã§ãŒãºã§æ§æãããŠãããããããç¬èªã®ããŒã«ãšç®çãæã¡ãŸãã ãã§ãŒãº ã¹ã¿ã㯠å
容 1 Terraform VPCãRoute 53ãRoute Serverãã»ãã¥ãªãã£ã°ã«ãŒãããªãã·ã§ã³ã® Transit Gatewayããªãã·ã§ã³ã®ãžã£ã³ãããã¯ã¹ããªãã·ã§ã³ã®ãããªãã¯æ¥ç¶ãªã© 2 Python (boto3) EVS ç°å¢ãš VLAN ãµããããã®äœæãESXi 9.1 ãæèŒãããã¢ã¡ã¿ã«ãã¹ãã®ããããžã§ãã³ã°ãã€ã³ã¹ããŒã©ãŒã¹ããŒãžã³ã°çš EBS ããªã¥ãŒã ã®äœæãšã¢ã¿ãã 3 Python (VCF SDK + boto3) ããã®èšå®ããã€ããªã®ããŠã³ããŒããVCF bringupãã€ã³ã¹ããŒã©ãŒã®ã¯ãªãŒã³ã¢ãããNSX Edge Cluster ãšã«ãŒãã£ã³ã°ã®ãããã€ãOps Manager Connector ã®äœæ ãã§ãŒãº 1 ãš 2 㯠MacãLinuxããŸã㯠Windows ã¯ãŒã¯ã¹ããŒã·ã§ã³ããããŒã«ã«ã§å®è¡ããŸãããã§ãŒãº 3 㯠VPC å
ã®ãžã£ã³ãããã¯ã¹ããå®è¡ããŸãïŒVCF Installer ããã³ NSX Manager ãžã®çŽæ¥æ¥ç¶ã«å¿
èŠïŒãå¯äžã®æåã¹ãããã¯ããã§ãŒãº 2 ãš 3 ã®éã«è¡ã 2 ã€ã®ç°¡å㪠ESXi èšå®ãš VCF Installer OVA ã®ãããã€ã§ãããããã€å
šäœã®æèŠæéã¯ããã 3.5ã6 æéã§ã倧éšåã¯ãã§ãŒãº 3 ã® VCF bringup ããã»ã¹ãå ããŸãã åææ¡ä»¶ AWS ã¢ã«ãŠã³ããšæš©é 以äžãæºãã AWS ã¢ã«ãŠã³ã AWS Business Support ä»¥äž EVS ç°å¢ãããã®ãã¹ãæ°ãµãŒãã¹ã¯ã©ãŒã¿ã 3 以äžã«èšå®æžã¿ ãªã³ããã³ãã¹ã¿ã³ããŒãïŒAãCãDãHãIãMãRãTãZïŒã€ã³ã¹ã¿ã³ã¹ã®ãµãŒãã¹ã¯ã©ãŒã¿ã 256 以äžã«èšå®æžã¿ ã³ãŒããªããžããªã®ãã§ãŒãº 1 é
äžã«ãã iam_policy.json ãã¡ã€ã«ã§å®çŸ©ãããæš©éããªã·ãŒãæã€ IAM ãŠãŒã¶ãŒãŸãã¯ããŒã« ããŒã«ã«ã¯ãŒã¯ã¹ããŒã·ã§ã³ã®ããŒã« Terraform 1.7 以é Python 3.12 以é AWS CLI v2 ïŒAWS_PROFILE ãŸãã¯ç°å¢å€æ°ã§ã¯ã¬ãã³ã·ã£ã«ãèšå®æžã¿ïŒ pip ïŒPython äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«çšïŒ git ïŒã³ãŒããªããžããªã®ã¯ããŒã³çšïŒ Broadcom ããããŒã¯ã³ ãã§ãŒãº 3 ã§ã¯ Broadcom ãããã VCF ã³ã³ããŒãã³ãã®ãã€ããªãããŠã³ããŒãããŸããBroadcom ãµããŒãããŒã¿ã«ã®ãMy DashboardãâãQuick LinksãâãGenerate Download TokenãããããŠã³ããŒãããŒã¯ã³ãçæããŠãã ããããã®ããŒã¯ã³ã¯ãã§ãŒãº 3 ã®å®è¡åã« VCF_DEPOT_TOKEN ç°å¢å€æ°ãšããŠèšå®ããŸãã VCF Installer OVA Broadcom ããŠã³ããŒãããŒã¿ã«ãã VCF 9.1 Installer OVA ãããŠã³ããŒãããŠãã ããããã®ã¢ãã©ã€ã¢ã³ã¹ã¯ãã§ãŒãº 2 ãš 3 ã®éã«ãããããã® ESXi ãã¹ãäžãžæåã§ãããã€ããŸãã ãªããžããªã®ã¯ããŒã³ èªååãªããžããªãã¯ããŒã³ ããŠããŒã«ã«ã¯ãŒã¯ã¹ããŒã·ã§ã³ã«é
眮ããŠãã ããïŒãã®ã³ãã³ã㯠Linux ãš Windows ã®äž¡æ¹ã§äœ¿çšã§ããŸãïŒã git clone https://github.com/aws/solutions-for-amazon-evs.git cd solutions-for-amazon-evs/Deploy/VCF9-Phased-Deployment ãã§ãŒãº 0ïŒãããã€åã®å
¥å¿µãªèšç» èªååãå®è¡ããåã«ãèšå®ãã¡ã€ã«ãæ
éã«èšç»ããŠå
¥åããå¿
èŠããããŸãããã®ã¹ãããã¯éåžžã«éèŠã§ããã€ã³ãã©ã¹ãã©ã¯ãã£ããããã€ããåŸã¯ãç°å¢å
šäœãè§£äœããŠåæ§ç¯ããªããã°å€æŽã§ããªãå€ã倿°ãããããæéããããŠæ£ç¢ºã«èšå®ããŠãã ããã èªååã§ã¯ãæåã« 1 床ã ãå
¥åãã 2 ã€ã®èšå®ãã¡ã€ã«ã䜿çšããŸãããã®åŸã®ãã§ãŒãºã¯ãããã®ãã¡ã€ã«ããå€ãèªã¿åããæ¬¡ã®ãã§ãŒãºãžèªåçã«åŒãç¶ããŸãã terraform.tfvarsïŒãã§ãŒãº 1 ã®å
¥åïŒ ãã®ãã¡ã€ã«ã¯ AWS ã€ã³ãã©ã¹ãã©ã¯ãã£ã®åºç€ãå®çŸ©ããŸãã terraform.tfvars.example ã terraform.tfvars ã«ã³ããŒããŠä»¥äžãèšå®ããŠãã ããïŒLinuxïŒã cd Phase_1_Base_Infrastructure cp terraform.tfvars.example terraform.tfvars Windows ã®å ŽåïŒ cd Phase_1_Base_Infrastructure copy terraform.tfvars.example terraform.tfvars 以äžã®å€ãå®éã®ç°å¢ã«åãããŠæŽæ°ããŠãã ããã region ïŒãããã€å
ã® AWS ãªãŒãžã§ã³ïŒäŸïŒus-east-2ïŒãAmazon EVS ãå©çšå¯èœãªãªãŒãžã§ã³ãæå®ããŠãã ããã availability_zone ïŒãªãŒãžã§ã³å
ã®ç¹å®ã® AZïŒäŸïŒus-east-2aïŒããã¹ãŠã®ãªãœãŒã¹ã¯åäžã® AZ ã«ãããã€ãããŸããEC2 ãã£ãã·ãã£äºçŽãããå Žåã¯ãäºçŽæžã¿ã® AZ ãšäžèŽãããŠãã ããã fqdn ïŒç°å¢ã®å®å
šä¿®é£Ÿãã¡ã€ã³åïŒäŸïŒmylab.evs.awsïŒãRoute 53 ãã©ã¯ãŒããã¹ããŸãŒã³ãšãªãããã¹ãŠã® DNS ã¬ã³ãŒãã«äœ¿çšãããŸããæ
éã«éžæããŠãã ããã cidr_prefix ïŒVPC CIDR ã®æåã® 2 ãªã¯ãããïŒäŸïŒâ10.0.âïŒãèªååã¯ãã®ãã¬ãã£ãã¯ã¹ãããã¹ãŠã® VLAN ãµãããã CIDR ãå°åºããŸããTransit Gateway ãŸã㯠Direct Connect ã§æ¥ç¶ããäºå®ã®ãããã¯ãŒã¯ãšéè€ããªãããã«ããŠãã ããã DNS ãã¹ãå ïŒå VCF ã¢ãã©ã€ã¢ã³ã¹ãš ESXi ãã¹ãã®çã DNS åïŒesxi01_name ãã vcf_fleet_name ãŸã§ïŒã create_tgw ïŒä»ã® VPC ããªã³ãã¬ãã¹ãããã¯ãŒã¯ãžã® Transit Gateway æ¥ç¶ãå¿
èŠãªå Žå㯠true ã«èšå®ããŠãã ããã create_jumpbox ïŒWindows ãžã£ã³ããã¹ããäœæããå Žå㯠true ã«èšå®ããŠãã ãããVPC å
ããå®è¡ããå¿
èŠããããã§ãŒãº 3 ã«å¿
é ã§ãããã®ãã©ã°ãæå¹ã«ããããšããå§ãããŸãã enable_public_hcx ïŒHCX ã€ã³ã¿ãŒãããæ¥ç¶çšã®ãããªã㯠IP ã¹ããŒã¹ãå²ãåœãŠãå Žå㯠true ã«èšå®ããŠãã ãããfalse ã®å ŽåãHCX ã¯ãã©ã€ããŒã VLAN ã䜿çšããŸãïŒDirect Connect ãŸã㯠Transit Gateway çµç±ã® HCX ã«é©ããŠããŸãïŒã VPC CIDR ã®å岿¹æ³ cidr_prefix ã§æåã® 2 ãªã¯ãããã®ã¿æå®ããŸãïŒäŸïŒâ10.0.âïŒãèªåå㯠/16 ã® VPC ãäœæããããŒãã³ãŒãããã第 3 ãªã¯ãããã䜿ã£ãŠ /24 ã® VLAN ãµããããã«åå²ããŸãã <prefix>0.0/24 â ãµãŒãã¹ã¢ã¯ã»ã¹ãµãããã <prefix>10.0/24 â ãã¹ã vmkernel 管çïŒvmkManagementïŒ <prefix>20.0/24 â vMotion <prefix>30.0/24 â vSAN <prefix>40.0/24 â Host TEP (vTep) <prefix>50.0/24 â Edge TEP (edgeVTep) <prefix>60.0/24 â VM 管çïŒvmManagementïŒ <prefix>70.0/24 â HCX <prefix>80.0/24 â NSX ã¢ãããªã³ã¯ïŒnsxUplinkïŒ <prefix>90.0/24 â æ¡åŒµ VLAN 1 <prefix>100.0/24 â æ¡åŒµ VLAN 2 config.json ã§ãããã® VLAN ãµãããã CIDR ã倿Žããå Žåã¯ãNSX Edge IPãRoute 53 ã€ã³ããŠã³ããªãŸã«ããŒãšã³ããã€ã³ãïŒ<prefix>0.100 ããã³ <prefix>0.101ïŒãBGP ã¢ãããªã³ã¯ã¢ãã¬ã¹ãªã©ããµããããå
ã«èšå®ãããããŒãã³ãŒãããã IP ã¢ãã¬ã¹ãšç«¶åããªãããæ³šæããŠãã ããã config.jsonïŒãã§ãŒãº 2 ã®å
¥åïŒ ãã®ãã¡ã€ã«ã¯ EVS ç°å¢ãš VCF ãããã€ãã©ã¡ãŒã¿ãŒãå®çŸ©ããŸãã config.example.json ã config.json ã«ã³ããŒããŠä»¥äžãèšå®ããŠãã ããïŒLinuxïŒã cd Phase_2_evs_env/python cp config.example.json config.json Windows ã®å ŽåïŒ cd Phase_2_evs_env/python copy config.example.json config.json 以äžã®å€ãå®éã®ç°å¢ã«åãããŠæŽæ°ããŠãã ããã environmentName ïŒEVS ç°å¢ã®ããããããååãAWS ã³ã³ãœãŒã«ã«è¡šç€ºããããªãœãŒã¹ã®ã¿ã°ä»ãã«äœ¿çšãããŸãã vcfInstallerProductVersion ïŒVCF Installer ã®è£œåããŒãžã§ã³çªå·ã®ã¿ïŒãã«ãæååã¯å«ããªãïŒãäŸïŒâ9.1.0.0â³ãæ£ç¢ºãªå€ã¯ OVA ãã¡ã€ã«åãŸãã¯ã€ã³ã¹ããŒã©ãŒ UI ã®èšå®ããŒãžã§ç¢ºèªããŠãã ããã simpleDeployment ïŒåäžã©ãã¯ã»ã·ã³ãã«ãããã€ïŒæå° 3 ãã¹ãïŒã®å Žå㯠trueãåäžã©ãã¯ã»HA ãããã€ïŒæå° 4 ãã¹ãïŒã®å Žå㯠false ãèšå®ããŠãã ããããã®èšå®ã¯ããããã€ããã NSX Manager ãš VCF Operations ããŒãã®æ°ã«åœ±é¿ããŸãã詳现㯠Single-Rack vSphere ã¯ã©ã¹ã¿ãŒã¢ãã«ã®ããã¥ã¡ã³ã ãåç
§ããŠãã ããã vcfSizing ïŒvCenterïŒvmSizeãstorageSizeïŒãNSXïŒnsxSizeïŒãVCF OperationsïŒoperationsApplianceSizeãoperationsCollectorApplianceSizeïŒã®ã¢ãã©ã€ã¢ã³ã¹ãµã€ãžã³ã°ãã»ãšãã©ã®ãããã€ã§ã¯ âmediumâ ã®ããã©ã«ãå€ãé©åã§ãã ãã³ãïŒ FQDNãCIDR ãã¬ãã£ãã¯ã¹ããã¹ãåã®éžæã¯äºåã«åå確èªããŠãã ããããã§ãŒãº 1 ã®ãããã€åŸã«ãæ€èšŒããããšããå§ãããŸãããã§ãŒãº 1 ã®åé€ãšåãããã€ã¯æ°åã§å®äºããããããã®æç¹ã§ããã°å€æŽã¯å®¹æã§ãããã§ãŒãº 2 ã§ FQDN ã CIDR ãªã©ã®å€ãçµã¿èŸŒãã EVS ç°å¢ããããã€ããããšã倿Žã«ã¯æåããåæ§ç¯ãå¿
èŠã«ãªããŸãã ãã§ãŒãº 1ïŒåºç€ AWS ã€ã³ãã©ã¹ãã©ã¯ãã£ïŒTerraformïŒ ãã§ãŒãº 1 ã§äœæããããã® ãã§ãŒãº 1 ã¯ãEVS ãå¿
èŠãšãã AWS ãããã¯ãŒã¯ããã³ãµããŒããªãœãŒã¹ããã¹ãŠããããžã§ãã³ã°ããŸãã terraform apply ãå®äºãããšïŒéåžž 3ã5 åïŒã以äžãæ§æãããŸãã VCF ã¢ãã©ã€ã¢ã³ã¹ãš ESXi ãã¹ãçšã® Route 53 ãã©ã€ããŒããã¹ããŸãŒã³ ãã©ã¯ãŒããã¹ããŸãŒã³ïŒA ã¬ã³ãŒãïŒ ãªããŒã¹ãã¹ããŸãŒã³ïŒPTR ã¬ã³ãŒãïŒ 2 ã€ã® IP ãæã€ã€ã³ããŠã³ããªãŸã«ããŒãšã³ããã€ã³ã Amazon VPC å°çšãµãŒãã¹ã¢ã¯ã»ã¹ã«ãŒãããŒãã«ã«é¢é£ä»ãããããã©ã€ããŒããµãŒãã¹ã¢ã¯ã»ã¹ãµãããã å°çšãããªãã¯ã¢ã¯ã»ã¹ã«ãŒãããŒãã«ã«é¢é£ä»ãããããããªãã¯ã¢ã¯ã»ã¹ãµãããã Elastic IP ãæã€ NAT Gateway Internet Gateway FQDNãRoute 53 ã€ã³ããŠã³ããªãŸã«ã㌠IPãNTPïŒ169.254.169.123ïŒAWS NTP ãµãŒããŒïŒãèšå®ãã DHCP ãªãã·ã§ã³ã»ãã VPC CIDR ããã®åä¿¡ãèš±å¯ããå°çš EVS ãµãŒãã¹ã¢ã¯ã»ã¹ã»ãã¥ãªãã£ã°ã«ãŒã VPC Route Server VPC ã«é¢é£ä»ãæžã¿ ããããã㢠IPãã㢠ASNïŒ65000ïŒãBGP ããŒãã¢ã©ã€ããèšå®ãã 2 ã€ã® Route Server ãšã³ããã€ã³ã ãµãŒãã¹ã¢ã¯ã»ã¹ã«ãŒãããŒãã«ãšãããªãã¯ã¢ã¯ã»ã¹ã«ãŒãããŒãã«ãžã® 2 ã€ã® Route Server äŒæ EVS ãã¹ãçšã® EC2 ããŒã㢠ïŒãªãã·ã§ã³ïŒã¢ã³ããŒã¬ã€ VPC ãžã® VPC ã¢ã¿ããã¡ã³ããæã€ Transit Gateway ïŒãªãã·ã§ã³ïŒVPC å
ã® Windows ãžã£ã³ããã¹ã ãžã£ã³ããã¹ãçšã® VPC ãããªãã¯ãµãããã Internet Gateway ãžã®ã«ãŒããæã€ãžã£ã³ããã¹ãçšå°çšã«ãŒãããŒãã« å°çšã«ãŒãããŒãã«ãžã® Route Server äŒæ VPC CIDR ãš EVS ãµãŒãã¹ã¢ã¯ã»ã¹ã»ãã¥ãªãã£ã°ã«ãŒãããã®ãã¹ãŠã®ãã©ãã£ãã¯ãèš±å¯ãããžã£ã³ããã¹ãçšå°çšã»ãã¥ãªãã£ã°ã«ãŒã 50 GB æå·å gp3 ã«ãŒãããªã¥ãŒã ãšãããªã㯠IPv4 ã¢ãã¬ã¹ãæã€ãWindows Server 2025 ãå®è¡ãã t3.2xlarge EC2 ã€ã³ã¹ã¿ã³ã¹ ãžã£ã³ããã¹ãçšå°çš EC2 ããŒã㢠泚ïŒãã®ããŒãã¢ã¯ âJumpbox-KeyPairâ ãšããååã§ããååã®ããŒãã¢ãæ¢ã«ååšããå Žåããã®ã³ãŒãã¯å€±æããŸãããã®å Žåã¯ã³ãŒãå
ã§ããŒãã¢åã倿ŽããŠãã ããã ïŒãªãã·ã§ã³ïŒãããªã㯠HCX æ¥ç¶ IPv4 IPAM ããŒã« é£ç¶ãããããªã㯠IP ã¹ããŒã¹ã® /28 VPC CIDR ãžã®ãããªã㯠/28 ã®è¿œå ãããã€ã®å®è¡ïŒLinuxïŒïŒ export AWS_PROFILE=your-profile-name terraform init terraform plan terraform apply Windows ã®å ŽåïŒ $env:AWS_PROFILE = "your-profile-name" terraform init terraform plan terraform apply Terraform 㯠VPC IDããµãããã IDãRoute Server ãšã³ããã€ã³ã IPãã»ãã¥ãªãã£ã°ã«ãŒã ID ãªã©ã®å€ãåºåããŸãããã§ãŒãº 2 ã¯ãããã terraform.tfstate ãã¡ã€ã«ããçŽæ¥èªã¿åããŸãããã§ãŒãº 1 ã®ãããã€ã¯ããã 5ã10 åã§å®äºããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ€èšŒ ãã§ãŒãº 1 ã®å®äºåŸãAWS ã³ã³ãœãŒã«ã§ä»¥äžã確èªããŠãã ããã æåŸ
ããã CIDR ã§ VPC ãäœæãããŠããããš Route 53 ãã¹ããŸãŒã³ã«ããã¹ãŠã® VCF ã¢ãã©ã€ã¢ã³ã¹ãš ESXi ãã¹ãã® A ã¬ã³ãŒãããã³ PTR ã¬ã³ãŒããå«ãŸããŠããããš Route Server ã® 2 ã€ã®ãšã³ããã€ã³ãã âAvailableâ ç¶æ
ã§ããããš ãžã£ã³ãããã¯ã¹ã䜿çšããå ŽåïŒã€ã³ã¹ã¿ã³ã¹ãå®è¡äžã§ãããªã㯠IP ãæã€ããš ãžã£ã³ãããã¯ã¹ããããã€ããå Žåã¯ã以äžã®æé ã§ RDP ã¢ã¯ã»ã¹ã確ç«ããŠãã ããã Jumpbox-SG ã»ãã¥ãªãã£ã°ã«ãŒãã«ãèªåã® IP ã¢ãã¬ã¹ããã® RDPïŒTCP 3389ïŒãèš±å¯ããã€ã³ããŠã³ãã«ãŒã«ã远å ãã EC2 ããŒãã¢ãååŸã㊠Windows Administrator ãã¹ã¯ãŒãã埩å·ãããPEM ãã¡ã€ã«ãããŠã³ããŒãããïŒLinuxïŒïŒ KEY_PAIR_ID=$(terraform output -raw jumpbox_key_pair_id) aws ssm get-parameter --name /ec2/keypair/$KEY_PAIR_ID --with-decryption \ --region us-east-2 --query 'Parameter.Value' --output text > jumpbox.pem chmod 400 jumpbox.pem Windows ã®å ŽåïŒ $KEY_PAIR_ID = terraform output -raw jumpbox_key_pair_id aws ssm get-parameter --name "/ec2/keypair/$KEY_PAIR_ID" --with-decryption ` --region us-east-2 --query 'Parameter.Value' --output text | Out-File -Encoding ascii jumpbox.pem icacls jumpbox.pem /inheritance:r /grant:r "$($env:USERNAME):(R)" ãã® PEM ãã¡ã€ã«ã EC2 ã³ã³ãœãŒã«ïŒConnect > Get Windows PasswordïŒã§äœ¿çšã㊠Administrator ãã¹ã¯ãŒãã埩å·ããŠãã ããã æåŸã«ãVCF Installer OVA ããžã£ã³ããã¹ãã«ããŠã³ããŒããŸãã¯ã³ããŒããŠãã ããããã§ãŒãº 2 ãš 3 ã®éã®æåäœæ¥ã¹ãããã§å¿
èŠã«ãªããŸãã ãã§ãŒãº 2ïŒEVS ç°å¢ã®ãããã€ïŒPythonïŒ ãã§ãŒãº 2 ã®åŠçå
容 ãã§ãŒãº 2 㯠Python CLI ã§ãAWS API çµç±ã§ EVS ãããã€ã調æŽããSDDC bringup 仿§ãš NSX ãããã€ä»æ§ãæ§ç¯ããŸããåäžã® CLI ã³ãã³ãã§ã以äžã® 6 ã€ã®ãµãã¹ããããé çªã«å®è¡ããŸãã pre-evs-sync-config ïŒãã§ãŒãº 1 ã® Terraform ã¹ããŒããèªã¿åããVCF bringup 仿§ãšãšããžã¯ã©ã¹ã¿ãŒä»æ§ã®åæçãçæ create-environment-and-hosts ïŒAWS API ãåŒã³åºã㊠EVS ç°å¢ãäœæããå®äºåŸã«ãã¢ã¡ã¿ã«ãã¹ããããããžã§ãã³ã°ïŒ15ã20 åïŒ ãã¹ãŠã®ãã¹ãã CREATED ã¹ããŒã¿ã¹ã«ãªããŸã§åŸ
æ©ïŒ20ã40 åïŒ post-evs-sync-config ïŒç°å¢ãšãã¹ã ID ããæŽŸçããååã§ SDDC 仿§ã確å®ãã察å¿ãã VCF ãã¹ã¯ãŒãã Secrets Manager ã«ããããžã§ãã³ã° associate-vlan-subnets ïŒ10 åã® EVS VLAN ãµããããããã¹ãŠãµãŒãã¹ã¢ã¯ã»ã¹ã«ãŒãããŒãã«ã«é¢é£ä»ã create-and-attach-ebs ïŒ256 GB ã® gp3 EBS ããªã¥ãŒã ãäœæããVCF Installer VMFS çšãšã㊠1 å°ã®ãã¹ãã«ã¢ã¿ãã deploy-environment ã®å®è¡ Python ç°å¢ãã»ããã¢ããããåäžã³ãã³ãã§ãã§ãŒãº 2 ã®ãã€ãã©ã€ã³å
šäœãå®è¡ããŸãïŒLinuxïŒã python -m venv .venv source .venv/bin/activate pip install -r requirements.txt python -m src.main deploy-environment \ --profile your-aws-profile \ --config config.json \ --tfstate ../../Phase_1_Base_Infrastructure/terraform.tfstate \ --instance-type <INSTANCE_TYPE> # 'i4i.metal' or 'i7i.metal-24xl' Windows ã®å ŽåïŒ py -m venv .venv .venv\Scripts\Activate.ps1 pip install -r requirements.txt python -m src.main deploy-environment ` --profile your-aws-profile ` --config config.json ` --tfstate ..\..\Phase_1_Base_Infrastructure\terraform.tfstate ` --instance-type <INSTANCE_TYPE> # 'i4i.metal' or 'i7i.metal-24xl' ãã®ã³ãã³ã㯠6 ã€ã®ãµãã¹ããããèªåçã«é£çµããŠå®è¡ããŸããåèšæèŠæéã¯ããã 30ã45 åã§ã倧éšåã¯ãã¢ã¡ã¿ã«ãã¹ããããããžã§ãã³ã°ãã㊠CREATED ã¹ããŒã¿ã¹ã«ãªããŸã§ã®åŸ
æ©æéãå ããŸãããããã°çšã«åãµãã¹ããããåå¥ã«å®è¡ããããšãå¯èœã§ãããåäžã³ãã³ãã«ããã¢ãããŒãã åŒ·ãæšå¥š ããŸãã Secrets Manager ã«ãããã¹ã¯ãŒã管ç ãã§ãŒãº 2 ã®æ§ç¯äžãpost-evs-sync-config ãµãã¹ãããããã¹ãŠã® VCF ã¢ãã©ã€ã¢ã³ã¹çšã®è€éãªãã¹ã¯ãŒããèªåçæããAWS Secrets Manager ã«ä¿åããŸããåœåãã¿ãŒã³ã¯ evs-<environment-id>_<role> ã§ãã VCF ã®ã¢ã«ãŠã³ãã«ã¯ vcenterRoot ã vcenterSso ã nsxRoot ã nsxAdmin ã nsxAudit ã sddcManagerRoot ã sddcManagerSsh ã sddcManagerLocal ã operationsAdmin ã operationsMaster ã operationsCollector ã edgeAppliance ãå«ãŸããŸãã bringup 仿§ã¯ãã¬ãŒã¹ãã«ããŒããŒã¯ã³ãéããŠãããã®ãã¹ã¯ãŒããåç
§ããŸãããã§ãŒãº 3 ã¯å®è¡æã« Secrets Manager ãããã¹ã¯ãŒãã解決ãããããå¹³æãã¹ã¯ãŒãããã£ã¹ã¯ã«æžã蟌ãŸããããšã¯ãããŸããã æåã«ããäºåäœæ¥ïŒESXi èšå®ãšã€ã³ã¹ããŒã©ãŒ OVA ãã§ãŒãº 2 ãš 3 ã®éã«ãããã€ãã®ç°¡åãªæé ãæåã§å®æœããå¿
èŠããããŸãããããã€å
šäœãéããŠå¯äžã®éèªååéšåã§ãããæèŠæéã¯ããã 30 åã§ãã以äžã®æé ã¯ãã¹ãŠããã§ãŒãº 2 ã§ EBS ããªã¥ãŒã ãåãåã£ã 1 å°ã® ESXi ãã¹ãäžã§å®æœããŸãã EBS ããªã¥ãŒã ãžã® VMFS ããŒã¿ã¹ãã¢ã®äœæ ãã§ãŒãº 2 ã§ããããã® ESXi ãã¹ãã« 256 GB ã® EBS ããªã¥ãŒã ãã¢ã¿ããããŸããããã§ãŒãº 2 ã®ã³ã³ãœãŒã«åºåã§ãã©ã®ãã¹ããããªã¥ãŒã ãåãåã£ãã確èªã§ããŸããVCF Installer ã¢ãã©ã€ã¢ã³ã¹ããã¹ãããããã«ãVMFS ããŒã¿ã¹ãã¢ãšããŠãã©ãŒãããããå¿
èŠããããŸãã ESXi ãã¹ã UIïŒ https://<esxi-host-ip> ïŒã« root ãšããŠãã°ã€ã³ããŸããroot ãã¹ã¯ãŒã㯠AWS Secrets Manager ããååŸããŠãã ããïŒã·ãŒã¯ã¬ããå㯠evs-<environment-id>_<role> ã®ãã¿ãŒã³ã§ãïŒã Storage ã«ç§»åããNew Datastore ãéžæãã NVMe ããã€ã¹ïŒ256 GB EBS ããªã¥ãŒã ïŒãéžæã㊠VMFS ããŒã¿ã¹ãã¢ãäœæãã VM Network ããŒãã°ã«ãŒããžã® VLAN ã¿ã°ä»ã EBS ããªã¥ãŒã ãæã€ ESXi ãã¹ãã§ãããã©ã«ãã® âVM Networkâ ããŒãã°ã«ãŒãã« VLAN ID 20 ãã¿ã°ä»ãããVCF Installer ã VM 管çãããã¯ãŒã¯ã§éä¿¡ã§ããããã«ããŸãã ESXi UI ã§ Networking ã«ç§»åããPort groups ãéžæãã âVM Networkâ ããŒãã°ã«ãŒããç·šéãã VLAN ID ã 20 ã«èšå®ãã VCF Installer OVA ã®ããã〠VMFS ããŒã¿ã¹ãã¢ãæã€ãã¹ãäžã« VCF Installer ã¢ãã©ã€ã¢ã³ã¹ããããã€ããŸãã ESXi UI ã§ Virtual Machines > Create/Register VM > Deploy OVF template ã«ç§»åãã VCF 9.1 Installer OVA ãã¡ã€ã«ãã¢ããããŒããã äžèšã§äœæãã 256 GB VMFS ããŒã¿ã¹ãã¢ã«é
眮ãã âVM Networkâ ããŒãã°ã«ãŒãã«ã¢ã¿ãããã 管ç IP ã DNS èšå®ã® SDDC Manager IP ã¢ãã¬ã¹ã«èšå®ãã ããããã¹ã¯ã 255.255.255.0 ã«èšå®ãã admin@local ãã¹ã¯ãŒããèšå®ãããæåã§éžæããå¯äžã®ãã¹ã¯ãŒãã§ããç¬èªã®ãã¹ã¯ãŒããäœæããããSecrets Manager ã«çææžã¿ã®ãã¹ã¯ãŒãã䜿çšããããšãã§ããŸãããã§ãŒãº 3 ã§å¿
èŠã«ãªããããã¹ã¯ãŒããæ§ããŠãããŠãã ããã ã¢ãã©ã€ã¢ã³ã¹ã®é»æºãå
¥ããèµ·åãåŸ
ã€ïŒ https://<sddcm_name>.<your-fqdn> ã§ã¢ã¯ã»ã¹ã確èªïŒ ãã§ãŒãº 3ïŒVCF Bringup ãš NSX Edge ClusterïŒPythonïŒ ãã§ãŒãº 3 ã®åŠçå
容 ãã§ãŒãº 3 㯠EVS ç°å¢ããã¹ããã VPC å
ã®ãžã£ã³ããã¹ãããå®è¡ããå¿
èŠããããŸããå
¬åŒ VMware VCF Python SDKïŒvcf-installerãvcf-nsxïŒãš vCenter æäœçš pyvmomiãããã³å¯Ÿå¿ãã AWS æäœçš boto3 ã©ã€ãã©ãªã䜿çšããŸããåäžã® CLI ã³ãã³ãã§ã以äžã® 7 ã€ã®ãµãã¹ããããé çªã«å®è¡ããŸãã Secrets Manager äºåç¢ºèª ïŒéå§åã«å¿
èŠãªãã¹ãŠã® Secrets Manager ã·ãŒã¯ã¬ãããååšããããšã確èªãäžè¶³ããŠããå Žåãäžè¶³ããŠãã VCF ã¢ã«ãŠã³ããæç€ºãããšã©ãŒã§ãã€ãã©ã€ã³ãå³åº§ã«çµäºã prepare-depot ïŒBroadcom ããŠã³ããŒãããŒã¯ã³ãã€ã³ã¹ããŒã©ãŒã«èšå®ããããã«ã¿ãã°ãåæããŠå¿
èŠãªãã¹ãŠã®ã³ã³ããŒãã³ããã€ããªãããŠã³ããŒãïŒçŽ 30ã60 åïŒ start-bringup --wait ïŒbringup 仿§ã VCF Installer ã«éä¿¡ããã¯ãŒã¯ãããŒãå®äºãããŸã§ããŒãªã³ã°ãvCenterãNSX ManagerãSDDC ManagerãVCF Operations ããããã€ïŒçŽ 2ã4 æéïŒ remove-installer-datastore ïŒæåã§äœæãã 256 GB VMFS ããŒã¿ã¹ãã¢äžã® VM ã vSAN ã«ã¹ãã¬ãŒãž vMotion ããããŒã¿ã¹ãã¢ãã¢ã³ããŠã³ãïŒçŽ 5ã10 åïŒ destroy-ebs-volume ïŒAWS åŽããã¢ã³ããŠã³ãæžã¿ VMFS ããŒã¿ã¹ãã¢ããã¹ãããŠãã EBS ããªã¥ãŒã ããã¿ããããŠåé€ïŒçŽ 30 ç§ïŒ deploy-edge-cluster ïŒ2 å°ã® NSX Edge ã¢ãã©ã€ã¢ã³ã¹ããããã€ãããšããžã¯ã©ã¹ã¿ãŒãäœæããTier-0/Tier-1 ã«ãŒãã£ã³ã°ãèšå®ããAWS Route Server ãšã® BGP ãã¢ãªã³ã°ã確ç«ïŒçŽ 30ã50 åïŒ create-connector ïŒVCF Operations Manager ã³ãã¯ã¿ãŒã CreateEnvironmentConnector çµç±ã§ EVS ã«ç»é²ã ACTIVE ã«ãªããŸã§ããŒãªã³ã°ïŒçŽ 2ã5 åïŒ ä»¥äžã®ãµãã»ã¯ã·ã§ã³ã§ã¯ããã§ãŒãº 3 ã®å
éšåŠçãããè©³çŽ°ã«æ®µéçã«èª¬æããŸãã deploy-vcf-and-edge ã®å®è¡ ãšé¡ããã»ã¯ã·ã§ã³ã«ããã§ãŒãº 3 ã®ã¯ãŒã¯ãããŒå
šäœãå®è¡ããåäžã³ãã³ããèšèŒãããŠããŸãã ãããšãã³ãã«ã®ç®¡ç prepare-depot ãµãã¹ãããã¯ãVCF Installer UI ã«ãã°ã€ã³ã㊠Broadcom ãããèšå®ããæåããã»ã¹ãèªååããŸããå
·äœçã«ã¯ä»¥äžãå®è¡ããŸãã VCF SDK çµç±ã§ããããŒã¯ã³ãã€ã³ã¹ããŒã©ãŒã«ä¿å ã¡ã¿ããŒã¿åæãããªã¬ãŒããŠãã³ãã«ã«ã¿ãã°ãæŽæ° ã¿ãŒã²ããããŒãžã§ã³ã«äžèŽãããã¹ãŠã® INSTALL ã¿ã€ããã³ãã«ãç¹å® å¿
èŠãªãã¹ãŠã®ã³ã³ããŒãã³ããã€ããªïŒvCenterãNSXãSDDC ManagerãVCF OperationsãESXiïŒãããŠã³ããŒã ãã¹ãŠã®ããŠã³ããŒããå®äºãããŸã§ããŒãªã³ã°ãããã®åŸ bringup ã«é²ã ãã³ã ïŒããã®åé¡ããããã°ããå¿
èŠãããå Žåãlist-bundlesãget-depot-settingsãsync-depot ãªã©ã®åå¥ã¢ã¯ã·ã§ã³ãã¹ã¿ã³ãã¢ãã³ CLI ã³ãã³ããšããŠå®è¡ã§ããŸãã VCF bringup ã¯ãŒã¯ãã㌠start-bringup ã¢ã¯ã·ã§ã³ã¯åä»ãã® SddcSpec ã VCF Installer ã«éä¿¡ããã¯ãŒã¯ãããŒãç£èŠããŸããbringup äžã«ã€ã³ã¹ããŒã©ãŒã¯ä»¥äžãå®è¡ããŸãã ESXi ãã¹ãã VCF 管çãã¡ã€ã³ã«ã³ããã·ã§ã³ vCenter Server ããããã€ããŠèšå® NSX Manager ããããã€ããŠä»®æ³ IP ã¢ãã¬ã¹ã§ã¯ã©ã¹ã¿ãŒå SDDC Manager ãããã〠VCF Operations ãããã〠ãã¹ãŠã®ãã¹ãã§ vSAN ESA ãèšå® å¿
èŠãªãã¹ãŠã®ããŒãã°ã«ãŒããæã€åæ£ä»®æ³ã¹ã€ãããäœæ ãã³ãïŒ CLI 㯠10 åããšã«ã€ã³ã¹ããŒã©ãŒãããŒãªã³ã°ããŠé²æãå ±åããŸããbringup ã倱æããå Žåã¯ã https://<sddcm_name>.<your-fqdn> ã®ã€ã³ã¹ããŒã©ãŒ UI ã§ã¿ã¹ã¯ããšã®è©³çްãªãšã©ãŒæ
å ±ã確èªããŠãã ããã ã€ã³ã¹ããŒã©ãŒã®ã¯ãªãŒã³ã¢ãã bringup ãæ£åžžã«å®äºããåŸãèªåå㯠2 ã€ã®ã¯ãªãŒã³ã¢ããã¹ããããå®è¡ããŸãã remove-installer-datastore ïŒããŒã«ã« VMFS ããŒã¿ã¹ãã¢ã«é
眮ããã VM ã vSAN ã«ã¹ãã¬ãŒãž vMotion ããããŒã¿ã¹ãã¢ããã¹ãããã¢ã³ããŠã³ãããŸããããã«ãã EBS ããªã¥ãŒã ãåé€å¯èœã«ãªããŸãã destroy-ebs-volume ïŒEC2 ã€ã³ã¹ã¿ã³ã¹ãã EBS ããªã¥ãŒã ããã¿ããããŠåé€ããŸããããªã¥ãŒã 㯠ManagedBy ã¿ã°ãš EnvironmentId ã¿ã°ã§èå¥ãããä»ã®ããªã¥ãŒã ã誀ã£ãŠåé€ããªãããä¿è·ãããŠããŸãã NSX Edge Cluster ã®ããã〠次ã®ãµãã¹ããã㯠NSX Manager ãš vCenter API ãçŽæ¥äœ¿çšã㊠NSX Edge Cluster ããããã€ããŸãã7 ã€ã®ã¹ããŒãžã§å®è¡ãããŸãã prep-edge-cluster ïŒDVS TRUNK ããŒãã°ã«ãŒããIP ããŒã«ãã¢ãããªã³ã¯ãããã¡ã€ã«ãVLAN ãã©ã³ã¹ããŒããŸãŒã³ãäœæ deploy-edge-nodes ïŒ2 å°ã®ã©ãŒãžãã©ãŒã ãã¡ã¯ã¿ãŒ ãšããžãã©ã³ã¹ããŒãããŒããäœæïŒOVA ãããã€ãããªã¬ãŒïŒ create-edge-cluster ïŒäž¡æ¹ã®ãã©ã³ã¹ããŒãããŒããã°ã«ãŒãåãããšããžã¯ã©ã¹ã¿ãŒãäœæ create-tier0 ïŒãã±ãŒã«ãµãŒãã¹ãš BGP ãæå¹ã«ãã Tier-0 ã²ãŒããŠã§ã€ãäœæ create-tier1 ïŒTier-0 ãšãšããžã¯ã©ã¹ã¿ãŒã«ã¢ã¿ãããã Tier-1 ã²ãŒããŠã§ã€ãäœæ configure-routing ïŒã¢ãããªã³ã¯ã»ã°ã¡ã³ããã€ã³ã¿ãŒãã§ãŒã¹ãBGP ãã€ããŒããã¬ãã£ãã¯ã¹ãªã¹ããã¹ã¿ãã£ãã¯ã«ãŒããåé
åžãèšå® create-anti-affinity ïŒãšããž VM çšã® vCenter DRS ã¢ã³ãã¢ãã£ããã£ã«ãŒã«ãäœæ åãšããžã¢ãã©ã€ã¢ã³ã¹ã¯ ASN 65000ïŒNSX åŽïŒãš 65022ïŒAWS åŽïŒã䜿ã£ãŠ 1 ã€ã® AWS Route Server ãšã³ããã€ã³ããš BGP ãã¢ãªã³ã°ããŸãããã¢ãªã³ã°ã確ç«ããããšãNSX ãªãŒããŒã¬ã€ã»ã°ã¡ã³ãã VPC ã«ãŒãããŒãã«ã«ã«ãŒããšããŠèªåçã«ã¢ããã¿ã€ãºãããŸãã Ops Manager Connector æåŸã®ãµãã¹ããã㯠VCF Operations Manager ã³ãã¯ã¿ãŒã Amazon EVS ã«ç»é²ããŸããããã¯ä»®æ³ãã·ã³ã® Windows Server ã©ã€ã»ã³ã¹ãšã³ã¿ã€ãã«ã¡ã³ãã®äœæãªã©ãåŸç¶ã®ã¢ã¯ã·ã§ã³ã«äœ¿çšãããŸãã ç°å¢å€æ°ã®èšå® ãã§ãŒãº 3 ã§ã¯ Secrets Manager ã«ä¿åãããŠããªã 2 ã€ã®ã·ãŒã¯ã¬ãããå¿
èŠã§ããæåæé ã§èšå®ãã VCF_INSTALLER_PASSWORD ãšãBroadcom ããŒã¿ã«ããååŸãã VCF_DEPOT_TOKEN ã§ãã以äžã®ã³ãã³ãã§ç°å¢å€æ°ãšããŠèšå®ããŸãïŒLinuxïŒã # The admin@local password you set when deploying the installer OVA: read -rs VCF_INSTALLER_PASSWORD ; export VCF_INSTALLER_PASSWORD # Your Broadcom depot download token: read -rs VCF_DEPOT_TOKEN ; export VCF_DEPOT_TOKEN Windows ã®å ŽåïŒ # The admin@local password you set when deploying the installer OVA: $env:VCF_INSTALLER_PASSWORD = Read-Host -MaskInput "VCF Installer Password" # Your Broadcom depot download token: $env:VCF_DEPOT_TOKEN = Read-Host -MaskInput "VCF Depot Token" ä»ã®ãã¹ã¯ãŒãïŒvCenterãNSXãSDDC Manager ãªã©ïŒã¯ãã¹ãŠ Secrets Manager ããèªåçã«è§£æ±ºãããŸãã deploy-vcf-and-edge ã®å®è¡ Python ç°å¢ãäœæããåäžã® CLI ã³ãã³ãã§ãã§ãŒãº 3 ã®ãã€ãã©ã€ã³å
šäœããšã³ãããŒãšã³ãã§å®è¡ããŸãïŒLinuxïŒã cd Phase_3_VCF9/python python -m venv .venv source .venv/bin/activate pip install -r requirements.txt python -m src.main deploy-vcf-and-edge \ --installer-host sddcm.<your-fqdn> \ --target-version 9.1.0 \ --nsx-manager-host nsx.<your-fqdn> \ --vcenter-host vc.<your-fqdn> \ --aws-profile your-aws-profile Windows ã®å ŽåïŒ cd Phase_3_VCF9\python python -m venv .venv .venv\Scripts\Activate.ps1 pip install -r requirements.txt python -m src.main deploy-vcf-and-edge ` --installer-host sddcm.<your-fqdn> ` --target-version 9.1.0 ` --nsx-manager-host nsx.<your-fqdn> ` --vcenter-host vc.<your-fqdn> ` --aws-profile your-aws-profile ãããã°çšã«åãµãã¹ããããåå¥ã«å®è¡ããããšãå¯èœã§ãããåäžã³ãã³ãã«ããã¢ãããŒãã åŒ·ãæšå¥š ããŸãã æ€èšŒã𿬡ã®ã¹ããã deploy-vcf-and-edge ãæ£åžžã«è¿ã£ããã以äžã§ãšã³ãããŒãšã³ãã®æ¥ç¶æ§ã確èªããŠãã ããã Route Server BGP ãã¢ã®ç¢ºèª AWS ã³ã³ãœãŒã«ã§ VPC > Route Servers > Peers ã«ç§»åããŠãã ãããäž¡æ¹ã® BGP ãã¢ã® BGP ã¹ããŒã¿ã¹ã âUpâ ã«ãªã£ãŠããã¯ãã§ããâåŠç¿æžã¿ã«ãŒãâ ã¿ãã«ã¯ NSX ããçºä¿¡ããã CIDR ã衚瀺ãããŸãïŒåŸã§äœæããã»ã°ã¡ã³ããèªåçã«ããã«è¡šç€ºãããŸãïŒã ãã¹ãçš NSX ã»ã°ã¡ã³ãã®äœæ NSX ManagerïŒ https://nsx.<your-fqdn> ïŒã«ãã°ã€ã³ããTier-1 ã²ãŒããŠã§ã€ã«ã¢ã¿ããããæ°ãããªãŒããŒã¬ã€ã»ã°ã¡ã³ããäœæããŸãã Networking > Segments > Add Segment ã«ç§»åãã ã»ã°ã¡ã³ãåã test-segment ãšãã äœæãã Tier-1 ã²ãŒããŠã§ã€ã«ã»ã°ã¡ã³ããã¢ã¿ãããã ãµãããããèšå®ããïŒäŸïŒã²ãŒããŠã§ã€ 172.16.1.1 ã® 172.16.1.0/24ïŒ ãã®ã»ã°ã¡ã³ãã«ãã¹ã VM ããããã€ããIP ã¢ãã¬ã¹ãåãåãããšã確èªãã ãªãŒããŒã¬ã€ããã¢ã³ããŒã¬ã€ãžã®æ¥ç¶ç¢ºèª NSX ã»ã°ã¡ã³ãäžã®ãã¹ã VM ãã以äžãå®è¡ããŸãã ãããªãã¯ãµããããå
ã®ãžã£ã³ãããã¯ã¹ã« Ping ããïŒãããã€æžã¿ã®å ŽåïŒ ãµãŒãã¹ã¢ã¯ã»ã¹ãµããããå
ã® EC2 ã€ã³ã¹ã¿ã³ã¹ã« Ping ãã ã»ã°ã¡ã³ã CIDRïŒ172.16.1.0/24ïŒã VPC ã«ãŒãããŒãã«ã«åŠç¿æžã¿ã«ãŒããšããŠè¡šç€ºãããããšã確èªãã 3 ã€ã®ç¢ºèªããã¹ãŠæåããã°ãNSX ãªãŒããŒã¬ã€ãš AWS ã¢ã³ããŒã¬ã€éã®åçãªã«ãŒãäŒæã確ç«ããããå®å
šã«åäœãã EVS ç°å¢ã®æ§ç¯å®äºã§ãã æ¬¡ã®ã¹ãããïŒ VMware HCX ããã®ä»ã®ç§»è¡ããŒã«ã䜿çšããŠãªã³ãã¬ãã¹ããã¯ãŒã¯ããŒããç§»è¡ãã ããŒã¿ã»ã³ã¿ãŒãžã®ãã€ããªããæ¥ç¶ã®ããã« AWS Transit Gateway ãèšå®ããïŒãã§ãŒãº 1 ã§ãªãã·ã§ã³ãšããŠäœæããªãã£ãå ŽåïŒ è£è¶³ã¹ãã¬ãŒãžãšã㊠Amazon FSx for NetApp ONTAP ãã»ããã¢ãããã éçšç£èŠã®ããã« AWS Systems Manager ãçµ±åãã SDDC Manager çµç±ã§è¿œå ã®ã¯ãŒã¯ããŒããã¡ã€ã³ããããã€ãã ãã©ãã«ã·ã¥ãŒãã£ã³ã° ããããé害ãã¿ãŒã³ãšè§£æ±ºçã以äžã«ãŸãšããŸãã ãã§ãŒãº 1 ããã³ 2ïŒAWS ãªãœãŒã¹ãšã©ãŒ 察象ãªãœãŒã¹ã® AWS ã³ã³ãœãŒã«ã確èªããŠãã ãããTerraform ãŸã㯠boto3 ã®ãšã©ãŒããã¹ãã¯éåžžãæ£ããããããžã§ãã³ã°ãããªãã£ãç¹å®ã®ãªãœãŒã¹ïŒAZ ã®èª€ãããµããããã®æ¬ èœãAPI ã³ãŒã«ã®ã¹ããããªã³ã°ïŒãæããŠããŸãã ãµãŒãã¹å¶éã確èªããŠãã ããïŒEVS ãµãŒãã¹ã¯ã©ãŒã¿ãDedicated Host ã®å²ãåœãŠãVPC Route Server ã¯ã©ãŒã¿ãEBS ããªã¥ãŒã å¶éã ãã¹ãã®å®çŸãã¿ã€ã ã¢ãŠãããå ŽåïŒ90 åè¶
ïŒãã³ã³ãœãŒã«ã§ EVS ç°å¢ã®ã¹ããŒã¿ã¹ã確èªããŠãã ãããFAILED ç¶æ
ã¯ãã£ãã·ãã£ãŸãã¯èšå®ã®åé¡ã瀺ããŸãã ãã§ãŒãº 3ïŒããã®åæåé¡ Broadcom ããããŒã¯ã³ãæå¹ã§æå¹æéãåããŠããªãããšã確èªããŠãã ãã ã€ã³ã¹ããŒã©ãŒã¢ãã©ã€ã¢ã³ã¹ã depot.broadcom.com ãžã®ã¢ãŠãããŠã³ãã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ïŒããŒã 443ïŒãæã€ããšã確èªããŠãã ãã ããŠã³ããŒããæ¢ãŸã£ãå Žåãèªååã¯ææ°ããã¯ãªãã§å詊è¡ãã5 å倱æåŸã«ãšã©ãŒãå ±åããŸãããã®å Žå㯠download-all-product-binaries --wait ã§æåå詊è¡ã§ããŸã ãã§ãŒãº 3ïŒBringup ã®å€±æ VCF Installer UIïŒ https://<sddcm_name>.<your-fqdn> ïŒã¯ã¿ã¹ã¯ããšã®é²æãšè©³çްãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŠãããAPI ãšã©ãŒæ¬æãããåèã«ãªããŸãã ã¹ã¿ãã¯ãã¬ãŒã¹ã«ã€ããŠã¯ã€ã³ã¹ããŒã©ãŒã¢ãã©ã€ã¢ã³ã¹ã® /var/log/vmware/vcf/domainmanager/domainmanager.log ã確èªããŠãã ããã bringup ã âVMwareProductVersion can not be null or emptyâ ã§å€±æããå Žåãããã«å¿
èŠãªãã€ããªããã£ãã·ã¥ãããŠããŸããã prepare-depot ãåå®è¡ããŠå詊è¡ããŠãã ããã ãã§ãŒãº 3ïŒEdge Cluster ã®ããã〠vSAN ããŒã¿ã¹ãã¢ã«ååãªç©ºã容éããªãå ŽåããšããžããŒãã®ãããã€ã倱æããããšããããŸãïŒåãšããž VM ã«ã¯çŽ 200 GB ãå¿
èŠïŒ BGP ãã¢ãªã³ã°ã®åé¡ïŒãšããžã¯ã©ã¹ã¿ãŒä»æ§ã® Route Server ãšã³ããã€ã³ã IP ããã§ãŒãº 1 ã® Terraform åºåãšäžèŽããããšã確èªããŠãã ãã configure-routing ã倱æããå Žåãã¯ã©ã¹ã¿ãŒãäœæãããåã«äž¡æ¹ã®ãšããžããŒãã Success ç¶æ
ã«éããŠããããšã確èªããŠãã ãã ãã³ã ïŒèªååã®åã¢ã¯ã·ã§ã³ã¯ã¹ãçã§ããã¹ãããã倱æããå Žåã¯ãæ ¹æ¬çãªåé¡ãä¿®æ£ããŠåãã³ãã³ããå®å
šã«åå®è¡ã§ããŸããå¯äœçšã¯çºçããŸããã ã¯ãªãŒã³ã¢ãã æ§ç¯ããç°å¢ãè§£äœããå Žåã¯ã以äžã®é åºã§å®æœããŠãã ããã EVS å
ã®ä»®æ³ãã·ã³ãä¿æãããå Žåã¯ããŸãå¥ã®å Žæã«ç§»è¡ããŠãã ããã AWS ã³ã³ãœãŒã«ãã EVS ãã¹ãã 1 å°ãã€åé€ããŠãã ããã AWS ã³ã³ãœãŒã«ãã EVS ç°å¢ãåé€ããŠãã ããã ãã§ãŒãº 1 ãå®è¡ããå
ã®ã¯ãŒã¯ã¹ããŒã·ã§ã³ãã Phase_1_Base_Infrastructure ãã£ã¬ã¯ããªã«ç§»åãã terraform destroy ãå®è¡ããŠãã ãããTerraform ã¯æ¢åã®ç¶æ
ãã¡ã€ã«ã䜿çšããŠãã¹ãŠã®ãã§ãŒãº 1 ãªãœãŒã¹ãç¹å®ããŠåé€ããŸãã ãŸãšã æ¬ãŠã©ãŒã¯ã¹ã«ãŒã§ã¯ã3 ãã§ãŒãºã®èªååããŒã«ãããã䜿ã£ãŠ VMware Cloud Foundation 9.1 ã Amazon EVS ã«ãããã€ããŸããã空㮠AWS ã¢ã«ãŠã³ãããåºçºããTerraform ã§åææ¡ä»¶ãšãªã AWS ã€ã³ãã©ã¹ãã©ã¯ãã£ããã¹ãŠããããžã§ãã³ã°ããAWS API çµç±ã® Python CLI ã§ EVS ç°å¢ãšãã¢ã¡ã¿ã«ãã¹ãããããã€ããå
¬åŒ VCF Python SDK ã䜿ã£ãŠ NSX Edge Cluster ã«ãŒãã£ã³ã°ãå«ãå®å
šãª VCF ã¹ã¿ãã¯ãç«ã¡äžããŸããã terraform apply ãã BGP ãã¢ãªã³ã°ã®ç¢ºèªãŸã§ããããã€å
šäœã§ããã 3.5ã6 æéããããŸããèªååã«ãããäœæ¥ã¯ 3 ã€ã® CLI ã³ãã³ããš ESXi èšå®ã»OVA ãããã€ã«å¿
èŠãªçŽ 30 åã®æäœæ¥ã®ã¿ã«åæžãããŸãã ãã®ã¢ãããŒãã®äž»ãªå©ç¹ïŒ Infrastructure as CodeïŒãã¹ãŠã®ãªãœãŒã¹ã Terraform ãŸã㯠Python èªååã§å®çŸ©ãããŠããŸã ããã©ã«ãã»ãã¥ã¢ïŒãã¹ãŠã® VCF ãã¹ã¯ãŒãã峿 Œãªè€éæ§èŠä»¶ã«åŸã£ãŠçæãããAWS Secrets Manager ã«ä¿åãããŸã å®å
šãªåå®è¡ïŒãã§ãŒãº 1 ãš 3 ã¯å®å
šã«ã¹ãçã§ããããããã°ã埩æ§ã®ããã«ã©ã®ã¹ããããå¯äœçšãªãå®å
šã«åå®è¡ã§ããŸã SDK é§åïŒãã§ãŒãº 3 ã¯å
¬åŒ VMware VCF Python SDK ã䜿çšããæåã«ãã REST ãã€ããŒãã®æ§ç¯ãæé€ããŸã ã¢ãžã¥ã©ãŒèšèšïŒ1 ã€ã®ã³ãã³ãã§ãã€ãã©ã€ã³å
šäœãå®è¡ãããããããã°ãéšåçãªåå®è¡ã®ããã«åå¥ã¹ããããå®è¡ã§ããŸã éçºç°å¢ã®ã»ããã¢ãããæ¬çªç°å¢ã®ãããã€ã顧客ãã¢çšã®åçŸå¯èœãªã©ããªã©ããããããŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ã§ããå
ç¢ãªåºç€ãšããŠãããŒãžã§ã³ç®¡çã»ã«ã¹ã¿ãã€ãºã»æ¡åŒµãå¯èœã§ãã èè
ã«ã€ã㊠David Piet Amazon Web Services (AWS) ã®ããªã³ã·ãã«ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠãVMware ããŒã¹ã®ã¯ãŒã¯ããŒããæã€ãšã³ã¿ãŒãã©ã€ãºã®ã客æ§ã AWS ãžç§»è¡ããã¢ããã€ãºããããã®æ¯æŽãæ
ã£ãŠããŸãã2018 幎ã«ããŒãããŒãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšã㊠AWS ã«å
¥ç€ŸããVMware Cloud on AWS ãå°éãšããŠããŸããã以æ¥ãAWS æå€§èŠæš¡ã®ãšã³ã¿ãŒãã©ã€ãºé¡§å®¢ãæ°å€ããµããŒãããVMware ããŒã¹ã®ã¯ãŒã¯ããŒãã®ã¯ã©ãŠãç§»è¡ãšæé©åæŠç¥ãçœåŒããŠããŸãããé·å¹Žã«ããããAWS ã§ã® VMware ããžãã¹ã®æé·ãšãšãã«æ
åœç¯å²ãåºããçŸåšãã客æ§ã®ã¢ããã€ãŒãŒã·ã§ã³ãžã£ãŒããŒã®æ¯æŽã«æ·±ãé¢ãã£ãŠããŸããããŒã¹ãŠã§ã¹ã¿ã³å€§åŠã§å士å·ãååŸããŠãããå¿çšæ°åŠãšãšã³ãžãã¢ãªã³ã°ãå°éãšããŠããŸããAWS å
¥ç€Ÿåã¯ã·ãªã³ã³ãã¬ãŒã®ã¹ãã¬ãŒãžã¹ã¿ãŒãã¢ããã§ãœãããŠã§ã¢ããããããŒãšããŠå€åããŠããŸããã 翻蚳ã¯ããŒãããŒãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã è±ç°ãæ
åœããŸãããåæã¯ ãã¡ã ã§ãã
ã¯ããã« ããã«ã¡ã¯ãInsight Edge ã®æ¥äžã§ãã ããæè¿ã®ã³ãŒãã£ã³ã°AIãšãŒãžã§ã³ãã®é²åã¯ç®èŠãŸããã以äžã®ãããªå
æ¯ãåœããåã«ãªã£ãŠããŸããã ãããã¯ããªãŒããŒãUXãã¶ã€ããAIããŒã«ã§ãããã¿ã€ããäœã è°äºé²ã»ä»æ§æžã»èšèšã¡ã¢ãšãã£ãããã¥ã¡ã³ãç³»ã®ææç©ãAIã§äœæãgitã§ç®¡çãã ç¹ã«ãã€ãã³ãŒãã£ã³ã°ã®åºããã§ããšã³ãžãã¢ä»¥å€ããœãŒã¹ã³ãŒãã®åœ¢ã§ææç©ãäœãããšãå¢ããŸãããåŒç€Ÿã§ã¯ AIãæèãçè§£ããããããã«ããããã¯ãã®ãœãŒã¹ã³ãŒãã ãã§ãªããã¶ã€ã³ææç©ãèšèšããã¥ã¡ã³ããæææ±ºå®ã®çµç·¯ãªã©ãGitãGitHubã«éçŽããŠããŸã ãããããŠãœãŒã¹ã³ãŒããšããã¥ã¡ã³ãã®äž¡é¢ããã Gitãªããžããªãè§Šããšã³ãžãã¢ä»¥å€ã®ã¡ã³ã㌠ãå¢ããŠããŠããŸãã ãã®ãšããåŸæ¥ããGit/GitHubã䜿ããšã³ãžãã¢åŽãšãæ°ãã«äœ¿ãå§ããåŽã®ããããã«æ©ã¿ãçãŸããŸãã ãšã³ãžãã¢åŽ â éçºãããŒã®èª¬æãææŽäœæ¥ïŒäœæ¥æ¯æŽã誀ã³ãããã®ä¿®æ£ïŒãªã©ããšã³ãžãã¢ä»¥å€ã®ã¡ã³ããŒãæ
£ãããŸã§ãµããŒãè² è·ãé«ããªã éçºã«åå ããã¡ã³ããŒåŽ â Git/GitHubã®äœæ³ãéçºãããŒãåŠã¶è² æ
ãšããããæèããããšã«ããã¢ã€ãã¢å
·çŸåã¹ããŒãã®éå ãAIã«ä»»ããã°ãã¹ããã©ã¯ãã£ã¹ãå®ãããã®ã§ã¯ïŒããšæããããããã§ããããŸãããæè¿ã®AIã¢ãã«ã¯GitãGitHubã®è¯ãäœæ³ãç¥ã£ãŠããŸãããã€ã³ã¿ãŒããããæ¢ãã°çŽ æŽãããã¹ãã«ãå€ã
ãããŸããããããéçºãããããã¯ãã®ç¹åŸŽããã§ãŒãºãããŒã ã®å€§ãããªã©ã«å¿ããŠãçŸå Žã«é©ããéçºãããŒã¯æ§ã
ã§ãããããã«éçºããŒã ã®å·¥å€«ã衚ããŸããã ããããã èªåã®ããŒã ã«é©ããéçºæé ãèšèªåããŠã¹ãã«ã«åºãã å¿
èŠããããŸããã æ¬èšäºã§ã¯ããšã³ãžãã¢ä»¥å€ã®ã¡ã³ããŒãå«ãéçºããŒã ã§ããã€ãã³ãŒãã£ã³ã°ã®éããæ°è»œããå°éãã€ã€ãGitãGitHubããè¡åããæŽ»çšããéçºãããŒãå®çŸããããã«ç§ãäœãè²ãŠãClaudeã¹ãã«ã顿ã«ããã®èšèšææ³ãšäžèº«ãå®éã®äœ¿ãåæã ããŒã«ã»ã³ã®ãŠãŒã¶ããªãã£10åå ã«ç
§ããåãããŠç޹ä»ããŸãã â»æ¬èšäºã¯ Claude Code ã® Skill æ©èœ ãåæãšããŠããŸãããŸãã /d ã®åäœã«ã¯ git ã³ãã³ããš GitHub CLI ïŒ gh ã³ãã³ãïŒãã»ããã¢ããæžã¿ã§ããããšãå¿
èŠã§ãã ç®æ¬¡ ã¯ããã« èšèšã®3æ¬æ± /d ã¹ãã«ã®æ§é åãããŠã¿ãïŒ2ã€ã®å
žåã·ããªãª ã¹ãã«æ¹åã®çµç·¯ãšèãæ¹ ãããã« èšèšã®3æ¬æ± /d ã® d 㯠develop ãããšã£ãŠããŸãã ãã®ã¹ãã«ã®èšèšã«ã¯3ã€ã®è»žããããŸããå
±éããã®ã¯ã äœæ¥è
ãæèããŠéçºãããŒã«åãããã®ã§ã¯ãªããã¹ãã«ã䜿ã£ãŠããã ãã§èªç¶ã«ã«ãŒã«ãå®ãã ãšããçºæ³ã§ãã A. ãã€ãã³ãŒãã£ã³ã°ã®æãæ¢ããªã ã¢ã€ãã¢ãé«éã«å
·çŸåããäººã®æããè€éãªéçºããã»ã¹ã§é
ãããªãã ãè¡åã®ããã®ãã§ãã¯ãªã¹ããèŠçŽãå¢ããã»ã©ãå©çšè
ã¯ãèããåã«æé ãæãåºããã¢ãŒãã«å
¥ããŸããããã¯æãã€ããé«éã«åœ¢ã«ããUXãã¶ã€ãããããã¯ããªãŒããŒã«ã¯èŽåœçã§ãã /d ã¹ãã«ã¯ æèã®ãªãºã ãæ¢ããªã ããšãæåªå
ã«ããŸãã å
·äœçã«ã¯ãæé ãèŠããŠãããã®ã§ã¯ãªã ã¹ãã«åŽããã¹ãŠä»£è¡ãã èšèšã«ããŸãããããšãã°ãå©çšè
ã /d issue 42 ãšæã€ããšã§Issueã«çæãããšãã®å®åäœæ¥ãå®è¡ããäœæ¥ãã©ã³ãäœæã»pushã»æ¹éã³ã¡ã³ãæçš¿ãŸã§èªåã§èµ°ããŸãã B. 䜿ããªããGit/GitHubã®äœæ³ã«æ
£ãã 现ããäœæ³ãç¿ã£ãŠãã䜿ãã®ã§ã¯ãªãã䜿ããªããåŸã
ã«äœæ³ãäœåŸããã ãã©ã³ãã»ã³ãããã»PRã»rebaseâŠãšGitã®æŠå¿µãæåã«å
šéšèª¬æããããšãããã ãã§å©çšè
ã¯æ«æããŸããäžæ¹ã§ãæããªããŠããããšãããšãå©çšè
ã¯ãã£ãšäœæ³ãç¥ããªããŸãŸããšã³ãžãã¢ã®ææŽãå¿
èŠãªç¶æ
ãç¶ããŸãã /d ã¹ãã«ã¯ ãå¿
èŠæäœéã®ã³ãã³ãã䜿ãã ãã§ãçµæãšããŠãè¡åããäœæ¥ã§ããŠããã ç¶æ
ãäœãã€ã€ã è£ã§äœãèµ·ãã£ããã¯å¯èŠåãã èšèšã«ããŸããã /d issue å®è¡æã«ããã©ã³ããäœããŸããããPRãäœæããŸããããšãã°ãåºãã®ã§ãå©çšè
ã¯äœ¿ãç¶ãããã¡ã«ãããã¯ãã©ã³ããåã£ãŠããã®ããããããDraft PRãããšèªç¶ã«çè§£ããŠãããŸãããŸããissueãcommitãªã©éèŠãªçšèªã¯Git/GitHubã®ãšã³ã·ã¹ãã ã«åãããããšã§ããšã³ãžãã¢ãšåãèšèªã§éçºã«åå ã§ããããã«ããŠããŸãã C. èŠããªããã°ãªããªãç¥èãæžãã 䜿ãåŽãé ã®äžã«æ±ãããç¥èéããã§ããéãæžããã å©çšè
ã®è² æ
ã¯ ãæ¬¡ã«äœã®ã³ãã³ããæã€ãããã©ã®ã¹ãã«ãåŒã¶ãããæ¯åæãåºãããš ã«ãããŸãããããæžããããã«2ã€ã®ä»æããå
¥ããŸããã åå¥ã¹ãã«ã§ã¯ãªããµãã³ãã³ãæ¹åŒ â /d todo /d issue /d commit âŠãšãã£ãæäœã /d 1ã€ã®ã¹ãã«ã«çµ±åããããšã§ãå©çšè
ã¯æäœé /d ã ãèŠããã°ããã /d 42çªã®Issueã«çæ ã®ããã«èªç¶èšèªã§æå³ãäŒããã ãã§ãé©åãªãµãã³ãã³ããå®è¡ãããŸã 次ã®ã¢ã¯ã·ã§ã³ã¯éžæè¢ã§æç€º â ã¹ãã«å®è¡ã®çµããã«ã¯å¿
ãæ¬¡ã®åè£ãåºãããšã§ãå©çšè
ã¯ã次ã«äœãããã°ããã£ãã£ãããšèããã«æžã¿ãŸãïŒåŸè¿°ãããåçããåèªãïŒ çµæãšããŠãå©çšè
ãé ã«æ±ãããGitäœæ³ + ã³ãã³ãäœç³» + ããŒã éçšã«ãŒã«ãã®ç¥èã»ããã倧å¹
ã«å§çž®ãããŸãã èŠããã¹ã㯠/d ãšããå
¥å£ã ã ãšããç¶æ
ããåå ããŒãã«ãæå°åããŸãã /d ã¹ãã«ã®æ§é ã¹ãã«æ¬äœã¯ ~/.claude/skills/d/SKILL.md 1ãã¡ã€ã«ã§ããããã³ããã¿ãŒ + ãµãã³ãã³ãããšã®æé èšè¿°ã§æ§æãããŸããå
šæã¯ä»¥äžã«æããããã§èŒããŠãããŸãã SKILL.md å
šæïŒã¯ãªãã¯ã§å±éïŒ --- name: d description: GitHub Issueã»Pull Requestã»ãã©ã³ãæäœã»ã³ãããçã®äœæ³ãå®çŸ©ããéçºã¯ãŒã¯ãããŒã¹ãã« argument-hint: " < todo |new|issue|commit|pr|review|improve|help> [args...]" allowed-tools: Bash, Agent, Read --- GitHub ãèµ·ç¹ãšããéçºã¯ãŒã¯ãããŒããµãã³ãã³ããæå®ããŠå®è¡ãããåŒæ°ãªãã§ ` /d ` ãšå®è¡ãããå Žå㯠` /d help ` ãšããŠåäœããäžã§ã次ã®è¡åãææ¡ããã ãµãã³ãã³ããæå®ãããã«æãç¶ãå ŽåïŒäŸ: ` /d 42çªã®Issueã«çæã㊠` ïŒã¯ãããã¹ãå
容ããå©çšè
ã®æå³ãè§£éããé©åãªãµãã³ãã³ãã«ãããã³ã°ããŠå®è¡ãããå©çšè
ã¯å³å¯ãªãµãã³ãã³ãåãèŠããŠããªããŠãããã ## åºåã«ãŒã« ### yes/no 質å AIã«ããããããŠããã§ããïŒãããããŸããïŒãã®ãã㪠closed questionãèš±å¯ç¢ºèªã®æ«å°Ÿã«ã¯ ` (y/n) ` ãä»ãããŠãŒã¶ã®åçè² è·ã軜æžããããä»ã«ä¿®æ£ã¯ãããŸããïŒãã®ãããªå®è³ªçOpen Questionã«ã¯ä»ããªãã ### 衚ã»ç®æ¡æžããžã®èå¥åä»äž 衚ã»ç®æ¡æžãã»éžæè¢ãªã©ãè€æ°é
ç®ã䞊ã¶åºåã«ã¯å¿
ãé£çªãèšå·ã®èå¥åãæ¯ããIssueçªå·ãPRçªå·ãªã©æ¢åã®èå¥åãããå Žåã¯ããã䜿ããç¡ãå Žåã¯å·Šç«¯ã« ` No ` åã远å ãããããã«ãããåŸã®äŒè©±ã§ãŠãŒã¶ãçªå·ã§è¡ãæå®ã§ããããã«ããã ### 次ã®ã¢ã¯ã·ã§ã³ã®æç€º ãµãã³ãã³ãã®çµããã«ã¯ãå¯èœãªéãæ¬¡ã®ã¢ã¯ã·ã§ã³ã®åè£ãéžæè¢ãšããŠæç€ºãããå©çšè
ã«ã次ã«äœãããã°ãããããæãåºãããã®ã§ã¯ãªããæç€ºãããéžæè¢ããéžã°ããïŒåçããåèªïŒã ## äžæºã»æ¹åææ¡ã®æ¡å
å©çšè
ã ` /d ` ã¹ãã«ã®æåã«äžæºã衚æããå Žå: ` /d improve <å
容> ` ã§ã¹ãã«æ¹åIssueã起祚ããã ## å
±éã«ãŒã« ### 䞊åå®è¡ äŸåé¢ä¿ã®ãªãè€æ°ã®ã³ãã³ãã»APIåŒã³åºãã¯åžžã«äžŠåå®è¡ããã鿬¡å®è¡ããªããç¬ç«ããã³ãã³ããèŠã€ãããç©æ¥µçã«äžŠååããã ### ãã©ã³ãåãæ¿ãåã®ç¢ºèª ` git checkout ` ã®åã« ` git status --porcelain ` ã§æªã³ããã倿Žã確èªããã倿Žãããå Žåã¯éžæè¢ãæç€º: 1. **ã³ãããããŠç¶è¡** 2. **worktree ã§äžŠåäœæ¥** â ` git worktree add ../<ãªãå>-<æ°ãã©ã³ã> -b <æ°ãã©ã³ã> origin/main ` â å¥ã»ãã·ã§ã³ãæ¡å
3. **äžæ** ### main ææ°åãèŸŒã¿ äœæ¥ãã©ã³ãã§ ` /d issue ` ïŒæ¢åãã©ã³ã checkout æïŒãŸã㯠` /d commit ` ïŒpush åïŒã«å®è¡ãããoriginã®mainãã©ã³ãã«å¯Ÿããé
ãã確èªããé
ããããã° ` git merge origin/main ` ãææ¡ããã ### ãã©ã³ãåœåèŠå ` CLAUDE.md ` ã«åœåèŠåã®å®çŸ©ãããã°ããã«åŸãããªããã°ããã©ã«ããšã㊠` <prefix>/<issueçªå·>-<è±èªkebab-case 5èªä»¥å
> ` ã䜿çšãããprefix ã¯Issueã®ã©ãã«ã»å
容ãã倿: - ` feat/ ` â æ°æ©èœ - ` fix/ ` â ãã°ä¿®æ£ - ` nf/ ` â éæ©èœïŒã€ã³ãã©çïŒ - ` doc/ ` â ããã¥ã¡ã³ã - ` process/ ` â éçºããã»ã¹é¢é£ïŒCIãClaudeã¹ãã«çïŒ - ` misc/ ` â ãã®ä» Issue çªå·ããªãå Žå㯠` <prefix>/<è±èªkebab-case 5èªä»¥å
> ` ãšããã ### PR ããŒãžç¢ºèª PR ã Ready ãã€ææ°ã³ãããã«å¯Ÿããã¬ãã¥ãŒã§ããŒãžå¯èœãšå€å®ãããŠããå Žåã ` gh pr merge <PRçªå·> --merge --delete-branch ` ãææ¡ãããé©çšã¿ã€ãã³ã°: ` /d commit ` ã§ Ready PR äœæåŸã ` /d review ` ã§ Ready ååŸã ` /d pr ` ã§ Ready ååŸã ### ã¬ãã¥ãŒå®è¡ ã¬ãã¥ãŒã¯ **Claude ã®ã¬ãã¥ãŒçšãµããšãŒãžã§ã³ã** ã§å®è¡ãããå®è£
ããã³ã³ããã¹ããšã¯å¥ã®ãµããšãŒãžã§ã³ãã§å®è¡ããããšã§ã客芳çãªææãåŸãã ä»äººã® PR ãã¬ãã¥ãŒããå Žåã¯å
ã«å¯Ÿè±¡ãã©ã³ããååŸããã ãã§ãã¯ã¢ãŠãåã«å
ãã©ã³ãåãéé¿ããããŒãã£ãŒããªãŒã§ãªãããšã確èªãã: ```bash ORIG_BRANCH=$(git branch --show-current) git status --porcelain # åºåãããªãæªã³ããã倿Žãã ``` æªã³ããã倿Žãããå Žåã¯ããã©ã³ãåãæ¿ãåã®ç¢ºèªããé©çšãããã¯ãªãŒã³ãªç¶æ
ã確èªãããæ¢åããŒã«ã«ãã©ã³ããç Žå£ããªãæ¹æ³ã§ååŸãã: #### ã¬ãã¥ãŒæé 1. ` COMMIT_SHA=$(git rev-parse HEAD) ` ã§ SHA ãååŸã ` git fetch origin main ` åŸã ` git diff origin/main...HEAD ` + ` git log origin/main..HEAD --oneline ` ãååŸã ` OWNER_REPO=$(gh repo view --json nameWithOwner --jq .nameWithOwner) ` ã§ owner/repo ãååŸ 2. Agent ããŒã«ã§ã¬ãã¥ãŒçšãµããšãŒãžã§ã³ããèµ·åããïŒ ` run_in_background: true ` ïŒããããžã§ã¯ãã®èšèšåºæºãã¬ãã¥ãŒã¬ã€ãã©ã€ã³ïŒ ` CLAUDE.md ` ãã¬ãã¥ãŒçšãšãŒãžã§ã³ãå®çŸ©ã ` docs/ ` é
äžã®ã¬ã€ãã©ã€ã³çãããã°åç
§ïŒã«åŸã£ãŠã¬ãã¥ãŒããããããã³ããã« ` diff ` , ` commits ` , ` commit_sha ` , ` owner_repo ` , ` pr_number ` , ` pr_author ` , ` is_own_pr ` , ` is_draft ` , ` post_to_pr=false ` , ` defer_ready=true ` ãæž¡ã 3. å®äºãåŸ
ã¡ãçµæãäŒè©±ã«è¡šç€ºïŒææäžèЧ + ç·åå€å®ïŒ 4. èªåã® PR ã®å Žåã¯åææã®åŠ¥åœæ§ãè©äŸ¡ãã 5. ` post_to_pr=true ` ã®å Žåã¯æ¬¡ã®ãPR ãžã®æçš¿ããå®è¡ #### PR ãžã®æçš¿ ( ` post_to_pr=true ` ) skill åŽã§æçš¿ããïŒã¬ãã¥ãŒçšãµããšãŒãžã§ã³ãã¯äºéæçš¿åé¿ã®ãã ` post_to_pr=false ` ïŒ: - **ç·è©ã³ã¡ã³ã**: ` gh pr review <PRçªå·> --comment --body "<æ¬æ>" ` ïŒèªåã® PRïŒ/ ` --approve ` / ` --request-changes ` ïŒä»äººã® PRïŒ - **ã€ã³ã©ã€ã³ã³ã¡ã³ã**: ` gh api repos/{owner}/{repo}/pulls/<PRçªå·>/comments ` ã䜿çšãåã³ã¡ã³ãã« ` commit_id ` (= ` COMMIT_SHA ` ), ` path ` , ` line ` , ` side ` ãå¿
é æçš¿åŸãèªåã® Draft PR ã§ããŒãžå¯èœïŒé«ææãªãïŒãªã Ready å: 1. PR ã¿ã€ãã«ãã ` WIP: ` åé€ 2. æ¬æã ` Summary / Related Issue / Test plan ` ãã³ãã¬ãŒãã«æŽæ°ïŒ ` Closes ` / ` Refs ` ã¯ãRelated Issue ãšã¯ããŒãºå€å®ãã«åŸãïŒ 3. ` gh pr ready <çªå·> ` ### 倿Žç¢ºèª ` git status --porcelain ` ã ` git diff ` ã ` git diff --cached ` ã3ã€äžŠåå®è¡ããã倿Žããªããã°ãšã©ãŒã ### ã¹ããŒãžã³ã°å€æ 以äžã®æžå¿µããªãã確èªãã: - ` .env ` ãã¯ã¬ãã³ã·ã£ã«ç³»ïŒ ` credentials.json ` ã ` cred-* ` ã ` *.pem ` ã ` *.key ` çïŒ - ` .gitignore ` ãã¹ããã¡ã€ã«ïŒ ` node_modules/ ` ã ` dist/ ` ã ` __pycache__/ ` ã ` .venv/ ` çïŒ - ãã©ã³ãåããæšæž¬ãããäœæ¥å
容ãšç¡é¢ä¿ãªãã¡ã€ã« æžå¿µããªããã°å
šãã¡ã€ã«ãèªåã¹ããŒãžã³ã°ïŒç¢ºèªäžèŠïŒãæžå¿µãããã°æç€ºããŠãŠãŒã¶ãŒã«ç¢ºèªããã ### ã³ãããã¡ãã»ãŒãžçæ 倿Žå
容ããæ¥æ¬èªã§ç°¡æœã«èªåçæããïŒç¢ºèªäžèŠïŒããã©ã³ãåã« Issue çªå·ãããã° ` #<çªå·> ` ãå«ããã ## ãµãã³ãã³ã ### ` /d todo ` èªåã察å¿ãã¹ããã®ã衚瀺ããã çŸåšäœæ¥äžã®ã¿ã¹ã¯ããããã©ãããšãGitHubäžã§ã¢ãµã€ã³ãããIssueãã¡ã³ã·ã§ã³ãã¬ãã¥ãŒäŸé Œã確èªããã 1. **2ã€ã䞊åå®è¡**: - (A) gitã³ãã³ãã§çŸåšã®äœæ¥ç¶æ³ãç¢ºèª ` git fetch origin && git branch --show-current && git status --porcelain ` - (B) ghã³ãã³ãã§GitHubã確èªãGraphQL ã§äžæ¬ååŸ: ```bash OWNER_REPO=$(gh repo view --json nameWithOwner --jq .nameWithOwner) gh api graphql -f query="{ assignedIssues: search(query: \"repo:${OWNER_REPO} assignee:@me is:open is:issue\", type: ISSUE, first: 20) { nodes { ... on Issue { number title labels(first: 5) { nodes { name } } updatedAt } } } reviewRequested: search(query: \"repo:${OWNER_REPO} review-requested:@me is:open is:pr\", type: ISSUE, first: 20) { nodes { ... on PullRequest { number title author { login } updatedAt } } } mentions: search(query: \"repo:${OWNER_REPO} mentions:@me is:open\", type: ISSUE, first: 20) { nodes { ... on Issue { number title updatedAt } } } myOpenPRs: search(query: \"repo:${OWNER_REPO} is:open is:pr author:@me\", type: ISSUE, first: 20) { nodes { ... on PullRequest { number headRefName isDraft } } } }" ``` 2. **fetch å®äºåŸã®ç¢ºèª**: - çŸåšã®ãã©ã³ãã main ãªã ` git rev-list HEAD..origin/main --count ` ã§åæç¶æ
ã確èªãäœæ¥ãã©ã³ããªã ` gh pr view --json number,title,state,mergedAt,url ` ã§ PR ç¶æ
ãç¢ºèª - ã¢ãµã€ã³æžã¿ Issue ã«ã€ã㊠` git branch -r ` ã1åå®è¡ããå Issue çªå·ã«å¯Ÿã㊠` origin/*/<issueçªå·>-* ` ã®ãã¿ãŒã³ã§ãã©ã³ããæ¢ã â ` myOpenPRs ` ãã PR æç¡ãå€å® â æªçæ / ãã©ã³ããã / PR #çªå· (Draft|Ready) 3. **åºåãã©ãŒããã**: ``` ## çŸåšã®ãã©ã³ã - â ïž/â/ð§ ã®ç¶æ
衚瀺 ## ã¢ãµã€ã³æžã¿ Issue | # | ã¿ã€ãã« | ç¶æ
| ã©ãã« | æŽæ°æ¥ | ## ã¬ãã¥ãŒäŸé Œ | # | ã¿ã€ãã« | äœæè
| æŽæ°æ¥ | ## ã¡ã³ã·ã§ã³ | # | ã¿ã€ãã« | æŽæ°æ¥ | ``` 4. **次ã®ã¢ã¯ã·ã§ã³ææ¡**: åªå
床ã®é«ãé ã«æ¬¡ã«ããã¹ãäœæ¥ãææ¡ããããmain ã«æ»ããŸããããã¯ææ¡ããªãïŒäœæ¥ãã©ã³ãã§ ` /d issue ` ãå®è¡ããã°èªåçã« origin/main ããŒã¹ã®ãã©ã³ããäœæãããããïŒ ### ` /d new <ã¿ã€ãã«> ` æ°ãã Issue ã起祚ããïŒèªåãåãçµããšã¯éããªãïŒã 1. åŒæ°ãèŠçŽããŠã¿ã€ãã«ã«ããïŒãªããã°ãŠãŒã¶ãŒã«èãïŒ 2. ` gh issue list --state open --json number,title ` ã§æ¢åã®é¡äŒŒ Issue ããã§ã㯠3. 説ææã®æ¡ãçæããŠãŠãŒã¶ãŒã«æç€ºïŒçµç·¯ã»çŸç¶ã»æåŸ
广ãå«ããïŒ 4. ` gh label list --json name,description ` ã§é©åãªã©ãã«ãå€å® 5. ` gh issue create --title "..." --body "..." --label "..." ` ã§äœæ 6. URL ã衚瀺 7. **次ã®ã¢ã¯ã·ã§ã³ãå¿
ãéžæè¢ãšããŠæç€º**ïŒçç¥äžå¯ïŒ: 1. èªåãã¢ãµã€ã³ããŠä»ããåãçµã â ` /d issue ` ã®åŠçãç¶è¡ 2. èªåãã¢ãµã€ã³ããŠäœæ¥ã«æ»ã â ` gh issue edit <çªå·> --add-assignee "@me" ` ã®ã¿ 3. ä»ã®äººãã¢ãµã€ã³ããïŒå¯Ÿè±¡è
ãæå®ïŒ 4. ã¢ãµã€ã³ããçµäº ### ` /d issue <çªå·ãŸãã¯URL> ` ïŒãšã€ãªã¢ã¹: ` /d i ` ïŒ æ¢å Issue ã«èªåãåãçµãããã©ã³ãäœæã»ããã·ã¥ã§çæã宣èšããŠããæ¹éã³ã¡ã³ããæçš¿ããã 1. Issue çªå·ãç¹å®ããå
容ååŸ + èªåãã¢ãµã€ã³: ```bash gh issue view <çªå·> --json title,body,labels,assignees gh issue edit <çªå·> --add-assignee "@me" ``` 2. ` git fetch origin && git branch -a --list "*/<issueçªå·>-*" ` ã§æ¢åãã©ã³ãã確èª: - **ãã**: ä»äººã®ã³ããããããã°ãŠãŒã¶ãŒã«ç¢ºèªããªããã°ãã§ãã¯ã¢ãŠã + ãmain ææ°åã蟌ã¿ããå®è¡ - **ãªã**: Issue ãããã©ã³ãåãçæïŒããã©ã³ãåœåèŠåãåç
§ïŒã**確èªäžèŠã§** äœæã»push ãã: ```bash git checkout -b "<prefix>/<çªå·>-<説æ>" origin/main git push -u origin HEAD ``` 3. æ¹éã»å®è£
èšç»ããŠãŒã¶ãŒã«æç€º â æ¿èªåŸ ` gh issue comment ` ã§æçš¿ïŒæçš¿ã®ç¢ºèªäžèŠïŒ **ããããã€ã³ã**: ãã©ã³ãã push ããŠIssueã³ã¡ã³ããæ®ãããšã§ãä»ã¡ã³ããŒã«ãèªåã #<çªå·> ã«çæäžããèŠããããã«ãªããéè€çæãæªç¶ã«é²ãã ### ` /d commit ` 倿Žãã³ãããã»ããã·ã¥ããPR ãæªäœæãªã Draft PR ãäœæããã **ãã©ã³ãå€å®:** - **`main` ã®å Žå**: 倿Žå
容ãã prefix ã倿ãããã©ã³ãåãçæ â ` git checkout -b "<prefix>/<説æ>" ` â æ¬¡ã®æé ãž - **äœæ¥ãã©ã³ãã®å Žå**: ãã®ãŸãŸæ¬¡ã®æé ãž **æé :** 1. 倿Žç¢ºèªïŒå
±éã«ãŒã«ïŒ 2. ã¹ããŒãžã³ã°å€æïŒå
±éã«ãŒã«ïŒ 3. ãã©ã³ãåãã Issue çªå·ãæœåºïŒ ` feat/123-xxx ` ã® ` / ` ã®åŸã®æ°åïŒ 4. ã³ãããã¡ãã»ãŒãžçæ â ` git add && git commit ` 5. main ææ°åã蟌ã¿ïŒå
±éã«ãŒã«ïŒ 6. ` git push -u origin HEAD ` 7. ` gh pr list --head <ãã©ã³ã> --json number,title,isDraft,url,author ` ã§ PR ç¢ºèª 8. **ã¬ãã¥ãŒå®è¡**ïŒ ` is_own_pr=true ` , ` post_to_pr=true ` ïŒ: - **PR ããªãå Žå**: ` /d pr ` ã«åŸã£ãŠDraft PR äœæ â ã¬ãã¥ãŒå®è¡ â ååã¬ãã¥ãŒã¯ç²ŸåºŠåªå
- **PR ãæ¢åã®å Žå**: 远å ã³ãããã®å·®åãã¬ãã¥ãŒ 9. PR ããŒãžç¢ºèªïŒå
±éã«ãŒã«ïŒ 10. çµæè¡šç€º: ã³ãããããã·ã¥ã»ã¡ãã»ãŒãžãããã·ã¥å
ãPR URLãã¬ãã¥ãŒçµæ ### ` /d pr ` Pull RequestãäœæããŸãã¯ãäœææžã®PRã«å¯ŸããŠå¿
èŠãªã¢ã¯ã·ã§ã³ãããã 1. ãã©ã³ãã ` main ` ãªããšã©ãŒ 2. ` gh pr view --json number,title,isDraft,url ` ã§æ¢å PR ç¢ºèª 3. **PR ãã**: PR ã³ã¡ã³ãç¢ºèª â æªå¯Ÿå¿ããã°å¯Ÿå¿ 4. ` git fetch origin main ` â ` git log origin/main..HEAD --oneline ` + ` git diff origin/main...HEAD --stat ` ã§å·®åååŸ 5. PR ã¿ã€ãã«ïŒ70æå以å
ïŒã𿬿ãçæïŒ ` æŠèŠ / é¢é£Issue / ãã£ãããš / ãã£ãŠããªãããš ` ã ` é¢é£Issue ` ã¯å
±éã«ãŒã«ã«åŸã ` Closes ` / ` Refs ` ïŒ 6. ` git push -u origin HEAD ` â PR ãªããªã Draft äœæãããã°ã¿ã€ãã«ã»æ¬æãæŽæ° 7. ã¬ãã¥ãŒå®è¡ïŒ ` is_own_pr=true ` , ` post_to_pr=true ` , ` effort=high ` ïŒâ çµæè¡šç€º 8. URL 衚瀺 9. PR ããŒãžç¢ºèªïŒå
±éã«ãŒã«ïŒ ### ` /d review ` äœæ¥ãã©ã³ãã®å€æŽãã¬ãã¥ãŒãPR ãããã°ã¬ãã¥ãŒãšããŠæçš¿å¯èœã 1. ãã©ã³ãã ` main ` ãªããšã©ãŒ 2. ` gh pr view --json number,title,url,isDraft,author ` ã§ PR 確èªã ` gh api user --jq .login ` ãš ` author.login ` ãæ¯èŒã㊠` is_own_pr ` ãæ±ºå® 3. ã¬ãã¥ãŒå®è¡ïŒ ` is_own_pr=<å€å®> ` , ` is_draft=<ååŸå€ããªããã°true> ` , ` post_to_pr=false ` , ` effort=high ` ïŒâ çµæè¡šç€º 4. **PR ãã**: æçš¿ãããç¢ºèª â æçš¿ããå Žåã¯ãPR ãžã®æçš¿ããå®è¡ïŒ ` post_to_pr=true ` ïŒãDraft ãã€ããŒãžå¯èœãªã Ready åãèµ°ã 5. PR ããŒãžç¢ºèªïŒå
±éã«ãŒã«ïŒ ### ` /d improve <æ¹åå
容> ` ` /d ` ã¹ãã«èªäœã®æ¹åææ¡ã Issue 起祚ããã 1. åŒæ°ãããã°ãããæ¹åå
容ã«ãããåŒæ°ããªãå Žåã¯çŽåã®äŒè©±ã®æèïŒäžæºãéåæã®è¡šæãããŸããããªãã£ãæäœãªã©ïŒããæšæž¬ãã 2. æ¹åå
容ãããšã«ç°¡æœãª Issue ã¿ã€ãã«ïŒæ¥æ¬èªïŒãçæ 3. Issue ãäœæ: ```bash gh issue create --title "<ã¿ã€ãã«>" --body "$(cat <<'EOF' ## æ¹åå
容 <ã¹ãã«æ¹åå
容> ## ä»£æ¿æ¡ <claudeã®èšå®ãªã©ãã¹ãã«èªäœã®æ¹å以å€ã§å®çŸå¯èœãªä»£æ¿æ¡> EOF )" ``` 4. äœæãã Issue ã® URL ã衚瀺 ### ` /d help ` 以äžããã®ãŸãŸåºåãã: ``` ## éçºããã»ã¹ ### (1) ã¢ãµã€ã³ãããã¿ã¹ã¯ã«åãçµã 1. `/d` ã§èªåã®ã¿ã¹ã¯ã確èªãã 2. `/d issue <çªå·>` ã§ Issue ã«çæããïŒã¢ãµã€ã³âãã©ã³ãäœæâæ¹éã³ã¡ã³ãïŒ 3. å®è£
ãã 4. `/d commit` ã§ã³ãããã»ããã·ã¥ã»PRäœæ 5. `/d review` ã§ã¬ãã¥ãŒã»Readyå ### (2) æ°ãã課é¡ã起祚ãã `/d new <ã¿ã€ãã«>` ã§ Issue ãäœæãããèªåã§åãçµããã©ããã¯ãã®å Žã§éžæã§ããã ### (3) Issue ãç«ãŠãã«å®è£
ãã 1. å®è£
ããïŒmain ãã©ã³ãäžã§ã `/d commit` ãèªåã§ãã©ã³ããäœæããïŒ 2. `/d commit` ã§ã³ãããã»ããã·ã¥ã»PRäœæ 3. `/d review` ã§ã¬ãã¥ãŒã»Readyå ### (4) ãã®ã¹ãã«ã®æ¹åãªã¯ãšã¹ã `/d improve <äžæºç¹ãæ¹åæ¡>` ã§æ¹åææ¡ã Issue 起祚ããã ## ã³ãã³ãäžèЧ | ã³ãã³ã | 説æ | |---|---| | `/d` | `/d help` ãšåãïŒãµãã³ãã³ãçç¥æïŒ | | `/d todo` | èªåã®ã¢ãµã€ã³ã¿ã¹ã¯ã»ã¡ã³ã·ã§ã³ã»ã¬ãã¥ãŒäŸé ŒãäžèЧ | | `/d new <ã¿ã€ãã«>` | æ°èŠ GitHub Issue ã起祚 | | `/d issue <çªå·>` (`/d i`) | æ¢å Issue ã«çæïŒã¢ãµã€ã³âãã©ã³ãäœæâæ¹éã³ã¡ã³ãïŒ | | `/d commit` | ã³ãããâpushâDraft PRäœæâAIã¬ãã¥ãŒ | | `/d pr` | PR äœæã»æŽæ° | | `/d review` | äœæ¥å
容ã®ã¬ãã¥ãŒ | | `/d improve <å
容>` (`/d imp`) | ã¹ãã«èªèº«ã®æ¹åææ¡ã Issue 起祚 | | `/d help` | ãã®ãã«ãã衚瀺 | ## ãã³ã - å³å¯ãªãµãã³ãã³ãåãèŠããŠããªããŠãã`/d 42çªã®Issueã«çæããŠ` ã®ããã«èªç¶èšèªã§æç€ºããã°é©åãªãµãã³ãã³ããå®è¡ããã - å°ã£ãã `/d` ã ãæã£ãŠã衚瀺ãããéžæè¢ããéžã¹ã°ãã ``` ãµãã³ãã³ãäžèЧ ãµãã³ãã³ã åœ¹å² /d ïŒåŒæ°ãªãïŒ /d help ãšåã /d todo èªåã®ã¢ãµã€ã³ã¿ã¹ã¯ã»ã¡ã³ã·ã§ã³ã»ã¬ãã¥ãŒäŸé ŒãäžèЧ /d new <ã¿ã€ãã«> æ°èŠIssueã起祚 /d issue <çªå·> æ¢åIssueã«çæïŒã¢ãµã€ã³âãã©ã³ãäœæâpushâæ¹éã³ã¡ã³ãïŒ /d commit ã³ãããâpushâDraft PRäœæâAIã¬ãã¥ãŒ /d pr PRã®äœæã»æŽæ° /d review äœæ¥å
容ã®ã¬ãã¥ãŒ /d improve <å
容> ã¹ãã«èªèº«ã®æ¹åææ¡ãIssue起祚 /d help å
šã³ãã³ãäžèЧãšå
žåãããŒã衚瀺 åå¥ã¹ãã«ã§ã¯ãªããµãã³ãã³ãæ¹åŒã«ããããšã§ãå©çšè
㯠ãå°ã£ãã /d ã«ç¶ããŠããããããšãäŒãããã ã ã§ãã¹ãã«ã§èŠå®ããã«ãŒã«ã«åããŸãã 䞻圹㯠/d todo / /d issue / /d commit / /d review ã®4〠䞻圹ãµãã³ãã³ãã¯ã äœæ¥è
ãããšããšæèããŠããäœæ¥ã¢ã¯ã·ã§ã³ ã«å¯Ÿå¿ããŸãã èªåã®ã¿ã¹ã¯ã確èªãã çæãã ææç©ãæåºãã ã¬ãã¥ãŒãã ãããã Git/GitHubãšã¯ç¡é¢ä¿ã«äœæ¥éçšã«ååšããã¢ã¯ã·ã§ã³ ã§ããããããäž»åœ¹ã«æ®ãããã©ã³ãäœæã»PRäœæã»mainãã©ã³ãåã蟌ã¿ãšãã£ãGit/GitHubèµ·å ã®æäœã¯å
åŽã«é ããŠAIãèªååããŸãã ããã« /d todo ã¯Issueã®ã¢ãµã€ã³æ
å ±ã«åºã¥ããŠçæãã¹ãIssueãææ¡ãã /d commit ã¯ã³ãããããPRäœæãAIã¬ãã¥ãŒãŸã§ãŸãšããŠå®è¡ããããã å
žåãããŒã§å©çšè
ãå®éã«æã€ã®ã¯ /d todo â /d commit ã®2ã€ã§æžãããšãå€ã ã§ãã åãããŠã¿ãïŒ2ã€ã®å
žåã·ããªãª å
¥å£ã¯2éããããŸããã ã©ã¡ããæåŸã¯ /d commit ã«åæµããPRããŒã¹ã®éçºãããŒãé²ã ã®ããã€ã³ãã§ãã ã·ããªãªAïŒIssueé§åã§éçºãé²ããå Žå UXãã¶ã€ãã®äœè€ããã«ããã°ã€ã³ç»é¢ã®å
¥åæ¬ã®äœçœã調æŽããŠã»ããããšãã Issue #58 ãã¢ãµã€ã³ãããã Step 1: /d todo ã§ç¢ºèªãããã®ãŸãŸçæãã > /d todo ã¹ãã«ã¯ãçŸåšã®ãã©ã³ãã»ã¢ãµã€ã³æžã¿Issueã»ã¬ãã¥ãŒäŸé Œã»ã¡ã³ã·ã§ã³ãã䞊åååŸããŠæŽåœ¢è¡šç€ºãã æåŸã«ã次ã«äœããã¹ããããŸã§ææ¡ããŸã ã ## çŸåšã®ãã©ã³ã - â mainïŒã¯ãªãŒã³ïŒ ## ã¢ãµã€ã³æžã¿ Issue | # | ã¿ã€ãã« | ç¶æ
| ã©ãã« | |----|---------------------------------------|--------|--------| | 58 | ãã°ã€ã³ç»é¢ã®å
¥åæ¬ã®äœçœã調æŽããã | æªçæ | feat | ïŒã¬ãã¥ãŒäŸé Œã»ã¡ã³ã·ã§ã³ã¯ãããŸããïŒ --- æªçæã® Issue ã1ä»¶ãããŸããåªå
床ã®é«ã #58 ããçæããŸããïŒ ïŒã¢ãµã€ã³ â ãã©ã³ãäœæ â push â æ¹éã³ã¡ã³ã ãŸã§å®è¡ããŸãïŒ (y/n) /d todo ã¯äžèЧã䞊ã¹ãŠçµããã§ã¯ãªãã ãæªçæã® #58 ããçæããŸããïŒããšæ¬¡ã®äžæãŸã§ææ¡ ããŸããå©çšè
ã¯è¡šãçºããŠã次ã«äœããããããšèããå¿
èŠããããŸãããããã§ y ãšçããã°ãçæåŠçããã®ãŸãŸèµ°ããŸãã # ãã¯ãããšçããåŸã«ã¹ãã«ãå®è¡ããå
éšåŠç gh issue edit 58 --add-assignee "@me" git checkout -b "feat/58-login-margin" origin/main git push -u origin HEAD gh issue comment 58 --body "<å®è£
æ¹é>" ãã©ã³ããpushãããç¬éãGitHubã®ä»ã¡ã³ããŒã«ã¯ãäœè€ããã #58 çæäžããèŠããŸãã ããã ãã§éè€çæã倧ããæžãããŸãã çæã®å
¥å£ã¯2éããã©ã¡ãã§ããã â Issueçªå·ãæåããããã£ãŠãããªãã /d todo ãçµç±ãã /d issue 58 ãçŽæ¥æã£ãŠãåãçæåŠçã«å
¥ããŸããã /d todo ã®ææ¡ã«ä¹ãããã /d issue ãçŽæ¥æã€ããã¯ãå©çšè
ã奜ããªæ¹ãéžã¹ãŸãã Step 2: å®è£
â /d commit äœè€ããã¯Claude Codeã«å®è£
ãä»»ããå®äºããã /d commit ãå®è¡ã ã³ããã â push â Draft PR â AIã¬ãã¥ãŒ â Readyå â ããŒãž â Issueã¯ããŒãº ãŸã§ãäžæ°ã«æµããŸãã çµå±ãå©çšè
ãæã€ã®ã¯ /d todo ïŒææ¡ã«ä¹ã£ãŠçæïŒâ /d commit ã®å®è³ª2ã³ãã³ãã ãããã©ã³ãåãã³ãããã¡ãã»ãŒãžãPRæ¬æãæžãå Žé¢ã¯ãããŸããã è£è¶³ïŒIssueããŸã ç¡ããšã㯠/d new ã§èµ·ç¥šãã ã·ããªãªAã¯ã¢ãµã€ã³æžã¿ã® Issue #58 ããå§ããŸããããããããåãçµã¿ããããšããŸã Issueã«ãªã£ãŠããªãããšããããŸãããã®å Žå㯠/d new ã«æŠèŠãæž¡ãã ãã§èµ·ç¥šã§ããŸãã > /d new ãã°ã€ã³ç»é¢ã®å
¥åæ¬ã®äœçœã調æŽããã ã¹ãã«ã¯æ¢åã®é¡äŒŒIssueã確èªããããã§ãã¿ã€ãã«ã»èª¬ææã»ã©ãã«ã®æ¡ãçæããŠèµ·ç¥šããäœæåŸã« ã誰ãåãçµããããéžæè¢ã§æç€º ããŸãã Issue #59 ãäœæããŸããïŒ https://github.com/<owner>/<repo>/issues/59 ç¶ããŠã©ãããŸããïŒ 1. èªåãã¢ãµã€ã³ããŠä»ããåãçµãïŒãã®ãŸãŸçæåŠçãžïŒ 2. èªåãã¢ãµã€ã³ããŠåŸã§åãçµã 3. ä»ã®äººãã¢ãµã€ã³ãã 4. ã¢ãµã€ã³ããçµäº 1 ãéžã¹ã°ããã®ãŸãŸ /d issue çžåœã®çæåŠçïŒã¢ãµã€ã³ â ãã©ã³ãäœæ â push â æ¹éã³ã¡ã³ãïŒã«æµããŸãã ã起祚 â çæããã³ãã³ããæã¡æ¿ããã«äžæ¬ã§ã€ãªãã ã®ããã€ã³ãã§ãã起祚ã ãããŠä»ã®äººã«ä»»ãããïŒ 3 ïŒãããšã§èªåã§ããïŒ 2 ïŒãšãã£ãåå²ãããã®å Žã§éžã¶ã ãã§æžã¿ãŸãã ãŸã /d new ã¯ãæ©èœè¿œå ã®ãããªãã¡ããšããIssueã ãã§ãªãã ããã®ããã¥ã¡ã³ããçŽããŠã»ããããClaudeã®ã¹ãã«ãä¿®æ£ããŠããšãã£ãã¡ãã£ãšããäœæ¥äŸé Œ ã«ãæ°è»œã«äœ¿ããŸããå£é ããã£ããã§æµããã¡ãªçްããäŸé ŒãIssueãšããŠæ®ããäŸé Œã®ããŒãã«ãäžãããŸããããã« åããåŽã /d issue ã§çæãããšãã«ã¯ãAIãIssueæ¬æïŒèæ¯ã»çµç·¯ã»æåŸ
ããçµæïŒãæèãšããŠèªã¿åããŸã ããã£ããã®æççãªããåããšéããèŠä»¶ããŸãšãŸã£ãŠããã¶ããAIã¯æå³ãæ±²ãã å®è£
ãæ¹éã³ã¡ã³ããè¿ãããããªããŸããããã¯åé ã§è§Šãã ãAIãæèãçè§£ããããããã«Git/GitHubãžéçŽããã æµãã«ãæ°è»œãªèµ·ç¥šããã®ãŸãŸä¹ã圢ã§ãã ã·ããªãªBïŒIssueãç«ãŠããæãã€ããæ¹åæ¡ããããªãäœãå§ããå Žå UXãã¶ã€ãã®äœè€ããã¯ããµãšæãã€ããUIã®æ¹åæ¡ããã®å Žã§Claude Codeã«äœãããŠã¿ããIssueãç«ãŠãããã©ã³ãã main ã®ãŸãŸããŒã«ã«ã«ä¿®æ£æ¡ãã§ãããã£ãŠãããä»äžãããè¯ãã£ãã®ã§ããã®ãŸãŸ /d commit ãå®è¡ããã > /d commit ãã®ãšããã¹ãã«ã¯å€æŽå
容ã確èªãã 倿Žå
容ããé©åãªãã©ã³ãåïŒ fix/update-signup-form-warning-message ãªã©ïŒã倿 èªåã§ãã©ã³ããåã£ãŠãã ã³ããã ãã®ãã©ã³ããpushããDraft PRãäœæ ç¶ã㊠AIã¬ãã¥ãŒãèµ°ã ã倿Žå
容ã«åé¡ããªããã°Readyå ã·ããªãªAãšåããã /d commit ã®å
ã¯Draft PRäœæããAIã¬ãã¥ãŒã»ReadyåãŸã§äžæ°ã«æµããŸããäœè€ããã¯ããã©ã³ããåãå¿ããããIssueãç«ãŠå¿ããããšæ
ãŠãå¿
èŠããªããæãã€ããæ¹åæ¡ã圢ã«ããããšã ãã«éäžã§ããŸãã ãã¢ã€ãã¢ãæ¢ããã«äœããåŸããæ£ããåœ¢ã«æŽããã ââ ãã€ãã³ãŒãã£ã³ã°ã®ãªãºã ãä¿ã£ããŸãŸãçµæçã«ãè¡åã®è¯ã圢ã«çå°ããŸãã ã¹ãã«æ¹åã®çµç·¯ãšèãæ¹ /d ã¯æåããä»ã®å§¿ã ã£ãããã§ã¯ãããŸãããåæã¯ãã£ãšçްããããã©ã³ããäœãããPull Requestãäœãããšãã£ã Gitã®æäœã«ã1ã€ãã€ã³ãã³ããçŽã¥ããŠãããåã
ã®æäœãAIã§è£å®ããŠããã ãã§ããããšã³ãžãã¢ã«ãšã£ãŠã¯éåæããªããšãããšã³ãžãã¢ä»¥å€ã®å©çšè
ããèŠããš ã©ã®ã³ãã³ããæã€ãéžã¶æç¹ã§Gitã®ç¥èãå¿
èŠ ã§ãéçºãããŒã®äœæ³ãèŠããè² æ
ãæ®ã£ãŠããŸããã ããã§ ãããŒã«ã§ã¯ãªãç®çäžå¿ã§ã¹ãã«ã®ããæ¹ãæ±ºããã ããšã匷ãæèãã䜿ããããã远æ±ããŠæ¹åãéããŸãããå€æè»žãšããŠåç
§ããã®ããUXèšèšã®å€å
žã§ãã ã€ã³ãã»ããŒã«ã»ã³ã®ãŠãŒã¶ããªãã£10åå ã§ããã¹ãã«éçºã¯ãèªåã䟿å©ãªæ©èœãè¶³ããæ¹åã«æµããã¡ã§ããã10ååã«ç
§ããããšã§ãããã¯å©çšè
ç®ç·ã®ä»æ§ã«ãªã£ãŠãããïŒããåãçŽããŸããã 10ååã¯ä»¥äžã®ãšããã§ãïŒåèš³ã¯æ¬èšäºã§ã®è¡šèšïŒã Visibility of system status / ç¶æ
ã®å¯èŠæ§ Match between the system and the real world / çŸå®äžçãšã®èª¿å User control and freedom / ãŠãŒã¶ãŒã³ã³ãããŒã«ãšèªç± Consistency and standards / äžè²«æ§ãšæšæº Error prevention / ãšã©ãŒäºé² Recognition rather than recall / åçããåèª Flexibility and efficiency of use / æè»æ§ãšå¹çæ§ Aesthetic and minimalist design / æå°éãã¶ã€ã³ Help users recognize, diagnose, and recover from errors / ãšã©ãŒå埩 Help and documentation / ãã«ããšããã¥ã¡ã³ããŒã·ã§ã³ ãã®ç« ã§ã¯ãç¹ã«å€§ããå¹ãã 4ã€ã®æ¹å ãã察å¿ããååãšãšãã«ç޹ä»ããŸãã æ¹å1ïŒã³ãã³ãããGitæäœããããäœæ¥ã¢ã¯ã·ã§ã³ããžïŒåå2 çŸå®äžçãšã®èª¿åïŒ æå€§ã®æ¹åããã³ãã³ãäœç³»ãã®ãã®ã®çµã¿æ¿ãã§ãã Before â ãã©ã³ãäœæã»ã³ãããã»PRäœæâŠãšãGit/GitHubã®æäœãå©çšè
ã1ã€ãã€åŒã³åºãäœç³» After â /d todo ïŒèŠãïŒã» /d issue ïŒçæïŒã» /d commit ïŒæåºïŒã» /d review ïŒã¬ãã¥ãŒïŒã®4ã€ããã©ã³ãäœæãPRäœæã¯ãã®å
åŽã«é ãã åå2ãçŸå®äžçãšã®èª¿åãã¯ã å©çšè
ãçŸå®äžçãã顿šããã€ã¡ãŒãžã«ã·ã¹ãã ãåããã ãšããååã§ããã¿ã¹ã¯ãèŠãã»çæããã»ææç©ãæåºããã»ã¬ãã¥ãŒãã ââ ããããGit/GitHubã«é¢ä¿ãªãéçºã®äœæ¥éçšã«ååšããã¢ã¯ã·ã§ã³ã§ãããå©çšè
ã説æãããªããŠãããè¡åã§ããããã«æããããšã§ãéçºããŒã«ã®äœ¿ãæ¹ãåŠã¶ããšããå£ãè§£æ¶ãããŸããã æ¹å2ïŒã誰ãäœããã£ãŠãããããèªç¶ã«èŠããïŒåå1 ç¶æ
ã®å¯èŠæ§ïŒ åå1ãç¶æ
ã®å¯èŠæ§ãã¯ã ã·ã¹ãã ã®ç¶æ
ãå©çšè
ã«åžžã«èŠããããã«ãã ãšããååã§ãã /d ã§ã¯ãããå人ã®ç»é¢ã«ãšã©ããã ããŒã ã«å¯Ÿããäœæ¥ç¶æ³ã®å¯èŠå ã«åºããŸãããæ¹å1ã§ãçæãã®å
åŽã«æããäžé£ã®æäœãããã®ãŸãŸ çæå®£èšãããã³ã« ãšããŠæ©èœããŸãã /d issue 58 ãå®è¡ããæç¹ã§ã ã¢ãµã€ã³ + äœæ¥ãã©ã³ãã®ãªã¢ãŒãpush + æ¹éã³ã¡ã³ãã®æçš¿ ãèµ°ããŸããã³ãããããŸã ç¡ããŠããç§ã #58 ãã£ãŠãŸãããåšå²ã«èŠããããã«ãªããŸããå°å³ã§ãããããã ãã§ å®è£
ãäºéã«é²ããŠããŸãäºæ
ã倧ããæžãããŸããèªåããããã£ãŠãŸãããšå£°ãäžããªããŠãçæããæç¹ã§èªç¶ã«å
±æãããããŒã å
šäœã§ã®äœæ¥ç¶æ³ãèŠãããããªããŸãã æ¹å3ïŒèª€æäœã¯æ³šæã§ã¯ãªãä»çµã¿ã§é²ãïŒåå5 ãšã©ãŒäºé²ïŒ åå5ããšã©ãŒäºé²ãã¯ã äžå¯§ãªæ³šæåèµ·ãããããããããšã©ãŒãèµ·ããªãèšèšãåªå
ãã ãšããååã§ããGitã䜿ã£ãŠããŠèµ·ããã¡ãªå€±æã«å¯ŸããŠããæ°ãä»ããŠãããšä¿ãã®ã§ã¯ãªãä»çµã¿ã§æœ°ããŸãã /d ã¹ãã«ã䜿ããªããåãå
¥ããäºé²ã®ä»çµã¿ãããã€ã玹ä»ããŸãã # èµ·ããã¡ãªå€±æ ã¹ãã«ã§ã®è§£æ±º 1 åãå
容ã®Issueãéè€èµ·ç¥š 起祚åã«æ¢åIssueãšã®é¡äŒŒããã§ã㯠2 mainã§äœæ¥ããŠçŽpush 倿Žãæ€ç¥ããèªåã§ãã©ã³ããåã£ãŠããã³ããã 3 test tmp çã§ãã©ã³ãåãä¹±ç« Issueã»å€æŽå
容ããåœåèŠåã«æ²¿ã£ãŠèªååœå 4 åãIssueãå¥ãã©ã³ãã§éè€çæ çææã«æ¢åãã©ã³ãã確èªãä»äººã®ã³ããããããã°ç¢ºèª 5 .env ã» node_modules çã誀commit ã¹ããŒãžã³ã°åã«èªåæ€ç¥ããŠç¢ºèª 6 Issueãšç¡é¢ä¿ãªãã¡ã€ã«ãæ··å
¥ ãã©ã³ãåããæšæž¬ããäœæ¥å
容ãšç
§åããŠèŠå 7 æªã³ããã倿Žãæ±ãããŸãŸcheckout åãæ¿ãåã«ç¢ºèªããã³ããã/äžæãæç€º 8 ããŒã«ã«ã®mainãå€ããŸãŸé²ããŠconflictå°ç äœæ¥çææãpushåã«mainãšã®å·®ãèªåãã§ãã¯ãåã蟌ã¿ãææ¡ 9 Issueã»ã³ãããã»PRã®èª¬æã®äœæãé¢åã§çç¥ã»éã«ãªã 倿Žå
容ããAIãã¿ã€ãã«ã»æ¬æã»ã³ãããã¡ãã»ãŒãžã»PR説æãèªåäœæ æ¹å4ïŒæãåºãããªãã»è¿·ãããªãïŒåå6 åçããåèªïŒ åå6ã¯ãèªç¥ç§åŠã§ãã ãåçïŒrecallïŒããåèªïŒrecognitionïŒã®æ¹ãé¥ãã«æ¥œã ãšããæ§è³ªã«åºã¥ãååã§ãããæ¬¡ã«äœããã¹ããããå©çšè
ãæãåºãïŒåçïŒå¿
èŠããªããã æç€ºãããéžæè¢ããéžã¶ïŒåèªïŒ ã ãã§æ£ããæé ãæ©ããããã«ããŸãã ãæ¬¡ã«ããããšããéžæè¢ã§æç€ºãã ãµãã³ãã³ãã®çµããã«ã¯ãå¿
ã æ¬¡ã®åè£ã¢ã¯ã·ã§ã³ãéžæè¢ã§æç€º ããŸãã /d todo ã®æåŸ â åªå
床ã®é«ãé ã«æ¬¡ã®ã¿ã¹ã¯ãææ¡ /d new ã§èµ·ç¥šåŸ â ãèªåãã¢ãµã€ã³ããŠåãçµã / ã¢ãµã€ã³ã®ã¿ / ä»ã®äººã«ã¢ãµã€ã³ / ã¢ãµã€ã³ããªãã /d commit ã®ã¬ãã¥ãŒå®äºåŸ â ãããŒãžããŸããïŒ (y/n)ã å©çšè
ã¯ã次ã«äœãããã°ããã£ãã£ãããšèããå¿
èŠããªããéžã¶ã ãã§æ£ããæé ã«ä¹ããŸãã ãªã¹ãåºåã«å¿
ãèå¥åãæ¯ã ãéžã¶ã ããã®ããåããæ¯ããããã衚ã»ç®æ¡æžãã»éžæè¢ãªã©è€æ°é
ç®ã䞊ã¶åºåã«ã¯ã å¿
ãé£çªãèšå·ã®èå¥åãæ¯ã ã«ãŒã«ã«ããŸãããIssueçªå·ã®ãããªæ¢åIDãããã°ããã䜿ããç¡ããã°é£çªãæ¯ããŸããããšãã°å®è£
åã«æé ã®èšç»ãåºããããšããããªããŸãã å®è£
èšç»: 1. å
¥åæ¬ã³ã³ããŒãã³ãã®äœçœã倿°å 2. ãã°ã€ã³ç»é¢ãžé©çš 3. ã¢ãã€ã«è¡šç€ºã®ã¹ã¿ã€ã«èª¿æŽ 4. ä»ç»é¢ã®ãã©ãŒã ãžæšªå±é 5. äžèŠã«ãªã£ãæ§ã¹ã¿ã€ã«ã®åé€ ã©ããŸã§é²ããŸããïŒ å°å³ã§ãã广ã¯å€§ãããå©çšè
㯠ãäžæŠ3ãŸã§é²ããŠãã4ãš5ã¯äžèŠã ã®ããã«çªå·ã ãã§æç€ºã§ããŸããAIãšã®ãã£ããã§ã¯å¯Ÿè±¡ãèšèã§èª¬æãçŽãããé·ãåŒçšãã³ããããããè² æ
ã«ãªããã¡ã§ãããèå¥åããããšããåããäžæ°ã«çããªããŸãã 10ååãã€ãžã§ã¹ãïŒæ®ãã®ååãèšèšã«å¯Ÿå¿ã¥ãã æ¹å1ã4ã§äœ¿ã£ãååïŒ1ã»2ã»5ã»6ïŒä»¥å€ãã /d ã®èšèšå€æã®ãã¡ãã¡ã«å¯Ÿå¿ããŠããŸããæ®ã6ã€ããã€ãžã§ã¹ãã§ç޹ä»ããŸãã åå3 ãŠãŒã¶ãŒã³ã³ãããŒã«ãšèªç± â Issueèµ·ç¹ã®ãããŒã«éå®ãããmainã§ã®æãã€ãçæã蚱容ãç Žå£çæäœã®åã«ã¯å¿
ã (y/n) ç¢ºèª åå4 äžè²«æ§ãšæšæº â issue commit ãªã©ã®çšèªã¯æè¡åŽã«åãããå©çšè
ã®çšèªç¿åŸããšã³ãžãã¢ãšã®ææçéãéèŠ åå7 æè»æ§ãšå¹çæ§ â åå¿è
㯠/d todo ã®ææ¡ã«ä¹ãã ãã§çæãŸã§é²ã¿ãæ
£ããã /d issue ãçŽæ¥æã€ã»ãšã€ãªã¢ã¹ïŒ /d i ïŒã䜿ããªã©å¹çåã§ãããããã« /d improve ã§ã¹ãã«èªäœãé²åããããã åå8 æå°éãã¶ã€ã³ â èŠããã¹ãã³ãã³ããå°ãªãããèªç¶èšèªã§ãåãããã«ããããšã§ãã¹ãã«ã®äœ¿ãæ¹ãã·ã³ãã«ã« åå9 ãšã©ãŒå埩 â ã¯ãŒã¯ãããŒæäœãAIã宿œããããšã§ããšã©ãŒæãAIãèœåçã«èª¿æ»ã»å埩ã§ããã䜿ãã¥ãããããã° /d improve ã§äžæºãæ¹åæ¡ãšããŠIssueåã§ãã åå10 ãã«ããšããã¥ã¡ã³ããŒã·ã§ã³ â /d help ã§å
šã³ãã³ããšå
žåãããŒã衚瀺 ãããã« æ¬èšäºã§ã¯ãGit/GitHubã䜿ã£ãéçºãããŒããšã³ãžãã¢ä»¥å€ã®ã¡ã³ããŒãšååããŠé²ããããã®ã¹ãã«ã«ã€ããŠç޹ä»ããŸããããšã³ãžãã¢ä»¥å€ã®ã¡ã³ããŒãšãšãã«éçºããããŒã ã§ã å
šå¡ãå®å¿ããŠéçºã§ããç°å¢ã¥ããã®äžå©ã«ãªãã°å¹žãã§ãã ãããããããã£ãšè¯ããªãããèªåã®ããŒã ã§ã¯ããããŠãããªã©ãããã°ãæ¯éã³ã¡ã³ããã ããïŒ
ã¯ããã« æšä»ã仿§é§åéçº (Spec-Driven Development) ã®ååãè³ã«ããæ©äŒãå¢ããŠãããšæããŠããŸããMiiTel Phone ããŒã ã«ãããŠãæ°ã¶æã»ã© OpenSpec ãšããããŒã«ã䜿çšããŠä»æ§é§åéçºã詊ã¿ãŠããŸãããçµè«ãšããŠãOpenSpec ã®æ¡çšã¯åããããããšã«ããŸãããä»å㯠OpenSpec ãããŒã¹ã«ä»æ§é§åéçºã詊ããŠã¿ãŠæãã課é¡ãææã«ã€ããŠå
±æããããŸãã åæ ããã³ããšã³ãéçºã«ãããæ¡çšã§ã æ°èŠéçºã§ã¯ãªããæ¢åãããã¯ãã®éçºã«ãããå°å
¥ã§ã â ïžÂ æ³šææžã æ¬èšäºã¯ä»æ§é§åéçºã®ææ³ã OpenSpec ãªã©ã®ããŒã«ãã®ãã®ãéé£ããæå³ã¯ãããŸããã ãããŸã§ãMiiTel Phone ããŒã ã§ã¯åããªãã£ãããšããã ãã§ããã 仿§é§åéçºãæçã§ãããã©ããã¯ãããŒã ã®æåãéçºãããŒãªã©ã«ãã£ãŠãç°ãªã£ãŠãããšæããŸãã ãã®ãããæçµçã«ã¯å®éã«ããŒã«ãææ³ãªã©ã詊ããŠãã倿ããã ãããšãæšå¥šããããŸãã ðÂ ä»æ§é§åéçº (Spec-Driven Development) ã«ã€ã㊠æŠãããŸã Spec ãæžãããããããŒã¹ã« AI ãšãŒãžã§ã³ãã«ã³ãŒããæžããŠãããææ³ãã®ããšãæãããšãå€ãã®ã§ã¯ãªãããšæããŸãã Spec 㯠AI ãšãŒãžã§ã³ããšäººã®åæ¹ã«å¯ŸããŠä¿¡é Œã§ããæ
å ±æºãšããŠæ¯ãèãããšãæ³å®ãããŸãã martinfowler.com OpenSpec ã«ã€ã㊠OpenSpec 㯠Node.js 補ã®ä»æ§é§åéçºã®ããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã github.com OpenSpec ãæ¡çšããã®ã¯ä»¥äžã®çç±ããã§ãã ãŸãã¯æ¢åã®ããŒã«ã䜿çšããŠé²ããæ¹ãèªåéã§ä»çµã¿ãæŽåãããããæéãå°ãªããšèããããš Node.js 補ã§ãããããããã³ããšã³ãéçºã«ãããŠã¯æ®æ®µäœ¿çšããŠããããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠå°å
¥ã»ç®¡çãã§ããããš ã·ã³ãã«ã§ãããå°å
¥ã«ããã£ãŠã®å¿ççéå£ãæ¯èŒçäœãããš æ§ã
㪠AI ãšãŒãžã§ã³ã (Claude Code, Gemini, Codex ãªã©) ããµããŒãããŠããããš äœ¿ãæ¹ # ã€ã³ã¹ããŒã« $ mise use npm:@fission-ai/openspec@latest $ openspec init # Claude Code ã§ã®å©çšäŸ $ claude > /opsx:new 仿§é§åéçºã詊ã¿ãèæ¯ 仿§é§åéçºã詊ã¿ãã®ã¯ãäžèšãç®çã§ããã AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã¯å®è£
ã仿§ã®èæ¯ãªã©ã«é¢ããç¥èãä¿æããŠããªãããšã«å ããã»ãã·ã§ã³ããšã«èšæ¶ããªã»ãããããŠããŸããå¿
èŠãªã³ãŒããåé€ã»æ¹å€ãããŠããŸããªã©ãæå³ãã¬ã³ãŒãçæãè¡ãªãããŠããŸãã±ãŒã¹ãã§ããéã鲿¢ãããã æ°èŠã¡ã³ããŒã§ããããžã§ã¯ãã®ãã£ããã¢ãããè¡ããããããããã«ãæé»ç¥ããã¡ããšããã¥ã¡ã³ãåããä»çµã¿ããããšäŸ¿å©ã§ã¯ãªãããšèããŠããŸããã OpenSpec ã«ãã仿§é§åéçºãå®è·µããGit ãªããžããªå
ã«èŠæ±ãéå»ã®èšèšã«ãããæææ±ºå®ã®èæ¯ãªã©ãèªç¶ãšèç©ãããããšã«ããããããã®èª²é¡ãèªç¶ã«è§£æ¶ãããããšãç®è«ãã§ããŸããããããŠã仿§é§åéçºãæ¯æŽããŠãããç¹å®ã®ããŒã«ãæ¡çšããããšã«ãã£ãŠå®è·µã®ããŒãã«ãäœäžããã€ã€ãããŒã å
ã§æ¹æ³ãçµ±äžã§ããããã«ããããšãæåŸ
ããŠããŸãã¯å°å
¥ã³ã¹ããäœããšæããã OpenSpec ãå°å
¥ããããšã«ããŸããã OpenSpec ã£ãŠã©ããªã®ïŒ ãŸã OpenSpec ã«ãããŠã¯ openspec/specs/<spec>/spec.md ã«ä¿¡é Œã§ããæ
å ±æºãšããŠã®ä»æ§ãèç©ãããŸããå
·äœçã«ã¯ä»¥äžã®ãããªãã©ãŒãããã® Markdown ã«ãã£ãŠä»æ§ãèšè¿°ãããŸãã # Example Specification ## Purpose This app supports a simple, reliable TODO management experience for individuals. ## Requirements ### Requirement: Creating and managing TODO items The TODO app MUST allow a user to create, view, and complete TODO items. #### Scenario: Creating a new TODO - **GIVEN** a user is signed in to the TODO app - **WHEN** the user enters a title and submits the form - **THEN** a new TODO item is created with status "Incomplete" - **AND** the new TODO item appears in the TODO list #### Scenario: Completing a TODO - **GIVEN** a TODO item exists with status "Incomplete" - **WHEN** the user marks the TODO item as completed - **THEN** the TODO item's status becomes "Completed" - **AND** the TODO item is visually distinguished as completed in the list å®è£
ã®éå§æã« /opsx:new ã³ãã³ããå®è¡ãããšãOpenSpec ã¯å¯Ÿè©±çã«ããåããããå
容ããŒã¹ã« openspec/changes/<change> ãã£ã¬ã¯ããªãžä»¥äžã®ãããªãã¡ã€ã«ãäœæããŠãããŸãã design.md - å®è£
äºå®ã®æ©èœã«é¢ããèšèšããŸãšããããã¥ã¡ã³ã proposal.md - å®è£
äºå®ã®æ©èœã«é¢ãããã€ã¬ãã«ãªèŠçŽããŸãšããããã¥ã¡ã³ã tasks.md - å®è£
æã«è¡ãã¹ãã¿ã¹ã¯ããã§ãã¯ãªã¹ã圢åŒã§ãŸãšããããã¥ã¡ã³ã <spec>/spec.md - æ¬å®è£
ãé²ããããšã«ãã£ãŠ openspec/specs/<spec>/spec.md ã«å¯ŸããŠçãã仿§ãžã®å·®åããŸãšããããã¥ã¡ã³ã éçºãå®äºãããã /opsx:archive ã³ãã³ããå®è¡ããããšã§ã openspec/changes/<change>/<spec>/spec.md ã openspec/specs/<spec>/spec.md ãžããŒãžãããåŸã openspec/changes/<change> ã®åããã¥ã¡ã³ãã openspec/changes/archive/<change> ãžç§»åãããŸãã ããã«ããã openspec/specs/<spec>/spec.md ãåžžã«ææ°åããã€ã€ãéå»ã®å®è£
ã«ãããæææ±ºå®ã®èæ¯ã仿§ã«é¢ããå€åã®éçšãªã©ã openspec/changes/archive/<change> ãžèç©ãããŠãããŸãã ãŸãå®è£
ã«åãæããåã« design.md ãäœæããŠãããç¹ã¯è¯ãç¹ã«æããŸãããäºåã«ããŒã å
ã§ design.md ãã¬ãã¥ãŒããããšã§ãå®è£
ã«åãæããåã«èæ
®æŒãããªããæ€èšããããšãã§ããŸãã ãŸããOpenSpec 㯠tasks.md ã®ãã§ãã¯ãªã¹ãã«é 次ãã§ãã¯ãã€ããªããéçºãé²ããŠããããããéäžãŸã§éçºãé²ããŠããã£ãç¶æ
ã§äžåºŠã»ãã·ã§ã³ãäžæããåŸããæ°ããã»ãã·ã§ã³ãäœãçŽããŠéçºãåéããŠããããããªé²ãæ¹ãªã©ããããããã£ãã§ãã ãã ããåŸè¿°ãã課é¡ã«ãããå°ãªããšã MiiTel Phone ããŒã ã®éçºã«ãããŠã¯ããããã OpenSpec ãªã©ã®ããŒã«ã䜿ã£ãŠãããŸãæåŸ
ãã广ã¯åŸãããªãããããšããã®ãççŽãªçµè«ã§ããã OpenSpec ããããããªããšæããçç±ã«ã€ã㊠ãªãããŸãã¡ãããããªãã®ãèãããšããã4 ã€ã»ã©èŠå ãããã®ã§ã¯ãªãããšæããŸããã ããã³ããšã³ãéçºãšã®çžæ§ããããŸã§ãããããªã æéã«èŠåãã»ã©ã®å¹æã宿ã§ããªãã£ã ä»ã®ææ³ã«ãã£ãŠä»£æ¿å¯èœã§ããããš ä»çµã¿ãšããŠã¯ãã貧匱ã§ããããš 1. ããã³ããšã³ãéçºãšã®çžæ§ããããŸã§ãããããªã ããã³ããšã³ãéçºã«ãããé¢å¿ããšã®å€§åã¯ãã¬ãŒã³ããŒã·ã§ã³ã¬ã€ã€ãŒã«åããã¡ã§ãããã¡ã€ã³ã¬ã€ã€ãŒã®é¢å¿ããšãªã©ãšæ¯èŒããŠãèªç¶èšèªã«ãã£ãŠãäœãæ£ããããã圢åŒçã«å®çŸ©ã»èšè¿°ããããšãé£ããã±ãŒã¹ãå€ããšæããŸããã ãŸãããã¬ãŒã³ããŒã·ã§ã³ã¬ã€ã€ãŒã¯ãã¡ã€ã³ã¬ã€ã€ãŒã«ãããå¶çŽãæ¯ãèããªã©ãšæ¯ã¹ãŠå€åãããããé »ç¹ã« Spec ã®èŠçŽããå¿
èŠãšãªã£ãŠããŸãã±ãŒã¹ãå€ãã§ããçµæãšããŠæéãããããšæããŠããŸãã±ãŒã¹ããããŸããã éã«ãã¡ã€ã³ã«é¢ããé¢å¿ããšã®æ¯çãé«ãããã¯ãšã³ãéçºã«ãããŠã®æ¹ã仿§é§åéçºãšã®çžæ§ã¯è¯ãã®ã§ã¯ãªãããšæããŸããã 2. æéã«èŠåãã»ã©ã®å¹æã宿ã§ããªãã£ã â» ãããã MiiTel Phone ããŒã ã«ãããŠã¯ãOpenSpec ã®å°å
¥ä»¥åãããèŠä»¶å®çŸ©ã®æ®µéã§èŠæ±ãå¶çŽãªã©ãããããã Notion ããã¥ã¡ã³ãã«ãŸãšããŠããéçºã«åãæããã±ãŒã¹ãå€ãã£ãã§ãã OpenSpec ã«ããã openspec/specs/<spec>/spec.md ã¯ããããããã©ãŒããããèŠå®ãããŠãããããäžè²«ãããã©ãŒããããç¶æã§ãããªã©ã®ã¡ãªããããããŸãããããã䜿ãæ
£ããŠãã Notion ããã¥ã¡ã³ããšæ¯èŒãããšã©ãããŠã衚çŸåã«å¶éããããšæããã±ãŒã¹ãå€ã
ãããŸããããŸããå
šäœçã«ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«çæããŠããã£ãæç« ã¯ããåé·ã«ãªããã¡ã§ã人ã仿§ãèŠæ±ãçè§£ããããã®ããã¥ã¡ã³ããšããŠã¯ããŸã广ã宿ãã¥ããã£ããšããäºæ
ããããŸãã OpenSpec ãããã¥ã¡ã³ããçæããŠãããããšã«ããäºåã«ã¬ãã¥ãŒãã§ãããªã©ã®ã¡ãªããã¯ãããã®ã®ãéã«æŽãªãã¬ãã¥ãŒãç·šéã®å¿
èŠæ§ãçºçããããšã«ãããåŽã£ãŠæéãããã£ãŠããŸãã±ãŒã¹ããããšãæããŸããã â» ãã ãããã®èª²é¡ã¯ OpenSpec ã®åé¡ãšããããã¯ãMiiTel Phone ããŒã ã«ãããéçºããã»ã¹ãšã®çžæ§ã®åé¡ã§ãããšæããŸãã 3. ä»ã®ææ³ã§ä»£æ¿å¯èœã§ããããš OpenSpec ãããŒã¹ã«ä»æ§é§åéçºãé²ããããšã§ã以äžã®ãããªã¡ãªãããåŸãããŸãã éå»ã®èšèšãå®è£
ã«ãããæææ±ºå®ã®å±¥æŽããªããžããªã«èšé²ãšããŠæ®ãããšãã§ããã éçºã«åãæããåã« OpenSpec ãçæãã design.md ãããŒã å
ã§ã¬ãã¥ãŒããããšã§ãèæ
®æŒããæ¢ãããšãã§ããã ãã ããéå»ã®æææ±ºå®ã®å±¥æŽããªããžããªãžèšé²ããããšã¯ãGit ã®ã³ãããã¡ãã»ãŒãžããã¡ããšèšè¿°ããããšã«ãã£ãŠä»£æ¿å¯èœã§ãããããŠã³ãããã¡ãã»ãŒãžããã¡ããšèšè¿°ããããšã«ããã³ã¹ãã¯ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«ãã£ãŠå€§å¹
ã«ç·©åãããŠããŸãã ãŸããéå»ã®æææ±ºå®ã®èšé²ã¯ããªããžããªå
ã«æ®ãããšããADR ã Notion ããŒã¿ããŒã¹ãªã©ã§ç®¡çããŠãããNotion MCP ãªã©ã«ãã£ãŠæ€çŽ¢ã§ããããã«æŽåããŠããããšã«ãã£ãŠä»£æ¿å¯èœã§ãã ãããŠãéå»ã®èšèšãå®è£
ã«ãããæææ±ºå®ã®å±¥æŽããªããžããªå
ã«ãã¡ã€ã«ãšããŠèç©ãããŠãã ( openspec/changes/archive ) ããšã«ãããã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããæå³ãã¬ã¿ã€ãã³ã°ã§å€ãããã¥ã¡ã³ããåç
§ããŠããŸããåŽã£ãŠã³ãŒãçæã®ç²ŸåºŠãäœäžããŠããŸããšãããã¡ãªãããçºçããæžå¿µãããããšã«æ°ã¥ããŸããã 4. ä»çµã¿ãšããŠã¯ãã貧匱ã§ããããš ããã¥ã¡ã³ãã¯ãšãŠãéèŠãªãã®ã§ãããã®ã®ã仿§é§åéçºã«ããã Spec ã¯ãããŸã§éçãªããã¥ã¡ã³ãã§ãããããŸããã ãã®ãããAI ãšãŒãžã§ã³ããçæããã³ãŒããæ£ãã仿§ã«åã£ãŠããç¶æ³ãç¶æãç¶ããããã«ã¯ãçµå±ãä¿¡é Œæ§ã®é«ããã¹ãã³ãŒããã³ãŒãã¬ãã¥ãŒãªã©ãå¿
èŠã§ãã ã³ã¹ããæããŠæè³ãããŠããã®ã§ããã°ããã¹ãã³ãŒãã®ä¿¡é Œæœã®æ¹åãæ¡å
ãªã©ã«ããåãå
¥ãããã¹ãã³ãŒãã仿§ãšããŠæ±ã£ãŠããæ¹éã§é²ããæ¹ã广ãé«ãã®ã§ã¯ãªããããšããçµè«ã«è³ããŸããã tech.revcomm.co.jp ãã ããéå»ã®æææ±ºå®ã®èšé²ãæ®ãããã« ADR ãèšè¿°ããããšã¯äŸç¶ãšããŠäŸ¡å€ããããšã¯æããŠããããã®ãããªãã©ã¯ãã£ã¹ã¯ä»åŸãå®è·µãç¶ããæ³å®ã§ãã ä»åŸã«ã€ã㊠æçµçã« OpenSpec ã¯ããŸãã¡ããŒã ã«ãããéçºã®é²ãæ¹ãšããããããã¡ãªãããæŽ»ããåãããšãããŸãã§ããªãã£ãããšãããã廿¢ãããããšã«æ±ºå®ããŸãããéã« OpenSpec ãæ³å®ããããæ¹ã«ããŒã ã®éçºããã»ã¹ãåããããšããæ¹æ³ãããããã§ããããããŸã§ããŠå°å
¥ããã¡ãªãããèãããšã®å€æã«è³ããŸããã Notion ã§ ADR ãèŠæ±ãªã©ããŸãšããããã¥ã¡ã³ããçšæããå¿
èŠã«å¿ã㊠Notion MCP ãæŽ»çšããŠå¿
èŠãªããã¥ã¡ã³ããåç
§ã§ããããã«ããã°ååã§ã¯ãªãããšããã®ãçµè«ã§ãã OpenSpec ã詊ããŠããäžã§è¯ãã£ããšæããããšãšããŠã¯ããŸããèŠä»¶ãèŠæ±ãªã©ããŸãšããããã¥ã¡ã³ããçšæããããã«åºã¥ããŠéçºãé²ããããã»ã¹ãã®ãã®ã¯ãããŸã§æªãã¯ãªããšæããŸãããæè¡çãªè©³çްã¯ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«å§ãã€ã€ã人ã¯ãããã€ã¬ãã«ãªãã€ã³ãã«å¯ŸããŠæ³šåãããããªããŸãã ä»åŸã¯ ADR ã®ããç©æ¥µçãªæŽ»çšããNotion ãšã®é£æºåŒ·åããã¹ãã³ãŒãã®æ¡å
ãä¿¡é Œæ§ã®æ¹åãªã©ãé²ããŠããããšã§ããã广çã«ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããæŽ»çšããŠãããããšèããŠããŸãã











