今回は、mBotプログラミングシリーズ(mBlock編)の第11回です。
ここでは、mBlockで「ブロック定義」を活用して、より効率的でわかりやすいプログラムを作成する方法をご紹介します。
この機能を活用することで、プログラムの見通しが良くなり、エラーを減らすことができます。
また、ブロックを再利用することで作業効率が大幅に向上します。
本回では、具体的な例を通じてブロック定義の基本的な使い方を学び、自分だけのカスタムブロックを作れるようになることを目指します。
この記事で分かること
- ブロック定義とは何か?
- カスタムブロックの作成方法と、プログラムでの活用の仕方
- 『引数』と活用の仕方
mBlockとは?『スクラッチ(Scratch)』との違い
mBlockは、小学校や学習塾で取り入れられている『スクラッチ(Scratch)』をベースとしたビジュアルプログラミングツールです。
スクラッチの基本的な操作感を引き継ぎながら、ロボットやハードウェアの制御に特化しているため、mBlockを使えば、プログラミング初心者でも簡単にロボットプログラミングを始めることができます。
ブロック定義とは
ブロック定義とは、自分で独自のブロックを作成し、それに名前を付けることでプログラムを整理整頓できる機能です。
一度作成したブロックは、通常のブロックと同じように何度でも使用できます。
mBlockで使用するブロック
『ブロック定義』パレット
『ブロック定義』の作り方
まず、ブロック定義パレットにある『ブロックを作る』ブロックを押します。

『ブロックを作る』パネルが表示されます。
分かりやすいブロック名を入力します。ここではブロック名を「test」とします。

引数を追加できますが、ここでは一旦追加せずに「OK」を押します。

スクリプトエリアに『定義 test』のブロックと、ブロック定義パレット内に『test』の動作を実行するブロックが現れます。
変数『test』ブロック

『定義 test』の下に、testで実行するプログラムを作っていきます。

作成したプログラムtestを実行する箇所で『test』ブロックを接続します。
引数とは
引数とは、ブロックに渡す追加情報のことで、外部と値をやりとりするための変数のことです。

mBlockでは3種類の引数『数値』『テキスト』『真偽値』を追加できます。
mBotの速度やLED点灯時間といった「数値」をやり取りする場合に使います。
LEDパネルに表示する文字列など「テキスト」をやり取りする場合に使います。
※mBotのプログラミングでは、頻度はそれ程多くありません
「真偽値」をやり取りする場合に使います。
ブロック定義内で、条件分岐や繰り返し処理、待ち処理を使用している場合に真偽値を引数として渡すことができます。
『ブロックを作る』パネルで、各引数の名称を決めることができます。

簡単な動作プログラム作成
ブロック定義は、プログラムを見ただけでは内容を理解しにくいような処理を、分かりやすくまとめることができます。
以下は、『LEDを虹色に光らせる』プログラムです。
これは第4回の例題4で取り上げたものです。
- プログラム全体
- ブロック定義詳細
- ブロック定義を使わない場合(例題4)









上記のプログラムは例題4で作成したものより、可読性(プログラムの読みやすさ)、汎用性(様々なプログラムに利用、応用できること)が向上してることが分かると思います。
【例題】ブロック定義を作ってみよう
例題1:簡単な組み合わせ動作をブロック定義にまとめる
- 例題
- 解答例(プログラム全体)
- 解答例(ブロック定義)
以下のライントレースのプログラムにおいて、直進、右折、左折、後退時の各動作をブロック定義にまとめてみましょう。


直進、右折、左折、後退時のmBotの動きとLEDライト点灯をブロック定義にまとめることで、プログラム全体がすっきりして理解しやすくなりました。
今回のような簡単なプログラムでは、プログラム全体量はほぼ変わりませんが、より複雑なプログラムで何度も直進、右折、左折、後退ブロックを使う場合は、プログラム全体量も削減することができます。




例題2:引数を追加する
- 例題
- 解答例(プログラム全体)
- 解答例(ブロック定義)
例題1のプログラムにおいて、ブロック定義に引数を追加して、ブロック定義を呼び出す際にmBot速度を指定できるようにしましょう。

「ブロックを作る」画面で、各ブロック定義に「引数を追加(数値)」します。
必要に応じて、ラベルのテキストも追加します。
ここでは『%』を追加して、速度の数値を設定することを明示的に示します。




各ブロック定義では、引数で渡された『速度』をmBotの速度の部分に設定します。
例題3:引数から計算する
- 例題
- 解答例(プログラム全体)
- 解答例(ブロック定義)
以下の障害物回避プログラムにおいて、回避時の動作『右向きに動いて1秒待つ動作』をブロック定義にしてみましょう。
なお、以下の条件を設けます。
- 引数『mBotの速度』を1つ追加する
- 右回転する際は、mBotの回転速度によらず、回転角度が同程度となるようにする
- 例)待ち時間は、速度50%時:1秒、速度100%時:0.5秒の様に、速度が速いほど右回転の時間を短くすると角度は同程度となります


『mBotが右に回転する動作』と『待ち処理』をブロック定義にまとめます。
引数として速度を追加します。

引数として渡された『速度』を、右回転する速度に設定します。
待ち時間は、引数『速度』を使って計算式を作成します。
解答例の計算式は、『待ち時間=1.5-0.01×速度』としています。
これは、『速度50%時:1秒、速度100%時:0.5秒』を例にして、mBot回転速度が速くなるほど待ち時間が短くなるようにしています。
これにより、異なる速度の引数を設定されたとしても、右向きに回転する角度はおおよそ同じになります。
まとめ
ブロック定義を使うことで、プログラムの効率と可読性が格段に向上しました。
この機能を活用することで、初心者から上級者まで、誰でも簡単に複雑な処理を整理し、再利用可能なプログラムを作成できるようになります。
今回学んだ技術は、現実世界のプログラミングにも応用可能な重要なスキルです。
これを応用して、より大規模なプロジェクトに挑戦してみましょう!
次回は、『待ち処理』を取り入れたプログラムに取り組んでみます。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。