😼

Flow CLIの実行結果に日本語を表示したい

2023/09/27に公開

現状だと、flow scripts executeの戻り値に含まれる日本語は正しく表示されません。

test.cdc
pub fun main(): String {
    return "こんにちは"
}
flow scripts execute test.cdc

Result: "\u{3053}\u{3093}\u{306b}\u{3061}\u{306f}"

JSON形式で出力するようにすれば日本語が表示されますが、やはり普通に表示して欲しいですよね。

flow scripts execute test.cdc -o json

{"value":"こんにちは","type":"String"}

設定やオプションでなんとかなる問題ではないので、Flow CLIのコードを修正しましょう。なお、Goが必要なので、Goを事前にインストールしておいてください。

では、flow-cliのレポジトリからコードを取ってきます。

git clone https://github.com/onflow/flow-cli.git

internal/scripts/scripts.goを開いて、String()関数を見てください。

internal/scripts/scripts.go
func (r *scriptResult) String() string {
	var b bytes.Buffer
	writer := util.CreateTabWriter(&b)

	_, _ = fmt.Fprintf(writer, "Result: %s\n", r.Value)

	_ = writer.Flush()

	return b.String()
}

五行目にあるr.Valuer.Value.ToGoValue()に変えます。

	_, _ = fmt.Fprintf(writer, "Result: %s\n", r.Value.ToGoValue())

試しに動かしてみましょう。cmd/flow/main.goがコマンドの本体になります。
まずはflow.jsonを作ります。

go run cmd/flow/main.go init

次に、test.cdcを実行します。

go run cmd/flow/main.go scripts execute test.cdc

Result: こんにちは

日本語が表示されました!

Dictionary型ではどうでしょうか。

test-dic.cdc
pub fun main(): {String:String} {
    return {"あああ": "いいい"}
}
sh
go run cmd/flow/main.go scripts execute test.cdc

Result: map[あああ:いいい]

日本語は表示されたけど、Goの型が表示されてしまいました。ちょっと微妙なところではありますが、これ以上は簡単には対応できないので、今後の課題とさせて頂きます。

Discussion