世界中のシステムたちは、APIを介して会話している
何かと「コラボレーション」が求められがちな時代。仕事や事業が複雑で多様になってきたことで、社内でもチームや部署を横断したプロジェクトがポコポコ立ち上がります。さらには会社を超えたコラボレーションも重要視され、オープンイノベーションだジョイントベンチャーだと盛り上がっています。
実はこうしたコラボレーションが求められがちな状況は、Webサービスや情報システムの世界でも同じです。システム導入の現場では「で、このシステムは〇〇というサービスとは連携できるのかね?」といった質問が日夜飛び交っています。今や情報システムが単独で動けばニーズを満たせる時代は終わり、多かれ少なかれ何か別のシステムとコラボレーションすることが求められています。
システムが相互につながると何が嬉しいか?
システムが外部のシステムと直接連携することのメリットはたくさんあります。1つは、利便性の向上です。たとえば新しいWebサービスでアカウントを作るときも、GoogleやFacebookなど外部のサービスを使って会員登録やログインができたりします。(こうした機能は「ソーシャルログイン」とか「シングルサインオン」と呼ばれます。)利用者側としては、会員登録フォームの入力がスキップできて便利でしょう。このような例は他にもたくさんあります。
また、システム間連携によって業務に必要な操作を自動化できるケースもあります。たとえば「誰かがこのGoogleフォームを送信したら、SlackやTeamsに通知をしたい」というニーズがあります。もちろん担当社員が毎日Googleフォームの回答一覧をチェックして、新着があったらSlackに手動で書き込むということは可能です。ただ、そんな定型的で不毛な作業をするなら、さっさとGoogleフォームとSlackを直接連携させて自動化した方が、もっと人間らしい仕事に集中できます。
生活者が使うWebサービスは、当然世界で1つではありません。また業務システムも、「どんな業務もカバーする最強の大統一業務システム」が生まれていない現状では複数システムを併用することになります。利用者の体験が複数のサービスやシステムを跨っている以上は、それらが相互に連携してシームレスな機能提供をして欲しいと思うのは自然な要求です。
「API」という得体の知れない存在
さて、システム連携の話になると、必ずと言っていいほど登場する言葉があります。それは「API」です。「API」という言葉は、そもそもが略語でわかりにくいのに、意味するところも抽象的で、様々な文脈で使われます。
さらには、「API」という言葉は謎に擬人化された状態で文章の中に登場しがちです。「APIを呼ぶ」という言葉は、「他の友達もここに呼ぶ?」といったカジュアル感があります。そうかと思えば、友達だったはずの「APIを叩く」と言われたりします。急にヴァイオレンスな印象です。他にも「APIを生やす」という言葉もあります。身近にある生えるモノなんて、新芽と髪の毛くらいしかありません。ここまでくると、もう訳がわかりません。あなたの身の回りに、「呼べるし叩けるし生やせるモノ」は、API以外にあるでしょうか?
そんなこんなで、APIというのは情報システムに関する言葉の中で「よく登場するけどわかりにくい言葉」の代表のように扱われています。
「Uに対するI」と「APに対するI」
わかりにくい言葉を理解するには、「似ているけど違う有名な言葉」とセットで認識するのがおすすめです。その似ている言葉をなんとなくイメージできていれば、「それと同じカテゴリの言葉なんですね」ということはわかるからです。たとえば、COOという言葉があります。全くの初見で意味を察することは難しいと思いますが、「CEO」という言葉の仲間だということがわかれば、少なくとも「なんか偉い人」くらいの認識を持つことができます。
APIにとっての「似ているけど違う有名な言葉」とは、UI(ユーザー インタフェース)です。「UIをデザインする」などのように使われますね。情報システムのUIとは、雑にいうと大抵は「ユーザーがそのシステムを操作するために使う画面やその構成要素」のことです。
このUIとの対比の中で、APIとは何かを考えましょう。APIとは、「アプリケーション プログラム インタフェース」の略です。省略前の言葉を聞くと、UIとAPIの共通部分は「I(インタフェース)」であることがわかります。システムの「インタフェース」とは、そのシステムが外部とのつながりを持つために用意している「接点」のことです。人間が目や耳で外の世界のことを知るように、コンピュータやシステムは様々な「インタフェース」を介して外の世界からデータを受信したり操作命令を送られたりします。
逆に、UIとAPIの違いは、そのシステムが誰に利用されるかの違いです。その名の通り、UIは「ユーザー」向けに作られていますが、APIは「外部プログラム」向けに作られています。コンピュータや情報システムはプログラムによって動くので、「外部プログラム」というのは「外部のコンピュータや情報システム」向けと、より狭く言い換えてもいいです。偏屈な人はコンピュータがそのシステムを使っていれば、コンピュータも "User" だろうと思うかもしれません。実際には、情報システムの文脈で "User" と言えば暗に「人間であること」を指しています。つまり、システムを利用する「人間に対する接点」が「UI」であり、システムを利用する「外部のプログラムやコンピュータに対する接点」が「API」といえます。
もう少しイメージしやすいように、具体例で考えましょう。Googleスプレッドシートには、UIとAPIの両方が用意されています。あなたが人間であれば、Googleスプレッドシートの画面をWebブラウザで開きボタンをポチポチ押すことで、たとえばスプレッドシートドキュメントを新規作成することができます。一方、あなたがもしコンピュータであれば、いちいち人間向けの画面をカメラで見てモーターでマウスを動かすよりも、予め用意されたコンピュータ用のインタフェース(つまりAPI)を使って操作した方が簡単です。スプレッドシートドキュメントの新規作成であれば、spreadsheets.createというAPIが用意されています。このAPIを利用することで、外部のシステムやコンピュータは簡単にスプレッドシートを操作することができます。
ちなみにAPIについて調べると、 "Application Programming Interface" という表記がとても多いです。ただ "User Interface" との対比で考えると、 "Programming" という行為ではなく "Program" という対象物を入れた方がわかりやすいと個人的には思います。
世界中のシステムたちは、APIを介して会話している
UIとAPIの違いは、とあるシステムの機能を利用するのが人間か外部システムかというものでした。この違いについて、さらに深く考えてみましょう。
人間と情報システムとの重要な違いの1つは、「人間にはAPIが無い」ということです。人間には、歩く、声を出す、物を運ぶなど、様々な機能があります。しかし、外部システムが人間のAPIを使ってその人間を自由に操作するということは(まだ)できません。人間とシステムとの関係は、常に「人間がシステムを操作する」という悲しい一方通行です。
一方、システムAがシステムBのAPIを使うことができるように、システムBはシステムAのAPIを使うことができます。人間とシステムの関係と違い、システム間の関係は概ね対等であり、「相互に操作し合う」ということができます。異なるシステムは、当然異なるデータや異なる計算ロジックを持っています。複数のシステムが協力してそれぞれの強みを活かした「コラボレーション」をすることで、実現できることの幅が飛躍的に広がります。しかも正しく作られた情報システムは、人間よりも正確に、人間よりも長い時間帯を休むことなく働き続けることができます。コンピュータの方が得意な定型業務は、こうした世界中のシステム同士のAPIを介した双方向の「会話」によって、24時間休むことなく実行されているのです。
ちなみに、システム間連携で使われるようなAPIは、その多くがHTTPと呼ばれる通信方式を使って利用できるようになっています。システムAのAPIに対してシステムBから正しくHTTPリクエストを送信すると、システムBからシステムAを操作したり、システムA内の情報をシステムB側でレスポンスとして受け取り使うことができるようになります。そのようなAPIは、一般にWeb API呼ばれ、APIの種類毎にURLが発行されています。たとえば前述した「スプレッドシートドキュメントの新規作成」は、次のURLに対してHTTPリクエストを送ることで実現できます。
https://sheets.googleapis.com/v4/spreadsheets
「API」という言葉がなぜわかりにくいか?
ここまでで、APIという言葉のイメージはなんとなく付いてきたでしょうか?システムのAPIとは、外部のプログラムがそのシステムを操作できるように提供されている手段です。その多くはWeb APIと呼ばれ、HTTPリクエストを特定のURLに送信することで使うことができます。
最後に、それでもなぜAPIという言葉がわかりにくいかについて説明します。なぜAPIという存在は、「呼べるし叩けるし生やせる」という厄介なイメージを持つモノになってしまったのでしょうか?
前述した「APIを呼ぶ」とか「APIを叩く」というのは、Web APIの文脈で言えば「HTTPリクエストを送信してそのAPIを利用しシステムを操作する」という意味合いで使われます。「〇〇という操作をしてね、と呼びかける」というイメージの下で「呼ぶ」という言葉が、「〇〇という操作を実行してもらうために寝ていたシステムを叩き起こす」というニュアンスで「叩く」という言葉が使われます。他にも、「使う」、「実行する」、「callする」、「kickする」などの言葉も同様の意味で使われます。
また、「APIを生やす」というのはシステムを開発している側が使う言葉で、「新しいAPIを追加して、外部から使える機能を増やす」といった意味合いです。UIが勝手に増えるわけではないのと同じように、APIももちろんそのための開発をしなければ増えることはありません。他にも、「作る」、「開ける」などの言葉も「新しくAPIを追加する」という意味合いで使われます。
このように多様なイメージを帯びてAPIにまつわる動作が表現されるのはなぜでしょうか?また、APIという言葉が様々な文脈で登場するのはなぜでしょう?そこには、APIという言葉で表現されるモノがそもそも多様であるという背景があります。
まずは、レイヤーの多様性です。APIとは、最も広く言えば「プログラム向けのインタフェース」でしかありません。確かに、実施にビジネスの現場で使われる「API」という言葉の多くは、前述した「システムが提供するWeb API」を指すことが多いです。しかし、実際には「システム間連携」よりも低いレイヤーの文脈で使われることもあります。たとえば、「OSがその上で動くアプリケーションのために提供しているAPI」というように、「コンピュータ内部のソフトウェア間の連携」に関するAPIがあったりします。
次に、機能の多様性です。Web APIに限った話でも、「APIを使って利用する機能」というのは様々です。それは当然で、「API」とは機能を利用するための手段を指す言葉であって、その機能の内容についてはほとんど限定していません。前述したGoogleスプレッドシートの例でも、APIを使ってシートの内容を取得することも、更新することも、削除することもできます。たとえば「あるシートのA1からD5までの領域にあるデータを取得する」とか、「あるシートの名称を変更する」といったことを、GoogleスプレッドシートのAPIを使うことで実現できます。
システムのコラボレーションが重要になった以上、APIという言葉やそれによって実現されるシステム連携について理解することの価値も上がっています。しかし、「API」という言葉があまりにも色々な文脈で登場することで、理解を諦めたくなることがあるかもしれません。そんなときは、「UI」との対比の中で大枠のイメージを捉えながら、そのAPIが「誰が誰に使ってほしくて作られたものか?」を頭の中で整理するのが良さそうです。
ここから先は
仕事を楽しくするデジタルリテラシー読本
【初月無料】デジタル時代の歩き方について考えたことを発信します。ソフトウェアの時代とは何か。エンジニアの頭の中はどうなっているのか。NoC…
サポートをいただけると、喜びドリブンで発信量が増えます!初月無料のマガジン『仕事を楽しくするデジタルリテラシー読本』もおすすめです!