コード生成

コード生成は、ワークスペースのブロックを実行可能なコード文字列に変換するプロセスです。

コード生成は非常に重要です。ブロックが実際に実行できるようにするためです。たとえば、ブロックは算術式の評価、迷路内のキャラクターの移動、オンライン ショップの構成などを実行できます。

ブロックを直接「実行」することはできません。代わりに、コード文字列を生成し、それを実行します。

言語コード生成ツール

コードを生成するには、生成するテキストベースの言語を選択する必要があります。これは、各言語に独自のコード生成ツールがあるためです。

言語コード生成ツール(一般にコード生成ツールと呼ばれます)は、特定の言語に固有のコード生成ルールを処理するクラスです。ただし、個々のブロックに固有のコード生成ルールは処理しません。たとえば、コメントの書式設定、ステートメントのインデント、文字列の引用符などの処理を行います。

Blockly には、次の 5 つの組み込みコード生成ツールがあります。

  • JavaScript ES5
  • Python 3
  • Lua 5.1
  • Dart 2
  • PHP 7

このリストにコードを生成したい言語が含まれていない場合は、カスタム言語コード生成ツールを作成できます。簡単な例については、カスタム生成ツールを作成する Codelab をご覧ください。ここでは、JSON 言語コード生成ツールを作成します。より複雑な例については、JavaScript コード生成ツールをご覧ください。使用する組み込みブロックのブロックコード生成ツールも作成する必要があります。

ブロックコード生成ツール

各ブロックは独自のコードを生成します。ブロックを作成する場合は、サポートする言語ごとに個別のブロックコード ジェネレータを作成する必要があります。

ブロックコード生成ツールは、そのブロックのコード文字列を返す関数です。たとえば、2 つの数値を比較するブロックは 'a < b' 形式の文字列を返します。if ステートメントを表すブロックは 'if (...) {\n...\n};\n' 形式の文字列を返します。

import {javascriptGenerator} from 'blockly/javascript';
import {pythonGenerator} from 'blockly/python';

// Write block-code generators for JavaScript and Python.
javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ };
pythonGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ };

ブロックコード生成ツールは、言語コード生成ツールによって呼び出されます。

詳細については、ブロックコード生成ツールをご覧ください。

コードを生成して実行する

アプリケーションはいつでもコードを生成できます。たとえば、エンドユーザーがボタンをクリックしたときや、ユーザーが変更を加えるたびにコードが生成される場合があります。

コードを生成したら、そのコードを実行する方法を見つける必要があります。実行方法の決定はアプリケーション固有であり、Blockly の範囲外です。

詳細については、コードを生成して実行するをご覧ください。