kubernetes-models-tsを使ってKubernetes CRDの型定義を生成し、GitHub Packagesで共有する方法
はじめに
Kubernetesの世界では、カスタムリソース定義(CRD)を使用して、独自のリソースタイプを定義することができます。これらのCRDを TypeScript で扱う際に便利なツールとして、kubernetes-models-tsがあります。本記事では、kubernetes-models-ts
を使用してKubernetesリソースの型定義を生成し、それをGitHub Packagesに公開する方法について説明します。
前提条件
- Node.jsとpnpmがインストールされていること
- GitHubアカウントを持っていること
- GitHub Personal Access Token (PAT) を取得していること
手順
1. kubernetes-models-tsリポジトリのクローン
まず、kubernetes-models-ts
リポジトリをクローンします。
git clone https://github.com/tommy351/kubernetes-models-ts.git
cd kubernetes-models-ts
2. 新しいパッケージディレクトリの作成
既存のサードパーティパッケージをテンプレートとして使用し、新しいパッケージディレクトリを作成します。
cp -R third-party/argo-cd third-party/hoge
rm -rf third-party/hoge/__tests__/*
3. CRDファイルの配置
型を生成したいCRDファイルを新しいパッケージディレクトリにコピーします。以下は最小限のCRDサンプルです:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: piyos.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
message:
type: string
scope: Namespaced
names:
plural: piyos
singular: piyo
kind: Piyo
4. package.jsonの修正
third-party/hoge/package.json
ファイルを開き、以下の箇所を修正します:
{
"name": "@OWNER_NAME/hoge",
"publishConfig": {
"registry": "https://npm.pkg.github.com"
},
"crd-generate": {
"input": [
"./piyo.yaml"
]
}
}
@OWNER_NAME
は自分のGitHubユーザー名またはOrganization名に置き換えてください。
5. .npmrcファイルの作成
GitHub Packagesに公開するための認証情報を設定します。third-party/hoge/.npmrc
ファイルを作成し、以下の内容を記述します:
@OWNER_NAME:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
6. ビルドの実行
プロジェクトのルートディレクトリに戻り、ビルドを実行します。
pnpm run build
7. パッケージの公開前の準備
パッケージを公開する前に、変更をコミットする必要があります
git add .
git commit -m "Add hoge model"
8. パッケージの公開
作成したパッケージディレクトリに移動し、GitHub Packagesにパッケージを公開します。
cd third-party/hoge
export GITHUB_TOKEN=xxxx # GitHub Personal Access Token(classic)を設定
pnpm publish
9. パッケージの使用
公開したパッケージを使用するには、以下のようにインストールします:
npm install @OWNER_NAME/hoge
そして、以下のようにTypeScriptコードで使用できます:
import { Piyo } from '@appthrust/hoge/example.com/v1';
const piyo = new Piyo({
metadata: {
name: 'piyo',
},
spec: {
message: 'hello'
}
});
console.log(piyo);
まとめ
以上の手順で、kubernetes-models-ts
を使用してKubernetesリソースの型定義を生成し、GitHub Packagesに公開することができます。これにより、チーム内で簡単に共有し、TypeScriptプロジェクトで使用することが可能になります。
カスタムリソースの型定義を共有することで、開発効率の向上やタイプセーフなコーディングが実現できます。ぜひ、自身のプロジェクトに活用してみてください。
Discussion