mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-11 10:43:10 +08:00
Translated 85 skill sub-reference files to achieve full parity with the English source: - skills/angular-developer/references/ — 35 files (all references) - skills/remotion-video-creation/rules/ — 28 files (all rules) - skills/tinystruct-patterns/references/ — 5 files - skills/openclaw-persona-forge/references/ — 6 files - skills/skill-comply/prompts/ — 3 files - skills/lead-intelligence/agents/ — 4 files - skills/brand-voice/references/ — 1 file - skills/frontend-slides/ — 2 files - hooks/memory-persistence/README.md — 1 file English source parity: 0 missing files (excluding rules/zh/, internal docs, and experimental examples absent from zh-CN)
75 lines
3.3 KiB
Markdown
75 lines
3.3 KiB
Markdown
# tinystruct システムと使用リファレンス
|
||
|
||
## 使用場面
|
||
|
||
CLIとHTTPモード間でステートフルなインタラクションを処理する必要がある場合、Webアプリケーションでユーザーセッションを管理する場合、またはイベント駆動アーキテクチャを使用してアプリケーションモジュール間の疎結合な通信を実装する場合に、ここで説明するシステムと使用パターンを使用します。
|
||
|
||
## 動作の仕組み
|
||
|
||
フレームワークの `Context` はリクエスト固有の状態のプライマリデータストアとして機能します。CLIモードでは、`--key value` として渡されるフラグが `--` プレフィックス付きで自動的にパースされて `Context` に保存されるため、アクションメソッドがコマンドパラメータを簡単に取得できます。Webアプリケーションでは、システムは `Request` オブジェクト経由で標準セッション管理を提供し、複数のHTTPリクエストをまたいでユーザーデータを保存できます。
|
||
|
||
内部の `EventDispatcher` は非同期イベントバスを実現します。カスタム `Event` クラスを定義してハンドラーを登録(通常はアプリケーションの `init()` メソッド内)することで、メインの実行パスをブロックせずにバックグラウンドタスク(メールの送信や監査ログなど)をトリガーできます。
|
||
|
||
## 例
|
||
|
||
### コンテキストとCLI引数
|
||
```java
|
||
@Action("echo")
|
||
public String echo() {
|
||
// CLI: bin/dispatcher echo --words "Hello World"
|
||
Object words = getContext().getAttribute("--words");
|
||
if (words != null) return words.toString();
|
||
return "No words provided";
|
||
}
|
||
```
|
||
|
||
### セッション管理(Webモード)
|
||
```java
|
||
@Action(value = "login", mode = Mode.HTTP_POST)
|
||
public String login(Request request) {
|
||
request.getSession().setAttribute("userId", "42");
|
||
return "Logged in";
|
||
}
|
||
|
||
@Action("profile")
|
||
public String profile(Request request) {
|
||
Object userId = request.getSession().getAttribute("userId");
|
||
if (userId == null) return "Not logged in";
|
||
return "User: " + userId;
|
||
}
|
||
```
|
||
|
||
### イベントシステム
|
||
```java
|
||
// 1. イベントを定義する
|
||
public class OrderCreatedEvent implements org.tinystruct.system.Event<Order> {
|
||
private final Order order;
|
||
public OrderCreatedEvent(Order order) { this.order = order; }
|
||
|
||
@Override public String getName() { return "order_created"; }
|
||
@Override public Order getPayload() { return order; }
|
||
}
|
||
|
||
// 2. ハンドラーを登録する
|
||
EventDispatcher.getInstance().registerHandler(OrderCreatedEvent.class, event -> {
|
||
CompletableFuture.runAsync(() -> sendConfirmationEmail(event.getPayload()));
|
||
});
|
||
|
||
// 3. ディスパッチする
|
||
EventDispatcher.getInstance().dispatch(new OrderCreatedEvent(newOrder));
|
||
```
|
||
|
||
### アプリケーションの実行
|
||
```bash
|
||
# CLIモード
|
||
bin/dispatcher hello
|
||
bin/dispatcher echo --words "Hello" --import com.example.HelloApp
|
||
|
||
# HTTPサーバー(デフォルトで:8080でリッスン)
|
||
bin/dispatcher start --import org.tinystruct.system.HttpServer
|
||
|
||
# データベースユーティリティ
|
||
bin/dispatcher generate --table users
|
||
bin/dispatcher sql-query "SELECT * FROM users"
|
||
```
|