Cloud Code for IntelliJ での開発を高速化する

Cloud Code for IntelliJ でのローカル開発を高速化するには、ファイル同期とホットリロード、保存時の自動デプロイを利用します。そして、Skaffold モジュールを使用して、アプリケーションの一部を個別に開発します。

Skaffold ファイルの同期とホットリロードを有効にする

ローカルの開発用ワークフローの効率を高め、Pod の再ビルド、再デプロイ、再起動を行わずに済むように、Skaffold は変更されたファイルをデプロイ済みコンテナにコピーできます。つまり、静的ファイルとソースコード ファイルに変更を加えた場合、その変更は数秒で反映されるため、フィードバック ループが高速化されます。

静的ファイル(HTML ファイルや CSS ファイルなど)の場合、このファイルをコピーする動作はファイルの同期と呼ばれます。

ソースコード ファイルの場合、この動作はホットリロードと呼ばれ、次のファイル形式をサポートしています。

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js、*.mjs、*.coffee、*.litcoffee、*.json

ホットリロードを構成すると、Skaffold はサポートされているファイルの変更を検出し、これらの変更をクラスタで実行中のコンテナに同期します。ホットリロードをサポートしていないファイル形式が変更されると、イメージの再ビルドがトリガーされ、Pod が再起動します。

Buildpacks を優先ビルダーとして使用している場合、ファイルの自動同期とホット リロードはデフォルトで有効になっています。Docker などの他のビルダーでは、カスタマイズするアーティファクトの skaffold.yaml ファイルで sync セクションを指定できます。

次の同期設定のいずれかを行うことができます(優先順位順)。

  • auto: Skaffold が同期を自動的に構成します。(Jib および Buildpacks のアーティファクトのみ)これは Buildpack のデフォルトです。
  • infer: 変更された各ファイルの宛先は、ビルダーから推測されます。
  • manual: ローカル ワークスペース内のファイルと、実行中のコンテナ内での各ファイルの宛先を指定する必要があります。

skaffold.yaml ファイル内の次のサンプル sync セクションでは、manual 同期を指定して、すべての /static-html HTML ファイルをコンテナ内の static フォルダに同期しています。

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

ファイルの同期と同期ルールの指定の詳細については、ファイル同期に関する Skaffold のガイドをご覧ください。

Kubernetes で開発する際の新機能を追加する

ファイルの同期とホットリロードを設定したら、イテレーション サイクルを開始し、プロジェクトに機能を追加します。変更は Kubernetes Deployment にデプロイされます。Deployment の停止と削除、手動でのイメージのビルドとタグ付け、クラスタの更新は行われません。

標準的な反復サイクルは次のようになります。

  1. プロジェクトに変更を加えます。たとえば、Cloud Code Java Guestbook アプリを使用する場合は、次のように新しいエンドポイントを FrontendController クラスに追加します。

    1. src/main/java/cloudcode/guestbook/frontend から FrontendController.java ファイルを開き、次のものを追加します。

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. 新しいアノテーションである RequestMappingResponseBody に必要なインポートを追加します。

  2. 変更を保存するか(Ctrl または Cmd+S)、プロジェクトをビルドします。

    コンソール ウィンドウでは、進行状況とデプロイのログを確認できます。 変更がデプロイされたら、更新を確認します。

  3. 継続的な開発セッションを終了するには、[停止] アイコンをクリックします。

    Cloud Code によって、開発セッションに使用されたすべての Kubernetes リソースが削除されます。

Skaffold 構成を使用してマイクロサービス アプリケーションを開発する

マイクロサービス アプリケーションを開発する場合は、デバッグとデプロイを簡素化するために別々のセクションに個別に取り組むと便利です。

アプリケーションを Skaffold モジュールに分割することで、アプリケーションの一部を個別に開発、デバッグできます。たとえば、Bank of Anthos のサンプルは 10 個のマイクロサービスを含むアプリケーションです。サンプルの skaffold.yaml ファイルでは、これらのサービスを setupdbfrontendbackendloadgenerator という名前の 5 つの skaffold モジュールにグループ化します。

Skaffold モジュールと構成の依存関係を定義する

Skaffold モジュールと構成の依存関係を定義するには、次の手順を行います。

  1. モジュールを定義するプロジェクトを開きます。

  2. skaffold.yaml ファイルを開きます。

  3. skaffold.yaml ファイルに複数の構成がある場合に、構成を Skaffold モジュールにするには、次の行を指定します。

    metadata:
      name: MODULE_NAME_1
    

    たとえば、Bank of Anthos skaffold.yamldb モジュールでは、データベースのデプロイを次のように定義します。

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. 現在の構成をデプロイする前に別の構成がデプロイされることに依存する構成の場合は、その構成を依存関係に追加する必要があります。構成の依存関係を指定するには、skaffold.yaml ファイルの requires セクションに configs リストを追加します。

    たとえば、Bank of Anthos の skaffold.yaml ファイルには、構成の依存関係 setup が含まれています。

    依存関係を定義するには、次のものを skaffold.yaml ファイルに追加します。ここで、DEPENDENCY_NAME は依存関係の名前です。

    requires:
        - configs: DEPENDENCY_NAME
    

    この方法でリストされた構成は、同じファイルまたは現在のプロジェクト内の他の skaffold.yaml ファイルで定義された依存関係を参照できます。

  5. 構成の依存関係をテストするには、特定の Skaffold モジュールとその依存関係を構築するの手順に沿って、各 Skaffold モジュールを個別にビルドして、依存関係とともにデプロイされることを確認します。

特定の Skaffold モジュールとその依存関係を構築する

モジュールとその依存関係を定義したら、[Run] > [構成を編集]を選択するときに、[Build / Deploy] タブで実行するモジュールを指定できます。

  1. 最新の Insiders ビルドをインストールします。

  2. [Run] > [Edit configurations] に移動し、[Build/Deploy] タブを開きます。

  3. [Skaffold 構成] で skaffold.yaml を選択します。

    次のいずれかを選択します。

    • すべてのモジュールと依存関係を使用してビルドとデプロイする
    • ビルドおよびデプロイ(モジュールが使用可能な場合)を行い、ビルドとデプロイするモジュールを選択します。

選択は、以降のデプロイで保持されます。 モジュールのサブセットを選択すると、Cloud Code は、システム全体ではなく、モジュールのサブセットをデプロイすることに関する警告を表示します。

Kubernetes での継続的な開発

必要なオプションで実行ターゲットを構成したら、アプリケーションの通常実行を選択するか、IDE で開発の反復サイクルを開始してソースに加えられた変更を反映し、ライブ アプリケーションの依存関係を定義できます。

Develop on Kubernetes の実行ターゲットは、Kubernetes クラスタ上で開発サイクルを開始します。開発サイクルが開始されると、Skaffold を使用して Cloud Code でプロジェクト用のイメージを作成し、タグ付けして構成済みのリポジトリに push し、kubectl を使用してプロジェクトの Kubernetes マニフェストをデプロイします。

  1. [Develop on Kubernetes] アイコンをクリックし、[構成の編集] をクリックして [実行 / デバッグ構成] ダイアログを開きます。
  2. 利用可能な構成オプションを使用してデプロイをカスタマイズします。
  3. 変更を保存した後に Cloud Code でアプリケーションを自動的に再デプロイする場合は、[Watch mode - rebuild and redeploy] で [On file save] を選択します。新しい Kubernetes アプリケーションでは、デフォルトで [On demand] が選択されています。ウォッチモードの詳細については、ウォッチモードをご覧ください。
  4. アプリケーションが Skaffold モジュールを使用するように構成されている場合は、特定のモジュールのみをビルドまたはデプロイするように選択できます。
  5. 構成に問題がなければ、[OK] をクリックして、[実行] アイコンをクリックします。

次のステップ

サポートを受ける

IntelliJ IDE でフィードバックを送信するか、問題を報告するには、[Tools] > [Cloud Code] > [Help / About] > [Submit feedback or report an issue] を選択します。ここから、GitHub で問題を報告したり、Stack Overflow で質問したりできます。