クラスSlackを作った

クラスLINEってだいたいどこにでもありますよね。そこで連絡事項が流れたり,質問が飛んだり。んで,今回はLINEグループの代わりにSlackワークスペースを作りました,という記事です。

うちのクラスSlackは決して成功したモデルではないと思うんですが,私が開発した個々の機能自体は別に悪い子じゃないと思うので,成功した方々がぜひこの記事を参考にしてより良いワークスペースにすることができたらとても嬉しいです。

botソースコードを公開しているので,良ければ利用してください。

github.com

作った理由

サークル2つ入ったら2つとも部員間のコミュニケーションにSlackを使っていて,便利そうだなーと思いました。クラスでは駒場祭やオリ合宿などいろいろなイベントが同時に進行していくので,チャンネルを分けて話題が流れないようにできるととても嬉しいです。あと,「駒場祭グル作りました!参加する人は個チャください!」→個チャ→招待→参加承認という流れが非常に鬱陶しく,参加以前の投稿は見えないので人が集まり切るまで投稿ができないなど,LINEのこの辺の不便さがとても嫌いなんですよね。

また,当時クラスLINEはひんやりしていた一方で一部メンバーからなる雑談グルは毎日わいわいしていたので,クラス全体に雑談の場を設ければもっと仲良くなれるんじゃないかな,というのもあります。

Slackの長所

  • 話題ごとにチャンネルを分かれる
    • 例えば駒場祭の話とオリ合宿の話を同時並行できる
    • クラス内に雑談をする場ができる
  • リアクション機能によってメッセージを流すことなく反応ができる
    • コミュニケーションの活性化
  • 部分集合グループを作るのが楽(上述)
    • パブリックなのでとてもよろしい
  • Botを作るのが楽
    • チャンネル分けによりBotがうるさくても事務連絡が流れない

Slackの短所

  • 導入コスト (「LINEでよくね?」)
  • メッセージが10,000件までしか保存できない
    • 有料プランには学割がありますが,問い合わせたところ大学公認の団体である証明がない我がクラスのワークスペースに学割は適用されないそうです。
  • LINEのスタンプが使えない (と不満な人がいるかもしれない)
  • 既読がつかない

まず,コミュニティ外部の人間との一時的な連絡手段(ex. 授業で一緒になった他のクラスと合同のグループを作る)にSlackは向きません。閉鎖的なコミュニティの中で開放的な部分集合をたくさん作ったり,話題を同時並行で進めたりするのにSlackは向いています。要するにクラスです。
また,ここからは東大特有の話ですが,大学入学時点でSlackを使ったことがある人は少なく,オリエンテーションの時期からSlackを使わせるのは難しいと思います。Wi-Fiが微弱な1号館で,ただでさえ忙しい顔合わせでSlackのインストールとアカウント登録までしてもらうのは厳しいでしょう。この時期下クラとの連絡網は非常に重要なので,やるならしっかりやらなければなりません。おそらくあの場で一番効率的な連絡先収集方法はLINEだと思います。Slackを導入するなら色々落ち着いた後の方が良いでしょう。

チャンネル一覧

f:id:pizzacat83:20181203111606p:plain:w200
チャンネル一覧

長いですねー。Tree viewにしてほしいとの要望があったのでChrome拡張でも作れば良さそうなんですが,まだ作れていません。

命名規則は,

  • 科目ごとの勉強チャンネル: st-*
  • 雑談チャンネル: z-
  • それ以外: 出来るだけ英数字で始まる適当な名前

英数字から始めるのは,変換不要にすることで入力を楽にするためです。後に日本語が来る分には自動補完で解決できるので。

komabasaiとかorientationとかはどのクラスにもありそうなチャンネルですが,それ以外のチャンネルについては後で詳しく説明していきたいと思います。

基本設定

基本的にデフォルトでOKです。ワークスペース参加時に自動で入るチャンネルがデフォルトではrandomgeneralだけなので,komabasaiとかorientationとかも追加してあげましょう。

また,おやすみモードはデフォルトでオフにしておくことをおすすめします。おやすみモードを知らない人からすれば「通知がこないよ😠」となってしまうし,いざという時に@channelで人が集まらないです。デフォルトでオフにしておいて,おやすみモードを使いたい人は自分で設定しましょう,という運用が良いと私は思います。

カスタム絵文字

Slackの醍醐味ですね。現在117個登録されています。大体の感情表現には困らないです。ほとんどが文字列絵文字で,私の性格を反映してか煽るタイプの絵文字がとても多いです。

ここは絵文字一覧をお見せすべきところなんでしょうが,教員の絵文字とかお見苦しい内輪ネタとかが多くてちょっとね。ご想像にお任せします。

formula: 数式入力

数式は人権なので,/formulaというコマンドで数式を書けるようにします。

f:id:pizzacat83:20190302223521p:plain:w400

$…$や$$…$$を含む文章を投げるといい感じにしてくれます。

f:id:pizzacat83:20190302224206p:plain:w500

色々できます。

f:id:pizzacat83:20190302225046p:plain:w200

f:id:pizzacat83:20190302225255p:plain:w200

技術的な話は別記事に書きました。大した分量ではないけど。

question: チャンネルメンバーにメンション

特定のチャンネルのメンバー全員にメンションするコマンド/questionです。 f:id:pizzacat83:20190302225858p:plain:w300

チャンネルの外から担当者に呼びかける時に使えます。

announcementとannouncement-sub

全体の色々を書いたので,個々のチャンネルの話に移りたいと思います。

announcement

announcementは色々なお知らせが流れるチャンネルです。

宿題リマインダー

これまで手動で/remindしていたんですが,最近Googleカレンダーに移行しています。直前と朝と週の初めに自動でリマインドしてくれるの嬉しいですね。前日にあればもっと嬉しいのだけれど,作れってことですかね。はい。

教務課からのお知らせ

前期教養の学生が定期的に見るよう強要される掲示板がいくつかあって,「教務課からのお知らせ」はログイン不要でアクセスできるので,これの更新情報を流します。RSSがあればいいんですが残念ながらないので,作ります。Feed43というサービスを使うと,お好きなWebページをスクレイピングしてRSSフィードにすることができます。

feed43.com

あとは/feedでsubscribeすればOKです。

ただ,教務課からのお知らせには1年向けと2年向けがあり,違う学年のお知らせは鬱陶しいので排除します。教務課は「1年向け」「2年向け」というページを用意してるんですが,漏れていることが発覚したので自分で1年向けを抽出します。だめじゃん。Feed43にそんな便利機能はないので,IFTTTと組み合わせます。

まず,RSSのitem, link, content欄をそれぞれタイトル,リンク,対象学年を表す画像へのリンクにします。設定済みのRSSフィードこちら

次に,IFTTT PlatformでRSS Feed→SlackのAppletを作ります。IFTTTじゃなくてIFTTT PlatformなのはFilterを差し込むためです。入力項目は適当に埋めましょう。で,contentに書いてある画像へのURLから対象学年を判断するFilterを書きます。抽出がへたくそでいろんなゴミがくっついてきたときのために,完全一致ではなく部分一致でやります。あと仕様が変わったときに,間違って投稿されることはあっても間違ってスキップされないようなコードを心がけます。

おしまい。

announcement-sub

announcement-subは諸施設のTwitterなど,広報の中に大事な情報が混じってるものを流すところです。重要そうなものは私が手動でannouncementに貼ります。全員参加のチャンネルではありません。現在は図書館と学生自治会TwitterがIFTTTによって流れます。また,ログイン必要なUTASの掲示一覧も流れるようにしようとしたんですが,未だにバグらせていて悲しいです。

slack意見箱

これは改善の要望を書くところです。改善といっても「この絵文字作って」レベルのものから色々あります。

f:id:pizzacat83:20181203140437p:plain:w400

近いうちにやると決めたことは✋で,進行中は✍️で,終わったことは✔️でリアクションします。has::emoji:で検索すると各段階のタスクの一覧が出るので便利。他のワークスペースでも使ってる簡易なタスク管理方法です。複数人でやるときはassignされた人のアイコンもリアクションしておくと良さそうです。

匿名でも投稿できるようにGoogleフォームを置いてます。送信すると自動でSlackに投稿されます。たった7行です。

drive-log

クラスのGoogleドライブフォルダがあるんですが,そこのファイル更新履歴を流します。技術的な話は別記事にします。

f:id:pizzacat83:20190302230608p:plain:w300

seashore

私が所属するサークルTSGのSlackには #sandbox というチャンネルがあって,24時間以上経過したメッセージが自動で削除されます。ピン留めされたものは削除されません。各種botを試すのに使ったり,bot開発時に試しに投稿を流したりするのに使います。ちなみに #seashore という名前は砂浜に描いた文字が定期的に波でかき消される様子から来ています。

slackbotレスポンス

ワークスペースにデフォルトでいる@USLACKBOTことslackbotは,開発不要で「Aと言われたらBと返す」機能があります。同じAに複数のBを登録するとランダムで返すので,ガチャが作れます。

  • サイコロ:「サイコロ」って言うと1〜6が出る
  • ルーレット:「ルーレット」って言うと0〜9が出る
  • 評定ガチャ:「評定ガチャ」って言うと不可〜優上が出る
  • 逆評定ガチャ:「逆評定ガチャ」って言うと大鬼〜大仏が出る
  • 必修ガチャ:「必修ガチャ」って言うと必修科目がランダムで出る
  • 絵文字ガチャ:カスタム絵文字がランダムで出る

また,「一日一独作文」と言うとドイツ語の和文独訳問題の和文が出るガチャも作ったんですが,教科書の進度に合わせて手動で追加するのが面倒で最初の方の問題しか出ません。こんな使い方もできます。

本日のユータスくん

前期課程のWebサイトには 本日のユータスくんというコーナーがあります。おそらく毎日欠かさず「教務課からのお知らせ」を見に行かせるためのモチベーションなんでしょうが,#announcement のおかげで見る機会がなくなってしまったので,自動で #seashore に投稿されるようにしています。実装は適当にスクレイピングするだけです。

f:id:pizzacat83:20190302232207p:plain:w300

あとがき

Slackはbotの開発にはうってつけです。みんなもSlackのbotを作ろう。