清家氏の自己紹介

清家史郎氏:よろしくお願いいたします。はじめに自己紹介をさせてください。株式会社Fusicの清家史郎と申します。今日は時間がないので、「僕とBacklog」というかたちで、Backlog歴みたいなものを話します。Fusicの入社歴と一緒で8年目です。電話では「今の会話、Backlogで書いときますね」みたいに会話しています。

そんな僕のBacklogの利用状況と、発生した課題についてBacklog APIとOpenAIによるアプローチをして、その結果みたいなところを話したいと思っています。

Backlogへの依存度状況

まずBacklogの利用状況ですが、入社して8年目です。さまざまな案件に参加してきました。結果、BacklogのTopページではスクショでは収まらないほどのプロジェクトに参加していて、コミュニティ活動にもBacklogを使っているものが多数あるので、Backlogへの依存度は高いほうなのかなと思っています。

なぜそんなBacklogを使っているかですが、何をいつまでにやるべきか、そうなった経緯、作業に必要な情報みたいなところを集約できるところですね。これらの情報をお客さまと共有して進められるのが非常にうれしくて、経緯まで知られる利点に気づいて、お客さまも会話の記録を自らBacklogに書いてくれるようになりました。これも、冒頭の自己紹介での口癖になっている理由ですね。結局、すごく便利なんですね。

ログをBacklogに集約してきた結果、起きた課題

ここまでの話では、基本的にはBacklogですべて解決すると思われると思うんですが、実際にはちょっとだけ課題が発生していました。

Wikiも活用して、すべてのログをBacklogに集約してきたんですが、結果何が起きたのかというと、過集約とも取れる状態になっていました。自分のキャパシティを超え始めたというかたちです。

もう1つです。本当の優先度が不明瞭になるようなことも発生しました。プロジェクトの指標設定や意識の統一ができていない状態ですね。その場合は、それぞれの主観ベースで優先度が設定されていたと思います。

結果、本当の優先度かはわからないんですが、本質的に優先度が低い課題みたいなものが残骸のように配置されているようなことが発生してしまいました。(スライドを示して)ちなみに、このプロジェクトは統合されて使われなくなったプロジェクトなので安心してください。

あとは、プロジェクトを跨いだ優先度設定の難易度みたいなところですね。けっこう同時並行でプロジェクトが進んだりするので、優先順位の決定の難易度が向上していっていると感じていました。

余談ですが、(登壇予定のBacklogが)整理されているので、すごくしっかり「この日はこれをするよ」みたいなところがはっきりしているのは良かったです。

他にも判断への不安みたいなところもありました。本当の優先度を自分自身で判断したいところで、むやみに優先度を利用しないし、お客さまに対しても優先度を利用しない方針にしてもらうということをしていたんですが、優先度がすべて一律な状態みたいな感じになっていました。

これをプロジェクトを横断して見た時に、自分の判断がそうしているのか、お客さまの判断がそうしているのか。お客さまA、B、C、誰の判断なのかみたいなところを判断する指標が、実はブレているみたいなところを感じるようになりました。

というわけで、どれに取りかかっていいのかみたいなところの優先度に課題を感じていました。

Backlog APIとOpenAIを使ったアプローチ

そこで今回は、Backlog APIとOpenAIを使ったアプローチについて話したいと思っています。

まずはBacklog APIについておさらいですね。みなさま知っているとおり、BacklogはAPIが使えます。課題、Wiki、ファイルの追加など、ブラウザ上のBacklogでできる操作の大部分をAPIから行うことができます。

(スライドを示して)では実際に何ができるのかを一覧化すると、こんな状態ですね。その数でだいたい154。圧倒的なんですね。逆にできないことを説明したほうがいいんじゃないかというぐらい、いろいろなことができます。

APIのドキュメントも充実していて、何ができるのか、どのようにアクセスするのか、どのようなレスポンスボディが返ってくるのかを確認できるAPIのドキュメントもあります。エンジニアからすると、ドキュメントが充実しているAPIを触らせてくれる、わりと天国な状況なのかなと思っています。

あとは、認証と認可の仕組みもかなりしっかりしていて、API Keyと呼ばれるもの(があるの)と、あとはOAuth 2.0の仕組みですね。

Backlog APIを使って何を実現したいのかで選択可能なんですが、基本的にAPI Keyは非常に簡単です。API Keyを発行してHTTP要求にのせるだけで認証が行えます。

自分で利用する範囲で考えると、こちらで十分対応可能な手段だと思っています。設定もけっこう簡単で、(Backlogの)個人設定画面のAPIにて、簡単に発行が可能です。

ただし、簡単に発行できるんですが、API Keyの取り扱いには注意しましょう。漏れるとプロジェクトの中身が見えてしまうようなことが発生してしまうので、ここは注意が必要です。

あともう1つはOAuth 2.0のところです。Web認証した後にAPIアクセスさせるような挙動も可能になっています。また、これは連携するWebアプリケーションを構築する場合にも非常に有用です。

実際に「Azure」とかSaaSとか、MicrosoftのADとか、それぞれのところに入力するようなやつがけっこうあるんですが、Client_Secretがとてもセンシティブなものになっているので、取り扱いに注意しましょう。

ここまでの基盤を提供しているのは普通にすごいなと思っていて、世界で戦っているアプリケーションだということを実感することができたかなと思います。

OpenAIについて

その世界で戦っているBacklogと同じように、とても有名なOpenAIについてお話しします。

(スライドを示して)ここをちゃんと話していきたいです。OpenAIの目的ですね。フレンドリーなAIを開発し、AIの恩恵を全人類に公平に分配することを提示しています。

研究を公開してオープンソースプロジェクトとして推進しているということで、すばらしいものなのかなと。そのおかげで僕たちは恩恵を受けているわけだということを話しておきたいなと思いました。

「ChatGPT」です。いわゆるGPTと呼ばれる自然言語処理の分野で使用される大規模なTransformerベースのモデルですが、要はChatGPTみたいなことができるという言語モデルですね。

あとは、テキストの記述から新しい画像を生成する「DALL·E」とかですね。(スライドを示して)ここにいるみなさんは知っていると思いますが、こういったモデルも、その他のモデルも提供していたりします。

その他にも、OpenAIのライブラリをオープンソースとして公開しているので、今回はこのOpenAIのライブラリを使って、実際に内容を使って確保していきます。

OpenAIのライブラリ「Chat Completions API」

(スライドを示して)ここは長いので割愛しているんですが、その中で「Chat Completions API」というものを使います。「これは何なのか?」ですが、GPT-3やGPT-4のような強力な言語モデルを利用して、ユーザーが入力したテキストに基づいて自然言語で応答するAPIですね。いわゆるChatGPTみたいなものをAPIベースでできるものと考えてもらえればと思います。

柔軟な応答やカスタマイズが可能で、あとはスケーラビリティ、簡単な統合。セキュリティとプライバシーみたいなところがちゃんと守られているし、利用した分だけ支払いができるところも、すごく有用なんじゃないかなと思っています。

ChatGPTのオプトアウト

(スライドを示して)説明がちょっと長くなっているんですが、これは触れたほうがいいと思うので。ChatGPTのオプトアウトについてですね。基本的にChatGPTは常に学習を行っています。そのため、業務利用するデータ入力に慎重にならざるを得ないのかなと思っています。

そこで、オプトアウトという申請があって、基本的にはそちらを行うことで、そのアカウントからの入力を学習しないように設定することが可能になります。

逆にChat Completions APIは、アカウントには、ユーザーアカウントの入力データをモデルのトレーニングには直接使用することはないと書かれていました。

ただ、これら規約も変わる可能性があるので、一応ちゃんと常にウォッチをしておいたほうがいいのかなとは思っています。

Backlogのデータからタスクを抽出して優先度を決める

OpenAIの説明が長くなってきたんですが、さっそく組み合わせたところの話をしようかなと思います。

まずはBacklogのデータをOpenAIに投げる方法を考えないといけないので、Backlogのデータ構造の確認からですね。基本的にはプロジェクト側で課題があって、その課題にみなさんのコメントを書いてもらうかたちでプロジェクトが進んでいるのかなと思っています。

実際にAPIのデータを確認していくと、「projectID」や「issueID」commentIDみたいなものが関連となって、親子関係、孫関係みたいなものが構築されていることがわかります。この構造から自分のタスクを抽出して、タスクの優先順位を考察していきます。

最近僕が投稿したなにかしらの課題というのは、自分が関連している、かつ稼働中である可能性が高い。まだ動いているので優先すべき可能性が高いということで、課題を抽出する必要があると思います。

なので、自分のコメントから課題を取得して、完了になっているものを除外した課題を抽出します。すると、自分が関連しているであろう稼働中の課題が抽出できます。

あとは、単純に自分が担当者になっている課題ですね。

こちらも完了になっているものを除外して取得することによって、最終的に自分が担当しているであろう、関連しているであろうタスクを抽出しています。

(スライドを示して)これらの課題は実際にもうコメントがついてくるところになるので……。左下のものは、みんながコメントした経緯がわかるという話。これらの課題にひも付けられているコメントを取得する必要があります。それが上のほうに書いてありますね。

これで自分が関連している課題のコメントまで、全部抽出できたような状態になっていますが、ここでOpenAIに渡すプロンプトの調整を行います。文字が小さいので書いてあるところをざっくり読んでいくと、フォーマットを伝えて、依頼内容を伝えて、例を提示して、実際の情報を与えるというような構成になっています。

情報を与えるところはですね、先ほど捕まえたフォーマットをデータから再現して、念のためライブラリを利用して、個人情報の削除まで行っています。ただ、これは完璧ではないので、そもそも個人情報はBacklogのコメントに書かないように徹底する必要があるのかなと思います。

出力結果の確認

結果どういった状態になったのかです。案件の情報を出すわけにはいかないので、僕の仕事であるエバンジェリスト業と技術広報のところを集約して出力してみました。

最優先になったのが、来週の月曜日に弊社のオンラインイベントがあるため、速やかに集客を行う必要があるというところですね。はい、今最優先でやりました。

(会場笑)

もう1つです。これも自然に上がってきたんですが、4社で合同のイベントをするという地方でやるイベントがあるんですが。関係者の期待が大きいかまではわからなかったんですが、関係者が多いイベントは、多く集客したほうがいいよねというところは、自然に学んできたのかなと思います。オンラインもありますので、みなさんもしよかったら参加してください。

壁打ち役としては十分

最後です。ちょっと恥ずかしいので削除しているんですが、「なにか重要なイベントにて、取り上げてもらうために実績を積む必要がある」ということが書いてあります。これは「やりたいな」という気持ちと、「優先度高」の優先度が一致している状態ですね。

あとは、優先度中のところに「イベント運営が確定しているなら準備しないといけないよね」とか。「スピーカーになっているから準備しないといけないよね」みたいなところは「優先度中」としています。

最後に、そもそもイベントの詳細がぜんぜんないとか、遠い未来のイベントですが、1月、2月、3月などの優先度が実際に低いものは、「優先度低」に書かれていました。実際、「まだ進んでいないから後で決めるのでいいよね」ということで上がってきているのかなと思います。

壁打ち役としては十分だなと思いました。間違っているところもありますが、壁打ちしながら優先順位をつけられるというのが、すごく重要なのかなというところです。

ちょっと細かい話で、「Embeddings APIを使わないの?」みたいなことを不安に思ったりするかもしれないですが、データが分散することへの不安が生じたのと、Backlog APIのレート制限を確認すると、デフォルトで1分間のAPIレート制限があるのですが、これは利用するのに十分すぎるAPIレートでした。「GPT-4 Turbo」とBacklogのAPIレートを信じても問題ないのかなと思っています。

余談ですが、ヌーラボさん(株式会社ヌーラボ)がこのプロポーザルを投げ終わった後に、OpenAIを利用したAI要約機能をリリースされたので、使っていきましょう。

Backlogにすべてを集約すると情報の宝庫になる

まとめです。Backlogにすべてを集約すると、情報の宝庫になります。Backlogを使っていきましょう。Backlog APIを使うとエンジニアが解き放たれるので、Backlog APIを使っていきましょう。OpenAIを使うと、完璧なわけではないですが、大枠は外しません。壁打ち役として使っていきましょう。

Backlogは生成系AIを使った要約機能を出しています。みなさま、ぜひ使っていきましょうというかたちで、この発表を終わりたいと思います。ありがとうございました。