jpskill.com
🛠️ 開発・MCP コミュニティ

infrastructure

Terraform、Docker、Kubernetesといった技術を活用し、Gutsノードを効率的に構築・展開するための、Infrastructure as Code(IaC)のパターンを適用するSkill。

📜 元の英語説明(参考)

Infrastructure as Code patterns for deploying Guts nodes using Terraform, Docker, and Kubernetes

🇯🇵 日本人クリエイター向け解説

一言でいうと

Terraform、Docker、Kubernetesといった技術を活用し、Gutsノードを効率的に構築・展開するための、Infrastructure as Code(IaC)のパターンを適用するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o infrastructure.zip https://jpskill.com/download/16921.zip && unzip -o infrastructure.zip && rm infrastructure.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/16921.zip -OutFile "$d\infrastructure.zip"; Expand-Archive "$d\infrastructure.zip" -DestinationPath $d -Force; ri "$d\infrastructure.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して infrastructure.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → infrastructure フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Guts 用インフラストラクチャ Skill

複数のノードタイプを持つ分散型アプリケーションのインフラストラクチャを管理しています。

デプロイメントターゲット

  1. ローカル開発: Docker Compose
  2. テスト: Kubernetes (k3s/kind)
  3. 本番環境: クラウド非依存の Kubernetes + Terraform

Terraform パターン

モジュール構造

infra/
├── terraform/
│   ├── modules/
│   │   ├── network/
│   │   ├── compute/
│   │   └── storage/
│   ├── environments/
│   │   ├── dev/
│   │   ├── staging/
│   │   └── prod/
│   └── main.tf

モジュール例

# modules/guts-node/main.tf
variable "node_count" {
  type        = number
  description = "デプロイする Guts ノードの数"
  default     = 3
}

variable "instance_type" {
  type        = string
  description = "ノードのインスタンスタイプ"
  default     = "t3.medium"
}

resource "aws_instance" "guts_node" {
  count         = var.node_count
  ami           = data.aws_ami.ubuntu.id
  instance_type = var.instance_type

  tags = {
    Name        = "guts-node-${count.index}"
    Environment = var.environment
    Project     = "guts"
  }
}

Docker のベストプラクティス

マルチステージビルド

# Build stage
FROM rust:1.75-slim as builder
WORKDIR /app
COPY . .
RUN cargo build --release --bin guts-node

# Runtime stage
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/lists/*
COPY --from=builder /app/target/release/guts-node /usr/local/bin/
EXPOSE 8080 9000
ENTRYPOINT ["guts-node"]

開発用 Docker Compose

version: '3.8'

services:
  node1:
    build: .
    ports:
      - "8081:8080"
    environment:
      - GUTS_NODE_ID=node1
      - GUTS_PEERS=node2:9000,node3:9000
    volumes:
      - node1-data:/data

  node2:
    build: .
    ports:
      - "8082:8080"
    environment:
      - GUTS_NODE_ID=node2
      - GUTS_PEERS=node1:9000,node3:9000
    volumes:
      - node2-data:/data

  node3:
    build: .
    ports:
      - "8083:8080"
    environment:
      - GUTS_NODE_ID=node3
      - GUTS_PEERS=node1:9000,node2:9000
    volumes:
      - node3-data:/data

volumes:
  node1-data:
  node2-data:
  node3-data:

Kubernetes パターン

ノード用 StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: guts-node
spec:
  serviceName: guts-nodes
  replicas: 3
  selector:
    matchLabels:
      app: guts-node
  template:
    metadata:
      labels:
        app: guts-node
    spec:
      containers:
      - name: guts-node
        image: guts/node:latest
        ports:
        - containerPort: 8080
          name: api
        - containerPort: 9000
          name: p2p
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 100Gi

監視スタック

  • メトリクス: カスタム Rust メトリクスを使用した Prometheus
  • ログ: Loki + Grafana
  • トレース: OpenTelemetry を使用した Jaeger

セキュリティチェックリスト

  • [ ] cert-manager 経由の TLS 証明書
  • [ ] Pod 分離のためのネットワークポリシー
  • [ ] external-secrets によるシークレット管理
  • [ ] Trivy による定期的なセキュリティスキャン
  • [ ] Kubernetes アクセス用の RBAC
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Infrastructure Skill for Guts

You are managing infrastructure for a decentralized application with multiple node types.

Deployment Targets

  1. Local Development: Docker Compose
  2. Testing: Kubernetes (k3s/kind)
  3. Production: Cloud-agnostic Kubernetes + Terraform

Terraform Patterns

Module Structure

infra/
├── terraform/
│   ├── modules/
│   │   ├── network/
│   │   ├── compute/
│   │   └── storage/
│   ├── environments/
│   │   ├── dev/
│   │   ├── staging/
│   │   └── prod/
│   └── main.tf

Example Module

# modules/guts-node/main.tf
variable "node_count" {
  type        = number
  description = "Number of Guts nodes to deploy"
  default     = 3
}

variable "instance_type" {
  type        = string
  description = "Instance type for nodes"
  default     = "t3.medium"
}

resource "aws_instance" "guts_node" {
  count         = var.node_count
  ami           = data.aws_ami.ubuntu.id
  instance_type = var.instance_type

  tags = {
    Name        = "guts-node-${count.index}"
    Environment = var.environment
    Project     = "guts"
  }
}

Docker Best Practices

Multi-stage Builds

# Build stage
FROM rust:1.75-slim as builder
WORKDIR /app
COPY . .
RUN cargo build --release --bin guts-node

# Runtime stage
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/guts-node /usr/local/bin/
EXPOSE 8080 9000
ENTRYPOINT ["guts-node"]

Docker Compose for Development

version: '3.8'

services:
  node1:
    build: .
    ports:
      - "8081:8080"
    environment:
      - GUTS_NODE_ID=node1
      - GUTS_PEERS=node2:9000,node3:9000
    volumes:
      - node1-data:/data

  node2:
    build: .
    ports:
      - "8082:8080"
    environment:
      - GUTS_NODE_ID=node2
      - GUTS_PEERS=node1:9000,node3:9000
    volumes:
      - node2-data:/data

  node3:
    build: .
    ports:
      - "8083:8080"
    environment:
      - GUTS_NODE_ID=node3
      - GUTS_PEERS=node1:9000,node2:9000
    volumes:
      - node3-data:/data

volumes:
  node1-data:
  node2-data:
  node3-data:

Kubernetes Patterns

StatefulSet for Nodes

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: guts-node
spec:
  serviceName: guts-nodes
  replicas: 3
  selector:
    matchLabels:
      app: guts-node
  template:
    metadata:
      labels:
        app: guts-node
    spec:
      containers:
      - name: guts-node
        image: guts/node:latest
        ports:
        - containerPort: 8080
          name: api
        - containerPort: 9000
          name: p2p
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 100Gi

Monitoring Stack

  • Metrics: Prometheus with custom Rust metrics
  • Logs: Loki + Grafana
  • Tracing: Jaeger with OpenTelemetry

Security Checklist

  • [ ] TLS certificates via cert-manager
  • [ ] Network policies for pod isolation
  • [ ] Secrets management with external-secrets
  • [ ] Regular security scanning with Trivy
  • [ ] RBAC for Kubernetes access