サービス化(API化)の本質はソフトウェア開発産業化

インターネット技術においてサービス化はすごい勢いで進んでいます。
IaaS、BaaS、PaaS、SaaS、ウェブサービス、クラウドサービス、マイクロサービスなどなど、毎日目に触れるようになっています。
当たり前の話かもしれないが、本当にその本質を理解するには、あまり簡単なことではありません。

ここでは、自分がサービス化に対する理解と、アマゾンの事例を交えて説明してみようと思います。
抽象的な話なので、分かりづらいと思いますが、すみません。

まず2002年。(当然このことを知ったのは、下記記事が発表されたの2011年10月以降のことです)
Steve Yegge の Google とプラットフォームに関するぶっちゃけ話を訳した(前編)から引用

それである日 Jeff Bezos が指令を出した。まあ彼がいつもやってることなんだけど。その度にみんなはピコピコハンマーで叩かれるありんこみたいに走り回るんだ。でもそのある一度、2002年かそのくらいのことだったと思うけれど、彼は指令を出した。とんでもなく巨大で、目の玉が飛び出るほど重たいやつを。普段の指令が頼んでも無いボーナスに思えるようなやつを。 彼の巨大な指令はこんな感じだった。

1)この時点より、全てのチームはサービスインターフェースを通じて全てのデータと機能を公開すること
2)各チームは各々そのインターフェースを通じて通信しなければならない
3)その他の全てのプロセス間通信は許可されない。ダイレクトリンク、他のチームのデータソースから直接データを読むこと、メモリ共有モデル、バックドア、全てを禁じる。ネットワーク越しのサービスインターフェースを経由した通信だけが許可される。
4)使用する技術は問わない。 HTTP 、 Corba 、 Pubsub 、 カスタムプロトコル、何でも良い。 Bezos は気にしない。
5)全てのサービスインターフェースは、例外なく、外部に公開可能なようにゼロから設計されなければならない。すなわち、チームは全世界のデベロッパに向けてインターフェースを公開することができるよう、設計し、計画しなければならない。例外は無い。
6)そうしない者は解雇される
7)ありがとう!良い一日を!

中略
それでも、6番は、本当だった。だからみんな一生懸命会社に行った。 Bezos は、さらに上級のチーフ熊ブルドッグであるところの Rick Dalzell に率いられた数人のチーフブルドッグを雇って、成果と進行を監視させた。 Rick は元レンジャーで、陸軍士官学校出身で、元ボクサーで、元 WalMart で拷問のような削減をやってのけた人物で、デカくて愛想の良い、「堅牢なインターフェース」という言葉を連呼する男だった。 Rick は歩き回り、「堅牢なインターフェース」について語り回り、そして言うまでも無く、みんなたくさんの進展をし、 Rick にそれを知らせた。

それからの数年間、 Amazon 内部はサービス指向アーキテクチャに姿を変えていった。その変化を形にしている間に、彼らは非常に多くのことを学んだ。 SOA に関する学問や論文は当時もいくつかあったけれど、 Amazon のとんでもない規模からすれば、そんなもの、インディ・ジョーンズに向かって「通りを渡るときは左右をよく見るんだよ」って言うくらいの意味しかない。 Amazon の開発スタッフはその途上でとにかくたくさんの発見をした。

偶然かもしれませんが、自分がウェブサービス技術に対して興味を持ち始めたのも、2002年や2003年ごろのことです。
担当サービスはファイナンスのデータを持ってるので、それをSOAPを使ってウェブサービス化してみました。
(当時はWeb APIという単語がまだなかったが、今普通にAPI化と言えば大体の人は理解できる)
PC上にWin32のアプリケーションを作ってSOAPのインターフェースと通信して、リアルタイム株価ボード的なものを作りました。
UNIX上SOAPクライアントも作ってサーバ間通信もできました。

当時は、サービス化のメリットを下記のように感じました。
・いろんなシステム間の連携用に、最高なI/F。柔軟性あり、標準化しやすい、疎結合、ドキュメントしやすいなどなど
・いろんなデバイス用に提供でき、インターネットサービスはブラウザから脱皮ができる

その後社内の偉い方にプレゼンして、2004年-2005年ごろのことですかな、
社内のRSS開発ガイドラインやウェブサービス開発ガイドラインの策定を担当しました。
現在社長となったM事業部長(2000年ごろ一緒にフットサルをやっていたと思う)に呼ぼれて汐留で事業部全員に対してサービス化のセミナーもやりました。

※2019年10月更新 
ーーー
1. Mさんはなぜか東京都副知事となった。日本のDX化の進化に期待!
2. Amazonサービス化リーダーのRick Dalzellさんは今の会社の大先輩だったね。知らなかった。USに開催されたCIOサミットに行った時に彼の写真見たのかな?
ーーー

2006年には、アマゾンAWSからS3がリリースされ、大変衝撃を受けました。
ここまでサービス化ができたのか!
データだけではなく、オブジェクト、つまりものもサービスにしてしまう。
S3以降のAWSはこの流れを止めることなく、マシン・ネットワークなどコンピューティング関係のものを全部サービス化にしています。
AWSは、もうインターネットの基盤の一つ、つまりプラットフォームになりました。

自分が推進していた社内の変化もありましたが、スケール感が小さかった。
2006年からモバイルデバイス対応のため、API化を推進。
2007年からWebAPI開発ガイドラインを策定。
2008年iPhone発売以降アプリの重要性が少しずつ理解され、アプリと通信するためにAPIが必須。
レガシーシステムをAPIでラーピングするようなる。
システム間連携のためAPIを作る。
APIレイヤーありきでFE/API/BEのN階層化システム設計。
ようやくWebAPIが普及し始めた。
万本以上作られた。

しかし、APIのためにAPIを作っていた。
AWSになれなかった。

2018年の今頃は、アマゾンとの違いが何かを再度考えると、
やはり、サービス化の本質について理解が浅かったと思われます。
サービス化は、目的ではなく、手段であります。
手段だけを追求し、目的を失ってしまいました。

じゃ本質の目的とは何かといいますと、
ソフトウェア開発の生産性を高めるための産業化じゃないかと思います。
今はIT革命の時代と言われてますが、産業革命を参考にして、
日本のソフトウェア開発は、アメリカや中国とくらべて、まだ手作業で、家内工業や町工場的な段階ですよね。
プログラマーはまだ町工場の職人さんですよね。
この人の書いたソースコード(道具やツールを含めて)は、他に人とっては謎だらけです。
ですからドキュメント化が要求されます。
そうすると、エンジニアは、ドキュメントを書く時間がプログラミング時間よりどんどん長くなって行きます。
でもドキュメント書くのも手作業ですよね。

産業革命は、家内工業や町工場から、分業による協業を採り入れ、
大規模な工場を建設して機械により生産を行うことで、大量生産ができるようになりました。
キーワードは標準化、機械化と自動化などがあるかと思います。

先ほどのソフトウェア開発の産業化の話に戻ります。
私は、サービス化の本質は、下記の一連の進化の中にあるではないかと思います。
・ソフトウェアをより細分化する、つまり小さい粒度で部品化(一枚岩のものを疎結合させないといけない。ボルトや歯車的な感じかも)
・ソフトウェア部品をより明確に定義する、つまり標準化(日本工業規格 JIS B1001-1985 ボルト穴径及びざぐり径まで行かなくても社内の標準が必要)
・しかしソフトウェア開発は、銀の弾丸がない。既存のものをサービス化したら何か劇的に生産性を高めることができない。ソフトウェア開発の複雑性を低減させることができるが、運用など他の複雑性が生まれる。継続投資が必要。Amazon spent nearly $23 billion on R&D last year -- more than any other U.S. company
・標準化された部品をCI/CDで品質検証やパッケージングや出荷など自動処理させ、製品化されて行く(だからGoogle/Facebook/Alibabaたちは一日中で何回何回も新規機能のリリースができる)
・標準化から自動化までの機械化のフェーズで、色々な組立生産システム(オーケストレーション、監視、統計分析など)が必要となり、積極的導入する会社は、作業効率は劇的に向上する(フォードシステムやトヨタ生産方式やKubernetesなど)
・社内ソフトウェア生産システムを公開すればパブリッククラウドサービス業者になる
(アマゾンは社内生産システムをAWSのサービスにしている。Alibabaも社内システムをクラウド化したら中国のクラウド市場で急成長している。中国アリババのクラウド事業がAWS並のバケモノになりつつある件)



・今後は、工場自動生産ラインにあるロボットのように、一部のソフトウェアはAIにより生成されるでしょ。

簡単にまとめますと、
・IT革命はハードウェア生産より、これからソフトウェアがリードして行く
・ソフトウェア開発は産業化されて行く
・サービス化は、産業化のために、標準化の役割を果たして行く
・サービス化されたソフトウェア部品は、自動的に生産(組み立て・テスト・リリース)されて行く
・自動生産プロセスや自動生産システムがますます進化して行く
・昔の産業化の時に、欧米から大量生産設備(道具ではなく)を導入したように、これからソフトウェア生産ラインを導入していく必要がある。Cloud Native Landscapeが一つ参考になる
・アメリカや中国の先進的なIT企業は、すでに何年間もこういった大量生産可能なソフトウェア開発設備を運用していて、確かな経済効果が現れた
・日本はソフトウェア開発後進国になりつつある。町工場的開発スタイルから脱出できるかどうかが今後の鍵
・インターネット革命はまだ始まって20数年程度で、これからも無限大の可能性が秘める。この20年間の成功経験に縛らず(技術鎖国しないよう)にどんどんチャレンジして行くことが大事(システム作り直しが怖いのが十分理解している)
・ただJeff Bezosのような強力なリーダシップを持つ指導者(創業者だから)がいなければ経営資源の確保が難しいでしょ。アマゾンは目先の売上と利益より、十数年間かけて生産ラインをトッププライオリティで作ってきたからね。普通の会社はありえない。

以上、久しぶりに真面目な記事を書きました。