グローバル変数
Global Variables
グローバル変数は、プログラムや自動化プラットフォーム内のあらゆるノードからアクセス可能な変数で、フロー、関数、コンテキスト間でデータを共有します。AIチャットボットにおける活用方法を学びましょう。
グローバル変数とは?
グローバル変数とは、関数、ブロック、ノードの外部で定義される変数であり、プログラムまたは自動化ワークフロー全体からアクセス可能です。従来のプログラミング言語(C、Python)とAIチャットボットプラットフォームの両方において、グローバル変数はコードベースやフロー全体からアクセスでき、場合によっては変更も可能です。これは宣言されたスコープ内に限定されるローカル変数とは対照的です。
グローバル変数により、モジュール間でのデータ共有、会話フロー全体でのユーザーセッションデータの維持、アプリケーションの異なる部分間でのコンテキスト共有が可能になります。プログラム実行またはセッション期間中持続するため、設定、ユーザー情報、コンポーネント間通信に最適です。
スコープとアクセシビリティ
グローバルスコープ:
グローバルスコープで定義された変数は、宣言後、アプリケーション内のすべての関数、ノード、トピックからアクセス可能です。
ローカルとグローバルの比較:
- ローカル変数 – 宣言された関数、ブロック、ノード内に限定
- グローバル変数 – 宣言後、コード内のどこからでもアクセス可能
- シャドーイング – 同名のローカル変数がそのスコープ内でグローバル変数を隠蔽可能
プログラミング言語の例
Python
定義とアクセス:
x = "awesome" # グローバル変数
def myfunc():
print("Python is " + x) # グローバルxにアクセス
myfunc()
print("Python is " + x)
グローバル変数の変更:
x = "awesome"
def myfunc():
global x
x = "fantastic"
myfunc()
print("Python is " + x) # 出力: Python is fantastic
関数内からグローバル変数を変更するにはglobalキーワードが必要です。これがないと、Pythonは新しいローカル変数を作成します。
C言語
宣言と使用:
#include <stdio.h>
int x = 5; // グローバル変数
int main() {
int y = 10; // ローカル変数
printf("%d", x + y); // xはここでアクセス可能
return 0;
}
複数関数からのアクセス:
#include <stdio.h>
int a, b; // グローバル変数
void add() {
printf("%d", a + b);
}
int main() {
a = 10;
b = 15;
add(); // 出力: 25
return 0;
}
Cのグローバル変数は、明示的に初期化されない場合、デフォルトでゼロに初期化されます。
チャットボットプラットフォームでの実装
Microsoft Copilot Studio
グローバル変数の作成:
- 変数パネルで変数を作成
- スコープを「グローバル(すべてのトピックがアクセス可能)」に設定
- 変数にプレフィックスが付与される(例:
Global.UserName) - すべてのトピックと自動化ノードからアクセスおよび変更が可能
グローバル変数の使用:
- 変数ピッカー経由またはプレフィックス付き名前を入力してアクセス
- ユーザー入力、API呼び出し、クエリ文字列から値を設定
- URLパラメータ経由で外部ソースから初期化
URL初期化の例:
https://web.powerva.microsoft.com/webchat/bots/12345?UserName=Ana
これによりセッション開始前にGlobal.UserNameが「Ana」に設定されます。
リセット:
「会話のリセット」システムトピックを使用してすべてのグローバル変数をクリアし、初期状態に復元します。
ServiceNow
カタログアイテム変数:
変数をグローバルに設定すると、複数のワークフローまたはカタログアイテム間で利用可能になります。
注意:
不適切な使用は、リソース使用量の急増や偶発的な上書きによるデータ整合性の問題を引き起こす可能性があります。
ライフサイクルと永続性
ライフタイム:
- プログラム – 実行時間全体
- チャットボットセッション – ユーザーセッションの期間
- セッション間 – 外部ストレージ(データベース)が必要
初期化:
- C – 初期化されていないグローバル変数はデフォルトでゼロ
- Python – 使用前に割り当てが必要
- チャットボットプラットフォーム – 会話開始時または外部パラメータから初期化
永続性:
- 標準的なグローバル変数はアプリケーション/セッション終了時にリセット
- セッション間の永続性にはデータベースまたは外部ストレージが必要
- 長期データ保持のためのプラットフォーム固有のメカニズム
一般的な使用例
ユーザーデータの永続化:
ユーザー情報(名前、メール、設定)を一度保存し、繰り返しプロンプトなしでトピック間で再利用します。
セッション管理:
会話またはワークフロー実行全体で状態またはセッション属性を維持します。
設定:
複数のフローまたはモジュールからアクセスされる機能フラグや環境設定を保持します。
コンテキスト共有:
サブフロー、スクリプト、ブランチ間でデータを渡し、協調的なワークフローを実現します。
外部統合:
外部システムやWebアプリケーションから初期コンテキストまたはセッションデータを受け入れます。
利点と欠点
利点
- アクセシビリティ – アプリケーションやフローのどの部分からでもアクセスおよび変更が可能
- データ共有 – 分離されたモジュール間での情報共有を簡素化
- 冗長性の削減 – 一度の宣言で繰り返しのユーザープロンプトを回避
- セッションデータ処理 – チャットボットや自動化におけるセッションレベルのデータに最適
欠点
- 副作用のリスク – どの部分からも変更可能で、意図しない動作を引き起こす可能性
- デバッグの複雑性 – 大規模なコードベースでの変更の追跡が困難
- 命名の競合 – 慎重な命名規則なしでは偶発的な上書きが発生
- リソース使用量 – 過度なグローバル変数はメモリ消費を増加させる可能性
- 並行性の問題 – マルチユーザー環境ではデータの不整合が発生する可能性
ベストプラクティス
使用を制限:
グローバル変数は控えめに使用します。共有されないデータにはローカル変数を優先します。
一意の命名:
競合を避けるため、プレフィックス(例:Global.、bot.)を使用した明確で一意の名前を使用します。
変更の制御:
グローバル変数を変更できる場所を制限します。すべての変更ポイントを文書化します。
常に初期化:
未定義状態や予期しない動作を避けるため、デフォルト値を設定します。
使用状況の文書化:
メンテナンスのため、各グローバル変数を使用するフローやモジュールを明確に文書化します。
適切なリセット:
適切なポイント(セッション終了、ログアウト)でグローバル変数をリセットするメカニズムを提供します。
セキュリティの考慮:
暗号化で適切に保護されていない限り、グローバル変数に機密データを保存しないでください。
プラットフォーム固有の機能
Microsoft Copilot Studio
- プレフィックスシステム – 識別のための
Global.またはbot.プレフィックス - スコープ設定 – 変数プロパティパネル経由で設定
- セッション期間 – ユーザーセッション全体で持続
- 外部初期化 – URLパラメータまたはプログラム呼び出し経由で設定
- リセットトピック – 「会話のリセット」ですべてのグローバル変数をクリア
ServiceNow
- ワークフロー間アクセス – カタログタスクとフロー間でグローバル変数が利用可能
- リソース監視 – リソース急増を防ぐため使用状況を追跡
- アクセス制御 – 不正な変更を防ぐため適切な権限を実装
関連概念
ローカル変数:
特定の関数、ノード、トピックスコープに限定されます。
セッション変数:
セッション期間中のみ持続し、チャットボットコンテキストではグローバル変数と同等であることが多いです。
環境変数:
システムまたは環境レベルの設定で、通常は構成に使用されます。
定数:
変更不可能な値を持つ変数で、グローバル変数として実装されることが多いです。
状態管理:
ローカル変数とグローバル変数の両方を使用してアプリケーション状態を管理する技術です。