2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
まつもとゆきひろ氏:それでは始めましょう。まつもとゆきひろと申します。よろしくお願いします。
(スライドを示して)こんなアイコンで、Twitterではつぶやいている人なのですが、だいぶ前に作ったので今よりもちょっと若い感じの似顔絵になっています。
今回のEngineer Festaの客層だとあまり自己紹介は要らないような気がしますが、まつもとゆきひろを名乗っていて、英語圏ではMatzと名乗っています。Rubyを作った人で、たぶん日本では一番有名なプログラマーなんじゃないかなぁと思います。今日は「Rubyを通して見たこの30年の変化」というタイトルで話します。
Rubyを作り始めたのは1993年なのですね。作り始める時に、まず先輩にチャットで相談しました。「こんなの作ろうと思ってるんですけど」みたいな記録が残っているんですけど、それが1993年の2月24日だそうです。先輩がよく記録してくれる人だったので、教えてくれました。
それから考えると2023年の2月で、Rubyを作り始めてから30年です。そうするとですね、今日の客層の中では生まれていない人もいるぐらい昔なわけですよね。
年寄りが昔話をするとだいぶ老害っぽい感じがするんですが、変化したことについて話せればと思っています。来年(2023年)で30年ですが、この30年間を俯瞰しながら変化について語れるといいなぁと考えています。
1993年というとバブル崩壊直後なのですね。だいたい1991年とか1992年とかぐらいに、景気がドンドン悪くなっていった感じがします。
その頃私は、いわゆるソフトウェアハウスというんですかね、システム開発会社にいました。その会社は受託開発をしていたのですが、私が配属されたチームは、社内で働くエンジニアの生産性を高めるためのツールを作っていました。
比較的自由に開発できてすごく良い環境だったのですが、景気が悪くなると、社内で使うためのツールは売上が立たないから、外貨を稼いでこないんですね。そうすると、経営陣も危機感を持って、「こんなに景気が悪くなってきて全体の売上が下がっているのに、この売上が立たないツールの開発にそんなに人を割り当てるわけにはいかない」という話になって、「残念ながらあなた方のチームは解散です」と言われました。「ああそうですか」という感じですけど。
そういう悲しい過去があったのですが、逆にいうと、そのチームの解散がRubyの開発のきっかけになりました。
(スライドを示して)当時私が使っていたマシンは、ソニーが作っていたエンジニアリングワークステーションでした。社内のシステムを開発していたし、Rubyの最初のコードを書いたのもこのマシンでした。
CPUがモトローラのMC68020でクロックは16MHz、メモリが8MBで、ハードディスクが156MB、OSがUNIX系の「NEWS-OS」です。BSD3.xみたいなやつをソニーがちょっと改造したものらしいです。
これはエンジニアリングワークステーションという一応プロのためのツールなので、1台で200万円以上します。そういうマシンを当時の開発者はツールとして使っていました。
社内同一システムだったので、メモリ容量とハードディスクの容量だけは違ったり、あと時代によって、筐体の大きさが若干変わったりするのですが、基本的に同じCPU、同じOSで同じソフトが動くアーキテクチャでした。
当時としてはまだ珍しく、イーサーネットで全部つながった状態でマルチメディアメール、今でいう添付ファイルが付いたメールシステムや、あるいは設計用の絵を描いたりするツールを一揃い自社で開発していました。
ネットワークに非常に強く依存したツールだったので、なかなか楽しいソフトウェア開発でした。ホモジニアス、均質なソフトウェア環境と言われる全社同一OS・同一CPUだったのですが、ソースコードを見たら、ネットワークを越えたマシンに構造体をバイナリコピーしていました。
大学で勉強していた時に「それはやっちゃいけないことだ」と教わっていたので、先輩に「これ、ちょっと構造体をそのまんまバイナリコピーしています。同じCPU、OS、コンパイラだったら問題ないですけど、違うアーキテクチャが入ってきたら途端に破綻しますよね」と話をしました。当時は入社1年目か2年目ぐらいだったと思います。1年目だったかな。
アラインメントやエンディアンなど、いろいろあるわけです。構造体のメンバー間の隙間が空く大きさが、OSによって違ったりします。それからエンディアンといって、整数をバイナリ表現する時に、下の桁が前に来るのか上の桁が前に来るのか等が違ったりするので「他のアーキテクチャだと、そのままバイナリコピーすると破綻しますよ」と話しました。
そうしたら先輩から「我が社のシステムはホモジニアスな環境であることが最初から想定されていて、それを前提条件にしていいので、想定しなくても大丈夫」と言われました。
「上司がそういう言うんならそうなのですね……」と、そこはそのまま放置していたんですよね。だけど、そんなに経たないうちに、新しいバージョンのNEWSマシンのOSが、BSD系からSystem V系という違う系統に変わっちゃったんですね(笑)。
システムコールもけっこう変わるし、CPUも違っていて、「これどうすんの?」みたいな感じになりました。しかも、その大丈夫と言った上司よりもっと上の取締役あたりから、「ちょっとIBMのマシンもおもしろそうだから試しにつなぎたいんだけど」とか言われました。
今はもうなくなりましたが、「PowerPC」というRISCマシンが入ってきて、それにも対応してくれみたいなこと言われて、「ああー」という感じでした。
モトローラのCPUは、ビックエンディアンというタイプの1個バイナリ表現なのですけれども、System V系とか、PowerPCとか、リトルエンディアンとかが入ってきたので、それを見て「ああー」という感じで、みんな総出で、構造体を直接ネットワークに書き込んでるところはどこだっけ? と探し回って全部つぶすという、非常にひどい目に遭ったことがあります。
私はこのことから、「誰かが大丈夫と言っても信じてはいけない」という教訓を得ました。上司とか、大丈夫と言った人が想像もつかないようなことが未来には起きます。
長期的な予想をすることは困難なので、「未来はこのままでいく」とか「大丈夫」と言われても信じてはいけません。
特に重要なのが、ツールの持続性です。特に便利な商用のツールを採用した時が難しいです。
何が起きるかというと、ソフトウェアの寿命が長い場合にソフトウェアがまだ生きているのに、実際そのソフトウェアを作るのに使った商用ツールが、発売中止、サポート停止、あるいは会社が倒産ということがけっこうあるんですね。
自分の作るシステムは、今回1回だけしか使いませんというならぜんぜん関係ないんですけど、10年20年使われる可能性があると考えると、サードパーティのものを使う時は、「何かあったら自分でメンテできる」ぐらいの心意気がないと困るんですね。
ソフトウェアの寿命は予想外に長いと言えます。IBMの中で使われていたREXXというスクリプト言語があります。その言語を作った人はマイク・カウリシャーさんという人で、IBMのフェローをしていました。
彼は、「自分が20年前にIBMで新人だった頃に書いたソフトウェアのバグについて、ある日レポートがきた」と言うんですね。20年前に書いたプログラムだから何も覚えていないのに、IBMにたくさんいるエンジニアの中の誰かがそれを使い続けていて、「あなたの書いたこんなプログラムがバグっているんですけど」とレポートしてくるんですね。それで、「ああそうですか」みたいなことがあるそうです。
自分は書き切ったつもりだったのに、ちょっとしたプログラムを書いたつもりだったのに、それが20年間動き続けたこともあるそうです。ソフトウェアの寿命は、人が予想するよりも遥かに長いんです。
考えてみたら、Rubyも同じです。1993年に作り始めた時に、まさか30年後もRubyをメンテしているとは思わないじゃないですか。5年ぐらい持てばいいかな、と思って作っていました。それが、30年経って、すごくたくさんの人に使われるようになったというのは、予想外なわけです。
だとすると、ソフトウェアに関する予想、未来に関する予想はだいたい外れます。なので、できるだけ変わらない(変わりにくい)ものを押さえておくのが肝要かなぁと思います。それまで長く生き残ったものは、これからも長く続く可能性がけっこう高いと思います。
それから、オープンソースソフトウェアの場合だと、ソースコードが手に入っているので、何かあった時には最悪自分でメンテできるのがメリットになると思います。
例えば、LinuxやFreeBSDみたいなOS。Linuxで30年、FreeBSDだとCoreから数えると、もう40年ぐらいメンテされているので、明日なくなることを心配しなくてもいいし、ソースコードが全部公開されているので、いざとなったら自分で中を見られる安心感があります。
すごく生産性が高い商用ソフトのほうが、かえって危ないということが言えると思います。商用のサードパーティは、特に欠かせないものでその時に便利なものは(利用しても)ぜんぜん問題ないのですが、5年後や10年後を考えた時、長期的にそれにロックインされるのは、ちょっと危険です。変化しないものを探しましょう、ということです。
(次回へつづく)
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05