お風呂にパソコンを持ち込んでプログラミングしている

増井雄一郎氏(以下、増井):私は「masuidrive」という名前で活動しておりまして、それで検索すると結構いろんなものが出ます。仕事ではこうやってプログラムを書いているんですが、基本的に僕は自分の時間もほとんど趣味のプログラミングをしていて、僕の写真を撮るとほぼ100%パソコンが手元に写る。それ以外の時間はほとんど何もしてないという状態になってます。

あまりにプログラムが好きなんですが、実は僕、お風呂も好きなんですよ。長風呂で、1回2時間くらいは入るんですね。2時間お風呂に入る時間がもったいないので初めは本を読んでたんですけど、本を読むのもなんだしなと思って途中でニンテンドーDSをやり出して、「DS持ち込んで壊れないんだったらノートパソコン持ち込んでも壊れないだろ」と思ってお風呂にパソコンを持ち込むようになりました。

そろそろ暑いんであんまりやらなくなってますけど、週2〜3回は1回2時間くらいはお風呂で仕事をしてます。趣味の欄にはだいたい「風呂でプログラミング」と書いてます。

あとはFacebookの友達の人は知ってると思うんですけど、それ以外にはクラブで踊るのも好きなので、夜中にクラブに踊りにいったりしています。こういった変なことをいろいろしながら、年30回とか40回とか技術者向けの講演をやっています。

僕の前職……前々職かな? 「エバンジェリスト」という形で、アメリカのある製品を日本に伝える売らないセールス、プリセールスのような仕事をしていました。技術者向けに「こんな良いソフトありますよ」と紹介する仕事をしていたので、技術者とは言いながらセールスとかマーケティングに近い部門にいたこともあります。

この仕事のおかげで人前に出て話す機会が多くなり、退職したあとも個人的にAWS Summit Tokyo 2015で女優の人と一緒にイベントをやったりだとか、アイドルと一緒に「アイドルにコンピュータ会社のことを知ってもらう」というITの連載をしています。それで最近では「IT芸人」で検索すると1番目に出てくるようになりました。

(会場笑)

プログラミングについてざっくりと理解してもらいたい

すっかりブランディングができてしまいまして。最近では、僕のことを検索していただけるときには「IT芸人」と入れれば細かいことが出るので、ここから僕を(調べてください)という話をしています。

さて、今日の話なんですけど、「プログラムはどうやって動いているのか」といっても、それを30分とか1時間で理解してもらうというのは無理なので、「なんとなく」「雰囲気として」「ざっくり」こういうもんなんですよ、ということを理解してもらう。これを目的にしています。

エンジニアはいつもそこに座ってたり、あの辺に立ってたりとか、ソファに座ってたりとかして、普段何をしてるかわからない。そのいった部分をなんとなくわかってもらうというのを、今日のゴールにします。

「アプリ」は大きく2つに分けられる

今日の扱う内容は、だいたいこんな感じですね。皆さん「アプリ」だったら知っていると思うんですが、「JavaScript」という単語をなんとなく聞いたことがあるという方……さすがに結構ありますね。「クラウド」は……さすがにクラウドを聞いたことないというのはヤバいんですけど。「API」が何か少しはわかるという人……おっ、結構いますね。

こういったコンピュータの用語について今日は説明していくんですが、先ほど言ったように、アプリケーションはたくさんあります。ゲームもあればツールもあって、例えば電子レンジを動かしてるのもプログラムだったりします。そういったたくさんのプログラムがある中、今回はiPadのアプリケーションに絞っています。

これは僕のiPadのスクリーンショットです。こうやって見ると、僕はあんまりゲームをやらないので、それ以外のものがたくさんあります。カレンダーとか時計とかマップとかですね。Kindleで本を読んだり、皆さんもFacebookとかLINEは入っていると思います。

こういったアプリケーションは、実は大きく2つに分けられます。ひとつは「スタンドアローン」と言われる、ネットに繋がらないもの。例えばこのiPadをネットに繋がなくても使えるアプリケーション。あと「オンライン」と言われる、ネットに繋がってないと(使えないもの)。例えば、Facebookのアプリケーションをネットに繋がないで起動しても、何も見えないですからね。

(スタンドアローンである)時計なんかは、ネットに繋がっていても繋がってなくても両方とも時間を同じように見ることができる。カレンダーはちょうどその間になっていて、ネットに繋がっているときに自分のカレンダーが来るので、ネットが切れていても自分のものは見れます。だけどネットに繋がると、他のパソコンとかと連動するようになります。

こういった、オンラインとオフラインの2つのアプリケーションがあります。今回はとくにオンラインと言われる、Facebookとか……トレタも同じです。トレタのサーバーがあって、トレタのアプリケーションがあって繋げて(使用する)。ネットが使えないと使えない。こういったアプリケーションについて今回は説明します。

「アプリは黒魔術。小人さんが動いてくれる」

「アプリ」ってどういうものを指すのか、昔だったら広辞苑で引くんですが、今だとWikipediaなので「アプリケーション」を検索してみました。そうするとこんな記述が出ます。

「アプリケーションソフトウェア……アプリケーションはコンピュータの利用者が実行したり作業を実施するための機能だ」と書いてあります。これは長いのでまとめると、アプリというのは「誰かが実際に使うもの」、みんなが直接触るもののことをアプリケーションといいます。

ソフトウェアというのはいろんなものがあって、先ほど言ったように電子レンジもあれば、実は車を制御してるものもありますし、それ以外にもドライバ、プリンタで印刷してる中身の部分とか、人間が直接触らないものもあります。そういったソフトウェアがあるんですが、実際にユーザーが触れる部分のものをアプリといいます。このアプリケーションは実際にどうやって作られるのかというのを、今日は説明します。

いろいろ考えてみたんですが、なかなかうまく説明できなくて、Facebookでみんなに……(友達が)ほとんどプログラマーの人なので「どういうふうに説明すればいいと思いますか?」と聞きました。ある人は「黒魔術。小人さんが動いてくれる」と言って、みんな「それでいいんじゃない?」って話になっていたんですが、そんなわけはなくて。

コンピューターが理解できるのは数字の羅列

実際には、プログラムという形でこういった「ソースコード」というのを書いて、それを使ってアプリケーションを作っています。トレタは、サーバーと言われている後ろ側で動いているものと、皆さんのiPadにインストールしているトレタアプリとの2つに大きく分けられます。

その2つに分けると、プログラムはこの画面だけで20行くらいあるんですが、全体では、サーバー側は5万行あります。iOS側は8万行という、かなり膨大な量です。この約2年間で作ったものですね。

僕らは実際にこういうプログラムを毎日ガリガリ書いて、それをコンピュータに理解……プログラムっていうのは、コンピュータは直接は理解できないんですね。コンピュータが理解できる形は、映画とかで見たことがあるかもしれませんがこういった数字の羅列で。これに変換して、コンピュータはそれを読んで実行します。

先ほど言ったように僕らはコンピュータのことを「小人さん」という言い方をよくするんですけど、コンピュータの中に小人が入っていると考えると結構ラクです。小人が理解できる言葉はこれ(数字の羅列)しかないんですが、僕らがこれを理解するのはあまりにも難しい。

ある程度はなんとかわかるんですけどさすがに難しいので、人間がわかりやすい言葉である「プログラミング言語」を書いて、それに翻訳します。

プログラムを書くには数学より国語が大事

こういうふうなプログラムを見て僕らがよく勘違いされるのは、「英語が得意なんじゃないか」「数学が得意なんじゃないか」ということです。実際に画面に書いているのはアルファベットだけですし、いろいろ計算している(ように見える)じゃないかということで、皆さんはコンピュータのプログラマーを理系だと思っていると思うんですが……ウチの会社のエンジニアの中で、理系の大学出てない人? ……はい。半分は理系の大学を出てないんですね。

ということで、別に数学とか英語とかできなくても全然いいんです。プログラムを書くのは。実際、小学生とかでもアプリは作ってますし。

で、プログラムはどうやって書かれていて、何が書かれているのかというと、実は僕は数学というよりも「国語」に近いと思っています。「プログラムを書くのに、数学とか英語の勉強は要りますか?」というのをよく聞かれるんですけど、そうじゃなくて実は国語の勉強のほうが、僕は大事だと思うんです。

なぜかというと、コンピュータの中には小人さんが入っていますね。この小人さんはすごく実直なんですけど、すごくアホなんですよ。言ったことを必ず言ったとおりにしかやらない。この人に何かやらせたい場合には、「水を取ってきて」というのは無理なので、「3歩進んだところで手を下ろして、手を5cm前に出したあと指に当たるまで手のひらを閉じて、当たったのを確認したら一回持ち上げた上で……」という言い方をしなきゃならないんです。

なにげなくやってることを文章化する能力が求められる

この説明をするのがプログラムなんです。なので、プログラムはどちらかというと数学で数式を書くというよりは、小人さんへの指示書を書くことで、それをプログラミング言語という特殊な書き方でやります。本当にすごく難しいプログラム、例えば音声認識や文字認識を作りたいというときには、どうしても数学は要ります。僕らはそういったものを作ることがないので、ほぼ国語能力のほうが大事になります。

「水を取って」を分解するには、その前に「自分が手をどう動かすか」をきちんと認知している必要があります。自分がなにげなくやっていることを文章化できる能力がすごく大事なんですね。

トレタのアプリケーションも、もちろん全部プログラムで動いています。「お日にち」というのを押すと、吹き出しが出ます。「お時間」を押すとドラムロール、スクロールするものが出てきて0時から24時まで選ぶことができます。「特定のものを選んで入力が終わるまで、ここの赤い文字(入力未完了の注意)を出しておきなさい」とか、「左側のホーム(ボタン)を押すと必ずトップに戻ります」とか、「途中で電源を落としたらどうなりますよ」とか、すごくこと細かく説明書を書いてるんですね、僕らは。

トレタのアプリケーションに対して、「ここを押したらこうなります」「こういうデータがあったら赤で表示します、青で表示します」という指示書を山ほど書くと、8万行になるんですね。だから、マニュアルをきちんと書ける人というのは、プログラムを書く才能がすごくあると思います。

「ちょっとここの色を変えてほしい」が難しい理由

そのときにはイレギュラーケースもあって、「このときにいきなりホームを連打したら」とか「押せないボタンを押したら」とか、そういったケースについてもすべて書く必要があります。実際、(指示の)一発目を書くというのは人間何度かできるんですね。でもすごく難しいのは、この指示書を破綻なく変更してくださいと言われること。

先ほどの画面の中で「お時間」の下にもう1項目追加したい、例えば「コースの選択肢」を入れてくださいとなったら、そういう指示書を書きます。でも、ここに入れたら最後の確認画面にも必ず「コース」を出さなきゃいけないとか。実は、ここで変更したものがあっちこっちに影響をおよぼすことになるんですね。「ここでコースを入力できるならあそこでもできるはずだよ」とか。それがちぐはぐになってしまうと、プログラムが動かなくなってしまう。

よくあるんですが、「ちょっとここの項目を変えてほしい」。でも、その「ちょっと」は全画面にあるので、全画面のマニュアルを書き換えなきゃならないとか。ユーザーとしてはちょっとの変更でも、実は指示書の中では色々な所に書いてある事だったりするので、そういった部分を破綻なくどんどん付け加えていくのは、プログラムを書く上ですごく難しいということがあります。

それは、どんどん(指示の量が)大きくなっていくと、どこから読んでも必ず動くマニュアル、誰が読んでも動くマニュアルを破綻なく作るというのはすごく難しいからです。本質的な問題があります。優れたプログラマというのは読みやすいマニュアルを破綻なく書くことができる人だと思います。

たくさんのプログラミング言語、できることはみな一緒

ちなみに、この中で「Ruby」という言語をご存知の方。……さすがウチの会社、知っているみたいですね。サーバーサイドはRubyという言語で書いています。iOSは「Objective-C」という言語で、今回ウチは「Java」を使っていませんけど、トレタマネージャーは「JavaScript」という言語で作っています。

皆さん、いろんな言語があるということは聞いたことがあるんです。じゃあ、それぞれで何が違うのか。できることは最終的には一緒です。日本語でも英語でも伝え方は違うけど、人間が生活する上でのすべてのことを伝えられるというのと同じように、最終的には一緒です。