Cloud Run と plumber で作る簡単 Web API
投稿者:中根 洋平
日本情報通信の中根です。
皆さんCloud Run便利ですよね。
そして私はR言語が好きです。
今回はRで作成した図表をCloud Runで経由で表示するAPIを作成してみたいと思います。
構成
今回はplumberを利用したAPIを実装します。
plumberはRで簡単にWeb APIを作成できるライブラリです。
今回は以下のような機能をもったAPIを作成します。
- plot -> 乱数のヒストグラムをPNG画像として表示
- table -> irisデータをDTライブラリを利用してインタラクティブな表を表示
- map -> 緯度経度をパラメータとして渡しleafletライブラリにてインタラクティブな地図を表示
R コード
上記機能を盛り込んだシンプルなコードapi.Rを作成します。
plumberはroxygen2ライクなコメントにてAPIの仕様を表現します。
# plumber.R
# libraries
library(tidyverse)
library(leaflet)
library(DT)
#* 乱数のヒストグラム
#* @serializer png
#* @get /plot
function() {
rand <- rnorm(100)
hist(rand)
}
#* 地図の描写
#* @serializer htmlwidget
#* @param lat Latitude
#* @param lng Longitude
#* @get /map
function(lat, lng) {
l <- leaflet() %>%
addTiles() %>%
addMarkers(lat=as.numeric(lat),lng=as.numeric(lng))
l
}
#* irisテーブルの描写
#* @serializer htmlwidget
#* @get /table
function() {
datatable(iris)
}
DockerイメージはRocker Projectからtidyverseが導入済みのものを使用します。
tidyverse あると便利ですからね。
FROM rocker/tidyverse:latest
COPY ["./", "./"]
RUN install2.r plumber DT leaflet
ENTRYPOINT ["R", "-e", "pr <- plumber::plumb('./api.R'); pr$run(host='0.0.0.0', port=8080)"]
デプロイ
Cloud Runを利用する際はぜひCI/CDの仕組みを利用することを推奨します。
Cloud Runの画面からも「継続的デプロイ」の編集ボタンがありますのでぜひ利用してみてください。
特に問題なければ数分で利用できるようになります。
それでは確認してみましょう。
plumberはHTMLウィジェットも可能なので表や地図もご覧の通りインタラクティブに操作が可能です。
Rの強力な可視化ライブラリは非常に便利ですね。
またplumberはSwagger UIも実装されています。
<API URL>/__docs__/にてroxygen2ライクにコメントした部分が反映されていることも確認できます。
まとめ
今回はCloud Runでplumberを動かしてみました。
Rはどちらかというと個人でのデータ分析に使うことが多いですが強力な可視化ライブラリを揃えています。
plumberを利用しAPIとして実装することでそういった図表をシステムへ組み込むことができるかと思います。
もちろんShinyを利用することも選択肢の一つですがシンプルに機能ごとに実装できるCloud Run + plumberという組み合わせもぜひ試してみてはいかがでしょうか。