😼
Flow CLIの実行結果に日本語を表示したい
現状だと、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.Value
をr.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