TECH PLAY

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 ずの連携匷化、テストコヌドの拡充や信頌性の改善などを進めおいくこずで、より効果的にコヌディング゚ヌゞェントを掻甚しおいきたいず考えおいたす。

動画

曞籍