エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

今日のリモート雑談テーマを決める魔法のスプレッドシートを運用している話

はじめに

こんにちは。エムスリー AI・機械学習チームの河合(@vaaaaanquish)です。

IT業界にコロナによるリモートワークの大きな波が来て約1年、私達のチームでは、毎日10分程、少なくなった雑談を補う場所として「雑談夕会」を実施しています。 本記事は、その夕会のために私が作成した、雑談テーマを決めるスプレッドシートについてと、その運用に関する報告です。

 

雑談夕会の目的

雑談夕会は、「自分の弱みをさらけ出す」「理解しリスペクトする」という、株式会社FORCASさんの自己紹介定例などの先行事例を参考に、チームリーダーであった西場さんが始めた施策です。 journal.uzabase.com

雑談夕会の大きな目的は「チームラーニング」です。

互いに技術や仕事でリスペクトする事で「学びを与えるような指摘」を気持ちよく行える関係になることを目指しています。

そういった目的の中で、仕事のやり取りにおけるより良い理解やリスペクト、健全なコンフリクトを増やしたい反面で、雑談友会におけるテーマ決めのような準備や雑談の内容、参加自体が誰かの負荷になっては元も子もない、というところから生まれたのがこのスプレッドシートです。

 

魔法のスプレッドシートについて

魔法のスプレッドシートは、社内、内輪向けのテーマについて加筆修正し、以下に公開しています。

docs.google.com

この雑談夕会*1は、過去テックブログでA/Bテスト効果検証の記事などを書いている金山さんがテーマを決めてそれについて話すという形式だったのですが、流石に違ったテーマを用意するの大変になりチームメンバーのコメントも定形化している時期がありました。

そういった実態もあって、このスプレッドシートは生み出されました。

f:id:vaaaaaanquish:20210120181140p:plain:w500
スプレッドシート作成当時のSlackの様子

A列には誰でも追加可能なテーマの一覧、B列C列には、「1度やったかどうか」「(もしあれば)SlackのスレッドURL」の欄があり、新しく参加したメンバーも1つのテーマについて後から楽しむ事もできるスプレッドシートになっています。実際にこのシートを使って「テーマについて1人1言順番に話す」という形で半年以上夕会を実施しています。自由参加ですが、参加率も高く人気の施策の1つです。

  

日付をシードにした乱数生成

やるからにはランダムに雑談テーマを決めたい訳ですが、Google SpreadSheetには「ある任意のシード値を元にある範囲のランダムな値を生成する」ような関数がありません*2。RAND関数を用いることで擬似的に実現できますが、スプレッドシートが開かれる度に再計算されてしまうため、メンバーで共有するスプレッドシート上での目的を達成できません。

 

そこで魔法のスプレッドシートでは、「今日の日付をシードに A列に書かれた雑談テーマの数の範囲で xorshift32による疑似乱数を生成」するようなcellを設置しています。

xorshiftは、George Marsagliaが2003年に提案した古典的な疑似乱数生成アルゴリズムです*3。最初の入りとしては、Wikipediaの解説がこれでもかという程丁寧なのでオススメです。 en.wikipedia.org

計算コストが低く高速で、疑似乱数の周期が非常に大きくなる事から、お手軽な疑似乱数生成アルゴリズムとして知られています。名前の通り、排他的論理和(XOR)とビットシフトを用いており、スプレッドシート上では以下のように日付をseedとして乱数を生成しています。

A1 = TODAY()
A2 = BITXOR(A1, BITAND(BITLSHIFT(A1, 13), 4294967295))
A3 = BITXOR(A2, BITAND(BITRSHIFT(A2, 17), 4294967295))
A4 = BITXOR(A3, BITAND(BITLSHIFT(A3, 5), 4294967295))
A5 = MOD(A4, COUNTA(A:A))+2    // A列の数+2の範囲でMOD

優良なパラメータ(13, 17, 5)を用いたBITLSHIFTとBITRSHIFTによるビットシフト、BITXORによるXOR演算を3回繰り返し行っています。スプレッドシート上での符号なし32ビット整数(4294967295)以内での計算するためにBITANDで毎回値をマスクしています。これは以下を参考にしています。

f:id:vaaaaaanquish:20210120214927p:plain:w250
BITANDを挟まない場合数値が大きくなりスプレッドシート上では計算できない

実際のxorshiftについてや、優良なパラメータについて、ここでの説明は避けますが、調べていく中でも日本語の文献としてかなり参考にしたものを以下に示します。

この仕組みを用いて、私達は毎日違うテーマを誰かが考える事なく雑談する事に成功しています。

 

テーマの内容について

雑談テーマについて、追加を常にチームメンバーから募集しつつも、私が以下のような点を意識しながら多く追加していった結果今の形になっています*4。 これに関しては「チームビルディング 雑談」のような検索を行い、いくつか見聞きした内容から増やしていきました。つまり、特定の検証された論文、書籍等を参考にしたものではないのですが、経験的に良い効果があったものを挙げています。

「興味や動向」「情報収集」に関連したテーマ

「最近の興味や動向」「情報収集」に関連したテーマは、特に「参加してもらう事」を目的に、かなり多く追加しています。特に「今やってみたい技術」「最近読んで面白かったビジネス書」などは、単純に何度も使い回せるだけでなく、お互いに興味について力説し興味の幅を広げる良い刺激になっていますし、情報を提供しあう場にもなっています。例えば、先述の金山さんも効果検証入門*5といった書籍を雑談夕会をきっかけに読み、テックブログを書くに至っています。

www.m3tech.blog

抽象度のグラデーション

多少内容が被ったとしても、抽象度の高いものと低いものを混ぜている事にも効果があると感じています。一見同じようなテーマでも視座が違えば話し方が変わるという理由もありますが、抽象度が低い明確なテーマを毎日話したような相手でないと出来ない抽象度の高い会話が存在する事が大きい要因です(昔は交流会や飲み会を開いたり社内の立ち話がこれらを解決していたと感じています)。雑談スプレッドシートでは、多くなりすぎないように考慮しつつも「抽象度が高いテーマ」「個人として普段あまり外に話さないようなテーマ」を雑談テーマとして織り込んでいます。

例えば「自分が仕事しやすい人」などは普段あまり考えない事も言葉にするきっかけにもなりますし、「何故仕事が進みやすいのか」「他の人にそれを要求できるのか」「自分が変われる事はあるか」などをお互いに話す事に繋がります。最初は少し変な空気になることもあるかもしれませんが、徐々にチームの雰囲気に溶け込んでいったので、あってよかったテーマ群だと私は感じています。

状態の可視化

チームに対する改善点のようなものだったり、個人の不満などもリモートワークの今ではかなり見えづらくなっていると感じます。もちろん自然に出てくるチーム環境であれば良いのはそうですが、メンバーの増減するような環境も相まって難しい所です。実際私達のチームでも「チーム内で暗黙知になっていること」という雑談テーマを行った際に、「他の人がやっている事が見えない」というよくあるような意見が表立って意見として出た事で「プロジェクト共有会をやりましょう!」と行動に移れた事例があります。

 

雑談テーマシートで注意すべきこと

半年運用してみて以下のような注意すべき点もいくつか分かってきています。以下のような注意点があるので、もし同様の施策を実施する場合は闇雲に「このスプレッドシートをすぐ導入」するのではなく、一度開催者が目を通して、チームにあった形で編集して導入する事をオススメします。

ネガティブなテーマの量は減らす

実際シートを作ってみると、「好きな〇〇」に対して簡単に「嫌いな〇〇」といったネガティブなテーマを作る事ができてしまいます。嫌いな〇〇という雑談テーマは、あるプログラミング言語が、あるフレームワークがといった話になるため、同じドメインで仕事をしているチームほど共感を呼びやすく、一時期に非常に盛り上がります。しかし生産的でもないですし、特に誰かの嫌いは誰かの好きでもあるので、増やしすぎない方が良いなと感じています。得られる良い影響も、多くがポジティブな他のテーマで得られます。

雑談の枠を超えない

自由応募のテーマが過激な場合、メンバー個人がセンシティブと感じる情報に触れる場合、内容によって一度発言をパスして考えても思い浮かばない場合など、難しい場面も存在します。そういった場合を考えて、私達のチームではメインテーマの下部に「もしくは好きなラーメンの具」のようなサブテーマをいくつか掲げていたりします。また、先述の疑似乱数生成で示した通り「テーマを羅列している列の長さ」がパラメータになっている事を利用して、テーマが非常に悪い場合は最下部に空行を追加するなどしてその場で「テーマガチャを引きなおす」ことも行っています。もちろんリモート雑談ですので、夕会の時間にbotがシェアしてくれるスプレッドシートのテーマを先んじて見ることで「今日は参加しない」等の選択肢も存在しています。

f:id:vaaaaaanquish:20210120231049p:plain
夕会bot
雑談夕会は基本盛り上がります*6、過去チーム内で何かあったという訳ではないのですが、強制力や嫌な想いをする人が出ないような仕組み作りも大切だなと私は考えています。

 

おわりに

今回は、私達のチームで運用している「リモート雑談テーマを決める魔法のスプレッドシート」を紹介しました。

ちょうど半年の運用でテーマが周ってきた事や、最近「しまった夕会すっぽかした…一日の楽しみが…」というチームメンバーの投稿を見たりして、これは1つ書いてみようと思い立って書きました。私達のチームでは盛り上がっているこの施策ですが、前述の通り注意すべき点も存在しますし、このような施策は効果の数値化が難しく、エンジニアの時間を毎日10分使う程の価値があるのかという難儀な点も抱えています。また機会があった際には、そういった点についても考察が書ければと思っています(今回は乱数生成というテック要素を入れてテックブログとして誤魔化しましたが次は出来るかどうか…と思っています)。

 

We are hiring!

エムスリーでは、こういった施策やプロジェクト1つ1つをメンバーが提案し実施できる風土があります。興味を持ってくださった方はぜひ下記リンクからご応募ください。

エンジニアリンググループ 募集一覧 / エムスリー

jobs.m3.com

   

*1:元々は進捗報告会だったのですが、1年半程前に当時チームリーダーだった西場さん主導で進捗報告と切り分け「互いを知る会」に変えていきました

*2:乱数生成ではRANDBETWEEN関数などがありますがシード値を設定できません RANDBETWEEN - ドキュメント エディタ ヘルプ

*3:Marsaglia (July 2003). “Xorshift RNGs”. Journal of Statistical Software Vol. 8 (Issue 14). http://www.jstatsoft.org/v08/i14/

*4:6〜8割くらいは私が考えたはずです

*5:https://www.amazon.co.jp/%E5%8A%B9%E6%9E%9C%E6%A4%9C%E8%A8%BC%E5%85%A5%E9%96%80%E3%80%9C%E6%AD%A3%E3%81%97%E3%81%84%E6%AF%94%E8%BC%83%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%9B%A0%E6%9E%9C%E6%8E%A8%E8%AB%96-%E8%A8%88%E9%87%8F%E7%B5%8C%E6%B8%88%E5%AD%A6%E3%81%AE%E5%9F%BA%E7%A4%8E-%E5%AE%89%E4%BA%95-%E7%BF%94%E5%A4%AA/dp/4297111179

*6:もちろん私自身も意識的に盛り上げるようにしています