Slackを導入するまでの話

f:id:suki_yo_kirai_yo:20161108120839p:plain

自己紹介

どーも、はじめまして。ネコが大好き、こゆいです。
開発推進チームという、開発メンバーがより楽しく効率良く働けるようにするためのチームに所属しています。

社内エンジニアLT大会を企画したり、コミュニケーションツールを導入したり、EFKスタック(Elasticsearch + Fluentd + Kibana)の導入を進めたりなど、業務内容は多岐にわたります。 初回のこの記事はSlack導入周りのお話をしていきたいと思います。
「Slackを導入したいけど、どう進めるのがいいのかなー」と悩んでいる方々の参考になれば幸いです。

読んだら参考になるかもしれない人
  • わりと大人数でSlackを導入したい人
  • わりとセキュリティや費用対効果などを聞かれる事情がある人

弊社のSlackアカウント推移

弊社は企画開発本部のメンバーを中心に、今年の4月からSlackの本格導入を始めました。社内での評価は好評。利用人数はみるみる膨れ上がり、11月現在でレギュラーアカウントは820メンバー、シングルチャンネルアカウントは63メンバーいます。
f:id:kaneko-yu:20161102110636p:plain

Slackを導入する前のお話

Slackを導入する前、既存のメインコミュニケーションツールに不満を持ったメンバーたちは、それぞれが自由に新しいものを導入していっていました。 その結果、下記のようにツールが乱立している状態でした。

  • チャットツール
    • Gmailのチャット機能(ハングアウトではない)
    • Chatwork
  • チケット管理ツール
    • Backlog
    • Trac
    • Redmine
  • Wikiツール
    • Googleサイト
    • BacklogのWiki
    • PukiWiki
    • Basecamp

導入のきっかけ

導入は、とあるチームMTGでの会話がきっかけでした。

BOSS 「コミュニケーションツールがいっぱいあるから、なにかに統一しようよ」
われわれ「ははーm(__)m」
BOSS 「今使ってる中で一番いいのある?新しいツールでもいいよ」
われわれ「調べます!」

そんなわけで、この乱立状況から抜け出すべく、新しいツールの導入も視野に入れて検討することになります。

ツールの選定

Slackの最終的な決め手はこの2点。

  • 他ツールとの連携が容易なこと
  • UIが親しみやすい

2つ目の理由はわりと重要で導入するからにはたくさん使ってもらおうと考えていました。しばらく運用している今、とても大事な要素だったな、と実感しています。

検討段階で迷ったのは、オンプレ版もあるHipChat。しかし、日本語検索では漢字・ひらがなは1文字区切りで検索される*1 ため、検索結果がマッチしないという問題がありました。これを回避するためには「"」でくくらなければならなかったため、要件とはマッチせず、断念。

なお、チケット管理ツールにはJIRAを、WikiツールにはConfluenceを選定しました。

Slackを入れるための交渉

Slackの導入は予算外の案件。導入のために稟議を通す必要がありました。

そこで、プレゼンに必要な資料を制作するために次の2点を検討。

  • Slackのプラン
  • 導入ルール

それぞれの内容は次の項目で紹介します。

プラン選定

対象者は企画開発本部のメンバーで、正社員だけではなく派遣社員や業務委託も含みます。 利用人数は冒頭でも記載した通り700人以上にのぼります。なるべく費用を抑えるべく、社外ユーザはシングルチャンネルアカウントを活用することに決めました。

※Slackでは1有料アカウントにつき5アカウントまでシングルチャンネルアカウントを作れます *2

業務で使う以上、過去ログはすべて検索できるようにしたい。Integrationの数にも制限をしたくなかったため、有料プランで利用することを当初から見越していました。とはいえSlackはお手頃な値段ではありません。 利用人数も多いので、まずは一番小さいStandard Planで予算感の計算を行いました。

弊社ではクラウドサービスを導入する際には、セキュリティ担当者に相談をする必要があります。「完全なログを残せるようにもう1つ上のプランにするように」とのお達しをいただき、最終的にはPlus Planで進めることとなりました。

導入にあたってのルール制定

導入にあたっては以下のようなルールを定めました。

  • 社用PC・社用携帯からのみアクセスする
  • 万が一社用携帯を紛失した時や、ID・パスワードが漏れた時のためにも、Slackに個人情報を記載しない
  • 毎月アカウントの棚卸しをして退職者アカウントをdisabledにする

これらのルールはConfluenceに明文化し、アカウントが渡されたら必ず読むように定められています。

プレゼンで訴求したポイント

上記3点を定めたのち、プレゼンでは次のような内容を訴求しました。

  • 現在のツールと新しいツールの比較、新しいツールのメリット
  • 新しいツールを導入することでどれだけ工数的な削減を見込めるか
  • Slack単体だけでなく、Confluence / JIRA や他ツールとどのように連携して利便性を向上できる見込みがあるのか

上司のプレゼンの甲斐もあり、無事予算確保と導入のGOが出ました。
いよいよここから、実際に導入する準備を始めます。

展開する前のルール決め

Slackを導入した先人の方々のお知恵をもとに、下記の内容は事前に決めておくことにしました。

名前

  • Username
    Gmailのチャットに慣れていたこともあるので、メンションしやすいようにメールアドレスの@前で統一しました。
  • 表示名
    人数が多くなることから、当初はぱっと見で部署がわかるようにLast Nameに部署名を入れて運用していました。ですが 組織変更のたびに表示名を更新する運用は現実的でないと判断してやめることに。
    Last Name にユーザ名を入れるのは、表示名を表示していてもメンションをしやすくするためです。
    • First Name:${日本語フルネーム}
    • Last Name:/ ${Username}
  • チャンネル命名規則
    Slackのチャンネル名はアルファベット順に並びます。チャンネルのカテゴリ分けや親子関係が作れればいいのですが、そうもいきません。ある程度の命名規則をつけることにしました。

21文字制限と、ルールにのっとらない人がいるので、なかなかこの通りにはならないのが現実ですが……。

  • 組織(グループ・チーム) org_{$MLの@前}
  • サービス srv_{$サービス名をわかりやすくしたもの}`
  • プロジェクト prj_{$サービス名をわかりやすくしたもの}_{$プロジェクト名をわかりやすくしたもの}
  • トラブル共有 trb_{$mmdd}_{$概要を示すタイトル}
  • その他特定のコミュニティ oth_{$わかりやすくて一意になるもの}
  • 技術系 x_tec_{$わかりやすくて一意になるもの}
  • 動向系 x_trend_{$わかりやすくて一意になるもの}
  • 分報系 x_tweet_{$メールアドレスの@前}

余談ですが、デフォルトで作られる #general を弊社では #read-only にしました。全員が入っているチャンネルなのでここで会話が始まるとカオスになります。それを避けるために #read-only として、管理者からみなさんへのお知らせをお届けしています。返信はしなくても、リアクションで反応してくれる人もいます。 f:id:ruushu:20161026122416p:plainf:id:ruushu:20161026122421p:plain

channelプチ紹介
命名規則にもあるように、組織やサービスに関わるもの以外にも雑談用チャンネルや質問用チャンネルなど、さまざまなチャンネルがあります。
ここでは一部を紹介します。
  • #read-only
    Slackの仕組み上、有料アカウントがデフォルトでjoinされるchannel。#general から名称変更。Slack管理者からのお知らせ用。全員が入っているのはこのchannelだけ。
  • #x_trend_jvn
    JVNの脆弱性のRSSを拾ってきて、ひたすら通知してくれるchannel。
  • #google-alert
    Googleアラートで「ぐるなび」を拾ってきて、ひたすら通知してくれるchannel。他のプロジェクトのリリースをここで知ったりすることもある。
  • #oth_com_tool
    コミュニケーションツール全般について、駆け込み寺的なchannel。誰に言うでもなく質問すると誰かが答えてくれる。管理者への問い合わせもあったり。
  • #x_tec_scrum
    スクラムの勉強会の人たちのchannel。勉強会に関するやりとりや、スクラムに関する記事を共有しあったりしている。
  • #oth_ddd
    DDD勉強会の人たちのchannel。メインのこのchannelの他に、グループごとのchannelもある。
  • #share_frontend
    フロントエンドエンジニアの情報共有channel。ちなみに命名規則を華麗にスルーしている。
  • #oth_pokemon_go
    ポケモンGO配信後できた業務外の雑談channel。最近は旬が過ぎたのか発言が少ない。

権限

チャンネル系

初めはチャンネルの乱立を恐れてリーダー以上のみpublicチャンネルを作れるという権限設定にしていたのですが、分報を始めたいという需要が高まったので制限を外しました。アーカイブの権限も全員に与え、不要になったものは各自適切にお掃除しましょう、というスタンスにしています。

ただデフォルトがpublicなので、意図せずpublicになってそうなチャンネルが増えてきました。関係者外秘がオープンになってないかこっそりヒヤヒヤしています。

Admin

Slackでは機能によって権限をある程度設定できますが、デフォルトでAdmin以上しかできないものもたくさんあります。

  • publicチャンネルからprivateチャンネルへの変更 *3
  • チャンネル名変更 *4
  • チャンネル削除 *5
  • 他者所有の共有ファイル削除 *6

現在は、リーダーあるいはリーダーから委任されたメンバーにAdmin権限を付与しています。

Customize

emojiやSlackbotの追加権限はデフォルトのままにしているので、こっそり全員に与えられています(ブログに書いている時点でこっそりではないのですが)。「自由にやっていいよ!」とも言っていないので、目ざとく見つけたメンバーは様子をうかがいながら追加しているようです。

Slackbotに関しては、通常の会話にも反応しやすそうなキーワードを設定している人がいて迷惑がかかったりしているので、そろそろ見直しの時期かな、と思っています。

Integration

一番の悩みのタネです。意図せず情報漏洩してしまうとこわいので、今のところ申請制としています。ただ、「いちいち利用申請するとか意味わからん」との声もあります。「自由にbotを作って連携させたい」というエンジニアたちの気持ちもわかるので「基準を決めてある程度は解放できるようにしていきたい」とは思っています。

現在解放しているIntegrationは下記です。

  • Google Calendar
  • Google+ Hangouts
  • JIRA
  • RSS
    • JVNのRSS(http://jvn.jp/)を通知、等
  • Email
    • アラートメールをSlackにも通知、等
  • Incoming WebHook
    • Googleフォームでの社内問い合わせの通知、等

本格導入準備

請求書払いでの支払い

ユーザ数も多いので、本格導入の前にクレジットカードでの支払いから請求書払いに変更しました。*7
ヘルプにも「連絡してね」の一言しか書いていません。連絡したあとはどのような流れで手続きを踏めば良いかわからず不安でしたが、なんとかできました。

この辺りの流れについては、また改めて詳しく記事を書くことにします。

JIRAでアカウント申請プロジェクトを準備

Slackアカウントはアカウント数(正確には利用金額)把握のために招待制としています。
本来であれば入社と同時に払い出しができれば良いのですが、まだ自動化の準備ができていないためアカウント申請をしてもらうことにしました。

せっかくなので、同時に導入をしたJIRAで申請をしてもらうように申請用のプロジェクトを準備しました。

移行についての整理

Gmailのチャットはもともと部屋の概念がないため移行はせず。
Chatworkから移行したい人たちは、ぬくもりのあるコピペで対応してくださいましたw

おわりに

というわけで、去年の5月に社内に導入してほしいツールのアンケートをとってから約1年、時間がかかってしまいましたがなんとか導入ができました。

比較・検証に約3ヶ月。環境構築・トライアルで約6ヶ月。在籍分のアカウントの準備・細かいルールの調整で2ヶ月という感じです。

Confluence / JIRAと一緒に導入を進めていたので、Slackだけならもう少し早く導入できたかもしれません。

トライアルで後悔していることは、本格展開と同様の権限設定でトライアルをしなかったこと。

「そのツールがどんなことができるか」「何をどう使うと便利か」のトライアルにばかり目がいってしまい、「どのような権限設定が適切か」のトライアルができていませんでした。

導入を進める我々は管理者権限、トライアルに協力してくれるメンバーも管理者権限でトライアルをしていたのです。その結果、本格展開後に、「一般権限だとあれができない」「使い方に書いてあるこれがやりたいけど、一般権限だとうまくいかない」等の問い合わせが多くなってしまいました。

管理者権限とは別に一般権限アカウントで使うトライアルもするべきだったなぁ、というのが反省点です。

まだまだ運用方法は模索が続いています。

管理者視点のTIPSがあればまたブログに載せていこうと思います!

次回はSlackを請求書払いにした時の話でも書いてみます。
ではまたっ(・ω・)ノ

追記(2017/05/18)

Slackの請求システムについて書きました。請求書に変更する方法も掲載しているので、よかったらこちらもあわせてご覧ください。

1,000アカウント規模でSlack利用料を請求書払いにした話


お知らせ
ぐるなびでは一緒に働く仲間を募集しています。



こゆい

2011年に新卒で入社。店舗ページ・レストラン向け管理画面の開発経験を経て、現在はより効率良く楽しく開発できるための環境づくりに携わっています。趣味はフットサル、ネコに目がなく、気がついたらデスクはネコグッズであふれています。

'; relatedArticle += ''; createLinkList.push(art.link); if (createLinkList.length == 5) { return false; } }); return [relatedArticle, createLinkList] } var showRecommend = function(items1, items2) { var createLinkList = []; var relatedArticle = '
おすすめ記事
'; } else { relatedArticle += articleList1[0] + '
'; } $('footer.entry-footer').before(relatedArticle); } var feedUrl = "/feed"; var myCategory = $("div.entry-categories a:first-child").text(); if (myCategory != "") { feedUrl = feedUrl + "/category/" + myCategory; } getFeed(feedUrl) .then(function(data) { first_items = parseFeed(data); return first_items; }) .then(function(first_items){ var second_items = []; if (first_items.length < 5 && feedUrl != "/feed") { getFeed("/feed").then(function(data) { second_items = parseFeed(data); return [first_items, second_items]; }) .done(function(items) { showRecommend(items[0], items[1]); }) } else { showRecommend(first_items, second_items); } })
'; //挿入するタイトルのHTML for (var i = 0; i < num; i++ ){ var entry = result.feed.entries[i]; var entryImg = ""; var imgCheck = entry.content.match(/(src="http:)[\S]+((\.jpg)|(\.JPG)|(\.jpeg)|(\.JPEG)|(\.gif)|(\.GIF)|(\.png)|(\.PNG))/); //画像のチェック entryImg += ''; if(entry.link != presentUrl){ container.innerHTML += '
' + entryImg + '
' + entry.title + '
' + '
' //挿入する関連記事のHTML }else{ num ++ //今のリンクのときは、表示せずもう1つ記事を取り出す } } } } } google.setOnLoadCallback(initialize);