見出し画像

なぜソフトウェアの保守メンテナンスは大変なのか

こんにちは、K研究員です。
ソフトウェアのメンテナンスって難しいよなということで、最近悩んでいるのですがそのことについて言語化してみます。

なぜソフトウェアはメンテナンスが必要なのか

よく「何もしていないけど動かなくなった」という話がありますが、ソフトウェアは何もしていないと動かなくなります。それはソフトウェアが中で使用しているライブラリや、ソフトウェアを動かしているミドルウェア、オペレーティングシステム、ハードウェアなどの外部環境が変わっていくからです。
もちろんOSやライブラリを変えないこともできますが、変えないと変えないでセキュリティーホールが発見されたりしても対策できません。

また、ソフトウェアは機能追加や改善をし続けることもよく行われています。特に業務システムであれば法律の変化や企業の変化によって使えなくなって改善が必要だったりもします。2000年問題という言葉もありましたが、昔は想定していなかった不具合が起こることもあります。

メンテナンスを引き受けることでサービスとして進化したソフトウェア

かつて、ソフトウェアも買ったら終わりでした。例えばファミコンやゲームボーイのソフトは一度買ったらもうアップデートされることはありませんでした。もちろんニューファミコンが出たときなど外部環境の変化時に動かなくて一部プログラムを修正したというようなことはあったと思います。私もMSDOS時代のモグラたたきソフトをWINDOWS時代のPCでやってみたらCPUが強すぎるのか動きが速すぎて全然たたけないということがありましたが。
昔は一度作ったソフトウェアはそのハードの上でしか動かないし、買ったら最後アップデートされませんでした。
しかし、ソフトウェアが仕事で使われだすと、前述のとおりアップデートしないと仕事ができなくなってしまうことが起こるので、アップデートする仕組みが作られました。それも全部のパソコンをアップデートして回るのは大変だったので自社のサーバーにプログラムを置いて集中管理する方式になっていきました。今でいうオンプレミスです。オンプレミスの時代は長く続きました。社外にデータを出すのは危険という認識だったからです。しかし、社内のデータを守るためのセキュリティ体制にもお金がかかり、ウイルス対策ソフトを入れたりしないといけないですし、前述のとおりメンテナンスコストも高くなってきたので、2010年ぐらいから堰を切ったようにクラウドの時代が訪れたのです。クラウドはメンテナンスを引き受ける代わりに使い続ける限り収益を上げることができ、ソフトウェア会社から見ると願ってもないモデルでした。

クラウドによる自動処理(AI)の発展

クラウドになって一つ大きく変わったのはAI、機械学習といった自動処理の分野です。これまで、機械学習などを行うには大量のデータが必要で1社では集めるのが難しかったことと、集めて自動化したとしても、自動化プログラムもソフトウェアのため、やはりメンテナンスが必要であり、費用対効果がでないという問題がありました。
クラウド化することで、クラウドサービスの会社はAIのデータとしてユーザー複数人のデータを学習や評価に使うことが可能となり、またメンテナンスが難しかったGPGPU(グラフィックを処理するためのハードウェアを一般的な計算に用いる技術)などを集中管理できるようにすることでペイする価格で高性能な自動化のための処理を提供することができるようになったのです。

メンテナンスを引き受けることで高度化したがやっぱりメンテナンスはつらいという意識は変わらなかった

世の中には慣性の法則があり、動き続けているものはずっと動き続け、止まっているものは止まり続けます。例えば新幹線は今日も走っていますし、明日も走り続けるでしょう。でもそこには大変な努力があることは想像に難くありません。動いているものを動かし続けるのも大変なのです。
とはいえ、動いていないものを動かすのはもっと大変なのは事実であり、自分がJRの幹部だったら動いていないリニアのほうをどうするかに頭を使い、動いている新幹線を今日も明日も視察に行くことはないでしょう。
偉い人はまだ動いていない新ビジネス、新プロジェクト、新機能により注意が行くので部下も評価されるためには新プロジェクトや新機能の提案をしたくなるのは道理というものです。それでなくてもできれば新しいことをしてみたい、そして注目してほしいというのは人間の性でしょう。
かくして、社内でもどちらかというと動いているものより動いていないものへ偉い人もそうでない人もみんなが新しいことをやりたい、やらせたいというバイアスが生まれ、そうでないことは議論になかなか上ってきません。ソフトウェアのメンテナンスもその手のものです。

育てての親であるメンテナンスビジネスを忘れてしまったAI

AIの発展の裏にはメンテナンスを抱え込んだビジネスモデルがあることは前述しましたが、人の記憶は長くは続きません。特に今新卒でAIエンジニアになった人はそもそも歴史は知らないので、AIという光の部分に目が行ってしまい表裏一体である影(メンテナンス)をやりたくないものであるという認識が生まれました。
しかし、不思議なもので、機械学習をいい感じに製品として運用していくための方法論(もちろんそれだけではないが)であるMLOpsなどの考え方も生まれてきました。先述のように人は常に新しい概念を求め、新しい概念は経営者に伝えやすいので新しく概念化していくことは一つよい戦略でしょう。ただし、機械学習をメンテナンスしていくことと機械学習+MLOpsはかならずしも同じことではありません。MLOpsは世の中で人気の機械学習のいろいろな課題を自動化などのテクノロジーで運用しやすくする効果がありますが、その自動化もソフトウェアであるため多重構造のメンテナンスが必要です。またどんな機械学習に対応できるというものでもありません。今後の発展に期待したいところです。

新幹線の運用がソフトウェアと異なるのはそれが世の中からかっこいいものと見られているところです。運転士などの肩書、制服などの色々な要素で自らかっこよくなろうと努力しているのです。ソフトウェア業界も負けてられません。

本質的な問題であるメンテナンスと向き合う

メンテナンスはAIを行う上で必要不可欠なことですが、それをやりたい人もやらせたい人も社内にあまりいないというジレンマがあります。ソフトウェアに限ったことではないかもしれません。寿司屋の仕込みは誰が行うべきでしょうか。野球部の球拾いは誰がやるべきでしょうか。かつては寿司職人になるには弟子入りして仕込みや接客をやり、いつかは寿司の握り方を教えてもらって独立するという流れでしたが今やホリエモンの言うようにそのような方法ではうまくいかなくなってきています。とはいえ誰かがやらなければいけないのも事実です。そこには明確な解はありませんが、これまでは社会全体で解決してきました。寿司のつまを巨匠が作らなくても業務用のつまでいいというようにです。
今のところAIソフトウェアのメンテナンスだけを引き受けるようなサービスはまだ一般的ではありませんが、そのうち一般的になるかもしれません。しかしそれですべてが解決するわけではありません。一部の業務はいつまでも残るでしょう。それはソフトウェアのメンテナンスが突発的なものが多いからです。脆弱性もウイルスも改善要望も急に来るので、定常業務としての性格を帯びていないためです。

その作業を自分で責任をもって続ける、より人件費の安い人に委託していくなどが必要ですし、それがかなわなくなったとすれば寿命が来たということなのでしょう。

銀の弾丸はないが


私が好きな言葉に「銀の弾丸はないが、金銀パールプレゼントの弾丸はある」という言葉があります。つまり狼男を倒すような銀の弾丸一つで解決しないことでもいろいろな種類の弾丸を取り揃えれば、全部の問題は解決しないまでも何とか折り合いをつけていけるということです。
この言葉は私が適当に作りましたが、(そもそも金銀パールプレゼントという言葉がどこまで通じるのかわからないですが)、結局AIを考えていく上では、責任感だけでもMLOpsだけでも、外部委託だけでもなくいろいろな方法を模索していくほかにないでしょう。闇を背負うことが光を作り出したものの宿命なのかもしれません。


無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。