ブロックタイプの検出

統合ブロックタイプエンドポイント

GET /api/tenant/{tenantId}/project/{projectId}/block/types/all

単一のAPIコールで利用可能なすべてのブロックタイプ(フィルター、計算機、エンリッチメント)を検出します。この統合エンドポイントは、mindzieStudioで利用可能なすべての分析機能の完全な情報を取得する推奨方法です。

統合エンドポイントを使う理由

統合エンドポイントは、個別のカテゴリエンドポイントをクエリするよりもいくつかの利点があります:

  • 単一リクエスト: 複数のリクエストをせずに、すべてのブロックタイプを1回のAPIコールで取得
  • 完全なメタデータ: カテゴリ固有のエンドポイントでは取得できないエンリッチメントを含む
  • グループ化されたレスポンス: ブロックカテゴリ別に結果が整理されているため処理が簡単
  • 豊富なメタデータ: 各ブロックタイプにドキュメントURL、利用ノート、関連ブロックが含まれる
  • AI統合: AIコーディングアシスタントやMCPサーバー連携に最適化

リクエスト

GET /api/tenant/{tenantId}/project/{projectId}/block/types/all
Authorization: Bearer {token}

パスパラメータ

パラメータ 必須 説明
tenantId GUID はい テナント識別子
projectId GUID はい プロジェクト識別子

レスポンス

レスポンス構造

{
  "BlockTypes": [...],
  "Categories": ["属性フィルター", "時間フィルター", "計算機", ...],
  "TotalCount": 45,
  "ByBlockCategory": {
    "Filter": [...],
    "Calculator": [...],
    "Enrichment": [...]
  }
}

レスポンスフィールド

フィールド 説明
BlockTypes 配列 完全なメタデータを含むすべてのブロックタイプ
Categories 配列 すべての一意のカテゴリリスト
TotalCount 整数 利用可能なブロックタイプの総数
ByBlockCategory オブジェクト Filter/Calculator/Enrichment に分類されたブロックタイプ

ブロックタイプオブジェクト

BlockTypes 配列の各ブロックタイプには以下が含まれます:

フィールド 説明
OperatorName 文字列 ブロックタイプの一意識別子(例:"CaseAttributeFilter")
DisplayName 文字列 UIに表示される表示名
Description 文字列 ブロックの機能の簡単な説明
Category 文字列 機能カテゴリ(例:"属性フィルター"、"時間フィルター")
BlockType 文字列 大分類:"Filter"、"Calculator"、または "Enrichment"
DocumentationUrl 文字列 このブロックタイプのドキュメントページURL
UsageFrequency 文字列 利用頻度("High", "Medium", "Low")
ExcludeFromOrFilter ブール値 OR条件での利用可否
AutoTitleEnabled ブール値 自動タイトル生成の対応可否
SupportedDisplayTypes 配列 サポートされる結果の可視化タイプ
UsageNotes 文字列 利用時の追加ガイダンス
RelatedBlocks 配列 関連するブロックタイプのリスト
CommonUseCases 配列 典型的な利用シナリオ

レスポンス例

{
  "BlockTypes": [
    {
      "OperatorName": "CaseAttributeFilter",
      "DisplayName": "ケース属性フィルター",
      "Description": "顧客タイプ、地域、優先度レベルなどの属性値に基づいてケースをフィルタリングします",
      "Category": "属性フィルター",
      "BlockType": "Filter",
      "DocumentationUrl": "/mindzie_studio/filters/case-attribute-filter",
      "UsageFrequency": "High",
      "ExcludeFromOrFilter": false,
      "AutoTitleEnabled": true,
      "SupportedDisplayTypes": ["table", "chart"],
      "UsageNotes": "完全一致、部分一致、正規表現パターンに対応",
      "RelatedBlocks": ["EventAttributeFilter", "CaseIdFilter"],
      "CommonUseCases": [
        "顧客セグメントによるフィルタリング",
        "特定の地域にフォーカス",
        "優先度の高いケースの分析"
      ]
    },
    {
      "OperatorName": "CaseDurationCalculator",
      "DisplayName": "ケース期間計算機",
      "Description": "ケースの開始から終了までの総期間を計算します",
      "Category": "時間計算機",
      "BlockType": "Calculator",
      "DocumentationUrl": "/mindzie_studio/calculators/case-duration-calculator",
      "UsageFrequency": "High",
      "ExcludeFromOrFilter": false,
      "AutoTitleEnabled": true,
      "SupportedDisplayTypes": ["histogram", "table", "boxplot"],
      "UsageNotes": "期間はプロジェクトで設定された時間単位で計算されます",
      "RelatedBlocks": ["ActivityDurationCalculator", "WaitTimeCalculator"],
      "CommonUseCases": [
        "ケースのサイクルタイム分析",
        "遅延ケースの特定",
        "プロセス効率の比較"
      ]
    },
    {
      "OperatorName": "CaseStageCalculator",
      "DisplayName": "ケースステージ計算機",
      "Description": "アクティビティのパターンやルールに基づきケースにステージラベルを割り当てます",
      "Category": "ステージ分析",
      "BlockType": "Enrichment",
      "DocumentationUrl": "/mindzie_studio/enrichments/case-stage-calculator",
      "UsageFrequency": "Medium",
      "ExcludeFromOrFilter": false,
      "AutoTitleEnabled": true,
      "SupportedDisplayTypes": ["sankey", "table"],
      "UsageNotes": "ステージ定義の設定が必要です",
      "RelatedBlocks": ["CaseStatusEnrichment", "MilestoneDetector"],
      "CommonUseCases": [
        "ケースのステージ進捗追跡",
        "ボトルネックステージの特定",
        "ステージ遷移の監視"
      ]
    }
  ],
  "Categories": [
    "属性フィルター",
    "時間フィルター",
    "アクティビティフィルター",
    "時間計算機",
    "カウント計算機",
    "ステージ分析",
    "データエンリッチメント"
  ],
  "TotalCount": 45,
  "ByBlockCategory": {
    "Filter": [
      { "OperatorName": "CaseAttributeFilter", "DisplayName": "ケース属性フィルター", ... },
      { "OperatorName": "DateRangeFilter", "DisplayName": "日付範囲フィルター", ... }
    ],
    "Calculator": [
      { "OperatorName": "CaseDurationCalculator", "DisplayName": "ケース期間計算機", ... }
    ],
    "Enrichment": [
      { "OperatorName": "CaseStageCalculator", "DisplayName": "ケースステージ計算機", ... }
    ]
  }
}

JavaScript例

// 利用可能なすべてのブロックタイプを検出
async function discoverAllBlockTypes(tenantId, projectId, token) {
  const response = await fetch(
    `/api/tenant/${tenantId}/project/${projectId}/block/types/all`,
    {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      }
    }
  );

  if (!response.ok) {
    throw new Error(`ブロックタイプの検出に失敗しました: ${response.status}`);
  }

  const data = await response.json();

  console.log(`検出されたブロックタイプ数: ${data.TotalCount}`);
  console.log(`- フィルター: ${data.ByBlockCategory.Filter.length}`);
  console.log(`- 計算機: ${data.ByBlockCategory.Calculator.length}`);
  console.log(`- エンリッチメント: ${data.ByBlockCategory.Enrichment.length}`);

  return data;
}

// カテゴリごとにブロックタイプを取得
function getBlockTypesByCategory(allTypes, category) {
  return allTypes.BlockTypes.filter(bt => bt.Category === category);
}

// 利用頻度が高いブロックタイプを取得
function getHighUsageBlockTypes(allTypes) {
  return allTypes.BlockTypes.filter(bt => bt.UsageFrequency === 'High');
}

// 使用例
const blockTypes = await discoverAllBlockTypes(tenantId, projectId, token);
const timeFilters = getBlockTypesByCategory(blockTypes, '時間フィルター');
const popular = getHighUsageBlockTypes(blockTypes);

Python例

import requests
from typing import Dict, List, Any

class BlockTypeDiscovery:
    def __init__(self, base_url: str, tenant_id: str, project_id: str, token: str):
        self.base_url = base_url
        self.tenant_id = tenant_id
        self.project_id = project_id
        self.headers = {
            'Authorization': f'Bearer {token}',
            'Content-Type': 'application/json'
        }

    def discover_all(self) -> Dict[str, Any]:
        """利用可能なすべてのブロックタイプを検出"""
        url = f"{self.base_url}/api/tenant/{self.tenant_id}/project/{self.project_id}/block/types/all"
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def get_filters(self) -> List[Dict]:
        """すべてのフィルターブロックタイプを取得"""
        data = self.discover_all()
        return data.get('ByBlockCategory', {}).get('Filter', [])

    def get_calculators(self) -> List[Dict]:
        """すべての計算機ブロックタイプを取得"""
        data = self.discover_all()
        return data.get('ByBlockCategory', {}).get('Calculator', [])

    def get_enrichments(self) -> List[Dict]:
        """すべてのエンリッチメントブロックタイプを取得"""
        data = self.discover_all()
        return data.get('ByBlockCategory', {}).get('Enrichment', [])

    def find_by_use_case(self, keyword: str) -> List[Dict]:
        """ユースケースキーワードにマッチするブロックタイプを検索"""
        data = self.discover_all()
        results = []
        for block_type in data['BlockTypes']:
            use_cases = block_type.get('CommonUseCases', [])
            if any(keyword.lower() in uc.lower() for uc in use_cases):
                results.append(block_type)
        return results

# 利用例
discovery = BlockTypeDiscovery(
    'https://your-mindzie-instance.com',
    'tenant-guid',
    'project-guid',
    'your-auth-token'
)

# すべてのブロックタイプを検出
all_types = discovery.discover_all()
print(f"ブロックタイプの総数: {all_types['TotalCount']}")

# カテゴリごとにブロックタイプ取得
filters = discovery.get_filters()
calculators = discovery.get_calculators()
enrichments = discovery.get_enrichments()

# 期間分析向けブロックタイプを検索
duration_blocks = discovery.find_by_use_case('duration')

カテゴリ別エンドポイント

ほとんどのユースケースには統合エンドポイントが推奨されますが、カテゴリ別エンドポイントも利用可能です:

エンドポイント 説明
GET /block/types?category=filters フィルターのみ
GET /block/types?category=calculators 計算機のみ
GET /block/types/{operatorName} 単一ブロックタイプの詳細
GET /block/types/{operatorName}/schema ブロックタイプの設定スキーマ

MCPサーバー連携

AIコーディングアシスタントはmindzieAPIのMCPサーバーを使ってプログラム的にブロックタイプを検出できます:

mindzie_list_block_types category="unified"

このMCPツール呼び出しは同じ統合レスポンスを返し、AIツールがすべての利用可能な分析機能を簡単に理解できます。

詳細はMCPサーバー連携のドキュメントをご覧ください。

ユースケース

動的UI構築

統合エンドポイントを使い、ブロックタイプ選択メニューに各オプションの完全な情報を表示。

AIによる分析支援

AIアシスタントが利用可能な分析機能を検出し、ユーザーの目標に基づき適切なブロックタイプを提案。

ドキュメント生成

すべてのブロックタイプとそのメタデータを反復処理して動的なドキュメントを生成。

機能監査

プロジェクトに利用可能なすべての分析機能を列挙し、完全なカバレッジを確認。