블록 라이브러리 게시

블록 정의 라이브러리를 제공하는 플러그인은 Blockly 커뮤니티와 재사용 가능한 블록을 공유하는 좋은 방법입니다. 블록 라이브러리를 최대한 다양하고 유용하게 만들기 위해 이러한 가이드라인을 개발했습니다.

가이드라인

  • 사용자가 모든 블록을 쉽게 설치할 수 있도록 하고, 사용자가 선택한 특정 블록이나 블록 조각만 설치할 수 있도록 합니다.
    • 모든 항목을 간편하게 설치: 단일 블록 정의에 필요한 모든 조각(예: 변형자, 확장 프로그램, 믹스인, 필드 등)을 설치하는 함수를 제공하면 됩니다. 플러그인에서 제공하는 모든 블록을 한 번에 설치하는 함수를 제공할 수도 있습니다.
    • 특정 부분 선택 가능: 블록 정의의 모든 부분을 개별적으로 내보내서 사용자가 고유한 맞춤 블록을 만드는 데 필요한 부분만 가져올 수 있도록 해야 합니다.
  • 플러그인에서 부작용을 사용하지 마세요.
    • 블록, 필드, 확장 프로그램 및 기타 요소는 플러그인 로드의 부작용으로 설치해서는 안 됩니다. 사용자는 설치되는 항목과 시기를 제어할 수 있어야 합니다. 이렇게 하면 사용자는 필요하지 않은 조각이 설치되지 않을까 걱정하지 않고 필요한 조각을 가져올 수 있습니다.
  • 새 필드를 직접 인스턴스화하는 대신 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에서 오류 없이 이미 등록된 항목을 등록할 수 있는 도구를 제공할 예정입니다. 그때까지는 확장 프로그램, 뮤테이터, 믹스인 또는 필드를 직접 등록하기 전에 이미 등록된 항목을 확인하는 것이 좋습니다.
    • 플러그인 또는 블록 정의에 필요한 기본 요건이나 종속 항목을 명확히 하세요.
  • 제공하는 각 블록에 대해 생성기 함수를 제공하는 것이 좋습니다.

    • 즉시 작동하는 생성기 함수를 제공하면 사용자가 블록의 구조와 디자인을 몰라도 쉽게 블록을 사용할 수 있습니다. 자체 생성기 함수를 작성해야 하는 경우 각 사용자가 중복 작업을 실행할 수 있습니다.
    • 자바스크립트는 Blockly에서 가장 일반적으로 사용되는 언어이므로 제공할 언어를 하나만 선택하는 경우, Python 라이브러리 구현과 같은 특정 언어로 블록을 빌드하지 않는 한 자바스크립트를 사용하는 것이 좋습니다.
    • 생성기 함수를 구현할 수 없는 언어에 대해서는 '도움 요청' 문제를 게시하고 사용자가 제공하는 경우 pull 요청을 수락하는 것이 좋습니다.
    • 블록에 설치 함수를 제공하는 경우 선택사항인 generators 매개변수를 수락할 수 있습니다. 개발자가 지원하는 생성기 인스턴스를 사용자가 전달하면 블록 코드 생성기 함수를 자동으로 설치하고 예약어 추가와 같은 관련 작업을 수행할 수 있습니다.

        // Your plugin's install function
        export const installMyCustomBlock(generators = {}) {
          Blockly.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은 기존 플러그인을 이전할 계획입니다.