【第9号】エクセルの野望・プログラムの本質

「エクセル」の数式がついに「まともなプログラミング言語」に!?
金谷一朗(いち) 2021.02.19
誰でも

いちです,おはようございます.

このニュースレターを執筆中の2021年2月14日に,東北地方で大きな地震がありました.被災された皆様には心よりお見舞い申し上げます.引き続き大きな揺れには充分ご注意下さい.

さて,皆さんは表計算ソフトを使っておられるでしょうか?あれです,マイクロソフト社のエクセルとかです.最近では表計算だけでなく「レイアウトのしやすい『ワード』の代わり」つまり「エクセル方眼紙」としても使われていますね.

エクセルには「関数」という機能があります.例えば10個のセルの数値の合計を求めるには,10個のセルの足し算をするのではなく,合計を求める関数(SUM)を使うことでしょう.合計を求めたセルの隣に,消費税分を上乗せした金額を計算するための別のセルを置くこともよくあります.

関数の中には,条件付きで実行されるものもあります.例えば,ある範囲のセルの中で,数値が100よりも大きいものの個数を数える(COUNTIF)などですね.このような関数を使えるようになると,エクセルの中級者と言えるのではないでしょうか.僕などはまだ初級と中級の間を行ったり来たりしているレベルです.

エクセルの野望

先週,マイクロソフトCEOのサティア・ナデラ氏がこんなツイートをしました.

世界で最も使われているプログラミング言語,エクセルの数式がついにチューリング完全(筆者注:「まともなプログラミング言語」の霊験あらたかな言い方)になりました.
ナデラCEO

このツイートは二重の意味で間違っています.まずエクセルの数式は「世界で最も使われているプログラミング言語」ではありません.プログラマはエクセルの数式を「プログラミング言語」とはみなしません.ただ,これは習慣的なもので,プログラミング言語と呼んでおかしいわけでもないのです.

これは,元ツイートの二つ目の間違いに繋がります.エクセルの数式は最初から「まともな」プログラミング言語でした.「まとも」というのが「任意のプログラムを書ける」という意味においてですが.[参考文献1]

しかし,いったいプログラムとは何なのでしょうか.

プログラムとは,ある人にはコンピュータへの司令書であり,ある人には思考の道具であり,ある人には魔法の呪文かもしれません.

最初に答えを言ってしまいます.プログラムとは数式です.

大抵の教科書には,プログラムが数式だとは書いていません.大学で使われる教科書でさえ,プログラムが数式だと明記しているものは少数です.しかし,厳密に数学的な手法で,プログラムとは数式の一種であることが証明できます.

世界初のプログラムは?

皆さんはプログラムの歴史がどのぐらい遡ると思われますか?世界初のデジタルコンピュータと言われているドイツのツーゼZ3やアメリカのエニアック(ENIAC)の登場が1940年代ですから,そのぐらいでしょうか?いいえ,違います.プログラムの歴史は1801年のジャカード織機(フランス)にまで遡ります.織機とはご存知の通り,さまざまな模様の布を織り上げる機械です.

David Monniaux, CC BY-SA 3.0

David Monniaux, CC BY-SA 3.0

現代の織機は経糸(たていと)と緯糸(よこいと)を組み合わせる際,経糸の上げ下ろしを個別に制御して,複雑な模様を表現することが出来ます.この制御を初めて自動化したのがジャカードでした.日本で最初にジャカード織機を導入したのは京都の西陣でした.1872年のことだそうです.

このジャカード織機が画期的だったのは,パンチカードと呼ばれる穴の開いたカードを読み込ませる事で,織物の模様を指定することが出来たことです.現代ではこのパンチカードはフロッピーディスクに置き換えられています.フロッピーディスク,懐かしいですね.2014年には,西陣でフロッピーディスクが不足したため全国に提供を呼びかけるという事態も起こりました.

…と執筆していましたら,なんとパンチカードもまだ現役で使われていることを発見しました.実に息の長い技術ですね.

このように,機械(ハードウェア)の方は固定しておき,パンチカードやフロッピーディスクのようなメディアに書き込まれた司令書によって機械の動作を変えるわけですね.この司令書をプログラムと言います.ハードウェアという語はもともと金属製品を指す言葉でしたが,今ではコンピュータを表す言葉になっています.そして,ハード(硬い)ウェアに対して,プログラムのことをソフト(柔らかい)ウェアと呼びます.そう言えばパンチカードやフロッピーディスクも柔らかい素材で出来ていましたね.

「ソフトバンク」創業者の孫正義さんは,社名を「ソフトウェアの銀行」という意味で付けられたそうです.[参考文献2]2015年,大統領就任前のドナルド・トランプさんを訪問した際,トランプさんはトランプタワーのロビーで報道陣に “This is Masa of SoftBank from Japan” とだけ紹介して,孫さんを置いて去っていってしまったことがありました.翻訳すると「こいつは日本から来た『やわらか銀行』(ソフトバンク)のマサだ」とだけ言ったわけです.報道陣がぽかんとしていた理由もわかりますね.

ともかく,プログラムとはコンピュータの動作を変更するための司令書と覚えておけば間違いはありません.オーケストラに対する楽譜のような存在ですね.コンピュータは日本語では計算機ですから,計算機のための楽譜という意味で「算譜」という訳語がかつて使われていました.

プログラミング言語とプログラムの本質

プログラムはコンピュータへの指令ですから,言葉にしなければなりません.「言わなくても察してくれ」は通用しません.それどころではないのです.残念なことに,我々が普段使う自然言語では曖昧すぎます.ジャカードのパンチカードは非常に単純な言葉だったので曖昧性はありませんでしたが,単純すぎて複雑な指令を書くには適していませんでした.そこで初期のプログラミング言語設計者たちは数学から記号を借りました.例えば足し算記号(+)や等号(=)がそれです.

一方で,プログラミング言語設計者たちは,数学ではあまり見慣れない記号や書式も発明して行きました.そのうちのいくつかは現在に至るまで使われていますし,残りのいくつかは忘れ去られて行きました.忘れ去られた代表例は「行番号」や「ラベル」と呼ばれています.それらが何かを知らなくても恥じ入ることも急いで調べる必要もありません.それらはプログラムの本質ではなかったのです.

では,プログラムの本質とは何でしょうか?

プログラムには三つの本質があります.「逐次実行」「分岐」「繰り返し」です.

逐次実行はわかりやすいです.「まずAをしなさい,それが終わったらBをしなさい」というふうに,コンピュータにやって欲しいことを順番に書くことです.

ほとんどのプログラミング言語では

A, B

というふうに,順番に書けば順番に処理されます.同じように書いても「可能な限り同時に実行せよ」あるいは「必要とされるまで実行するな」を意味するプログラミング言語もありますが,そのような言語でも逐次実行を明示的に指示する記法があります.

分岐は,もし条件Xが成立するならばAを,そうでなければBを実行しなさいという意味です.多くのプログラミング言語で

If X then A else B

のように書かれるか,または似た書かれ方をします.分岐には非常に多くの方言があるため,それらを列挙することは困難ですが,この if X then A else B のパターンにまず当てはまります.

最後に繰り返しです.これは,ある条件Xが成立している間,Aを繰り返し実行しなさいという意味です.多くのプログラミング言語で

While X do A

のような書かれ方をします.繰り返し中に条件Xが不成立にならない限り,この繰り返しは無限に続くことになります.

I/O

本項の冒頭で,プログラムは数式だと言いました.しかし,高校までで習う数式とプログラムは全然似ていません.なぜでしょうか.条件分岐は「場合わけ」で,繰り返しは「数列」や「数学的帰納法」で出てきますから,高校までの数式とプログラムの違いではありません.プログラムが際立っているのは,プログラムが入力を受け付け,何かを出力し,内部状態を持つからです.入力 (input) と出力 (output) は一括りにして入出力 (I/O) とも言います.

入力と出力はわかりやすいでしょう.キーボードやマウス,スマホやタブレットならタッチスクリーンが入力になります.入力はプログラムに何かの情報を伝えます.一方の出力は画面やプリンタですね.

ほとんどのプログラムは内部状態も持ちます.例えばスマホで電卓を使っているとき「1」と押せば(入力すれば),電卓アプリは内部に「1が入力された」ということを記憶します.この記憶が内部状態です.

さて,入出力と内部状態は実は同じものなのです.出力とは画面やプリンタの「状態」を書き換えること,入力とは刻一刻と変化するキーボードやマウス,スクリーンタッチの「状態」を読み取ることです.従って,入出力も含めて「状態」と呼んで差し支えありません.

チューリングマシン

ここに四角い箱があるとしましょう.色は何でも構いませんが,計算機科学者は黒い箱のイメージを持っているようです.この箱の左右には紙テープの差し込み口があり,右の差し込み口から入れた紙テープが左の差し込み口から出てくるものとしましょう.紙テープはマス目に区切られていて,ひとマスごとに何かの記号が書かれています.また想像力を働かせて,紙テープは無限に長いものとします.

この箱は,紙テープから記号を一つ読み込み,内部状態を変え,時には紙テープの記号を(消しゴムと鉛筆で)書き換え,紙テープを左へひとマス分送って次のマスを読み込みます.時には,数マスを一気に飛ばしてしまったり,逆に巻き戻したりすることもあるでしょう.

このような箱をチューリングマシン(またはチューリング機械)と呼びます.お察しの通り,この箱がコンピュータの,紙テープがプログラムの抽象的な姿です.紙テープをひとマス分ずつ読み込むのは逐次実行を,読み飛ばすのは条件分岐を,巻き戻すのは繰り返しの抽象化です.

チューリングマシンは極めて重要な概念です.というのも,あらゆるプログラムは,このチューリングマシンで再現できるからです.話を単純にするために,紙テープには0と1の2種類の記号しか書かれないとしましょう.プログラムとは,所詮は0と1の羅列です.

日本語も英語も,全ての文字は0と1で表現できます.例えばアルファベットのAは国際的に01000001と表現することが取り決められています.コンピュータの記憶装置は0と1しか記憶できませんが,それで十分なのです.マウスの動きはUSBケーブルを通して,あるいはBluetooth無線を通して0と1の羅列でコンピュータへ伝えられます.映像はHDMIケーブルやUSBケーブルを通して0と1だけで伝えられます.こう考えると,あとはチューリングマシンの中の状態の書き換え規則だけうまく作ってやれば,任意のプログラムと等価になることが想像できますね.

換言すると,あらゆるプログラムは紙テープに書かれた「データ」だということになります.これは現在のほぼありとあらゆるコンピュータの基礎になっている,重要な概念です.プログラムを安心して内蔵ディスクやUSBメモリに保存できるのは,プログラムがデータだからです.

チューリングマシンを考えたイギリスの数学者アラン・チューリングの生涯は映画「イミテーションゲーム」に描かれています.後ほど「おすすめ映画」の項目でご紹介いたしましょう.(チューリングマシンに関しては,エミール・ポストという数学者も独立に同じ発見をしています.)

チューリングマシンを作った例, GabrielF, CC BY-SA 3.0

チューリングマシンを作った例, GabrielF, CC BY-SA 3.0

計算こそが本質

数学で最初に習う数は自然数です.自然数は根源的な概念と教わりますし,今でも多くの人がそう考えています.しかし,クルト・ゲーデル,スティーブン・コール・クリーネ,アロンゾ・チャーチという数学の偉人たちは違う考え方をしました.1930年代から1940年代にかけてのことです.彼らによると,自然数ではなく「計算」こそが数の本質なのです.

チャーチの考えを辿るとこんなふうになります.まず,何か関数を考えます.エクセルの関数を想像していただいても結構ですが,お仕着せの関数ではなく自分で関数を作ることをイメージしてください.例えば,与えられた自然数xを2倍にする関数fを考えてみましょう.つまり

f(x) = 2x

です.もしxに3を入れる,つまりf(3)を計算すると6になるということですね.

次にチャーチは,ある計算に「イチ」と名前をつけました.どんな計算かというと

(イチ) = f(x)

です.ここでxの値は何でも構いません.f(1)でもf(10)でもf(100)でも良いのです.大事なのは「イチ」が計算であるということです.

チャーチは「ニ」「サン」も作りました.こんな感じです.

(ニ) = f(f(x))
(サン) = f(f(f(x)))

こうしていけば,無限に自然数を作ることができます.ここでxのことは全部忘れて,イチ,ニ,サンを改めて 1, 2, 3... とすれば,自然数の代わりとして使えます.足し算は,足したい数だけ関数fを適用することで得られます.例えば(ニ)に(イチ)を加えるには,(ニ)にfを1回だけ適用すればいいのです.

ゼロも定義しておきましょう.ゼロはこうします.

(ゼロ) = x

このゼロと関数fがあれば,自然数が全て手に入ります.そして,チャーチたちの偉業は,関数fさえもあらかじめ決めておく必要がないことを発見したことです.

このようにして,チャーチたちは自然数が理論上は「計算」と同じであることを発見したのです.コンピュータは負の数も実数も全て自然数を使って表現しますから,コンピュータで扱う数値は全て「計算」で表現できると言えます.[参考文献3]

プログラムの本質は逐次実行,条件分岐,繰り返しでした.チャーチたちは,これらの構造もまた,同じ「計算」の原理で説明できることを発見しました.今度は,プログラムが全て計算だったことが分かったのです.

プログラムはデータであり,計算でした.一体どちらなのでしょう?実は,あらゆるプログラムは,チューリングマシンで表現できるとともに,このチャーチの計算で表現できるこもと分かっています.つまり両方なのです.これをチャーチ・チューリングのテーゼと呼びます.

ここで最初の話に戻ります.データであり,計算であるもの.そう,数式ですね.数式は紙の上に書けばデータですが,そこに具体的な数値を入れて,脳みそを駆使すれば計算結果を得られます.そうそう,エニアック登場前後まで,英語でコンピュータと言えば人間のことだったんです.

なお,あるコンピュータあるいはプログラミング言語がチューリングマシンと同じ能力を持つことを「チューリング完全」と呼びます.ナデラCEOが「エクセルの数式がチューリング完全になりました」と高らかに謳い上げたのは,こういう理由でした.ただし,エクセルの数式はもともとチューリング完全だったので「自社製品の機能ぐらい把握しておけよ」と僕は思ってしまいます.

先程,関数fを作るにあたって「お仕着せの関数ではなく自分で関数を作る」というお話をしました.この機能こそが,従来のエクセルに欠けていた機能です.ナデラ氏のツイートは,エクセルの数式で独自の関数を作られるようになったよという意味だったんですね.

おすすめTEDトーク

TED

TED

歴史家であるジョージ・ダイソンが,現代のコンピューター誕生にまつわる話を,その16世紀の起源から,初期のコンピューター技術者による可笑しな日誌まで紹介します.
TED

電気で動く最初のコンピュータは,戦争のために開発されました.イギリスではドイツの暗号エニグマを解読するため,アメリカでは核兵器を開発するためでした.

数学者バリチェリは,昼間は水爆開発に使われていたコンピュータを夜に使い「人工生命」の先駆的な研究を行いました.この研究はやがて本ニュースレター【創刊号】でご紹介したアートへと繋がります.こんなところに萌芽があったのですね.

ところで,核兵器について,僕たちが主催したローカルTEDイベントであるTEDxSaikaiで,ジャーナリストのアリ・ビーザ氏にトークをしてもらったことがあります.彼のトークの翻訳を僕のブログに置いていますので,よろしければ御覧ください.

おすすめ映画

「SHERLOCK シャーロック」のベネディクト・カンバーバッチ主演で,第2次世界大戦時,ドイツ軍が世界に誇った暗号機エニグマによる暗号の解読に成功し,連合国軍に勝機をもたらしたイギリスの数学者アラン・チューリングの人生を描いたドラマ.
映画.com

イギリスの数学者,暗号学者,そして世界最初の(なおかつ世界最高の)計算機科学者であったアラン・チューリングの人生を描いた映画です.計算機科学における彼の最大の業績は「チューリングマシン」ですが,第二次世界大戦中に敵国ドイツのエニグマ暗号を解読したことで最も広く知られています.

暗号解読は最高レベルの軍事機密であったため,同時代に彼の業績が知られることはありませんでした.また,当時イギリスでは違法であった同性愛者であることが警察に知られ「重大なわいせつ行為」を理由に告発されています.彼は投獄か「薬物治療」付きの保護観察処分のどちらかを選べと告げられ,保護観察を選びます.このとき使われた薬物は「ジエチルスチルベストロール」という合成女性ホルモンで,投与は1年に渡って続けられました.その結果,彼の身体は女性化が進んだようです.

2年後,チューリングは41歳で亡くなっています.自殺とも,事故とも言われています.

彼の名を冠した「チューリング賞」は「計算機科学のノーベル賞」とも呼ばれています.2019年のチューリング賞は,エド・キャットマル博士に送られています.キャットマル博士はコンピュータグラフィックス技術の天才で,優れたアーティストで,経営者でもありました.スティーブ・ジョブズとともにピクサー・アニメーション・スタジオを立ち上げたことでも知られています.

おすすめ書籍

本書はチューリングの理論をもとに,コンピュータの原理やしくみから人工知能までを,わかりやすくていねいに解説しています.チューリングは現在のコンピュータサイエンスの基礎となる理論を作り上げた,とても重要な人物です.また『知性を持つ機械』という論文やチューリングテストを考案するなど,人工知能の父とも呼ばれています.本書はこのチューリングの重要な理論を,できるだけわかりやすく楽しんで理解できるように,難しい専門用語を避け,ふんだんなイラストを用いて説明しています.コンピュータサイエンスの入門書として最適です.
Amazon

本書のKindle版は第1章のほぼ終わりまで無料で読むことが出来るのですが,この無料部分だけでもお金を払いたくなるほど,内容がしっかりした本です.チューリングももちろん冒頭から登場します.

著者の阿部彩芽さんはイラストのお仕事をされているのですが,共著者に名前を連ねている笠井琢美先生は「ガチ」の計算機科学者で,かつ阿部さんのお父様でもいらっしゃるのですね.なので,専門家が陥りがちな「一般人に全く通じない説明」が無く,かと言って非専門家ライターがやりがちな「分かっていないことを分かっている風に書く」ことも全く無くて,大変参考になる本でした.

普段エクセルを使ってらっしゃる方ならば,第4章までは読み進められると思います.その先はかなり高度になっていくのですが,第4章,ひょっとしたら第3章まででも本書を購入する価値はあるように思いました.

情報科学系の大学生ならぜひ最後まで読み通してくださいね.

Q&A

匿名質問サイト「マシュマロ」で質問を受け付けています.普段はツイッターでお返事を書いていますが「ニュースレター読んでます」と入れていただければ,こちらのニュースレターでより長めの回答を書かせていただきます.

今週取り上げる質問はこちらです.

スマートフォンなどはどのように除菌していますか?

すごい直球な質問をありがとうございます.

僕はiPhoneを消毒用エタノール(エタノール水溶液)を使って拭いています.電子機器なので無水エタノールを使いたいところなのですが,iPhoneはじめ最近のスマートフォンは防水のものが多いので,まず大丈夫でしょう.(無水エタノールは消毒薬としての効果が薄いため,水で70%程度まで希釈する必要があります.)イソプロパノールが添加された消毒用エタノールは酒税がかからないためよりお安く買えるようですね.

学生時代,間違って実験機器をメタノールで洗浄して滅茶苦茶怒られたことがあります.メタノールは燃料用として安く売られていますが,人体に毒性があるため,消毒に使ってはいけません.

こちらの匿名質問サイトで質問を受け付けています.質問をお待ちしております.

前号の振り返り

今週も「振り返り」ポッドキャストを続けてみました.今週は【第8号】の振り返りをお届けしました.

それぞれポッドキャストプレイヤーでサブスクライブ(チャンネル登録)していただくと,自動的に最新エピソードが届きます.

Clubhouseも相変わらず続けています.アカウントは @kanayafrica です.よろしければフォローしてみてください.

あとがき

本ニュースレターを執筆中に,怪しげなニュースが流れてきました.大幸薬品が自社製品「クレベリン」12万個を全国の医療機関に無償提供するそうです.クレベリンは「二酸化塩素」を主成分とする,ウイルス除去・除菌をうたう商品ですが,法律上は医薬品ではなく「雑貨」です.

二酸化塩素によるウイルス除去効果は限定的であるという報告があり,また人体への毒性もあるため,世界保健機構(WHO),米国疾病予防管理センターとも居住空間での噴霧を「非推奨」としています.また日本の消費者庁は,クレベリンの広告表記(「ウイルス・菌を除去」など)に関して景品表示法に基づく措置命令を出しています.

大幸薬品は,病院を始めとする医療機関にクレベリンを無償提供することで「採用実績」を稼ぐ意図があるのかもしれません.医療機関も「送り返すのは面倒」「ひょっとしたら効果があるかもしれない」「置いておくと訪問者が安心する」といった理由でつい設置してしまうかもしれません.

大切なのは,いつも科学的態度で物事を見ることです.それは,公平な態度で観察し,確からしい知識を出発点として,合理的に推測することです.本ニュースレターの読者の皆さんはきっと科学に関心をお持ちと思いますので,企業広告も「本当に科学的なのかな?」と時々疑ってみてくださいね.

では,また来週お目にかかりましょう.

参考文献

***

ニュースレター「STEAM NEWS by Ichi」

発行者:いち(金谷一朗)

TEDxSaikaiファウンダー・パイナップルコンピュータ代表・長崎大学情報データ科学部教授

Photo by Kaur Kristjan on Unsplash

「STEAM NEWS」をメールで読みませんか?

無料で「STEAM NEWS」をメールでお届けします。
コンテンツを見逃さず、購読者限定記事も受け取れます。
数学と詩【第148号】
読者限定
★ 刑事事件とエジプト考古学のノート【第147号別冊】
サポートメンバー
刑事事件とエジプト考古学【第147号】
読者限定
★ 仕事を片付けろのノート【第146号別冊】
サポートメンバー
★【再送】仕事を片付けろ:Getting Things Done【第1...
サポートメンバー
仕事を片付けろ:Getting Things Done【第146号】
誰でも
★ 「構造」という考え方のノート【第145号別冊】
サポートメンバー
「構造」という考え方【第145号】
読者限定