見出し画像

APIの何がそんなに大事なの?

今日は、ソフトウェア開発では避けて通れない「API (Application Programming Interface)」のビジネスにおける重要性について書きたい。

APIとはシステム間の「契約」のこと。例えばスカイスキャナーで航空券を探すと、「依頼を出したら、フライトの情報をください」という合意に基づき各航空会社のチケットの値段が見られる。(より詳しく知りたい方には、ビジネス+ITNTTの記事をおススメしたい。)

Amazon Adsで新人だった頃は、「APIね、はい」ぐらいの気持ちで捉えていたのだが、開発を重ねるうちに、耳にタコができる程「APIファースト」という言葉を聞くようになった。リリースする全機能はAPI化(=社内外の誰でも使えるように構築)が必須で、必ず事前審査を通らなくてはならず、API化されていないサービスはいつまでに直すと役員がコミットする程大きな目標だった。次第に、この哲学をしっかり守るチームと、屁理屈をつけて後回しにするチームで、ソフトウェアの品質や、顧客によるサービスの導入スピード、そして最終的には売上に大きく差が出ることを目の当たりにするようになった。

これは新しいことではなく、Amazonでは2002年頃にジェフ・ベゾスが社員に打ち出した「API方針」に遡る。今や13兆円以上の売上を叩き出すAWSは、Amazonがこの頃から社内サービスのAPI化に取り組んでいたからこそ実現できたことだと聞くと、その重要さに気づいて頂けるのではないか。自分のために作る機能は、高い確率で他事業部・他社も必要とする可能性があり、そこにチャンスがある。(これが今でいうマイクロサービスの考え方でもある。)今日はこの哲学やAmazonでの現在の応用の仕方について解説したい。

ジェフ・ベゾスの「API方針」

2000年頃、Amazonは第三者が出品できるマーケットプレイス事業を打ち出して間もなく、大きな問題に直面する。自社の機能(決済、検索、注文、商品管理)をTarget等他社に提供しようとしたら、全然上手く行かなかったのだ。社内の沢山のシステムが相互的に結びついていて、分離してAPIとして他社に提供しようとしたら想定より遥かに難しかったことから、こりゃダメだ、新たな仕組みを考えなきゃ、と反省する。検討の結果、2002年、ベゾスが社員を驚かせる「API方針」を出す。当時の社員によると、その方針は下記のような内容だったという:

  1. 今後、全てのチームはデータと機能をインターフェースを通じて公開する。

  2. チーム間のコミュニケーションは、その公開されたインターフェースを通じて行う

  3. 公開インターフェースを使わないプロセス間通信(例:直接リンク、他のチームのデータの直接読み取り、共有メモリ、その他のいかなる方法)は一切認めない。ネットワークを経由したインターフェースの呼び出しのみ、唯一許可する。

  4. インターフェースに使う技術が何かは問わない。HTTP、COBRA、Pubsub、カスタムプロトコル等、関係ない。

  5. 全てのインターフェースは例外なく、外部に公開できるように設計されなくてはならない。つまり、各チームはインターフェースを世界中の開発者に公開できるように計画・設計しなければならない。一切の例外は認めない

  6. これを守らない人はクビにする

6は置いておくとして、1~5が何故大事なのかをそれぞれ解説したい。

「1. 今後、全てのチームはデータと機能をインターフェースを通じて公開する。」

各チームがデータと機能を公開することで、皆が1から同じものを作り直す必要がなくなる。例えば、Amazonの書籍チームと他商材チームが同じ決済機能をAPIを介して使うことができる。

「2. チーム間のコミュニケーションは、その公開されたインターフェースを通じて行う。」

組織が大きくなるにつれ、複数のチームで何百・何千人もの開発者が複数の異なるプロジェクトに取り組むことになる。APIファーストのアプローチを取ることで、誰が何に取り組んでいるのか、既存のAPIを再利用できるかどうかをすぐに特定できるようになる。

また、APIは時間の大幅な節約にも繋がる。メールや会議で他チームにヒアリングするのではなく、API文書を読み込むことで、そのサービスを理解できる。提供者も、サービスの使い方や応用の仕方を文書化・共有することで、手間をかけずに多くのチームに使ってもらえる。これは、CoinbaseのCEO、ブライアン・アームストロングも提唱していて、エンジニア間ではなるべく「ミーティングではなくAPIを通じてやりとりせよ」と命じている。

「3. 公開インターフェースを使わないプロセス間通信は一切認めない。ネットワークを経由したインターフェースの呼び出しのみ、唯一許可する。」

APIファーストのアプローチは、全チームが協力することで初めて、ネットワーク効果が発揮される。これを強制することで、AmazonはAPI開発の知見を急速に蓄積することができ、以後AWSの開発に繋げることができた。例えば、社内にどんなAPIがあるかを知るには一覧表が必要だと気づき、レジストリを構築した。また、他チームがAPIを故障させることがある可能性に気づき、利用制限機能も構築した。故障時に根本原因を見つけるための記録や測定機能も配備し、季節性に対応するためのメカニズムも用意した。これらを通じて、堅牢なサービスを提供するノウハウを身につけ、AWSの開発を加速させることができた。

「4. インターフェースに使う技術が何かは問わない。HTTP、COBRA、Pubsub、カスタムプロトコル等、関係ない。」

ベゾスは、技術よりもその根底にある原則を重視していた。時と共に技術は変化するかもしれないが、APIの根底にあるメリットに焦点を当て続けることで、開発者はAPIの「どのように」ではなく「なぜ」を常に考えるようになった。

「5. 全てのインターフェースは例外なく、外部に公開できるように設計されなくてはならない。つまり、各チームはインターフェースを世界中の開発者に公開できるように計画・設計しなければならない。一切の例外は認めない。」

この、「社外に公開できるよう設計」というのが、AWSがこれほど成長した理由の一つだ。社内のニーズを解決するだけでなく、外部の開発者でも活用できるAPIの構築方法を考えるようになった。また、外部に提供するサービスを自社でも使うことで、継続的に改善し、堅牢かつカスタマイズ可能なAPIエコシステムを築いていくことができた。


業界を見渡すと、APIを介して多くの企業がプラットフォームを構築し、他社がそれを活用して様々なサービスを構築している。例えば、Stripeは決済処理のためのAPIを提供し、多くのスタートアップや開発者の負担を軽減している。OpenAI等の新興AI企業は、APIを通じて、開発者が様々なアプリケーションを作る土台を提供している。APIは莫大な価値を生み出す一つのエコシステムと言え、そのための種まきをするか否かで企業の展望や収益を大きく左右することを忘れないでおきたい。

Amazonの生成AI戦略に見えるAPI思考

このAPIの哲学は、Amazonの現在の生成AI戦略にも適応されている。2023年度株主へのレターで、現CEOアンディ・ジャシーは、個々に提供する機能を”Primitive”(≒ 原子)と呼び、顧客の課題を解決する機能を3つの層に分けて考え、提供していくと打ち出している。

  • 基盤モデルに必要なインフラ:NVIDIAのAIチップの需要が逼迫し、価格が高騰する中、Amazonは自社のAIチップ開発(Traininum, Inferentia)に取り組んでいる。また、データ・実験・訓練のためのサービス(SageMaker)も提供している。

  • 企業がアプリケーションを作るために必要なツール:企業が基盤モデルを活用し、自社データを使いながらカスタマイズ・リリースできるためのツールを提供している(Bedrock)。例えば、どの質問に答えるかの制御や、モデル以外の情報の活用(検索拡張生成)、複数の工程を遂行できるエージェント、モデルの精度を上げるためのファインチューニング等ができる。

  • 完成されたアプリケーション:ショッピング・アシスタント(Rufus)や、コーディング・アシスタント(Amazon Q)等を開発している。

Amazon AdsでのAPI活用例

私が所属していたAmazon Adsは、Amazonのサイトや関連メディアで広告を打ちたい広告主(例:大手小売企業、個人出品者)用のプラットフォームを運営していたのだが、ここでも様々なAPIを見てきた。

  • 顧客向けAPI: MetaやGoogleの広告と同様、Amazonも広告主自らキャンペーン(広告)を打つための設定を決めるコンソールがある。目的は何か、誰・何をターゲットしたいのか、露出毎・クリック毎にいくら払えるのか、といった設定だ。Amazon Adsの広告コンソールは、使いやすさを維持するため、全広告主が欲しいであろう機能しか提供していないのだが、他の情報と紐づければさらに面白い分析ができる。これに着目したのが、TeikametricsのようなAPIインテグレーターで、彼らは例えばSKUカタログ情報(例:粗利率)と紐づけることで、出品者がより細かく費用対効果を見られるような機能を提供している。Teikametricsのような企業のために、AmazonはAPIのドキュメンテーションを提供しており、実はこれらAPI企業経由の広告売上はAmazon自社経由のそれを凌ぐ規模に至っている。

Amazonで広告を出すためのキャンペーン設定コンソール(例)
APIインテグレーターのコンソール。Amazon AdsのAPIを使いながら、粗利率など他の情報も加えることで、独自の機能を出品者に提供している
  • 社内API: 広告事業の中でも、大企業向け⇔中小企業向け、単一商品用⇔ブランド訴求用など、様々な広告プロダクトがある。だが、これらは共通のオークションを介して最終的に消費者に見せる広告を決めないといけないし、データの保存方法や指標の定義など、様々な仕組みが統一されていないと、広告主にとって訳の分からないプロダクト群になってしまう。Amazon Adsではこのためのインフラ専門のプラットフォームチームが存在し、彼らとAPI連携することで必要なデータをやり取りしている。また、私が動画広告プロダクトを立ち上げた時も、動画のコード変換や字幕の生成は、その機能を既に提供する他チームと連携することができ、一から作るよりよほど早くリリースに辿り着けた。

この記事が気に入ったらサポートをしてみませんか?