ファブリックのプログラミング言語
AmiScript
データ、ロジック、ワークフロー、プレゼンテーションを、同じランタイムの中で1つの一貫したモデルとして扱えます。
ファブリックにおける役割
データ、ロジック、プレゼンテーションを貫く1つの言語
AmiScriptは、アプリケーション・ファブリックのネイティブなプログラミング言語です。データの照会、ビジネスルールの実装、アプリケーション向けの結果の整形に、それぞれ別の言語を使うのではなく、開発者はこれらを同じランタイムの中で記述できます。
この言語は、Java、Python、SQL、文字列テンプレートのなじみのある概念を組み合わせ、金融システム向けの関数とデータ型を加えています。ガバナンスされたデータの照会、リアルタイムイベントの処理、業務固有の計算、書式付き出力の生成、アプリケーション動作の呼び出しが可能です。
言語がファブリック全体で動作するため、レイヤー間を移動する際にロジックを書き直す必要はありません。計算をデータモデルで定義し、ワークフローで再利用し、そのままユーザーインターフェースやレポートに表示できます。同じロジックを、承認されたインターフェースを通じて外部アプリケーションやAIエージェントから呼び出すこともできます。
機能
実際の使い方
Python風の構文で構造化データを定義
AmiScriptは、マップ、リスト、ネストされた構造の定義にPythonに着想を得た構文を採用しています。マーケットデータのスナップショット、プライスラダー、リスクバケット、設定オブジェクトをスクリプト内で直接表現でき、冗長なクラス定義や外部スキーマは不要です。
これらの構造は言語の第一級の要素であるため、変換なしで計算、ビジュアルコンポーネント、永続化レイヤーに直接渡せます。同じ構造で、プライシングロジックへの入力、テーブルへの表示、チャートの描画が可能です。
Map pricingSummary = {
"ZXZZT": {
"Open": 489.10,
"prices": [492.10, 492.10]
}
};
再利用可能なビジネスロジックを関数としてカプセル化
関数は強い型付けを持ち、オーバーロードが可能で、一度定義すればスクリプト、クエリ、モデル、ビジュアルで再利用できます。想定元本、エクスポージャー、マージン、PnLといった概念は、リスク、トレーディング、レポーティング、コンプライアンスのどのワークフローでも同一に計算されなければなりません。名前付き関数として一元化することで、チーム間でロジックが重複したり微妙に食い違ったりするのを防げます。
言語はプラットフォームのガバナンスされたランタイム内で実行されるため、これらの関数も可観測かつ監査可能であり、システムの他の部分と同じ統制の対象になります。
double NOTIONAL_VALUE(
Number quantity,
Number price,
Number fx
) {
quantity * price * fx
};
SQLライクな実行でデータにアクセス
AmiScriptはAMI SQLと緊密に統合されており、リアルタイムおよび履歴のデータソースに、直接かつガバナンスされた形でアクセスできます。パラメーター化クエリは、なじみのあるSQL構文で名前付きデータソースに対して実行され、プラットフォームのエンタイトルメント、監査、リネージの枠組みから外れることはありません。
この例では、現在のユーザーコンテキストからテーブルを動的に作成しています。プレースホルダーは実行時に解決されるため、識別子をハードコードすることなく、同じスクリプトが異なるユーザーやセッションに対応します。
create table mycopy AS use DS="ACCOUNT_DATA" execute
Select * from Accounts
where Account=="${USERACCOUNT}";
表示用に結果を計算・整形
先に定義したビジネス関数を集計クエリの中で再利用し、組み込みのテンプレート機能で計算結果を書式付きメッセージに埋め込んでいます。計算値は、テーブル、チャート、ツールチップ、ダッシュボード、レポートに直接組み込めます。
整形ロジックは計算と同じ場所にあります。そのため、ユーザーが目にする内容は、別のUIレイヤーで後処理されたものではなく、ガバナンスされた追跡可能なロジックから導かれます。
double totalNotional =
select sum(NOTIONAL_VALUE(
qty, px, fxrate))
from mycopy;
Session.alert(
"Total value for account ${USERACCOUNT}
is ${totalNotional}"
);
ライブラリ別に整理された1,500以上の関数
組み込みライブラリは、データアクセス、集計、時系列分析、金融計算、書式設定、エンタイトルメント、セッション制御、システム連携を扱う分野別モジュールで構成されており、一般的なプリミティブを再実装する必要はありません。各項目からリファレンスドキュメントにリンクしています。
言語に組み込まれたAI
AmiScriptからAIを呼び出す
モデルの呼び出しは、関数の呼び出しです。 session.promptAiは、データを生成したコールバック、タイマー、トリガーの内部から、指示とライブデータの一部を組織で設定されたプロバイダーに渡し、回答を文字列として返します。行の分類、フィルタリングした結果セットの要約、構造化フィールドの抽出を、それらを生成したロジックから離れることなく行えます。
これは会話ではなく、単発のブロッキング型の補完です。指示は1つ、回答も1つで、ツールもエージェントループもありません。認証情報がスクリプトに現れることはありません。プロバイダーとそのキーは、デプロイメント自体の設定からサーバー側で解決されます。すべての呼び出しはチャットボットのアクティビティとともに監査ログに記録されるため、スクリプトから使うAIも同じ統制の下に置かれ、同じ場所で確認できます。
AIが無効になっている場合やプロバイダーに接続できない場合、呼び出しはスクリプトを失敗させずにnullを返します。そのため、AIが利用できるかどうかにかかわらず、アプリケーションは動作し続けます。
// 'alerts' is a table or result available in this scope
Map options = {"system": "You are a trading-risk analyst. Be concise.", "max_tokens": 500};
List data = [alerts];
String summary = session.promptAi("anthropic", "claude-opus-4-8", options, data,
"Summarize the top risks in the attached alert rows in three bullet points.");
if (summary != null) {
session.log(summary);
}
活用の場
既存のIDEで開発
開発者は、別の環境ではなく、チームが使うソースコード、リポジトリ、テストツール、レビュープロセスと並べて、普段の作業環境でAmiScriptを記述できます。
- エディターで:VS Code拡張機能が、プラットフォーム自身のパーサーに基づく補完、診断、ステップ実行デバッグを提供
- AIコーディングツールで:3forge Pluginが、Claude Code、Codex、GitHub CopilotにAmiScriptの記述、レビュー、デバッグのためのスキルとエージェントを提供
- 稼働中のデプロイメントに基づく:MCPサーバーを通じて、どちらも実際にデプロイされているスキーマ、プロシージャ、ランタイムオブジェクトを参照
- ガバナンスされた単一のインターフェース:変更を手で書いてもアシスタントが提案しても同じツールと権限が適用され、すべての呼び出しが認証・監査される
続きを読む
AmiScriptはファブリックの内部で動き、Pythonは外部からアクセスします。
リサーチ、自動化、本番サービスのためのプログラマブルなインターフェース。