ベンチャーと大企業の関係はDevとOpsの関係に似ている?
CircleCI 舟木将彦氏は「社会と事業、変革していますか?」と切り出した。DX(デジタルトランスフォーメーション)では、デジタルを活用することでお客様とのつながりを変える、あるいはビジネスモデルを変えることを実現していく。
変革は一人(ベンチャー)で実現してもいいし、みんな(大企業)で実現してもいい。例えばスマホの充電を課題に掲げて何か行動を起こすとしよう。手ごろな解決策としては、コンセントを提供できる店舗を検索できるアプリを開発してもいい。ビジネスにするなら、カフェとコラボする、バッテリー企業とコラボするB2Cのビジネスモデルを作ってもいいだろう。さらにはB2Bに発展させて再生可能エネルギーを企業向けに販売することもできる。
規模が大きくなるほど参入障壁は高まる。ベンチャー(小規模)だと素早く動いて進むことができるのが利点だ。一方、大企業(大規模)だと時間がかかることもあるが、より遠くまで進めて、より大きな変化を実現できる。ただし二者択一ではない。ベンチャーと大企業は互いに交わり協力しあうことで強みを高めることもできる。そうして顧客に価値を提供し、社会や事業を変革する方法もあるのだ。
ところでこのベンチャーと大企業のたとえはDevとOpsの関係に似ていないだろうか。変化を追い求めるベンチャーはDev、安定や信頼を追い求める大企業はOpsと見ることができる。相反する存在に見えるものの、うまく協力することで強みを高め、顧客への価値提供、社会や事業の変革にもつながる。
とはいえ、今ではDevもOpsもサイロ化しており、現状の仕事に手一杯でコラボする余裕がないのが実状ではないだろうか。人を増やせば解決できるとも限らない。舟木氏は「鍵は自動化です」と断言する。自動化できるプロセスを自動化することで可処分時間(余力)を生み出すことができる。
ではどこで自動化できるか。DevOpsの流れを見ると、プランやコードの段階、また運用や監視のなかでも非正常系は人間が判断する必要があるので自動化は難しい。しかしビルド、テスト、リリース、デプロイの段階であれば、継続的であるため自動化の可能性が高い。
プロジェクトでは早い段階から多くの専門家に関わってもらえたほうが安全だ。例えば法律やインクルージョンに関して、開発の最後の最後になってどんでん返しが起きてしまっては元も子もない。DevOpsに「みんな」が関わることを舟木氏は「DevみんなOps」と表現した。
デバイスとクラウドをつなぐ2つの開発レシピのポイント
さてここからは概念的な話から実践的な話に移ろう。舟木氏はクラウドとデバイスをつないだシステムのレシピを2種類紹介した。1つ目はデバイスのセンサーで温度と湿度を計測するもの、2つ目はマスク装着の有無を画像認識するものだ。
(1)温度・湿度計測機器をクラウド(CircleCI)で管理する
ここではラズパイ(Raspberry Pi)と温度と湿度のセンサーを組み合わせて環境情報を取得する。用意するのはRaspberry Pi 4、GrovePi+、デジタル温度・湿度センサー。あとは必要に応じてディスプレイ。ラズパイはよく使われるRaspberry Pi OS(旧称 Raspbian)ではなく、ARM64+Ubuntu環境で使用する。またGrovePi+はGrove互換の電子部品であればGroveケーブルでつなげることができるので、ブレッドボードやはんだ付の必要がないのもいいところだ。
システムはラズパイでCircleCIのジョブを実行するため、事前準備として、デバイス(Ubuntu on Raspberry Pi)にCircleCIランナーをインストールしておく必要がある。
実際の流れはこうだ。ユーザーがGitHubにコミットするとクラウドのCircleCIにジョブが渡る。ラズパイでは、ローンチエージェントが常にクラウドのCircleCIに御用聞きのようにジョブがないかモニターしている。もしクラウドのCircleCIにジョブがあれば作業指示を受け取り、タスクエージェントにジョブを渡す(ローンチエージェントはroot権限があり、権限として高すぎるのでタスクエージェントに下請けに出すようにしている)。
実行されたジョブ(センサーの測定結果)はラズパイのローカルストレージ(SDカード)に出力しておけば、CircleCI側(クラウドストレージ)に同期可能だ。したがって実機が設置してある場所に出向いてデータを回収する必要がなくなる。
こうしたIoT機器だと全国各地にデバイスを配布することが考えられる。どのデバイスに対して実行を指示するかは、デバイスのランナー名で指定する。ここではデバイスが御用聞きのようにクラウドにジョブがないか確認しているため、デバイス側はCircleCIやAWSなどクラウドへのアウトバンド接続さえできればよい。インバウンドのためにポートを開けなくてもいいということだ。
またCircleCIランナーはラズパイなどのデバイスであれば、Ubuntu 18.04以降でx86_64またはARM64が対象となる。このシステムについてはCircleCIにある舟木氏の記事に詳細が記載されている。
詳細記事
(2)ラズパイ上で動作する画像(マスク)認識のトレーニングをクラウドGPUで実行、実機でテスト
コロナ禍でマスク着用が不可欠になった。店舗やオフィス入り口でマスク着用チェックが行われることもある。今ではマスク着用を画像認識できるので、うまく活用すればマスクを着用していない人にはデジタルサイネージなどを通じて自動でメッセージを伝えることができそうだ。
ここでは物体認識でメジャーなYOLO v5を用いて、画像にいる人物のマスク着用の有無を判定する。画像認識には事前のトレーニングも必要だ。ここではトレーニング用に提供されているRoboflowのデータセットを用いてトレーニングも行う。
トレーニングはGPUをサポートするクラウドでYOLO v5環境を構築し、トレーニングを実施する。同時にYOLO v5環境をラズパイに配信して、実機で得られる画像と実機の性能をテストする。テスト結果はクラウドで評価する。
ジョブの実行環境を(ランナーが動作するラズパイではなく)クラウドのGPU環境にするには、マシンのリソースクラスでクラウドのGPU環境を指定する。環境は、YOLO v5環境、マスク装着のデータセット環境、GPU環境を構築する。それぞれワークスペースとして保持しておくことで、GPU環境でもラズパイ環境でもアタッチすれば使い回せるようになる。なおマスク装着のトレーニングに使うデータ(画像)セットは有料だ(学生やホビーユーザーは無料)。購入して渡されるキーを設定しておく必要がある。
舟木氏によると、トレーニングにかかる時間はどのGPUリソースにしても、おおよそ30分弱くらい。ここまでできたら、いよいよ画像認識だ。ラズパイ環境でジョブを実行し、画像認識を行う。
実行結果を見ると、マスク着用の画像はスコアが0.9前後になっている。一方、着用してない画像はスコアが0.77。この後はしきい値で調整するか、あるいはデータを増やしてさらにトレーニングを重ねるのもいいだろう。
最後に舟木氏は「継続的にインテグレーションし(Continuous Integration)、インテグレーションしたものを中心に会話しよう」と呼びかけた。今回のデモが示したように、今ではソフトウェアもハードウェアもいろいろな道具がそろっている。ラズパイで使えるセンサーやディスプレイ、画像認識のためのツールやトレーニング用画像まで探せば見つかる。
つまりアイデアがあればすぐに形にできるということだ。冒頭に述べたように、これからはビジネス部門や各種専門家とも早い段階から関わっていくことで、よりいいものを作り、より成功に近づけることができる。開発者以外の人たちとの会話では、構想やアイデアだけではなく実際に動く実物を見てもらうほうが分かりやすい。実物が分からないと「空中戦になってしまう」と舟木氏は危惧する。だからこそ実物を囲んでアイデアを出し合うことが重要だ。
舟木氏は「社会やビジネスが継続する限り、プロジェクトは続きます。変化と安定の両輪がそろってこそ、継続的に価値提供や変革を続けられるようになります」と述べた。
なおCircleCIはブログ記事のほかにもTwitterのオフィシャルアカウント、YouTubeではCircleCIチャンネルに日本語の動画リスト「CircleCI Japanese」もある。セミナーや勉強会などのイベント予告はconnpassから「CircleCI」グループを参照するといいだろう。「ぜひフォローしてください」と舟木氏はセッションを締めた。