UIFlow 用のカスタムブロックファイルを生成する
カスタムブロック設定 JSON ファイルと MicroPython ファイルから UIFlow 用のカスタムブロックファイル(M5B ファイル)を生成します。
また,既存の M5B ファイルからカスタムブロック設定 JSON ファイルとMicroPython ファイルを生成することもできます。
私は 64 ビット版の Windows 11 上で VS Code,Git Bash,Python v3.10.4 を使って開発・動作確認をしています。
以下のコマンドを実行してインストールします。
pip install git+https://github.com/3110/uiflow-custom-block-generator
カスタムブロックの設定用 JSON は以下のような構造になっています。
{
"category": "ATOM_Babies",
"color": "#115f07",
"blocks": [
{
"name": "init_atom_babies",
"type": "execute",
"params": [
{ "name": "ATOM Babiesを初期化する", "type": "label" },
{ "name": "_eye_color", "type": "variable" },
{ "name": "_cheek_color", "type": "variable" },
{ "name": "_background_color", "type": "variable" }
]
},
{
"name": "rgb",
"type": "value",
"params": [
{ "name": "色を指定する", "type": "label" },
{ "name": "_r", "type": "number" },
{ "name": "_g", "type": "number" },
{ "name": "_b", "type": "number" }
]
}
]
}
category
: UIFlow Block Maker の Namespace に対応します。color
: ブロックの色を#RRGGBB
で指定します。blocks
: カスタムブロックを定義します。ここに現れる順番でブロックが並びます。
blocks
で指定するカスタムブロックは以下のよう定義します。
name
: ブロックのコードを読み込むためのファイル名。例えば"name": "rgb"
の場合,設定用 JSON と同じディレクトリにあるrgb.py
を読み込みます。type
: ブロックの種類を指定します。値を返すブロック(value
)と実行するブロック(execute
)の 2 種類指定できます。params
: ブロックに渡す引数を定義します。ここに現れる順番通りに定義されます。
params
で指定する引数は以下のように定義します。
name
: 引数の名前。type
がlabel
の場合はブロックに表示される文字列type
: 引数の型。以下の 4 種類が用意されています。label
: ブロックに表示するラベル。複数指定可能string
: 文字列number
: 数値variable
: 変数。他のブロックとも接続できます。
examples/atom_babies
に設定のサンプルを用意してあるので参考にしてください。
以下を実行すると,設定用 JSON と同じディレクトリにatom_babies.m5b
を生成します。
python -m uiflow_custom_block_generator examples/atom_babies/atom_babies.json
--target_dir
(-t
)オプションで M5B ファイルの出力先ディレクトリを変更できます。以下の例の場合,カレントディレクトリにatom_babies.m5b
を生成します。
python -m uiflow_custom_block_generator examples/atom_babies/atom_babies.json -t .
注意:このスクリプトで生成された M5B ファイルは UIFlow Block Maker で正常に読み込めません(長い Python コードが途中で切られてしまう問題があります)。
以下を実行すると,M5B ファイルと同じディレクトリにatom_babies
ディレクトリを作成し,atom_babies.json
と MicroPython ファイルを生成します。
python -m uiflow_custom_block_generator example/atom_babies/atom_babies.m5b
--target_dir
(-t
)オプションで出力先ディレクトリを変更できます。以下の例の場合,カレントディレクトリにatom_babies
ディレクトリを生成します。
python -m uiflow_custom_block_generator examples/atom_babies/atom_babies.m5b -t .
- ブロックの引数を参照する
${}
が Flake8 で Invalid Syntax(E999)になるため,.vscode/settings.json
で E999 を抑制しています。 - MicroPython の
rgb
モジュールを使うコードには# type: ignore # noqa: F821
(undefined name を無視する)を付けてください(Pylance と Flake8 の警告抑制)。