僕は発展途上技術者

【大人のためのスクラッチ】スクラッチからブラウザを全自動でコントロール - scratch2web

こども向けのプログラミング学習がちょっとしたブームのようだ。

夏休みの自由研究にということだろうか、Amazon の 実用・工作・趣味 の ベストセラー ランキングで小学生からはじめるわくわくプログラミングは上位だし、拙著Raspberry Piではじめる どきどきプログラミング (はじめるプログラミング シリーズ)の方もブログラミングの本としてはそこそこ売れているようだ。両方とも扱っているプログラミング言語はスクラッチだ。

「さあプログラミングを勉強しなさい」ということで、親御さんはこれらの本をこどもに買い与えてはい終わり、というケースが多そうなのだが、ちょっと待って欲しい。スクラッチをこどもだけに使わせておくのはあまりにもったいない。

「え?でもスクラッチってどうせこども向けでしょ」というのは大きな誤解だ。次に多い誤解は、「スクラッチでできることってちょっとしたゲーム作りでしょ。実用的なものでないと大人としてはちょっと…」だ。

スクラッチはゲームを作る以外、実用的なプログラミングだって何でもできる、ということを証明するためにこれから「大人のためのスクラッチ」というシリーズでいくつか例を示していこうと思う。

スクラッチからブラウザを全自動でコントロール



ブラウザを開いてインターネットにつなげ、何らかのページに情報を入力し、ボタンを押すという作業が会社のお仕事の一部になっていることは多いと思う。

そうした作業のなかで、いつも同じ繰り返しになっている部分はないだろうか。毎日ポチポチ手作業でおこなっている操作があるなら、それをプログラムで自動化することで、チリも積もれば何とやら、で節約できる時間は結構なものになるのではないだろうか。

スクラッチでブラウザを全自動でコントロールする方法を以下に紹介しよう。

スクラッチだけではインターネットにつなげることはできないのだが、ruby の watir というライブラリをつかったプログラム(scratch2web と名づけた)を実行しておき、それをコントロールする形で実現してみた。

ブラウザで特定のアドレスを開くには、「goto」という命令をスクラッチから送る。



テキストフィールドに文字を入力するには、「input」という命令を送る。



ボタンを押すには、「click」という命令を送る。



これらを全部組み合わせて、スクラッチのページを開いて「マリオブラザーズ」と検索する操作をスクラッチから自動で行ってみる。



応用すれば、ブラウザでできるほぼどんな操作でもスクラッチから全自動でできる。

突貫で作ったので、ドキュメントが未整備な上にまだ使い勝手が悪いが github に公開しておく。

» scratch2web

順次呼べる命令を増やしていって、普通に使えるツールにしていきたいと思う。

iPhone がロボットになる Romo を Scratch でコントロールしてみました

Romo とは


Romo(ロモ)はiPhoneなどで動く「体感型のエデュケーショナルロボット」で、誰でも動かすことが可能です。iPhoneアプリが頭脳の役割になり、様々な感情や動きを表現することができます。楽しみながら子どもの論理的思考や想像力、思考力を育むことができ、遊びや学びの幅がさらにひろがる可能性を秘めています。


Romo のページ の動画をみれば、どんなことができるのかがわかります。

簡単に言ってしまえば、iPhone にキャタピラがくっつき自在に動き回れるようになる。iPhone のカメラが目になり、マイクは耳に、スピーカーは口に、画面は表情豊かな顔に。ガンタンクのようにキャタピラを付けてみたら、高性能なロボットになった、というコロンブス的な発想が面白い。

Romo の SDK を使えば、Romo を自在にコントロールするアプリを自分で作ることができます。Scratch(ブロック型の命令を組み合わせて簡単にプログラミングできる教育用プログラミング環境) から Romo を動かすために、Scratch からの命令を受け付けて Romo を動かすコントローラーとなるアプリを作ってみました。



Scratch と Romo が動く iPhone とをつなげるために、iPhone には Romo をコントロールできるようにした簡易 Web サーバーを立ち上げておき、PC 上では Scratch の命令をこの Web サーバーに対するアクセスに変換するブリッジプログラム Scratch2Romo を動かします。

構成はこんな感じです。



iPhone の IP アドレスを 10.0.0.2 とすると、http://10.0.0.2/forward というアドレスにアクセスすると Romo が前進します。PC 上では、遠隔センサー接続で接続した Scratch2Romo が Scratch から forward の命令を受け取ると http://10.0.0.2/forward に対してアクセスするという仕組みです。

Romo を正方形を描くように動かす Scratch のプログラムは以下になります。



以下が実際に動いているところです。



PC 上で動くブリッジプログラムと、iPhone 上で動かす Romo をコントロールする Web サーバーアプリのソースコードを GitHub 上に置いておきます。

» https://github.com/champierre/scratch2romo/

iPhone 上で動かすアプリは、Romo を動かすだけでなく、カメラのシャッターを切ったり、ライト代わりにフラッシュを点灯できるようにしています。機能を増やせばもっといろいろなことができそうなので、ドキュメントを順次用意していくとともにこれから改良していきたいと思います。

MacOS X 10.9.3 で nokogiri gem がインストールができないときの対処方法

MacOS X 10.9.3 Mavericks で bundle install を実行したところ


An error occurred while installing nokogiri (1.6.2.1), and Bundler cannot
continue.


nokogiri がインストールできない。良く見る光景です。


libiconv is missing.


とエラーログに表示されているので調べてみると、gem をインストールするときに --use-system-libraries を指定する必要があるとのことなので、


%bundle config build.nokogiri --use-system-libraries


を実行して、bundle install で nokogiri gem をインストールするときに上記オプションが指定されるようにする。

結果、やはりエラーが起こるのだが、メッセージは変わっている。


You have to install development tools first.


という表示があるので、調べてみると、


%sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2


と、gcc を gcc-4.2 にシンボリックリンクする必要があるとのこと。上記を実行して再度 bundle install を試みると、今度は、


libxml2 version 2.6.21 or later is required!


と表示される。再度調べると、libxml2 のライブラリの場所を下記のように指定する必要がある。


%bundle config build.nokogiri --use-system-libraries --with-xml2-include=
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/
Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2


上記を実行して、再々度 bundle install を実行してようやく成功。

うーん、環境構築って大変。

プロフィール

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

Raspberry Piではじめる どきどきプログラミングを書きました。

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

Twitter @jishiha

最近のエントリー

アーカイブ