ランサーズ(Lancers)エンジニアブログ > イベント/登壇 > ランサーズ開発合宿2022 ① Amazon Comprehendを用いたSlackチャンネルの感情分析アプリ

ランサーズ開発合宿2022 ① Amazon Comprehendを用いたSlackチャンネルの感情分析アプリ

ohira.koki|2022年11月02日
イベント/登壇

1. はじめに

プロダクト開発部の大平 (@kokitecture)です!

この記事では、10月に開催しましたランサーズ開発合宿2022のレポートを書こうと思います!

今回の開発合宿では、いくつかのチームに分かれてアウトプットを行いました。なので今後それぞれのチームレポートを公開していく予定です。

今回はその第1弾となります!

2. ランサーズ開発合宿2022 概要

まずはランサーズ開発合宿2022の概要を紹介します

ランサーズの開発合宿は、3年ぶりで、今回が6回目となります!コロナも少しずつ収まってきて、久しぶりのオフラインでの集合になりました!

以下が概要です。

テーマ 未来へのアウトプット
スケジュール 1泊2日。チェックアウト前の1時間で発表を行いました。
参加人数 22人 (エンジニア/デザイナー/PdM/etc..)
場所 熱海。とても風情のある旅館でリフレッシュに最適でした ○
アウトプットについて 2~4人のチームに分かれ、それぞれ自由にアウトプットを行いました。成果物・発表の形式も各チームにお任せです!

普段は違う場所・違うチームで働くメンバーとも顔を合わせ、会話も弾み、楽しさ満点の時間でした。中には初顔合わせの方もいたりして、やっぱオフラインも大事だな〜。

3. チーム成果: Slackチャンネルの感情分析アプリ

発表スライド: 長峰謙さんによるToday’s Report

では、ここからは自分達のチームのアウトプットを共有します。

自分達のチームは、Slackチャンネルの感情分析アプリを作成しました!

チームメンバーは以下の3人で、それぞれの得意領域を活かそうと考えた結果それになりました。(下画像の手前3人)

仕様説明

ランサーズでは分報チャンネル、timesと言う、その日やることや気づいたことなど、自由に呟くチャンネルを1人ひとつ持っています。

今回作ったアプリでは、この分報チャンネルから、そのチャンネルのオーナーがその日に呟いたコメントを抽出し、その日1日の感情分析を行うものを作りました。
以下が実際の動作です。分析結果に対して、Botが気の効いたコメントを返してくれます。

注: 動作確認のためにわざとネガティブなコメントをしています (笑)

レスポンスがランダムなので、毎日違う返答が帰ってきます

構成紹介

アプリの構成は以下のようになっています。メインの処理はGASで書き、感情分析の部分はAmazon Comprehendを利用しています。

Amazon Comprehendの詳しい仕様はこちらをご確認下さい!https://aws.amazon.com/jp/comprehend/

以下が実際にAmazon Comprehendにリクエストを投げている部分になります。
引数textListにその日の投稿を与えており、レスポンスにはPositive, Negative, Neutrul, Mixedの4項目の数値がそれぞれ返ってきます。それらの数値を計算し、その感情に合わせたコメントを返すようにしました。

function predictSentiment(textList){
  AWS.init("XXXXX", "XXXXXX");

  const req = {
    service: "comprehend",
    region: "ap-northeast-1",
    action: "Comprehend_20171127.DetectSentiment",
    method: "POST",
    params: {},
    headers: { "Content-Type": "application/x-amz-json-1.1" },
    payload: { LanguageCode: "ja", Text: textList.join(" ") },
  }
  
  const res = AWS.request(
    req.service,
    req.region,
    req.action,
    req.params,
    req.method,
    req.payload,
    req.headers
  );

  if(res.getResponseCode() < 200 || res.getResponseCode() >= 300){
    throw new Error("Amazon Comprehend DetectSentiment API の呼び出しでエラーがでました。" + JSON.stringify(res));
  }

  return {
    code: res.getResponseCode(),
    headers: res.getHeaders(),
    payload: JSON.parse(res.getContentText()),
  };
}

参考: https://akkinoc.dev/posts/2022/05/18/google-sheets-with-amazon-comprehend/

発表の様子

4. さいごに

いつもとは違う場所で、まとまった作業時間を確保でき、チームビルディングも含め開発合宿はとても濃い時間を過ごせました!

これから順次開発合宿レポートが展開されていく予定です。それぞれのチームのアウトプットは結構質が高かったので、是非そちらもお読み頂ければと思います!

最後までお読みいただきありがとうございました!