Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

新卒メンバー全員でシャッフルランチをつくり、PDCAサイクルを回してみました(前編)

こんにちは、2018年4月に新卒でRettyに入社し、現在はプロダクト部門でWebプランナーを担当している山田陸です。

2018年の新卒入社は、総合職が私を含めて盛山、武藤、私の3名、エンジニア職が神、諏訪、堤、山田、の4名、計7名います。今回は、新卒で入社した私たちが入社後に初めて企画・開発した「シャッフルランチ」について、メンバーを代表して私とエンジニアの堤からご紹介します。

f:id:rettydev:20180925184148j:plain ▲入社式の記念撮影(2018年4月、メッセージフラッグを囲む7名が新卒メンバー)

1.なぜシャッフルランチなのか?

(1) 研修中に得た気づき

今年の新卒入社研修は、職種を問わず新卒メンバー全員が参加する研修が2週間ほど行われました。同期間、私たちは毎日、話してみたい先輩社員に声をかけ、ランチに出かけていました。

それぞれのチームの仕事内容や雰囲気などについて、ざっくばらんに話を聞くことがランチの主な目的でしたが、先輩たちからは「以前よりも社員同士の交流が減っている気がする」といった声がありました。

社員数は100名を超え、部署の数も増え、顔を合わせる機会の少ないメンバーが増えていると感じていたようです。

成長と共に組織が拡大するベンチャー企業ではよくある話だと思い、当初はこの課題に対して私たち自身が何かするという発想はありませんでした。しかし、研修では「チームで動いてこそ、大きな成果を生み出すことができる」という話を繰り返し聞き、Rettyではいかにチームワークを重視しているかについて知ったことで、改めてこの課題に向き合うことを考えました。

(2) 課題解決方法の検討とシャッフルランチの決定

  入社して1週間が経過した4/9(月)の研修後に新卒メンバー全員で集まり、他社の事例なども参考にアイデアを出し合いました。そうして検討が始まったのが、他社でも導入事例が増えている「シャッフルランチ」です。グルメサービスを運営するRettyでは、「User Happy」なサービスを提供するために、まずは社員自身が「食」を楽しむことを大切にしています。部門や職種の垣根を超えた交流を活性化する方法としても、「食」に関わることの方が、Rettyらしいと思いました。また、「シャッフルランチ」であれば、2週間の研修期間の中でも企画・開発し、研修後もPDCAサイクルを回すことができそうだと判断しました。

早速、研修期間のランチで感じた課題や、それを解消したい旨を研修責任者に伝え、新卒メンバーのプロジェクトとして取り組むことが決定し、4/13(金)には全社員が集まる総会でも発表しました。

開発に向けて、まずはトライアルとしての運用フローを検討しました。私たちが考えたフローは、下記です。

  • 社内のコミュニケーションツールSlackに、シャッフルしたメンバーのチャンネルを自動で作成
  • 新卒メンバーが音頭を取りながらお店選び、予約などを実施
  • シャッフルメンバーでランチ
  • ランチ後にメンバーにアンケートを実施

まずは上記のフローでトライアルを実施し、シャッフルランチが上手くいきそうかどうかを検証することにしました。

2.シャッフルランチシステムの開発

新卒エンジニアの堤です。

ここからは、神、諏訪、山田、堤の4名による新卒エンジニアチームで行った、シャッフルランチ導入までの取り組みを紹介します。

(1) 技術選定と役割分担

シャッフルランチを新卒プロジェクトとして決めたのが4/9(月)ですが、それを社内で発表しデモを動かすのを4/13(金)の総会の日に設定しました。 そのため作業期間は4日、しかも日中は研修のため、空き時間を使っての短い時間で作り上げる必要がありました。 そこで新卒エンジニア4人で相談し、サービスの仕様や構成、役割分担を決定し、各自進めていきました。

  • 仕様
    • 社員のランチ出欠をSpreadSheet上に保存しておく
    • 決まった日時に、ランチ参加社員をシャッフルしてグループを複数作成
    • Slackにてグループチャットを作成し、ランチを促す
    • Googleカレンダーにランチの予定を登録
  • 構成
  • 役割分担
    • DB連携機能
    • 環境構築・スケジューリング
    • Slack連携機能・Googleカレンダー連携機能
    • ランダムシャッフル

全社発表の日までにデモを実行できるまで作成し、5月の半ばに最初のバージョンを完成させてトライしました。

(2) 実際の動作

実際に作動させた場合、Slack上でグループを作成した後、このようにメッセージを投げてシャッフルランチを促します。 f:id:rettydev:20180925103139p:plain

(3) 構成について

今回は機能がシンプルなため、GAS + SpreadSheet(DB) + Slack(UI) とすることで、サーバを用意せず準備・運用の手間を省く構成としました。 GASとは、

Google Apps Script は、Googleが提供するサーバーサイド・スクリプト環境です1

GASの詳細は省きますが、簡単なWebアプリケーションや定期実行スクリプトJavaScriptで作成し、動作させることができます。 また、GASを利用するときにデータベースが必要な場合は、SpreadSheetが一緒に用いられます。GASからのアクセスが簡単で、かつSQLの知識がなくともデータベースを編集できるという利点があります。今回参加者リストを管理したのですが、新卒総合職もリストを編集・閲覧する必要があり、この利点が活きました。 また、UIとしてSlackを利用しています。理由として、

  • 社内で日常的にコミュニケーションツールとして利用されている
  • APIが充実している

ことが挙げられます。 Slack連携やこれら全体の連結は、新卒エンジニアの諏訪が行ってくれました。

(4) SpreadSheet連携

GASでSpreadSheetを利用するに当たって、表を配列として扱う必要があります。2 読み込み・書き込み時に配列への操作が必要となるため、例えば次のようなSheetがあった場合に、

id team user
0 営業 Shogo
1 App Yutaka
2 検索 Shiho
3 経理 Taro

3行目のuser列の値を取り出す操作は以下のようになります。

// シートを取得
var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1');
// 3行目
var rowIndex = 3;
var colStartIndex = 2;
var rowNum = 1;
var colNum = 1;
var data1 = sheet.getRange(rowIndex, colStartIndex, rowNum, colNum).getValues();
// または
var sheetData = sheet.getValues();
var data2 = sheetData[rowIndex][colStartIndex];

ただ、これだと1行目のタイトル行の扱いが面倒だったり、数値での列指定のため列の追加に弱かったりします。そこで、新卒エンジニアの山田が以下のライブラリを作ってくれました。

https://5hyn3.github.io/posts/use-spreadsheets-from-gas-without-thinking-about-difficulties/

詳細はリンク先で書かれていますが、SpreadSheetの各行をオブジェクトとして扱えるようにし、上記の問題点を解決してくれました。また、updateやsave等のメソッド作成により、DBを扱うようにSpreadSheetを扱えるようになりました。

(5) サービスの運用と課題

最初のトライアル実施までに、念入りに新卒メンバーでテストしていたこともあり、無事社員をシャッフルしてランチに行くことができました。 ただ、いくつか足りないこと、やりたいことが数回のトライアル実施を通じて挙がってきました。次回の記事では、挙がった課題とその解決策についてお話します。