Deploy a Project

[Previous << Add Project Contracts](https://qiita.com/flowcadence/items/83d86476479f13c2bd6f)
[Next >> Create Emulator Snapshot](https://qiita.com/flowcadence/items/4d21672e2f465a8069ab)

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

```ruby
flow project deploy
```
このコマンドは、`flow.json`ファイルで定義された設定に基づいて、プロジェクトのスマートコントラクトを自動的にデプロイします。

このコマンドを使用する前に、[プロジェクトのコントラクトとデプロイターゲットの設定](https://qiita.com/flowcadence/items/83d86476479f13c2bd6f)方法についてをお読みください。

<h1>Example Usage</h1>

```ruby
> flow project deploy --network=testnet

Deploying 2 contracts for accounts: my-testnet-account

NonFungibleToken -> 0x8910590293346ec4
KittyItems -> 0x8910590293346ec4

✨  All contracts deployed successfully
```
上記の例では、あなたの`flow.json`ファイルは次のようになります。
```ruby
{
  ...
  "contracts": {
    "NonFungibleToken": "./cadence/contracts/NonFungibleToken.cdc",
    "KittyItems": "./cadence/contracts/KittyItems.cdc"
  },
  "deployments": {
    "testnet": {
      "my-testnet-account": ["KittyItems", "NonFungibleToken"]
    }
  },
  ...
}
```
以下は、コントラクトソースファイルの概略です。
```ruby
access(all) contract NonFungibleToken { 
  /* ... */
}
```
```ruby
import NonFungibleToken from "./NonFungibleToken.cdc"

access(all) contract KittyItems { 
  /* ... */
}
```
<h1>Initialization Arguments</h1>

初期化(init)引数を取るスマートコントラクトをデプロイするには、それらの引数を設定に追加することで実現できます。

各デプロイは、デプロイ時に使用される引数を指定した`name`と`args`キーを含んだオブジェクトとして指定することが出来ます。例：
```ruby
...
  "deployments": {
    "testnet": {
      "my-testnet-account": [
        "NonFungibleToken", {
            "name": "Foo", 
            "args": [
                { "type": "String", "value": "Hello World" },
                { "type": "UInt32", "value": "10" }
            ]
        }]
    }
  }
...
```
⚠️ Warning：作業を始める前に、秘密鍵の保存に関するベストプラクティスを学ぶために、[Flow CLI セキュリティガイドライン](https://qiita.com/flowcadence/items/82b619c30a90193904c7)をお読みいただくことをお勧めします。

<h1>Dependency Resolution</h1>

`deploy`コマンドは、デプロイされるすべてのコントラクトのインポート文(依存関係)を解決しようと試みます。

依存関係が見つかると、CLIは、依存関係のすべてがデプロイされるまで、どのコントラクトもデプロイされないように、コントラクトを決定論的な順序でデプロイします。循環依存関係(cyclic dependencies)の発生により、このような順序付けが存在しなくなると、コマンドはエラーを返します。

上記の例では、`Foo`が常に先にデプロイされます。

<h1>Address Replacement</h1>

すべての依存関係を解決した後、`deploy`コマンドは各コントラクトを書き換えます、そうすることで依存関係はソースファイルの場所からではなく*ターゲットアドレス*からインポートされるようになります。

書き換えられたバージョンは、それぞれのターゲットにデプロイされ、元のコントラクトファイルは変更されません。

上記の例では、`KittyItems`コントラクトは次のように書き換えられます。
```ruby
import NonFungibleToken from 0xf8d6e0586b0a20c7

access(all) contract KittyItems { 
  /* ... */
}
```

<h1>Merging Multiple Configuration Files</h1>

`-f`フラグを複数回使用して、複数の設定ファイルをマージすることができます。

2つ以上の設定ファイル間で設定のフィールドに重複がある場合、結果として得られる設定の重複したフィールドの値は、-fフラグで指定された設定ファイルのリストでより右側に位置する設定ファイルから取得されます。

以下に、複数の設定ファイルを使用した`deploy`コマンドの例を示します。
```ruby
{
    "accounts": {
        "admin-account": {
            "address": "f8d6e0586b0a20c7",
            "key": "21c5dfdeb0ff03a7a73ef39788563b62c89adea67bbb21ab95e5f710bd1d40b7"
        }, 
        "test-account": {
            "address": "f8d6e0586b0a20c8",
            "key": "52d5dfdeb0ff03a7a73ef39788563b62c89adea67bbb21ab95e5f710bd1d51c9"
        }
    }
}
```
```ruby
{
    "accounts":{
		"admin-account":{
			"address":"f1d6e0586b0a20c7",
			"key":"3335dfdeb0ff03a7a73ef39788563b62c89adea67bbb21ab95e5f710bd1d40b7"
	    }
	}
}
```
上記の例では、複数の設定ファイルを使用して`deploy`コマンドを実行しようとした時に、設定ファイルの`accounts`フィールドの中の`admin-account`アカウントが重複している時、結果として得られる設定は次のようになります。
> flow project deploy -f flow.json -f private.json

```ruby
{
    "accounts":{
	    "admin-account":{
			"address":"f1d6e0586b0a20c7",
			"key":"3335dfdeb0ff03a7a73ef39788563b62c89adea67bbb21ab95e5f710bd1d40b7"
	    }, 
	    "test-account":{
			"address":"f8d6e0586b0a20c8",
			"key":"52d5dfdeb0ff03a7a73ef39788563b62c89adea67bbb21ab95e5f710bd1d51c9"
	    }
	}
}
```

<h1>Flags</h1>

<h3>Allow Updates</h3>

* Flag: `--update`
* Valid inputs: `true`, `false`
* Default: `false`

既存のコントラクトを上書きしてアップグレードするかどうかを指定します。既存のコントラクトと相違のあるコントラクトのみが上書きされます。

<h3>Show Update Diff</h3>

* Flag: `--show-diff`
* Valid inputs: `true`, `false`
* Default: `false`

デプロイ済みのコントラクトと新しいコントラクトの差分を表示し、更新前に承認を求めます。

<h3>Host</h3>

* Flag: `--host`
* Valid inputs: an IP address or hostname.
* Default: `127.0.0.1:3569` (Flow Emulator)

コマンドを実行する際に使用する Access API のホスト名を指定します。このフラグは、`--network` フラグで定義されたホストをすべて上書きします。

<h3>Network Key</h3>

* Flag: `--network-key`
* Valid inputs: ホストのネットワーク公開鍵の 16 進数文字列

コマンドを実行する際に、セキュアなGRPCクライアントを作成するために使用するAccess APIのネットワーク公開鍵を指定します。

<h3>Network</h3>

* Flag: `--network`
* Short Flag: `-n`
* Valid inputs: the name of a network defined in the configuration (`flow.json`)
* Default: `emulator`

どのネットワークに対してコマンドを実行するのかを指定します。

<h3>Filter</h3>

* Flag: `--filter`
* Short Flag: `-x`
* Valid inputs: a case-sensitive name of the result property.

結果から、唯一の値として取得したいプロパティの名前を指定します。

<h3>Output</h3>

* Flag: `--output`
* Short Flag: `-o`
* Valid inputs: `json`, `inline`

コマンド結果のフォーマットを指定します。

<h3>Save</h3>

* Flag: `--save`
* Short Flag: `-s`
* Valid inputs: a path in the current filesystem.

結果を保存したいファイル名を指定します。

<h3>Log</h3>

* Flag: `--log`
* Short Flag: `-l`
* Valid inputs: `none`, `error`, `debug`
* Default: `info`

ログレベルを指定します。コマンド実行中に表示する出力を制御します。

<h3>Configuration</h3>

* Flag: `--config-path`
* Short Flag: `-f`
* Valid inputs: a path in the current filesystem.
* Default: `flow.json`

`flow.json`コンフィギュレーションファイルへのパスを指定します。`-f`フラグを複数回使用して複数のコンフィグレーションファイルをマージすることもできます。

<h3>Version Check</h3>

* Flag: `--skip-version-check`
* Default: `false`

低速なネットワーク接続における処理を高速化するために、起動時のバージョンチェックをスキップします。

*Last updated on **Dec 6, 2024** by **Alex Ni***

翻訳元

https://developers.flow.com/tools/flow-cli/deployment/deploy-project-contracts

***
<b>[Previous << Add Project Contracts](https://qiita.com/flowcadence/items/83d86476479f13c2bd6f)
</b>

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

<b>[Next >> Create Emulator Snapshot](https://qiita.com/flowcadence/items/4d21672e2f465a8069ab)</b>