0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事は、Xcratch の独自拡張機能を、VSCode の「built-in port forwarding」を活用して一時的に準備するという話です。

●Xcratch
 https://xcratch.github.io/index-ja.html

2026-06-07_01-11-26.jpg

●xcratch/xcratch.github.io: Extendable Scratch3 Programming Environment
 https://github.com/xcratch/xcratch.github.io

今回用いるもの

VSCode の built-in port forwarding

Xcratch の独自拡張機能を準備するために、以下の記事に書いていた「VSCode の built-in port forwarding」を用います。それにより、ローカルに用意した独自拡張機能を Xcratch から読み込めるようにします。

●VSCode の「built-in port forwarding」と「ローカルの WebSocketサーバー」を組み合わせたインターネット側からのアクセス - Qiita
 https://qiita.com/youtoy/items/9b72d6ecb34ba55fdabe

●VSCode の新機能「built-in port forwarding」を使いローカルサーバーにインターネット側からアクセス - Qiita
 https://qiita.com/youtoy/items/56e48c84d6a2f0549155

また、これを適用して利用するのは機能をテストする時の、一時的な対応という想定で進めます。

Xcratch の独自拡張機能を準備する

Xcratch の独自拡張機能のコード

Xcratch の独自拡張機能を PC内で準備します。具体的には、 my-extension.mjs というファイルを用意します。その際、以下のリポジトリにある内容を参考にしました。

●xcratch/xcx-example: example extension for Xcratch
 https://github.com/xcratch/xcx-example

今回用意したコードは、以下のとおりです。ここで用意するブロックは、2つの数の足し算と 3つの数の足し算の 2つです。

const EXTENSION_ID = 'xcratchAddThree';
const EXTENSION_NAME = '3つの数の足し算';
const EXTENSION_DESCRIPTION = '3つの数を足す';
const ADD_THREE_TEXT = '[A] + [B] + [C]';
const ADD_TWO_TEXT = '[A] + [B]';
let extensionURL = 'my-extension.mjs';

const iconURL = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 80 80'%3E%3Crect width='80' height='80' rx='18' fill='%2357c957'/%3E%3Cpath d='M40 18v44M18 40h44' stroke='white' stroke-width='10' stroke-linecap='round'/%3E%3C/svg%3E";

const toNumber = value => {
  const number = Number(value);
  return Number.isNaN(number) ? 0 : number;
};

const entry = {
  name: EXTENSION_NAME,
  extensionId: EXTENSION_ID,
  extensionURL,
  collaborator: 'xcratch',
  iconURL,
  insetIconURL: iconURL,
  description: EXTENSION_DESCRIPTION,
  tags: ['calculation'],
  featured: true,
  disabled: false,
  bluetoothRequired: false,
  internetConnectionRequired: false
};

class ExtensionBlocks {
  constructor(runtime) {
    this.runtime = runtime;
  }

  getInfo() {
    return {
      id: EXTENSION_ID,
      name: EXTENSION_NAME,
      extensionURL,
      blockIconURI: iconURL,
      showStatusButton: false,
      blocks: [{
        opcode: 'add-two',
        blockType: 'reporter',
        blockAllThreads: false,
        text: ADD_TWO_TEXT,
        func: 'addTwo',
        arguments: {
          A: {
            type: 'number',
            defaultValue: 1
          },
          B: {
            type: 'number',
            defaultValue: 2
          }
        }
      }, {
        opcode: 'add-three',
        blockType: 'reporter',
        blockAllThreads: false,
        text: ADD_THREE_TEXT,
        func: 'addThree',
        arguments: {
          A: {
            type: 'number',
            defaultValue: 1
          },
          B: {
            type: 'number',
            defaultValue: 2
          },
          C: {
            type: 'number',
            defaultValue: 3
          }
        }
      }],
      menus: {}
    };
  }

  addTwo(args) {
    return toNumber(args.A) + toNumber(args.B);
  }

  addThree(args) {
    return toNumber(args.A) + toNumber(args.B) + toNumber(args.C);
  }

  static get EXTENSION_ID() {
    return EXTENSION_ID;
  }

  static get EXTENSION_NAME() {
    return EXTENSION_NAME;
  }

  static get extensionURL() {
    return extensionURL;
  }

  static set extensionURL(url) {
    extensionURL = url;
    entry.extensionURL = url;
  }
}

export { ExtensionBlocks as blockClass, entry };

ローカルサーバーを準備する

ここで、PC内で以下のコマンドを実行し、ローカルサーバーを準備します。この時、Xcratch から以下の内容を読み込めるように --cors のオプションをつけておきます。

npx http-server . -p 8000 --cors

上記のコマンドを実行すると、以下のようにローカルサーバーが立ち上がります。

2026-06-07_01-08-24.jpg

ローカルサーバーを VSCode の built-in port forwarding と組み合わせる

上記のローカルサーバーを、VSCode の built-in port forwarding と組み合わせます。以下のように、ローカルサーバーのポートを「表示範囲: 公開」で転送します。

2026-06-07_01-08-51.jpg

この時に、「転送されたアドレス」に出ている URL は、この後で使います。

Xcratch上で拡張機能を読みこむ

先ほど、VSCode の built-in port forwarding で準備した「転送されたアドレス」に出ている URL を、Xcratch上で読み込みます。読み込みを行うのは、以下の「拡張機能を読み込む」という名前の拡張機能です。

2026-06-07_01-09-29.jpg

この読み込みを行った後の Xcratch の状態は以下となります。

2026-06-07_23-56-38.jpg

上記のブロックを用いて、問題なく足し算が行えるかを確認してみます。以下のように、2つの数の足し算と 3つの数の足し算が行えていることが確認できました。

2026-06-07_23-57-41.jpg

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?