「マルチメディア，分散，協調とモバイル(DICOMO2016)シンポジウム」 平成28年7月

ものづくりのための「ものグラミング」と実践的教育環境の構築
大野 浩之1

森 祥寛1

北口 善明1

中村 和敬2

松浦 智之2

石山 雅三2

當仲 寛哲2

概要：近年，自らの手で何かを作る「ものづくり」を愛好する者は増加を続け，その風潮は 「メイカー・
ムーブメント」とも称されている．ものづくり愛好者のものづくりの対象・手法は多岐に及ぶが，ものづくりに際してマイコン（マイクロコントローラ）を使う場合，これまでの主流だった PIC マイコンやArduino に加えて Raspberry Pi に代表される UNIX 系 OS を搭載した高機能マイコンを採用する事例が増えている．しかし，高機能マイコンを採用した多くの事例で，これまでのマイコンよりはるかに高機能であることを十分に生かし切れていない．そこで，マルチユーザ・マルチタスクの高機能 OS である UNIX系 OS が提供する優れた基本機能と，多種多様な POSIX コマンド群を積極的に利用してものづくりを支援する手法を提唱し，これを「ものづくりのためのプログラミング」という意味を込めて「ものグラミング」と名付けた．本論文では「ものグラミング」の考え方，ものグラミングのためのものづくり環境，ものグラミングに基づく教育環境について述べ，その有効性を示す．

The Mono-Gramming Approach for MAKERs and its Educational
Environment
Hiroyuki OHNO1 Yoshihiro MORI1 Yoshiaki KITAGUCHI1 Kazutaka NAKAMURA2
Tomoyuki MATSUURA2 Masami ISHIYAMA2 Nobuaki TOUNAKA2

名付けられた [1]．

1. はじめにMaker が，作品に利用するマイコンは多種多様であるが，近年，マイコン（マイクロコントローラ）を使った計測制

すでに普及し広く使われていた PIC マイコンや，AVR マ

御系を組み込んだ機器を個人が気軽に設計製作する環境がイコンを搭載した Arduino などに加え，2012 年頃からは整ってきている．個人向けの 3D プリンタやレーザーカッ

Raspberry Pi[2] に代表される「Linux を搭載する小型で高ターの普及が始まったのと時期を同じくしたこともあり，機能なマイコン」（以下 Linux マイコン）が安価に供給さ電子回路を活用した「ものづくり」を趣味としてあるいはれるようになったため，Linux マイコンを積極的に採用す小規模事業として行う者は増加を続けており，彼らの製作る傾向がみられる．しかし，現状ではマルチユーザ・マル

物も多様化している．このような，ものづくりの当事者をチタスクの本格的な Linux OS が利用になったことを十分

Maker と呼ぶが *1 ，Maker による新たな「ものづくり」のに生かし切れておらず，「OS が提供する多様な基本機能」

潮流は新たな文化であるとして，クリス・アンダーソンにや「OS インストール時点で多数の基本コマンド群が利用可

よって「メイカー・ムーブメント (Maker Movement)」と能」といった特徴を積極的に活用すれば簡単に目的を達成できる局面であっても，旧来の手法，すなわち C や C++

金沢大学総合メディア基盤センター
Information Media Center, Kanazawa University
2
ユニバーサル・シェル・プログラミング研究所
Universal Shell Programming Laboratory Ltd.
*1 Maker を「メーカー」と表記すると，白物家電製造業者をさす「(家電) メーカー」と同じ表記になるため「メイカー」と記して区別する事例もあるが，本報告では Maker と表記する．
1などの言語を用いたプログラムですべてを記述してコンパイルしたり，Ruby や Python のようなスクリプト言語を追加インストールした上でこれらの動作環境を常に最新状態に更新しつつ利用したりする手法が未だに主流である．
これに対し著者らは，「UNIX 系 OS が提供する優れた基― 1335 ―本機能」と「UNIX 哲学 [3]」に基づいて作られた，「それぞのための汎用的なコマンドを新たにいくつか追加する必要

れは単機能だが組み合わせることでさまざまな機能を提供はあるものの，少数の新規追加コマンドと既存の POSIX

できる多種多様な POSIX コマンド群」を積極的に活用しコマンド群を効率よく連携させるシェルスクリプトを書けたシェルスクリプトでものづくりを推進することにし，こば，C 言語等を駆使して作品を手がけるたびにいちいち最の手法を「ものづくりに適したシンプルなプログラミング」

初から全てをプログラミングせずとも，ものづくりに必要という意味を込めて「ものグラミング」と名付けた．英語なプログラムは簡単にできると考えた．すなわち，著者らでは mono-gramming と表記することにしたが，これは日が提唱する「ものグラミング」では，OS の基本機能や既本語の「ものグラミング」の音訳であるとともに mono と存のコマンドを最大限に生かしてシェルスクリプトを書く

いう音節に「単純かつ単一なプログラミングスタイル」とことがほぼ全てであり，コンパイルを伴う言語で個別の作いうニュアンスを含ませている．

品ごとにプログラムをゼロから開発する作業は原則として行わない．

2. ものグラミング

ここで，「LED を点滅させる」という基本動作をどう実

2003 年の “Wiring” から発展を続け [4]，ものづくりの現現するかを従来の方法と比較すると以下のようになる．な場において現在でも数多く用いられている Arduino[5] は，お，この動作は「LED をチカチカと点滅させる」というこ

Arduino UNO のような主要機種におけるプログラム格納とから「L チカ」と呼ばれ，プログラミング言語の特徴を

領域は 32kB に過ぎず，購入時点ではその先頭部分にブー述べる際に，まず「 ”Hello, World!” を画面に表示させる

トローダが書き込まれているだけで OS と呼べるものは存

プログラム」を記述してこれを他の言語と比較検討するこ在しない．数 100 種類の多種多様なライブラリがオープンとから開始するのに相当する．

ソースで提供されてはいるものの，C++言語をベースにしまず，Arduino で L チカを記述すると以下のようになたパソコン上のクロスコンパイル環境（Arduino IDE）で必る．このコードでは， Arduino のデジタル入出力ピンの一要とする機能の全てをユーザが記述してコンパイルし，こつ（13 番ピン）を setup() 関数で出力モードに初期化し，れを実機に書き込むのが基本である．ブートローダが一定

loop() 関数で 1 秒毎に HIGH と LOW を交互に書き込んでの領域を占めるため，ユーザが記述したスケッチ（Arduino

いる *2 ．多くの Arduino では 13 番ピンに LED が取付けではユーザが書くプログラムを「スケッチ」と呼ぶ）をク
ロスコンパイルしたバイナリを格納可能な領域はさらに小られているので，このスケッチで LED の点滅が実現する．



// 初期化

さく約 30KB となる．そのため，たとえば DHCP クライ

void setup() {アント機能と DNS による名前解決機能を持つスケッチを

pinMode(13, OUTPUT);

書くと，それだけでプログラム格納領域をほぼ使い切ってしまい肝心の機能をほとんど記述できない状態になる．し}たがって，ネットワークアクセスを伴う実用的なプログラ// 点滅

ムを書くのは容易ではない．ヒープとスタックに用いられvoid loop() {digitalWrite(13, HIGH); // LED 点灯

る RAM も Arduino では 2kB である場合が多い．このサ
イズでは，仮に IPv6 パケットを扱うスケッチを書くと，変delay(1000);// 1 秒待つ

数に IPv6 アドレスを 8 つ取り込んだだけで RAM 領域の

digitalWrite(13, LOW);// LED 消

半分を消費してしまう．すなわち，インターネットに接続

delay(1000);// 1 秒待つする用途に供するには RAM 領域も全く不足している．このような状況から，Arduino によるものづくりが普及しても，その作品がインターネット接続性を直接持つことはあまりなかった．
一方，2012 年に登場した，UNIX 系 OS が動く Raspberry

Pi では，0.5TB ないし 1GB のメインメモリが用意されており，ファイルシステムも SD カードや USB ストレージ上に作るため，個々のプログラムの大きさについては制約

}


3
*
の規定により，setup() と loop() の名
Arduino 言語
前は特定の目的に使われることになっており，前者はプログラム実行開始時に一度だけ呼び出され主として初期化を行い，後者は setup() の後に自動挿入される無限ループ内
で繰り返し呼び出される．なお，main() は自動生成され*2を受けることは事実上なく，さらに UNIX 系 OS が提供する基本機能や多種多様な POSIX コマンド群が，OS イン
ストール直後から利用できるという利点がある．インター
ネットへの接続性確保も問題なく実現できる．このような*3

Raspberry Pi 上でものづくりをする場合，ものグラミング― 1336 ―より実用的なプログラミングでは，ピン番号は直接記述せずに変数に格納するかクラス内に閉じ込めるか名前で記述してプリプロ
セッサに処理させるかして抽象化し，ピン番号を必要とする関数
等では，この例のように数値を直接指定するのではなく，抽象化した名前で参照するように記述すべきであるが，この例ではそうなってはいない．その是非についてはここでは議論しない
Arduino IDE で記述する言語には正式名称はないようだが，C++ との違いを明確にする必要がある場合には Arduino 言語と呼ぶことがある

るため記述する必要はない．Arduino IDE 上でこのコーことで目的を達成できる．これは大きな利点があるが，上ドを記述した後，クロスコンパイルし，さらにターゲット

記の例で言えばデジタル入出力を行うたびに gpio コマンとなる Arduino に書き込んで動作させる．一連の動作は，ドを一つ実行するため，利用目的によっては実行速度が問

Arduino IDE 上のボタンを一度クリックするだけでつなぎ題となる場合がある，この点については考察で述べるが，目なく行え，この点が Arduino をそれまでのマイコン開発

秒単位の間欠的な計測や制御で済む場合であれば，シェルから一歩抜き出た存在にしたが，クロスコンパイルしてかスクリプトであることは問題にはならない．

らターゲットに書き込むという流れは，従来のマイコンで行われて来た方式を踏襲している．

3. ものグラミング実践環境

次に，同等の内容を実行するシェルスクリプトを Rasp-

ものグラミング手法の有効性を確認するため，著者らはberry Pi 上で作成して実行すると以下のようになる．なお，

以下の環境を準備して自らで使いつつ，情報科学を専門とこの例では，Raspberry Pi の GPIO13 に 1 と 0 を交互にしない大学学部生向けの授業にこの環境を導入し，ものグ

書き込んでいるが Arduino と違って LED は装着されてはラミングの有効性を確認する評価を行っている．

いないので，LED を点滅させるためには GPIO13 に電流制限抵抗を直列接続した LED を装着する必要がある．

#! /bin/sh

3.1 ハードウェア：Raspberry Pi
ものグラミングで利用するマイコンは UNIX 系 OS が利用でき，汎用デジタル I/O (GPIO) ポートがユーザ空間# 初期化：のアプリケーションから利用できることが必須となる．

gpio -g mode 13 out

この条件を満たすマイコンボードは，Raspberry Pi 以外#点滅：にも Beagle Bone シリーズ，Intel Edison を始めとして数

while [ 1 ]; do

多く存在し，それぞれに特徴があるが，今回は Raspberry

gpio -g write 13 1; sleep 1;

Pi を選んだ．選択の理由は 1 台 35 ドルという低い価格とgpio -g write 13 0; sleep 1;

その結果もたらされた普及度合いである．したがって，他

done の同様のマイコンボードでも，ものグラミングは可能であり，今後 Raspberry Pi 以外のマイコンでも実施する可能
Raspberry Pi は，Linux や BSD 等の UNIX 系 OS が性はあるが，以下では特記ない場合は Raspberry Pi を前動くので，新たなプログラムを C や C++などの高級言語で記述してセルフコンパイルすれば，得られたバイナリは提としている．

そのまま実行できるが，上記のコードはシェルスクリプト

Raspberry Pi のハードウェア構成の詳細についてはイなので，コンパイルの必要もない．さらにこの程度であれ

ンターネット上に広く公表されているのでここでは割愛す

ば，わざわざシェルスクリプトにしなくても Raspberry Pi

るが，USB ポート，HDMI ポート，アナログ AV 入出力，のシェル上で 1 行のコマンドライン（ワンライナー）とし

有線 LAN 接続以外の周辺機器との接続は，P1 ヘッダと呼て直接実行できる．たとえば，上記のシェルスクリプトはばれるピンヘッダに集中している．gpio コマンドはこのピ

以下のようにして実行できる．

ンヘッダの状態をユーザが操作するためのコマンドである と言える．

$ gpio -g mode 13 out; while [ 1 ]; do gpio

Raspberry Pi を利用する場合，著者らは，キーボード，-g write 13 1; sleep 1; gpio -g write 13 0;

マウス，ディスプレイをつながず，LAN ケーブルでパソコンと直接あるいはスイッチングハブ経由で接続し，SSH で アクセスする方式を主たる利用方式としている．学生向け

sleep 1; doneなお，上記のシェルスクリプトやワンライナーで用いて講義でも基本はこの方式である．ただし，必要に応じて，いる gpio コマンドは，Raspberry Pi のために書かれたキーボード，マウス，ディスプレイを接続して利用したり，

WiringPi ライブラリ [6] のパッケージに含まれるコマンド

シリアルポートにパソコン等を接続し，ターミナルエミュ

である．POSIX では規定されていないため OS インストー

レータを介して操作する方法も適宜併用している．

ル直後には存在しきないが，git コマンドでソースコード
をダウンロードしてビルドするだけの簡単な操作でインス

3.2 ソフトウェア：UNIX 系 OS と POSIX コマンド群

トールできる．

とシェルスクリプト

シェルスクリプトを活用するものグラミングでは，上述

ハードウェアが UNIX 系 OS を利用できる能力を持つこのような単純動作に限らず，ネットワーク上のリソースととが前提なので，ソフトウェアは，(1) UNIX 系 OS, (2)連携した動作を行う際にも，ほとんどの場合は新たなプロ

OS 上で動くコマンド，アプリケーションおよびライブラ

グラミングを行う必要はなく，既存のコマンドを呼び出す

リ，さらに (3) これらを活用するユーザ作成のプログラム― 1337 ―• Digital I/O × 8 (8 ピン)という３つのカテゴリからなる一般的な構成になる．
まず OS には Debian Linux の Raspberry Pi 向けディスRaspberry Pi B+ 以降

トリビューションである Raspbian[7] を採用した．Rasp-• UART × 1 (2 ピン)

bian の採用により，POSIX で規定される全てのコマンド• SPI × 2 (9 ピン)

は Raspbian のインストール直後から利用可能になる．

• I2C × 2 (4 ピン)

Raspbian は，Debian Linux の Raspberry Pi 向けディ

• Digital I/O × 13 (13 ピン)

ストリビューションで，2016 年 5 月の時点では Debian 8.0

このように，Raspberry Pi は A/D 変換器や D/A 変換

Jessie に対応している．このため，ソフトウェア管理シス

器を持たず，GPIO ポートにも数の限りがある．この制限

テムの apt-get コマンドによって apt-get が管理するソフを解除するためには UART, SPI, I2C などを活用するこトウェアは容易に導入できる．さらに，git コマンドによっとになるが，接続するデバイスの種類の豊富さや価格をかて，オープンソースソフトウェアとして公開されたプログ

ら，I2C バスに着目してこれをシェルスクリプトから利用

ラムやライブラリも容易に導入できる．このような環境のする環境を構築した．このために，まず I2C バスに対し上でユーザは必要なプログラミングを行うことになり，C,て情報を送受信する i2cset, i2cget コマンド等を整備した．

C++ などのコンパイラ言語，Ruby, Python などのスクリ

さらに，Raspberry Pi の I2C バスを絶縁した上で延長し，

プト言語，さらにコマンドの組み合わせを記述するシェル

センサや I/O ポートを小型のケース（実体はペットボトル

スクリプトなどが利用可能になる．

キャップ）に納め，I2C モジュールを簡単に着脱するしく

前述のように，ものグラミングにおいては，コンパイ

み（I2C ブロック）を新規に開発し，利便性を大きく改善

ルを伴う高級言語でのプログラミングだけでなく，Perl,

させた．

Ruby, Python のようなスクリプト言語も使わず，POSIX

3.3.1 I2C バスを操作するコマンドの追加に規定されるコマンドに最小限のコマンドを追加した環境
で，もっぱらシェルスクリプトを活用するソフトウエア開発体制を整えている *4 ．この方針は，著者らが別途研究をRaspberry Pi から I2C バスを操作するためにまず以下のコマンドを追加した．

• i2cset - 指定したアドレスを持つ I2C デバイスに指定進めている「POSIX 中心主義」[8] に準拠したためである
が，gpio コマンドや i2cset/i2cget/i2cdetect コマンド（後した値を書き出す．

• i2cget - 指定したアドレスを持つ I2C デバイスから述）の「交換可能性担保」が確保できていない．したがって，現時点では，ものグラミングは POSIX 中心主義からデータを読み出す．

• i2cdetect - 利用可能な I2C デバイスのアドレスを表示

逸脱している部分があるが，現時点で交換可能性担保が確する．

保できていないこれらのコマンドはオープンソースであ

これらのコマンドは，現時点では交換可能性を担保する

り，それぞれが提供する機能は UNIX 哲学に基づいたシン

代替コマンドがないので，これらのコマンドを使うことはプルなものであるので，交換可能性担保はいつでも確保でPOSIX 中心主義準拠からは逸脱するが，本研究は POSIX

きる．交換可能性担保は，当該環境を 10 年あるいは 20 年

中心主義遵守が目的ではなく，単純な機能を提供するこれ

間先でも利用可能にするために必要な条件であるが，今はらのコマンドの追加で シェルスクリプトから I2C デバイ

将来よりも現在のものグラミング環境を発展させることをスへのアクセスが可能になるため，ものグラミングでは全優先する時期なので，交換可能性担保の確保の優先度は下面的に採用している．

げている．

3.3.2 I2C バスの操作
デジタル I/O が可能な I2C デバイスを操作して LED

3.3 周辺回路：I2C バスの活用の点滅を行うには以下の操作が必要となる．この例では，

Raspberry Pi と周辺回路を相互接続する際に利用する

Microchip 社の I2C I/O エキスパンダ MCP23017 の 8P1 ヘッダは当初は 26 ピンであったが Raspberry Pi B+

ビットの I/O ポートの全てに LED を接続し，単なる LED

から 40 ピンになった．電源と GND を除くピンには複数の点滅ではなく，8 つ並んだ LED の一方の端から他の端にの役目を切り替えて割り当てることができるが，標準提供

向かって順次点滅してゆく動作を繰り返すようにした *5 ．

の機能と数さらに消費ピン数は以下のようになる．

I2C インタフェースに対応した素子は一般に多機能なた

Raspberry Pi B+ 以前

め特定の機能を用いるための初期化は，前述の gpio コマ• UART × 1 (2 ピン)

ンドによる操作例より多少複雑になるが，実際の点滅操作• SPI × 1 (5 ピン)

全体としては大きな違いはない．

• I2C × 1 (2 ピン)*5*4Perl, Ruby, Python は POSIX に規定が無いため利用しない
が，awk と sed は規定があるので積極的に利用可能― 1338 ―Raspbian の sleep コマンドは１秒単位ではなくこの例のように1 秒に満たない時間を指定できるが，この機能は POSIX 準拠で
はない





ラミングのアプローチは，この会合でも紹介している．利#! /bin/sh

用者が急増したという状況にはないが，今後理解者が増え

I2C_IODIRA=0x00

ることを期待している．

I2C_OLATA=0x14

また，Maker 向けの作品公開・展示の場としては，日本
では Maker Faire Tokyo,

NT 金沢，NT 京都などが開催

i2cset -y 1 $I2C_DEV $I2C_IODIRA 0x00

されている．著者らはこのような場でも，ものグラミング

export xcnt=1

方式を取り入れた作品を展示しており，今後も展開する予while [ 1 ]; do

定である．

i2cset -y 1 $I2C_DEV $I2C_OLATA $xcnt;
sleep 0.1;

5. 考察

i2cset -y 1 $I2C_DEV $I2C_OLATA 0;

5.1 本方式の性能

xcnt=‘expr $xcnt ’*’ 2‘;

本方式に対する予想される否定的見解の筆頭は，その処[ $xcnt -ge 256 ] && export xcnt=1;

理速度についてである．

done




4. 普及啓発活動

GPIO の処理速度比較については，WEB 上に [10] に興味深い比較結果が掲載されている．これによれば，gpio コ
マンドを用いたデジタル出力（遅い）と，カーネル空間にある GPIO ポートをユーザ空間から直接操作するデジタル

4.1 著者らの周辺での試験的運用
前節で述べたシステムを用意し，システムを開発した著

出力（最速の方法）とでは 処理速度に 50 万倍近い差が見者の一人（大野）が本共同研究参加者全員に実機を示しなられた．すなわち，GPIO ポートを単にオン・オフした場

がら解説し，その有効性を説明した．これをもとに議論を合，前者では 40Hz 程度なのに対して，後者では 20MHz行い，次項で述べる大学での教育で実践することが決まっを越えている．したがって大量の入出力を高速で行う必要があるのであれば，ものグラミングが提唱する「gpio 等のた [9]．

コマンドと既存のコマンドを活用したシェルスクリプトを活用する方式」は不向きである．しかし，計測制御する間4.2 大学教育での実践
これまでに，以下の講義で，ものグラミングのアプロー

隔が秒の単位であるならこの速度差は問題にならない．現在，このような動作が比較的遅い用途をを中心にものグラチを取り入れた講義を行った．

ミングの適用を始めている．

• 計算科学特論（金沢大学，2015 年度後期）• クラウド時代の「ものグラミング」概論（大学コンソー
シアム石川いしかわシティカレッジ, 2016 年度前期）
前者の講義では，試行錯誤の要素が強く，gpio コマンドを用いた操作が中心で I2C については言及できなかった．
後者は現在開講中の講義であり，本稿執筆時点では Rasp-

berry Pi の利用には到達しておらず，ESP-WROOM-02 を用いた従来型の電子工作を行っている．この後，2016 年 6月中旬からいよいよ Raspberry Pi を用い，ものグラミン

5.2 POSIX に準拠していない UNIX 系 OS の是非
Linux を搭載したマイコンボードの中には，当該 OS のもとになる版の OS からいくつかの機能を抜いて提供している（この OS をここでは「サブセット版」と呼ぶ）場合がある．サブセット版は OS のサイズを小さくし，動作速度もファイルシステムや使用メモリのサイズも「軽量」にするのが目的である．多くのサブセット版では，busybox
等を用い，/bin や /usr/bin の下にあるコマンドの多くはグの講義と演習に入る．
どちらの講義でも，手元のマイコンの動作と連携させる

WEB 側のサービスの最初の事例として，コマンドライン
操作が可能な Twitter クライアント「kotoriotoko（小鳥男）」を用いた．kotoriotoko はすべて POSIX 中心主義に

buspox へのシンボリックリンクになっており，busybox
は自分がどの名前で呼ばれたかを検出して，呼ばれた名前に対応した機能を提供する．たくさんリンボリックリンクが貼られても実体は一つであるため，ファイルシステム上で占める割合も実行速度も節約できる．しかし，busybox

合致するシェルスクリプトである．

で提供されるコマンドの多くは POSIX に準拠しきれていないため，POSIX 準拠を前提に作られたシェルスクリプト

4.3 電子工作愛好者へ向けた活動への展開
著者の一人は石川県金沢市周辺の電子工作愛好者の集まり「木いちごの会」を主催し，2014 年 6 月から月に 2 度のペースで技術的な話題を交換したり新しい技術のハンズオが正しく動作動作しないことがある．そのため，当面は，POSIX に準拠した OS については，ものグラミングの適用対象外とする．

ンを行う集い（木いちごの夜会）を開催してきた．ものグ― 1339 ―5.3 IFTTT との比較

評価ができる状況にはないが，前述のように一連の準備を

IFTTT[11] は，さまざまな既存の WEB サービス（facebook や twitter

経て，2015 年 10 月から金沢大学において「ものグラミンなど）を連携させる仕組みで，”if thisグ」を学部生向け講義に試験的に取り入れ，さらに 2016 年

then that” の頭文字を取って命名されている．IFTTT の4 月からは「いしかわシティカレッジ」の講義での全面採利用者は，ifttt.com に用意された WEB インタフェースを用し，さらに石川県金沢市周辺の電子工作愛好家との情報

用い，“this” と “that” の部分（前者をトリガー，後者を交換会でも普及啓発を行っているので，およその定性的なアクションと呼ぶ）に既存の WEB サービスを指定して連傾向は今年度中に把握できることを期待している．

携を実現する．すでに，Raspberry Pi やネットワークイン
タフェースを追加した Arduino をトリガーやアクション

6. おわりにに指定する機能（HTTP を用いたフック）が提供されてい著者らは，UNIX 系 OS が利用できるマイコンボードで，るので，これを利用してマイコンと WEB サービスを連携

POSIX コマンド群，少数の新規作成コマンド，シェルスク

させている利用者は多い．

リプトを駆使してものづくりを支援する環境について検討

一方，ものグラミングではシェルスクリプトを使うので，し，実際に講義等で利用してその有効性を確認する作業を

特定のサイト（この文脈では ifttt.com）に依存せず，以下続けている．引き続き I2C バスを活用する実験環境の拡充のように初期化と実行を以下のように 1 行ずつで記述できと，利用者がただちに利用できるスタイルに調整したシェる．この例では，(1) GPIO4 を入力モードにした上で内部

ルスクリプトの提供をさまざまな I2C デバイスに対して行

抵抗でプルアップする初期化を行い，その後は (2) GPIO4

い，使い勝手を向上する作業も継続する方針である．

を監視し，(3) GPIO4 が HIGH から LOW に落ちるまで謝辞

待ち続け，(4) HIGH から LOW に落ちたら指定したコマンド（この例では date コマンド）を実行し，(5) 0.1 秒待っ

本研究は，金沢大学総合メディア基盤センターとユニてから (2) に戻るという動作をする．date コマンドの部分

バーサル・シェル・プログラミング研究所の共同研究の一をメールを送出したりツイートするといったコマンド（あ環として現在も推進中である．本共同研究の円滑な遂行をるいはシェルスクリプト）に置き換えれば IFTTT 以上に支援していただいている両組織の関係者各位に感謝する．

多彩な対応が自力で実現できる．

# 初期化（GPIO4 を入力モードにし，内部抵抗で



参考文献

Chris Anderson : ”Makers : the new industrial revolution”,”Random House Business Books”,2012[2]
Raspberry Pi :Teach, Learn, and Make with Rasp$ gpio -g mode 4 input; gpio -g mode 4 up
berry Pi , 入手先 ⟨https://www.raspberrypi.org/⟩ （参照 2016-05-20）.
# GPIO4 を監視し，LOW に落ちたらコマンドを実行[3]
Mike Gancarz, 芳尾桂 (監訳) :UNIX という考え方（The UNIX Philosophy) , (オーム社, 2001 年)# する動作を繰り返す[4]
Hernando Barragn : The Untold History of Arduino ,$ while [ 1 ]; do gpio -g wfi 4 falling &&入手先 ⟨https://date; sleep 0.1; done
arduinohistory.github.io/⟩ （参照 2016-05-15）.
 [5] Arduino : WHAT IS ARDUINO ? , 入手先 ⟨http://
www.arduino.org/⟩, （参照 2016-05-15）.
[6]
Gordon Henderson : Wiring Pi , 入手先 ⟨http://
5.4 本方式の教育効果
http://wiringpi.com/⟩ （参照 2016-05-15）.
[7]
Raspberry Foundation: RASPBIAN , 入手先 ⟨https://POSIX コマンドと少数の新規コマンドを組み合わせて，www.raspberrypi.org/downloads/raspbian/⟩, （ 参 照
ものづくりが行う方法が理解できれば，C や C++のような
2016-05-15）.
コンパイルを必要とする高級言語や，軽量（Lightweight）[8]
松浦智之, 大野浩之, 當仲寛哲 : ソフトウェアの高い互換性と長い持続性を目指す POSIX 中心主義プログラミと言っても，ものづくりには必要のない機能も盛りだくさ
ング , 情報処理学会 DICOMO2016 予稿集 (掲載予定),
んの ruby や python のような軽量スクリプト言語を学ぶ2016[9]中村 和敬， 大野 浩之 他 :IoT 時代に資する「ものよりものづくりを行いやすくなると予想している．
グラミング」教育のための授業開発と実践, 教育シス
このことを客観的に確認するためには，同程度の経験を
テム情報学会 2015 年度第 6 回研究会， 2016．
有する被験者を３組に分け，高級言語を用いたプログラミ[10] Joonas Pihlajamaa :Benchmarking Raspberry Pi
GPIO Speed , 入手先 ⟨http://
ングを使ったものづくり，軽量スクリプト言語を使ったもcodeandlife.com/2012/07/03/benchmarking-raspberryのづくり，ものグラミングスタイルのものづくりを実施し，
pi-gpio-speed/⟩ （参照 2016-05-15）.
技術習得の様子を観察する必要がある．ものグラミング教[11] IFTTT : Connect the apps you love. , 入手先 ⟨https://ifttt.com/⟩ （参照 2016-05-15）.
育はまだ試行段階なので，現時点ではこのような定量的な# プルアップ）[1]― 1340 ―