> For the complete documentation index, see [llms.txt](/llms.txt)

# GS2-StateMachine トランザクションアクション

検証/消費/入手の各トランザクションアクションの仕様




## アクションの組み合わせと同時実行

すべてのサービスに共通する前提は [トランザクションアクションの組み合わせ]() にまとめています。先にそちらを読んでください。この節の残りは GS2-StateMachine 固有の内容です。

GS2-StateMachine がトランザクションに指定できるアクションは 1 つです。ステートマシンの開始は毎回新しいステータスを作るので、対象を奪い合うことがありません。

操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界 | 直列実行モード有効時
--- | --- | --- | --- | ---
ステートマシンの開始<br>`StartStateMachineByUserId` | それぞれが自分のステートマシンを開始する。衝突しない | 衝突しない | 開始のたびに別の対象 | 変わらない。もともと衝突しない

進行中のステートマシンの各ステップもそれぞれ独立したトランザクションなので、開始したトランザクションと統合されることはありません。ステートマシンがステップの中で何をするかは、触るサービスの制限を受けます。

### 入れ子になったトランザクションに注意

ステートマシンの開始はこの影響を受けません。開始のたびに自分のステータスを作るためです。その後のステップも別のトランザクションなので、開始したトランザクションと統合されることはありません。

### 同時実行とリトライ

ステートマシンを同時に開始しても、GS2-StateMachine 自身がコンフリクトを返すことはありません。ステップが衝突するかどうかは、そこで何を書き込むかによって決まり、リトライの指針もそのサービスのものが当てはまります。

---




## Acquire Action

入手アクション

### Gs2StateMachine:StartStateMachineByUserId

ユーザーIDを指定してステートマシンを開始<br>

最新のマスターバージョンを使用して、指定したユーザーの新しいステートマシンインスタンスを開始します。引数はJSONとして渡され、ステートマシン変数にパースされます。オプションのTTL（分単位）を設定できます。省略した場合、ステートマシンは約10年間有効です。

**数量指定可能なアクション：いいえ**

**反転可能なアクション：いいえ**

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| args | string |  | | "{}" |  ~ 4096文字 | ステートマシンに渡す引数 |
| ttl | int |  | |  | 1 ~ 525600 | 有効期間(分) |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2StateMachine:StartStateMachineByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "args": "[string]ステートマシンに渡す引数",
        "ttl": "[int]有効期間(分)",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2StateMachine:StartStateMachineByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  args: "[string]ステートマシンに渡す引数"
  ttl: "[int]有効期間(分)"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("stateMachine").acquire.start_state_machine_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    args="[string]ステートマシンに渡す引数",
    ttl="[int]有効期間(分)",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---



