> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: Xplenty中級編 Part8：変数の参照範囲について

> Xplentyのパッケージ変数、シークレット変数、グローバル変数、システム変数の参照範囲の違いと使い分け方を解説します。

Xplentyはプログラミングの経験が少ないユーザのためのローコード・ノーコードツールであり、ユーザの手間を掛からないように日々のデータ転送業務にはスケジューラーを利用したジョブ実行をお勧めします。

このスケジューラーによるジョブの定期実行に必ず登場するのがスパイス役割を担う変数です。
スケジューラーの実行時に多彩な条件付与へよく使われる変数には、参照範囲が存在するのはそれほど知られていないようです。

一般のプログラミング言語のようにXplentyの変数も参照範囲が存在してこれをうまく使えば、効率よくジョブ実行に必要な値の設定が可能になります。
それほど複雑な概念では無いので、この記事で変数の参照範囲についてみてみましょう。

## 変数の参照範囲の説明

参照範囲ごとの変数の設定や確認は、パッケージ編集画面の１箇所でまとめて行えます。下記の図のようにパッケージ編集画面の右上にある3点のアイコンをクリックすると、Edit package variablesというサブ画面が右側から開きます。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-1.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=ac742e42e254a75560fab867e4542837" alt="intermediate-part08-jp image 1" width="552" height="129" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-1.webp" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-2.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=a68fdf9c398c2b72c544930f6fcd24db" alt="intermediate-part08-jp image 2" width="1195" height="489" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-2.webp" />
</Frame>

現時点でご覧のように４種類の変数の参照範囲がございます。
変数の定義はタイプに問わず、VARIABLEに変数名を入れてEXPRESSIONに値や関数を設定して完了です。変数の順番を入れ替えるには、VARIABLEの左側にある上下の矢印をマウスでドラッグして移動します。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-3.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=ff4277bf7d43387ae2bba0d502fdd641" alt="intermediate-part08-jp image 3" width="981" height="352" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-3.webp" />
</Frame>

では、各々の変数タイプについて詳しくみてみましょう。

### 1. パッケージ変数、またはユーザ変数(Packageタブ)

パッケージ変数は、パッケージの中ならどこでも参照できる変数の集まりです。

* 参照範囲

* 変数を定義したパッケージの中

* 変数タイプ

* 数字（int, long, float, double）、ブール値、文字列

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-4.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=5e78855be7c5c9e273ef351a60108414" alt="intermediate-part08-jp image 4" width="1097" height="606" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-4.webp" />
</Frame>

### 2. シークレット変数（Secretsタブ）

2024年4月に追加されてシークレット変数は、下記のような特徴持っています。

* 参照範囲

* 変数を定義したパッケージの中

* 変数タイプ

* 文字列のみ設定可能（シングルクォーテーションはいらない）

* 特徴

* APIキーなどの**他のメンバーに隠したい値**の設定に有効

* 同じ変数名がGlobalやPackageにあるとエラーになる

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-5.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=818d3ab6fa193c5eafb14c324921b5f1" alt="intermediate-part08-jp image 5" width="1097" height="471" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-5.webp" />
</Frame>

### 3. グローバル変数（Globalタブ）

2023年5月に追加されたグローバル変数は、１つのアカウント下の全てのパッケージからアクセス可能です。
変数の設定箇所は、下記の図の通りにsettings（歯車のアイコン）- Account Settings - Global Variablesにて設定できます。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-6.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=dc4c7855ef2b41a613a6777149f2536b" alt="intermediate-part08-jp image 6" width="1324" height="884" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-6.webp" />
</Frame>

設定後は、必ずValidate and Saveボタンをクリックして入力した値が正しいかチェックしてから保存します。

* 参照範囲

* １つのアカウント下の全てのパッケージ

* 変数タイプ

* 数字（int, long, float, double）、ブール値、文字列

* 特徴

* パッケージ変数に同じ変数名が存在する場合、**パッケージ変数を優先**する

以前はアカウントの全体で使い回している共通変数がある場合は、各々のパッケージに共通変数を一々設定する必要がありました。パッケージが少ない時はそれほど問題にならないですが、エンタープライズ規模になると力技のかなり辛い作業に違いありません。
ちょっと気を抜いてしまうと同じ変数名なのにパッケージ毎に異なる変数値が設定されやすかったり、せっかく初期設定で変数値を揃えておいたのに後続作業で何度も同じ誤りが起きる可能性も高まってしまいます。

そんな最中にグローバル変数は、いろんな意味で救世主的な存在です。
グローバル変数を使用することで、複数のパッケージにわたる共通変数の設定が１回で済み、設定ミスや予期せぬ変更のリスクが減少します。特定のパッケージだけ変数値を変更したい場合、同じ変数名のパッケージ変数を定義すれば、そのパッケージ変数が優先されます。これにより、煩雑な作業を減らし、効率的な変数管理が可能となります。

### 4. システム変数（System）

Xplentyの内部で使われている変数です。こちらの変数項目の詳細については、[Xplenty中級編 Part2: System変数または事前定義済み変数について](/jp/etl/intermediate-part02-jp)をご参考ください。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part08-jp/image-7.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=cab8a9cb6a372dc8d24a03e9996b2972" alt="intermediate-part08-jp image 7" width="1093" height="1327" data-path="images/japanese-knowledge-base/intermediate-part08-jp/image-7.webp" />
</Frame>

* 参照範囲

* １つのアカウント下の全てのパッケージ

* 特徴

* パッケージ全体に渡って同じ値が設定されるが、値の変更も可能

* 値の変更があった場合、参照範囲は設定したパッケージのみに有効

* 他の変数にシステム変数と同じ変数名の変数設定は不可能(保存されない)

## 終わりに

変数はXplentyによるパッケージ（データパイプライン）の定期実行に欠かせない内容です。
この記事で変数についてはしっかり特徴を掴んでしてパッケージ作成に柔軟性を高めてみるのはいかがでしょうか？
