Textus Samples 01:Component Script

Created: 2026-06-22 Updated: 2026-07-13

Textus Samples は、Textus component の開発手順を、小さなサンプルを順に読み解きながら理解するためのサンプル集です。

本記事では、その中から 01.d-component-script を取り上げます。

01.d-component-script は、通常の Component / CML authoring ではなく、1 ファイル script を薄い operational entry point として使う特殊な形です。

このサンプルでは、script が Component / Operation モデル (Model)の中でどのように実行されるかを確認します。

実装内容そのものよりも、Textus runtime との接続方法と実行形態を理解することが主な目的です。

前提

本記事では、📄 Textus Samples: Launcherとインストール の手順で準備した環境を使います。

  • textus-tutorial-0.1.3 を展開済み

  • cozy / cncf / textus launcher をインストール済み

  • 各 launcher の runtime を確認済み

download 手順は前提記事で扱っているため、ここでは再掲しません。

学ぶこと

目的と着目点

このサンプルは、Textus component operation を小さな管理コマンドとして扱う開発手順を確認するためのものです。大きな server や正式な component project を先に作らず、script を operation contract への薄い入口として使います。

着目点は script 自体ではなく、script が selector と input を隠しすぎず、運用者に必要な入口を薄く作ることです。

概念の焦点

  • Script は CNCF engine の別モデルではなく、operation contract への薄い入口です。

  • 引数が増えた時は shell 固有の処理ではなく operation input として整理するのが基本です。

サンプルディレクトリ

samples/01.d-component-script

実行

まず、サンプルディレクトリに移動します。

$ cd samples/01.d-component-script

開発時の確認では、 run.sh から script を実行します。

$ ./run.sh

script file を直接実行して、1 ファイル script としての入口も確認できます。

$ ./script/main.scala

コマンドの読み方

run.sh は、内部で scala-cli ./script/main.scala — "$@" を実行します。つまり、学習対象は shell wrapper ではなく script/main.scala です。

script/main.scala では、scala-cli shebang、CNCF script DSL (Domain Specific Language) の import、 run(args) { …​ } による実行ブロックを使います。

#!/usr/bin/env -S scala-cli shebang
//> using repository "https://www.simplemodeling.org/repository/maven"
//> using dep "org.goldenport:goldenport-cncf_3:0.4.13"
import org.goldenport.cncf.dsl.script.*
@main def main(args: String*): Unit =
  run(args) { call =>
    "Hello CNCF"
  }

この形により、1 ファイル script でも CNCF engine の runtime behavior に接続できます。処理が大きくなった場合は、script に business logic を増やすのではなく、正式な Component / CML authoring へ進めます。

期待結果

Hello CNCF

出力の読み方

成功出力は script が shell として動いたことではなく、裏側の Textus component operation が実行されたことを確認します。

出力に selector や result が出る場合は、script の責務 (Responsibility)と operation の責務を分けて読みます。

よくあるつまずき

  • shell script に business logic を寄せすぎると、Textus component operation contract から外れて再利用しづらくなります。

  • パス依存 (Dependency)の script にしないため、読者向け記事では download package 内の相対実行だけを示します。

CNCFエンジン上の意味

script は簡易記法ですが、CNCF engine の観点では正式な実行単位です。

つまり、将来 Component project に成長させる前の段階でも、同じ runtime の考え方で小さく始められます。

次へ

次の記事 📄 Textus Samples 02:Component Packagingでは、正式な packaged component と CAR loader の流れを確認します。

参照

用語集

Textus

Textusは、SimpleModelingによって実現されたソフトウェアを動作させるための実行基盤です。アプリケーションに共通する実行、運用、連携の機構を提供します。

Cozy Modeling Language (CML)

CML(Cozy Modeling Language)は、オブジェクト・モデルのうち、プログラム生成と実行へ接続する実行可能モデルを記述するSimpleModelingの形式モデリング言語です。

コンポーネント (Component)

責務・契約・依存関係を明示的に定義し、再利用可能で交換可能な単位としてカプセル化されたソフトウェア構成要素。論理モデルでは抽象構造単位として、物理モデルでは実装・デプロイメント単位として扱われる。

操作 (Operation)

UMLにおけるOperationは、関連するBehaviorを呼び出すための名前、型、Parameter、Constraintを定めるClassifierのBehavioral Featureです。Operationは呼び出し契約を定め、MethodなどのBehaviorがその実現を担います。

モデル (Model)

Modelとは、対象を特定のPurposeとConcernに基づいて選択し、理解、判断、検証、構築に利用できる形で表した抽象です。対象そのものではなく、目的に必要な要素、関係、意味を保持する表現です。

Cloud Native Component Framework (CNCF)

Cloud Native Component Framework(CNCF)は、クラウド・アプリケーションを構成するコンポーネントを、単一かつ一貫した実行モデルで実行するためのフレームワークです。 Component / Service / Operation という構造を中核とし、command、server(REST / OpenAPI)、client、script といった異なる実行形態から、同一の Operation を再利用できることを特徴とします。 ログ、エラー処理、設定、配備といったクラウド・アプリケーションに必要な品質属性をフレームワーク側に集約することで、コンポーネントはドメイン・ロジックの実装に集中できます。 CNCF は、文芸モデル駆動開発および AI 支援開発を前提に、「何を実行するか」と「どのように呼び出すか」を分離するための実行基盤として設計されています。

DSL (Domain Specific Language)

DSL(ドメイン固有言語)は、特定の領域(ドメイン)に特化して設計された言語であり、その分野の概念や構造を直接的かつ簡潔に表現することを目的とします。 一般的な汎用プログラミング言語(GPL)に比べ、DSLは特定ドメインの問題解決や自動生成に適した高い抽象度を持ちます。

責務 (Responsibility)

Responsibilityとは、ObjectまたはRoleが、何を知り、判断し、行い、守るべきかを表す義務です。構造上の情報だけでなく、規則とBehaviorの所有を定めます。

依存 (Dependency)

UMLにおけるDependencyは、ClientとなるModel Elementの仕様または実装が、Supplierとなる別のModel Elementの定義へ意味的または構造的に依存することを表すDirected Relationshipです。