長尾 確先生 メッセージ これからものづくりをやりたい君(きみ)へ
1.これからのものづくりのための情報学
「ものづくりをやりたいなら工学部を目指すべき」
君の高校の先生や周りの大人たちの多くは、そう言うのではないでしょうか。私もそのように思っていた時期があります。もともと私は工学部の所属でしたし、情報学という新しい学問に対するとまどいもありました。
しかし、これからの時代のものづくりなら情報学部の方が適しているのではないかと思うようになりました。その理由は以下の通りです。
(1)情報学は汎用性が高い
情報学で学ぶこと身につくことは特定の分野に限定されず、分野横断的に使えるものが多いです。 例えば、情報学で学ぶデータサイエンスという学問を取り上げてみましょう。どんな分野でも科学的な方法を採用する場合は、関連するデータを取得して分析します。データサイエンスはそのための技術体系であり、これを学んだことがあるのとないのとでは大違いでしょう。
(2)ものづくりの多くのプロセスは情報処理である
新しいものをつくるときにやることは、まずデザイン(設計)でしょう。それは外見をどうするか、内部をどうするか、使い方をどうするか、などを含みます。このとき、仮想的に作ってみて試すのがよいでしょう。そのときに行われるのは主に情報処理です。また、仮想物を動かすのにプログラミングをします。それも情報学で学ぶことになります。さらに、仮想物を実体物にすることができます。これは3Dプリンタなどを操作して行います。このときも機械の制御などの情報処理が行われます。
(3)ものができてからも情報処理は続く
例えば、製品開発をして、販売した後に、不備が見つかったとしましょう。それが、もし人命に関わることだったりしたら大問題です。そのようなことにならないために、製品を仮想的に実現して、シミュレーションを行って将来起こり得る問題を予測します。これはデジタルツインと呼ばれています。このように、実体物としての製品ができた後も、情報処理が必要なのです。
このようなことを体系立てて学んでいくことは、ものづくりをやるためにとても重要なことです。
さて、君の作りたいものはなんでしょうか?新しいゲームでも、かっこいい乗り物でも、便利なロボットでも何でも構いません。もし君がものづくりをやってみたいのなら、私の話を聞いて欲しいと思います。
2.プログラミングはちょっと面倒だが、役に立つ
プログラミング(言語)は、現在では最強のものづくりツールであると言えます。だから、得意である方がよいですが、得意ではなくてもある程度は使えるようになる必要があります。
最近は、ChatGPTのようなAIがプログラムを自動生成することもありますが、その入力を考えるためにも、プログラミングの考え方は有効です。つまり、作業としてのプログラミング(それをコーディングと言います)が少なくなるとしても、考え方としてのプログラミング(それをコンピュテーショナルシンキングと呼ぶ人がいます)は習得する必要があります。
プログラミングとは、要するにものごとの手順を決めるということです。ある入力からある出力を導くために、どのような処理をしなければならないかを考えるのです。
このとき、入力、つまり人間からコンピュータへの働きかけとは何かということを考えてみましょう。人間がコンピュータにやって欲しいことをどうやってコンピュータに伝えるかということです。これをいろいろ考えて体系化したものがヒューマンコンピュータインタラクション(人間とコンピュータの相互作用)という学問です。
この新しいやり方を考えるのも面白いですが、まずは、すでにあるやり方を使いましょう。つまり、タッチパネルで画面をタップするとか、キーボードで文字をタイプするとかです。その結果は、データとしてプログラムに渡されます。この場合のデータとは、指が触れた画面上の座標とか、タイプされたキー(に対応する文字)とかです。
次に出力を考えてみましょう。つまり、コンピュータにやって欲しいこと、および、その結果を表現する方法を考えるということです。例えば、画面上に一つボタンがあって、それに触ると、画面の色がランダムに変わるというプログラムを考えてみましょう。
まずボタンの見た目を作らないといけません。Webページを作成する言語であるHTMLを使ってボタンを作ると以下のようになります。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景色を変えるボタン</title>
<style>
body {
background-color: white;
text-align: center;
padding-top: 100px;
font-size: 24px;
}
button {
background-color: blue;
color: white;
font-size: 24px;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
</style>
</head>
<body>
<button onclick="changeColor()">背景の色を変える</button>
<script>
ここにスクリプト(以下で説明する)を挿入
</script>
</body>
</html>
次にボタンを押したときの動きをプログラミングしてみましょう。これには、例えば、JavaScriptというプログラミング言語を使います。これは、とても便利な言語なので、Webに興味のある人は覚えておくとよいでしょう。
このプログラムはHTMLファイルの内の<script>タグで囲まれた部分に挿入します。別ファイルにしてURLで参照することもできます。
function changeColor() {
var colors = [
"red", "green", "blue", "yellow", "purple", "orange",
"black", "white", "gray", "brown", "beige", "pink",
"navy", "teal", "maroon", "olive", "lime", "fuchsia",
"silver", "gold", "crimson", "turquoise", "violet", "indigo",
"magenta", "khaki", "salmon", "coral", "plum", "lavender",
"orchid", "peru", "sienna", "thistle", "wheat", "cornflowerblue",
"darkcyan", "darkgoldenrod", "darkkhaki", "darkmagenta",
"darkolivegreen", "darkorange", "darkred", "darksalmon",
"forestgreen", "indianred", "lightcoral", "lightgreen", "mediumaquamarine",
"mediumblue", "mediumorchid", "mediumslateblue", "navajowhite",
"palegoldenrod"
];
var randomColor = colors[Math.floor(Math.random() * colors.length)];
document.body.style.backgroundColor = randomColor;
}
このJavaScriptプログラム(changeColor()関数)は、HTMLで作成したボタンを押すと、50種類の色から一つをランダムに選択して、それを背景色に設定するようにします。変数colorsに使用したい色を配列として保存し、Math.random()関数(0以上1未満の範囲の浮動小数点数をランダムに返す関数)を使用して色のインデックス(索引)を決定し、document.body.style.backgroundColorを使用して背景色を変更します。ボタンには、 onclick属性を設定して、changeColor()関数が呼び出されるようになっています。
上記のHTMLはこのURL(http://www.nagao.nuie.nagoya-u.ac.jp/download/change_color_button.html)でアクセスできますので、試してみてください。
ところで、ChatGPTやそれを発展させたマイクロソフトのBingチャットのようなAIにプログラムを作らせたいと思ったときに、どんな目的で何をするかを具体的に説明する必要があります。そのような説明文をプロンプトと言います。
このプロンプト(特に最初に入力する初期プロンプト)はAIに何らかの性格や行動規範を設定することに相当します。例えば、Bingチャットは、自分がBing Searchというサービスで、問い合わせに答えるときに複数のサイトを検索し、できるだけ情報量の多い答えを生成するように初期プロンプトで設定されています。また、「書籍や歌詞の著作権を侵害しないこと」「人やグループを誹謗するような発言を要求された場合、丁重に断ること」などのルールを遵守するように設定されているそうです。
3.仮想物から実体物へ
おそらく今後は、多くの場合、実体物を創造する前に、仮想物つまりデータで表現された物体を設計し、模擬的に操作してみて、いくつかの試行錯誤を経て実体化していくことになると思います。
仮想物を製作する方法は、例えば、その形をデザインするために3Dモデリングツールを使います。Blender(ブレンダー)というツールが有名です。そして、デザインした3Dモデルを動かすために、3Dアニメーションツール(正確にはゲームエンジン)を使います。有名なものにUnity(ユニティ)があります。
BlenderやUnityには、チュートリアルのWebページや動画があります。
例えば、Blenderなら「Blender入門」(https://blender3d.biz/)、Unityなら「はじめてのUnity」(https://industry.unity3d.jp/tutorial/116/)があります。 ちなみに、Blenderの拡張機能をPythonというプログラミング言語を使って実装できますし、Unityのスクリプト(動作などを記述するプログラム)はC#というプログラミング言語を使って実装します。
次に、実体物にする方法を説明します。 そのために、3Dプリンタを使います。3Dプリンタ(以下の画像を参照)については、よくご存じの人もいると思いますが、これは、3次元空間において物体を造形することができる機械です。つまり、デジタルデータから実体物を作り出すことができます。
そのために、3Dのデータが必要です。先に述べたBlenderのような3Dモデリングツールを使用してSTL(光造形法Stereolithographyの略)という形式のデータを作成します。次に、作成したSTLデータを3Dプリンタに読み込ませます。3Dプリンタは、このデータを基に、一つずつ層を重ねて物体を作り出していきます。この手法を積層造形法と呼びます。
3Dプリンタは、様々な材料を使って物体を作り出すことができます。例えば、プラスチック、金属、ガラス、陶器などです。材料は、フィラメント、パウダー、樹脂などの形で供給されます。3Dプリンタは、オリジナルのアイデアを実体物にすることができるため、製品開発や研究開発、教育など様々な分野で利用されています。また、自分でデザインしたものを自分で作り出すことができるため、趣味としても楽しむことができます。
また、先に述べたUnityでプログラミングしたように、実体物に動きを持たせるためには、まず3Dプリンタで部品を作ります。それを組み合わせて、可動部を作ります。自動で動くようにするためには、モーターを組み込みます。そのモーターを動かすためにもプログラミングが有効です。
そのプログラムはマイコン(マイクロコンピュータ)上で動きます。その代表的なものにイギリスで発明されたRaspberry Pi(ラズベリーパイ。略してラズパイ)というものがあります。ラズパイはシングルボードコンピュータとも呼ばれます。これはラズパイが1個のボード(基板)の上に実装されているためです。ラズパイにも一般のPCと同様にオペレーティングシステム(OS。基本ソフト)があります。ラズパイのOSはRaspbianと呼ばれます。これはWindowsとはかなり違いますが、MacOSやLinuxとは似ています。
ラズパイもかなり使えるのですが、初めてマイコンを使う場合は、もっと簡単なものがあります。それはArduino(アルデュイノ。イタリアのバーの名前からとったらしいです)というものです。Arduinoの特徴はアナログセンサー(電圧などの連続値を出力するもの)が使えることです。これによって、音の大きさに反応する装置とか、部屋の明るさに反応する機械などが作れます。
これのスターターキット(以下の画像を参照)が教材としてとてもよくできているので試してみるとよいでしょう。
ブレッドボード(簡単に回路が作れる基板)やジャンパーワイヤー(簡単に回路を構成する導線)を駆使して回路を作ります。それがうまくいったら、はんだ付けできる基板に移行して本格的に作ります。 例として、RGB LED(いろいろな色を出せる発光ダイオード)とタクトスイッチ(押しボタン)を使って、スイッチを押すごとにLEDの色を変える発光装置を作ってみましょう。回路は以下の画像のようになります。
Arduinoで動かすプログラムは以下のようになります。このプログラムはArduino IDE(統合開発環境)というツールをPCにインストールして(https://www.arduino.cc/en/softwareからダウンロードできます)作ることができます。同じツールで、プログラミング後に、コンパイル(プログラムに間違いがないかチェックする)して、USBケーブル経由でArduinoへの転送を行います。
int redPin = 9; // 赤色LEDのピン番号
int greenPin = 10; // 緑色LEDのピン番号
int bluePin = 11; // 青色LEDのピン番号
int switchPin = 2; // タクトスイッチのピン番号
int redValue = 0; // 各色のPWM値を保持する変数
int greenValue = 0;
int blueValue = 0;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(switchPin, INPUT);
randomSeed(analogRead(0)); // ランダムなシード値を設定
}
void loop() {
if (digitalRead(switchPin) == HIGH) { // スイッチが押された場合
int red = random(256); // 0から255までのランダムな整数を生成
int green = random(256);
int blue = random(256);
analogWrite(redPin, red); // 生成した値を各色のLEDにPWM信号として出力
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
redValue = red; // PWM値を保持する
greenValue = green;
blueValue = blue;
delay(500); // 500ミリ秒待機して、次にスイッチが押されるのを待つ
} else { // スイッチが押されていない場合
analogWrite(redPin, redValue); // 保持されたPWM値を使用してLEDを点灯する
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
}
}
このプログラムでは、random()関数を使用して、0から255までのランダムな整数を生成し、それをアナログ値(パルス幅変調PWMの値)としてRGB LEDに出力します。タクトスイッチの状態をチェックするために、digitalRead()関数を使用して、switchPinに接続されたピンの状態を確認します。analogWrite()関数を使用して、RGB LEDの色ごとの明るさを指定します。ランダムな色が表示されるように、ボタンを押す前にランダムなシード値(ランダムな値を生成するアルゴリズムにおいて、初期値として使われる値)を設定するために、randomSeed()関数を使用してアナログ入力の値を使用します。最後に、delay()関数を使用して、次にタクトスイッチが押されるのを待つために500ミリ秒待機します。
4.メイカーになろう
ものづくりをやる人をメイカーと言います。これは別に仕事としてやらなくてもよくて、趣味でメイカーをやっている人もいます。技術的に新しいことをやろうと思っている人はたいていメイカーになります。
みなさんもメイカーを目指してみてはいかがでしょうか?
参考になる良い本を紹介します。「メイカーズ 21世紀の産業革命が始まる(NHK出版、2012年)」という本です。これは、クリス・アンダーソンという人によって書かれた本で、3Dプリンタやレーザーカッターなどのデジタル工作機械を使って、誰でも製造業者(つまり職業としてのメイカー)になることができる時代が訪れることを予測しています。
この本は、メイカームーブメントと呼ばれる、DIY(Do It Yourself:自分で作る)やDIT(Do It Together:一緒に作る)の文化に焦点を当てています。この文化は、デジタル工作機械を使って、自分で製品を作り、自分でマーケティングや販売をすることができるようになったことを受けて、急速に成長しています。この本では、デジタル工作機械を使って、製品を作ることができる人々が増えることで、産業革命が起こると主張しています。これによって、製造業が従来の中央集権的なモデルから、分散型のモデルに移行することができ、より迅速で効率的な製品開発が可能になると考えられています。
また、この本では、デジタル工作機械が使われることで、製品のカスタマイズが容易になり、消費者が自分たちのニーズに合わせて製品を作ることができるようになると主張しています。
特に、この本は、メイカームーブメントが産業に与える影響について、興味深い洞察を行っています。それは次のようなものです。メイカームーブメントとは、DIYやDITの文化を中心とした、デジタル工作機械を使って自分で製品を作り出すムーブメントです。このムーブメントが産業に与える影響は、以下のようなものがあります。
- 製造業の分散化:メイカームーブメントにより、製品を作ることができる人々が増えることで、製造業が従来の中央集権的なモデルから、分散型のモデルに移行することができます。このように、より多くの人々が製造業に参入し、より幅広い分野で製品が生産されることが期待されます。
- 革新的な製品の開発:メイカームーブメントにより、デジタル工作機械がより一般的になることで、より迅速で効率的な製品開発が可能になります。これにより、より革新的な製品の開発が可能になり、市場競争力が高まることが期待されます。
- カスタマイズされた製品:メイカームーブメントにより、消費者が自分たちのニーズに合わせて製品を作ることができるようになります。このように、よりカスタマイズされた製品が生産されることが期待されます。このような製品は、より高い満足度を得ることができ、消費者のニーズを満たすことができます。
- 新しいビジネスモデルの創造:メイカームーブメントにより、製造業がより分散化され、個人が製品を生産することができるようになることで、新しいビジネスモデルの創造が可能になります。例えば、製品を作る人々が自分たちで製品を販売することができるようになります。このように、製造業に関する新しいビジネスモデルの創造が期待されます。
このように、メイカームーブメントは、製造業に大きな影響を与え、最近のAIの発展と結びついて新しい産業革命をもたらす可能性があります。
さて、どうしたらメイカーになれるかと言うと、前述のものづくりツールに精通しているのが一番の近道です。それから、自分が作りたいものをイメージできるように普段からトレーニングしていると良いでしょう。
5.何をやっておくべきか
みなさんの将来の夢は何ですか?人気の職業に就きたい、趣味で生きていきたい、何でもいいから有名になりたい、など、いろいろあるでしょう。
漠然と考えていても、その夢には近づけないので、何かやってみましょう。ここでは、何らかの形でものづくりに関わりたい人を想定して、その人に向けてアドバイスしたいと思います。
ものづくりで最も重要なものは、知識よりも経験です。何かを知っている人より、何かをやったことがある人の方がずっと偉いです。
プログラミングが上手くなる唯一の方法は、プログラムをたくさん書くことです。ただ、プログラミングは闇雲にやっても上達しませんので、何か目標を決める必要があります。今できることより少し高いレベルの目標を持つとよいでしょう。
例えば、2Dのゲームを作ったことのある人は、3Dゲームの制作にチャレンジしてみましょう。まだゲームを作ったことがない人は、先に紹介したUnityのチュートリアルを試してみて、ボール転がしのゲームを作ってみましょう。
もっと簡単なことでもいいです。メモ帳で友人の名前と住所をまとめている人は、それをcsv形式にしてみましょう。csvとはComma Separated Valuesの略で、文字や数字がカンマ(,)で区切られたデータのことです。つまり、名前(姓と名を分けてもいい)と住所や電話番号をカンマで区切り、人ごとに行に分けて、保存します。そのとき、ファイルタイプ(テキストファイルの場合は、おそらく.txtになっているはず)を.csvにします。そのcsvファイルをマイクロソフトの表計算ソフトであるエクセルで読み込んでみましょう。メモ帳のときよりわかりやすく整理された状態で見えると思います。
それができたら、検索のやり方を考えてみてください。そのときに、属性(データを分類するためのラベル。例えば、中学の同級生とかバイト仲間とか)を追加して、もっとうまく検索できるように工夫してみましょう。そのうち、データベースに興味が湧いてくるかも知れません。
要するに、夢をもっと具体的にしたものが目標で、良い目標というのは、自分の今のレベルより少しだけ高いものということです。そして、目標が達成できたら、新しい目標を立てればよいのです。
この長文を読んで、ますますものづくりに興味をもった人はぜひ情報学部に来てください。さらに詳しいことを知りたいと思ったら、私(nagao@i.nagoya-u.ac.jp)までご連絡ください。
では、これからも夢に向かってがんばりましょう!