今回は、mBotプログラミングシリーズ(mBlock編)の第13回です。
ここでは、mBlockでリストを作る方法とその使い方を学びます。
リストは、複数のデータをまとめて扱うための便利なツールです。
例えば、センサーから取得したデータを記録して後で分析する、または特定の順序で動作を繰り返すプログラムを作る際に役立ちます。
本記事では、リストの基本的な操作から応用的な使い方までを丁寧に解説します。
リストを使いこなせるようになると、プログラムの柔軟性が大幅に向上しますので、ぜひ挑戦してみてください!
この記事で分かること
- リストの基本的な仕組み
- リストに関するブロックと、その作成方法
- リストを活用したプログラムの作成方法
mBlockとは?『スクラッチ(Scratch)』との違い
mBlockは、小学校や学習塾で取り入れられている『スクラッチ(Scratch)』をベースとしたビジュアルプログラミングツールです。
スクラッチの基本的な操作感を引き継ぎながら、ロボットやハードウェアの制御に特化しているため、mBlockを使えば、プログラミング初心者でも簡単にロボットプログラミングを始めることができます。
リストとは
リストは、複数のデータをひとまとめにして保存するための変数の一種です。
一つのリストには、数値や文字、センサーの値などを順番に追加していくことができます。
また、リスト内のデータは、インデックス(位置)を使って取り出したり、更新したりできます。
例えば、以下のようなデータをリストとして扱うことができます:
- 光センサーのデータ(例:345.5, 687.0, 954.8)
- 操作手順のリスト(例:「前進」「回転」「停止」)

リストを使うことで、プログラムをより効率的に構築することが可能です。
mBlockで使用するブロック
『変数』パレット
変数とリストを作るブロックが入っています。
今回は『リスト』を作ります。
『リスト』の作り方
まず、変数パレットにある『リストを作る』ブロックを押します。

『新しいリスト』パネルが表示されます。
分かりやすいリスト名を入力します。ここではリスト名を「test」とします。

リスト「test」を全てのスプライトで使うか、このスプライトのみで使うかを選択します。
「OK」を押すと、リスト「test」に関するブロックが生成されます。

リスト『test』ブロック

リストそのものを表し、参照する際に使用します。


リスト『test』に、入力欄に入力した情報を追加します。
既にリストに他の情報がある場合は、最後尾に追加されます。


リスト『test』の1番目の情報を削除します。
2番目以降に情報がある場合は、それぞれ1つずつ情報の位置が変わります。


リスト『test』の全ての情報を削除します。

リスト『test』の1番目に情報を挿入します。
挿入した以降の情報の位置は、1つずつ変わります。


リスト『test』の1番目の情報を置き換えます。
挿入した以降の情報の位置に変化はありません。


リスト『test』の1番目の情報を参照します。


リスト『test』の中で「なにか」が入っている位置を表します。


リスト『test』の情報の数を表します。


リスト『test』の中に「なにか」という情報がある場合は『真(True)』、ない場合は『偽(False)』を返します。



リストをステージ上に表示、非表示にします。

この表示はブロックパレットのリスト『test』の横に表示されているチェックボックスでも切替可能です。

簡単な動作プログラム作成
以下は、『光センサーの値を1秒おきに合計24秒分、リストに保存する』プログラムです。

『光センサーの値』というリストを作成し、ブロック『光センサーの値』をリストに追加します。
この処理を、1秒おきに合計24回行うことで、24個の情報を持ったリストが作られます。
このプログラムは、1日の気温を記録しておくプログラムに応用することができます。
1時間おきに、合計24時間分の気温をリストに保存して、後から気温推移を確認することが可能です。
【例題】『リスト』を作ってみよう
例題1:保存したリストの情報を使う
- 例題
- 解答例
先ほど示した『光センサーの値を1秒おきに合計24秒分、リストに保存する』プログラムを活用して、『リストに保存された24回分の光センサーの値の平均値』を求めましょう。
※平均値を変数に格納して完了とします。
mBotから出力する必要はありません。

プログラムの前半は、上で示したプログラムと同様です。
新たに変数『(繰り返しの)回数』と『平均値』を作成します。
光センサーの値をリストに格納した後、リストの中身を1つずつ変数『平均値』へ加算していきます。
この処理をリストの長さ(=24)だけ繰り返し処理とすることで、リストの情報全てを加算することになります。
全て加算した後、その値をリストの長さ(=24)で割ることで平均値を求めます。
例題2:入力と出力のリストを活用する
- 例題
- 解答例(プログラム全体)
- 解答例(初期化処理)
以下のライントレースプログラムを、リストを使うことで条件分岐ブロックを使わないプログラムに変更してみましょう。

なお、mBotを右(左)向きに動かすブロックは、次の設定をすることで、異なるブロックでも同じ動きをさせることができます。


ライントレースセンサー値、左タイヤ速度、右タイヤ速度の3つのリストを作ってみましょう。

初期化処理にて、次の通りリストを作成します。
『リスト』 ライントレースセンサー値 | 『リスト』 左タイヤ速度 | 『リスト』 右タイヤ速度 | ライントレースセンサー値 の意味 |
---|---|---|---|
0 | 50 | 50 | 両方とも黒 |
1 | -50 | 50 | 左:黒 右:白 |
2 | 50 | -50 | 左:白 右:黒 |
3 | -50 | -50 | 両方とも白 |
繰り返し処理では、『左タイヤを〇%、右タイヤを〇%・・・』のブロックのみ使用します。
左右のタイヤ速度の算出は、次の通り求めます。
①リスト『ライントレースセンサー値』と実際のライントレースセンサー値が一致する場所を検索
②リスト『左タイヤ速度』『右タイヤ速度』から、①で検索した場所の数値を使用する
その結果、ライントレースプログラムの繰り返し処理の中身は、『左タイヤを〇%、右タイヤを〇%・・・』ブロックのみの、非常に簡潔な処理とすることができます。
※変数『左タイヤ』『右タイヤ』は画面の都合上設けています。実際のプログラムには不要です。
mBotのライントレースプログラムのような、元々簡潔なプログラムの場合は条件分岐のプログラムでも問題ありませんが、プログラム量が膨大な場合は、今回のようにリストにまとめた方が、プログラムを簡略化させ、プログラムミスを削減させることに役立ちます。

まとめ
今回の内容では、リストの基本操作と応用例を学びました。
リストを使うことで、データの記録や動作のシーケンスを簡単に管理できるようになります。
特に、センサーの値を記録して分析するプログラムや、複雑な動作を制御するプログラムでは、リストが非常に役立ちます。
今回で、mBotプログラミング例~基本編~は終了となります。
mBotの基本操作からセンサーの活用、条件分岐、ループ処理、そして今回のリストの使い方まで、幅広いプログラミング技術を学んできました。
この講座を通じて得た知識を活かして、自分なりのプログラムを作成し、さらなる挑戦を続けてください。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。