0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Skaffoldとは

Last updated at Posted at 2025-11-24

はじめに

DevOpsエンジニアとして走り出して1カ月。右も左も分からないところから学んだことを、自分なりにまとめています。これからクラウドやDevOpsを学びたい方に、「あ、ここ分かる!」と思ってもらえたら嬉しいです。

ひとことで「Skaffoldとは」

Google社が開発した、Kubernetesアプリケーションのビルドからデプロイまでの開発サイクルを自動化するツール

※ Kubernetesだけでなく、DockerやGoogle Cloud Runにも対応しています。
※ Kubetenetesのことを知らない方は以下の記事を参考にしてください。

“Skaffold” の語源は scaffold(足場)。
開発者が Kubernetes や Cloud Run へ “安全に・繰り返し・安定して” デプロイできるよう、開発の足場を作るツール というコンセプトから名付けられています。

Skaffoldがあると何が便利になるの?

その1. コマンド入力回数を減らしてくれる

Skaffoldがないと、アプリケーションを更新する度に以下のようなコマンドを打つ必要があります。イメージ名の指定など、毎度入力する必要があります。

docker build -t my-app:latest .
docker push my-app:latest
kubectl apply -f k8s/

Skaffoldがあると、以下のコマンドを最初に1回度だけで、イメージに修正があるとビルド、プッシュ、デプロイが完了します。

skaffold dev

その2 ステージごとに簡単に切り替えができる

開発、テスト、本番、とそれぞれ異なる設定を定義できる上、コマンドも以下のように単純明快で分かりやすいものとなっています。

skaffold run -p prod # 本番環境用
skaffold dev -p dev # 開発環境用

Skaffoldの書き方

最もシンプルな構造

以下のSkaffoldではCloud Runへのビルド・デプロイを非常にシンプルな構成で記載しています。

  • apiVersion
    これはyamlファイルでお決まりのおまじないです。ここに利用するサービスとバージョンを記載します。
  • buildセクション
    imageはビルド後のイメージパス、contextはDocker Buildを実施する場所、dockerfileには利用するDockerfileの名前を記載します。
  • deployセクション
    ここではCloud Runへのデプロイを実施するので、cloud runを指定した内容を記載しています。cloud runのデプロイ内容(region、メモリ、CPUなど)も記載できます。
apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: my-app
build:
  artifacts:
    - image: gcr.io/PROJECT_ID/app
      context: .
      docker:
        dockerfile: Dockerfile
deploy:
  cloudrun:
    region: asia-northeast1

profilesで環境ごとに分ける

環境ごとに設定はprofilesで定義できます。例えば以下では、開発環境と本番環境でプロジェクトとリージョンに差異がある場合を想定しています。

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: my-app
profiles:
  - name: dev
    build:
      googleCloudBuild:
        projectId: dev-project
    deploy:
      cloudrun:
        region: asia-northeast1

  - name: prod
    build:
      googleCloudBuild:
        projectId: prod-project
    deploy:
      cloudrun:
        region: uscentral

実際にデプロイしてみた

今回は以下のGitにあるファイルを使って、デプロイ作業をしていきます。
非常に簡易なPythonファイルと、それをDockerコンテナアプリケーションとして定義するためのDockerfile、そしてskaffold.yamlファイル、skaffold.yamlファイルが読みに行くservice-[環境名].yamlから構成されています。

コードを修正しながらアプリケーションの挙動を見たい場合

skaffoldには、コード修正したものを即座にアプリケーションに反映できる「ホットリロード」機能があり、それがskaffold devコマンドによって実現できます。

skaffold dev -p dev

実行後のCLIの様子はこのようになっています。
image.png

コンソール画面を開くと、確かにデプロイされていることが分かります。
image.png

次に、アプリケーションを修正してみます。
修正後Ctrl+Sで保存すると、skaffoldはそれを検知し、自動でビルドとデプロイをやり直してくれます。
image.png

画像だと分かりにくいですが、コンソール画面上でもアプリケーションが更新されたことが分かります。
image.png

最後に、ループを終わらせるため、Ctrl+Cを入力します。

^CCleaning up...

すると、コンソール画面からもアプリケーションがクリーニングされたことが分かります。
image.png

本番(開発・検証)環境に一発でデプロイしたい場合

多くの場合はこのパターンになると思います。
まずは開発環境向けにデプロイします。

skaffold run -p dev

そうすると、デプロイが即座に開始し、CLI上でもデプロイが完了する様子を見ることができます。
image.png

コンソール画面でも、開発環境向けのアプリケーションがデプロイされたことが分かります。
image.png

次に本番環境にデプロイします。

skaffold run -p prod

先ほどと同様にビルドとデプロイが行われます。
image.png

コンソール画面でも、本番環境向けのアプリケーションがデプロイされたことが分かります。
image.png

まとめ

skaffoldによってビルドとデプロイ作業が非常に簡単になることが分かりました。yamlファイルですべて定義できるので、管理やデプロイ時のチェックが簡単になるな、と個人的に思いました。CI/CDパイプラインを構築するためのサービス、Cloud Deployでも利用されており、ファイルの記述方法はもっと研究してみたいです。

参考

  • Skaffold公式サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?