僕は発展途上技術者

大人のためのScratch - ScratchでTDD(テスト駆動開発)はできるか?

先日のTokyo Rubyist Meetupにて、Introducing Scratch to Rubyistsと題して、Scratchを紹介するプレゼンをおこなったところ、プレゼンのあとで、Scratchでテストコードは書けるのか?という質問を受けました。

そのことについてFacebookで投稿したところ、PhratchのアドオンでAssertchというものがあるなど、多方面から情報をいただいたのだが、中でも Can you TDD in Scratch?(ScratchでTDD(テスト駆動開発)はできるか?)というサブタイトルがついたScratchTDDというドキュメントが面白かったので紹介したい。

結論としては「ScratchでTDDはできる」なのですが、詳細はオリジナルのドキュメントがわかりやすく丁寧に書かれているため、そちらを見てもらうとして、変数と関数を日本語に書き換えたものを紹介する。

テストを先に書いたものがこちら↓

そしてテストが通るように、「『名前』に挨拶する」ブロックを実装したものがこちら↓

プログラミングがわからなくても、Scratchがわからなくても、変数名と関数名が日本語だと、どのようなことをやっているのかおおよそ見当がつくのではないだろうか?英語ネイティブの人がソースコードを見たときに、およそこのように見えているのではないかと思うと、我々、英語ネイティブでないプログラマーに比べて彼らには大きなアドバンテージがあるんだろうなあと痛感する。

以下は、ScratchTDDの最初の例を日本語化してみたScratchプロジェクトだ。


[https://scratch.mit.edu/projects/237424372/]

ScratchTDDの後半に紹介されているFizzBuzzの例はこちら↓


[https://scratch.mit.edu/projects/237554596/]

Scratchで楽しく学ぶ アート&サイエンス
石原 淳也
日経BP社
売り上げランキング: 11,183

Scratch 3.0 の Extension(拡張機能) を試してみた

Scratchには、外部のプログラムと通信したり、独自のブロックを自分で実装でき、機能を拡張できる仕組みが備わっています。

このブログでも Scratch 1.4 での方法、および Scratch 2.0 を拡張した ScratchX を使った方法を過去に紹介している。

» Scratch(スクラッチ)を外部のプログラムなどとつなぐ「遠隔センサー接続」を解説する(その1)

» スクラッチャーのためのScratchX入門 - その1 ScratchXとは?

Scratch 3.0 はまだリリースされていないが、GitHub 上でソースコードが公開されているため様々な開発者が独自に拡張したバージョンを公開している。

Scratch のフォーラムを見ていたら、3.0の拡張機能にあたるExtensionのスクリプトを簡単に試せるバージョンが公開されていたので、3.0の Extension を試してみました。

参考: Discussion Forums » Developing Scratch Extensions » Creating extensions for Scratch 3.0

なお、この情報はScratch3.0のアンオフィシャルな情報なので、試す場合は自己責任でお願いします。

まず、Extension のスクリプト(JavaScript で作ります)をローカルでも構わないのでWebサーバー上で動かす必要があります。

以下の簡単なテスト用のスクリプトをローカルに保存し、

例えばNode.jsのhttp-serverを起動します。

$ http-server

これで、先のスクリプトは http://localhost:8080/test.js でアクセスできるようになります。

Scratch ID Sheep_makerという方が用意してくれている Extension を読み込むことができる Scratch 3.0 にアクセスします。

» https://sheeptester.github.io/scratch-gui/

起動して、最初の確認画面で「試す」をクリックしたあと、左下のフォルダに + マークがついたアイコンをクリックして「拡張機能を選ぶ」の画面を開きます。

「拡張機能を選ぶ」の画面では、「Choose an extension」を選び、拡張機能のスクリプトのURL、つまり http://localhost:8080/test.js を入力してOKを選びます。

拡張機能のスクリプトが読み込まれ、新たに Test というカテゴリ(緑色の丸いアイコン)が追加されます。Test を選ぶと hello というブロックがあるのがわかります。

hello は実行されると console ログに hello と出力するブロックです。スペースをクリックしたら hello と出力するようなスクリプトを組んで、テストしてみましょう。

Scratch 3.0 Extensions の仕様は、Scratch 3.0 Extensions Specificationで公開されています。

ScratchX の拡張機能の仕様と似てはいますが、細かな違いがあります。拡張機能を読み込めるようにしたこのバージョンは公式なものではありませんが、上記仕様に従ったスクリプトが動くので、今後リリースされる Scratch 3.0 に対応したスクリプトをあらかじめテストしておくために活用できると思います。

Scratchで楽しく学ぶ アート&サイエンス
石原 淳也
日経BP社
売り上げランキング: 11,183

Maker Faire Hong Kong に参加し、深センにも行ってきました - MakerFaire HongKong編

本記事を含めた全記事は以下の通り。

今回の香港ツアーのそもそもの一番の目的は Maker Faire Hong Kong に参加することでした。

会場は香港理工大学。おなじみのロゴの垂れ幕が…

参加する前は、会場はクーラーが十分に効いた屋内だと思っていました。実際の会場は屋根はあるけれどオープンスペース。始まって1時間くらいは、珍しい環境を楽しんでいましたが、その後は汗が出っぱなし。

機械学習と Scratch とをつなげた ML2Scratch という作品を出展しました。

» [t:http://blog.champierre.com/1122]

日本にいない間に発売された著書の Scratchで楽しく学ぶ アート&サイエンス もブースの傍らに置いておきました。

何の機能も持っていない普通のWebカメラと機械学習を使うことで、画像認識が可能ということで、ペットボトルのキャップで Scratch の画面の中のペンを操作するというデモがこどもたちに結構受けていました。

他の出展者については、地元香港の小学生や中学校など学校単位での出展が多く、STEM教育の色が強い Maker Faire だなという感じでした。

実際には滝汗の暑い会場を少しでも雰囲気で冷やそうという試みなのか、カーリングだったり、

空冷システムのデモがあったりします。

ダンボール製のプラネタリウム?

実験装置を遠隔で操作するシステムです。

3Dプリンターなどファブ系の展示も多かった。

日本からは Pepper も参戦。

一人で出展しているとなかなかブースを空けるのも申し訳なく、他の出展を時間をかけて回ることはできませんでしたが、その代わりとして様々な方と交流する機会に恵まれ、日本からの参加者ということで珍しがられてか、懇親会などでも非常に親切にしてもらったり、向こうから話しかけてもらうことが多く、Maker 側として参加して良かったと感じました。

また機会があれば、他国の MakerFaire に参加したい。

Maker Faire Hong Kong に参加し、深センにも行ってきました - 深セン編

本記事を含めた全記事は以下の通り。

深センは香港から電車で正味1時間くらいで行けるのですが、国境(?)を越えるため出国入国手続きがいるので1時間半から2時間弱かかりました。

香港と深センの間には川が流れており、これを渡ると深センです。「泳いで渡ってもあの壁上がるのは大変だなあ」とか想像すると、ちょっと怖い感じ。

滞在中、香港 - 深セン間を2往復したのですが、この一番最初に渡ったときは緊張しました。

世界最大の電気街、深セン「華強北」に到着。

深センについては、以下のネット上の記事であらかじめ予習しておいたのがとても役立ちました。変化が早すぎて「地球の歩き方」の情報は役に立ちません。

» [t:https://diamond.jp/category/s-shinsen]

噂には聞いていましたが、お店でも屋台でもどこでもスマホ決済でOKです。Alipay のアカウントを用意し、中国の銀行に口座を持っている方からあらかじめ送金しておいてもらったので便利でした。使った現金は地下鉄代のトータル10元(約160円)のみでした。

【2018/7/15 追記】 Alipay のアカウントはこちらの記事を参考にして、日本を出る前に、持っているクレジットカードで決済可能な状態にすることができました。ただし、お金を自分のアカウントに入金するには、中国の銀行に口座を持っている必要です。

あちこちに置いてあったモバイルバッテリーのレンタルボックス。使ってみたかったのですが iPhone 用はすべて出払っていました。

経済特区の深センは不思議なところです。ランチを食べるために入ったカフェの壁にはデカデカと Steve Jobs の言葉が。ここは中国だと思ったんだけど…

電気街の各ビルに入るとこんな感じです。各フロアでは様々なガジェット、電子部品が売られています。

こちらは、フロア全体どこもスマホケースを売っています。

ディスプレイがバリバリに割れてしまっていた長男の iPhone を格安で修理してもらいました。

雨が降っているにも関わらず車輪が付いたトイドローンが路上を飛んでいます。

Apple Watch みたいなやつとか…

こちら見たことあるような製品が。クリスティアーノ・ロナウド?

スマートホームコーナーには、Google Home らしき製品が。でも G のロゴはなかったです。

あまりに暑いので途中で水分補給。ジュース屋さんでももちろん Alipay で QR コード決済。

電気街から、こちらで紹介されていた世界最大の書店「深セン書城中心城」に移動しました。

» [t:https://diamond.jp/articles/-/123818]

途中、レンタル自転車をみかけて、QRコードをスキャンしてみたのですがなぜかエラーがでて試すことができませんでした。

こちらが「深セン書城中心城」の中。広大過ぎて、端から端まで見るのに疲れます。

階段で座り込んで本を読むこどもたち。1000万人を超える人口で、平均年齢が30と少しという深センは、若者やこどもたちばかりが歩いている印象。エネルギッシュな印象を強く持ちました。

「iPhone の修理方法 129」という本を見つけたので、買って帰りました。中身は iPhone を分解した写真や回路図が満載。これ、売っていいんだろうか…

2日後にもふたたび深セン入りして、今度は東門歩行街という、渋谷を3倍くらいエネルギッシュにしたようなところにやってきました。

夕食を食べた後に訪れた屋台街ではこんなものが。食べ放題でお腹がいっぱいだったので今回はパス。お腹が空いていればサソリくらいはいけたかも…いや、無理か。蜘蛛はおいしいらしい。

「メイソウ」というなんだかいろいろなものが混ざった感のあるロゴのお店。

iPhone のイヤホンや、

トランスフ◯◯◯ー?が売っています。

ドローンや各ガジェットがあまりに安く、本当に動くんだろうかといぶかってあまり買い物をしなかったのですが、帰ってきて、ああ、もっといろいろ買ってきても良かったかなあと思っていた矢先。こどもたちのお土産にと買ってきた iPhone に直接差すタイプの扇風機を使っていたら、その後 iPhone を充電できなくなったという知らせが… 調べてみたら、

» [t:http://www.appps.jp/296756/]

という情報をみつけました。

幸い、一度すべて放電させてちゃんとしたケーブルで充電したら、再び充電できるようになりました。

冷静に考えたら、充電に使う部分に電気を流しているということは逆流させているわけで、まあ無理があるな、と。この扇風機は封印です。買ってくるにしても、単体で動くものにしたほうがいいなと思いました。高価な iPhone とかにつなげて、そちらがもろとも壊れてしまったら泣けます。

【2018/7/15 追記】 深センに関しては、肯定的なブログ記事や、あるいはやや否定的なメディア系などの記事もあったりだそうで、おそらく書いた人それぞれの受け止め方によるんだと思います。僕は、シンプルに勢いがある面白いところだなとは思いましたが、雑なところややや不衛生な感じとかは場合によっては受け入れられないなと感じました。

本屋で床に座り込んで本を読み耽るこどもたちのシーンは印象的で、このエピソードだけを聞くと、あるいはその写真を見ると、「日本のこどもたちはここまで学習意欲はない、これじゃあ勝てないなあ…」なんて感想が生まれそうです。しかし、日本に比べれば経済的にまだ恵まれていなかったり、いろいろと社会的な制約も多く、そこから脱するためには勉強してスキルを身につけるというのが近道なんだろうという事情、強いモチベーションがあるからなわけで、比べる事自体が間違っていると感じました。

むしろ、豊かになれば長時間働くことにモチベーションを感じにくくなるので、生産性をどんどん上げて、楽して働かない方向に進まないといけないんだろうなと思いました。また、いまやLCCを使えば2万円ほどで香港、深センを訪れることはできます。他の国にも以前と比べればとても気軽に行けるはず。日本のパスポートで世界のほとんどの国に行けるとのことで(参考 https://kaikore.blogspot.com/2018/03/Japanese-passports-worlds-powerful.html )、このメリットを活かさな手はないです。深センに限らずどこでも、もし気になる国があったら、どんどん自分の目で見に行くのが良いと思います。

Maker Faire Hong Kong に参加し、深センにも行ってきました - オクトパスカードをCITYBUSの運転手に取られた編

本記事を含めた全記事は以下の通り。

香港の人たちは総じて親切でしたし、治安は良い感じで、0時過ぎに地下鉄の駅からホテルの間を歩いていても全く危ない感じは受けませんでした。

ただ、帰りの空港行きのバスで、金額をチャージして使うオクトバスカードの使い方がわからず(専用の機械にタッチするだけだったのですが)、運転手に聞いたところ、そこのトレイに入れろと指で指示され、入れたが最後、デポジットしていた額もろとも奪われて返してもらえないという経験をしました。空港からホテルに向かうときに、同行者がほぼ同じ手口で100香港ドルをトレイにいれたら「おつりは出ない」と言われ、返してもらえないということがあったので、もしかしたら良くある手口なのかもしれません。

バス会社のCiTYBUS のホームページから苦情のメールを送っておきましたが、返事はまだない…

香港に行かれる方はご注意を。

かかる時間がそれほど変わらない電車にすれば良かったです。空港に向かう E21 という路線の「黄竹街」というパス停、2018/07/09 15:23 の出来事です。バスを特定しておくためにナンバーを撮っておきました。

Maker Faire Hong Kong に参加し、深センにも行ってきました - 香港編

先週の土日(7/7 - 8)におこなわれた Maker Faire Hong Kong に参加してきて、そのついでに深センにも行ってきたので、おもに写真中心で振り返ってみたいと思います。

本記事を含めた全記事は以下の通り。

まずは香港編。

空港からホテルまでのバスから見えた、ずらっと並んだいったい何階建てなんだろうという高層マンションの列。香港らしい。

ホテルの前の道路。ジャッキー・チェンとかが出てきそう。

そのホテルが1フロアに2部屋(ベッド2つがやっと置けるくらいの広さ)しかないのに24階建てで、同行者が最上階の部屋に泊まっていたので、その部屋から撮らせてもらったのがこの一枚。

映画「ブレードランナー」に出てきそう。

毎日スコールのような雨が降り、湿度が高く蒸し暑いのでこういう薄い感じのビールが良くあう。ピリ辛の羊肉を北京ダックとかを巻くときとかに出てくる皮で巻く料理、うまかった。

ホテルの近くの公園というか運動場。小学校低学年くらいのこどもでも11時過ぎまで公園で遊んでいて、なんとも不思議。

Maker Faire Honk Kong で知り合った方がファブ系のコワーキングスペースを運営していて、ぜひ遊びに来なよ、と言われていたので滞在最終日に見に行ってきました。

Innospot というところです。

こんなものが作れるようです。Godzi--lla

3Dプリンタとか、レーザーカッターとか。

地価がなかなか高い香港で、結構なスペースです。

香港の人たちは総じて親切でしたし、治安は良い感じで、0時過ぎに地下鉄の駅からホテルの間を歩いていても全く危ない感じは受けませんでした。

ただ、帰りの空港行きのバスで金額をチャージして使うオクトバスカードを運転手に取られた形になってしまったのですが、その話は気分が悪いので、別エントリーにしておきました。

» オクトパスカードをCITYBUSの運転手に取られた編

最後に香港といえばこちら、お約束の一枚。

Don't think, feel... - Bruce Lee

深セン編Maker Faire Hong Kong 編と続きます。

Rack で作るジブン Web フレームワーク(1)

以下の方を対象読者としています。

  • Ruby は少しわかる
  • ファイルやフォルダを作ることができる
  • Web はあまりわからない

Rack の厳密な説明は他にゆずるとして、とりあえず Rack とは、それを使って Web フレームワークを作ることができるものと覚えておいてください。

さっそく使ってみましょう。

Rack は gem のライブラリとしてインストールできます。以下のコマンドでインストールします。

$ gem install rack

Rack を使って Web フレームワークを作るには、以下の2つのファイルが必要です。

config.ru

require './app.rb' # 同じフォルダ内の app.rb を読み込みます。
run App.new # 読み込んだ app.rb で定義されている App のインスタンスを作成します。

app.rb

class App
  def call(env) # Rack ではこの call というメソッドを定義するのがルールです。
    [
      200, # 返す HTTP ステータスコード
      {'Content-Type' => 'text/html;charset=utf-8'}, # コンテンツのタイプ。HTML で文字コードは utf-8 です、と宣言しています。
      ['<html><body>Hello</body></html>'] # コンテンツの中身
    ]
  end
end

上記2つのファイルがあるフォルダから以下のコマンドで rack を起動します。

$ rackup

ブラウザを起動し、http://localhost:9292 にアクセスしてください。

以下のように Hello(App で定義したコンテンツの中身) と表示されたら成功です。

「Scratchで楽しく学ぶ アート&サイエンス」という本を書きました

「Scratchで楽しく学ぶ アート&サイエンス」という本を書きました。初の単著です。

書籍の説明にもある通り、こども向けと思われがちな Scratch をあえて大人向け、あるいはこどもでもある程度 Scratch をやっている中級者 Scratcher 向けに書きました。

Raspberry Piではじめるどきどきプログラミング増補改訂第2版」のときには、まだ大人は誰も知らなかったマイクラを素材に書きたいと提案し、今回また、入門書はたくさん出ているので、まだほとんど出ていない中級者向けのScratch本を出したいとチャレンジングな企画を持ち込みました。「おまえはいったい何を言っているんだ?」と言われそうな提案を理解してくださった日経BPの田島篤さん、面白いと言ってくださり監修を引き受けてくださった阿部和広先生に感謝です。


タイトルを決めるとき、「東大式...」って入れて「受験勉強にも役立つ」とか謳えば売れるのではなんていうジョークがでました。しかし、完成した本書は、受験勉強はおろか、まったく何の勉強の役にも立ちません。あとがきの言葉を借りれば、以下の通り。

「本書で取り上げているさまざまなプログラム例は、それをやったからと言って、直ちに何かの役に立つというものではありません。これで、資格が得られたり、お金がもらえたりするわけでもありません。 ただ、その過程において、知的な興奮が得られるはずです。わからなかったことがわかるようになる、できなかったことができるようになる、そして、ひとつのことがわかっても、さらに新しい疑問が生まれるという連鎖を、ぜひ経験してもらえればと思います。 ――阿部和広」

将来のためではなく、今楽しいからプログラミングする、あるいは本書でとりあげているテーマから派生して数学、物理、アートなどなどに興味を持って楽しんでやってみることを推奨する問題作となってくれればと思っています。

Scratch Day in Tokyo 2018 Show & Tell 振り返り

REFLECT: SHARE YOUR OWN REFLECTIONS

Lifelong Kindergarten p.173 より。

Lifelong Kindergarten: Cultivating Creativity through Projects, Passion, Peers, and Play (MIT Press)

TEN TIPS FOR PARENTS AND TEACHERS(クリエイティブな社会(Creative Society)を目指すために親や先生がすべき10のこと)の10個目として挙げられている「振り返りを共有する」ということ。親として、という文脈だけど、こどもたちや若者と比べると思っていたほど先は長くないぞという大人にとっては、これすごく大事だなと年々思うようになってきた。

要は、反省して同じ失敗は繰り返すなということだ。でも振り返りって、ちょっとの努力でできるのに面倒くさいのでさぼってしまいがち。ソフトウェア開発の現場でもドキュメント化し、メンバーで振り返りを共有するということは、表現方法こそ少し違うがScrum などの各種手法のほぼすべてがその重要性を説いていると思うのだが、まあだいたいどこも手を抜いてしまう…

というわけで、面倒だなあという気持ちに抗って、Scratch Day in Tokyo 2018 を振り返ろうと思う。今年も例年通り担当した Show & Tell をメインに。

Keep(来年も続けたいこと)

  • 今年発表された作品は Show & Tell @ Scratch Day 2018 in Tokyo から見ることができます。スタジオに全作品を置く、あらかじめ発表順とScratch IDをファイル名につけてダウンロードしておくはマスト。
  • 今年 Scratch Day Kashiwa と同日開催となってしまい主催する宮島くんに司会をお願いできなくなったので、青学の御家さんにお願いしました。テーマパーク感あふれる新鮮な司会で Scratch Day にふさわしい名司会ぶりでした。やむを得ず僕自身がやらずに本当に良かった。
  • PCの操作を青学の竹中先生にお願いしました。なんとか僕一人でPCの操作とこどもたちの誘導もできるんじゃないかと思ったのだが、発表順を変更しなくてはならなくなったり、発表順になっても発表者が現れないなどハプニングが連続したので、分担して黒子に徹してよかった。快く引き受けてくださりとても助かりました。来年も司会含め最低3人は必要だと実感した。
  • 講義室の方に一台PCを置いて無理やり Show & Tell 作品発表コーナーをつくっておいた。どの程度機能していたのか正直不明なのだが、Show & Tell 後に発表者の何人かは流れていったようなので、たまり場をつくる口実にはなったのではないだろうか。
  • Show & Tell はすべての年齢のこどもたちが対象。初心者もプロ級も、こどもも大人も誰でも歓迎というスタイルがこれまでで一番現れていたと思う。

Problem(問題点)

  • これはうれしい問題点ではあるが、過去最高の29作品の応募があり、基本的には全員採用というこれまでのポリシーを維持するために、ひとり3分というとても短い持ち時間となってしまった。
  • キッチンタイマーや iPhone/iPad のタイマーを使ってタイムキーピングしようとしたがどれもしっくりこない。いっそ Scratch でタイマーを作ったほうが良さそうだ。
  • 予想以上にたくさんの聴衆の前で話さなければいけないとわかり戸惑っていた初参加の方がいた。結果的には堂々としたプレゼンができていて立派なものだったが、初参加の参加者への配慮が必要かもしれない。

Try(来年改善したいこと、やってみたいこと)

  • もはや1時間の2部構成では来年は無理そうだ。講義室とメインホールとに分ける、講義室のほうは聴衆の人数が少ないので初参加の人にはそちらをすすめる、Scratch と Scratch 以外で分ける、など何らか分散する施策が必要だ。

  • (2018/7/1 追記) Show & Tell 発表者用の展示スペースをきちんと用意したい。

昨年までの振り返りは以下の通り。

Scratchで楽しく学ぶ アート&サイエンス
石原 淳也
日経BP社
売り上げランキング: 11,183

Lifelong Kindergarten 読了

英語の本ではGetting Real以来の僕にとっての神本(英語の本自体あまり読んでいるわけではないけど…)。

日本語訳(ライフロング・キンダーガーテン 創造的思考力を育む4つの原則)でもいいので、CoderDojo関係者などプログラミング教育やScratchに関わっているすべての人は読むべき。バイブルだと思う。

Creative Society(創造的な社会)をどう作っていくかという一見難しそうなテーマなのに、かなり平易な文章と簡単な英単語だけで面白く書かれていることに感動する。4つのPとか、Computer Clubhousesのメンターの役割は Catalyst、Consultant、Connector、Collaborator(全部Cで始まっている)といった言葉遊びを味わうなら原著の方がおすすめだと思う。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ