---
title: "別のスクリプトを参照する共有スクリプト"
slug: "shared-script-referencing-another-script"
abstract: "共有スクリプトの例で、別のスクリプトを参照しメソッドを公開します。"
---
# 別のスクリプトを参照する共有スクリプト

これは、別のスクリプトに参照され、単純なメソッドを公開する*Shared*スクリプトの例です。

共有スクリプトは他の共有スクリプトを含めることができます。ただし、巡回参照の作成は避けることが重要です。コンパイル中に巡回参照が見つかった場合、ビルド出力は競合するスクリプトの詳細を提供します。複数の依存スクリプト間で集中型スクリプトロジックを再利用したい場合にこれを活用してください。

> !注**始める前に**
> 
> -   すべての依存するスクリプトが共有スクリプトを正しく参照していることを確認してください。
>     
> -   メインスクリプトと依存するスクリプト間で共有されるプロパティや構成、例えばエンティティIDやリレーション名を定義します。
>     

## 共有スクリプト

この例では、共有スクリプトの名前は*My Shared Script*です。

public string GetExtension(string path)
{
 var tokens = path.Split('.');
 if (tokens.Length > 1)
 {
 return "." + tokenstokens.Length - 1;
 }
 return null;
}

## 共有スクリプトの説明

このスクリプトは、与えられたファイルパスからファイル拡張子を取得するメソッドで構成されています。各ドット(.)でパスを分割し、拡張子が存在する場合は最後のセグメントにドット(.)を返します。拡張子が見つからなければ、nullを返します。

public string GetExtension(string path)
{
 var tokens = path.Split('.');
 if (tokens.Length > 1)
 {
 return "." + tokenstokens.Length - 1;
 }
 return null;
}

## 従属文字

以下の例は部分的に[Actionスクリプトの例(Pre-commitフェーズ)](https://doc.sitecore.com/ch/ja/developers/cloud-dev/action-script-with-a-pre-commit-trigger.html "Action script with a pre-commit trigger")から派生していますが、他のスクリプトタイプでも同じアプローチです。

#load "My Shared Script.csx"

var entity = Context.Target as IEntity;

// Make sure the following members are loaded
await entity.LoadMembersAsync(new PropertyLoadOption("FileName"), new RelationLoadOption("AssetTypeToAsset"));

var fileName = entity.GetPropertyValue<string>("FileName");
var extension = GetExtension(fileName);

// ...

## 依存文字の説明

共有スクリプトの名前で参照してください。複数の共有スクリプトは、複数の #load "<Script Name>" 文を追加することで参照できます。

#load "My Shared Script.csx"

> !注[CLI](content-hub-cli.html "Content Hub CLI")が提供するIntelliSenseのサポートを使用している場合、スクリプト名に .csx拡張子を追加できます。これにより、ローカルファイルシステム内のスクリプトを扱う際にファイルを解決できます。

ContextからTargetオブジェクトを取得し、IEntityにキャストします。Targetは作成または修正イベントに関わるアセットです。

var entity = Context.Target as IEntity;

ファイル名プロパティとアセットタイプの関係が読み込まれていることを確認してください。もし読み込まれていなければ、レイジーロードされてしまいます。

await entity.LoadMembersAsync(new PropertyLoadOption("FileName"), new RelationLoadOption("AssetTypeToAsset"));

Targetオブジェクトから をGetPropertyValueを使ってFileNameプロパティを取得します。

var filename = entity.GetPropertyValue<string>("FileName");

共有スクリプトを通じて利用可能なGetExtension(string path) メソッドを呼び出します。

var extension = GetExtension(fileName);

## 範囲

メンバーやプロパティなどをスクリプトのグローバル範囲に追加することはできますが、分離やメンテナンスを容易にするためにクラスにまとめる方が良いです。この例は以下のように変換できます:

public static class FileHelper
{
 public static string GetExtension(string path)
 {
 var tokens = path.Split('.');
 if (tokens.Length > 1)
 {
 return "." + tokenstokens.Length - 1;
 }
 return null;
 }
}

> !注GetExtensionメソッドは静的に変更されています。そうでなければ、メソッドを呼び出す前にFileHelperインスタンスを作成する必要があります。

メソッドの呼び出しは次のようになります。

var extension = FileHelper.GetExtension(fileName);