農業の６次産業化・スマート化を担うＡＩ技術者育成プログラムの開発・実施

テキスト開発報告書

1

１．概要
１．１

背景

本事業では、農業ＡＩのカリキュラムに応じたテキストを開発する。本年度は、その中でも、初年次教育の核のひとつであるプログラミング教育の教材を取り上げて開発する。
ＡＩのシステム開発では圧倒的に Python ⾔語が⽤いられており、⼤きな開発コミュニテ
ィとライブラリ群があるため、今後もその傾向は変わらないと予想される。ＡＩ開発においては、単にコンピュータ⾔語としての Python を学べばよいわけでなく、アルゴリズムを習得し、さらにアルゴリズムと⼈間の思考との関係、⾔い換えれば⼈間が⽬的を理解しやすいプログラムの記述⽅法についても学んでおく必要がある。
イスラエルでは、「CodeMonkey」というプログラミング教材が開発されており、アメリ
カとイスラエルを中⼼に利⽤が進んでいる。すでに⽇本語版も開発されており、⽇本の⼩中学校などで利⽤されている。本事業に参加している清⾵情報⼯科学院と九州技術教育専⾨
学校は、我が国でこの教材を先駆的に採⽤して利⽤している専⾨学校である。
「CodeMonkey」は CoffeeScript というプログラミング⾔語を通じてアルゴリズムを習得する教材である。CoffeeScript の⽂法は Python に似ており、AI の基礎教育に適した側⾯が
ある。
１．２

⽬的

ＡＩの基礎として、Python ⾔語をもとにアルゴリズムと⼈間の思考との関係を整理して習得できるテキストを開発する。その為に、既存の STEM 教材である「CodeMonkey」について整理する。
次年度以降、参加校等で活⽤しながら教材の改善が進められるよう重要な情報から順にリリースしていく。なお、後に述べるように「CodeMonkey」が⽇本向けに供給されないな
どの事態に備えて、代替となる教材を開発するのに必要な情報も収集しておくことにする。
１．３

実施概要

（１）CodeMonkey の概要の整理- CodeMonkey の学習上の特徴・学習者数・サブシステム・教師⽤管理画⾯などについてインターネット・資料・カタログなどから情報収集- CodeMonkey の今後について⽇本代理店へのヒアリング（２）CodeMonkey の授業実施結果の整理- CodeMonkey 授業実施講師へ授業でのつまずき箇所やその対策についてのヒアリ
ング- CodeMonkey の学⽣の実施結果の整理- ヒアリング記録をもとに、CodeMonkey のチャプター別につまずき箇所とその対策をまとめる2

（3）CodeMonkey のカリキュラムの整理- 画⾯および教師⽤ガイドをもとに、CodeMonkey の学習項⽬とその意味を整理- CodeMonkey の学習項⽬について、委員会から指定された他のコンピュータ⾔語（C ⾔語、Java）との⾔語仕様の違いについて整理- CodeMonkey の学習項⽬や予約語等について、英語と⽇本語と相違・機能の組み合わせの視点でつまずき箇所を整理- つまずき箇所について対策を整理- 委員会から指定された代替システムの候補（Pyxel）および実施⽅法の候補（⽇本
語プリプロセッサ、Moocs への接続）について情報収集
１．４

実施成果

CodeMonkey を⽤いたプログラミング教育は、実施２校において良好な学習結果を挙げている。従来の講師が板書とプリントとコンピュータ演習を組み合わせて教育するのに⽐べて、はるかに⾼い習得結果が得られている。
しかしながら、⽇本語の語順とコンピュータ⾔語や英語の語順の違い、関数名などが英⽂法の影響を受けている影響、CodeMonkey の教育課程のステップの粗さなどが原因で習得の歩留まりが下がっていることがわかった。
また、他の授業で⾏っている C ⾔語や Java ⾔語などとの⽂法の違いから、せっかく
CodeMonkey で⾔語を習得できても、それが応⽤できていない者もいることがわかった。
同様に、CodeMonkey で習得しているアルゴリズムが他の授業で⾏う流れ図などで表現されるアルゴリズムと同じものであることが理解できていないものもいることがわかった。
これらのつまずきポイントについて橋渡しを⾏えば、CodeMonkey によりコンピュータ
⾔語の習得の歩留まりを⾶躍的に改善できる可能性がある。本開発において、この橋渡し教
材の基礎をつくった。次年度に実証授業を⾏う。
また、CodeMonkey は、2018 年 12 ⽉中国の TAL グループに 22 億円で買収されたと発表された。⽇本代理店の J21 によれば当⾯⽇本語版のサポートが⾏われ⽇本での流通には変化なしとのことであった。しかし、より⻑期的に⾒れば、CodeMonkey に依存することは教材供給ストップなどのリスクを抱えることになる。
本開発において、Pyxel 上に CodeMonkey クローンを構築するという仮説のもと、その基本的な情報を整理した。次年度その開発可能性を探る。

3

２．CodeMonkey の概要
２．１

CodeMonkey とは（１）コンセプト「コードモンキーのストーリーは、サルの「モンタ」がゴリラにバナナを奪われてしまう
ところから冒険が始まります。友だちのカメやヤギと協⼒して道中様々な障害物に遭遇しながらバナナを獲得していきます。例えば、茂みで道がふさがれていたり、ネズミに邪魔されたり、ときにはカメの背中に乗って川の対岸を⽬指します。しかし、モンタは⼈間の⾔語を理解できません。効率よくバナナを獲得するには、問題点と解決策を⾒つけ、コンピューター⾔語の「コード」で表現しなければなりません。関数や繰り返し処理を使ってモンタに指⽰を出しながら、プログラミングの基礎を学習します。
」（CodeMonkey カタログより）

図１

基本画⾯

図２

指⽰画⾯

（２）教材としての CodeMonkey
CodeMonkey は、ゲーム仕⽴てのプログラミング学習教材である。ゲームとして表現す
れば、RPG の⼀種である。「ゲームの攻略を通してコーディング演習を⾏っていくタイプ」

4

の学習コンテンツである。中⼼となる「コードの冒険」は次のような構成となっている。
ゲームを進んでいくために、コンピュータ⾔語を段階的に習得していく。半完成のコードが学習者に⽰され（図１）、システム側から指⽰がある（図２）。学習者はそれをヒントにプ
ログラムを書いて実⾏すると、画⾯上の主⼈公がプログラムの通りに動く。⽬的は主⼈公が画⾯上にあるすべてのバナナを取ることである。⽬的を達するとそのチャレンジ（問題のこと）はクリア（合格）になる。プログラムはシステムによって評価され（図３）、適切なア
ドバイスが与えられる（図４）。for や if といった⼀つの学習項⽬について、約１０題の問
題（チャレンジ）を解いていく。問題は徐々に難しくなるがステージの全チャレンジを解き終わると、次の学習項⽬に移る。チャレンジの中には、学⽣がコードをゼロからすべて⾃分で書かせることで、それらを覚え理解しているかを確認するアセスメント（評価）チャレン
ジもある。全部で 17 の学習項⽬があり、合計２１０題の問題（チャレンジ）を解く。チャ
レンジの地図（図５）があり、⾃分の進捗が確認できる。応⽤問題は「スキルモード」と呼ばれている。スキルモードまで解けば、全部で４２０題以上の問題を解くことになる。なお、教師が学習者を集中的に管理できる管理画⾯（図６）があり、進捗状況の確認や評価の確認などができる。

図３

システムによる評価

図４

アドバイス

図５

ステージマップ

図６

管理画⾯「コードの冒険」の１チャレンジは３から５分で解けるように設計されており、１レッス
ンは約１０チャレンジ（メインモード）なので、メインモードだけなら３０から５０分、ス
キルモードもするなら６０から１００分である。１７レッスン全体にかかる学習時間は合計で最短 10 時間半から 35 時間である。

5

（３）コンピュータシステムとしての CodeMonkey
コードモンキーの対象としている⾔語や学習項⽬、動作環境などについては、表１の通りである。
表１

CodeMonkey の概要

⾔語／ 学習スキル

CoﬀeeScript ／オブジェクト、引数、変数、配列、ループ、FORループ、
UNTILループ、関数、IFとIF ELSE⽂、ブーリアン、AND/OR、ファンク
ションコールなど

対応機器

インターネットに接続可能なWindows、Mac、タブレット※スマートフォンには未対応。

推奨ブラウザWindows、Mac：Firefox、Chrome、Safari、Internet Explorer
タブレット：Chrome、Safari※タブレットは、古いモデル（2014年以前発売）では⼗分なスピードが出ない場合がある。

対応⾔語

⽇本語、英語、ロシア語、中国語（簡体字）、メキシコスペイン語、中国語（繁体字）、アルゼンチンスペイン語、スペイン語、韓国語、ユダヤ語、アラビア語、ポルトガル語、タイ語、ベトナム語、インドネシア語、
タガログ語、ミャンマー語、トルコ語、カンボジア語、ラオ語、全20⾔語。この他にコミュニティによって翻訳された10⾔語がある。

構成

メインモード（本編）／スキルモード（練習編）
チャレンジ・ビルダー（オリジナルのコーディング課題を作成）
ゲーム・ビルダー

レッスン数

レッスン１７、チャレンジ420以上（タブレットでは、チャレンジ165、ス
キルモード8-15まで対応。）

レベル／対象年齢

未経験者から中級者／ 9歳から学習時間（⽬安）

1つのチャレンジは3〜5分程度で解けるように設計されている。
※１レッスン

メインモードだけなら30から50分、スキルモードもするな

ら60から100分。合計17レッスンで構成されており、最短10時間半から35
時間程度。
サポート

3つ星の解答例ページの提供。

「CoffeeScript」は、Ruby ⾵・Python ⾵のオブジェクト指向プログラミング⾔語である。
JavaScript を⾃動⽣成するためのスクリプト⾔語。JavaScript の半分近いコード量でセキュ
アかつ⾼性能な JavaScript のコードに変換して使⽤できる。
（４）CodeMonkey による学習の特徴
a. 学習進度がひと⽬で分かる

6

210 以上ある学習内容をカテゴライズしてマップ上に「⾒える化」しているので、学習進度がひと⽬で分かる。進捗が⼀⽬で分かりやすいと、⽬標も⽴てやすく、効率的な学習が期待できる。
b. 結果が分かりやすい
書いたプログラムは、モンタの動きとなって即座に画⾯上に出⼒される。ミスのある
コードを書けば、ゲームをクリアすることができないため、簡単に「問題点」や「改善策」を⾒つけられる環境になっている。
すぐに結果を⾒ることができることは、すぐに答え合わせができるという意味でもあり、効率的に学習を進めることができる。もちろん、正答のコードも⽤意されている。
c. 学習コンテンツの追加
CodeMonkey の「コードの冒険」には、現時点で「210」以上のチャレンジ（問題）がある。今後も新しいチャレンジが追加されていくとアナウンスされている。「コードの冒険」以外に、「ゲームビルダー」というコンテンツも提供されており、その追加・拡充もアナウンスされている。
d. 独学だがひとりではない
モンタやそれ以外の個性的なキャラクター達がミスを正し、コードの品質を評価し、アドバイスしてくれる。
e. 環境を選ばない
CodeMonkey はブラウザ上で動作するので、コンピュータにソフトウェアなどをインストールする必要はない。また、CodeMonkey のチャレンジはそれぞれ３〜５分程
度に設計されているので、⽇々の隙間時間にプログラミングが学べる。但し、スマートフォンには対応していない。
２．２

運営主体

（１）開発元
コードモンキー・スタジオは、イスラエルのテルアビブ市で 2014 年に設⽴されたスター
トアップ企業で、学校教育⽤のプログラミングゲームの開発と運営を⾏ってきた。
CodeMonkey の開発元である。CodeMonkey は、同国の⼩中学校 1700 校に標準教材として導⼊され、⽶国、英国、フランス、中国など全世界でユーザー数は 800 万⼈を超えた（CodeMonkey HP、2019 年 3 ⽉確認）。年齢層は⼩学⽣から 70 歳まで様々である。
（２）⽇本代理店
ジャパン・トゥエンティワン（以下、J21）は、CodeMonkey の⽇本代理店である。1992
年 9 ⽉に創業し、”イノベーションを市場化する”を掲げ、イスラエルを中⼼に世界最先端のハイテク企業の技術や製品のビジネス展開を⽇本で⾏っている。

7

（３）中国の TAL グループによる買収
コードモンキー・スタジオは 2018 年 12 ⽉に、中国の北京に本社をおく NASDAQ 上場企業である教育サービス会社の「TAL Education Group」によって買収された。買収⾦額は2000 万ドル（約 22 億円）だった。TAL Education Group は、中国の 40 以上の都市でラー
ニングセンターを運営する教育技術会社で、230 万⼈以上の学⽣にサービスを提供している。TAL は、1,800 万⼈以上のユーザーを擁するオンライン学習プラットフォームも運営している。同社は時価総額 167 億ドルの会社である。買収後も、CodeMonkey は引き続き独⽴した⼦会社として機能し、中国およびその他の市場向けに研究開発を⾏うとしている。
出典：TAL Education Group Buys Codemonkey for $20 Million
https://www.calcalistech.com/ctech/articles/0,7340,L-3751307,00.html

China's TAL Education buys Israeli learning start-up Codemonkey
http://global.chinadaily.com.cn/a/201812/05/WS5c0765a8a310eff30328f371.html

J21 によると、TAL による買収は⽇本市場へは影響がなく、今後も少なくとも数年はこれまで同様のサポートや商品の供給が⾏われるとのことである。
２．３

CodeMonkey の学習コースの種類（１）コードの冒険
CodeMonkey の中⼼的なコンテンツである。コンピュータ⾔語である CoffeeScript の⾔語とアリゴリズムを段階的に学ぶ。基本を学ぶ「メインモード」と、応⽤問題を解く「スキルモード」がある。コンピュータプログラマを⽬指す場合、両モードを学んでおくのがよい。
１７レッスンは次のように構成され、それぞれ約１０チャレンジで構成されていえる。
表２

コードモンキーのコードの冒険のレッスン構成

No タイトル（概要）メインモードスキルモード1

はじまりの森（コード⼊⼒の基本）

10

11

2

オブジェクトの平原（オブジェクトの概念）

10

10

3

ループ・アイランド（loop）

10

10

4

バリアブル・バレー（variable）

20

20

5

アレイの沼（array）

10

10

6

フォーの森（for）

15

15

7

ファンクション牧場（function）

15

15

8

アンティル砂漠（until）

15

15

9

イフの北国（if）

10

11

10 雪の町オアエルス（or else）

8

8

11 ブーリアンの雪⼭（boolean）

20

21

12 城下町ノット（not）

6

6

13 コンパリソン・ストリート（comparison）

8

9

8

14 リターン・アベニュー（return）

15

15

15 成功への鍵

14

14

16 ネズミを逃がしたのは誰？

6

617 クリックしてね！

15

15

計

210

214

チャレンジでは、右側にコーディング画⾯、左側にバナナと主⼈公モンタが表⽰される。
同時に何をすればよいのか、指⽰やヒントが表⽰される。

図７

図８

チャレンジの画⾯

すこし複雑になったチャレンジの画⾯（２）ゲームビルダー「チャレンジをつくる」は⾃前のチャレンジをつくれるコース。トードーの算数は、初歩的な算数の確認ができるコースである。距離や⾓度などでつまずく学⽣の学習に利⽤でき9る。トリビアチャットボットは、Python でチャットボットをつくるコースである。メッセージが英語なので利⽤勝⼿が悪い。Moon Lander では物理が学べるが、まだ英語モードしかない。その他のコースはゲームづくりの⽅法を学ぶコースである。ゲームづくりそのものが⽬的の場合、情報系専⾨学校では他にも代替的な⼿段があり、あえて使う価値は低い。
a. チャレンジをつくる
内容「コードの冒険」のチャレンジを作成することができる。作成したチャレンジは友達や先⽣と共有できる。
b. トードーの算数（基礎、距離、⾓度、掛け算）

内容
加算、減算、測定、コーディングを組み合わせたコース。基本の１時間のコース、距離について学ぶコース、分度器で⾓度を測るコース、掛け算の基礎を練習するコースがある。いずれもゲーム仕⽴てになっている。各コースは２０チャレンジ。
c. トリビアチャットボット
内容
基本的なチャットボットのプログラミングを学べる、およそ 1 時間のコース。Python
⾔語によるコース。サルのモンタ・チャットボットが出すトリビア（⾖知識）を問う質問に、ユーザーが回答、チャットボットが正否を判定して、チャットの最後に正答数に応じたメッセージを⾃動的に返す、という簡単なチャットボットの作り⽅を学ぶ。コード・チャットボットの簡略版。演習数１６。
コースは⽇本語化されているものの、チャットのメッセージの本体が英語で、⽇本語には対応していない。
d. コード・チャットボット
内容
単語当てゲームをしてくれるチャットボットをプログラミングする。⼈気のプログラ
ミング⾔語 Python をマスターできる。演習数 70 以上。ライセンスの関係で評価できなかった。
e. Moon Lander
内容
コーディングしながら物理学を学ぶ。 Moon Lander は、物理ベースのゲームを構築する⽅法を学ぶコース。このゲームでは、宇宙船を安全に⽉⾯に着陸させるために、コー10

ドと 6〜9 年⽣（⽇本の⼩６から中学）の物理学の概念を使⽤する。演習数 17。まだ⽇
本語版がない。
f.プラットフォーマー
内容
衝突時のアクションなど、ゲーム作成の基本を学ぶ。演習数３５。プラットフォーマー
コースを簡略化した「ゲームデザイン」コースもある。演習数１５。
学習スキル
キーボードで⾃機スプライトを動かす、ゲーム背景の編集、ゲームを横スクロール可能にする、敵キャラを無限ループで動かす、スコアの計上、パワーアップアイテムの作成、など
g.フロッガー内容
タブレットやスマートフォンでも遊べるゲームを作成する。演習数３０。
学習スキル
スワイプで⾃機スプライトを動かす、敵キャラが画⾯外に消えていくような効果、⾃機の強制移動、関数によるコードの整理、ライフの減少、アイテムによるライフの追加、など
h.スプライトアニメーション
内容
画像と、ビジュアルの連動性を学習できる。演習数２６。
学習スキル
新しいスプライトシートの作成、フレームの複製、アニメーションの定義、アニメーシ
ョンの開始・停⽌、フレームを⾃分で描く、フレームレートの設定、など
i.ゲームをつくる
内容
f, g, h の 91 のステップで学習したスキルを使って、⾃分でオリジナルゲームを作る。
作成したゲームは友達や先⽣をはじめ、インターネットにつながる全ての⼈と共有可能で、PC やタブレット、スマートフォンでプレイできる。テンプレート６種。
２．４

CodeMonkey の管理画⾯（管理者⽤ダッシュボード）（１）グループ
学習者をグループ化して管理できる。クラス単位で学⽣を登録して管理する。

11

図９

グループ画⾯a. Lessons
最近増えた画⾯。教案と標準的な学習時間が表⽰される。コンテンツのロックとその解除ができる。各チャレンジへのショートカットがある。リファレンスカード、登場するキャラ
クターのレビューがある。教案などは英語である。

図１０

レッスン画⾯

b. ⽣徒管理学⽣のアカウント管理をする画⾯。アカウントの作成、CSV による⼀括アップロード、
グループコードの共有、パスワードのリセット、アカウントの ON/OFF（アーカイブ、学
習記録は保存されるが学⽣はコンテンツにアクセスできなくなる）、アカウントの移動、ア
カウントの削除、ができる。

12

図１１

⽣徒管理画⾯

c. コースどのコースを有効化・無効化するか選択できる。

図１２

コース画⾯

d. 進捗管理
学⽣の進捗の管理ができる。授業中にどのレッスンまで学⽣に進捗を許可するか「進捗制限（ロック）」ができる。ステージは学習項⽬別にレッスンとしてまとめられている。学⽣がコードをゼロから書くことで定着状態が確認できるアセスメントチャレンジがどれなのかも明⽰されている（チャレンジ番号が⻩⾊で明⽰）。チャレンジ番号をクリックすると模範解答が表⽰される。学⽣の学習状況は、「★」によって表され、⾊とアイコンにより評価が５段階でわかる（星３，星２，星１、失敗、トライしていない）。

13

図１３

進捗管理画⾯

学⽣の進捗表は、学⽣の名前順、進捗順にソートできる。進捗表を CSV でダウンロード
することも可能である。
「★」をクリックすると、学⽣の書いたコードを確認できる。これにより、より詳細に何でつまずいたのか確認できる。
e. 評価⼀覧
学⽣の評価を 10 段階でレッスン別に⼀覧表⽰できる。評価⼀覧はダウンロード可能。

図１４

評価⼀覧画⾯

f. ショールーム
学⽣が作成したゲーム作品やチャレンジ作品が表⽰される。
g. My Classrooms
グループ別に学⽣数、週間および⽉間アクティブユーザー数が表⽰される。クラスデータの CSV 出⼒、学⽣の⼀括移動、クラス名の変更ができる。

図１５

マイクラスルーム画⾯

14

（２）My Activities
教師個⼈がコンテンツへアクセスするショートカット。進捗状況も表⽰されている。

図１６

マイアクティビティ画⾯（３）My Games
教師個⼈が作成したゲームが表⽰される。
（４）My Challenges
教師個⼈が作成したチャレンジが表⽰される。
（５）アチーブメント
教師個⼈が獲得したバッジが表⽰される。バッジの獲得には各レッスンの全チャレンジを「★」３つでクリアしなければならない。

図１７

アチーブメント画⾯

15

（６）Discover
世界中のユーザーが作成したゲームやチャレンジが表⽰される。⾃分がつくったものも、ここで公開することができる。

図１８

ディスカバー画⾯（７）教師⽤のツール
次のツールが⽤意されている。
a. 英語の資料
以下の８つのツールがあるがいずれも英語の資料である。
① Getting Started（コードモンキー全体のイントロダクション、英語）② Lesson Plans（教案、英語）③ Hour of Code（アワーオブコード、各コンテンツのイントロダクション、英語）④ ビデオチュートリアル（動画による解説、英語）⑤ New Features（最新情報、英語）⑥ Certificates（修了証書、英語）⑦ Questions（FAQ、英語）⑧ Media（マスメディアに載った記録、教室に貼るポスター、いずれも英語）
b. カリキュラムガイド
英語資料の①、②、③に対応すると考えられる。カリキュラムガイドは⽇本語である。内容はチャレンジ 105 までである。コンピュータ⾔語がわかっている教師であれば、⼀通り
⽬を通しておけばよい。内容は、⼩中学校での展開が想定されている。ソフトウェア開発の専⾨家を⽬指す場合、このガイドでは不⼗分である。
⽬次は以下の通り。

16

図１９

カリキュラムガイドの⽬次

c. リファレンスカード
カリキュラムガイドに含まれている。
d. 登場キャラクターガイド
カリキュラムガイドに含まれている。
e. 模範解答
カリキュラムガイドには含まれておらず、進捗管理画⾯からアクセスする。
（８）学習者⽤のツール
a. ヘルプ（学習スキルの解説）
主要な関数や予約語の解説。

17

b. よくあるご質問
学習前のよくある質問への応答。
c. ブログ
⽇本語版の最新情報。
https://codemonkey.jp/cm_news/
d. Twitter
⽇本語版の最新情報。
https://twitter.com/codemonkey_jp
e. Facebook
英語版の最新情報。
https://www.facebook.com/CodeMonkeySTU/（９）その他の情報
a. 攻略動画
Youtube を「CodeMonkey」で検索すると、プレイ画⾯が多数アップされている。
例えば、1-200 の全チャレンジを★３でクリアした動画。
https://www.youtube.com/watch?v=wVSv1dw2aDM
b. CoffeeScript の情報
コードモンキーに使われている CoffeeScript の情報については、この記事が参考になる。
教育向けプログラミング⾔語としての CoffeeScript18https://qiita.com/Gord_4/items/5415c90671c8cc3c92e4
この記事によると、CodeMonkey に登場する「整数.times」というループは、CoffeeScriptの⾔語仕様にはなく、CodeMonkey 専⽤の命令である。
２．５

CodeMonkey の費⽤（１）個⼈ライセンス
管理⽤画⾯は付属しない。５ライセンス以上の購⼊で割引がある。
a. コードの冒険
30 ステージまで無料
年間ライセンスは初年度 6,480 円、2 年⽬以降は 4,320 円
プレイ可能なコース
・ コードの冒険 Part 1 & 2 & 3（全 420 ステージ）・ チャレンジを作る
b. ゲームビルダー
年間ライセンス 6,480 円
プレイ可能なコース
・ プラットフォーマー
・ フロッガー・ スプライト作成
・ ゲームをつくる
c. コードの冒険&ゲームビルダー
年間ライセンス 12,960 円
プレイ可能なコース
・ a,b のすべてのコース
d. コード・チャットボット
年間ライセンス 3,240 円
プレイ可能なコース
・ コード・チャットボット（全 74 エクササイズ）（２）法⼈向けライセンス
予備校、学習塾、パソコンスクール、語学学校、その他⼀般企業などが対象。管理者⽤ダッシュボード（教師アカウント）が付属する。
エントリー

アドバンス

￥2,430（税込/１名）￥6,480（税込/１名）

6 カ⽉

1年

145 ステージ

420 ステージ19

コードの冒険 Part 1 & 2

コードの冒険 Part 1 & 2 & 3（メインモードのみ）

チャレンジをつくる

教師アカウント ＋ ⽣徒アカウント

同左

最低購⼊数：⽣徒 10 名以上

同左※4 カリキュラムガイド（￥2,160/税込・冊）（３）学校向けライセンス
学校法⼈や地⽅⾏政の教育組織などが対象。管理者⽤ダッシュボード（教師アカウント）が付属する。
ライセンス内容は法⼈向けと同様だが、価格がオープン価格となっている。

20

３．CodeMonkey の授業の実施結果
本事業に参加している清⾵情報⼯科学院と九州技術教育専⾨学校は、我が国でこの教材を先駆的に採⽤して利⽤している専⾨学校である。この度、その実施結果を整理し、良好な結果が得られているのか、問題があるとしたら何が原因でどう対策すればいいのか、その⽅向性を明らかにする。
実施結果をまとめるに先⽴って、CodeMonkey の学習項⽬を簡単に整理しておく。そのうえで、実施校の担当講師にインタビューし、実態を探る。
３．１

CodeMonkey の学習項⽬

実施結果をまとめるに先⽴って、CodeMonkey の学習項⽬を簡単に整理した。
表１

CodeMonkey の学習項⽬

チャレン レッジ

スン

名称

1 step，turn0〜10
2 turnTo，カメ
11〜20

主な処理

意味

step 10

10歩進む

turn 4545°向きを変える

turn right

右を向く

turnTo banana

バナナの⽅に向きを変える

turtle.turnTo banana

カメがバナナの⽅に向きを変え

turtle.step 10

る
カメが10歩進む

3 timesループ
21〜30

3.times ->左を向く、5歩進む

turn left

を3回繰り返すstep 54 変数
31〜50

a = 10=の値を代⼊する

step ab = distanceTo banana

51〜60

5 配列
6 forループ

61〜75
7 関数
76〜90

beavers[0].step 10

ビーバー[0]が10歩進む

step distanceTo bananas[1]バナナ[1]の距離進む

for b in bananas

バナナの⽅に向きを変える

turnTo b

バナナの距離進む

step distanceTo bをbananas[0]〜順に繰り返す

goto = (a) ->関数の定義

turnTo a
step distanceTo a
8 untilループ

91〜105

until near match

マッチに近づくまで

turnTo match

マッチの⽅に向きを変える

step 1

1歩進むを繰り返す

21

表１

CodeMonkey の学習項⽬（つづき）

チャレン レッ
ジ

スン

名称

9 if⽂

主な処理
if banana.frozen()

106〜116
10 if else⽂

ヤギがバナナの場所に⾏きgoat.hit()

ヤギが氷を砕く

if banana.green()else

ヤギがバナナの場所に⾏きサルがバナナの場所に⾏く

until bear.sleeping() andクマとトラが眠るまでtiger.sleeping()待つ

wait()

125〜145もしバナナが緑⾊の場合はそうでない場合はgoto banana
11 and，or

もしバナナが凍っている場合はgoat.goto banana

goat.goto banana

117〜124

意味

クマが眠るか、遊ぶまで

until bear.sleeping() or待つbear.playing()wait()
12 not146〜151

if not banana.rotten()goto banana

もしバナナが腐っていない場合
はバナナの場所に⾏く

13 <，==
152〜160

if health()<70
goto healthZone

回復場所に⾏きuntil health()==100

体⼒が100になるまで

wait()
14 戻り値
161〜175

もし体⼒が70より少ない場合はreturn no待つ
定義された値を返す

return yes
return not crow.watching()
15 onKey

176〜189

onKey = (key) ->if key == 'w'

Wキーを押した場合
1歩進む

step 1
16 onMouseMove
190〜195

onMouseMove = (pos) ->マウスのX軸とY軸の定義

bat.setX pos.x
bat.setY pos.y
17 onClick

196〜210

hippo.onClick = () ->カバをクリックするとmonkey.turnTo hippo

サルがカバの⽅を向き

monkey.toss()

サルが投げる22

３．２

九州技術教育専⾨学校（１）九州技術教育専⾨学校
ａ．概要
九州技術教育専⾨学校（きゅうしゅうぎじゅつきょういくせんもんがっこう）は、熊本県⼈吉市と熊本市に学校を置く専⾨学校。略称「KTEC」「九州技専」。
コンピュータ技術をベースとした情報処理システム・組込みシステム・CG デザイン・医療情報・医療事務の分野で活躍する⼈材を育成・輩出している。
毎年多くの検定試験合格実績を持ち、特に情報処理技術者国家試験（基本情報技術者試験
等）には⼒を⼊れており、県下専⾨学校内でも常に上位の成績を上げている。TOPPERS プ
ロジェクトの特別会員になっている。
設置法⼈

学校法⼈⾚⼭学園

理事⻑

⾚⼭武興

副理事⻑・校⻑

⾚⼭聖⼦

ｂ．沿⾰
1954 年（昭和 29 年）- ⾚⼭講師養成所として創設。
1961 年（昭和 36 年）- 熊本県知事認可、⼈吉⼥⼦専⾨学校となる。
1976 年（昭和 51 年）- 熊本県で最初の専修学校認可校となる。家政専⾨課程被服学科、家政⾼等過程被服学科設置。
1986 年（昭和 61 年）- ⼯業専⾨課程情報処理科、コンピュータ秘書科設置。
1986 年（昭和 61 年）- 九州技術教育専⾨学校に名称変更。
1991 年（平成 3 年）- 学校法⼈⾚⼭学園に設置者変更認可、学科名変更（⼯業専⾨課程は情報システム科、情報処理秘書科、家政専⾨課程はファッショ
ンデザイン科となる。
2005 年（平成 17 年）- 熊本市細⼯町に「熊本校」を開校（4 階建）。
2008 年（平成 20 年）- 学科名変更（総合情報マルチメディア科を情報システム⼯学科、マルチメディア科を CG デザイン学科、情報処理秘書科を医療情報学科に）。
2016 年（平成 28 年）-熊本校に⾼等課程（情報システム科）を設置
ｃ．設置学科専⾨課程情報システム⼯学科 - 情報システムコース、組込みシステムコース
情報ビジネス学科 - Ｗｅｂビジネスコース
医療情報学科 - 情報医療秘書コース
⾼等課程

23

情報システム科（２）実施状況九州技術教育専⾨学校では、平成 29 年度から CodeMonkey を利⽤しており、平成 30 年
度は、次の学科で実施した。いずれも、祝⻯児講師が務めている。
⾼等課程１年

⽣徒１４名

専⾨課程１年

学⽣

４名（３）インタビュー結果
表２

九州技術教育専⾨学校での問題点

チャレン レッジ

スン

名称

1 step，turn
0〜10

主な処理

問題点（九州）

step 10turn 45
turn right

2 turnTo，カメ
11〜20

turnTo banana

オブジェクトに対する命令

turtle.turnTo banana（monkey.が省略されているとturtle.step 10

理解できず、turtle.stepになぜturtle.が必要なのか⼾惑う）

3 timesループ
21〜30

3.times ->turn left
step 54 変数
31〜50

a = 10step ab = distanceTo banana

5 配列
51〜60

beavers[0].step 10

変数と配列の違いがわからない

step distanceTo bananas[1]（bananaとbananasの｢s｣の有無で変数か配列かが異なるということへの⼾惑い）

6 forループ
61〜75

for b in bananas
turnTo b
step distanceTo b

7 関数

goto = (a) ->goto以外の関数をつくらせない

turnTo aので、関数＝gotoという理解を

step distanceTo a

する学⽣がいる。
引数の説明が流されており、引76〜90

数に変数、引数に配列の違いがわかりにくい。どこかで補⾜が
必要。

24

表２

九州技術教育専⾨学校での問題点（続き）

チャレン レッジ

スン

名称

8 untilループ

主な処理
until near match

91〜105

問題点（九州）関数の戻り値をそのまま繰り返

turnTo match

しの判定としているため、ここstep 1

を曖昧にして進んだ場合に125からのbooleanで再度同じようにひっかかってしまう。

9 if⽂

if banana.frozen()

106〜116

goat.goto banana
goat.hit()
10 if else⽂

if banana.green()goat.goto banana

117〜124

else
goto banana
11 and，or

until bear.sleeping() andtiger.sleeping()wait()

125〜145

until bear.sleeping() orbear.playing()wait()

146〜151

12 notif not banana.rotten()goto banana

13 <，==

if health()<70
goto healthZone

152〜160

until health()==100
wait()
14 戻り値

161〜175

return no
return yes
return not crow.watching()

15 onKey
176〜189

onKey = (key) ->if key == 'w'
step 1

16 onMouseMove
190〜195

onMouseMove = (pos) ->bat.setX pos.x
bat.setY pos.y

17 onClick
196〜210

hippo.onClick = () ->monkey.turnTo hippomonkey.toss()25

（４）考察・レッスン２の問題は、オブジェクト指向⾔語の仕様に由来する問題である。
・レッスン５の問題は、変数と配列の違いと、英語の⽂法の２つの問題の複合問題である。
・レッスン７の問題は、CodeMonkey の中の goto 以外関数がいまひとつピンときにくいという問題がひとつである。もうひとつの問題は、CodeMonkey の関数の引数が単なる変数なのかオブジェクトなのかわかりにくいという問題である。その上で、関数の引数が配列な
どのオブジェクトである場合の処理を明確化していないという問題である。
・レッスン８の問題は、ループの継続・終了条件の判断において、このレッスンのチャレン
ジが関数の戻り値を継続・終了条件にするものから始まっており、ほぼそれに終始するから
である。

26

３．３

清⾵情報⼯科学院

（１）概要
ａ．概要
清⾵情報⼯科学院（せいふうじょうほうこうかがくいん）は、⼤阪府⼤阪市阿倍野区丸⼭通に所在する専⾨課程の専修学校。前⾝は、⼤阪ガスが経営していたオージスコンピュータ
学院専⾨学校。
設置法⼈

学校法⼈清⾵明育社

理事⻑

平岡⿓⼈

副理事⻑・校⻑平岡憲⼈

ｂ．沿⾰
1988 年 3 ⽉ 11 ⽇

オージー総合学園、オージスコンピュータ学院専⾨学校が⼤阪府より設⽴認可を受ける

2001 年

学校法⼈清⾵学園専務理事である平岡⿓⼈が理事⻑に就任。

2002 年

校名を清⾵情報⼯科学院に変更。

2003 年

⽇本語学科を増設。

ｃ．設置学科⼯業専⾨課程デザイン・コンピュータ学科
研究コース（4 年制）
応⽤コース（3 年制）
基礎コース（2 年制）
グローバル教養学科（2 年制）
キャリア専攻科（1 年制）
⽂化・教養専⾨課程⽇本語学科（1.5／2 年制）（２）実施状況
平成 30 年度から CodeMonkey を利⽤しており、平成 30 年度は次の学科で実施した。
デザイン・コンピュータ学科１年
デザイン・コンピュータ学科２年

A クラス

学⽣

32 名

担当

⼭⽥茂

B クラス

学⽣

37 名

担当

林耕平

ハードコース

学⽣

15 名

担当

林耕平

デザイン・コンピュータ学科１年には、留学⽣（ベトナム、中国、インドネシアなど）も在籍しているが、学⽣らは必要に応じて表⽰⾔語を⺟国語に変えて受講していた。
担当講師は進度（レッスンのロック）の管理を⾏い、必要に応じて個別指導する形式。

27

（３）インタビュー結果
授業は極めて好評だった。８割以上の受講⽣がメインモードの２１０チャレンジをクリアできた。従来の同程度の理解度への到達が３〜４割程度に⽐べるとはるかに⾼かった。授業中も私語もなく、ゲームなどで遊ぶものもなく、必要に応じて隣同⼠教えあって進捗できた。
⼤きな問題点は、他の授業との接続である。具体的には、他の授業で⾏っているアルゴリ
ズムとの連携がとられなかった、また他の授業で⾏っている C ⾔語の授業との連携がとられなかった。そのため、単に CodeMonkey または CoffeeScript が上達しただけという学⽣がかなりの数いた可能性がある。これについては、今後検証する。
各レッスンにおける問題点を次表にまとめた。これは、担当講師が授業中に学⽣の質問などか受けた印象に加えて、学⽣の書いたコードに対するシステムの評価（★の数）をたよりに、星の数の少ない学⽣が実際に書いたコードから洗い出したものである。
表３

清⾵情報⼯科学院での問題点

チャレン レッジ

スン

名称

1 step，turn
0〜10

主な処理

問題点（清⾵）定規の正しい使い⽅

step 10turn 45
turn right

2 turnTo，カメ
11〜20

turnTo banana

turnとturnToの違い

turtle.turnTo banana

⼀⼈称（monkey）を省ける事

turtle.step 10
3 timesループ
21〜30

3.times ->アルゴリズムの構築（バナナをturn left

取るまでの⼿順の明確化）

step 54 変数
31〜50

a = 10変数を使う意味が理解できない

step a

代⼊した値をイメージできない

b = distanceTo banana
51〜60

5 配列

⼿順を間違えやすいstep distanceTo bananas[1]6 forループ

61〜75
7 関数
76〜90
8 untilループ
91〜105beavers[0].step 10
for b in bananas

forが繰り返しであるという理

turnTo b

解step distanceTo b

Tab（４つスペース）の意味

goto = (a) ->goto以下はあくまで関数である

turnTo aという理解

step distanceTo a

引数の理解

until near match
turnTo match
step 128

条件を満たすまでの繰り返しであることの理解表３

清⾵情報⼯科学院での問題点（続き）

チャレン レッ
ジ

スン

名称

9 if⽂

主な処理
if banana.frozen()

106〜116

問題点（清⾵）条件の定義

goat.goto banana
goat.hit()
10 if else⽂

if banana.green()

条件の定義

goat.goto banana

117〜124

else
goto banana
11 and，or

until bear.sleeping() and

andとorの違い

tiger.sleeping()wait()

125〜145

until bear.sleeping() orbear.playing()wait()

146〜151

12 notif not banana.rotten()

notを書く位置（⽂法的な）goto banana
13 <，==

152〜160

if health()<70

⼤なりと⼩なりの違い

goto healthZone

以上と以下と違い、該当の数字

until health()==100は含まない事wait()
14 戻り値
161〜175

return no

値を返すという意味⾃体がわか

return yes

らないreturn not crow.watching()
15 onKey
176〜189

onKey = (key) ->有利に進めるキーの設定（キーif key == 'w'

をどれだけ増やしても星３とれstep 1
16 onMouseMove
190〜195

onMouseMove = (pos) ->bat.setX pos.x

る）
マウスの動きに関する設定である事

bat.setY pos.y
17 onClick
196〜210

hippo.onClick = () ->monkey.turnTo hippo

対象物をクリックした場合の命令であることmonkey.toss()（４）考察・CoffeeScript を学ぶのでなく、アルゴリズムを学ぶのであるという意識が必要
・流れ図との接点が必要
・C ⾔語など他の⾔語との接点の認識が必要
・レッスン２，６，８，１２については、命令語や関数名が英語であることから来ている可29

能性がある。
・レッスン１，１３については、算数・数学の問題から来ている可能性がある。
・レッスン３，４，５，６，７，８，１４についてはコンピュータ⾔語⼀般・アルゴリズムに由来する問題である。
・レッスン２，１５，１６，１７については、オブジェクト指向やイベントドリブンなどを許容するモダンコンピュータ⾔語に由来する問題である。
３．４

まとめ

（１）レッスン別の問題点のまとめ
両校とも良好な結果を得ている。その上で、学⽣のつまずきポイントが明らかになった。
表４

両校の問題点のまとめ

チャレン レッジ

スン

名称

1 step，turn
0〜10

主な処理

問題点（まとめ）
定規の正しい使い⽅

step 10turn 45
turn right

2 turnTo，カメ

11〜20

turnTo banana

オブジェクトに対する命令

turtle.turnTo banana（monkey.が省略されているとturtle.step 10

理解できず、turtle.stepになぜturtle.が必要なのか⼾惑う）
turnとturnToの違い
⼀⼈称（monkey）を省ける事

3 timesループ
21〜30

3.times ->アルゴリズムの構築（バナナをturn left

取るまでの⼿順の明確化）

step 54 変数
31〜50

a = 10変数を使う意味が理解できない

step a

代⼊した値をイメージできない

b = distanceTo banana
5 配列

beavers[0].step 10

変数と配列の違いがわからない

step distanceTo bananas[1]（bananaとbananasの｢s｣の有51〜60

無で変数か配列かが異なるということへの⼾惑い）
⼿順を間違えやすい
6 forループ

61〜75

for b in bananas

forが繰り返しであるという理

turnTo b

解step distanceTo b

Tab（４つスペース）の意味

30

表４

両校の問題点のまとめ（続き）

チャレン レッ
ジ

スン

名称

7 関数

主な処理

問題点（まとめ）

goto = (a) ->goto以外の関数をつくらせない

turnTo aので、関数＝gotoという理解を

step distanceTo a

する学⽣がいる。
引数の説明が流されており、引数に変数、引数に配列の違いが76〜90

わかりにくい。どこかで補⾜が必要。
goto以下はあくまで関数である
という理解
引数の理解
8 untilループ

until near match

関数の戻り値をそのまま繰り返

turnTo match

しの判定としているため、ここstep 1

を曖昧にして進んだ場合に125からのbooleanで再度同じよう

91〜105にひっかかってしまう。
条件を満たすまでの繰り返しであることの理解9 if⽂

if banana.frozen()

106〜116

条件の定義

goat.goto banana
goat.hit()
10 if else⽂

if banana.green()

条件の定義

goat.goto banana

117〜124

else
goto banana
11 and，or

until bear.sleeping() and

andとorの違い

tiger.sleeping()wait()

125〜145

until bear.sleeping() orbear.playing()wait()

146〜151

12 notnotを書く位置（⽂法的な）goto banana
13 <，==

152〜160

if not banana.rotten()
if health()<70

⼤なりと⼩なりの違い

goto healthZone

以上と以下と違い、該当の数字

until health()==100は含まない事wait()

31

表４

両校の問題点のまとめ（続き）

チャレン レッジ

スン

名称

14 戻り値
161〜175

主な処理

問題点（まとめ）

return no

値を返すという意味⾃体がわか

return yes

らないreturn not crow.watching()
15 onKey
176〜189

onKey = (key) ->有利に進めるキーの設定（キーif key == 'w'

をどれだけ増やしても星３とれstep 1
16 onMouseMove
190〜195

onMouseMove = (pos) ->bat.setX pos.x

る）
マウスの動きに関する設定である事

bat.setY pos.y
17 onClick
196〜210

hippo.onClick = () ->monkey.turnTo hippo

対象物をクリックした場合の命令であることmonkey.toss()（２）考察のまとめ
CodeMonkey をソフトウェア開発能⼒の獲得の基礎と位置づけ、情報処理関係の他の授業と協調して成果を上げる、という観点に⽴つと以下の改善点が⾒いだせる。
・CoffeeScript を学ぶのでなく、「アルゴリズムを学ぶのである」という意識が必要。
・命令語や関数名が英語であることからつまずく可能性の検討が必要。
・算数・数学の理解に問題があってつまずく可能性の検討が必要。
・CodeMonkey のレッスンの構成・ステップが不⼗分であることなら問題が⽣じる可能性の検討が必要。特に、以下の問題はすでに認識された：−変数と配列の違い−goto 以外関数がいまひとつピンときにくい−関数の引数が配列などのオブジェクトである場合の処理を明確化していない−ループの継続・終了条件の判断が関数の戻り値から始まっている・コンピュータ⾔語⼀般・アルゴリズムの習得時につまずきやすい点は CodeMonkey
でもつまずきやすい点である。例えば、変数の概念や関数の概念である。
・オブジェクト指向やイベントドリブンなどを許容するモダンコンピュータ⾔語の習得時につまずきやすい点は CodeMonkey でもつまずきやすい点である。
・流れ図との接点が必要。例えば、CodeMonkey 内のコードを流れ図で記述させるなどの⼯夫が必要。
・C ⾔語など他の⾔語との接点の認識が必要。とりわけ、他の⾔語と⾔語仕様が異なる
部分には橋渡しが必要。例えば、for ループのカウンタの扱い、Until の扱いなど。
・より⾼度な理解のため、「コードの⽬的と⼿段」の意識が必要。

32

４．CodeMonkey のカリキュラムとその改善⽅法
本節では、第３節から得られた視点に基づき、CodeMonkey を⽤いた授業において、つまずきを軽減し、ソフトウェア開発能⼒をより確実かつ⾼度に獲得させる⽅法について整理する。
次年度、この⽅法を各校で授業に反映し、その効果を検証する。
４．１

CodeMonkey の学習項⽬（詳細）（１）整理の観点
３．４節にて、つまずき箇所の解明の視点およびその改善の⽅向性についての視点が得られたので、それを再掲する。
・CoffeeScript を学ぶのでなく、「アルゴリズムを学ぶのである」という意識が必要。
・命令語や関数名が英語であることからつまずく可能性の検討が必要。
・算数・数学の理解に問題があってつまずく可能性の検討が必要。
・CodeMonkey のレッスンの構成・ステップが不⼗分であることなら問題が⽣じる可能性の検討が必要。特に、以下の問題はすでに認識された：−変数と配列の違い−goto 以外関数がいまひとつピンときにくい−関数の引数が配列などのオブジェクトである場合の処理を明確化していない−ループの継続・終了条件の判断が関数の戻り値から始まっている・コンピュータ⾔語⼀般・アルゴリズムの習得時につまずきやすい点は CodeMonkey
でもつまずきやすい点である。例えば、変数の概念や関数の概念である。
・オブジェクト指向やイベントドリブンなどを許容するモダンコンピュータ⾔語の習得時につまずきやすい点は CodeMonkey でもつまずきやすい点である。
・流れ図との接点が必要。例えば、CodeMonkey 内のコードを流れ図で記述させるなどの⼯夫が必要。
・C ⾔語など他の⾔語との接点の認識が必要。とりわけ、他の⾔語と⾔語仕様が異なる
部分には橋渡しが必要。例えば、for ループのカウンタの扱い、Until の扱いなど。
・より⾼度な理解のため、「コードの⽬的と⼿段」の意識が必要。
（２）分析の⽅針
本年度は時間の関係で、それぞれの視点について悉皆的に調査・分析することはできない。
次年度の Monkey の授業に役⽴つ教材を⽣み出すことを暫定的な⽬標として分析する。次
年度の授業で有効性を⾒極めて、必要性が⾼いものは次年度に悉皆調査する。
（１）の問題点について、分析の⽅針は以下の通りである。
ａ．命令語や関数名が英語

33

英語の意味と⽇本語の意味のズレ、英語の語順と⽇本語の語順のズレ、英⽂法特有の表現（複数の「ｓ」など）に注⽬してコードや識別⼦を分析する。
ｂ．算数・数学の理解
学⽣の算数などにおける基礎学⼒の不⾜に起因する問題である。例えば、定規や分度器の使い⽅、座標軸と回転の関係、座標の概念、ベン図の概念の有無、⼤⼩関係（不等式）である。またこの周辺のスキルとして、物事を丁寧に図化して整理したり、途中のプロセスを段階を追って⾒える化するスキルがある。これらを意識して分析する。
ｃ．CodeMonkey のレッスンの構成・ステップが不⼗分
画⾯上で主⼈公の猿のモンタを動かしてアイテムをとってゆくというコンテンツのコンセプトに関わる問題と、学習項⽬同⼠の組み合わせが不適切であったり、⼗分な練習量が与えられていない、という問題であると推測される。前者に関しては、CodeMonkey 外で補⾜する⽅針でゆく。後者に関しては、学習項⽬の組み合わせに注⽬して分析する。
ｄ．コンピュータ⾔語⼀般の問題
CodeMonkey の学習範囲から⾔えば、変数、代⼊、配列、関数、関数の引数、関数の戻り値、変数のスコープが主要なつまずき箇所であるので、そこに注⽬して分析する。
ｅ．モダンコンピュータ⾔語の問題「オブジェクト.メソッド」という語順が従来型のコンピュータ⾔語の語順に⽐べて⽇本⼈にはわかりやすいという利点がある。本年度は、引数にオブジェクトが渡されるという点に注⽬することにし、それ以外の点については本年度は分析しない。
ｆ．流れ図との接点
CodeMonkey の学習範囲から⾔えば、ループ処理と判断処理のところが主である。この点に注⽬して分析する。
ｇ．C ⾔語など他の⾔語との接点
CodeMonkey にあって他の⾔語にない⾔語仕様の部分が問題になる。とりわけ、
ループとループカウンタの部分が⼤きく相違しているので、この点に注⽬して分
析する。

34

４．２

CodeMonkey のカリキュラムの分析結果（１）命令語や関数名が英語
中学校・⾼等学校で英語に苦⼿意識をもったり、英⽂法について⼗分な知識がない場合、
⽇本語と英語の違いが原因となって、つまずく可能性がある。コードの冒険に登場するプロ
グラムの予約語や関数、変数名などの識別⼦について、英語の意味と⽇本語の意味のズレ、
英語の語順と⽇本語の語順のズレ、英⽂法特有の表現（複数の「ｓ」など）に注⽬して分析した。
表１

英語と⽇本語の相違に注⽬した予約語と識別⼦の主たる問題点

チャレン レッジ

スン

名称

1 step，turn
0〜10

主な処理
step 10

問題点（まとめ）
定規の正しい使い⽅

分析（英語）
・「step 10」は「10進む」で語順が逆。

turn 45

・語順が逆のものは、命令だから倒置法になっていturn right

ると思えば、ある程度理解できる。「進め１０」「回れ４５度」「回れ右！」2 turnTo，カメ・「turnTo」の前置詞「to」がとれていない。⽇本

turnTo banana

オブジェクトに対する命令

turtle.turnTo banana（monkey.が省略されていると 語では「４５度回る」「バナナに向く」と動詞が変

turtle.step 10

理解できず、turtle.stepになぜ わって助詞がつく。英語ではそれが、turn, turnToに

11〜20

turtle.が必要なのか⼾惑う）

対応と説明。

turnとturnToの違い

・「to」がつくと、命令と思っても語順が理解しに⼀⼈称（monkey）を省ける事 くくなる。（「回れバナナ」ではバナナが回ってしまう。「バナナ向けバナナ」とでも理解するのか。）
3 timesループ
21〜30

3.times ->turn left

アルゴリズムの構築（バナナを ・「3.times」の語順は⽇本語と同じ「3回」。
取るまでの⼿順の明確化）

step 54 変数
31〜50

a = 10変数を使う意味が理解できない ・「distanceTo ○○」は「○○までの距離」と語順

step a

代⼊した値をイメージできない が逆。

b = distanceTo banana

・「step distanceTo 〇〇」は「○○までの距離を進む」で語順が完全に逆。

5 配列

beavers[0].step 10

変数と配列の違いがわからない ・配列は英語の複数形で「s」が付いていることに注

step distanceTo bananas[1]（bananaとbananasの｢s｣の有 意させる。

51〜60

無で変数か配列かが異なるということへの⼾惑い）
⼿順を間違えやすい
6 forループ

61〜75
7 関数

for b in bananas

forが繰り返しであるという理・「for」という英語がピンとこない。直訳すると

turnTo b

解「bがバナナ配列の中にいる間」。または「bのためstep distanceTo b

Tab（４つスペース）の意味にバナナ配列の中で繰り返す」と意訳する。

goto = (a) ->goto以外の関数をつくらせない ・「goto ○○」も「○○へ⾏く」と語順が逆。

turnTo aので、関数＝gotoという理解を

step distanceTo a

する学⽣がいる。
引数の説明が流されており、引数に変数、引数に配列の違いが76〜90

わかりにくい。どこかで補⾜が必要。
goto以下はあくまで関数である
という理解
引数の理解
8 untilループ

91〜105

until near match

関数の戻り値をそのまま繰り返 ・英語の語順だと「near match」になる。⽇本語な

turnTo match

しの判定としているため、ここ ら「マッチの近く」と語順が逆。

step 1

を曖昧にして進んだ場合に125 ・「until○○」も「○○になるまで」と語順が逆。
からのbooleanで再度同じようにひっかかってしまう。
条件を満たすまでの繰り返しであることの理解35チャレン レッ
ジ

スン

名称

9 if⽂

主な処理
if banana.frozen()

106〜116

問題点（まとめ）
条件の定義

goat.goto banana

分析（英語）
・「banana.frozen()」は「バナナが凍っている」
で、語順が同じ。

goat.hit()
10 if else⽂

if banana.green()

条件の定義

goat.goto banana

117〜124

・「banana.green()」は「バナナが緑⾊」で、語順
が同じ。

else
goto banana
11 and，or

until bear.sleeping() and

andとorの違い

・「A and B」は「AもBも」、「A or B」は「AかB

wait()
125〜145

・「bear.sleeping()」は「熊が寝ている」で、語順が同じ。

tiger.sleeping()
until bear.sleeping() orか」。⽇本語の「AかBか」は「男か⼥か」のように

bear.playing()

どちらか⼀⽅の意味で、コンピュータの意味と違うのに注意する。

wait()

・「hasGlass()」「hasBowTie()」の「has」は⽇本語で「メガネをかける/する」「蝶ネクタイをつける/する」と動詞が違う
12 not146〜151

if not banana.rotten()

notを書く位置（⽂法的な）goto banana

・英語の「not」の位置がピンときにくいので、漢字熟語を例にして説明する。「不合格、不参加、⾮常識」などの「不○○」とか「⾮○○」のイメージ。

13 <，==
152〜160

if health()<70

⼤なりと⼩なりの違い

・「A>B」は⼩学校で「A⼤なりB」と教わるが、こgoto healthZone

以上と以下と違い、該当の数字 れも本来は語順が違う。「AがBより⼤きい」と「⼤until health()==100は含まない事きい」の部分が後ろに来るのが⽇本語の語順。
・「healthZone」は「回復場所」で⽇本語の語順とwait()

同じ。直訳すると「健康場所」でちょっと変。
14 戻り値
161〜175

return no

値を返すという意味⾃体がわか ・「return ○○」も、語順が逆で「○○を返す」。

return yes

らない「戻り値は○○」と読み替えたほうがしっくりく

return not crow.watching()る。
・「crow.watching()」は「カラスが⾒てる」で語順が同じ。

15 onKey
176〜189

onKey = (key) ->if key == 'w'
step 1

16 onMouseMove
190〜195

onMouseMove = (pos) ->bat.setX pos.x

有利に進めるキーの設定（キー ・「onKey」も「キーが押されたら」と語順が逆。
をどれだけ増やしても星３とれ 「押された」の部分は英語にはない。
る）
マウスの動きに関する設定であ ・「onMouseMove」も「マウスが動いたら」と語
る事

順が逆。

bat.setY pos.y
17 onClick
196〜210

hippo.onClick = () ->monkey.turnTo hippo

・「setX」も「Xにセット」と語順が逆。
対象物をクリックした場合の命 ・「onClick」も「クリックされたら」と語順が逆。
令であることmonkey.toss()

表１

英語と⽇本語の相違に注⽬した予約語と識別⼦の主たる問題点（続き）

さらに、コードの冒険内で利⽤する予約語と識別⼦について、悉皆的に調べたものを付録１に⽰す。付録１は授業において、簡易な辞書（リファレンス）として利⽤できるよう、「英
⽇」と「⽇英」のバージョンを作成してある。
（２）算数・数学の理解
学⽣の算数などにおける基礎学⼒の不⾜に起因する問題である。例えば、定規や分度器の使い⽅、座標軸と回転の関係、座標の概念、ベン図の概念の有無、⼤⼩関係（不等式）である。またこの周辺のスキルとして、物事を丁寧に図化して整理したり、途中のプロセスを段
階を追って⾒える化するスキルがある。これらの該当箇所を分析した。但し、算数的な能⼒の不⾜については、他の補完⽅法（基礎学⼒対策）による量的な補強が必要であると考えられる。そのため、本年度は悉皆的な分析はしていない。

36

表２

算数・数学の学⼒不⾜に注⽬した主たる問題点

チャレン レッジ

スン

名称

1 step，turn
0〜10

主な処理
step 10

問題点（まとめ）
定規の正しい使い⽅

分析（数学）
・⾓度において「−」が右回りか左回りか。ノート

turn 45に絵を書いて整理させる。

turn right

・猿基準の⻑さ・⾓度しか出ない事への対処。定規・⾓度がピンと来ていない場合、「トードーの算数」をやらせる。

2 turnTo，カメ

11〜20

turnTo banana

オブジェクトに対する命令

turtle.turnTo banana（monkey.が省略されているとturtle.step 10

理解できず、turtle.stepになぜturtle.が必要なのか⼾惑う）
turnとturnToの違い
⼀⼈称（monkey）を省ける事

3 timesループ

3.times ->21〜30

turn left

アルゴリズムの構築（バナナを （⼿順を書き出すという習慣の有無）取るまでの⼿順の明確化）

step 54 変数
31〜50

a = 10変数を使う意味が理解できない （数学の⽂字式とコンピュータの変数の概念の違

step a

代⼊した値をイメージできない い）b = distanceTo banana
5 配列（数学の等式とコンピュータの代⼊の概念の違い）

beavers[0].step 10

変数と配列の違いがわからない （⼿順を書き出すという習慣の有無）

step distanceTo bananas[1]（bananaとbananasの｢s｣の有51〜60

無で変数か配列かが異なるということへの⼾惑い）
⼿順を間違えやすい
6 forループ

for b in bananas

61〜75
7 関数

forが繰り返しであるという理

turnTo b

解step distanceTo b

Tab（４つスペース）の意味

goto = (a) ->goto以外の関数をつくらせない （数学の関数の概念とコンピュータの関数の概念のturnTo aので、関数＝gotoという理解を 違い）

step distanceTo a

する学⽣がいる。
引数の説明が流されており、引数に変数、引数に配列の違いが76〜90

わかりにくい。どこかで補⾜が必要。
goto以下はあくまで関数である
という理解
引数の理解
8 untilループ

until near match

91〜105

turnTo match

問題点（まとめ）

step 19 if⽂

if banana.frozen()

106〜116

条件の定義

goat.goto banana
goat.hit()
10 if else⽂

if banana.green()

条件の定義

goat.goto banana

117〜124

else
goto banana
11 and，or

until bear.sleeping() and

andとorの違い

tiger.sleeping()wait()

125〜145

until bear.sleeping() orbear.playing()wait()

146〜151

12 notif not banana.rotten()

notを書く位置（⽂法的な）goto banana

37（and, or の関係がわからない可能性）

表２

算数・数学の学⼒不⾜に注⽬した主たる問題点（続き）

チャレン レッジ

名称

スン

13 <，==

主な処理
if health()<70

152〜160

問題点（まとめ）
⼤なりと⼩なりの違い

goto healthZone

以上と以下と違い、該当の数字

until health()==100は含まない事分析（数学）（⼤⼩関係の不等号がわからない可能性）

wait()
14 戻り値
161〜175

return no

値を返すという意味⾃体がわか

return yes

らないreturn not crow.watching()
15 onKey
176〜189

onKey = (key) ->有利に進めるキーの設定（キーif key == 'w'

をどれだけ増やしても星３とれstep 1
16 onMouseMove
190〜195

る）

onMouseMove = (pos) ->bat.setX pos.x

マウスの動きに関する設定であ （座標がわからない可能性）
る事

bat.setY pos.y
17 onClickhippo.onClick = () ->196〜210monkey.turnTo hippo

対象物をクリックした場合の命令であることmonkey.toss()（３）CodeMonkey のレッスンの構成・ステップ
画⾯上で主⼈公の猿のモンタを動かしてアイテムをとってゆくというコンテンツのコン
セプトに関わる問題と、学習項⽬同⼠の組み合わせが不適切であったり、⼗分な練習量が与えられていない、という問題であると推測される。
前者に関しては、CodeMonkey 外で補⾜する⽅針でゆく。後者に関しては、学習項⽬の組
み合わせに注⽬して分析する。以下、後者に関する分析結果を⽰す。分析結果は「メインモード」についてはほぼ悉皆的であるが、「スキルモード」については分析対象としていない。
次年度必要に応じて、メインモードとスキルモードの全コードを対象に、悉皆的な分析を⾏う。
表３

学習項⽬の組み合わせ

チャレン

レッ

ジ

スン

名称

1 step，turn
0〜10

主な処理

組み合わせ

step 10・メソッド 数値

turn 45

・メソッド 定数（rightなど）

turn right・「（オブジェクト.)メソッド」の「オブジェクト.」部分が省略されている

2 turnTo，カメ
11〜20

turnTo banana

・レッスン1では「monkey.」が省略されている。このレッスンのturtle.turnTo banana

直前にプレステージP2を⼊れる。

turtle.step 10

・メソッド オブジェクト・オブジェクト.メソッド 引数・オブジェクト.メソッド オブジェクト

3 timesループ
21〜30
4 変数
31〜50

3.times ->・ループ関数(整数.times）とメソッド

turn left

・変数.times

step 5・ループ関数とメソッド、オブジェクト.メソッド

a = 10・変数、変数への代⼊

step a・変数の⾃⼰代⼊

b = distanceTo banana

・distanceTo オブジェクト・ループとメソッド、オブジェクト.メソッド
・追加チャレンジ（46-50）にて、ループと⾃⼰代⼊

38

表３

学習項⽬の組み合わせ（続き）

チャレン

レッ

ジ

スン

名称

5 配列

主な処理

組み合わせ

beavers[0].step 10

・メソッド 配列の要素

step distanceTo bananas[1]・オブジェクト.メソッド 配列の要素
・配列の要素.メソッド 引数

51〜60

・配列とループの組み合わせはなし
・55から57は応⽤できる
6 forループ

61〜75

for b in bananas

・forループと変数

turnTo b・forループと「メソッド 変数」

step distanceTo b・forループと「メソッド メソッド 変数」
・forループと「変数.メソッド オブジェクト」
・forループの⼊れ⼦
・⼊れ⼦のforループの演習が不⾜（75のみ）

7 関数

goto = (a) ->・関数()

引数なしの関数呼び出し

turnTo a・関数 定数 で関数呼び出し

step distanceTo a・関数の定義（但し、goto関数のみ）

・関数の⼊れ⼦（関数内で「メソッド 引数」「メソッド メソッド
引数」）

76〜90

・関数 配列 で関数呼び出し・関数内でforループ
・関数 変数 で関数呼び出し
・88から応⽤できる
・２変数の関数定義、２変数の関数呼び出しも可能
8 untilループ

until near match

・最初から until near オブジェクトで始まる

turnTo match

・「until メソッド オブジェクト」

step 1・untilループ内で、「メソッド 定数」
・untilループ内で、「メソッド メソッド 定数」
・until 数式、until 関数がない
・「until オブジェクト.メソッド オブジェクト」
・関数内でuntilループ
・untilループ内で、「メソッド 引数」

91〜105・forループ内で関数呼び出ししその中でuntilループ
・何もしない wait()という関数
・wait()との組み合わせで何もしないuntilループ
・関数の⼊れ⼦・forループ内でuntilループと関数の⼊れ⼦呼び出し・何もしないuntilループと何かするuntilループの組み合わせ
・99から複雑
9 if⽂

if banana.frozen()・オブジェクト.メソッド()

goat.goto banana

・オブジェクト.メソッド オブジェクト

goat.hit()

・オブジェクト.メソッド 配列の要素
・if オブジェクト.メソッド()

106〜116

・if節の中で、オブジェクト.メソッド()
・if節の中で、オブジェクト.メソッド オブジェクト・forループの中で、if 変数.メソッド()
・forループの中で、if節の中のオブジェクト.メソッド()、ブジェ
クト.メソッド オブジェクト

39

表３

学習項⽬の組み合わせ（続き）

チャレン

レッ

ジ

スン

名称

11 and，or

主な処理

組み合わせ

until bear.sleeping() and・until とandの組み合わせ

tiger.sleeping()

・forループとuntilループとandの組み合わせwait()

・forループとuntilループとandとif/else⽂の組み合わせ

until bear.sleeping() or・関数内でuntilループとandの組み合わせ

bear.playing()

・until とorの組み合わせwait()

・forループとuntilループとorの組み合わせ・forループとuntilループとorとif/else⽂の組み合わせ・関数内でuntilループとorの組み合わせ
・for in [オブジェクト, オブジェクト]
・for⽂の⼊れ⼦

125〜145

・for⽂の⼊れ⼦の中で、for in [オブジェクト, オブジェクト]
・for⽂の⼊れ⼦の中からuntilを含む関数を呼ぶ
・チャレンジ140は応⽤できる・チャレンジ141-145は追加チャレンジ
・for⽂の中のif⽂（if 引数.メソッド）
・for⽂の中のif⽂の中の引数.メソッド 定数
・for⽂の中のif⽂で and・for⽂の中のif/else⽂で and / or・for⽂の⼊れ⼦の中でif⽂の中に or
12 not146〜151

if not banana.rotten()・if⽂の中でnotgoto banana

・配列の思い出し・for節の中でif/else⽂
・for節の中のif⽂でnot

13 <，==

if health()<70

・if⽂の中で メソッド() == 定数

goto healthZone

・until⽂の中でメソッド() == 定数

until health()==100・for⽂の中のuntil⽂の中でメソッド() == 定数

wait()

152〜160

・if/else⽂の中で メソッド() < 定数・for⽂中でif メソッド() < 定数・for⽂中のif⽂ の中で、until メソッド() == 定数
・whileと組み合わせたほうがわかりやすいものもある

14 戻り値

return no・関数の中でreturn

return yes・関数の中のreturnでnot

return not crow.watching()

・if/else⽂の中で関数()・161のステップが⼤きい（が、みんな問題ないようだ）
・for⽂の中でif 関数 引数
・return⽂の中で メソッド()==定数
・return⽂の中で メソッド() < 定数・for⽂中のif⽂ の中でuntil⽂・return⽂の中で or

161〜175

・return⽂の中で 引数.メソッド()
・until⽂の中で関数 オブジェクト and 関数 オブジェクト
・return yes/no・returnのあとは実⾏されない
・if/else⽂の中で 関数()・return not の戻り値とuntilの組み合わせ・return not とorと配列の組み合わせ・return not とorと配列の組み合わせとifとforの組み合わせ
・for⽂とreturnとnotの組み合わせをuntilと組み合わせる
・for⽂とif⽂とreturnの組み合わせをuntilと組み合わせる・whileと組み合わせたほうがわかりやすいものもある

40

表３

学習項⽬の組み合わせ（続き）

チャレン

レッ

ジ

スン

名称

主な処理

15 onKey組み合わせ

onKey = (key) ->176〜189

・イベントドリブン（onKey）

if key == 'w'

・onKeyとif⽂の組み合わせ

step 1
16 onMouseMove

onMouseMove = (pos) ->・イベントドリブン（onMouseMove）

bat.setX pos.x

・onKeyとonMouseMoveの組み合わせ

bat.setY pos.y・setX、setY

190〜195

・onKeyとif、onMouseMoveとsetX, setYの組み合わせ
17 onClickhippo.onClick = () ->196〜210・イベントドリブン（オブジェクト.onClick）

monkey.turnTo hippo

・forループと変数.onClickmonkey.toss()・forループと変数.onClickと変数.メソッド, メソッド 変数・moverという変数
・onClickとonKeyの組み合わせ・forループと変数.onClickとmoverとonKeyとifの組み合わせ（４）コンピュータ⾔語⼀般の問題およびモダンコンピュータ⾔語の問題
CodeMonkey の学習範囲から⾔えば、変数、代⼊、配列、関数、関数の引数、関数の戻り値、変数のスコープが主要なつまずき箇所であるので、そこに注⽬して分析する。
「オブジェクト.メソッド」という語順が従来型のコンピュータ⾔語の語順に⽐べて⽇本
⼈にはわかりやすいという利点がある。本年度は、引数にオブジェクトが渡されるという点に注⽬することにし、それ以外の点については本年度は分析しない。
必要に応じて、その対策も記述した。
表４

コンピュータ⾔語固有の問題

チャレン

レッ

ジ

スン

名称

1 step，turn
0〜10

主な処理
step 10

問題点（まとめ）
定規の正しい使い⽅

分析（コンピュータ）
・アルゴリズムの⾝体化が必要。実際に体を動かし

turn 45

たり、ノートの上で書いて整理させる。

turn right

・語順が逆のものは、命令だから倒置法になっていると思えば、ある程度理解できる。「進め１０」「回れ４５度」「回れ右！」P2・レッスン１で省略された部分を加えて「オブジェクト.メソッド」の練習
・（紙上で、）レッスン１の題材のいくつかについて「monkey.」をつけて書かせる

2 turnTo，カメ

11〜20

・アルゴリズムの⾝体化が必要。実際に体を動かし

turnTo banana

オブジェクトに対する命令

turtle.turnTo banana（monkey.が省略されていると たり、ノートの上で書いて整理させる。駅から学

turtle.step 10

理解できず、turtle.stepになぜ 校、⽞関から教室までを例に説明する。単純化した
turtle.が必要なのか⼾惑う）

地図をつくっておく。

turnとturnToの違い

・レッスン１では「monkey.」が省略されている。

⼀⼈称（monkey）を省ける事 この章の直前にプレステージP2を⼊れる。
3 timesループ
21〜30

3.times ->turn left

アルゴリズムの構築（バナナを ・アルゴリズムの⾝体化が必要。実際に体を動かし取るまでの⼿順の明確化）

4 変数
31〜50

たり、ノートの上で書いて整理させる。３階まで階段を登るなどを例に（繰り返しで表現できる）。

step 5a = 10変数を使う意味が理解できない ・変数の機能をイメージできていない。コンピューstep a

代⼊した値をイメージできない タでの⽂字・変数は「箱」なので、「箱」をつかって説明する。⾃⼰代⼊のi=i+1を「箱」で実感させ

b = distanceTo banana

る。

41

表４

コンピュータ⾔語固有の問題

チャレン

レッ

ジ

スン

名称

主な処理

問題点（まとめ）

P4

分析（コンピュータ）
・i=i+○の練習量が不⾜
・（紙上で、）５章の題材のいくつかについて変数と⾃⼰代⼊のi=i+○を使って書かせる。
★55-57をつかって、定数部分を変数に置き換えて変数を配列を組み合わせる練習、さらにi=i+1などと組み合わせる練習

5 配列
51〜60

beavers[0].step 10
step distanceTo bananas[1]・⼿順をノートに書かせる。
問題点（まとめ）

・配列と変数の違いを説明する。どちらも「箱」なのは同じ。グループとメンバーの関係。

6 forループ

for b in bananas

61〜75

・「for」を使うメリットを説明する。Forを使わず

turnTo b

問題点（まとめ）に５回・１０回と回数が増えるとミスが多くなる。

step distanceTo b
P6
7 関数★forループの⼊れ⼦の例題をいくつかやる必要あり
goto = (a) ->goto以外の関数をつくらせない ★goto 配列（goto bananas）に対応するには？

turnTo aので、関数＝gotoという理解を ★チャレンジ88から90を利⽤して様々な組み合わせ

step distanceTo a

する学⽣がいる。

に挑戦させる

引数の説明が流されており、引 ★チャレンジ88から90を利⽤してどういう⽬的でど数に変数、引数に配列の違いが ういう分割がわかりやすいのか考えさせる（89の模76〜90

わかりにくい。どこかで補⾜が 範解答はモジュール分割がおかしい。【別解】）・goto以外の関数のイメージをふくらませるために必要。

goto以下はあくまで関数である レッスン追加
という理解
引数の理解
P7

・関数のイメージの脹らませ。
・紙上で、関数づくりの練習をさせる。いろんな関
数、いろんな引数
・コンビニへ⾏く・駅で乗り換えの例（乗り換えTo 阪和線）
★引数が２つ以上のイメージの脹らませ。
★コピー機の例（コピー（100%,5枚））★さらに引数として変数を渡した時の挙動（変数のスコープ）★引数も⽇本語の語順が逆になる。「copy (100%, 5枚)」なら「100%で、５枚、コピーする」。

8 untilループ

until near match

関数の戻り値をそのまま繰り返 ★変数と関数の引数のスコープについて書き出してturnTo match

しの判定としているため、ここ 納得する（特にチャンレンジ９９以降）

step 1

を曖昧にして進んだ場合に125からのbooleanで再度同じよう

91〜105にひっかかってしまう。
条件を満たすまでの繰り返しであることの理解P8・untilの直後に数式が来るパターンを練習する
・関数の戻り値を変数に⼊れて、その変数をuntilで評価する練習。わかりにくい場合はn == trueまで書かせる。
・until i == 10, until i >=10 などの練習
・until n, until n == trueなどの練習

9 if⽂

if banana.frozen()

106〜116

条件の定義

goat.goto banana
goat.hit()
10 if else⽂

117〜124

if banana.green()

条件の定義

goat.goto banana
elsegoto banana

42

表４

コンピュータ⾔語固有の問題

チャレン レッ
ジ

スン

名称

主な処理

問題点（まとめ）

P10

分析（コンピュータ）★forと配列とgoto以外の関数（引数は変数）の組み合わせの練習★チャレンジ124の解き⽅をいろいろやらせる【別解】
関数使わずに書いてみる、先に判定してからどっちが⾏くか決める、先にバナナに⾏ってから判定する、とか★returnを先にここで⼊れたほうがわかりやすいかも凍ってるかの判定関数
⻘いバナナかの判定関数

11 and，or

125〜145

until bear.sleeping() and・「A and B」は「AもBも」、「A or B」は「AかB

tiger.sleeping()

か」。⽇本語の「AかBか」は「男か⼥か」のように

wait()

どちらか⼀⽅の意味で、コンピュータの意味と違うのに注意する。

until bear.sleeping() orbear.playing()wait()
P11★この辺でも、forと配列とgoto以外の関数（引数は配列）の組み合わせ★チャレンジ124の解き⽅をいろいろやらせる
stepperでループする考えでやるとbananasを引数にすることになる★チャレンジ140のやり⽅をいろいろやらせる【別解】
配列のtigersを引数にした関数
配列のbananasを引数にした関数

146〜151

12 notif not banana.rotten()

13 <，==

if health()<70

goto banana
goto healthZone

152〜160

until health()==100
wait()
P14

・紙上で、関数づくりの練習で、戻り値ありの場合をさせる。いろんな関数、いろんな引数で。
・関数のイメージの脹らませを応⽤して説明。成功
したか失敗したかを返す。
・駅で乗り換えの例（乗り換えTo 阪和線

成功・失

敗）
・コピー機の例（コピー（100%,5枚）成功・失敗）・代⾦の例（代⾦（100円、５個））
・消費税の例（消費税（8%､100円））
14 戻り値
161〜175

return no（値を返すという例を別途⽤意して実感させること

return yesが必要）

return not crow.watching()
15 onKey
176〜189（イベントドリブンな記述の仕⽅）

onKey = (key) ->if key == 'w'
step 1

16 onMouseMove
190〜195（イベントドリブンな記述の仕⽅）

onMouseMove = (pos) ->bat.setX pos.x
bat.setY pos.y

17 onClick

196〜210（onClickはオブジェクトに設定する。それがオブ

hippo.onClick = () ->monkey.turnTo hippo

ジェクトを対象とした⽂で宣⾔するということと、

monkey.toss()

その実⾏はonClickイベントで発動されるということの発想の切り分けが難しい。他の部分は順次処理であるが、イベントドリブンな部分は割り込みになってその中では順次処理ということ。）

43

（４）流れ図および C ⾔語など他の⾔語との接点
流れ図については、CodeMonkey の学習範囲から⾔えば、ループ処理と判断処理のところが主である。⾔語仕様の相違については、CodeMonkey にあって他の⾔語にない⾔語仕様の部分が問題になる。とりわけ、ループとループカウンタの部分が⼤きく相違している。
ａ．⽂末の「；」などの記号の有無
CoffeeScript は、⽂末の「；」や「：」、節を表す「｛｝」、引数を表す「（）」が不要であるなど、記述が簡略でよいという特徴がある。このことは、他の⾔語との相違であるが、初期の教育において、この簡略さは有利である。⽂末の「；」などは、他の⾔語を学ぶ際に追加して学べば良い。そのため、CodeMonkey 内では対策は考えない。逆に、他の⾔語の授業において、⽂末の記号などが必要であると教育することで対処する。
ｂ．⼀定回数のループ（for ループ）
コンピュータ⾔語では⼀定回数のループを実現するために、ループカウンタをおいてそのカウンタをループごとに⼀定値で加減する必要がある。ループカウンタは、変数への⾃⼰代⼊が必須であり、加えて終了条件の判断が必要になる。
「コードの冒険」では、この処理が煩雑であるため、「整数.times」「for 変数 in コレクション」の２つの命令を⽤いること
で、ループカウンタの利⽤を回避している。
CodeMonkey 内ではこれで問題はない。ループのアルゴリズムの習得そのものでもこれで問題はない。しかしながら、C ⾔語などの他の⾔語では、ループカウンタを意識する必要がある。またアルゴリズムの理解においても、ループカウンタを意識できるほうがよい。そこで、他の⾔語との接続を意識した追加の演習を⽤意することで対処する。
①変数への⾃⼰代⼊。⾃⼰代⼊がピンとこない学⽣を想定するなら、i++など加算演算⼦を⽤いた記述を教える。
②for (i=1; i<=10; i++)に対応した処理の仕⽅を教えておく。CoffeeScript では、for i in
[1..10]、for i in [1..コレクション.length]の２つの表記が可能である。これにより、終了条件の判断を回避してループカウンタの利⽤のみが可能である。終了条件の判断を明⽰的に⼊れる場合は、until ループの利⽤（i=1, until i=10, 処理, i++）が必要である。
（注意：

配列の添字が「０」から始まる問題への対処も必要）③学習の進捗に応じて、これらの記述の仕⽅を教える。既存のレッスンを利⽤し、これらの学習に必要な学習項⽬の学習が終わった段階で、活⽤できる既存のレッスンに戻ってこれらの学習項⽬を習得させる。
ｃ．終了条件つきのループ（until/while ループ）
CoffeeScript では、while ループと、until ループの２種類が利⽤できる。しかし、「コードの冒険」で取り上げられるのは、until ループだけである。C ⾔語、Java、Python、PHP で

44

はいずれも while ループしかない。そのため、until ループを学んだあと、not を学んでから
while ループを導⼊し、活⽤できる既存のレッスンに戻って while を習得させる。また、
return を学んでから、活⽤できる既存のレッスンに戻って while を復習して定着させる。
ｄ．まとめ
以上のことをレッスンごとに整理した。
表５

他の⾔語との接続

チャレン レッ
ジ

スン

0〜10

名称

1 step，turn

主な処理

他の⾔語との接続

アルゴ

C⾔語 Java⽐ Python PHP⽐

リズム

⽐較

較

⽐較

較

step 10turn 45
turn right

11〜20

2 turnTo，カメ

turnTo banana
turtle.turnTo banana
turtle.step 10

21〜30

3 timesループ

3.times ->ループ for (初 for (変 for 変数 foreachturn left

期化式; 数 : コ

instep 5

条件式; レク

range( ション変化式) ション) 整数)

(コレク
as $変
数)

31〜50

4 変数

a = 10★i=i+1は、i++と書けることを教えておく。

+=, ++ +=, ++ +=, ++ +=, ++step ab = distanceTo banana
51〜60

5 配列

beavers[0].step 10
step distanceTo bananas[1]P5★55-57をつかって、定数部分を変数に置き換えて変数を配列を組み合わせる練習、さらにi=i+1などと組み合わせる練習61〜75

6 forループ

for b in bananas

ループ for (変 for (変 for 変数 foreachturnTo b

数:コ 数:コin コレ (コレクstep distanceTo b

レク

クショ ション

レクション) ション) ン

as $変
数)

P6

★（紙上で、）３章と６章の題材のいくつかを使っ

ループ for (初 for (初 for 変数 for (初て、for のカウンタ変数を使った処理を学ぶ。

と判断 期化式; 期化式; in シー 期化式;

★for (i=1, i<=10, i++)に対応した処理の仕⽅を教え の関係 条件式; 条件式; クエン 条件式;
る。（for i in [1..10]、for i in [1..bananas.length]）変化式) 変化式) ス

変化式)（または、i= 1 10.times 処理 i++、10.times⽂はループの中で何回⽬かわからない）★配列の数を数える⽅法は、「配列.length」（bananas.length、バナナの⻑さ。⽇本語と語順が
同じ）
76〜90

91〜1057 関数

8 untilループ

goto = (a) ->サブ

turnTo a

ルーチstep distanceTo aン

until near match

判斷

turnTo match
step 1
106〜116

9 if⽂

if banana.frozen()判断goat.goto banana
goat.hit()
117〜124

10 if else⽂

if banana.green()判断goat.goto banana
elsegoto banana
125〜145

11 and，or

until bear.sleeping() and tiger.sleeping()

ベン図

wait()
until bear.sleeping() or bear.playing()wait()
146〜151

12 notuntilな untilな untilな untilなし

if not banana.rotten()

ベン図

goto bananaとnot,and, or

45

し

し

し

表５

他の⾔語との接続（続き）

チャレン レッ
ジ

名称

スン

主な処理

P12

他の⾔語との接続★このへんで、whileを⼊れたほうがいい。

アルゴ
リズム
判断

C⾔語 Java⽐ Python PHP⽐
⽐較

較

⽐較

較

untilが untilが untilが untilが★３，６，７章を使うか、９から１２章を使うか。

ないた ないた ないた ないた★until ugeuge と while not ugeuge が同じという理

め

め

め

め

解をさせて、whileのループへ導く。（untilは○○になるまで、whileはＸＸの間）★until bear.sleeping(), while not bear.sleeping(),
while bear.起きている() のように誘導する。単にnotをつけるだけでなく関数の名前を変えたほうがよいことを理解させる。
★while型がわかりやすい時とuntil型がわかりやすい時を理解させる。
★「起きている関数(not sleeping())、⽣の関数(notrotten())、⻩⾊関数(not green())」などを作つくってnot 部分をラッピングすることが可能か？
152〜160

13 <，==

if health()<70

判断goto healthZone
until health()==100
wait()
161〜175

14 戻り値

return no関数

return yes
return not crow.watching()★untilに代えてwhileとreturnの組み合わせをやらせ 判断

untilが untilが untilが untilがる。

ないた ないた ないた ないた★14章をつかって練習

め

め

め

め

★単に条件や戻り値にnot をつけるだけでなく、関数の名前を適切なものに変えさせる。【別解】176〜189

15 onKey

onKey = (key) ->if key == 'w'
step 1190〜195

16 onMouseMove

onMouseMove = (pos) ->bat.setX pos.x
bat.setY pos.y196〜21017 onClickhippo.onClick = () ->monkey.turnTo hippomonkey.toss()

４．３

CodeMonkey のつまずき対策

以上の分析から、対策を整理した。
（１）対策の整理の視点
対策の整理にあたっては、
・「コードの冒険」の習得の歩留まりを向上する（基礎対策）
・「コードの冒険」を出発として複雑な処理ができるように能⼒を上げる（応⽤対策）の２つの視点で整理した。
基礎対策の対象者は、
・「コードの冒険」で、時々つまずく
・「コードの冒険」で、コーディングに時間がかかるような学⽣である。プログラミングに関する最終的な⽬標は、・簡単なマクロが使える（Office や Adobe 製品）
・Web で使われる簡単な JavaScript が理解できる・組み込みソフトにおける簡単なプログラムが理解できるくらいである。

46

応⽤対策の対象者は、
・「コードの冒険」で、つまずきが少ない・「コードの冒険」では⼒が余るような学⽣である。プログラミングに関する最終的な⽬標は、・C ⾔語など他の⾔語も習得する・アプリやゲームのプログラミングができるようになる・プログラマとして就職できるくらいである。
（２）具体的な対策
基礎対策については「・」で、応⽤対策については「★」で対策を区別して記述した。なお、付録２にこれまでのつまづきのポイントから対策までを⼀覧できる表を⽰した。ここでは、対策部分のみを⽰す。
表６「コードの冒険」のつまずき対策

チャレン レッ
ジ
0〜10

スン

名称

1 step，turn

数学

分析（コンピュータ）

step 10

主な処理

・⾓度において「−」が右回りか・アルゴリズムの⾝体化が必要。実際に体を動かし

turn 45

左回りか。ノートに絵を書いて整たり、ノートの上で書いて整理させる。

turn right

理させる。

・語順が逆のものは、命令だから倒置法になってい・猿基準の⻑さ・⾓度しか出ない

ると思えば、ある程度理解できる。「進め１０」

事への対処。定規・⾓度がピンと「回れ４５度」「回れ右！」

他の⾔語との接続

アルゴ
リズム

来ていない場合、「トードーの算数」をやらせる。
P2

・レッスン１で省略された部分を加えて「オブジェクト.メソッド」の練習
・（紙上で、）レッスン１の題材のいくつかについて「monkey.」をつけて書かせる

11〜20

2 turnTo，カメ

turnTo banana

・アルゴリズムの⾝体化が必要。実際に体を動かし

turtle.turnTo banana

たり、ノートの上で書いて整理させる。駅から学

turtle.step 10

校、⽞関から教室までを例に説明する。単純化した地図をつくっておく。
・レッスン１では「monkey.」が省略されている。この章の直前にプレステージP2を⼊れる。

21〜30

3 timesループ

3.times ->turn left（⼿順を書き出すという習慣の有・アルゴリズムの⾝体化が必要。実際に体を動かし

無）たり、ノートの上で書いて整理させる。３階まで階段を登るなどを例に（繰り返しで表現できる）。

step 5
31〜50

51〜60

4 変数

5 配列

ループ

a = 10（数学の⽂字式とコンピュータの・変数の機能をイメージできていない。コンピューstep a変数の概念の違い）

タでの⽂字・変数は「箱」なので、「箱」をつかっb = distanceTo banana（数学の等式とコンピュータの代て説明する。⾃⼰代⼊のi=i+1を「箱」で実感させ⼊の概念の違い）る。

beavers[0].step 10（⼿順を書き出すという習慣の有・⼿順をノートに書かせる。

step distanceTo bananas[1]無）・配列と変数の違いを説明する。どちらも「箱」な★i=i+1は、i++と書けることを教えておく。

のは同じ。グループとメンバーの関係。
P4・i=i+○の練習量が不⾜
・（紙上で、）５章の題材のいくつかについて変数と⾃⼰代⼊のi=i+○を使って書かせる。
★55-57をつかって、定数部分を変数に置き換えて変数を配列を組み合わせる練習、さらにi=i+1などと組み合わせる練習61〜75

6 forループ

・「for」を使うメリットを説明する。Forを使わずに

for b in bananas

ループ

５回・１０回と回数が増えるとミスが多くなる。

turnTo b
step distanceTo b
P6★forループの⼊れ⼦の例題をいくつかやる必要あり ★（紙上で、）３章と６章の題材のいくつかを使って、for のカウンタ変数を使った処理を学ぶ。

ループ
と判断

★for (i=1, i<=10, i++)に対応した処理の仕⽅を教え の関係
る。（for i in [1..10]、for i in [1..bananas.length]）（または、i= 1 10.times 処理 i++、10.times⽂はループの中で何回⽬かわからない）★配列の数を数える⽅法は、「配列.length」（bananas.length、バナナの⻑さ。⽇本語と語順が
同じ）
76〜90

7 関数

goto = (a) ->turnTo a
step distanceTo a0 サブ（数学の関数の概念とコンピュー★goto 配列（goto bananas）に対応するには？

タの関数の概念の違い）★チャレンジ88から90を利⽤して様々な組み合わせ

ルーチに挑戦させるン★チャレンジ88から90を利⽤してどういう⽬的でどういう分割がわかりやすいのか考えさせる（89の模範解答はモジュール分割がおかしい。【別解】）・goto以外の関数のイメージをふくらませるためにレッスン追加47

表６「コードの冒険」のつまずき対策（続き）

チャレン レッ
ジ

スン

名称

主な処理

数学

分析（コンピュータ）

P7

他の⾔語との接続

アルゴ
リズム・関数のイメージの脹らませ。
・紙上で、関数づくりの練習をさせる。いろんな関
数、いろんな引数
・コンビニへ⾏く・駅で乗り換えの例（乗り換えTo 阪和線）
★引数が２つ以上のイメージの脹らませ。
★コピー機の例（コピー（100%,5枚））★さらに引数として変数を渡した時の挙動（変数のスコープ）★引数も⽇本語の語順が逆になる。「copy (100%, 5枚)」なら「100%で、５枚、コピーする」。

91〜105

8 untilループ

until near match★変数と関数の引数のスコープについて書き出してturnTo match

判斷

納得する（特にチャンレンジ９９以降）

step 1P8・untilの直後に数式が来るパターンを練習する
・関数の戻り値を変数に⼊れて、その変数をuntilで評価する練習。わかりにくい場合はn == trueまで書かせる。
・until i == 10, until i >=10 などの練習
・until n, until n == trueなどの練習

106〜116

9 if⽂

判断

if banana.frozen()goat.goto banana
goat.hit()

117〜124

10 if else⽂

判断

if banana.green()goat.goto banana
elsegoto banana

P10★forと配列とgoto以外の関数（引数は変数）の組み合わせの練習★チャレンジ124の解き⽅をいろいろやらせる【別解】
関数使わずに書いてみる、先に判定してからどっちが⾏くか決める、先にバナナに⾏ってから判定する、とか★returnを先にここで⼊れたほうがわかりやすいかも
凍ってるかの判定関数
⻘いバナナかの判定関数

125〜145

11 and，or

until bear.sleeping() and tiger.sleeping()wait()

ベン図（and, or の関係がわからない可能 ・「A and B」は「AもBも」、「A or B」は「AかB性）か」。⽇本語の「AかBか」は「男か⼥か」のようにどちらか⼀⽅の意味で、コンピュータの意味と違う

until bear.sleeping() or bear.playing()のに注意する。

wait()
P11★この辺でも、forと配列とgoto以外の関数（引数は配列）の組み合わせ★チャレンジ124の解き⽅をいろいろやらせる
stepperでループする考えでやるとbananasを引数にすることになる★チャレンジ140のやり⽅をいろいろやらせる【別解】
配列のtigersを引数にした関数
配列のbananasを引数にした関数

146〜151

12 notif not banana.rotten()

ベン図

goto bananaとnot,and, orP12★このへんで、whileを⼊れたほうがいい。

判断★３，６，７章を使うか、９から１２章を使うか。
★until ugeuge と while not ugeuge が同じという理解をさせて、whileのループへ導く。（untilは○○になるまで、whileはＸＸの間）★until bear.sleeping(), while not bear.sleeping(),
while bear.起きている() のように誘導する。単にnotをつけるだけでなく関数の名前を変えたほうがよいことを理解させる。
★while型がわかりやすい時とuntil型がわかりやすい時を理解させる。
★「起きている関数(not sleeping())、⽣の関数(notrotten())、⻩⾊関数(not green())」などを作つくってnot 部分をラッピングすることが可能か？
152〜160

13 <，==

if health()<70
goto healthZone（⼤⼩関係の不等号がわからない

判断

可能性）

until health()==100
wait()
P14

・紙上で、関数づくりの練習で、戻り値ありの場合をさせる。いろんな関数、いろんな引数で。
・関数のイメージの脹らませを応⽤して説明。成功
したか失敗したかを返す。
・駅で乗り換えの例（乗り換えTo 阪和線

成功・失

敗）
・コピー機の例（コピー（100%,5枚）成功・失敗）・代⾦の例（代⾦（100円、５個））
・消費税の例（消費税（8%､100円））

48

表６

「コードの冒険」のつまずき対策（続き）

チャレン レッジ

スン

161〜175

名称

14 戻り値

主な処理

数学

分析（コンピュータ）

return no（値を返すという例を別途⽤意して実感させること

return yesが必要）

他の⾔語との接続

アルゴ
リズム
関数

return not crow.watching()
P14

・紙上で、関数づくりの練習で、戻り値ありの場合判断をさせる。いろんな関数、いろんな引数で。
・関数のイメージの脹らませを応⽤して説明。成功
したか失敗したかを返す。
・駅で乗り換えの例（乗り換えTo 阪和線 成功・失敗）・コピー機の例（コピー（100%,5枚）成功・失敗）・代⾦の例（代⾦（100円、５個））
・消費税の例（消費税（8%､100円））
176〜189

15 onKey

onKey = (key) ->190〜195

16 onMouseMove

onMouseMove = (pos) ->（イベントドリブンな記述の仕⽅）

if key == 'w'
step 1（座標がわからない可能性）（イベントドリブンな記述の仕⽅）

bat.setX pos.x
bat.setY pos.y196〜21017 onClickhippo.onClick = () ->（onClickはオブジェクトに設定する。それがオブmonkey.turnTo hippo

ジェクトを対象とした⽂で宣⾔するということと、

monkey.toss()

その実⾏はonClickイベントで発動されるということの発想の切り分けが難しい。他の部分は順次処理であるが、イベントドリブンな部分は割り込みになってその中では順次処理ということ。）（３）実施⽅法
ａ．基本的な考え⽅
基礎対策についてクラス全体にしたほうがいいものと、特定のつまずいている学⽣のみが対象のものがある。その区別はクラスによって異なるので、ここでは基準は⽰さない。ク
ラス全体にしたほうがいいものは、授業の冒頭に全体に向けて実施する。その他のものは、個別対応である。
応⽤対策については、各授業の最後の１５から２０分くらいの時間に説明する。課題についての簡単なプリントを作っておき、それを配布して説明する。その際、「コードの冒険」
でせいいっぱいの学⽣については⾃分の作業をつづけるように指⽰する。また、これらは応⽤的なもので、これができなくとも CodeMonkey には関係がないと安⼼させて話をする。
応⽤対策の作業は授業内に完結できない場合宿題とすればよい。せいいっぱいの学⽣でも意欲があれば⾃宅で取り組んでよい。次年度この応⽤対策⽤のプリントを制作する。
ｂ．参考情報本プロジェクトのアドバイザーである飯箸泰宏先⽣より、助⾔をいただいたので、その本⽂を上げるので、参考にしていただきたい。
コードモンキーをはじめとする課題学習（〜実技学習）は進度も理解度も異なりますので、次のような⼯夫がほしいです。
① グループ学習を⼤幅に取り⼊れて、評価は個⼈評価半分+グループごとの進度半分とす
ると、進んだ⼦は遅れた⼦を必死に教えます。グループごとの進度点はクラス内に公開しておくとグルーブ同⼠の競争になります。私は個⼈の課題評価点（時系列がわかる状
態で）もクラス内公開にしていました。
② 進度制限を⼀律にしない。個別に当⾯の課題のクリアが確認されたら次のステージを開49

放するなどで、進んでいる⼦が飽きてしまわないようにすることが⼤事と思います。全
てのステージを終えてしまった⽣徒・学⽣には、⾃由課題に取組むことを許可するとあらかじめ宣⾔しておくと、意欲の向上を図れます。⾃由課題の案のいくつかは教師側で準備しておいて、本⼈の希望案も適切であれば許可すればよいと思います。
③ つまづきは、全員の⽣徒に⽣ずるのではありませんから、つまづきに対して⼀⻫講話するなどのことをすると他の⽣徒が飽きてしまうことにも注意が必要です。課題学習はテ
ンポよく進みたいというのが⽣徒・学⽣の⼼理です。以下の補⾜を参考にしていただけ
れば幸いです。
補⾜:
進度の違う⽣徒が同席しますから、⼀⻫にアナウンスできるのは、授業の最初と最後、およびよほどの危険が⽣じたときくらいしかできません。私の場合は、「ヒントブック（オリジナル⾃家製）」を作成して、電⼦ファイル（多くはワード）で事前配布していました。
「教師がしゃべらなくてよい（⼀⻫講話しない）」がモットーです。教師は⼀⻫講話しな
い代わりに学⽣の傍に⾏って質問に答えるほうが効果的です。
内容はほぼマニュアルに近いです。マニュアルとの違いは、「なぜこうなったか⾃分で考えよう」などという記述が所々にあるくらいです。
グループ内で、「何で?」と聞き合って、ほとんどが解決します。互いの質問のきっかけになっています。それでもわからない場合は⼿を挙げてもらって、教師が駆け付けて説明します。
ヒントブックは、ほとんどが図解で、図に対する解説を箇条書きで書きます。⻑い⽂章はほとんど読んでくれないからです。
さらに、例えば偏差値 43 の某 KKSK ⼤学理⼯学部では、極⼒漢字を避け、漢字でないとむしろ分かりにくい術語については括弧書きで読みと意味を書きました。
授業の最後には「振り返りブログ」を書いて、当⽇の成果物は途中でもよいので必ずメー
ル添付で提出することになっていましたので、どちらかに学⽣のつまづきが発覚します。つ
まづいた学⽣に「ヒントブックのここを⾒て」というだけで済むかというとそうはいきません。ヒントブックを読み間違いしたり理解していない場合や予期しなかったつまづきに対しては、2 つの対処がありました。
・追加ヒント・ノート（まとまると追加ヒント集）を作って配布する。
メールで届いたりブログに書かれたつまづき箇所については本⼈宛の解説を返信します。
⼆⼈以上がつまづいたもの（または⼆⼈以上がつまづきそうなもの）は追加ヒン
ト・ノートにして全員に配布する原則にしました。
⽬安として、3 割以上の学⽣が必要とする追加ヒントは次の学期にはヒントブックに取り⼊れます。2 割未満の学⽣しか必要がない追加ヒントは、追加ヒントだけにし

50

ます。
ヒントブックの本筋から外れた説明が多いと煩わしくなって、普通に進捗する学⽣はヒントブックを読まなくなりますから、別ヒントにしたのです。
・お助けチームを作って活動させる。
私の授業は半期で平均 45 の課題がありましたので、グループを超えて助けた学⽣には助けた回数（つまづいていた学⽣が「分かった」と宣⾔した回数）に応じて他の課題を完了したのと同じだけの点数をあげることにしていました。
「困った学⽣は⼿を挙げろ、先⽣かお助け隊を派遣する」というルールにしていました。1 回教えると 2 点加算するくらいの感覚になります。
つまづいている学⽣が多いと教師だけでは⼿が回りませんので、その場で進捗の早い学⽣から順にお助け隊を命じて救援に向かう先を指定します。
救援が完了したら教師に駆け寄って「誰が、こんなところでつまづいていたので、こう教えたらうまく⾏きました」という⼝頭報告をします。
教師は素早くメモを作りつつ、救援先の学⽣の名前を呼んで、「××君、この問題は解決したんだね」と聞いて、良い返事だったら加点するという⽅式でした。
お助け隊になって救援しに⾏ったのに、逆に教えてもらって帰ってくる学⽣もいて、てんやわんやになりますが、にぎやかで楽しい授業になります。

51

５．CodeMonkey の代替システム
CodeMonkey に依存せず同等の結果を出せるようにするため、CodeMonkey のクローンを開発しておくことその対策のひとつである。クローンが満たすべき要件については次年度以降にまとめるが、本年度は委員会より指⽰のあった３つの⽅法と、CodeMonkey の学
習コンテンツで Python を学ぶ簡易コースである「トリビアチャットボット」について簡単に情報を収集した。
３つの⽅法とは、・Pyxel ・・・ Python 上のゲームエンジン。レトロゲーム⽤のエンジンである。作者が⽇本⼈であり、⽇本語で情報が取りやすい。Python 上に構築されているため、クローンを作る場合、システム内の⾔語を CoffeeScript ではな
く Python に変更できる利点がある。
・⽇本語プリプロセッサ ・・・ CodeMonkey のつまづき原因の⼀つは、CoffeeScriptの⽂法が英語の影響を受けていることや変数名や関数名、予約語が英語がベースになっていることである。クローンにおいて、変数名や関数名、予約語などを⽇本語化できれば、学習効率を向上できると予想できる。それにはクローン内で書かれたコードを⽇本語プリプロセッサを介してネ
イティブ⾔語に変換する必要がある。
・Moocs ・・・ クローンにおいて、学⽣の管理を⾏う場合、その機能を外部化することで開発⼯数を削減できる可能性がある。また、学習システムとして教師側からも学⽣側からも他の科⽬と同⼀のプラットフォームで管理できる
メリットがある。
また、「トリビアチャットボット」とは、・トリビアチャットボット ・・・ CodeMonkey の学習コンテンツのひとつ。
「コードの冒険」と同じくブラウザ上で動作するプログラミング教材で、「Python」
を使って、メッセージのやり取りを⾏うチャットボットの作り⽅を学ぶコース。サルのモンタ・チャットボットが出すトリビア（⾖知識）を問う
質問に、ユーザーが回答、チャットボットが正否を判定して、チャットの最後に正答数に応じたメッセージを⾃動的に返す、という簡単なチャッ
トボットの作り⽅を 16 のエクササイズを通して学ぶ。
以下のこの４つについて、情報収集したことを整理した。
５．１

Pyxel

Python 上のゲームエンジン。レトロゲーム⽤のエンジンである。作者が⽇本⼈であり、⽇本語で情報が取りやすい。Python 上に構築されているため、クローンを作る場合、シス52

テム内の⾔語を CoffeeScript ではなく Python に変更できる利点がある。
（１）概要
Pyxel（ピクセル）は、ドット絵タイプのゲームを簡単に作れる「レトロゲームエンジン」
である。

a. 作者

⽇本⼈の tkitao さん
http://tkitao.hatenablog.com/entry/2018/11/24/185346

b. 歴史

2018 年 7 ⽉ 30 ⽇にリリースされた、⾮常に新しいゲームエンジン。
海外を中⼼に急速にユーザーが増えている。

c. ソース

GitHub でオープンソースとして公開されている。
https://github.com/kitao/pyxel

d. 特徴

使える⾊は 16 ⾊のみ、同時に再⽣できる⾳は 4 ⾳までなど、レトロゲー
ム機を意識したシンプルな仕様で、Python でドット絵スタイルのゲームづくりが気軽に楽しめる。

e. 仕様

Windows、Mac、Linux 対応
Python3 によるコード記述
16 ⾊固定パレット
256x256 サイズ、3 画像バンク
256x256 サイズ、8 タイルマップ
4 ⾳同時再⽣、定義可能な 64 サウンド
任意のサウンドを組み合わせ可能な 8 ミュージック
キーボード、マウス、ゲームパッド
画像・サウンド編集ツール（２）主な情報ソース

53

a. 作者による紹介記事
レトロゲームエンジン Pyxel でプログラミングを始めよう！
http://tkitao.hatenablog.com/entry/2018/11/24/185346
特⻑① Python でプログラムできる
特⻑② マルチプラットフォーム対応特⻑③ 覚えることが少ない（11 種類の命令を覚えるだけで、すべての描画機能。
5 種類の命令を覚えるだけで、効果⾳や⾳楽の作成と再⽣ができる）
特⻑④ 専⽤ツールが同梱されている（絵や⾳楽の作成ツール同梱）
特⻑⑤ 無料で使える(MIT ライセンスで公開)
特⻑⑥ 作者が⽇本⼈(作者が書いた⽇本語マニュアルもある)
b. はやぶささんによる「Python でレトロゲームを作ろう！」
https://cpp-learning.com/pyxel_tutorial/
Day1 -画像の扱い⽅Day2 -マウス操作Day3 -クラス化Day4 -ベクトルDay5 -ショット攻撃Day6 -当たり判定Day7 -⼈⼯知能※関連記事

ゲームソフト開発を題材にしたオブジェクト指向⼊⾨

https://cpp-learning.com/object-oriented/
c. Pacman ⾵ゲームをつくる
Pyxel でパックマンぽいゲームを作る
https://qiita.com/stmn/items/4048d4af2a9613594b60
d. パズドラ⾵ゲームをつくる
話題の pyxel でパズドラ⾵パズルゲームを作ってみた。
https://note.mu/pluswing/n/nd2a3a0499e05
e. 開発者コミュニティ「冬休みに Pyxel でレトロゲームをつくってみる会」
https://connpass.com/event/113463/（３）簡単なまとめ
CodeMonkey クローンのうち、主⼈公が動くゲーム画⾯部分については、Pyxel 程度の能⼒があれば⼗分である。⼀⽅で、画⾯の解像度が 256ｘ256 に限定されている。これでは、
おそらく、コードの画⾯をゲーム画⾯の中に設けるのは無理があるだろう。
クローンシステムは、⼤きく分けて、チャレンジ内のコードの⼊⼒・評価・デバッグを⾏うコースの管理のエンジンと、コードに基づいてゲームを再現するゲームのエンジンの２54つからなるシステムで、ゲームエンジン側に Pyxel を使う形になるのではないか（図１）。

コード画⾯

ゲーム画⾯

⽇本語
プリプロセッサ
ゲームエンジン
コースエンジン
Pyxel

Python

図１５．２

クローンの基本的なシステム構成

⽇本語プリプロセッサ

CodeMonkey のつまづき原因の⼀つは、CoffeeScript の⽂法が英語の影響を受けていることや変数名や関数名、予約語が英語がベースになっていることである。クローンにおいて、変数名や関数名、予約語などを⽇本語化できれば、学習効率を向上できると予想できる。それにはクローン内で書かれたコードを⽇本語プリプロセッサを介してネイティブ⾔語に変換する必要がある。
現在の CodeMonkey では、命令や変数名などが英語となっている。またプログラミング
⾔語の語順も英語の語順が基本となっている場合が多い。プログラミング⾔語の開発がアメリカ発だということもあり、英語を基本としてプログラミング⾔語が開発されることは圧倒的なデファクトスタンダードとなっている。
しかし、頭の中の考えとコードの⾔語表現が近いと、プログラムの意図が理解しやすくなる。⽇本⼈の、とりわけプログラミング初⼼者にとっては、この英語の壁は⼤きな壁である。
初⼼者向けの教材において、何らかの⽇本語表現でプログラミングできるようにする⽅法を考えておく必要がある。
委員会では、Python に⽇本語プリプロセッサを経由させることで、Python 上でより⾃然

55

に⽇本語が使える⽅法を検討する⽅針が打ち出されている。本節では、その⽅法について情報を収集した。具体的には、・⽇本語プリプロセッサ・⽇本語プログラミング⾔語について
・Python での⽇本語の取扱についてについてである。
（１）⽇本語プリプロセッサａ．⽇本語プリプロセッサとはプリプロセッサとは、⼀般にある処理を⾏うソフトウェアに対して、データ⼊⼒やデータ整形などの準備的な処理を⾏うソフトウェアのことである。プログラミング環境に関して
⾔えば、コンパイラまたはインタープリタがソースコードをコンパイル／中間⾔語翻訳す
る前に、⼀旦ソースコードに前処理を施すためのプログラムである。
⽇本語プリプロセッサとは、プリプロセッサの中で、ソースコード内の命令などを⽇本語表記からコンピュータ⾔語の予約語などに変換するプログラムである。
b. 参考情報「ことだま on Squeak」

Squeak の上に「ことだま」という⽇本語プログラミング⾔語を実装したもの。
http://crew-lab.sfc.keio.ac.jp/squeak/
初⼼者⽤プログラミング環境「ことだま on Squeak」の試み
http://gakkai.univcoop.or.jp/pcc/paper/2007/pdf/177.pdf
教育⽤プログラミング⾔語としての「⾔霊」と「ことだま on Squeak」の試み
https://www.cmc.osaka-u.ac.jp/publication/for-2006/17-22.pdf（２）⽇本語プログラミング⾔語
ａ．⽇本語プログラミング⾔語
現在、代表的な⽇本語プログラミング⾔語には３つある。
・プロデル
・なでしこ
・ドリトル
である。その特徴について簡単に整理する。
⽇本語の⾃然さは、なでしこが⼀番すぐれている。
ｂ．プロデル
ゆうとが開発したインタプリタ型の⽇本語プログラミング⾔語である。
⽇本語プログラミング⾔語の「TTSneo」を前⾝とし、仕様を⼀新。アップグレードする

56

形で公開された⾔語。TTS が公開されたのは、2000 年。TTSneo の公開は 2002 年。TTSの公開から数えると、プロデルは 18 年の歴史。プロデルは「教育向け⾔語」として開発されたものではなく、汎⽤的なソフトウェア開発⾔語を志向している。プロデルには様々な実⽤的なプラグインが⽤意されている他、API 連携も可能。
プロデルの公式ページ
https://rdr.utopiat.net/
プロデルの公式解説ページ
https://rdr.utopiat.net/docs/onepage/first.html
Wikipedia のページ（簡単な⾔語仕様あり）
https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%87%E3%83%AB
ｃ．なでしこクジラ⾶⾏机が開発したインタプリタ⽅式のスクリプト型プログラミング⾔語である。
オープンソースプロジェクトである。
クジラ⾶⾏机⽒は、なでしこの前⾝である⽇本語プログラミング⾔語「ひまわり」の開発者でもある。なでしこはひまわりを改良し、より⽇本語に近い語順でのコーディングを可能とすることを⽬標の 1 つとしている。
「なでしこ３」は、HTML/JavaScript によるブラウザでの実⾏が可能。ローカルにも開発環境の構築が可能。情報処理機構の 2004 年未踏ソフトウェア創造事業「未踏ユース」に採択された。コミュニティの活動が活発な⾔語である。
なでしこの公式ページ
https://nadesi.com/top/
なでしこリファレンス
https://nadesi.com/man/ｄ．ドリトル
⼤阪電気通信⼤学教授の兼宗進により開発されたプロトタイプベースのオブジェクト指向⾔語。
ドリトルは中学校や⾼校の教科書や副教材に採⽤されている、教育向けの⽇本語プログ
ラミング⾔語。プロデルやなでしこと⽐べ、より教育⽤途に特化し、教育現場を中⼼に普及が進んでいるのが特⾊。フリーウェア。
公式ページ
https://dolittle.eplang.jp/

57

公式マニュアル
https://dolittle.eplang.jp/manualv3（３）Python での⽇本語の取扱
⽇本語変数、⽇本語メソッド名対応の主要なプログラミング⾔語としては、次のものが挙
げられる。
C#
PHP
Python
Ruby
Java
Perl
node.js
Objective-C(Xcode5)
Python については、3.x 系から⽇本語変数名、関数名に対応している
ａ．Python 3 では識別⼦に ASCII ⽂字以外が使える
Python3 では識別⼦（変数/関数/クラス名）に Unicode ⽂字が使える。⼤⽂字アルファ
ベット、⼩⽂字アルファベット、アンダースコア、数字、以外に⽇本語の全⾓⽂字が使える。
数字は識別⼦の先頭には使えない。予約語は使えない。アンダースコアで始まる識別⼦は、特別な意味がある。

ｂ．⽇本語でプログラムを書くためのモジュール
単に変数名やメソッド名を⽇本語にするだけでなく、組み込みのメソッドの表記も⽇本語化する⽅法もある。
⽇本語でプログラム書くためのおまじない
おまじない.py
https://qiita.com/mutsu/items/175a2cf770c18732043b

58

ｃ．⽇本語の変数名、メソッド名のメリット・デメリット①⽇本語識別⼦の必要性 potimarimo
https://www.slideshare.net/potimarimo/ss-12314191

59

60

②IT/Web エンジニア向け総合求⼈・学習サービス「paiza」のエンジニアによる評価――新⼈プログラマが絶対に知っておきたい、⽇本語変数利⽤時の作法実感したメリット
ちゃんと書けば、⾃分の書いたテストは、読んだときに圧倒的にわかりやすい
テストメソッド名から曖昧さがなくなる（テスト設計になる）。
適切な⽤語を⽤いると、コメント不要になり、ソースの可読性も⾼まり良いことづくめでした。
実感したデメリット
メソッド名に本⼈の癖が出やすい＋⾃由度が⾼いので、他⼈のテストが読めない
冗⻑になりがち。
プロジェクトのソースを外国⼈が保守する場合、⽇本語が読めなくてトラブルに
なる。

61

出典：
https://paiza.hatenablog.com/entry/2014/04/21/%E6%96%B0%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%8C%E7%B5%B6%E5%AF%BE%E3%81%AB%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%80%8
1%E6%97%A5%E6%9C%AC%E8%AA%9E③⽇本語識別⼦が流⾏らないのは◆ IME はそれほど負担はない◆ 逆に使いこなせばメリットも多い◆ どこでどう⽇本語を使うかのほうが使いづらい理由かも
http://var.blog.jp/archives/75345476.html
昔なら⾔語でアルファベット以外を使えてもその他ツールが対応してない状況だった。
しかし、Unicode 対応していて当たり前の時代になり、ツールの対応⾯ではあまり困ることはなくなっている。
ただし、英語＝プログラム、⽇本語＝コメント、となっているとコメントの読みやすさが断然違う。
⼤きな問題は、複数⼈で書いている場合に、どこをどういう⾵に⽇本語にするのか、という命名規則の問題である。
例えば、「ページ」を例にすると、タイプする⽂字は 「pe-ji」 なので 「page」 にしてしまえばタイプ数が減る。逆に 「説明」 は 「setumei」 なので 「description」 と書くより短い。
どういうときに⽇本語を使うかを明確にしないと キャメルケースとスネークケースみたいな問題になる。（英語の場合の代表的な命名規則：コンスタントケース、パスカルケー
ス、キャメルケース、スネークケース、ケバブケースなど）。変数か関数かみたいな使う場所ではなく、⾔葉に応じて変えたくなるので難しい。
https://qiita.com/am_nimitz3/items/7b01af53751dba5d8fb1
⽇本語使うなら統⼀して全部⽇本語なら単純ですが、attr とか value とか num とかア
ルファベットのほうが短く打ちやすいし意味もわかりやすい場合もあるのに⽇本語しか使えないのは不便。is***, add***, remove***, can*** みたいなプレフィックスはわかりやすいので使いたい。
④識別⼦に⽇本語を使うことについての考察 @arai-ta
https://qiita.com/arai-ta/items/08d0fdb275ff0fcf68a6
⾔語構造そのものを⽇本語化するのではなく 識別⼦を⽇本語表現にする。

62

⾔語構造に⽇本語を導⼊するということは、それ⽤の⾔語を採⽤することであり、以下の⾯でリスクが⼤きい。
- ⾔語の習得コスト- 開発スキルのある⼈員の採⽤- ライブラリ、エコシステムの利⽤可能性
⽇本語を⺟国語とする開発メンバーが多数を占めると確信できる状況でないとメリットを享受するのは難しい。
向いている⽤途
テストケース名
ドメイン知識が複雑なとき⑤プログラム⽇本語で書けばいい気がするけどhttps://anond.hatelabo.jp/20170421230333
⽇本語で書ける⾔語使うんじゃなくて、変数名や関数名が Unicode 対応で⽇本語書けるものを使えばよい。
業務システムの固有名詞とか⽇本語特有なものとか無理に英語化してよくわからないことになっていたり、⾒づらくなるくらいなら⽇本語使えばいいんじゃないか。
年⾦額を取得する関数で「年⾦額を取得する」「年⾦額を取得」「年⾦額を取り出す」とかの表記を迷うんじゃなくて「get 年⾦額」でいいと思う。
（４）まとめ・業界の慣習として、プロは英語の識別⼦で書くことが多い
・英語のプログラミング⾔語と英語の識別⼦に慣れる必要がある
・⼀⽅で、プログラムを推敲する段階では断然⽇本語のほうがわかりやすい・プログラムの全体を⽇本語化しなくとも、識別⼦または識別⼦の⼀部を⽇本語化することは、初学者にはメリットがある

63

・Python であれば、識別⼦の⽇本語化には障害はない
・⽇本語プリプロセッサをつくらなくとも⽬的は達せそう
・⽇本語プログラミング⾔語を採⽤しなくとも⽬的は達せそう
・もし必要な場合でも、「おまじない.py」などの⼯夫でかなりの⽬的は達せられる・⽇本語識別⼦を使う場合は、命名規則を制定しておく必要がある
補⾜：本プロジェクトのアドバイザーである飯箸泰弘先⽣より助⾔があったので、掲げておく。
⽇本語プログラミングは教育⽤と未熟練⼯⽤に限定してよいように思います（なでしこ=
酒徳君作が成功している理由）。⾔語は、どんなにいいモノでも、結局は普及しているものに負けてしまいます。
⾺場君も酒徳君も語順にこだわるようになったのは、私が⽇本語プログラミングサミッ
トで、「⽇本語の語順」にこだわるように主張してやまなかったためです。そのため、彼らは、それまでの⾔語を捨てて、⼆⼈とも根本からのバージョンアップ、実は新⾔語に移⾏してしまいました。
これはこれで悪くないですが、これまでの⾔語にない⼈の⼼をわしづかみにする何かが不⾜しています。
⽇本語プログラミング⾔語にとって「⽇本語の語順」はこだわるべき課題の⼀つではありますが、唯⼀無⼆ではなく、他にもこだわるべきものがあり、優先順位が⼀番というわけではなかったような気がします。悪いことを⾔ってしまったかもしれません。
まずは、学習⽤・未熟練⼯向けにそこそこ普及してから、これになれた⼈が実務でも使⽤するようになるという⾃然の流れを作らなければいけないですね。優先すべきは熟練⼯向
き仕様ではなく、学習⽤・未熟練⼯向け仕様だと思います。
５．３ Moocs
クローンにおいて、学⽣の管理を⾏う場合、その機能を外部化することで開発⼯数を削減できる可能性がある。また、学習システムとして教師側からも学⽣側からも他の科⽬と同⼀のプラットフォームで管理できるメリットがある。
クローンにおいて、学⽣の管理を⾏うプラットフォームとして、Moocs が使いうるかど
うか判断するため、Moocs の基本的な情報を整理した。
（１）Moocs のトレンド
Massive Open Online Course (MOOC、ムーク) または Massive Open Online Courses(MOOCs、ムークス) は、インターネット上で誰もが無料で受講できる⼤規模な開かれた講義のことである。代表的なプラットフォームとしては「Coursera」「edX」や、⽇本版とし

64

ては JMOOC が提供する「gacco」「OUJ MOOC」があり、条件を満たせば修了証が交付される。（Wikipedia）
a. MOOC とは何か ポスト MOOC を⾒据えた次世代プラットフォームの課題
⼭⽥ 恒夫

情報管理 / 57 巻 (2014) 6 号

https://www.jstage.jst.go.jp/article/johokanri/57/6/57_367/_html/-char/jab. MOOC と学習解析 - 情報処理学会電⼦図書館 - 国⽴情報学研究所
⼭⽥恒夫

情報処理学会論⽂誌

教育とコンピュータ Vol.1 No.4 1-11 (Dec. 2015)

https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_action_common_download&item_id=146537&item_no=1&attribute_id=1&file_no=1&page_id=13&block_id=8
c. MOOC、有償化の動き
2012 年に世界のエリート⼤学を席巻した MOOC だが、有効なビジネスモデルが⾒つからないまま 6 年がたち、有償化の⾊彩を更に強める流れが出てきている。
https://rcos.nii.ac.jp/miho/2018/07/20180702/
d. OpenMOOClms
オープンムーク lms は⼤学、教育機関で主に導⼊されているオープンソースの LMS（授業、学習⽀援システム：Moodle）をベースに、e ポートフォリオ・達成度評価管理、ストリーミング動画配信機能を連携させたシステム（MOOC 構築システム）。
https://lms.resonantstyle.com/（２）Moocs の広がり
JMOOC で「プログラミング」で検索すると、ヒットするのは８件である。そして、2019
年 3 ⽉で開講中なのは次の１件のみであった。
a. 誰でも教えられる！ プログラミング授業
⼀般社団法⼈応⽤編

ファーストスタープロジェクツ

講師：斎藤 正武（中央⼤学）
https://www.fisdom.org/F00000066/（３）Udemy での広がり
有償の教育プラットフォームであり、MOOC のひとつでもある Udemy で同様に「プログラミング」で検索すると、ヒット数は 1157 件。様々なプログラミング⾔語、様々な切り65

⼝、様々な価格帯で提供されている。中でも「プログラミング ⼊⾨」で調べると次のようなものがヒットした。
a. こどもプログラミング教室直伝！⼩学⽣プログラミング教育の概要解説と明⽇の授業でつかえる、⼊⾨・応⽤教材まるごとパック
Scratch を使って 90 分授業 2 本できる、プログラミングスクールが現場のノウハ
ウを活かして作った教材で安⼼！教えたい⼈必⾒ネタを公開。
「⼩学⽣を対象にした
本格スクラッチ教材。⼊⾨編と応⽤編」明⽇から授業に使える付録付（スライド・テ
キスト）￥19,800
https://www.udemy.com/tinkers-tryal/b. Scratch 3.0 ⼊⾨

親⼦で楽しむプログラミング！

スクラッチでゼロから学ぶプログラ

ミング的思考の第⼀歩2020 年の⼩学校でのプログラミングの必修化に向けて、⼦供と楽しみながら何か取り組んで⾒たいとお考えなら、世界で最も親しまれている Scratch がオススメです。
プログラミングは、ビジネスにも役⽴つ論理的思考や問題解決能⼒の育成に役⽴ちます￥10,800
https://www.udemy.com/scratch_programming/c. Excel VBA[第 3 弾](実⽤マクロ⼊⾨編)受注データを 5 秒で⼊⼒できるユーザーフォーム
作成 VBA プログラミングシリーズ 2500 名が学んだ Excel マクロ VBA 講座の⼈気シリーズから、リクエス
ト多数につき[第 3 弾]が登場！今度のマクロは、受注データを５秒で⼊⼒できるユー
ザーフォーム編。１つのアプリを制作するかのように⼯程を楽しみながらスキルを磨こう！
￥4,200https://www.udemy.com/excel23vba3/（４）Moodle のプラグイン
a. 役⽴ちそうな Moodle プラグイン情報
http://mahakala.lesc.uec.ac.jp/mahoodle/moodle/plugins/
コンピテンシー関連プラグイン (※学習プラン関連プラグイン)
教材作成・エディタ関連プラグイン (※数式，化学式・化学構造エディタ，分⼦構造，プログラミング，問題作成，EJS)
モバイル関連プラグイン (※モバイル66

モニタリング関連プラグイン (※GISMO，チェックリスト)
ポートフォリオ関連プラグイン (※Mahara 課題提出，マミライン，Exabis E-Portfolio)
アンケート関連プラグイン (※アンケート⽤活動モジュール)
レポート関連プラグイン
ルーブリック関連プラグイン (※Exabis Competencies，Exabis Student Review，LA eRubric)
テーマ関連プラグイン (※Essential，Bootstrap)
⽀援・管理ツール関連プラグイン
ビューア (Viewer)関連プラグイン
b. 開発初⼼者のための Moodle プラグインの開発と利⽤ for Moodle Moot 2015
https://www.slideshare.net/s-yamaoka/moodle-20150221
https://www.slideshare.net/s-yamaoka/moodle-for-moodle-moot-201567

（５）まとめ・Mooc は⼤学中⼼に広がったシステムで、テキストと動画を⼿段としている。
・Mooc の LMS は Moodle ベースとなっている。
・Mooc と CodeMonkey クローンを接続する場合、Mooc の LMS と接続することになると予想される。
・CodeMonkey と同程度の管理機能を実現する場合、Moodle のプラグインを新規につくることになるのではないか。
・Udemy の LMS は公開されていないため、カスタマイズは不可能。
・クローンを何らかの Mooc 上につくるのか、独⾃のプラットフォーム上にするのか判断

68

が必要。
５．４

トリビアチャットボット

トリビアチャットボットは、CodeMonkey の学習コンテンツのひとつである。
「コードの冒険」と同じくブラウザ上で動作するプログラミング教材で、「Python」を使って、メッセージのやり取りを⾏うチャットボットの作り⽅を学ぶコースだ。サルのモンタ・チャットボ
ットが出すトリビア（⾖知識）を問う質問に、ユーザーが回答、チャットボットが正否を判定して、チャットの最後に正答数に応じたメッセージを⾃動的に返す、という簡単なチャッ
トボットの作り⽅を 16 のエクササイズを通して学ぶ。
Python ベースの CodeMonkey クローンができた場合、どのような学習体験になるのか、
トリビアチャットボットである程度体験可能なのではないか。トリビアチャットボットの使⽤感について整理した。
（１）トリビアチャットボットとコードの冒険の違い
a. 指⽰出しの画⾯①コードの冒険

簡単なインストラクションが出る程度。
コード画⾯とゲーム画⾯にオーバーラップするダイアログして表⽰される。
②トリビアチャットボット
解説部分

69

段階的に正解に導くチェック

この２つの部分は画⾯の左側にある。
b. コード画⾯①コードの冒険70

画⾯の右側にある。
②トリビアチャットボット

画⾯の真ん中にある。
c. ゲーム画⾯①コードの冒険71

画⾯の左側にある。
②トリビアチャットボット

画⾯の右側にある。
d. まとめ
コードの冒険では、説明は最⼩限である。トリビアチャットボットでは、１ペインが説明に当てられている。さらに、プログラムを段階的にチェックして、プログラムを完成させるようになっている。
コードの冒険では、ゲーム画⾯を⾒てコードを考えるという形であった。チャットボット

72

では、ゲーム画⾯を⾒て考えるというより、説明やコードのコメントを読んでプログラミン
グする形である。直感的な理解がしにくい。チャットボットの性格上、説明を主体にしないとできないのかもしれない。
（２）⾔語仕様の違い
ａ．プログラミング⾔語の違い①コードの冒険
CoffeeScript を独⾃に拡張したもの。CoffeeScript の⾔語仕様に加えて、CodeMonkey ⽤のクラスやメソッドが追加されている。ループを単純化するための、「整数.times」はCodeMonkey の独⾃拡張である。
②トリビアチャットボット
Python を独⾃に拡張したもの。Python の⾔語仕様に加えて、CodeMonkey ⽤のクラスやメソッドが追加されている。CoffeeScript の「Until」ループは、Python には存在しない。
「整数.times」も存在しない。トリビアチャットボットの仕様に含まれているかは未確認。
ｂ．⾔語の違いによる教育上の効果
教育向けプログラミング⾔語としての CoffeeScript
CoffeeScript は、JavaScript の優れた部分を簡単な⽅法で記述するために開発された⾔語である。教育を⽬的に作られたものではない。CodeMonkey の教育経験者が、Qiita にまとめた記事によると、「⼩学 1 年⽣から 6 年⽣までの児童に教えてみた経験を踏まえ、教育⽤として優れていると感じた点」は次の５点である。
この５点について、CoffeeScript と Python を⽐べてみた。
CoffeeScript

Python

・⽂末セミコロン不要○△

・引数の括弧不要○Ｘ・ブロック記述のための括弧不要○○

・モダンなプログラミング⾔語○○

・モダンブラウザで実⾏可能○○

⽂末セミコロンは Python でも不要であるが、Python では、if ⽂の最後、for ⽂・while ⽂の最後、関数定義の def ⽂の最後などに「:」が必要である。
引数の括弧は CoffeeScript では省略可能である。但し、引数なしの関数では最後に（）が必要である。Python では引数の括弧は必須である。
⼩さな違いであるが、初期の教育においては、教育上のつまづきを⽣みやすいポイントである。クローンを開発する場合、この２点について、プリプロセッサなどで処理することは有効であるかもしれない。

73

（３）その他の違い
a. コーディング規約の違い①コードの冒険
キャメルケース（最初の単語以外の⽂字の先頭を⼤⽂字）
例．

turnTo a②トリビアチャットボット
スネークケース（⽂字の単語間にアンダーバ）
例． send_message(greetings[0])b. 背景の⾳の有無①コードの冒険あり。⿃の声など。主⼈公の移動の効果⾳もあり。あったほうが気分が変わる。
②トリビアチャットボット
なし。無⾳。チャットの効果⾳はあり。無⾳で説明⽂を読むことになり、勉強の雰囲気である。
c. ⽇本語の利⽤①コードの冒険②トリビアチャットボット
いずれにおいても、コード中に⽇本語があるとうまく動かない。
チャットボットでは、メッセージを出すことが⽬的のプログラムであり、メッセージを英⽂字でしか出せないため、学習効果を決定的にそいでいる。CodeMonkey のサーバー側で、Unicode がうまく扱えない開発環境になっていると推測される。
（４）まとめ・チャットボットでは、説明が多く、段階的な理解が必要である。説明が⻑いため、あまり読まれないのではないかと感じる。
・コードの冒険に⽐べて、やらされ感がある。
・背景⾳がない影響か、チャットボットではコードの冒険に⽐べて、没⼊感が低い。
・現在の CodeMonkey では、識別⼦を⽇本語化することができない。
・Python では、⽂末の「：」や関数の（）などの⽂法がうるさい。
・クローンの⾔語を Python ベースにする場合、⽂末の「：」や関数の（）などを簡略化する処理があったほうがいいかもしれない。

74

・識別⼦を⽇本語化する場合、何らかのコード規約が必要である。

75

付録１

コードの冒険に登場する予約語と識別⼦を英語と⽇本語の違いに注⽬して分析した資料

76bridge

物/O

橋（はし）

はし

bush

物/O

しげみ

しげみ

cat

物/O

ネコ

ねこ

chase()

関数

おいかける

おいかける

coconut

物/O

ココナツ

ここなつ

collect()

関数

あつめる

あつめる

comparison

用語

コンパリソン、比較（ひかく）

こんぱりそんcomparison

用語

コンパリソン、比較（ひかく）

ひかく

crocodile

物/O

ワニ

わに

crow

物/O

カラス

からす

definition

用語

定義

ていぎ

degree

用語

角度、度

かくど

distanceTo()

関数～までの距離（きょり）

までのきょりdistanceTo(xxx)xxxまでの距離

助詞がついている、xxxの位置

drop()

関数

おとす

おとす

drop()

引数なし

引数なし

else

命令

さもなければ

さもなくば

else xxx

さもなければxxxする

else

命令

エルス

えるす

for

命令

くりかえす、の間、のためにくりかえす

chase(xxx)xxxを追いかける

xxxの位置collect(xxx)

xxxを集める

xxxの位置

角度と度の両方の意味がある「さもなければ」は日常で使わない

ａをaaaの中で（繰り返す）、aが繰り返すという動詞がない、日本

aaaの中である間（繰り返す）、a

語では「aaaの中にaがある/いるのためにaaaの中で（繰り返す）

間」と表現したい。語順が逆。

xxx.frozen()

引数なし。xxxが凍っている。

引数なし。語順は同じ。

for a in aaa

frozen()関数

こおっているかどうか

こおっているfunction用語

関数（かんすう）

かんすう

function用語

ファンクション

ふぁんくしょんfunction

用語

関数

かんすう

gate

物/O

門、扉（とびら）

もん

gate

物/O

扉

とびら

goat

物/O

ヤギ

やぎ

gorilla

物/O

ゴリラ

ごりら

goto()

関数～へ行く、～に行くへいく

goto(xxx)

xxxへ行く。

助詞が付いている。xxxの位置。

goto()

関数～へ行く、～に行くにいく

goto(xxx)

xxxに行く。

助詞が付いている。xxxの位置。

コードモンキー

用語集 / 辞書

英語

種類

意味

読み

英語語順

日本語語順

-

演算

マイナス、ひく

まいなす

-A

マイナスA

-

演算

マイナス、ひく

ひく

A-B

AからBを引く+演算

プラス、たす

ぷらす

+A

プラスA

+

演算

プラス、たすたす

A+B

AにBを加える

加えるの位置<演算～より小さいよりちいさいA<B

AはBより小さい

小さいの位置<演算～より小さいちいさい

A<B

AはBより小さい

小さいの位置=演算

代入（だいにゅう）、いれる

だいにゅう

A=B

AにBを代入する

代入するの位置=演算

代入（だいにゅう）、いれる

いれる

A=B

AにBを入れる

入れるの位置==演算～と等（ひと）しい、～と同じとひとしいA == B

AはBに等しい、AとBは等しい

等しいの位置==演算～と等（ひと）しい、～と同じとおなじ

A == B

AはBに同じ、AとBは同じ

同じの位置

>

演算

～より大きいよりおおきいA>B

AはBより大きい

大きいの位置>演算～より大きいおおきい

A>B

AはBより大きい

大きいの位置A and B命令

A かつ Bかつ

A and B

AかつB、AとB「かつ」は日常で使わない

A or B

命令

AまたはB

または

A or B

AまたはB、AかB

AもBもの意味が日本語にはない

all

英語

全部（ぜんぶ）、すべてぜんぶ

all xxx

xxxの全部、全xxx

all

英語

全部（ぜんぶ）、すべてすべて

all xxx

xxxのすべて、すべてのxxx

and

演算

アンド、かつあんど

A and B

AかつB、AとB「かつ」は日常で使わない

and

演算

アンド、かつかつ

A and B

AかつB、AとB「かつ」は日常で使わない

array

用語

配列

はいれつ

array

用語

アレイ

あれい

banana

物/O

バナナ

ばなな

bat

物/O

コウモリ

こうもり

bear

物/O

くま

くま

beaver

物/O

ビーバー

びーばー

boolean

用語

ブーリアン

ぶーりあん

boolean

用語

論理式

ろんりしき

Ver. 1.0

2019/3/10 清風情報工科学院
差
引くの位置

語順が逆、漢字熟語の「全○○」なら同じ
語順が逆、「すべての○○」は違
和感あり

no

定数

論理値（否定）、ろんりち（ひてい）
ひてい

not

演算

ノット

のっと

not A

Aでない

not A

命令

Aの反対（はんたい）、Aでない

のはんたい

not A

Aでない

not A

命令

Aの反対（はんたい）、Aでない

でない

not A

Aでない

object用語

オブジェクト

おぶじぇくとonClick()関数

クリックされた時

くりっく

onClick()

イベントハンドラ

onKey()

関数

キーボードおされた時

きーぼーど

onKey()

イベントハンドラ

onKey()

関数

キーボードおされた時おされた

onKey()

イベントハンドラ

onMouseMove()

関数

マウスが動いた時

まうす

onMouseMove()

イベントハンドラ

onMouseMove()

関数

マウスが動いた時

うごいたら

onMouseMove()

イベントハンドラ

or演算オア、または

または

or

演算

オア、またはおあ

password

用語

パスワード

ぱすわーど

pile

物/O

たば

たば

plus

用語

プラス、たす

ぷらす

plus

用語

プラス、たすたす

portion物/O

薬（くすり）

くすり

portion

物/O

ポーション

ぽーしょん

pos

変数/V

positionの省略、位置（いち）いち

語順が逆。漢字熟語の「不可能」「非常識」のような感覚。
語順が逆。漢字熟語の「不可能」「非常識」のような感覚。
語順が逆。漢字熟語の「不可能」「非常識」のような感覚。

語順が逆。「クリックされた時」または「クリックされたら」。
語順が逆。「キー入力された時」または「キー入力されたら」。
語順が逆。「キー入力された時」または「キー入力されたら」。
語順が逆。「マウスが動いた時」
または「マウスが動いたら」。
語順が逆。「マウスが動いた時」
または「マウスが動いたら」。

「一番近くの健康ゾーンへ行く」
gotoNearestHealth() 関数

一番近くの健康ゾーンへ行く

いちばんちかくのgotoNearestHealth()
引数なし

で、語順がぐちゃぐちゃ。英語の語順は「いく、に、近く、一番、
健康」

grab()

関数

つかむ

つかむ

grab()

引数なし

引数なし

green()関数

health()関数

緑色（みどりいろ）かどうか

みどりいろ

green()

引数なし

引数なし

健康かどうかけんこうか

health()hasBowTie()

引数なし

引数なし

関数

蝶ネクタイをしてるかどうか

ちょうねくたいしてるhasBowTie()

引数なし

引数なし

hasGlasses()関数

メガネをしてるかどうか

めがねしてる

hasGlasses()

引数なし

引数なし

healthZone

物/O

健康ゾーン、回復ゾーン

けんこうぞーん

healthy

変数/V

健康

けんこう

hippo

物/O

カバ

かば

hit()

関数

打つ

うつ

hit()

引数なし

引数なし
「ならば」の部分がないが、インIf

命令

もし～ならばもしIf

命令

もし～ならば

ならばinjured()関数

ケガしているかどうか

けがしているisland

物/O

島（しま）

しま

key

変数/V

キーボードのキー

きーぼーど

key

変数/V

キーボードのキーきー

key bind

用語

キーバインドきーばいんど

left

定数

左

ひだり

loop

用語

ループ

るーぷ

match

物/O

マッチ

まっち

minus

用語

マイナス、ひく

まいなす

minus

用語

マイナス、ひく

ひくmonkey

物/O

さる

さる

mover

変数/V

動くもの

うごくもの

near

関数

～の近くかどうか

のちかくか

no

定数

論理値（否定）、ろんりち（ひてい）
ろんりち

if xxx

もしxxxならばデントが「ならば」と解釈すればよい。

injured()

引数なし

near xxx

xxxの近くかどうか

引数なし

語順が逆。漢字熟語の「近未来」のような感覚。

turtle

物/O

カメ

かめ

until

命令

～までくりかえす

までくりかえす

語順が逆。プログラミング言語で
until xxx

xxxになるまで。

よく使うwhileとは真偽の判定が逆である。
語順が逆。プログラミング言語で

until

命令

くりかえす（～まで）くりかえす

until xxx

xxxになるまで。

よく使うwhileとは真偽の判定が逆である。
語順が逆。プログラミング言語で

until

命令

アンティル

あんてぃる

until xxx

xxxになるまで。

よく使うwhileとは真偽の判定が逆である。

variable

用語

変数

へんすう

waitFor()

関数

～を待つ

をまつ

waitFor(xxx)

xxxを待つ。

語順が逆。

watching()関数

見ているかどうかみているかどうか

watching()

引数なし

引数なし

yes

定数

論理値（肯定）、ろんりち（こうてい）
ろんりち

yes

定数

論理値（肯定）、ろんりち（こうてい）
こうていyummy()

関数

おいしいかどうか

おいしいか

通常のプログラミング言語では「True」を使う。
通常のプログラミング言語では「True」を使う。
yummy(xxx)

xxxが美味しいかどうか

語順が逆。

raft

物/O

いかだ

いかだ

return

命令

値（あたい）を返す

あたいをかえすreturn命令

返す（値を）

かえす

right

定数

右

みぎ

rotten()関数

腐（くさ）ってるかどうか

safe()

関数

safeCollect()

語順が逆。さらに、「値を返す」

return xxx

xxxを返す。

くさっているrotten()

引数なし

引数なし

安全（あんぜん）かどうか

あんぜんか

safe()

引数なし

引数なし

関数

安全に集（あつ）める

あんぜんにあつめる safeCollect(xxx)

xxxを安全に集める。

語順がばらばら。

safeFrom()

関数～から安全かどうかからあんぜんかsafeFrom(xxx)xxxから安全かどうか

語順が逆。

say()

関数

言う，しゃべるいう

say(xxx)

xxxと言う。

語順が逆。

say()

関数

言う，しゃべる

しゃべるsay(xxx)

xxxと言う。

語順が逆。

setX()

関数

Xにセットする

せっとする

setX(xxx)

xxxをXにセットする。

語順が逆。

setX()

関数

エックスにセットする

えっくす

setX(xxx)

xxxをXにセットする。

語順が逆。

setY()

関数

Yにセットする

せっとする

setY(xxx)

xxxをYにセットする。

語順が逆。

setY()

関数

ワイにセットするわいsetY(xxx)

xxxをYにセットする。

語順が逆。

sleeping()

関数

ねている

ねている

sleeping()

引数なし

引数なし

step()

関数

すすむ

すすむ

step(xxx)

xxx進む

語順が逆。

stepper

変数/V

すすむもの

すすむもの

tiger

物/O

トラ

とら

times

命令

～回くりかえす

かいくりかえすxxx.times

xxx回繰り返す

times

命令

くりかえす（～回）

くりかえす

xxx.times

xxx回繰り返すtoss()関数

投（な）げるなげる

toss()

引数なしという意味がわかりにくい。

語順は同じ。「繰り返す」がない。
語順は同じ。「繰り返す」がない。
引数なし
語順が逆。またプラスが右回りな

turn()

関数～に向（む）くにむく

turn(xxx)

xxx度回る。

のか左回りなのか、マイナスが右回りなのか左回りなのか、わかりにくい。
語順が逆。turn xxxなら「回る」

turnTo()関数～のほうに向くのほうにむくturnTo(xxx)xxxのほうを向く。

だが、turnTo xxxなら「向く」になって日本語では動詞が違う。

おとす

おとす

関数

drop()

おぶじぇくとオブジェクト用語

object

かいくりかえす～回くりかえす

命令

times

かえす

返す（値を）

命令

return

かくど

角度、度

用語

degreeかつ

A かつ B命令

A and Bかつ

アンド、かつ

演算

and

かば

カバ

物/O

hippo

かめ

カメ

物/O

turtleからあんぜんか～から安全かどうか

関数

safeFrom()

からす

カラス

物/O

crow

かんすう

関数（かんすう）

用語

function

かんすう

関数

用語

functionきー

キーボードのキー

変数/V key

きーばいんどキーバインド用語

きーぼーど

キーボードのキー

変数/V key

きーぼーど

キーボードおされた時

関数

onKey()

くさっている腐（くさ）ってるかどうか関数

rotten()

くすり

薬（くすり）

物/O

portion

くま

くま

物/O

bear

くりかえす

くりかえす、の間、のために

命令

for

くりかえす

くりかえす（～回）

命令

times

くりかえす

くりかえす（～まで）

命令

until

くりっく

クリックされた時関数

onClick()

けがしている

ケガしているかどうか関数

injured()

けんこう

健康

変数/V healthy

key bindコードモンキー 用語集 / 辞書

清風情報工科学院

読み

意味

種類

英語

あたいをかえす

値（あたい）を返す

命令

return

あつめる

あつめる

関数

collect()

あれい

アレイ

用語

array

あんぜんか

安全（あんぜん）かどうか

関数

safe()

あんぜんにあつめる

安全に集（あつ）める

関数

safeCollect()

あんてぃる

アンティル

命令

until

あんど

アンド、かつ

演算

and

いう

言う，しゃべる

関数

say()

いかだ

いかだ

物/O

raft

いち

positionの省略、位置（いち）変数/V pos

いちばんちかくの一番近くの健康ゾーンへ行く

関数

gotoNearestHealth()

いれる

代入（だいにゅう）、いれる

演算

=

うごいたら

マウスが動いた時関数

onMouseMove()

うごくもの

動くもの

変数/V mover

うつ

打つ

関数

hit()

えっくす

エックスにセットする関数

setX()

えるす

エルス

命令

else

おあ

オア、または

演算

or

おいかける

おいかける

関数

chase()

おいしいか

おいしいかどうか関数

yummy()

おおきい～より大きい

演算

>

おされた

キーボードおされた時

関数

onKey()

ていぎ

定義

用語

definition

でない

Aの反対（はんたい）、Aでない

命令

not A

とおなじ

～と等（ひと）しい、～と同じ

演算

==

とひとしい

～と等（ひと）しい、～と同じ

演算

==

とびら

扉

物/O

gate

とら

トラ

物/O

tiger

なげる

投（な）げる関数

toss()

ならばもし～ならば

命令

If

にいく

～へ行く、～に行く関数

goto()にむく～に向（む）く関数

turn()

ねこ

ネコ

物/O

cat

ねている

ねている

関数

sleeping()のちかくか～の近くかどうか

関数

near

のっと

ノット

演算

not

のはんたい

Aの反対（はんたい）、Aでない

命令

not A

のほうにむく～のほうに向く関数

turnTo()

はいれつ

配列

用語

array

はし

橋（はし）

物/O

bridge

ぱすわーど

パスワード

用語

password

ばなな

バナナ

物/O

banana

びーばー

ビーバー

物/O

beaverひかく

コンパリソン、比較（ひかく）

用語

comparison

ひくマイナス、ひく演算-

ひく

マイナス、ひく

用語

minus

ひだり

左

定数

left

ひてい

論理値（否定）、ろんりち（ひてい）

定数noけんこうか

健康かどうか関数

health()けんこうぞーん

健康ゾーン、回復ゾーン

物/O

healthZone

こうてい

論理値（肯定）、ろんりち（こうてい）

定数

yes

こうもり

コウモリ

物/O

bat

こおっている

こおっているかどうか関数

frozen()

ここなつ

ココナツ

物/O

coconut

ごりら

ゴリラ

物/O

gorilla

こんぱりそん

コンパリソン、比較（ひかく）

用語

comparison

さもなくばさもなければ

命令

else

さる

さる

物/O

monkey

しげみ

しげみ

物/O

bush

しま

島（しま）

物/O

island

しゃべる

言う，しゃべる

関数

say()

すすむ

すすむ

関数

step()

すすむもの

すすむもの

変数/V stepper

すべて

全部（ぜんぶ）、すべて

英語

all

せっとする

Xにセットする関数

setX()

せっとする

Yにセットする関数

setY()

ぜんぶ

全部（ぜんぶ）、すべて

英語

all

だいにゅう

代入（だいにゅう）、いれる

演算

=

たす

プラス、たす演算+

たす

プラス、たす

用語

plus

たば

たば

物/O

pile

ちいさい

～より小さい演算<

ちょうねくたいしてる蝶ネクタイをしてるかどうか関数

hasBowTie()

つかむ

関数

grab()つかむろんりち

論理値（否定）、ろんりち（ひてい）

定数

no

ろんりち

論理値（肯定）、ろんりち（こうてい）

定数

yes

わい

ワイにセットする関数

setY()

わに

ワニ

物/O

crocodile

をまつ

～を待つ

関数

waitFor()ふぁんくしょんファンクション

用語

function

ぶーりあん

ブーリアン

用語

booleanぷらす

プラス、たす演算+

ぷらす

プラス、たす

用語

plus

へいく

～へ行く、～に行く関数

goto()

へんすう

変数

用語

variable

ぽーしょん

ポーション

物/O

portionまいなす

マイナス、ひく

演算

-

まいなす

マイナス、ひく

用語

minus

まうす

マウスが動いた時関数

onMouseMove()

または

AまたはB

命令

A or Bまたはオア、または

演算

or

まっち

マッチ

物/O

match

までくりかえす～までくりかえす

命令

until

までのきょり～までの距離（きょり）関数

distanceTo()

みぎ

右

定数

right

みているかどうか

見ているかどうか関数

watching()

みどりいろ

緑色（みどりいろ）かどうか

関数

green()

めがねしてる

メガネをしてるかどうか関数

hasGlasses()

もしもし～ならば命令

Ifもん

門、扉（とびら）

物/O

gate

やぎ

ヤギ

物/O

goat

よりおおきい～より大きい演算>

よりちいさい～より小さい

演算

<

るーぷ

ループ

用語

loop

ろんりしき

論理式

用語

boolean付録２

コードの冒険のつまづき対策資料

89

91～105

8 untilループ

until near match

マッチに近づくまで

・最初から until near オブジェクトで始まる関数の戻り値をそのまま繰り返しの判 ・英語の語順だと「near match」に★変数と関数の引数のスコープについて書き出して納turnTo match

マッチの方に向きを変える

・「until メソッド オブジェクト」

定としているため、ここを曖昧にして なる。日本語なら「マッチの近く」

得する（特にチャンレンジ９９以降）

step 1

1歩進むを繰り返す

・untilループ内で、「メソッド 定数」

進んだ場合に125からのbooleanで再と語順が逆。

・untilループ内で、「メソッド メソッド 定数」

度同じようにひっかかってしまう。

・「until○○」も「○○になるま・until 数式、until 関数がない

条件を満たすまでの繰り返しであるこ で」と語順が逆。

・「until オブジェクト.メソッド オブジェクト」

との理解

判斷

し

・関数内でuntilループ
・untilループ内で、「メソッド 引数」
・forループ内で関数呼び出ししその中でuntilループ
・何もしない wait()という関数
・wait()との組み合わせで何もしないuntilループ
・関数の入れ子・forループ内でuntilループと関数の入れ子呼び出し・何もしないuntilループと何かするuntilループの組み合わせ
・99から複雑
P8・untilの直後に数式が来るパターンを練習する
・関数の戻り値を変数に入れて、その変数をuntilで評価する練習。わかりにくい場合はn == trueまで書かせる。
・until i == 10, until i >=10 などの練習
・until n, until n == trueなどの練習

106～116

9 if文

if banana.frozen()

もしバナナが凍っている場合は・オブジェクト.メソッド()

goat.goto banana

ヤギがバナナの場所に行き・オブジェクト.メソッド オブジェクト

goat.hit()

ヤギが氷を砕く・オブジェクト.メソッド 配列の要素

条件の定義

・「banana.frozen()」は「バナナが判断

凍っている」で、語順が同じ。

・if オブジェクト.メソッド()
・if節の中で、オブジェクト.メソッド()
・if節の中で、オブジェクト.メソッド オブジェクト・forループの中で、if 変数.メソッド()
・forループの中で、if節の中のオブジェクト.メソッド()、ブジェクト.メソッド オブジェクト
117～124

10 if else文

if banana.green()goat.goto banana
elsegoto banana

もしバナナが緑色の場合は・if オブジェクト.メソッド()

ヤギがバナナの場所に行き

・if節の中で、オブジェクト.メソッド オブジェクト

そうでない場合は・else節の中で、メソッド オブジェクト

サルがバナナの場所に行く・forループの中で、if節・else節

条件の定義

・「banana.green()」は「バナナが判断緑色」で、語順が同じ。

・forループの中で、if 変数.メソッド()
・forループの中のif節の中で、メソッド 変数、オブジェクト.メ
ソッド 変数・関数の中で、if 引数.メソッド
・関数の中のif節・else節の中で、メソッド 変数、オブジェク
ト.メソッド 変数
・124は応用できる
P10★forと配列とgoto以外の関数（引数は変数）の組み合
わせの練習★チャレンジ124の解き方をいろいろやらせる【別解】関数使わずに書いてみる、先に判定してからどっちが行くか決める、先にバナナに行ってから判定する、とか★returnを先にここで入れたほうがわかりやすいかも
凍ってるかの判定関数
青いバナナかの判定関数

125～145

11 and，or

until bear.sleeping() and tiger.sleeping()wait()
until bear.sleeping() or bear.playing()wait()

クマとトラが眠るまで

・until とandの組み合わせ・「bear.sleeping()」は「熊が寝て （and, or の関係がわからない可能・「A and B」は「AもBも」、「A or B」は「AかB

待つ・forループとuntilループとandの組み合わせ

andとorの違いいる」で、語順が同じ。

か」。日本語の「AかBか」は「男か女か」のようにどクマが眠るか、遊ぶまで

・forループとuntilループとandとif/else文の組み合わせ

・「A and B」は「AもBも」、「A

ちらか一方の意味で、コンピュータの意味と違うのに待つ・関数内でuntilループとandの組み合わせor B」は「AかBか」。日本語の「A注意する。

・until とorの組み合わせ

かBか」は「男か女か」のようにど・forループとuntilループとorの組み合わせ

ちらか一方の意味で、コンピュータ

・forループとuntilループとorとif/else文の組み合わせの意味と違うのに注意する。

・関数内でuntilループとorの組み合わせ

・「hasGlass()」「hasBowTie()」・for in [オブジェクト, オブジェクト]の「has」は日本語で「メガネをか・for文の入れ子

ける/する」「蝶ネクタイをつける/

・for文の入れ子の中で、for in [オブジェクト, オブジェクト]

する」と動詞が違う性）

・for文の入れ子の中からuntilを含む関数を呼ぶ
・チャレンジ140は応用できる・チャレンジ141-145は追加チャレンジ
・for文の中のif文（if 引数.メソッド）
・for文の中のif文の中の引数.メソッド 定数
・for文の中のif文で and・for文の中のif/else文で and / or・for文の入れ子の中でif文の中に or
P11★この辺でも、forと配列とgoto以外の関数（引数は配列）の組み合わせ★チャレンジ124の解き方をいろいろやらせる
stepperでループする考えでやるとbananasを引数にすることになる★チャレンジ140のやり方をいろいろやらせる【別解】配列のtigersを引数にした関数
配列のbananasを引数にした関数

untilな untilな untilな untilな

ベン図

し

し

し

Ver. 3.0

コードモンキーの補完ポイント
チャレン

レッ

ジ

スン

0～10

名称

1 step，turn

主な処理2019/3/10

意味

組み合わせ

step 10

10歩進む・メソッド 数値

turn 4545°向きを変える

turn right

右を向く

つまずきポイント（２校）
定規の正しい使い方

英語

数学

清風情報工科学院

分析（コンピュータ）

・「step 10」は「10進む」で語順

・角度において「・メソッド 定数（rightなど）が逆。

回りか。ノートに絵を書いて整理さ り、ノートの上で書いて整理させる。

・「（オブジェクト.)メソッド」の「オブジェクト.」部分が省・語順が逆のものは、命令だから倒 せる。

略されている

置法になっていると思えば、ある程 ・猿基準の⾧さ・角度しか出ない事 と思えば、ある程度理解できる。「進め１０」「回れ

他の言語との接続

アルゴ

C言語

リズム

比較

Java比 Python PHP比
較

比較

較

」が右回りか左 ・アルゴリズムの身体化が必要。実際に体を動かした
・語順が逆のものは、命令だから倒置法になっている

度理解できる。「進め１０」「回れ への対処。定規・角度がピンと来て ４５度」「回れ右！」４５度」「回れ右！」いない場合、「トードーの算数」を
やらせる。

P2

・レッスン１で省略された部分を加えて「オブジェク
ト.メソッド」の練習
・（紙上で、）レッスン１の題材のいくつかについて「monkey.」をつけて書かせる

11～20

2 turnTo，カメ

turnTo banana

バナナの方に向きを変える・レッスン1では「monkey.」が省略されている。このレッスン オブジェクトに対する命令（monkey. ・「turnTo」の前置詞「to」がとれ・アルゴリズムの身体化が必要。実際に体を動かした

turtle.turnTo banana

カメがバナナの方に向きを変えるの直前にプレステージP2を入れる。

が省略されていると理解できず、ていない。日本語では「４５度回り、ノートの上で書いて整理させる。駅から学校、玄turtle.step 10

カメが10歩進む・メソッド オブジェクト

turtle.stepになぜturtle.が必要なのかる」「バナナに向く」と動詞が変関から教室までを例に説明する。単純化した地図をつ・オブジェクト.メソッド 引数戸惑う）

わって助詞がつく。英語ではそれくっておく。

・オブジェクト.メソッド オブジェクト

turnとturnToの違いが、turn, turnToに対応と説明。

・レッスン１では「monkey.」が省略されている。こ

一人称（monkey）を省ける事

・「to」がつくと、命令と思ってもの章の直前にプレステージP2を入れる。

語順が理解しにくくなる。（「回れバナナ」ではバナナが回ってしまう。「バナナ向けバナナ」とでも理解するのか。）
21～30

3 timesループ

3.times ->turn left

左を向く、5歩進む・ループ関数(整数.times）とメソッド

アルゴリズムの構築（バナナを取るま ・「3.times」の語順は日本語と同じ （手順を書き出すという習慣の有・アルゴリズムの身体化が必要。実際に体を動かした

ループ for (初 for (変 for 変

foreachを3回繰り返す・変数.times

での手順の明確化）

り、ノートの上で書いて整理させる。３階まで階段を期化式; 数 : コ

数 in

(コレク

登るなどを例に（繰り返しで表現できる）。

条件式; レク

range( ションstep 5「3回」。

無）・ループ関数とメソッド、オブジェクト.メソッド

変化式) ション) 整数)

as $変
数)

31～50

4 変数

a = 10=の値を代入する・変数、変数への代入

変数を使う意味が理解できない・「distanceTo ○○」は「○○まで （数学の文字式とコンピュータの変 ・変数の機能をイメージできていない。コンピュータ

step a・変数の自己代入

代入した値をイメージできないの距離」と語順が逆。

数の概念の違い）b = distanceTo banana

・distanceTo オブジェクト

・「step distanceTo 〇〇」は「○（数学の等式とコンピュータの代入 明する。自己代入のi=i+1を「箱」で実感させる。

・ループとメソッド、オブジェクト.メソッド○までの距離を進む」で語順が完全 の概念の違い）

・追加チャレンジ（46-50）にて、ループと自己代入
51～60

5 配列

★i=i+1は、i++と書けることを教えておく。

+=, ++ +=, ++ +=, ++ +=, ++での文字・変数は「箱」なので、「箱」をつかって説に逆。

beavers[0].step 10

ビーバー[0]が10歩進む・メソッド 配列の要素

変数と配列の違いがわからない

step distanceTo bananas[1]バナナ[1]の距離進む

・オブジェクト.メソッド 配列の要素（bananaとbananasの｢s｣の有無で変 いていることに注意させる。

・配列は英語の複数形で「s」が付

・配列の要素.メソッド 引数

数か配列かが異なるということへの戸・配列とループの組み合わせはなし

惑い）・55から57は応用できる

手順を間違えやすい（手順を書き出すという習慣の有・手順をノートに書かせる。

無）・配列と変数の違いを説明する。どちらも「箱」なのは同じ。グループとメンバーの関係。

P4・i=i+○の練習量が不足
・（紙上で、）５章の題材のいくつかについて変数と自己代入のi=i+○を使って書かせる。
★55-57をつかって、定数部分を変数に置き換えて変数を配列を組み合わせる練習、さらにi=i+1などと組み合
わせる練習

61～75

6 forループ

for b in bananas

バナナの方に向きを変える・forループと変数

forが繰り返しであるという理解

・「for」という英語がピンとこな

・「for」を使うメリットを説明する。Forを使わずにturnTo b

バナナの距離進む・forループと「メソッド 変数」

Tab（４つスペース）の意味

い。直訳すると「bがバナナ配列の５回・１０回と回数が増えるとミスが多くなる。

step distanceTo bをbananas[0]～順に繰り返す

・forループと「メソッド メソッド 変数」
・forループと「変数.メソッド オブジェクト」
・forループの入れ子する。

ループ for (変 for (変 for 変

foreach数:コ数:コ数 in コ (コレク

中にいる間」。または「bのために

レク

レク

レク

バナナ配列の中で繰り返す」と意訳ション) ション) ション as $変ション
数)・入れ子のforループの演習が不足（75のみ）
P6★forループの入れ子の例題をいくつかやる必要あり★（紙上で、）３章と６章の題材のいくつかを使っ

ループ for (初 for (初 for 変

for (初て、for のカウンタ変数を使った処理を学ぶ。

と判断 期化式; 期化式; 数 in

期化式;

★for (i=1, i<=10, i++)に対応した処理の仕方を教えの関係 条件式; 条件式; シーク 条件式;

る。（for i in [1..10]、for i in [1..bananas.length]）変化式) 変化式) エンス 変化式)

（または、i= 1 10.times 処理 i++、10.times文はルー
プの中で何回目かわからない）★配列の数を数える方法は、「配列.length」（bananas.length、バナナの⾧さ。日本語と語順が同
じ）
76～90

7 関数

goto = (a) ->

関数の定義

・関数()

引数なしの関数呼び出し

goto以外の関数をつくらせないので、 ・「goto ○○」も「○○へ行く」と （数学の関数の概念とコンピュータ ★goto 配列（goto bananas）に対応するには？

サブ★チャレンジ88から90を利用して様々な組み合わせに

ルーチ
ンturnTo a・関数 定数 で関数呼び出し

関数＝gotoという理解をする学生がい 語順が逆。

step distanceTo a・関数の定義る。

挑戦させる・関数の入れ子（関数内で「メソッド 引数」「メソッド メ

引数の説明が流されており、引数に変★チャレンジ88から90を利用してどういう目的でどう

ソッド 引数」）

数、引数に配列の違いがわかりにくいう分割がわかりやすいのか考えさせる（89の模範解

・関数 配列 で関数呼び出しい。どこかで補足が必要。

答はモジュール分割がおかしい。【別解】）・関数内でforループ

goto以下はあくまで関数であるという・goto以外の関数のイメージをふくらませるために・関数 変数 で関数呼び出し

理解

レッスン追加・88から応用できる

引数の理解（但し、goto関数のみ）の関数の概念の違い）

・２変数の関数定義、２変数の関数呼び出しも可能
P7

・関数のイメージの脹らませ。
・紙上で、関数づくりの練習をさせる。いろんな関
数、いろんな引数
・コンビニへ行く
・駅で乗り換えの例（乗り換えTo 阪和線）
★引数が２つ以上のイメージの脹らませ。
★コピー機の例（コピー（100%,5枚））★さらに引数として変数を渡した時の挙動（変数のス
コープ）★引数も日本語の語順が逆になる。「copy (100%, 5枚)」なら「100%で、５枚、コピーする」。

146～151

12 notif not banana.rotten()goto banana

もしバナナが腐っていない場合は・if文の中でnot・英語の「not」の位置がピンとき

ベン図

バナナの場所に行く

・配列の思い出し

notを書く位置（文法的な）にくいので、漢字熟語を例にして説とnot,・for節の中でif/else文明する。「不合格、不参加、非常

and, or・for節の中のif文でnot識」などの「不○○」とか「非○○」のイメージ。

P12★このへんで、whileを入れたほうがいい。

判断

untilが untilが untilが untilが★３，６，７章を使うか、９から１２章を使うか。

ないた ないた ないた ないた★until ugeuge と while not ugeuge が同じという理解

め

め

め

め

をさせて、whileのループへ導く。（untilは○○になるまで、whileはＸＸの間）★until bear.sleeping(), while not bear.sleeping(),
while bear.起きている() のように誘導する。単にnotをつけるだけでなく関数の名前を変えたほうがよいことを理解させる。
★while型がわかりやすい時とuntil型がわかりやすい時を理解させる。
★「起きている関数(not sleeping())、生の関数(notrotten())、黄色関数(not green())」などを作つくってnot 部分をラッピングすることが可能か？
152～160

13 <，==

if health()<70

もし体力が70より少ない場合は・if文の中で メソッド() == 定数

大なりと小なりの違い

goto healthZone

回復場所に行き・until文の中でメソッド() == 定数

以上と以下と違い、該当の数字は含ま と教わるが、これも本来は語順が違 能性）

until health()==100

体力が100になるまで

・for文の中のuntil文の中でメソッド() == 定数

ない事

待つ

・if/else文の中で メソッド() < 定数

い」の部分が後ろに来るのが日本語

・for文中でif メソッド() < 定数の語順。

・for文中のif文 の中で、until メソッド() == 定数

・「healthZone」は「回復場所」で・whileと組み合わせたほうがわかりやすいものもある

日本語の語順と同じ。直訳するとwait()

・「A>B」は小学校で「A大なりB」 （大小関係の不等号がわからない可判断う。「AがBより大きい」と「大き「健康場所」でちょっと変。
P14

・紙上で、関数づくりの練習で、戻り値ありの場合をさせる。いろんな関数、いろんな引数で。
・関数のイメージの脹らませを応用して説明。成功したか失敗したかを返す。
・駅で乗り換えの例（乗り換えTo 阪和線 成功・失敗）・コピー機の例（コピー（100%,5枚）成功・失敗）・代金の例（代金（100円、５個））
・消費税の例（消費税（8%､100円））

161～175

14 戻り値

return no

定義された値を返す

・関数の中でreturn

値を返すという意味自体がわからない ・「return ○○」も、語順が逆でreturn yes・関数の中のreturnでnot「○○を返す」。「戻り値は○○」return not crow.watching()

・if/else文の中で関数()と読み替えたほうがしっくりくる。

・161のステップが大きい（が、みんな問題ないようだ）

・「crow.watching()」は「カラスが・for文の中でif 関数 引数

見てる」で語順が同じ。

（値を返すという例を別途用意して実感させることが

関数

必要）

・return文の中で メソッド()==定数
・return文の中で メソッド() < 定数・for文中のif文 の中でuntil文・return文の中で or・return文の中で 引数.メソッド()
・until文の中で関数 オブジェクト and 関数 オブジェクト
・return yes/no・returnのあとは実行されない
・if/else文の中で 関数()・return not の戻り値とuntilの組み合わせ・return not とorと配列の組み合わせ・return not とorと配列の組み合わせとifとforの組み合わせ
・for文とreturnとnotの組み合わせをuntilと組み合わせる
・for文とif文とreturnの組み合わせをuntilと組み合わせる・whileと組み合わせたほうがわかりやすいものもある
P14

・紙上で、関数づくりの練習で、戻り値ありの場合をないた ないた ないた ないため

・駅で乗り換えの例（乗り換えTo 阪和線 成功・失敗）・コピー機の例（コピー（100%,5枚）成功・失敗）・代金の例（代金（100円、５個））
・消費税の例（消費税（8%､100円））
15 onKey

onKey = (key) ->if key == 'w'

Wキーを押した場合

・イベントドリブン（onKey）

有利に進めるキーの設定（キーをどれ ・「onKey」も「キーが押された

1歩進む

・onKeyとif文の組み合わせだけ増やしても星３とれる）

ら」と語順が逆。「押された」の部

マウスのX軸とY軸の定義

・イベントドリブン（onMouseMove）

マウスの動きに関する設定である事

・「onMouseMove」も「マウスが （座標がわからない可能性）

step 1190～195

16 onMouseMove

onMouseMove = (pos) ->・onKeyとonMouseMoveの組み合わせ

動いたら」と語順が逆。

bat.setY pos.y・setX、setY

・「setX」も「Xにセット」と語順

・onKeyとif、onMouseMoveとsetX, setYの組み合わせ
196～21017 onClickhippo.onClick = () ->（イベントドリブンな記述の仕方）

分は英語にはない。

bat.setX pos.x（イベントドリブンな記述の仕方）が逆。

カバをクリックすると・イベントドリブン（オブジェクト.onClick）

対象物をクリックした場合の命令であ ・「onClick」も「クリックされた（onClickはオブジェクトに設定する。それがオブジェ

monkey.turnTo hippo

サルがカバの方を向き

・forループと変数.onClick

ること

クトを対象とした文で宣言するということと、その実

monkey.toss()

サルが投げる・forループと変数.onClickと変数.メソッド, メソッド 変数

行はonClickイベントで発動されるということの発想の・moverという変数切り分けが難しい。他の部分は順次処理であるが、イ・onClickとonKeyの組み合わせ

ベントドリブンな部分は割り込みになってその中では・forループと変数.onClickとmoverとonKeyとifの組み合わせ

順次処理ということ。）

ら」と語順が逆。

untilが untilが untilが untilが・関数のイメージの脹らませを応用して説明。成功したか失敗したかを返す。

176～189

判断させる。いろんな関数、いろんな引数で。

め

め

め