📦

kubernetes-models-tsを使ってKubernetes CRDの型定義を生成し、GitHub Packagesで共有する方法

2024/09/25に公開

はじめに

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サンプルです:

third-party/hoge/piyo.yaml
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