スモウルビー  3.0に実装されたMeshのご紹介

# 1 スモウルビーとScratchについて
まずスモウルビー について紹介するためにScratchについて紹介します。
知っている方は2：Meshについてまで飛んでも大丈夫です。

### Scratchとは
Scratchはスクラッチ財団が、メディアラボのライフロングキンダーガーテングループの協力の元、開発している児童教育向けのプログラミング言語です。
だれでも無料で使用できます。皆様感謝して利用しましょう。
私も感謝して使っています。ありがとうございます。
https://scratch.mit.edu

### スモウルビーとは
さらにScratchはそれ自体のプログラム自体が無料で公開されているので
これを改造、改良させることが誰でもできます。(OSSと言います。知らないなら調べてみましょう。)
スモウルビーはScratchを改造して作られたものです。
島根県に住んでいる高尾さんが作ってくれました。
スモウルビーはScratchのプログラムをRubyで**も**作れるようになっています。
もちろんブロックを組み合わせるタイプのプログラムも作れます。
Scratchとスモウルビーとの大きな違いはそこになります。
この点以外ではこの2つは同じものになります。

なのでこのスモウルビーはScratchから作られたのでScratchと互換があります。
基本的にScratchのプログラムはスモウルビーで動かせますし、逆もできます。
Scratchで遊んだことのある方は何も勉強しなくても遊べると思います。
もともとのScratchユーザがRubyでの遊び方や文法を理解することを想定しています。
あくまで想定なので自由に使ってください。

もちろんスモウルビーも無料で使えます。皆さんガンガン使ってください。
使ってくれると私も高尾さんも大喜びします。
https://smalruby.app



# 2 Meshについて
ここからが本題です。
高尾さんがScratch1.4で実装されていたMeshと同じような機能をスモウルビーに実装しました。
（実装形式が本家と少し異なるそうです。）
このMeshは、ほかのパソコンで動いているスモウルビーと通信を行う機能です。
高尾さんがここで説明されています。
https://github.com/smalruby/smalruby3-gui/wiki/Mesh
先生向けに要点を抜粋すると

>これらの機能を使えば、スモウルビーを利用して中学校の技術科の
>「D(2) ネットワークを利用した双方向性のあるコンテンツのプログラミング」の授業を行うことができます。

プログラムを目的にしている人向けに要約すると
>お友達のスモウルビーと通信するプログラムがつくれるよ

ということです。

プログラムの機能としては、ほかのパソコンのスモウルビーにメッセージや変数を送れます。
プログラミング例を紹介します。
触って覚えることも多いので実際に作ってみるのをお勧めします。
なおこのサンプルはパソコンで実行することを想定しています。
（ウインドウズとかマックとかですね）

メッシュはネットワーク越しにパソコン同士で通信して使用するものだと思われてることでしょうが、
パソコン一台でも行うことができます。
ネットワーク通信か？と言われれば感覚的に違うような気もしますがネットワーク通信です。
ブラウザのページを２つ使って動作を確認しましょう。

# 3：サンプルプログラム実行準備
Meshの実行方法ですが、まずURLを図のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/76a1dc2f-31be-da41-fa93-590bf3d6a1f2.png)


fkengoでなくてもあなたの住んでるところの郵便番号とかでも大丈夫です。10文字までしか使えないそうなので注意!。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/c08a3b2d-f741-d63d-12da-030bd4fe910a.png)
赤矢印の先をクリックして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/72af9009-b57a-760a-d51e-4cda416c594e.png)
メッシュを選びましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/a62eb2c3-908a-7eaa-3ffd-682685b5fe36.png)
ここで接続するをえらぶとメッシュのホストを作ったことになります。

別のページもしくはパソコンから同じURLにアクセスしてみると（さっきのURLをコピーして別のタブ、ウインドウもしくはパソコンでアクセスしましょう。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/31a9d92c-84de-f6e2-24e9-e7fa64112a60.png)
先ほどとは少し異なり、こういう風に見えます。下の方の「メッシュに参加する」を選びましょう。
これでメッシュを使用した通信の準備ができました。
この状態でサンプルプログラムを作成しましょう。
ちなみにサンプルはどっちがホストでも参加している方でもいいです。
私は特に意識してないです。
ホストが切断すると、参加している全てのスモウルビーがMeshから切断されます。このため、先生が利用する場合は先生がホストになるとよいでしょう。


## 3-1 ねこラジコン
上のウインドウをクリックしてから（アクティブにしてから）
十字キーを操作すると下のウインドウのネコが動くプログラムになっています。
これは上のウインドウのメッセージを下のネコが受け取った形になります。
このように違うウインドウのスモウルビーどうしでメッセージを使った通信が行えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/d9859216-a736-fd28-c7ea-fe9c3267c199.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/27450ff7-940f-05c1-aa2f-e4c392285cb8.png)


## 3-2 チャット
開隆堂さんのやってみようプログラミングのチャットを実装してみると
こんな感じになります。
このプログラムではワンちゃんをクリックしてワンちゃんに「わんわん」と伝えると、ネコちゃんも「わんわん」と言っています。
変数こたえを互いに送受信できるプログラムになっています。
このように開隆堂さんのやってみようプログラミングで紹介されているようなことと同じようなことができます。試してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/8d46b30e-8efb-52e8-186c-58dea16a84e6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147871/65ce158c-2409-8f6b-e7ff-3e038c025d1d.png)




# 4:補足
~~2021年現在、すべてのホストは設定をURLに設定をしない限り無制限に通信を行ってしまいます。
今回fkengoと設定したところです。ここを設定しなかった場合、知らない人と通信をしてしまうかもしれない設定になっています。高尾さんが今日プログラムを変更して、同じローカルネットワーク（≃おなじWifi）の郵便番号内のみ通信可能になります。（異なる仕様になるかもしれません。）
それまでは扱いに気を付けてください。~~
2021年05月12日追記
　アップデートにより上記の状態が解決され、同じグローバルIPを振られているネットワーク内でのみ通信が可能になりました。これにより隣の学校やほかのCoderDojo、世界の誰かと通信してしまうという状況はなくなりました。大体の場合、学校内やクラス内でなら通信が可能だと思います。
　
　

# 5:宣伝
このスモウルビーのですが、本が一冊存在しています。
小学生向けの学習指導案が乗っており、授業でも使えるような構成になっています。
もちろんスモウルビーの本なのでscratchでも同じように指導ができるようになっています。
残念ながらMeshに関する説明は一切ありませんが。

私が去年修士論文に苦しみながら高尾さんと一緒に書いたので、本屋さんで見かけたら手に取るだけでいいので見てください。
アマゾンの他、楽天でも買えますし店頭でのお取り寄せも可能です。

https://www.nikkeibp.co.jp/atclpubmkt/book/20/P60510/

https://www.amazon.co.jp/%E5%B0%8F%E5%AD%A6%E7%94%9F%E3%81%8B%E3%82%89%E6%A5%BD%E3%81%97%E3%82%80-%E3%81%8D%E3%82%89%E3%81%8D%E3%82%89Ruby%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%AB%98%E5%B0%BE-%E5%AE%8F%E6%B2%BB/dp/4822286398

# 6:宣伝２
https://qiita.com/fujimurakengo/items/e7405f067a2dfce357f6
meshを使ったプログラムの作例の記事も書きました。良ければ読んでください。

# 参考文献
http://www.kairyudo.co.jp/contents/02_chu/gijutsu/h33iko/yattemiyo.pdf
https://github.com/smalruby/smalruby3-gui/wiki/Mesh

# プログラミング例
https://qiita.com/fujimurakengo/items/e7405f067a2dfce357f6