ブロック ライブラリを公開する

ブロック定義のライブラリを提供するプラグインは、 Blockly コミュニティで再利用可能なブロックを お試しくださいブロック ライブラリをできるだけ汎用性と有用性の高いものにするため、Google は以下のガイドラインを策定しました。

ガイドライン

  • すべてのブロックの設置を簡単にし、 ユーザーが特定のブロックやブロックのみを設置できる可能性 できます。
    • あらゆるものを簡単にインストールできるようにする: 単一のブロック定義に必要なすべての部分をインストールする (ミューテータ、拡張機能、ミックスイン、フィールドなど)。プラグインで提供されるすべてのブロックを一度にインストールする関数を指定することもできます。
    • 特定の部分を選択できるようにする。 分割できるようにしているため、 ユーザーが独自のデータを作成するために必要なピースのみをインポートできる 同様のカスタムブロックを 追加することをおすすめします
  • プラグインで副作用を使用しないでください。
    • ブロック、フィールド、拡張機能などの要素は、プラグインの読み込みの副作用としてインストールされるべきではありません。ユーザーは、インストールするアイテムとそのタイミングを管理する必要があります。これにより、ユーザーは必要な部分のみをインポートでき、不要な部分がインストールされる心配がありません。
  • 新しいフィールドを直接インスタンス化するのではなく、JSON フィールド レジストリを使用します。

    • 非推奨 - 新しいフィールドを直接インスタンス化する:

        const myCustomBlock = {
          init: function() {
            this.appendDummyInput()
                .appendField(new Blockly.FieldNumber(123), 'NAME');
          }
        }
      
    • 推奨 - JSON フィールド レジストリ:

        export const myCustomBlock = {
          init: function() {
            this.appendDummyInput()
                .appendField(Blockly.fieldRegistry.fromJson({
                    name: 'field_number',
                    value: 123,
                  }), 'NAME');
          }
        }
      
    • フィールド レジストリを使用すると、フィールドの置き換えが 変更せずに、ブロック内で使用されているフィールドの 使用します。

  • ユーザーがすでにインストールしたアプリを前提にしないでください。

    • プラグインにカスタム フィールドやその他のプラグインが必要な場合は、登録します。 フィールド自体を install 関数で呼び出します。
    • まもなく、Blockly に、すでに登録されているアイテムをエラーなく登録できるツールが提供される予定です。それまでは、 拡張機能を登録する前に、登録済みの項目を確認する ミューテータ、ミックスイン、フィールドの 作成に使用できます
    • プラグインまたはブロックの定義で必要な前提条件や依存関係を明確にします。
  • 指定するブロックごとにジェネレータ関数を用意することを検討してください。

    • すぐに使用できるジェネレータ関数を提供すると、ユーザーはブロックの構造や設計を理解しなくても、ブロックを簡単に使用できます。独自のジェネレータを記述するか ユーザーごとに重複する作業が行われる可能性があります。
    • JavaScript は Blockly で最もよく使用される言語であるため、 使用する言語を 1 つに絞ることもできます。JavaScript をおすすめします。 Python ライブラリの実装など、特定の言語用にビルドされています。
    • 「必要なサポート」を投稿することを検討する対象言語の問題を ジェネレータ関数を実装できず、リクエストの pull リクエストを 貢献した場合に表示されます。
    • ブロックにインストール関数を指定する場合は、 オプションの generators パラメータ。ユーザーがジェネレータ インスタンスを ブロック コード ジェネレータを自動インストールすることで、 予約済みの単語の追加などの関連する処理を実行できます

        // Your plugin's install function
        export const installMyCustomBlock(generators = {}) {
          Blockly.common.defineBlocks({my_custom_block: myCustomBlock});
          if (generators.javascript) {
            generators.javascript.forBlock['my_custom_block'] = myCustomGeneratorFunction;
            generators.javascript.addReservedWords('specialReservedWord');
          }
        }
      
        // How a user may install your block
        import {javascriptGenerator} from 'blockly/javascript';
        import {installMyCustomBlock} from 'blockly-cool-blocks-plugin';
        // installs the block definition and the javascript block-code generator
        installMyCustomBlock({javascript: javascriptGenerator});
      

フィードバック

プラグインでこれらのガイドラインに従う最適な方法については、 フォーラムでお知らせくださいぜひブロックライブラリを 寄せられています

現在のところ、ブロック定義を提供するすべての自社プラグインがあるわけではありません。 ただし、新しいプラグインは追加予定であり、Google は既存の できます。