Configuration

[Previous << Initialize Configuration](https://qiita.com/flowcadence/items/df96ca5d6c335d25ea2f)
[Next >> Manage Configuration](https://qiita.com/flowcadence/items/b600e1896db8cc1f5297)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-cli-と-fcl

Flow CLIは、通常`flow.json`というファイルに保存されるconfigurationと呼ばれる状態(state)を使用します。

Flowのコンフィグ（`flow.json`）ファイルには、以下のプロパティが含まれます。
* `networks`リストには、Flowエミュレータ、テストネット、メインネットの接続設定情報が事前に設定されています。
* `accounts`リストには、Flowエミュレータのサービスアカウントが事前に入力されています。
* `deployments`の空オブジェクトには、すべての[デプロイ対象のスマートコントラクト](https://qiita.com/flowcadence/items/83d86476479f13c2bd6f#define-contract-deployment-targets)を定義できます。
* `contracts`空オブジェクトには、あなたが[デプロイしたいコントラクトの定義](https://qiita.com/flowcadence/items/83d86476479f13c2bd6f#add-a-contract)を入力します。

<h1>Example Project Configuration</h1>

```ruby
{
  "networks": {
    "emulator": "127.0.0.1:3569",
    "mainnet": "access.mainnet.nodes.onflow.org:9000",
    "testnet": "access.devnet.nodes.onflow.org:9000"
  },
  "accounts": {
    "emulator-account": {
      "address": "f8d6e0586b0a20c7",
      "key": "ae1b44c0f5e8f6992ef2348898a35e50a8b0b9684000da8b1dade1b3bcd6ebee",
    }
  },
  "deployments": {},
  "contracts": {}
}
```

<h1>Configuration</h1>

以下は、Flowプロジェクトの完全な設定ファイルの例です。各プロパティを一つずつ見ていきます。
```ruby
{
  "contracts": {
    "NonFungibleToken": "./cadence/contracts/NonFungibleToken.cdc",
    "Kibble": "./cadence/contracts/Kibble.cdc",
    "KittyItems": "./cadence/contracts/KittyItems.cdc",
    "KittyItemsMarket": "./cadence/contracts/KittyItemsMarket.cdc",
    "FungibleToken": {
      "source": "./cadence/contracts/FungibleToken.cdc",
      "aliases": {
        "testnet": "9a0766d93b6608b7",
        "emulator": "ee82856bf20e2aa6"
      }
    }
  },

  "deployments": {
    "testnet": {
      "admin-account": ["NonFungibleToken"],
      "user-account": ["Kibble", "KittyItems", "KittyItemsMarket"]
    }, 
    "emulator": {
      "emulator-account": [
        "NonFungibleToken",
        "Kibble",
        "KittyItems",
        "KittyItemsMarket"
      ]
    }
  },

  "accounts": {
    "admin-account": {
      "address": "3ae53cb6e3f42a79",
      "key": "12332967fd2bd75234ae9037dd4694c1f00baad63a10c35172bf65fbb8ad1111"
    },
    "user-account": {
      "address": "e2a8b7f23e8b548f",
      "key": "22232967fd2bd75234ae9037dd4694c1f00baad63a10c35172bf65fbb8ad1111"
    },
    "emulator-account": {
      "address": "f8d6e0586b0a20c7",
      "key": "2eae2f31cb5b756151fa11d82949c634b8f28796a711d7eb1e52cc301ed11111",
    }
  },

  "networks": {
    "emulator": "127.0.0.1:3569",
    "mainnet": "access.mainnet.nodes.onflow.org:9000",
    "testnet": "access.devnet.nodes.onflow.org:9000",
    "testnetSecure": {
      "Host": "access-001.devnet30.nodes.onflow.org:9001",
      "NetworkKey": "ba69f7d2e82b9edf25b103c195cd371cf0cc047ef8884a9bbe331e62982d46daeebf836f7445a2ac16741013b192959d8ad26998aff12f2adc67a99e1eb2988d"
    }
  }
}
```

<h3>Contracts</h3>

contractsはキーと値のペアで指定され、キーはコントラクトの名前、値はCadenceソースコードのあるファイルの場所です。

高度なフォーマットのおかげで、各ネットワークにコントラクトのエイリアスを指定することができます。

**Simple Format**
```ruby
...

"contracts": {
  "NonFungibleToken": "./cadence/contracts/NonFungibleToken.cdc"
}

...
```
**Advanced Format**

高度なフォーマットを使用して、`aliases`を定義することができます。エイリアスは、すでにネットワークに対してデプロイされているコントラクトのアドレスを定義しています。以下の例では、コントラクト`FungibleToken`は、testnetにデプロイする時は`9a0766d93b6608b7`アドレスからインポートされ、Flowエミュレーターにデプロイする時は`ee82856bf20e2aa6`アドレスからインポートされます。この定義した各ネットワークに対してエイリアスを指定することができます。テストネットにデプロイする時は、[利用が一般的なコントラクト](https://qiita.com/flowcadence/items/e40267a3b8969f140431)すべてに対してエイリアスを指定するのが常に良いでしょう。

⚠️ コントラクトにエイリアスを使用している場合、そのネットワークの`deployment`セクションでそれを指定すべきではありません。
```ruby
...
"FungibleToken": {
  "source": "./cadence/contracts/FungibleToken.cdc",
  "aliases": {
    "testnet": "9a0766d93b6608b7",
    "emulator": "ee82856bf20e2aa6"
  }
}
...
```
高度なスマートコントラクトを指定する際に使用されるフォーマットは次のとおりです。
```ruby
"CONTRACT NAME": {
    "source": "CONTRACT SOURCE FILE LOCATION",
    "aliases": {
        "NETWORK NAME": "ADDRESS ON SPECIFIED NETWORK WITH DEPLOYED CONTRACT"
        ...
    }
}
```

<h3>Accounts</h3>

アカウントセクションでは、キーやアドレスなどのアカウントプロパティを定義します。全てのアカウントは名前を含める必要があり、その名前は設定ファイル全体で参照されます。

**Simple Format**
シンプルなフォーマットを使用する場合、アカウントアドレスと、16進数エンコードされたprivate keyを指定するだけです。
```ruby
...

"accounts": {
  "admin-account": {
    "address": "3ae53cb6e3f42a79",
    "key": "12332967fd2bd75234ae9037dd4694c1f00baad63a10c35172bf65fbb8ad1111"
  }
}

...
```
**Advanced format**
高度なフォーマットにより、アカウントのより多くのプロパティを定義することができます。署名アルゴリズムやハッシュアルゴリズム、キーのカスタムフォーマットを定義することができます。

アカウントが`emulator`ネットワーク上で使用される場合、`service`というアドレスを使用することができます。これは、エミュレータネットワーク上でデフォルトのサービスアドレスに対し実行時に定義される特別な値です。

**Example for advanced hex format:**
```ruby
...

"accounts": {
  "admin-account": {
    "address": "service",
    "key":{
        "type": "hex",
        "index": 0,
        "signatureAlgorithm": "ECDSA_P256",
        "hashAlgorithm": "SHA3_256",
        "privateKey": "12332967fd2bd75234ae9037dd4694c1f00baad63a10c35172bf65fbb8ad1111"
      }
  }
}

...
```
また、BIP44を使用して、mnemonicからキーを取り出すこともできます。詳細は[FLIP](https://github.com/onflow/flips/blob/main/application/20201125-bip-44-multi-account.md)を参照してください。

**Example for BIP44 format:**
```ruby
...

"accounts": {
  "admin-account": {
    "address": "service",
    "key":{
        "type": "bip44",
        "index": 0,
        "signatureAlgorithm": "ECDSA_P256",
        "hashAlgorithm": "SHA3_256",
        "mnemonic": "skull design wagon top faith actor valley crystal subject volcano access join",
        "derivationPath": "m/44'/539'/0'/0/0"
      }
  }
}

...
```
注：`derivationPath`のデフォルト値は、省略された場合は`m/44'/539'/0'/0/0`です。

また、トランザクションに署名するためにキー管理システム（KMS）を使用することもできます。現時点では、Google KMSのみをサポートしています。

**Example for Google KMS format:**
```ruby
...
"accounts": {
  "admin-account": {
    "address": "service",
    "key": {
        "type": "google-kms",
        "index": 0,
        "signatureAlgorithm": "ECDSA_P256",
        "hashAlgorithm": "SHA3_256",
        "resourceID": "projects/flow/locations/us/keyRings/foo/bar/cryptoKeyVersions/1"
    }
  }
}
...
```
アカウントのキーを別のファイルに保存し、そのファイル場所をキー設定の一部として指定することができます。

**Example for separate key file:**
```ruby
...
"accounts": {
  "admin-account": {
    "address": "service",
    "key": {
        "type": "file",
        "location": "./test.key"
    }
  }
}
...
```
`test.key` ファイル内には、16進数のキーの内容のみを記載してください（例：`12332967fd2bd75234ae9037dd4694c1f00baad63a10c35172bf65fbb8ad1111`）

<h1>Deployments</h1>

deploymentsセクションでは、`project deploy`コマンドが指定したスマートコントラクトをデプロイする場所を定義します。この構成プロパティは、アカウント、スマートコントラクト、ネットワークを結びつける接着剤のような役割を果たします。これらはすべて名前で参照されます。

deploymentsセクションでは、ネットワーク、アカウント名、およびそのアカウントにデプロイするコントラクトのリストを指定します。

deploymentを指定するフォーマットは次のとおりです:
```ruby
...
"deployments": {
  "NETWORK": {
    "ACCOUNT NAME": ["CONTRACT NAME"]
  }
}

...
```
```ruby
...

"deployments": {
  "emulator": {
    "emulator-account": [
      "NonFungibleToken",
      "Kibble",
      "KittyItems",
      "KittyItemsMarket"
    ]
  },
  "testnet": {
    "admin-account": ["NonFungibleToken"],
    "user-account": [
      "Kibble",
      "KittyItems",
      "KittyItemsMarket"
    ]
  }
}

...
```

<h1>Networks</h1>

このセクションは、ネットワークとそのネットワークの接続パラメータを定義します。

networksのフォーマットは次のとおりです。
```ruby
...
"networks": {
  "NETWORK NAME": "ADDRESS"
}
...
```
```ruby
...
"networks": {
  "NETWORK NAME": {
    "host": "ADDRESS",
    "key": "ACCESS NODE NETWORK KEY"    
  }
}
...
```
```ruby
...

"networks": {
    "emulator": "127.0.0.1:3569",
    "mainnet": "access.mainnet.nodes.onflow.org:9000",
    "testnet": "access.devnet.nodes.onflow.org:9000",
    "testnetSecure": {
        "host": "access-001.devnet30.nodes.onflow.org:9001",
        "key": "ba69f7d2e82b9edf25b103c195cd371cf0cc047ef8884a9bbe331e62982d46daeebf836f7445a2ac16741013b192959d8ad26998aff12f2adc67a99e1eb2988d"
    },
}

...
```

<h1>Emulators</h1>

CLIのデフォルトのエミュレータ は、`"default"`という名前、値は`serviceAccount: "emulator-account"`、`port: "3569"`で自動的に構成されています。デフォルトのエミュレータの設定は flow.json には表示されません。

エミュレータの値をカスタマイズするには、以下の例のようにエミュレータセクションを追加します。
```ruby
...

"emulators": {
    "custom-emulator": {
        "port": 3600,
        "serviceAccount": "emulator-account"
    }
}

...
```

*Last updated on **Nov 20, 2024** by **Chase Fleming***

翻訳元

https://developers.flow.com/tools/flow-cli/flow.json/configuration

***
<b>[Previous << Initialize Configuration](https://qiita.com/flowcadence/items/df96ca5d6c335d25ea2f)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Configuration)

<b>[Next >> Manage Configuration](https://qiita.com/flowcadence/items/b600e1896db8cc1f5297)</b>