블록 라이브러리 게시

블록 정의 라이브러리를 제공하는 플러그인은 재사용 가능한 블록을 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에서 가장 일반적으로 사용되는 언어입니다. 따라서 Python 라이브러리 구현과 같은 특정 언어용으로 블록을 빌드하지 않는 한 제공할 언어를 하나만 선택하는 경우에는 JavaScript를 사용하는 것이 좋습니다.
    • 생성기 함수를 구현할 수 없는 언어의 경우 '도움말 요청' 문제를 게시하고 사용자가 기여하는 경우 이러한 풀 리퀘스트를 수락하는 것이 좋습니다.
    • 블록에 설치 함수를 제공하는 경우 선택적 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});
      

의견

플러그인에서 이러한 가이드라인을 가장 잘 준수하는 방법에 관해 궁금한 점이 있으면 포럼에서 알려주시기 바랍니다. 블록 라이브러리를 확인하고 의견을 제공하고자 합니다.

현재 블록 정의를 제공하는 일부 퍼스트 파티 플러그인은 이 가이드라인을 따르지 않지만, 새 플러그인은 이 가이드라인을 따르며 기존 플러그인은 이전할 계획입니다.