Distributed Systems Lab
 分散システム学研究室

研究に使えるAPI(2020年版)

授業の演習や課題であればともかく, それなりに使えるプログラムを書こうとすると, これからの時代,外部で作られた共用プログラムの利用は避けては通れません. 別の言い方をすると, 適切なAPIの存在と使い方を知っているかどうかで 仕事の生産性は大きく変わることになります (営利企業はもちろんですが,先端技術に取り組む大学の研究こそそうあるべきだと思う). このページでは,我々の研究室で取り組もうとしている課題に関連するAPIについて紹介します. おそらく5年後にはここで書いた内容の多くは陳腐化するはずなので,研究室の皆さんには, アンテナを張って情報を適宜アップデートする習慣も身につけて欲しいと思います.

HTML5関係のAPI

GUIを書こう

自分しか使わないプログラムであればprintfやscanfだけを使ったCLI(Command Line Interface)でも良いと思いますが, 人に見せるソフトを作るのであればGUI(Graphical User Interface)についても多少は意識しておきたいものです. GUIに関しては,JavaのJavaFX やPythonのTkinter など定評のあるツールやフレームワークが言語ごとにいくつか存在します. またAndroidやiOSなどのスマホアプリは,そもそも GUIと不可分な構造を持っています (Androidアプリを開発するのであればAndroid Studio+Kotlin or Javaの流儀にしたがうのが良いでしょうし, iOSアプリをいま作るのであればXcode +Swift一択だと思う). ただし,たとえ完全にマスターしたとしても数年後には仕様が大きく変わっている可能性が高いので, いまは基本だけを押さえておいて,業務などで必要になった時点で本格的に勉強して使い倒すのがベストだと思います. それらの中で一つの選択肢として考えたいのが,いわゆるウェブアプリです.

GUIとしてのウェブアプリ

ウェブアプリを作る最も簡単な方法はHTML+CSS+JavaScriptを用いることです. HTML(HyperText Markup Language)はウェブページ上に配置されるオブジェクトの論理的な(ツリー)構造を記述する言語であり, ページの見栄えはCSS(Cascading Style Sheets)という別の言語で調整します(CSSを使わなくても表示できるけれども, サイト全体で統一感のあるページを作るのは難しくなる). またページ上のボタンをクリックしたときの動作はJavaScriptで記述することが多く, JavaScriptで記述されたプログラムは, ブラウザに仕込まれた高性能なJavaScriptエンジンによってコンパイル・実行されます (ちなみにChromeに搭載されているのは,V8という洒落た名前のJavaScriptエンジンです). したがって例えばウェブページに開始ボタンとテキストエリアだけを配置し, ボタンのクリックによって計算を開始して計算結果をテキストエリアに表示するようにすれば, それだけでプログラムのGUIができたことになります (インターネットに公開せずローカルに実行するだけであれば, 適切なウェブサーバをローカルに立ち上げて, ローカルホストをURLに指定してブラウザを読み込めば良い).

HTML5を使ってみよう

HTMLのバージョン1は1993年に開発され, 1999年に開発されたHTML4は10年以上使われていました (その頃に作られたウェブページはいまもたくさん残っているし, HTML4の教科書もいまだに読まれていると思う). 現在の最新バージョンであるHTML5が発表されたのは2014年のことです. このバージョンでは,マルチデバイス対応,3Dアニメーション表示,音声や動画などの埋め込みなど, これまでになかった有用な機能がいくつもサポートされています (ChromeやFirefoxなどの主要ブラウザではHTML5の使用がデフォルト化されている. 自分が使っているブラウザの各種機能への対応状況はここでチェックできる). 例えばブラウザ上のビデオオブジェクトはvideoタグで囲むだけで生成できて, 生成されたオブジェクトのplay()メソッドを呼ぶだけでビデオの再生を開始できます. HTML5の詳細についてはこちらを参照してください. APIの一覧はここにありますが, 我々の研究で使えそうなものを備忘録がわりに抜き出してまとめておきます.

HTML5に関するAPI
WebRTC ブラウザ間のリアルタイムコミュニケーションを実現するためのAPI. NAT越えやカメラへのアクセスなどが抽象化されているので, 環境に依存した低レベルの動作を意識することなくビデオチャットアプリなどを作ることができる. 例えばこんな感じ
Web Audio API ウェブ上で音声などのオーディオ情報を取り扱うことができる.フィルタリングや様々なエフェクトが簡単に記述できる (例えばヘリウムガスを利用したアヒル声とか).プロ仕様のツールとの比較についてはよくわかりません.
WebGL インタラクティブな 3D グラフィックスや 2D グラフィックスをレンダリングするためのAPI.プラグイン不要だけれども モノによってはハードウェア要件を満たす必要があったりするらしい.2DグラフィックスはCanvas APIでもサポートされている.
WebSocket API サーバとの間で対話的な通信セッションを開いて利用するためのAPI.無料で使えるWebSocketサーバもいくつかあるので, うまく利用したい(WebRTCのシグナリングサーバがわりに使うこともできる). ちなみにUnixのソケットとは直接関係はない
上記の他にも,WebVR APIやWeb Animation APIなどの実験的なAPIも開発が進められており, しかるべきタイミングで正式版がアナウンスされると思われます.

いろんなポータルサイト

Rakuten API

様々なAPIが網羅されているポータルサイトが 楽天API にあるので一度のぞいてみてみてください. 与えられた郵便番号から住所をJSON形式で返す郵便番号API は有名だと思いますが,それと同じようなREST APIがたくさん紹介されています. これからはそのようなプログラムをわざわざ自分で作らなくて良いのです! (その代わり,APIを叩くだけでできてしまうようなソフトウェアに 高いお金を払う人も徐々にいなくなるはずです)

IT関連企業が提供するAPI

国内のIT関連企業の研究開発チームが作ったAPIもたくさんあります. Yahooデベロッパーネットワーク が提供しているのは自社サービスに関するAPIで, 現在無償版が生きているのは,ショッピング,テキスト解析,地図,求人などです (知恵袋APIについては,NTTデータにうつされて現在有償で提供されている). 特に求人APIは2020年3月に公開されたばかりで,今後は 地方へのIターン希望者への情報提供などに広く使われるのではないかと思います (自分ではやらないけれどもジョブマッチングは本気でやるとこれから面白いターゲットだと思う.wantedlyとか知っていますか?). 同様のAPIはDocomoからも提供されており, Docomoデベロッパーサポート では,音声認識(NTTテクノクロス, アドバンスト・メディア),音声合成(HOYA, NTTテクノクロス),言語解析(goo),交通検索(駅すぱあと)などのAPIが公開されています. ただし簡単な音声認識や音声合成はApple SiriやGoogleアシスタントなどですでに実用化されてしまっているので, 研究対象としては枯れ始めているように思います (音声のリアルタイム翻訳なども技術としてはすごいのだけれど「できて当たり前感」がある. 高性能なリアルタイム翻訳APIが公開された瞬間に新しい研究としての価値は失われるわけだし...). 私は自然言語の専門家ではありませんが,一人のユーザから見て日本国内で現在そのゴールに一番近いのは, NTTコミュニケーションズが提供している COTOHA API ではないかと思います.単なる形態素解析や係り受け解析だけでなく, 固有表現抽出,照応解析,言い澱み除去などのAPIが用意されています. 先日読んでいて大笑いしたのが,感情分析APIを用いて 「たけのこの里」を「きのこの山」 に『正しく』自動で修正して差し上げるプログラムです (使われているPythonプログラムはとても簡単なので,学部生でも十分理解できると思う). COTOHA APIではありませんが感情を込めた音声合成という事例も存在しており,このまま技術が進むと, 下手をすると売れっ子以外の声優さんが大量に失業してしまうのではないかと危惧しています (美空ひばりのアバターができたくらいなので,ラジオで喋っている 三森すずこが本当に実在するかも疑った方が良いのかも...良い作品になるのであれば 音声の自動生成も厭わなくなる時代はきっと来ると思う).

↑ PAGE TOP