エントリ種別リファレンス
このページでは利用可能なエントリ種別をまとめ、各モジュールとシステムの詳細リファレンスへのリンクを示します。
YAML と Lua のブロックは、単一アプリケーションの全体ではなくリファレンス用の断片です。レジストリ ID、認証情報、データオブジェクト、get_users や delete_user などのヘルパーは説明用です。完全な戻り値とエラーの契約については、リンク先のモジュールページを参照してください。
エントリは
namespace:name形式で相互参照します。レジストリはこれらの参照に基づいて依存関係を自動的に接続し、リソースが正しい順序で初期化されることを保証します。
関連項目
Luaランタイム
| 種別 | 説明 |
|---|---|
function.lua |
Lua関数エントリポイント |
process.lua |
長時間実行Luaプロセス |
workflow.lua |
Temporalワークフロー(決定論的) |
library.lua |
共有Luaライブラリ |
module.lua |
Luaモジュールインターフェース |
function.lua.bc |
プリコンパイル済み関数バイトコード |
library.lua.bc |
プリコンパイル済みライブラリバイトコード |
process.lua.bc |
プリコンパイル済みプロセスバイトコード |
workflow.lua.bc |
プリコンパイル済みワークフローバイトコード |
- name: handler
kind: function.lua
source: file://handler.lua
method: main
modules:
- http
- json
imports:
utils: app.lib:helpers # Import another entry as module
importsを使用して他のLuaエントリを参照します。コード内でrequire("alias_name")を通じて利用可能になります。
HTTPサービス
| 種別 | 説明 |
|---|---|
http.service |
HTTPサーバー(ポートをバインド) |
http.router |
ルートプレフィックスとミドルウェア |
http.endpoint |
HTTPエンドポイント(メソッド + パス) |
http.static |
静的ファイル配信 |
# HTTP server
- name: gateway
kind: http.service
addr: ":8080"
lifecycle:
auto_start: true
# Router with middleware
- name: api
kind: http.router
meta:
server: gateway
prefix: /api
middleware:
- cors
- ratelimit
# Endpoint
- name: users_list
kind: http.endpoint
meta:
router: app:api
method: GET
path: /users
func: list_handler
Lua API: HTTP モジュールを参照
local http = require("http")
local req = http.request()
local resp = http.response()
resp:set_status(200)
resp:write_json({users = get_users()})
データベース
| 種別 | 説明 |
|---|---|
db.sql.sqlite |
SQLiteデータベース |
db.sql.postgres |
PostgreSQLデータベース |
db.sql.mysql |
MySQLデータベース |
db.cdc.postgres |
Postgres変更データキャプチャソース(CDCを参照) |
db.cdc.sqlite |
SQLite変更データキャプチャソース(CDCを参照) |
SQLite
- name: database
kind: db.sql.sqlite
file: "./data/app.db"
lifecycle:
auto_start: true
# In-memory for testing
- name: testdb
kind: db.sql.sqlite
file: ":memory:"
PostgreSQL
- name: database
kind: db.sql.postgres
host: localhost
port: 5432
database: dbname
username: user
password: pass
options:
sslmode: disable
pool:
max_open: 25
max_idle: 5
max_lifetime: "30m"
lifecycle:
auto_start: true
MySQL
- name: database
kind: db.sql.mysql
host: localhost
port: 3306
database: dbname
username: user
password: pass
options:
parseTime: "true"
lifecycle:
auto_start: true
${env:NAME} シークレット参照、TLS オプション、接続プールの調整についてはデータベースを参照してください。データベースエントリの背後にある env ベースの値が変更されると、プールはライブで入れ替わり、使用中の接続は古い設定のまま処理を完了します。
Lua API: SQL モジュールを参照
local sql = require("sql")
local db, err = sql.get("app:database")
local rows, err = db:query("SELECT * FROM users WHERE id = ?", {user_id})
db:execute("INSERT INTO logs (msg) VALUES (?)", {message})
キーバリューストア
| 種別 | 説明 |
|---|---|
store.memory |
インメモリキーバリューストア |
store.sql |
SQLバックエンドキーバリューストア |
store.kv.raft |
クラスタレプリケート、強整合性 KV(共有 Raft) |
store.kv.crdt |
クラスタレプリケート、最終的整合性 KV(ゴシップ/CRDT) |
# Memory store
- name: cache
kind: store.memory
lifecycle:
auto_start: true
# SQL-backed store
- name: persistent_store
kind: store.sql
database: app:database
table_name: kv_store
lifecycle:
auto_start: true
# Cluster-replicated store (requires clustering)
- name: deployments
kind: store.kv.raft
namespace: deploy
store.kv.* 種別ではクラスタリングを有効にする必要があります。整合性のトレードオフについてはストアを参照してください。
Lua API: ストアモジュールを参照
local store = require("store")
local s, err = store.get("app:cache")
s:set("user:123", user_data, 3600) -- TTL in seconds
local data = s:get("user:123")
キュー
| 種別 | 説明 |
|---|---|
queue.driver.memory |
インメモリキュードライバ |
queue.driver.amqp |
AMQP (RabbitMQ) ドライバ |
queue.driver.sqs |
AWS SQS ドライバ |
queue.queue |
キュー宣言 |
queue.consumer |
キューコンシューマ |
# Driver
- name: queue_driver
kind: queue.driver.memory
lifecycle:
auto_start: true
# Queue
- name: jobs
kind: queue.queue
driver: queue_driver
# Consumer
- name: job_consumer
kind: queue.consumer
queue: app:jobs
func: job_handler
concurrency: 4
prefetch: 10
lifecycle:
auto_start: true
Lua API: キューモジュールを参照
local queue = require("queue")
-- Publish a message
queue.publish("app:jobs", {task = "process", id = 123})
-- コンシューマハンドラ内: メッセージ本体がハンドラの引数になります
local function main(data)
-- 現在のメッセージから配信メタデータにアクセスします
local msg = queue.message()
local id = msg:id()
local priority = msg:header("priority")
msg:ack()
end
funcは、メッセージ本体を引数として各メッセージにつき1回呼び出されます。配信のid()、header()/headers()、ack()/nack()にはハンドラ内でqueue.message()を使用します。
プロセス管理
| 種別 | 説明 |
|---|---|
process.host |
プロセス実行ホスト |
process.service |
監督されたプロセス(process.luaをラップ) |
terminal.host |
ターミナル/CLIホスト |
pg.scope |
プロセスグループのスコープ(プロセスグループを参照) |
# Process host (where processes run)
- name: processes
kind: process.host
host:
workers: 32 # Worker goroutines (default: NumCPU)
queue_size: 1024 # Global queue capacity
local_queue_size: 256 # Per-worker queue
lifecycle:
auto_start: true
# Process definition
- name: worker_process
kind: process.lua
source: file://worker.lua
method: main
# Supervised process service
- name: worker
kind: process.service
process: app:worker_process
host: app:processes
input: ["arg1", "arg2"]
lifecycle:
auto_start: true
restart:
max_attempts: 10
- name: terminal
kind: terminal.host
lifecycle:
auto_start: true
process.serviceを使用します。processフィールドはprocess.luaエントリを参照します。
稼働中のprocess.hostエントリを更新すると、host.workersはその場で再スケールされます — 実行中のプロセス、PID、キューは保持されます。host.queue_size、host.local_queue_size、lifecycleは構築時に固定されており、これらを変更するライブ更新は拒否されます。ワーカーがアフィニティ管理されているホストでのワーカー数の変更も同様に拒否されます。
プロセスのセキュリティ
process.luaとprocess.lua.bcエントリは、トップレベルのsecurity:ブロックを受け付けます。これはエントリの一部であるため、process.hostとterminal.hostのいずれにおいても、そのプロセスのすべてのスポーンに適用されます:
- name: worker_process
kind: process.lua
source: file://worker.lua
method: main
security:
actor:
id: system.worker
meta:
tenant: acme
policies:
- app.security:worker_policy
groups:
- app.security:background_jobs
| フィールド | 説明 |
|---|---|
actor.id |
プロセスが実行時に名乗るアクターID。継承したアクターを置き換える |
actor.meta |
ポリシーが評価するアクター属性 |
policies |
スコープにマージされるポリシーのレジストリID(namespace:name) |
groups |
ポリシーがスコープにマージされるポリシーグループのレジストリID |
解決はプロセスの起動時に行われ、アトミックです。列挙されたポリシーまたはグループのいずれかが解決できない場合、スポーンは失敗し、部分的なコンテキストがインストールされることはありません。actorを省略するとスポーン元のアクターを継承し、policiesとgroupsの両方を省略するとスポーン元のスコープを継承します。function.lua、function.lua.bc、process.lua、process.lua.bcのすべてがこのブロックを受け付けます。
コマンドエントリはさらにmeta.command.securityを宣言できます。これはエントリがCLIコマンドとして起動された場合にのみ適用されます — コマンドのセキュリティを参照してください。通常のスポーンには影響しません。
セキュリティを参照してください。
Temporal(ワークフロー)
| 種別 | 説明 |
|---|---|
temporal.client |
Temporalクライアント接続 |
temporal.worker |
Temporalワーカー |
- name: temporal_client
kind: temporal.client
address: "localhost:7233"
namespace: "default"
auth:
type: none # none, api_key, mtls
lifecycle:
auto_start: true
- name: temporal_worker
kind: temporal.worker
client: temporal_client
task_queue: "main-queue"
lifecycle:
auto_start: true
クラウドストレージ
| 種別 | 説明 |
|---|---|
config.aws |
AWS設定 |
cloudstorage.s3 |
S3バケットアクセス |
- name: aws
kind: config.aws
region: "us-east-1"
access_key_id: ${env:AWS_ACCESS_KEY_ID}
secret_access_key: ${env:AWS_SECRET_ACCESS_KEY}
- name: uploads
kind: cloudstorage.s3
config: app:aws
bucket: "my-uploads"
endpoint: "" # Optional, for S3-compatible services
Lua API: クラウドストレージモジュールを参照
local cloudstorage = require("cloudstorage")
local storage, err = cloudstorage.get("app:uploads")
storage:upload_object("files/doc.pdf", file_content)
local url = storage:presigned_get_url("files/doc.pdf", {expiration = 3600}) -- 秒単位、デフォルトは3600
endpointを使用します。
ファイルシステム
| 種別 | 説明 |
|---|---|
fs.directory |
ディレクトリアクセス |
fs.embed |
読み取り専用組み込みファイルシステム |
- name: data_dir
kind: fs.directory
directory: "./data"
auto_init: true # Create if not exists
mode: "0755" # Permissions
Lua API: ファイルシステムモジュールを参照
local fs = require("fs")
local filesystem, err = fs.get("app:data_dir")
local file = filesystem:open("output.txt", "w")
file:write("Hello, World!")
file:close()
環境変数
| 種別 | 説明 |
|---|---|
env.storage.memory |
インメモリ環境変数ストレージ |
env.storage.file |
ファイルベース環境変数ストレージ |
env.storage.os |
OS環境変数 |
env.storage.static |
読み取り専用の静的キーバリューストレージ |
env.storage.router |
環境変数ルーター(複数ストレージ) |
env.variable |
環境変数 |
- name: os_env
kind: env.storage.os
- name: file_env
kind: env.storage.file
file_path: ".env"
auto_create: true
- name: defaults
kind: env.storage.static
values:
PUBLIC_API_HOST: "https://api.example.com"
APP_ENV: "production"
- name: app_env
kind: env.storage.router
storages:
- app:os_env
- app:file_env
- app:defaults
Lua API: Env モジュールを参照
local env = require("env")
local api_key = env.get("API_KEY")
env.set("CACHE_TTL", "3600")
テンプレート
| 種別 | 説明 |
|---|---|
template.jet |
個別のJetテンプレート |
template.set |
テンプレートセット設定 |
# Template set with engine configuration
- name: templates
kind: template.set
engine:
development_mode: false
extensions:
- ".jet"
- ".html.jet"
# Individual template
- name: email_template
kind: template.jet
source: file://templates/email.jet
set: app:templates
Lua API: テンプレートモジュールを参照
local templates = require("templates")
local set, err = templates.get("app:templates")
local html = set:render("email", {
user = "Alice",
message = "Welcome!"
})
セキュリティ
| 種別 | 説明 |
|---|---|
security.policy |
条件付きセキュリティポリシー |
security.policy.expr |
式ベースのポリシー |
security.token_store |
トークンストレージ |
# Condition-based policy
- name: admin_policy
kind: security.policy
policy:
actions: "*"
resources: "*"
effect: allow
conditions:
- field: "actor.meta.role"
operator: eq
value: "admin"
# Expression-based policy
- name: owner_policy
kind: security.policy.expr
policy:
actions: "*"
resources: "*"
effect: allow
expression: 'actor.id == meta.owner_id || actor.meta.role == "admin"'
groups:
- operators
ポリシーグループはポリシー自身によって形成されます。ポリシーがgroups:配下に所属するグループIDを列挙し、グループとはそれを指名しているポリシーの集合です。グループ専用のエントリ種別はありません。グループIDはレジストリIDです。名前だけを書いた場合は宣言元ポリシーの名前空間で解決されるため、名前空間app.securityで宣言された上記のoperatorsはapp.security:operatorsになります。エントリはグループを完全なnamespace:nameで参照します。
Lua API: セキュリティモジュールを参照
local security = require("security")
-- Check permission before action
if security.can("delete", "users", {user_id = id}) then
delete_user(id)
end
-- Get current actor
local actor = security.actor()
denyは、あらゆるallowに優先します。denyがない場合、マッチしたallowがアクセスを許可します。順序は関係ありません。
コントラクト(依存性注入)
| 種別 | 説明 |
|---|---|
contract.definition |
メソッド仕様を持つインターフェース |
contract.binding |
コントラクトメソッドを関数実装にマップ |
# Define the contract interface
- name: greeter
kind: contract.definition
methods:
- name: greet
description: Returns a greeting message
- name: greet_with_name
description: Returns a personalized greeting
input_schemas:
- format: "application/schema+json"
definition: {"type": "string"}
output_schemas:
- format: "application/schema+json"
definition: {"type": "string"}
# Implementation functions
- name: greeter_greet
kind: function.lua
source: file://greeter_greet.lua
method: main
- name: greeter_greet_name
kind: function.lua
source: file://greeter_greet_name.lua
method: main
# Bind contract methods to implementations
- name: greeter_impl
kind: contract.binding
contracts:
- contract: app:greeter
default: true
methods:
greet: app:greeter_greet
greet_with_name: app:greeter_greet_name
Luaからの使用:
local contract = require("contract")
-- Open binding by ID
local greeter, err = contract.open("app:greeter_impl")
-- Call methods
local result = greeter:greet()
local personalized = greeter:greet_with_name("Alice")
-- Check if instance implements contract
local is_greeter = contract.is(greeter, "app:greeter")
Lua API: コントラクトモジュールを参照
default: trueとしてマークすると、バインディングIDを指定せずにコントラクトを開くときに使用されます。コントラクトが持てるデフォルトバインディングは1つだけです。
実行
| 種別 | 説明 |
|---|---|
exec.native |
ネイティブコマンド実行 |
exec.docker |
Dockerコンテナ実行 |
- name: native_exec
kind: exec.native
default_work_dir: "/app"
command_whitelist:
- "ls"
- "cat"
- name: docker_exec
kind: exec.docker
image: "python:3.11-slim"
default_work_dir: "/workspace"
auto_remove: true
memory_limit: 536870912 # 512MB
command_whitelist:
- "python"
WASMランタイム
| 種別 | 説明 |
|---|---|
function.wat |
WebAssembly関数(WATテキスト形式) |
function.wasm |
WebAssembly関数(バイナリ) |
process.wasm |
WebAssemblyプロセス |
# WATテキストはインラインのソース
- name: sum_wat
kind: function.wat
source: file://sum.wat
method: sum
transport: payload # または wasi-http
# バイナリWASMはファイルシステムエントリからロードされ、ハッシュで検証される
- name: sum
kind: function.wasm
fs: app:modules
path: sum.wasm
hash: sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae
method: sum
transport: payload
function.wasmとprocess.wasmはfs、path、hashを取ります。バイナリエントリにsourceフィールドはありません。sourceはfunction.wat専用です。hashは必須で、sha256:<hex>形式でなければなりません。バイト列が一致しない場合、モジュールは拒否されます。
WASM概要を参照。
ネットワーク
| 種別 | 説明 |
|---|---|
network |
ベースネットワークオーバーレイ |
network.socks5 |
SOCKS5プロキシオーバーレイ |
network.i2p |
I2Pネットワークオーバーレイ |
network.tailscale |
Tailscaleオーバーレイ |
http.service からは network:、funcs/process からは network オプション、http_client からは overlay_network オプションで参照されます。ネットワークを参照してください。
レジストリプリミティブ
| 種別 | 説明 |
|---|---|
registry.entry |
背後にサービスを持たない純粋なデータエントリ(アプリ固有の設定) |
ns.definition |
名前空間定義 |
ns.requirement |
名前空間要件宣言 |
ns.dependency |
名前空間依存関係 |
ns.*種別は他のエントリと同様に記述します。コンポーネントはns.definitionとns.requirementを宣言し、ホストはns.dependencyを宣言します。コンポーネントの構築を参照してください。
ライフサイクル設定
スーパーバイザが管理するサービスエントリは、ライフサイクル設定を公開します。次のブロックは、それをサポートするサービスエントリ内に記述します:
lifecycle:
auto_start: true # Start automatically
start_timeout: 10s # Max startup time
stop_timeout: 10s # Max shutdown time
stable_threshold: 5s # Uninterrupted run time before retry accounting resets
requires:
- app:database
restart: # Retry policy
initial_delay: 1s
max_delay: 90s
backoff_factor: 2.0
max_attempts: 0 # 0 = infinite
depends_onを使用します。スーパーバイザは、各依存関係が自身の起動を完了した後にのみ、依存側のエントリを起動します。
エントリ参照形式
エントリはnamespace:name形式で参照されます:
# Definition
namespace: app.users
entries:
- name: handler
kind: function.lua
# Reference from another entry
func: app.users:handler
エントリの上書き {#overriding-entries}
任意のエントリのフィールド(その kind を含む)は、ソース YAML を編集することなく、override: 設定セクションまたは -o CLI フラグを使って起動時に上書きできます。キーは namespace:entry:path 形式を使用します。
override:
app:gateway:addr: ":9090" # data field (a bare path targets data.*)
app:worker:meta.priority: high # meta field
app:db:kind: db.sql.postgres # the entry's typed kind
app:db:data.kind: custom # a payload field literally named "kind"
| パス | 対象 |
|---|---|
kind |
エントリの型付き kind(空でない文字列である必要があります) |
data.<field> または素の <field> |
エントリの data ペイロード内のフィールド |
meta.<field> |
エントリのメタデータ内のフィールド |
同じ上書きを CLI からも適用できます。
wippy run -o app:db:kind=db.sql.postgres -o app:gateway:addr=:9090
CLI(-o)の値は形状に応じて型変換されます(true/false は bool、数値は数値、それ以外は文字列)。override: セクションの値は YAML の型を保持します。エントリではなくグローバルな設定セクションを上書きするには、--set を使用します。