CoderDojo Advent Calendar 2021のの22日目を担当しています。 学生の時にCoder Dojoで少しプログラミングを小学生や中学生に教えていたことがあります。それがCoder Dojoとの出合いになります。
今回は、Coder Dojoとは直接は関係ないですが、 jagram(JApanese proGRAMming Language, ジャグラム)といRubyのプログラミングを日本語で書けるプログラミング言語ツールを開発したので、開発した背景とツールの使い方を紹介したいと思います。(Jagram、ジャグラムと読みます。JApanese proGRAMming Languageの略称です。厳密には言語ではなくRubyのツールです)
jagramはまだ作ったばかりなので、変更点たくさんあるかと思いますので、PRお待ちしております。githubへのスターもお待ちしてますw
また、実際に使われてなんぼなので、教育の現場で使っていただけると大変喜ばしいです。
それでは、jagramの開発背景と使い方を紹介していきます!
まずはjagram(ジャグラム)の開発背景を紹介します。 私は、もともとCoder Dojoで小学生にプログラミングを教えたりしていました。 今でもプログラミングを初学者に教えたりする機会はあります。
そんな中、私が思うに小学生や初学者にとって 「英語で論理を組み立てる」そこが最初のハードルとして立ち塞がり、 プログラミングがただの記号を組み合わせるパズルを解く作業になっているのではないかと思っています。
今でこそSketchなどで日本語でブロックを組み立てることで、 日本語で論理を組み立てることには慣れていくのだとは思います。
しかしながら、実際のプログラムを書く際は依然英語での論理の構築が必要であり、 そこがSketchなどから実際のプログラムに移行する妨げになっているのではないかと思っています。
本質的には、英語を覚え、英語で論理構築に慣れるのが良いのかと思いますが、 選択肢として日本語で論理を組み立て、それを徐々に英語に翻訳していくことで実際のプログラムが出来上がる。
翻訳していくことでプログラミングに必要な最低限の英語(プログラミングの文法)も覚え、自然とプログラムが書けるようになれる。 そんな選択肢があっても良いのかとおもいjagramというRubyの日本語で書けるプログラミング言語ツールを開発しました。
以上が、jagramを開発した経緯になります。
次に、簡単にjagramの使い方を紹介します。
jagramはruby
のgem
なので、まずgemインストールが必要になり、使う際にもrequire
をする必要があります。
gem install jagram
使うときは、下記のようになります。
require 'jagram'
次を表示 "こんにちはCoder Dojoの方々" #> こんにちはCoder Dojoの方々
jagramは書くRubyのメソッドや文のラッパーです。 そのため、基本的な文法やメソッドは日本語で用意しています。
次に、それぞれ簡単に文法を紹介します。
rubyのwhileに相当するものです。
次の条件が成り立つ間(-> {条件}) do 処理 end
という構文になっています。
条件に-> {}
が必要なのに注意が必要です。
require 'jagram'
i = 0
結果 = ""
次の条件が成り立つ間(-> {i <= 5}) do
結果 += i.を文字に変換
i += 1
end
次を表示する(結果) #> 012345
rubyのfor文やdowntoに相当するものです。
始まりの数字.から(終わりの数字, まで繰り返す) do ~ end
という使い方ができます。
require 'jagram'
結果 = ""
1.から(4, まで繰り返す) do |i|
結果 += i.を文字に変換
end
次を表示(結果) #> 1234
結果 = ""
4.から(1, まで繰り返す) do |i|
結果 += i.を文字に変換
end
次を表示(結果) #> 4321
繰り返し文の最後に紹介するのは、rubyのeach文に相当するものです。
これは配列.のそれぞれの要素に対して do |要素| end
という構文を持ちます。
require 'jagram'
挨拶の配列 = ["こ", "ん", "に", "ち", "は", "c", "o", "d", "e", "r", "d","o", "j", "o"]
挨拶の配列.のそれぞれの要素に対して do |要素|
次を表示(要素) #> こ ん に ち は c o d e r d o j o
end
他にも繰り返し文はありますが、さらに気になる方はこちらをみてください
プログラミングに欠かせないものに、条件分岐があります。
jagaramでは、if else
文をサポートしていなく、if
文しか使えません。
条件分岐はもし(条件, ならば){ 処理 }
という構文で記述するとができます。
また、条件の比較にはrubyで同じの==
,>
, >=
, <=
, <=
という大小比較が使えます。
さらに、大小比較には次と等しい
, は次の値より大きい
, は次の値以上
, は次の値より小さい
, は次の値以下
というメソッドも提供しています。
require 'jagram'
太郎君の挨拶 = "hello"
英語の挨拶 = "hello"
もし(太郎君の挨拶.は次と等しい(英語の挨拶), ならば) {
次を表示("太郎君は英語がわかるのかもしれない")
}
もし(太郎君の挨拶 == 英語の挨拶, ならば) {
次を表示("太郎君は英語がわかるのかもしれない")
}
太郎君の体重 = 60
花子さんの体重 = 120
もし(花子さんの体重.は次の値以上(太郎君の体重), ならば) {
次を表示("花子さんは太郎君よりも#{花子さんの体重 / 太郎君の体重}倍重たい") #> 花子さんは太郎君よりも2.0倍重たい
}
もし(花子さんの体重 >= 太郎君の体重, ならば) {
次を表示("花子さんは太郎君よりも#{花子さんの体重 / 太郎君の体重}倍重たい") #> 花子さんは太郎君よりも2.0倍重たい
}
条件分岐の詳細はこちらをみてください。
プログラミングの醍醐味に何度も繰り返す処理に名前を与え関数として定義(一般化)し、 何度も同じ処理を違う値で繰り返し行うというのがあります。
jagramでは関数 :シンボル, を定義する ->(引数) {処理}
という構文で関数を定義することができます。
require 'jagram'
関数 :嗜好に合わせた挨拶, を定義する, -> (好きなプログラミング言語) {
もし(好きなプログラミング言語 == "ruby", ならば) {
次を表示("rubyは最高です。私も大好きです。")
}
もし(好きなプログラミング言語 == "python", ならば) {
次を表示("私が最も好きな言語はpythonです。仲間ですね!")
}
もし(好きなプログラミング言語 == "javascript", ならば) {
次を表示("最近最も使うのがjavascriptです。Reactは最高に使いやすいです。")
}
もし(好きなプログラミング言語 == "jagram", ならば) {
次を表示("ありがとう。だけどjagramはプログラミング言語ではありませんww")
}
}
好きなプログラミング言語 = "jagram"
嗜好に合わせた挨拶(好きなプログラミング言語) #> ありがとう。だけどjagramはプログラミング言語ではありませんww
以上が簡単なjagramの開発背景と使い方になります。 jagramに是非スターをください! jagramはまだ作ったばかりなので、変更点たくさんあるかと思いますので、PRもお待ちしております。
実際に教育の現場で使ってみていただけたらと思いますので、 使ってみての感想や使い方でわからないことあれば、気軽にご連絡ください。