Leverages Tech Blog

Leveragesの技術ブログ

配属0日目の新卒がSlackに匿名で投稿できる機能をつけた話。

f:id:t-motoyama-lvgs:20180718151811p:plain

はじめに

わたしはだれ?

こんにちは!この4月から新卒で入社したTMです。 学部の専攻はデザインで、フリーペーパーやアニメーションを作っていました。 今はエンジニアとして参画していて、社会からの洗礼を受けているところです。楽しい。

この記事の概要

社内改善のために、Slackで匿名投稿できる機能を作りました。 AWSのLambdaや、Slack APIを主に利用しており、試験運用中です。

そもそもの発端

Slackのオープン運用

f:id:t-motoyama-lvgs:20180718151934p:plain

社内の風通しを良くするために、publicチャンネルで発言しようというSlack文化を広めています。 こうすることで、社内の情報のキャッチアップがしやすくなったり、一体感を生むことができたりしています。

使いやすいようにカスタマイズ中

運用していく中で、もっとこうしたほうがいい、こんな機能が必要なのではないかと試行錯誤しています。1人につき1つpublicチャンネルがあったり、DocBaseというサービスと連携したり、どんどん使いやすくしているところです。

意見を気軽に言いづらい?

f:id:t-motoyama-lvgs:20180718151939p:plain:w460

そんな中で、Slack内外問わず、社内に対する改善意見や不満を直接では言いづらい人がいるという噂を聞きました。ほんとかなあ?と思いつつ、確かに会社の規模を考えればそういう人がいてもおかしくは無さそうです。

原因は何か

そもそも、意見や不満を発信することによって、何か不利益を被ってしまうのが怖いのではないかなと考えました。そんな怖い会社ではないはずなのですが。多分。

解決するためには

発言した内容が、発言した個人と結びついてしまうことが1つネックになっているのでは?

匿名投稿できるようにしよう

Slack上の特定のチャンネルで匿名で意見を投稿できるようにしてみたら、今まで拾えなかった貴重な意見や不満を拾えるのではないかと思いました。実際やってみないとわからないよね、ということで実験的に作り、運用しています。

実際にやったこと

使った技術

f:id:t-motoyama-lvgs:20180718151947p:plain

AWS Lambda

今回はトリガー自体が単純であることと、イベント発生数が少ない(おそらく)ので、使いました。社内の別のプロジェクトでもちらほら使われているようです。

Slack API(スラッシュコマンドとBot

Slackって誰がタイピングしているのかわかりますよね。全員が機能をoffにすれば別ですが、それはだるい。いい方法はないかなと調べた(試した)ところ、なんとスラッシュコマンド中はタイピング出ないんですね。嬉しい。

留意点

スラッシュコマンドは3秒以内にレスポンスを返さないといけないという制約があるので、Lambda_1からLambda_2を呼びつつ、一旦レスポンスを返しています。

const AWS = require('aws-sdk');

exports.handler = (event, content, callback) => {

  const functionName = process.env.PROCESSER_FUNCTION;

  let lambda = new AWS.Lambda();
  let params = {
    FunctionName: functionName,
    InvocationType: 'Event',
    LogType: 'Tail',
    Payload: JSON.stringify(event)
  };

  // ここでLambda_2を呼び出す
  lambda.invoke(params, (err, data) => {
    if (err) console.error(err);
  });

  // 一旦レスポンスを返す
  callback(null, event);
};

できたもの

以下のように入力すると・・・

/anonymous hogehoge

f:id:t-motoyama-lvgs:20180718152008p:plain

Anonymousというbotとして投稿されます!  f:id:t-motoyama-lvgs:20180718152016p:plain

制作期間は企画を含めて2週間でした。 アイコンは、温かみと生き物感があるものにしようということで、今の猫になりました。名前は「あのにゃー(非公式)」です。

工夫したところ

うっかり実名投稿してしまうのを防止するために、自分のDMからもチャンネル指定で投稿できます。

/anonymous #meyasubako hogehoge

現在は#meyasubako(目安箱)みたいな意見投稿用チャンネルのみに投稿できるようLambda側でfilterをかけています。

つまづいたところ

Lambdaでの実装をローカルで試すのが難しいです。sam-cliというのでローカルテストはできます。ただ、今回はLambdaからLambdaを呼び出すところがすんなりいきませんでした。どうしても解決できず、AWSにテスト用環境を作ってやりました。

運用をはじめて

実際にこんな投稿がありました

こんな軽めの投稿や・・・ ※社内のミニコンビニの話 f:id:t-motoyama-lvgs:20180718152036p:plain

時差出勤に対するちょっとガチな要望・・・ f:id:t-motoyama-lvgs:20180718152043p:plain

そしてオープンSlackへの改善意見・・・ f:id:t-motoyama-lvgs:20180718152047p:plain

今のところのGood

溜め込んだり、プライベートで話していたりしただけではただの不満や愚痴で終わっていたコンテンツが、たとえ匿名でもオープンな場で発信されることによって、いろんな人が考える機会を得ることになっていると思います。

今のところのBad

軽いのから重いのまでありますが、何か改善意見や不満が発信されたときに、実際に解決のために動く機構が存在していないことが問題かもしれないなと思います。

今後について

機能試験も含めて小規模な人数で運用していましたが、現在は徐々に規模を拡大しています。人伝てに広げていくのが、チャンネルを気持ちよく運用するのにちょうどいいかなと思います。ある程度運用したら、本当に意味があるのか検証します。

おわりに

配属最初のタスクが、これでした。社内の課題に対して向き合いつつ、AWSの利用やSlackのカスタマイズなど今まで経験のないことを同時にしたので、すごく脳汁を分泌しました。が、これがレバの新卒なんだなあという感じです。

運用の結果がでたら、そのときにまたブログでご報告します。ではでは。