まっつん総研連絡用ブログ

プログラミング教育とかMSXとか。

Scratchのご先祖様・LCSI MSX-Logo

 MSXのソフトの中では顧みられることが少ない、実用ソフトをあえて紹介してみます。
 今回は、プログラミング教育の王道であるScratchのご先祖様にあたるLOGO言語、その開発環境であるMSX-Logoを紹介します。


子ども向けプログラミング教育からこの記事にたどり着いた方へ

  • 全体的には懐古のための記事ですが、「そもそもLOGOとは」フラクタル図形」の項目は、少しはお役に立てると思います。
  • MSWLogoとは異なります。
  • サンプルプログラムをいくつか載せていますが、LOGOプログラミング的に変な書き方をしているかもしれません。ご容赦ください。



教育用プログラミング言語MSX-Logo”

  • ジャンル:ソフトウェア開発環境・教育用ソフト
  • メーカー:Logo Computer Systems Inc.(LCSI)
  • 対応機種:MSX1(RAM 32K)
  • メディア:カートリッジ
  • 価格:9,800円(税別)


目次

そもそもLOGOとは

LOGOの概要

 LOGOは、子ども向けの教育用プログラミング言語として、数学者であり計算機科学者であり教育者であるシーモア・パパートによって1967年に開発されました。
wikipedia:LOGO
wikipedia:シーモア・パパート
 単純な命令の組み合わせによって画面上のカメを操作することにより、複雑で特徴的な図形を描くことができるというタートルグラフィックスによっても有名です。

タートルグラフィックスの作例

LOGOの歴史

 それは、まだ個人で気軽に購入できるようなパソコンが存在しない時代のことでした。
 コンピュータは大学や研究所などに置かれており、プログラミングは高度な知識を持つ専門家だけが行える世の中でした。
 一方で、パパートは「子どもたちは、自ら積極的に何かを構築するときにこそ、効果的に知識を構築することができる」という信念(構築主義 constructionism*1)を持っていました。*2
 そこで、子どもたちがコンピュータを利用してものづくりを行えるようにするため、子どもが利用可能なプログラミング言語を開発しました。
 それがLOGOです。*3

 とはいえ、当時は中学校に設置したテレタイプから電話回線を経由してマサチューセッツ工科大学のミニコンに接続してLOGOを利用していたような時代で、グラフィックスを操作することはできませんでした。*4
 代わりに、カメの形をしたロボット(タートル)の動きを制御するために使われるようになりました。*5
 子どもたちはLOGOという言葉でカメに話しかけることによって、自身の学びを深めることができるのです。

 1970年代後半になると、個人でも入手可能なパソコンApple II*6など)が普及し、タートルは画面の中で動きながら絵を描くようになりました。*7

タートル。MSX-Logoのガイドブックによれば「カメ君」

 1980年代には、世界の数千もの学校によって数百万人の学生がLOGOプログラミングを学びました。*8

 パッケージとして販売されたLOGO以外にも、雑誌や書籍などでタイニー版LOGOのプログラムリストが発表されるなどしました。
 中には、『子どもたちの未来を創ったプログラミング教育』(技術評論社,2022)の著者・戸塚滝登先生のように、かなり早い段階で、LOGOのプログラムを自作して教育現場に投入する先生もおられたようです。*9
子どもたちの未来を創ったプログラミング教育 ~日本最初のプログラミング教育を受けた小学生たちは一世代後にどう育ったか、プログラミングが育てた思考・創造力

MSXの学習指導への利用』(東京書籍, 1985)
BASICで400行ほどのTiny-Logoの仕様

パーソナル・コンピュータMSXの学習指導への利用―基礎から教室での実践まで

 しかし、日本では、そのまま定着するには至らなかったようです。

現在のプログラミング教育に及ぶLOGOの影響

 LOGOが世界中の学校に広がっていた1983年には、LOGOによってレゴブロックを制御する“LEGO LOGO”が開発され、現在の“LEGO MINDSTORMS”*10に繋がっています。*11

LEGO MINDSTORMS

wikipedia:MINDSTORMS
matsun-ri.hatenablog.com

 また、パパートが提唱した理念である「低い床(初心者が簡単に始められること)、高い天井(高度なことができる)」には、弟子であるミッチェル・レズニックによって「広い壁(様々なことができる)」が付け加えられ*12Scratchの理念となりました。
wikipedia:ミッチェル・レズニック
wikipedia:Scratch

Scratchの画面写真

matsun-ri.hatenablog.com

MSX-Logoとは

媒体

MSX-LogoのROM媒体

 今回扱うMSX-Logoは、Logo Computer Systems Inc.(LCSI, http://www.microworlds.com/company/profile.html )が開発、販売しました。*13

 LCSIはパパートらが設立した会社です。パソコン黎明期には、Apple IIをはじめとした各種パソコン向けのLOGOを開発、販売し、シェアを得ていました。

パッケージ

パッケージ外観表面

 パッケージには、LCSI社のロゴマークが印刷されています。

パッケージ外観裏面。MSX-Logoの特長が書かれている

 パッケージ裏面には、「低い床、高い天井」の理念が、「小学生でもこなせる使いやすさと、大学生にもチャレンジできる奥行きの深さ」という文で表現されています。

各国語版の存在

 日本語版以外にも、英語版、ドイツ語版、フランス語版、イタリア語版、オランダ語版、スペイン語版、アラビア語が存在しました。

MSX MAGAZINE永久保存版3』(アスキー)に掲載されたアラビア語版Logoシステムの広告写真(※MSX-Logoかどうかは不明)

 MSXという単一機種用のプログラムであるのに、これだけの言語の別バージョンが作られていることは、MSXが国際的に普及していた規格であることを証明しています。

(参考)『MSX2テクニカル・ハンドブック』(アスキー)よりMSXの国際化対応仕様

 その中でも、スペイン語版はアルゼンチンの学校に大々的に導入され、人気を博したとのことです。

MSXはアルゼンチンで非常に成功したが、これは「教育用コンピューター」として学校教育で国家レベルで導入されたことによる。学校教育の中でMSX-LOGO言語が教えられていた。

https://ja.wikipedia.org/wiki/MSX#%E6%97%A5%E6%9C%AC%E5%9B%BD%E5%A4%96%E3%81%AEMSX

 
 また、LCSIの公式サイトには、次のとおり書かれています。

In 1986, we also prepared the Spanish Logo vocabulary and documentation for a MSX computer, assembled by Telématica S.A. in Argentina.
Based on the MSX-Logo developed by LCSI in Canada, this computer became quite popular in Argentina, where it has been used in many schools.


 A Logo Postcard from Argentina - Logo Philosophy and Implementation - LCSI


(きっとこんな意味)
 1986年には、アルゼンチンのテレマティカ社が組み立てたMSX用に、LOGOのスペイン語命令セットとドキュメントを準備しました。
 カナダのLCSI社が開発したMSX-Logoによって、テレマティカ社のMSXはアルゼンチンで非常に人気があり、多くの学校で使用されています。


 今でも、YouTubeにて“MSX Logo”を検索すると、大量のMSXロゴマークに混ざって、スペイン語MSX-Logoの動画が見つかります。

本格的な教本

添付のガイドブック。いわゆる取説

 全108ページに及ぶ本格的なガイドブックが添付されています。
 その著者とされているのは……

「著者:シーモア・パパート」

 なんとシーモア・パパート!!
 また、日本語・編纂担当として記載されている奥村貴世子さんは、初期のLOGOプロジェクトのメンバーだった方です。*14

 MSX-Logoは、LCSIの他にヤマハブランドで発売されたものや、ブラジルでECOMブランドにて発売されたHotLogoがあるようです。

画面写真

起動画面

起動直後の画面

 起動直後の画面です。この時点でタートルが表示されています。
 LCSI直々の製品であることと、日本語(ひらがな)に対応していることがわかります。

言語の切り替え

日本語のエラーメッセージ

 上の写真*15の例では、

  1. 「こんにちは」 という名前の手続きが未定義である
  2. 「100+20+3」という引数だけで、手続きが指定されていない
  3. 「へんすう」という名前の変数が未定義である

 というエラーメッセージが、日本語で表示されています。

 デフォルトでは日本語モードになっていますが、select 0 とタイプすることで英語モードに切り替わります。

 先程の例を英語モードで試すと、対応するエラーメッセージも英語で表示されます。

英語のエラーメッセージ

 日本語モードと英語モードの違いはメッセージが表示される言語が切り替わるだけで、プログラムそのものは日本語と英語を混ぜて書くことが可能です。*16

 なお、日本語モードに戻すには、select 1とタイプします。

MSX-Logoのコマンド(一部)

 日本語のコマンドと英語のコマンドの対照です。
 戻し値がない指示を「コマンド」、戻し値がある指示を「レポータ」*17と呼びます。

 ちょっとだけ残念なのは、英語のコマンドは小文字にしか対応していない点です。子どもたちに触れてもらうに際して、一般的なキーボードには大文字しか書いていませんし、そもそも小さな子は小文字が読めない、というのが図書館での経験則です。*18

ダイレクトモードによるプログラムの実行

 ダイレクトモードで、図形を描くプログラムを入力してみました。

ダイレクトモードでのプログラミング

 このプログラムを実行すると、次のとおり表示されます。

実行結果(GIF動画)

 MSXはテキスト画面とグラフィック画面が独立していないにもかかわらず、テキストとグラフィックが混在して表示されている様子がわかります。この部分は、後ほど詳しく見ましょう。

 なお、このプログラムは、英語で書くとこうなります。*19

make “a 1
repeat 117 [
  fd :a
  rt 88
  make “a :a + 1]

龜の形

 LOGOといえばタートルですが、MSX-Logoではカメ以外のタートル*20も用意されています。

プリセットされたキャラクターたち

 「かたちなおそう」コマンドでシェープ・エディタを呼び出し、好きな形に編集することができます。

シェープ・エディタ

 猫の背中にぶちをつけてみました。

編集している様子

 エディタによる書き換えは、すぐに反映されます。

表示中のタートルに反映される

 ここで、それぞれのタートルたちの縦方向の位置を詰めてみます。

スプライトが欠けている様子

 すると、左から5つめ以降のタートルは、表示が欠けてしまっています。
 横方向に4つまでしか表示できないことから、このタートルたちの表示には、MSXが持つスプライト機能を利用していることがわかります。

テキストとグラフィックの混在表示

 先ほどのプログラムを実行後にプログラムリストを表示させると、MSX-BASICでは実現していない*21テキストとグラフィックが混在した状態で表示されます。

テキストとグラフィックが混在表示されている

 さらに、この状態でテキストをスクロールさせても、グラフィックは元の場所に残ったままです。

テキストがスクロールしても、グラフィックは元の場所のまま

 おそらくSCREEN2をうまく使っているのでしょうが、MSXでこれを実装するあたりに、とてつもないこだわりを感じます。

フラクタル図形

 LOGOといえばタートルグラフィックスである、と言われています。
 また、LOGOといえば再帰処理である*22、と言われています。
 ということは、LOGOといえばフラクタル図形である、ということになります。

 ここでは、Scratchで楽しく学ぶアート&サイエンス 改訂第2版』(日経BP社)の第4章「フラクタル図形を描いてみよう」にて扱われている図形を、MSX-Logoで描いてみます。
 本をお持ちの方は、MSX-LogoとScratchのコーディングにおける表現の違いを、ぜひ比較してみてください。

シェルピンスキーのギャスケット

シェルピンスキーのギャスケット(GIF動画)

 シェルピンスキーのギャスケットは、三角形の中に三角形の入った三角形が入っている…という図形です。*23
wikipedia:シェルピンスキーのギャスケット

 日本語のプログラムは、次のとおりです。

プログラムリスト(日本語)

解説

  • 手続き「シェルピンスキー」:初期処理後に、指定された再帰処理の回数を手続き「さんかく」に渡す
  • 手続き「さんかく」:指定された一辺の長さと再帰処理の回数で、シェルピンスキーのギャスケットを描画する

 再帰処理を繰り返す回数によって、図形の複雑さが変化します。
 回数が1回だと単なる三角形ですが、回数を増やすにつれて、複雑な三角形になっていきます。

実行結果(再帰:1回)
実行結果(再帰:2回)
実行結果(再帰:3回)
実行結果(再帰:5回)

 なお、このプログラムは、英語で書くと次のようになります。

to sierpinski :rep
rg
setbg 4
penup
setc 2
lt 90
fd 160 / 2
lt 90
fd 160 / 2
seth 90
pendown
triangle 160 :rep
end

to triangle :len :rep
if :rep = 0
[]
[
  repeat 3
  [
    fd :len
    lt 120
    triangle :len / 2 :rep - 1]
]
end

コッホ曲線

コッホ曲線(GIF動画)

 コッホ曲線は、直線の一部にツノを作り、そのそれぞれの直線の一部にツノを作り、そのそれぞれの直線の一部にツノを作り……といった図形です。
wikipedia:コッホ曲線

 日本語のプログラムは、次のとおりです。

プログラムリスト(日本語)

解説

  • 手続き「コッホきょくせん」:初期処理後に、指定された再帰処理の回数を手続き「せん」に渡す
  • 手続き「せん」:指定された一辺の長さと再帰処理の回数で、コッホ曲線を描画する

 再帰処理を繰り返す回数によって、図形の複雑さが変化します。
 回数が1回だと単なる直線ですが、回数を増やすにつれて、複雑な図形になっていきます。

実行結果(再帰:2回)
実行結果(再帰:3回)
実行結果(再帰:4回)
実行結果(再帰:5回)

 また、この線を3つ組み合わせると、雪の結晶のような図形になります。

三角形の各辺をコッホ曲線にする

 なお、このプログラムは、英語で書くと次のようになります。

to koch :rep
cs
setbg 4
setc 2
penup
lt 90
fd 120
lt 90
fd 80
lt 90
pendown
line 240 :rep
end

to line :len :rep
if :rep = 1
[fd :len]
[
 line :len / 3 :rep - 1
 lt 60
  line :len / 3 :rep - 1
 rt 120
 line :len / 3 :rep - 1
 lt 60
 line :len / 3 :rep - 1]

樹形図

樹形図(GIF動画)

 枝分かれを繰り返すと、複雑な樹木ができあがります。

 日本語のプログラムは、以下のとおりです。

プログラムリスト(日本語)

解説

  • 手続き「き」:初期処理後に、指定された再帰処理の回数を手続き「えだ」に渡す
  • 手続き「えだ」:指定された枝の長さ、再帰処理の回数、枝分かれの角度で、枝を描画する

 再帰処理を繰り返す回数によって、図形の複雑さが変化します。
 回数が1回だと単なる直線ですが、回数を増やすにつれて、複雑な図形になっていきます。

実行結果(再帰:2回)
実行結果(再帰:4回)
実行結果(再帰:6回)
実行結果(再帰:8回)

 なお、このプログラムは、英語で書くと次のようになります。

to tree :rep
cs
setbg 4
setc 2
pu
bk 80
pd
branch 30 :rep 25
end

to branch :len :rep :deg
if :rep = 0
[]
[
 fd :len
 lt :deg
 branch :len * 0.9 :rep - 1 :deg
 rt :deg * 2
 branch :len * 0.9 :rep - 1 :deg
 lt :deg
 bk :len]
end

余談

懺悔

 プログラミング歴は短くないつもりなのですが、LOGOという言語を知ったのは、プログラミング教育に関わり始めたここ数年のことです。
 というのは、僕がパソコンに触れ始めた頃は、当時唯一の情報源であった雑誌などでは既にLOGOが取り上げられることがなくなっていたのです。

 その後、大学に進学して図書館を覗くと、まとまった数のタートルグラフィックスについての本がありました。
 その頃は、パソコン関連書籍の陳腐化の速度が凄まじかったので、ほんの6,7年前に出版されたと思しきそれらの本を見ながら

「古い本があるなぁ」

と思ったものです。

 1回生の時のプログラミング実習はMS-DOS版のQuickBASIC ver.4.5で、タートルグラフィックスに触れることはありませんでした。
 そこで、仲間内で先生に

「タートルグラフィックスってなんですか?」

とたずね、LOGOとタートルグラフィックスについてざっと教えてもらいました。

 しかし、中にめんどくさい学生がいて

 「それ、BASICでいいんじゃないですか?」

 とか主張し始めるわけです。
 教育の観点からLOGOの意義について説明する先生も、ついには呆れ果てて

 「君はちゃうけど、そういうのが必要な人もおんねん……」

 はい、めんどくさいとはのことです。ごめんなさい。

 あの時の先生には大変お世話になったので、お会いすることがあったら、(他にもやらかしはいっぱいあるのですが)まずそのことを懺悔したいと思います。

突然のMSX3ネタ

 鳴り物入りで学校教育に投入された、いわゆるGIGAスクール端末は、国の補助金が1台あたり5万円以下に限られていたこともあり、家庭での宿題の際には、重いOSの割に合わない低いスペックに悩まされている子どもと保護者の話も聞きます。*24

 そんなGIGAスクール端末も、数年後には更新時期を迎えることが予想されますが、その際には国の補助制度がないと言われています。
 零細自治体にとっては頭の痛い問題となりそうです。

 この記事を書いている現在、MSX3が発表間近と言われています。
 発売がいつ頃になるのか、現時点では予想できませんが、コアは書き換え可能なFPGAで実装され、時代によって進化していくマシンであるようです。

 GIGAスクール端末が更新時期を迎えるころには、品質が安定していると思われますので、ぜひ学校教育特化型バージョンで日本の教育現場に殴り込み、平和と安寧をもたらしていただきたいと思います。*25

MSX MAGAZINE永久保存版3』(アスキー)に掲載されたソ連MSXの特集記事

 なにしろ、MSXには、かつてアルゼンチンやソビエト連邦で教育用コンピュータとして一世を風靡したという実績があるのですから。

*1:社会構築主義とは異なります。

*2:『ライフロング・キンダーガーテン 創造的思考力を育む4つの原則』(日経BP社,2018)p.77

*3:『ライフロング・キンダーガーテン』p.78

*4:『子どもたちの未来を創ったプログラミング教育』(技術評論社,2022)p.251-253

*5:『ライフロング・キンダーガーテン』p.78

*6:GIGAZINEプログラミング言語「LOGO」のApple II向けソースコードが公開される』 https://gigazine.net/news/20181005-apple-ii-source-code/ これはMIT版であり、LCSI版とは異なります。

*7:『ライフロング・キンダーガーテン』p.78

*8:『ライフロング・キンダーガーテン』p.79

*9:『子どもたちの未来を創ったプログラミング教育』p.20-22

*10:MINDSTORMSの名前自体が、パパートの著書のタイトル『マインドストーム☆〔新装版〕☆: 子供,コンピューター,そして強力なアイデア』に由来しています。

*11:『ライフロング・キンダーガーテン』p.83-85

*12:『ライフロング・キンダーガーテン』p.118-119

*13:MSX-”という接頭語から、最初はアスキーの製品だとばかり思っていました。アスキーMSX向け製品群が“MSX-DOS”, “MSX-C”, “MSX-Write”などのように“MSX-”がつくどころか、他機種だと“Multiplan”というソフトがMSXだと“MSX-PLAN”だったりしたからです。matsun-ri.hatenablog.com

*14:『子どもたちの未来を創ったプログラミング教育』p.255 なお、世間的にはパパートの名著『マインドストーム』の日本語訳者として有名です(が、僕はまだ読んだことがありません……)。

*15:画面写真のモアレを抑止するため、背景色を暗い青(カラーコード4)に変更しています。

*16:というより、日本語に対応していないコマンドがあるので、必然的にそうなります。

*17:Scratchの拡張機能JavaScriptで作成する際に、値を返すタイプのブロックであることを示す定数の名前は BlockType.REPORTER だったりします。

*18:今なら、小文字がわかる歳の子はScratchを使っちゃいます。

*19:いかにはてなブログといえど、LOGOのソースコード表示には対応していなかったので、LISPで代用しています。

*20:我ながら、ちょっと言っている意味が分かりません。

*21:MSX2+以降のBASICで漢字モードにし、ワークエリアをごにょごにょすれば実現できた……気がします。

*22:ガイドブックでも、通常ならループを使いそうな処理を再帰で書いていたりします。

*23:プログラミング実習室の子どもたちにこれを見せたところ、口々に「トライフォース…」「トライフォースだ…」と言っていました。僕が小学生の時の同級生に見せても同じように言うと思います。

*24:そもそも家に持ち帰って活用できている時点で勝ち組かもしれません。持ち帰りできない学校も多いらしいので…

*25:その際は、いかに教師にとって扱いやすい管理コンソールを用意できるかがキモかと思われます。