Textus Samples 01:Component Script

Created: 2026-06-22

Textus Samples は、Textus component の基本的な作り方と動かし方を、小さなサンプルを順に実行しながら理解するためのサンプル集です。

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

01.d-component-script は、正式な sbt component project に進む前に、1 ファイル script で Textus runtime との接続を確認するサンプルです。

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

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

前提

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

  • textus-tutorial-0.1.1 を展開済み

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

  • 各 launcher の runtime を確認済み

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

学ぶこと

目的と着目点

このサンプルは、Textus component operation を小さな運用 script として扱う感覚を掴むためのものです。大きな server を起動せず、component の operation を日常的な command として呼び出します。

着目点は 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
import org.goldenport.cncf.dsl.script.*
@main def main(args: String*): Unit =
  run(args) { call =>
    "Hello CNCF"
  }

この形により、1 ファイル script でも CNCF engine の runtime behavior に接続できます。

期待結果

Hello CNCF

出力の読み方

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

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

よくあるつまずき

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

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

CNCFエンジン上の意味

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

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

次へ

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

参照

用語集

コンポーネント (Component)

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

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は特定ドメインの問題解決や自動生成に適した高い抽象度を持ちます。