「くまごろう」に実装された4つの機能

では「くまごろう」にはどんなことができるのか、今回実装した機能をいくつか説明します。「くまごろう」をはアジャイル開発していて、こんな機能を実装したいという案で、見送ったものもいくつかあるんですが、そちらもこの場で少し紹介したいと思います。

まず実際に実装した機能なんですが、1点目はスマートスピーカーの呼び出し機能、先ほど説明したウェイクワードの変更です。「ねえ、くまごろう」で反応する機能を実装しました。

2点目は、issueボードやタスクボードの表示機能です。我々のチームが普段使っているGitLabというツールのタスクボードは、タスクの一覧を表示する画面を表示したり、担当者のアサインやプロジェクトごとにラベルを付けたりできるのですが、そういったラベルやアサイン、担当者で絞り込んだissueボードやタスクボードを開く機能を実装しました。

3点目は、スクラムイベントの開始通知機能です。各スクラムイベントの開始時間になったら、「くまごろう」が教えてくれる機能になります。4点目は、我々の開発環境で障害が起きたときに、その障害をメンバーへ通知して初動対応をしてくれる機能です。こちらは、このあともう少し深堀りして説明します。

右側にあるのが見送り案ですね。チームとしてこんな機能を実装したい、と出たんですが、今回はちょっと時間の関係やセキュリティの関係で、見送った内容が右側の機能です。まず、サービスが売れたお知らせですね。自分たちが開発しているサービスが売れたときに「くまごろう」が教えてくれれば、開発のモチベーションが上がるんじゃないかという意見から出た機能です。

他にも、打ち合わせの準備で会議室の予約や、今だとZoomやMicrosoft Teamsといったリモート会議が増えているので、そういった場を作る準備を「くまごろう」にしてもらいたいという案が出ました。それ以外では、トイレの混雑状況を確認する案もあって、私たちが普段開発している拠点のトイレの数が少し少ないので、「くまごろう」に聞いたらすぐに教えてくれるとうれしいといった機能の案も出ました。

最後に工数の自動算出と書いてあるのが、どれだけ成果を出したか、どれだけ開発ができたか、アジャイル開発では工数を「ベロシティ」というのですが、それを自動算出する機能になります。

4つの機能の詳細と実装の手順

実装したい機能の案がさまざま出てきたんですが、今回はその中で実装した4つの機能を深堀りして説明したいと思います。

まず1点目は、スマートスピーカーの呼び出し機能ですね。これは、Google Assistantが「ねえ、くまごろう」で反応する機能で、実装方法はSnowboyを使っています。Snowboyは音声学習用のWebサービスで、Web上で3回声を録音するだけで(Google) Assistantが反応するための基になるファイル、ウェイクワード用のファイルを作成してくれるツールです。

こちらを使ってみたんですが、私たちのチームでは問題点が2つありました。まず1つ目は、チーム内で反応しづらい人が出たということです。Snowboyのサービスの仕様上、録音したあとに、男性か女性かということと、年代層の情報を登録しないといけないんですね。年代層は、10間隔で情報を登録しないといけなくて、今回私たちは男性の20代と設定したんですが、そうすると、チーム内の30代や40代、その他の年代の方々がいくら「ねえ、くまごろう」と呼んでも反応しませんでした。

また、他のワードでも反応してしまうという課題がありまして、始めは「ねえ、くまごろう」で録音したんですが、他の関係ないワードに「くまごろう」が反応してしまうというのが起きました。「これはなんでだろう?」「ザワザワしているだけで反応するなあ」といった雑談にも反応してしまって、結局「ザワザワ」という言葉が一番反応率が高かったです。 こちらに関しては、すごく静かな環境で「ねえ、くまごろう」を録音し直すことで今は改善しています。

「ねえ、くまごろう」の簡単な実装手順なんですけれど、まずSnowboyへアクセスをして録音、性別や年代層の情報を登録します。そうすることでウェイクワード用のファイルの作成ができます。

Raspberry Pi上では、Snowboyが提供しているPythonファイルをダウンロードして、ウェイクワード用のファイルを配置します。配置したウェイクワード用のファイルを、環境変数としてソースコード上で定義して、Snowboyの関数の中に引数として渡し、実装しています。

2点目は、issueボード、タスクボードの表示機能を実装しました。これは、例えば「くまごろう」に「issueボードを開いて」と伝えると、「くまごろう」がGitLabのissueボードをディスプレイに表示してくれる機能です。担当者のアサインや、プロジェクトのラベルで絞り込んだissueボードも表示してくれる機能になっています。

この機能の大きなポイントは、「issueボードを開いて」というような、自分たちが好きな言葉で「くまごろう」に処理をさせることができることです。実装手順を簡単に説明すると、ウェイクワード反応後の関数、つまり「ねえ、くまごろう」で反応した後の関数に、反応させたいキーワードをif文で記載します。反応させたいキーワードにヒットしたif文の中で、実際に処理をさせたい内容を記載して、機能を実装しています。

3点目は、スクラムイベントの開始通知機能を実装しました。例はデイリースクラムですね。毎日の朝会が開始される10時半になったときに、「くまごろう」が「これからデイリースクラム(Daily Scrum)を始めます」と、チームメンバーにしゃべりかけて教えてくれる機能になります。これはOpen JTalkというオープンソースで実装をしています。

Open JTalkは、テキストから自由な音声を生成できる音声合成システムとなっていて、この機能のポイントは、好きな言葉を「くまごろう」にしゃべらせられることです。例えば、「これからデイリースクラムを始めます」といった、自分たちがしゃべらせたい言葉をしゃべらせることができる、というのが大きなポイントになっています。

実装手順を簡単に説明すると、Open JTalkが提供しているシェルがあるので、それをRaspberry Piへ配置します。そして、話させたいキーワードを引数にして、シェルを実行させます。ここでも問題点が2つあって、1点目は、英語と日本語の混在で話すのが難しいというのがありました。例えば「issueボード」のissueを英語で、ボードを片仮名で記載すると、Open JTalkは「アイ エス エス ユー イー ボード」と、英語をアルファベットで読んでしまうんですね。これは、上記のソースコードに書かれているように、片仮名で「イシューボード」と表記することで解決できます。

また、単純に文字を記載するだけだと抑揚がなく、抑揚のチューニングが難しいのも1つあります。句読点やスペース、小文字の「あいうえお」などを入れることで、なるべく抑揚をつけた話し方ができるんですが、チューニングするのが大変だという課題があります。

4点目は、検証環境、開発環境の障害時のメンバーへの通知と初動対応で、機能の概要は、我々が普段使っている開発環境、検証環境でサーバに障害が起きたときに、私たちのチームがいつも使っているコミュニケーションツールのSlackで、エラーの通知をしてくれるというものです。また、障害が起きたときは、「くまごろう」が「このサーバで障害が起きた」ということを音声で通知してくれます。

機能実装において苦労したこと

ここまで、実装した機能をいくつか紹介しましたが、実装した中で苦労したところもいくつかあります。

1点目はセキュリティ強化の実施で、「くまごろう」は日々の業務改善のためのツールではあるんですが、もちろんセキュリティの対策をしています。例えば、スマートスピーカーは音声のインターフェイスなので、音声を拾える範囲や反応する声を絞る対策や、実装する機能にもよるんですが、アクセスできるネットワークや、サービスの権限といったサービスを使える範囲を制限することに苦労しました。

2点目は、「くまごろう」がスマートデバイスとして扱われてしまうということです。既存のスマートスピーカーの製品と、「くまごろう」の違いを説明したんですが、「くまごろう」はスマートデバイス、例えばエアコンやスマートライフと同じように扱われてしまいます。私たちも当初は「くまごろう」に自由にしゃべらせたり、スクラムイベントの開始の通知はアプリから簡単に設定できるんじゃないかと思って取り組み始めたんですが、進めてみると「くまごろう」はスマートデバイスなので、そういった設定ができませんでした。この理由から、先ほど説明したような実装方法で、「くまごろう」には機能追加をしています。

3点目は、そもそも実装以前に、スピーカーの設定にかなり苦戦したことです。「くまごろう」は、Raspberry Piにディスプレイやマイク、スピーカーを付けているんですが、そのスピーカーの部分にBluetooth接続しようとしたところ、なぜか設定がうまくいかずBluetoothから音が出ませんでした。結局早期解決ができなかったので、有線のスピーカーにして解決しようとしたんですが、有線にしてもスピーカー用の設定ファイルの編集や、スピーカーを変えるたびに設定ファイルを変更する必要があったり、実装以前のRaspberry Piを使うところで、かなり苦労しました。

「くまごろう」はアジャイル開発のコミュニケーションの部分で成果を出している

こういった課題もあったんですが、導入後の成果としては、デイリースクラムやスプリントプランニングといったスクラムイベントが、毎回5分から10分ほど短縮され、スクラムマスターの準備が不要になりました。また、実装の中で、エンジニアのワクワク感や新しい技術の習得、普段触れない技術の習得も成果としてあります。

我々の開発は、基本的にモブプログラミングと呼ばれる、ペアプログラミングのような複数人で1つの画面を見て開発するという手法を取っていたので、チームメンバー全体の新しい技術の習得にもつながっていったと思っています。また、「くまごろう」は音声インターフェイスなので、話かけると話してくれるツールになっていて、チームのムードメーカーとしても役立っています。

アジャイル開発の重要なコミュニケーションという部分で、とても成果が出たんじゃないかなと思っています。

「くまごろう」の今後の展望

今後の展望なんですが、今は(「くまごろう」には)簡単なスクラムイベントの進行しかしてもらっていないんですが、今後は話した内容の議事録を取ってもらったり、今はアサインやプロジェクトのラベルの簡単な検索しかできていないんですが、それらを組み合わせたような検索など、柔軟なissueの検索ができたり、その日の出席人数によって、このイベントは誰々が何分、といったような柔軟なタイムキーパーもできたりしたらいいなと構想しています。

2点目は、障害時の対応の拡充ですね。今は初動対応として、メンバーへの通知やエラーメッセージの通知しかしていないんですが、今後は正常性確認や障害時の対応の拡充ができたらなと考えています。

今後の展望の3点目は、リモートワークの対応ですね。コロナの影響でリモートワークが増えている中、我々のチームも現状は基本的にリモートワークで対応しているんですが、これがいつまで続くか。今後もリモートワークが増えていくのが予想されますので、「くまごろう」もリモートワークの業務改善、業務効率化へつなげていければなと考えています。

以上で発表を終わりたいと思います。ご清聴ありがとうございました。