この記事は kintone の生成 AI チームで連載中の kintone AIリレーブログ 2026 の 4 本目の記事です。 リレーブログでは、生成 AI チームのメンバーが AI トピックに限らずさまざまなことについて発信していきます。
こんにちは!
kintone 生成 AI チームの 386jp です。
突然ですが、みなさんは Kubernetes のマニフェストをどのように生成・管理していますでしょうか?
ArgoCD で GitOps を実践されている方であれば、Kustomize や Helm、Jsonnet などのツールで管理されているかと思います。サイボウズでも、これらのツールを活用してマニフェストを生成していることが多いです。
これらのツールは非常に強力ですが、それぞれ独自の記法が採用されており、構文でつまづくことがあるという共通の課題があります。Helm は Go テンプレートの知識が必要で、Jsonnet も独自の記法を覚える必要があり、Kustomize も overlay の仕組みでつまづくケースがあります。そこで、 kintone 生成 AI チームでは、 cdk8s を導入することで、これらの課題を解決しました。
本記事では、 kintone 生成 AI チームが cdk8s を導入した背景と、実際に使ってみて感じたメリットを紹介します。 Kubernetes マニフェストを管理する上で、 TypeScript で管理するという選択肢もあります。これから cdk8s を使ってみたい方の参考になれば幸いです。
目次:
kintone 生成 AI チームでの課題
さて、私たちのチームは、 AI という変化の激しい領域に対応するため、チーム独自で AWS 基盤を構築し、 kintone の AI 機能を提供しています。
「kintone AI でも Kubernetes はじめました」という記事で紹介した通り、 EKS を用いた Kubernetes 基盤を最近構築しました。
この基盤の立ち上げにあたり、マニフェストの生成・管理方法をどうするか、という課題に直面しました。候補となったツールを検討した際、いくつかの課題が見えてきました。
Kustomize は社内での利用実績はあるものの、私たちが求めるような柔軟性に欠けること、 Jsonnet も社内実績はありましたが、新たに学習するコストが高いことがネックとなりました。
一方、私たちのチームでは既に AWS の構成管理に CDK (Cloud Development Kit) を利用しており、TypeScript でインフラを記述することに慣れていました。そこで、TypeScript さえ知っていれば、新たな構文を覚えることなく Kubernetes マニフェストを操作できる cdk8s に着目しました。また、共通のスタックを定義して再利用できることで、開発効率を大幅に向上できると考え、 cdk8s を採用することにしました。
cdk8s とは
cdk8s は、 AWS CDK のように、 TypeScript や Python などの一般的なプログラミング言語で Kubernetes マニフェストを定義できるツールです。これにより、専用の構文を学習することなく、既存のプログラミング知識を活かしつつ、柔軟にマニフェストを生成できます。
元々は、 AWS によって開発されており、現在は Cloud Native Computing Foundation (CNCF) の Sandbox Project となっています。
cdk8s を選んで良かったこと
実際に cdk8s を使ってみて、いくつかの大きなメリットを実感しています。
TypeScript の恩恵を受けられる
最大のメリットは、やはり TypeScript でインフラを記述できることです。
例えば、 Deployment を定義する場合、以下のように TypeScript で書けます:
new Deployment(this, "my-app", { replicas: 3, containers: [ { image: "nginx:latest", port: 80, }, ], });
YAML で書くと何十行にもなる Deployment の定義が、 TypeScript ならこれだけで済みます。そして、エディタの補完機能がフルに使えるため、どんなプロパティが設定できるか、すぐにわかります。
- 型安全性: エディタ上でリアルタイムに型チェックが行われ、設定ミスを事前に防げます
- 自動補完: IDE の補完機能がフルに使え、どんなプロパティが設定できるかすぐにわかります
- リファクタリング: 変数名の一括変更や、関数の抽出など、プログラミング言語ならではのリファクタリングが可能です
再利用可能なコンポーネント化
Construct として共通パターンをまとめることで、マニフェストの記述がシンプルになり、開発速度が大幅に向上しました。
例えば、 Network Policy の設定は従来なら Egress と Ingress の 2 つのマニフェストを書く必要がありましたが、カスタム Construct を作ることで、数行のコードで設定できるようになりました。
今後は、 LangChain や Mastra などの AI フレームワークごとに共通のマニフェストパターンを Construct として定義し、新しい AI Agent のデプロイも簡単に行えるようにする予定です。
柔軟な設定管理
YAML ファイルでの設定管理と TypeScript コードを組み合わせることで、環境ごとの差異を柔軟に管理できます。共通の設定は common.yaml で一元管理し、環境固有の設定だけを各環境の YAML で上書きする、という運用方法を採用しています。
例えば、以下のような設定を考えてみましょう:
config/apps/some-app/common.yaml
somePodConfig: replicas: 1 resources: requests: cpu: 100m memory: 256Mi limits: cpu: 500m memory: 512Mi
config/apps/some-app/prod.yaml
somePodConfig: replicas: 3
この場合、 dev 環境や staging 環境では common.yaml の設定がそのまま使われ、 replicas は 1 となります。一方、 prod 環境では common.yaml の設定に prod.yaml の設定がマージされ、 replicas だけが 3 に上書きされます。リソース要求などの他の設定は common.yaml の値がそのまま使われるため、設定の重複を避けつつ、環境ごとの差分を明確に管理できます。
cdk8s の基本的な使い方
cdk8s では、いくつかの重要な概念を理解することで、すぐに使い始めることができます。
基本概念
- Construct: Kubernetes リソースを表すビルディングブロック。 Deployment や Service などの K8s リソースを TypeScript のクラスとして扱います
- Chart: 関連する複数の Construct をグループ化したもの。アプリケーション単位でまとめることが多いです
- App: Chart のコンテナ。複数の Chart をまとめて、最終的に YAML マニフェストを生成します
簡単なコード例
例えば、簡単な Deployment を作成する場合、以下のように書けます:
import { App, Chart } from "cdk8s"; import { Deployment, Container } from "cdk8s-plus-33"; export class MyAppChart extends Chart { constructor(scope: App, id: string) { super(scope, id); new Deployment(this, "my-app", { replicas: 3, containers: [ new Container({ image: "nginx:latest", port: 80, }), ], }); } } const app = new App(); new MyAppChart(app, "my-app"); app.synth();
このコードを実行すると、 Deployment の YAML マニフェストが自動生成されます。ここで使用している cdk8s-plus は Kubernetes リソースを高レベルで抽象化したライブラリで、生の YAML や低レベル API を直接扱うよりも簡潔にマニフェストを記述できます。
まとめ
本記事では、 kintone 生成 AI チームが cdk8s を導入した背景と、実際に使ってみて感じたメリットを紹介しました。
TypeScript で Kubernetes マニフェストを管理することで、型安全性、再利用性、柔軟な設定管理といった恩恵を受けられています。既に TypeScript を使っているチームであれば、学習コストも低く、すぐに導入できるのも大きな魅力です。
次回以降の記事では、より実践的な内容をお届けします:
- core/apps によるコンポーネント管理の工夫
- 複数環境に対応した設定ファイルの管理方法
- CRD を型安全に扱う方法
- 再利用可能な Construct の実装例
- マニフェストのデプロイと差分管理の工夫
AI 機能をより素早く皆様のもとにお届けするため、新たなツールも活用しながら、 AI 機能の開発・運用をスケールさせていく試みを続けています!
We are hiring !!
kintone の AI 機能を支える基盤を、一緒に作りませんか?
この記事で紹介した cdk8s のように、私たちのチームでは新しいツールも積極的に取り入れながら、最適な技術スタックを模索しています。 技術選定から設計、実装まで、チームで議論しながら進めています。そして構築した基盤を通じて、 kintone の AI 機能でユーザーに最高の価値を届けることに挑戦し続けています。
こんなことに挑戦できます:
- TypeScript (CDK / cdk8s) によるクラウドインフラ・Kubernetes 基盤の構築
- AI ワークロードに最適化された EKS 環境の設計・運用
- 急速に進化する AI 技術に対応した柔軟なアーキテクチャの設計
新しい技術にワクワクする方、チームで議論しながら最適な解を見つけることが好きな方、自分たちの基盤が開発者やユーザーの価値につながることにやりがいを感じる方―そんなあなたのご応募をお待ちしています!