Communitygithub.com

PaeoniaCommon/SkillsOdea

toy_process パッケージを使って、新しい Process サブクラスを作成します(set_parameters、set_steps、step メソッド、入れ子のサブプロセス)とそのテストを含みます。プロセス、ワークフロー、パイプラインを process_package で構築する際、design-process で計画した後に使用します。

SkillsOdea とは?

このスキルは、toy_process フレームワークを使用して新しいプロセス(Process サブクラス)を作成するためのものです。Process は自己パラメータ管理とステップ実行を提供する基底クラスで、`set_parameters()` でデフォルトパラメータを定義し、`set_steps()` で実行順にステップメソッドやネスト可能なサブプロセスをリストとして返します。各ステップは `context` 辞書を受け取り、パラメータを `self.params` から読み取り、データを `context` 内で読み書きします。このスキルは、プロセステンプレート、テストファイル、そして実際のリポジトリ例(例: word_report.py)を提供します。サポートプラットフォームは Claude Code、Cursor、Codex などの AI エージェントで、process_package 内の開発を支援します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PaeoniaCommon/SkillsOdea/tree/HEAD/.opencode/skills/create-process

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

プロセスを作成する

すべてのパスはリポジトリルートからの相対パスです。パッケージは process_package/ にあります。

親クラスの動作方法

process_package/toy_process/process.py は Process を定義しています:

  • __init__(**overrides) は self.params = {**self.set_parameters(), **overrides} を設定し、次に self.steps = self.set_steps() を設定します。
  • set_parameters() と set_steps() は抽象メソッドです。どちらかが欠けている子クラスはインスタンス化できません。
  • run(context=None) は self.steps を順にループします:
    • Process インスタンスの場合 → step.run(context)、ネストされ、同じ context 辞書を使用
    • その他の呼び出し可能オブジェクトの場合 → step(context)
    • それ以外の場合 → TypeError
  • run は context 辞書を返し、インデントされたトレースを出力します。

toy_process/ を変更したり、子クラスで __init__ や run をオーバーライドしたりしないでください。

子クラスのルール

  1. from toy_process import Process でインポートし、サブクラス化します。
  2. set_parameters(self) はデフォルト値の dict を返します。ない場合は {} を使用します。
  3. set_steps(self) は list を返します。各要素は次のいずれかです:
    • 束縛メソッド:self.count_words、括弧なし、または
    • Process インスタンス:CleanText(lowercase=self.params["lowercase"])。
  4. 各ステップメソッドのシグネチャは def name(self, context): です。
    • 設定は self.params["..."] から読み取ります。
    • データは context["..."] で読み書きします。
    • 何も返しません。戻り値は無視されます。
  5. サブプロセスクラスは、それを使用するクラスの上に定義するか、インポートします。

テンプレート

"""プロセスが何をするか1行で説明します。

process_package/ から実行:
    python -m examples.<module_name>
"""

from toy_process import Process


class SubTask(Process):
    def set_parameters(self):
        return {"option": True}

    def set_steps(self):
        return [self.do_part]

    def do_part(self, context):
        if self.params["option"]:
            context["value"] = context["value"] * 2


class MainTask(Process):
    def set_parameters(self):
        return {"start": 1, "option": True}

    def set_steps(self):
        return [
            self.load,
            SubTask(option=self.params["option"]),  # ネストされたサブプロセス
            self.finish,
        ]

    def load(self, context):
        context["value"] = self.params["start"]

    def finish(self, context):
        context["result"] = f"value is {context['value']}"


if __name__ == "__main__":
    print(MainTask(start=5).run()["result"])

作成するファイル

  1. process_package/examples/<module_name>.py:テンプレートからのプロセス。
  2. process_package/tests/test_<module_name>.py:.run() を呼び出し、返された context のキーに対してアサーションを行う unittest テスト。パラメータのオーバーライドで結果が変わることも確認します。
import unittest

from examples.<module_name> import MainTask


class MainTaskTests(unittest.TestCase):
    def test_run(self):
        self.assertEqual(MainTask(start=5).run()["result"], "value is 10")

    def test_parameter_override(self):
        self.assertEqual(MainTask(start=5, option=False).run()["result"], "value is 5")


if __name__ == "__main__":
    unittest.main()

次に run-process スキルで検証します。完全な動作例は process_package/examples/word_report.py にあります。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル