アプリを作る
クイックスタート
API キーを用意し、TypeScript の SDK で公開 API を呼び、hanectl で定義を入れて、コンソールで確かめるまでの最短の手順です。
このページでは、Hane の上にアプリを作り始めるまでの最短の手順を説明します。API キーを用意して SDK で公開 API を呼び、hanectl で型の定義を入れ、作ったレコードをコンソールで確かめます。
- Node.js 22.13 以上
- 組織とプロジェクト。組織の管理者(owner か admin のロール)が用意します
- Hane の入口の URL。このページでは環境変数
HANE_APIに入れておきます
-
サービスアカウントと API キーを用意する
アプリは、人でない呼出し元であるサービスアカウントとして Hane を呼びます。サービスアカウントはプロジェクトと環境に結び付き、スコープは作るときに決めて後から変えられません。管理者のアクセストークン(
hanectl tokenで表示できます)で、次のように作ります。import { createHaneClient, unwrap } from "@hane/sdk";const admin = createHaneClient({ baseUrl: process.env.HANE_API!, token: () => process.env.ADMIN_TOKEN ?? null });const sa = await unwrap(admin.POST("/v1/platform/service-accounts", {body: {name: "quickstart",project: "fleet",environment: "dev",scopes: ["data:schemas.read", "data:records.read", "data:records.write", "definitions:read", "definitions:apply", "definitions:release"],},}),);const key = await unwrap(admin.POST("/v1/platform/service-accounts/{id}/keys", { params: { path: { id: sa.sa_id } } }));console.log(key.secret); // hane_dev_... この応答でしか読めないAPI キーは、コンソールの「アクセス」→「サービスアカウントと API キー」でも発行と失効ができます。値は
.envなどに置き、Git に入れないでください。 -
SDK を入れる プレビュー
TypeScript の SDK
@hane/sdkを、アプリの依存に加えます。SDK はopenapi-fetchの上の薄いクライアントで、ブラウザと Node.js の両方で動きます。パッケージはまだ公開のレジストリには載せていないので、入手の方法は提供元に確認してください。ほかの言語から呼ぶときは、API リファレンス の OpenAPI を使えます。 -
公開 API を呼ぶ
API キーを
tokenに渡してクライアントを作り、有効なバージョンの型の一覧を読みます。import { createHaneClient, unwrap } from "@hane/sdk";const hane = createHaneClient({baseUrl: process.env.HANE_API!,token: () => process.env.HANE_API_KEY ?? null,});const { types } = await unwrap(hane.GET("/v1/data/types"));console.log(types.map((t) => t.type)); // まだ定義がなければ空 -
hanectl でログインする
hanectl は、定義とプロジェクトを操作する CLI です。API キーでログインすると、その組織・プロジェクト・環境が今の context になります。
ターミナルウィンドウ hanectl login --api-key "$HANE_API_KEY" --org acme --project fleet --env dev --server "$HANE_API" -
定義を書いて apply する
definitions/schemas/vehicle.yamlに型を書き、同じディレクトリのbundle.yamlに、ReleaseBundle に束ねる範囲を書きます。definitions/schemas/vehicle.yaml apiVersion: data/v1alpha1kind: Schemametadata:name: vehiclespec:type: Vehiclekey: registration_nodisplay: registration_nofields:registration_no: { type: string, title: 登録番号 }model: { type: string, title: 車種 }inspection_expiry: { type: string, format: date, title: 車検の満了日 }required: [registration_no]definitions/bundle.yaml apiVersion: release/v1alpha1kind: Bundlemetadata:name: quickstartspec:resources:- schemas/ターミナルウィンドウ hanectl validate -f definitions # 手元で形と参照を確かめるhanectl diff -f definitions # apply で何が変わるかを見るhanectl apply -f definitions # draft として保存する(まだ効かない) -
ReleaseBundle を作って有効にする
draft は、ReleaseBundle にして有効にしたときに効きます。
ターミナルウィンドウ hanectl release create -f definitions/bundle.yaml --activate -
レコードを作ってコンソールで見る
SDK でレコードを 1 件作ります。値は
{ value }の形で渡します。const record = await unwrap(hane.POST("/v1/data/records", {body: {type: "Vehicle",values: {registration_no: { value: "架空 300 あ 10-01" },model: { value: "バン" },inspection_expiry: { value: "2027-03-31" },},},}),);console.log(record.id, record.values.inspection_expiry?.state);コンソールにログインし、「定義とリリース」で有効になった ReleaseBundle を確かめます。データの画面では、作ったレコードと値の状態が見られます。