組織急拡大中なので人事がGASを使ってみた

[ABEJA Advent Calendar 2019](https://qiita.com/advent-calendar/2019/abeja) 22日目です。

## はじめに 
2020年も東京オリンピックも、まだまだ先のことだと思っていたんですが、今年の気分でいられるのも、あと9日なんですね。時はAdvent Calendar真っ盛り。

1年を振り返ると、ABEJAは社員数が倍になりました。ご縁には至らなかった方々も含めて、ありがたいことに新しい多くの出会いがありました。
人事的な視点、というととっても大げさですが、急拡大する組織の中でも人間関係が希薄化しない会社でありたいなと思っており、いい機会なので1つ試しに作ってみました。

Qiitaでの記事作成は今回が初めてですが、いい機会にして不定期に今後も書いていこうと思います。アイコンは[今年訪れたトルコ](https://torus.abejainc.com/n/nada016865f7a?magazine_key=m0763ca553fee)でのものです。

## 取り組み
### 問題意識
さてさて、ABEJAは現在、正社員で80名を超える会社です。自分が入社した2013年当時は7名＋インターン生数名という状態で、ありがたいことに組織が10倍になる過程を一通り過ごすことができました。現在のオフィスは4つ目で、全員がワンフロアという点にこだわってきたので、そんな社内になっています。事業部毎にや、職種別でしきりがある、という会社でもありません。

ところが、ある時からこんな声が聞こえて来るようになりました。
 
 - 新しく入ってくれた方の名前を覚えきれない（from 既存メンバー）
 - 自己紹介をする機会は多いけど、皆の名前を覚えきれない（from 新メンバー）

確かに、自分は人事として採用プロセスの中で何度もコミュニケーションさせていただくことと、そもそも割と早い時期から会社にいるので、時間を長く共に過ごす中で知り得たことも多かったのですが、ある日突然新しい仲間同士になる対象者が増えて行くと、業務上コミュニケーションの多い/少ないで
お互いを知れる機会に差が出てしまうなあと。

けれど、ABEJAに入ってくれる方は一人ずつ非常に面白い考えや経験を持つ方ばかりなので、個人的にはよりお互いが知り合えている状態にしたい気持ちがあります。
そこで、今回は既に社内にあるものを使って、メンバーの情報が目に触れる状態を作ってみます。


### マインドセット

 - 目標達成に必要なことのみをする
 - 要件を明確に定義する
 - 先人の知恵は宝

というのが、以前初めて日々の業務効率のためにpythonであることをしようと考えた際、

1. 目的を深く理解しないまま、本どおりにまず[Atom](https://atom.io/)を入れ、その後社内のエンジニアメンバーに聞いて[Google colab](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)上で簡単に記述ができ、あの時間は何だったのかと回想したり

2. 要件がふんわりのまま走り出し、いいね数が多い事実を心の担保に[Anaconda](https://www.anaconda.com/)を入れようとして、流石にtoo muchやろとダウンロード中に冷静になり中断したり、

3. ちょっとしたbotを作りたかっただけなのに、気づいたら[Heroku](https://jp.heroku.com/)のアカウント作成をしようとしていたり、
 
お恥ずかしい話ですが、目的とゴールの最短達成を意識しないと、いつまで経っても先に進まないという体験がありました。そこで今回は、エンジニアでない人がちょっと技術を使うだけで、できることがあるよというメッセージと共に、寄り道せずにゴールを目指します。

### slackbotをGASで動かす
ABEJAは社内の情報共有に[Docbase](https://docbase.io/)を使っています。
その中には、常勤役員、社員、アルバイト、インターン、業務委託等、普段顔を合わせる皆の自己紹介ページもあります。
であればと、自己紹介ページが目に触れる状態を作るために、Slackで毎日ランダムにメンバーの自己紹介ページが投稿される状態を今回のゴールとします。

最初はpythonでDocbase内の必要なURLを取ってくることを考えましたが、今の自分が最短でゴールを達成するために行ったのが以下です。

 - Docbase上の全員分の自己紹介ページリンクをスプレッドシートに移す（手動）
 - ランダムにリンクを取得して、Slack botで投稿をする
 
<img width="309" alt="スクリーンショット 2019-12-22 3.06.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112381/0b464b54-72b1-57fa-8f8c-a357e754e121.png">



作成過程の動きを確認するために、こっそり、てっきとうなチャンネルを作りました。
<img width="789" alt="スクリーンショット 2019-12-21 22.58.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112381/d2abf1f0-f391-dc99-7efd-9c7a7f1772c7.png">


世の中の先人たちの知恵をお借りして、GASに書いていきます。ABEJAはスペイン語でみつばちの意味なので、蜂の絵文字を入れておきます。

```javascript

function myFunction()
{
  postSlack("今日紹介するメンバーはこちら〜🐝");
}

function postSlack(text)
{
  var url = "https://hooks.slack.com/services/XXXX";
  var options = {
    "method"  : "POST",
    "headers" : {"Content-type":"application/json"},
    "payload" : '{"text":"' + text + '"}'
  };
  UrlFetchApp.fetch(url, options);
}

```

この下に、先ほどのスプレッドシートからランダムにリンクを取得する記述をし、最終的にはABEJAの始業時間10:00（10:00-15:00コアタイム）をslackbot投稿のトリガーに設定します。作成途中は、毎分投稿される設定で試しました。

```javascript
function readSpreadSheet()
{
  var id = "XXXX";
  var spreadsheet = SpreadsheetApp.openById(id);           
  var sheet = spreadsheet.getSheetByName('役員・正社員リスト');        
  var range = sheet.getRange('C:C');                 
  Logger.log('%s', range.getValue());
}

function randomMessage()
{
  var sheet = getSheet('役員・正社員リスト');
  var range = sheet.getRange('C:C');
  var values = range.getValues();

  var messages = dropNullItemFromArray(values);

  var message_number = Math.floor(Math.random()* messages.length);
  postSlack(messages[message_number]);
}
```

<img width="343" alt="スクリーンショット 2019-12-22 2.26.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112381/48b2cf6d-bd49-9ccf-4d2c-d08d736d1789.png">

（最初他の選択肢が思いつかず☆だった所、ある時ABEJAの由来を設定するという工程がバレバレですね。）

さて困ったのは、リンクを持ってくる所が1度しかこの時点で成功していない点です。
期待した挙動にならない→推測でいじる→一度成功したことに気づかず更に別の箇所もいじるという。

<img width="1168" alt="スクリーンショット 2019-12-22 2.27.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112381/c8e97526-719d-2150-861d-38e42380d2cc.png">


最終的には、スプレッドシート内のシートにあるリンクを取りに行く工程、それを投稿する工程のトリガーを正しく設定できていなかっただけでした。末尾90のリンクが取得されがちに見えますが、この時点ではリストに常勤役員5名分しか入れておらず、挙動が期待通りなことを確認してから全員分を追加しました。
<img width="283" alt="スクリーンショット 2019-12-22 2.23.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112381/17a10ce4-a48e-aa56-bbd2-8794b4bdd2e3.png">

週明けからは、1人チャンネル内ではなくpublicに投稿されるようにしてみよう。

### 更にやりたいこと
とはいえ、今回の取り組みは我ながら本当に最低限度だなあと思うので、以下は年末年始休みの宿題にします。

 - Docbaseのリンク取得の自動化
 - Docbaseの自己紹介ページ内に掲載がある画像をサムネイルとして、一緒に投稿される状態
 - そもそもの課題の特定と、今回のツールに縛られない解決策の策定


## まとめ
ABEJAはフェーズの様々な複数の事業を有す会社でありつつ、事業間シナジーを通じて全体でのエコシステムの創出を目指しています。
事業成長に向けて、事務的に人が増えていくということではなく、多様なバックグラウンドを持つメンバーが集い連携しあうことで、会社から世の中への提供価値を増やしていけると個人的には思っています。
「イノベーションで世界を変える」という大きなビジョンに向かうためには、いいものを持ったメンバー同士が集まっているからこそ、あの人は何をやってきたどんな人、というのが社内でよりわかりやすくなることで、仕事がしやすくなる場面は多々あるんじゃないかな。

リアルとオンライン施策を組み合わせながら、組織拡大と、居心地のよさやメンバー間シナジーを生みやすい構造の両方を達成していきたいと思っています。

ありがとうございました。