2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
まつもとゆきひろ氏(以下、まつもと):遠い未来について考えてみた時に、25年先って本当にわかんない。私もおじいさんになってるか死んでるか、どっちかしてるんで、よくわかんないんですけれども。
開発効率と保守性の向上が求められる点と、それから、大規模分散環境についての要求がもっと高まること、非均質計算環境というものがもっと広がる、って思っています。これについて考えていかなくちゃいけないな、と思ってます。現時点で私が予想できるのは、これが精一杯なんです。
開発効率と保守性の向上という意味では、Javaとか使っていらっしゃる方は、今でもIDEという統合開発環境をお使いになって、そういう開発環境の支援で開発してる方が非常にたくさんいらっしゃると思います。名前のスペルミスとか、この式に対してどんなメソッドが呼べるかみたいなことについては、コンピュータに教えてもらいながら開発してるという人が多いと思いますね。
ただ、Rubyはそういう静的な情報が少ないので、RubyのIDEがあっても、そういう情報を提供するのはなかなか難しいというのが正直なところだと思います。Rubyの静的解析ツールにはRubyならではの難しさがあるので、今までにはないような新しい、動的型言語に対して情報を集める技術が開発される必要があります。
今でもあるのは、例えばRubocopみたいな静的解析をしてスタイルガイドをするようなソフトです。それから、他の言語ですけれども、Success basedというアルゴリズムによって、静的な型推論を行うようなDialyzerというソフトもあります。さっきのJetBrainsのプログラムのように、実行時の情報を集めて、それを型情報として活用する、プロファイル型の解析みたいなものも登場してきています。
こういうものや、これから開発する新しい技術も含めて、未来のソフトウェアの開発は、もっとインタラクティブになっていくんじゃないかな、と思います。ですから、私たちがタイプミスをすると、なんか吹き出しがあって、「もしかしてこれではありませんか?」みたいなことを、もっと積極的に言われるんじゃないかなと思います。
あるいは、開発環境に対して、ペア・プログラミングAIみたいなものがあるんじゃないかな、と思ってます。テディベア・プログラミングというものがあって、ソフトウェアを開発する時に、隣にテディベアを置いておくんです。すると、もちろんテディベアはしゃべらないし、助けてくれないんですけれども、なぜか生産効率が上がるという都市伝説じゃないんですけどあって。実際、効果があるんですね。みなさんもぜひ、今度ソフトウェア開発をする時に、隣にテディベアを置いていただけるといいんじゃないかな、と思うんです。
何かというと、「このコード、これでいいと思う?」とか、テディベアと相談するんです。もちろんテディベアは返事をしてくれないんですけれども。ただ、発話して、会話のようなものをする時に、問題がわかるんですって。「あー、やっぱダメだったね。直そう、直そう」みたいな。たとえ返事をしてくれなくても、そういう対話というのは、実に人間の思考を支援してくれるツールなんですね。
そういえば、ちょうど25年前ですけれども、Rubyをつくっている時に、私の一番上の子どもが、生後半年ぐらいでした。すごく夜に寝ない子だったので、ソフトウェア開発で家に帰ってきて、夜中の12時とか1時とかに、子どもを寝かしつけるために、「寝ないなあ」とか言いながら抱っこしてたんです。その時に、「今度デザインするRubyのこの機能なんだけど、どうしたらいいと思う?」(笑)。
(会場笑)
そうすると、いいアイデアが浮かぶんですよね。Rubyのすばらしい機能としてたくさんの方にほめていただいたブロック機能なんですけれども、あのブロックがあの文法になったのは、子どもと相談しながら開発した時に誕生したんです。
たぶん未来は、もうちょっとテディベアが賢くなって、いろいろなリアクションも取ってくれるようになるんじゃないかと思います。さらに言うと、未来のコンパイラはテディベアが付いてくるんじゃないかな、と思うんです。
(会場笑)
25年後にはそういうかわいらしいコンパイラ、あるいは、開発環境が、Rubyにとっても一般的になっていくんじゃないかな、と思ってます。
さらに、世の中、だんだん分散になってきてるわけですけれども、コンピュータというものはムーアの法則によって、どんどん性能が向上してきました。過去50年ぐらいの間、コンピュータを構成してるLSIの集積度、つまり、1つのチップの上にのってるトランジスタの数は、2年間で2倍というペースで増加してきました。
そうすると2年で2倍、4年で4倍、6年で8倍、8年で16倍というふうに倍々ゲームで増えていくわけなんですけれども、現実世界で、こんな指数関数的に増加するものって、あんまり見かけないですよね。
そうやって、どんどん性能が向上してきて、私が子どもの頃のコンピュータに比べて、今のコンピュータは性能やメモリ容量においても数百万倍とか増加してるわけなんです。
ただ、やっぱり物理的な限界があるので、いつまでも指数関数的増加というのは難しくなる。そう言われてみれば、最近、パソコンのクロックという点では、あんまり伸びなくなってきてますね。一般向けのコンピュータのクロックは、だいたい2ギガちょっと超えたぐらいで頭打ちです。
Pentium 4の頃は4ギガのものもありましたけれども、Core i9でも、3.何ギガとか4ギガいくものが、オーバークロックしたらいくかなぐらいのレベルです。もちろんPentium 4の4ギガよりもCore i7の2.5ギガのほうがたぶん速いですけれども。そうは言っても、1コアにおける性能の限界は、昔みたいな倍々ゲームで伸びるみたいなことが、もうなくなってきています。
そうするとCPUメーカーの人たちはどうしてるかというと、1つのチップの上にコアをたくさん積むことによって、同じ性能のチップを1つの代わりに2つ積んだら理論値は2倍、4つ積んだら理論値は4倍ということになるので、そうやって増えたトランジスタをコアの数に振り向けて、理論上の性能を向上させようというふうになってきて、マルチコアを活用しようみたいなことが増えてきました。
さらに、コンピュータそのものの値段が安くなったので、1台のコンピュータにマルチコアを積むだけではなくて、システム全体を複数のコンピュータで構築することによって、性能を向上しようみたいな流れも出てきました。
1つのマルチノードでも1つのデータセンターだけだと、例えば「そのデータセンターのルータが落ちました、全部サービスが止まりました」というのは恐ろしいので、複数のデータセンターに分割してフォールトトレラントを実現しようみたいなことも。本当にやってる人はほとんどいないですけれども、でも今後、スケーラビリティが話題になってくるにつながって、そういう選択肢も現実的になってくるかもしれません。
その時に気になるのが、コンカレンシーという概念ですね。言い方を変えると分散処理。1つのコンピュータだけではなくて、複数のコア、複数のコンピュータ、複数のデータセンターにバラまかれた処理が、全体として1つのシステムを構築します。そして、その構築した複数のソフトウェアからなるシステムが、協調しながら1つの処理を行うことが求められる。そういうことを実現するようなスケーラブルなアーキテクチャが求められています。
現在のWorld Wide Webって、すごくプリミティブなわりにはけっこういい線いってて、いいんですけれども、万能ではないわけですよね。25年先のコンピュータアーキテクチャを考えた時に、量子コンピューティングみたいな、現在からいくとまるで予想できないようなアーキテクチャはまったく無視して、現在のアーキテクチャの延長線上に25年後のコンピュータがあるとすると、今、「なんとかas a Service」みたいに言われてるものの近く、その中でも、とくにFunction as a Serviceと言われてるものが、現代では一番近いものではないかなと、私は予想します。もちろん、外れる可能性のほうが高いんですけれども。
Function as a Serviceは、Amazon Lambdaみたいなものをイメージすればいいんじゃないかな、と思います。
そういう未来が来た時に、今のGuildではないと思いますけれども、Guildのその先のものが、大規模分散の、マルチノードやマルチデータセンターからなるシステムを管理する。あたかも1つのコンピュータであるかのように管理するというプログラムを書くことができて、そのプログラムのロジックをRubyで書けると、いい未来なんじゃないかなと思ってます。
非均質な計算環境というものですけれども、我々はコンピュータを考える時に、同じコンピュータが複数並んでるシステムを考えるわけです。マルチコアでも、同じCPUが4つあるいは8つあると考えがちなのです。
例えばARMのBigLITTLEというアーキテクチャは、「8コアあります、そのうちのコア4つは、高性能なコアです、残りの4つは、性能は低いけれども電力消費の少ないコアです」と。ARMはモバイルに使われることが多いので、携帯電話とかだと、無限に電気を消費されても困るわけですよね。
そこで、あまり忙しくない時には、性能は低いけれど消費電力の少ないコアで動いて、忙しくなってきたら大きなコアに仕事を移して、そっちで実行する。つまり、同じコンピュータではなく、複数の種類のコンピュータが混ざってて、それが役割ごとに分担しながら働くみたいなことが非均質計算環境です。ヘテロジニアスですね。
GPGPUもそんな感じですよね。General-Purpose GPU。もともとグラフィックスやCGのレンダリングとかに使われてるGPUを、汎用目的に使おうという試みですね。ですから、機械学習とかデータサイエンスの領域で、GPUを計算に使うということは、だいぶ前からけっこう流行ってるわけです。
だから、1つのコンピュータで、コアは難しいロジックを実行しますが、単純なロジックについては「GPUとかにオフロードして、そっちで計算させます」みたいなことが起きています。これもまた、複数のコンピュータから構成された1つのシステムが協調されながら動く、という基本は変わらないわけですね。
あるいは、FPGAみたいなものもありますね。Field-Programmable Gate Arrayです。プログラム可能なハードウェアですよね。こういうものを使って、難しいロジックの部分をハードウェアで実装してオフロードするみたいなことです。これもまた、均質ではない複数の計算環境によって構成されるシステムが、協調して1つのシステムとして動く。
この時に重要になってくるのが、それをどういうふうにして抽象化するかということです。実際、私は、現時点で答えがでてないんですけれども。ただ、大規模分散みたいなものを簡単なRubyコードで書くことによって、ものすごく大きなことがシンプルに、安全にできるという未来がきてほしいなと思います。
そのためには、開発しなければならないRubyのコアやライブラリの部分とかは、たくさんあると思いますし、これこそが未来ではないのかなと思います。また、それが、ただ単にシンプルなだけではなくて、楽しくできると、Rubyをつくった甲斐があったんじゃないかな、と思います。
関連タグ:
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