inosyanのブログ

プログラム、家庭菜園、僕が興味を持ったことを書いていきます

【マイクラMakeCode】カスタムブロックの作り方 その2 ~名前空間~

f:id:inosyan:20181020183344j:plain

 前回は、カスタムブロック1のファイルをプロジェクトに追加するところまでやりました。今回は、その中身を見ていきます。

inosyan.hateblo.jp  
 
 

カスタムブロックの入れ物「namespace(名前空間2

カスタムブロックのファイル custom.ts を開きましょう。

f:id:inosyan:20181020183455g:plain
 
 
ファイルには、あらかじめカスタムブロックのサンプルコードが書いてあります。

/**
 * Use this file to define custom functions and blocks.
 * Read more at https://minecraft.makecode.com/blocks/custom
 */

enum MyEnum {
    //% block="one"
    One,
    //% block="two"
    Two
}

/**
 * Custom blocks
 */
//% weight=100 color=#0fbc11 icon=""
namespace custom {
    /**
     * TODO: describe your function here
     * @param n describe parameter here, eg: 5
     * @param s describe parameter here, eg: "Hello"
     * @param e describe parameter here
     */
    //% block
    export function foo(n: number, s: string, e: MyEnum): void {
        // Add code here
    }

    /**
     * TODO: describe your function here
     * @param value describe value here, eg: 5
     */
    //% block
    export function fib(value: number): number {
        return value <= 1 ? value : fib(value -1) + fib(value - 2);
    }
}

 
この中で、まずはじめに説明したいのは

/**
 * Custom blocks
 */
//% weight=100 color=#0fbc11 icon=""
namespace custom {
    ...
}

の部分です。  
 
 namespace(名前空間)は、変数名や関数名などが他のプログラムと重複しないようにするための仕組みですが、MakeCode(メイクコード)3では、名前空間がカスタムブロックを入れておくフォルダの名前にもなります。
 
 
コードの中の namespace custom の行の

custom

の文字が、フォルダの名前の

CUSTOM

になっていますね。

このように、名前空間を大文字にしたものが、カスタムブロックのフォルダ名になります。

f:id:inosyan:20181020183615g:plain
 
 
 でも、この「custom」という名前は良くありません。なぜ良くないかというと、ありきたりすぎて他の人も同じ名前を使うかもしれないからです。

 もしあなたが custom という名前空間foo という名前のカスタムブロックを作って公開したとします。別の人があなたの作ったカスタムブロックをプロジェクトに取り込む際、偶然その人も custom名前空間foo という名前のカスタムブロックを作っていたとしたら、名前が重複しているのでエラーが起きてしまいます。

 他の人と名前が重複しないように、名前空間は世界中で自分しかつけそうもない名前にしておきましょう。別のプログラム言語では、ドメイン4を逆にしたものにアプリ名を付けることが推奨されているものもあります。例えば イノシャンのWebページのドメインwww.inosyan.com なので、アプリ名が TestApp という名前だとすると、www を除いたドメインを逆にして、com.inosyan.TestApp名前空間になります。

 ですが、MakeCodeの名前空間は、上記の com.inosyan.TestApp のような、ドメイン名を逆にする書き方はやめたほうが良さそうです。なぜなら、カスタムブロックを入れておくフォルダの名前は、「 .(ドット)」より前の文字しか認識しないからです。

例えば com.inosyan.TestApp名前空間にしたら、
表示は COM だけになってしまいます。

f:id:inosyan:20181020183635g:plain
 
 
 これはフォルダ名だけの問題で、名前空間としては正しく機能するので、com.inosyan.TestAppcom.inosyan2.TestApp は重複することはありませんが、フォルダ名はどちらも COM で、フォルダを開くと両方のカスタムブロックが混じって入ってしまいます。 

f:id:inosyan:20181020183647g:plain
 
 
 .comで終わるドメイン名は、世界中にものすごく沢山いるので、ドメイン名を逆さにして名前空間にする方法はやらないほうが良さそうです。イノシャンの場合は、inosyan_housebuilderinosyan_moviecamera など、「inosyan」と「 _(アンダースコア)」と作品名を組み合わせることにしています。

 「inosyan」という名前は、世界には他にもいるかもしれませんが、かなり少ないと思うので重複する可能性は低いでしょう。

 名前空間に使える文字はアルファベットの小文字のみです。大文字を使うとフォルダが表示されなくなります。それに、使える記号はアンダースコアのみです。そうなると、名前の付け方は inosyan_testapp のようになります。このように、アルファベットとアンダースコアを組み合わせる書き方を「スネークケース5」と呼びます。文字列が蛇に見えることからそう呼ばれるようです。

f:id:inosyan:20181020183701g:plain
 
 
 自分だけのかっこいい名前空間を作ってみてください。  
 
 


  1. カスタムブロックとは、ユーザーが定義したプログラムブロックのこと。JavaScript(TypeScript)で書くことができ、他のプログラムブロックと同じようにならべて使うことも、JavaScriptから呼び出すこともできる。

  2. namespace(名前空間)とは、変数名や関数名などが重複しないようにするための仕組み。関数名などの名前はコンピューターがそれを特定できるようにするため、それぞれ違った名前にしなければならないが、他の人が作ったライブラリを使ったりプログラムが大きくなると、偶然同じ名前になってしまうことがある。namespaceでプログラムを囲むことにより、他のプログラムとの重複を避けることができる。

  3. MakeCode(メイクコード)とは、子供向けに開発されたプログラミング学習用のアプリ。パズルのピースのようなブロックをならべてプログラミングできるビジュアルプログラミングと、JavaScript(TypeScript)でのコーディングを両方サポートしているのが特等。マインクラフトと接続し、ゲーム内の操作をプログラミングできる。

  4. ドメイン名とは、インターネット上でWebページを特定するための住所のようなもの。例えばイノシャンのWebページのドメイン名は「www.inosyan.com」

  5. スネークケースとは、小文字とアンダースコアを組み合わせた記述方法のこと。文字列が蛇のように見えることからそう呼ばれる。例えば This is a pen は this_is_a_pen となる。