チャットが1対1のみである以上、三人以上の会話が起きるのは Korat ではグループです。その形は二つあります。大半は投稿です。グループ投稿はコミュニティ ID を持つ posts テーブルの普通の行なので、コメントもメンションも通知も検索も、並行して作り直すことなくそのまま動きます。それと並んで、グループはサブルームを持てます——グループの中に並ぶ Discord 風のテキストチャンネルで、独自の権限と独自の既読状態を持ちます。サブルームは意図的に薄く作ってあり、どれだけ薄いかは下の囲みにそのまま書いてあります。
グループ投稿とは、住所を持ったフィード投稿のこと
Korat のグループについて理解すべき、もっとも影響の大きい一点です。グループに投稿するとき、あなたは自分のフィードに出すのとまったく同じオブジェクトを作っています。同じリアクション、同じコメント、実在のハンドルに解決される同じ @メンション、同じ編集と削除、同じ通知の配管。フィードにある機能が欠けた二級のグループコメント機能は存在しません。
グループ ID が変えるのは、投稿がどこに現れるかだけです。グループ投稿はコードのちょうど一箇所でメインのフィードから除外されるので、メンバーとたまたま友だちである全員のタイムラインに漏れ出すことなく、グループの中に留まります。一箇所の一つのフィルターであることは、挙動が一貫している理由でもあります。どこか別の場所にある二つめの除外ルールが、最初のものと食い違っていく、ということが起きません。
実利は、Korat のグループが最初からフィードと同じだけの能力を持ち、改善が両方に同時に届くことです。代償は正直に、下に書いてあります。グループのサブルームはメッセンジャーではなく、グループの残る半分は投稿の板です。
グループのサブルームはメッセンジャーではありません。 ダイレクトチャットは1対1で、グループに変えることはできません。グループのサブルームが運べるのは送信と自分の投稿の削除ができるプレーンテキストだけで、メッセージの編集も、特定のメッセージへの返信も、リアクションも、写真・ファイル・音声メッセージの添付も、通話もできません。
ですから5人で今すぐ速いやりとりをすること自体は、サブルームの中で、プレーンテキストでならできます。できないのは、そのやりとりにダイレクトなスレッドが持つ添付・リアクション・通話を添えることです。グループの残って検索できてコメントできる半分は、本物の役割と本物の参加手続きを備えた投稿の板のほうです。
公開と承認制、そして「承認制」が実際に意味すること
グループを作るときに決めるのは、名前、説明、カテゴリ、公開か承認制か、そしてルールの文章です。ルール欄は飾りではありません。ルールを書かないグループにも結局ルールはでき、その日たまたまモデレートしていた人がその場で作り、メンバーはそれを破ってはじめて存在を知ります。
承認制グループは参加リクエストを使います。誰かが参加を申請し、オーナーか管理者が承認または却下します。申請者は保留中のリクエストを自分で取り消せるので、来ない決定を待ち続けて詰まることがありません。両側に通知が行きます——リクエストが届いたら管理者に、承認されたら申請者に。沈黙のなかに消えるリクエストは、あらゆるグループ機能で最もよくある失敗で、承認時の通知はその最も安い解決です。
グループの状態はタップしたあとではなく、タップする前に見えます。承認制のグループにはカードに鍵アイコンが付くので、「参加する」と「参加を申請する」の違いが、まだ決めている途中で見えます。ボタンが、次の画面で断られることを約束してはいけません。
バッジ付きの一つのリストではなく、四つのリスト
グループ画面は、関係を小さなバッジで伝える一本のリストではなく、件数付きの見出しで区切られたセクションに分かれています。自分が管理するグループ、参加しているグループ、申請中、探す、そしてそのすべてを横断する検索です。
これはもともと「マイグループ」という一本のリストで、作り直しました。4つの行は4つの違うことを意味するからです。自分がオーナーのグループには設定と、待っているリクエストの列があります。参加を申請しただけのグループにはまだ何もありません。見出し付きのセクションに件数とともに分けることで、「自分が対処すべきことはあるか」がひと目で答えられます。30番目に埋もれた行のバッジでは答えられません。
役割と、グループを引き渡すこと
役割は3つ——オーナー、管理者、メンバー——で、名前の隣にバッジとして表示されます。オーナーと管理者はメンバーの役割変更、メンバーの除名、グループ設定の編集、グループの削除ができます。そしてオーナー権限の譲渡があります。これは聞こえるより重要です。オーナーがアプリを使わなくなり、鍵を渡せないグループは、設定画面が施錠されたままゆっくり死んでいきます。
Korat の原則は、バックエンドが拒否する操作は最初から提示しない、というものです。オーナーには「グループを退会」の項目がありません。退会すればグループが孤児になるからです。抜けたいオーナーの道は、先にオーナー権限を譲ることです。グループの削除やメンバーの除名といった破壊的な操作は、何が起きるかだけでなく何は起きないかもはっきり書いた確認の裏にあります。人がためらう理由の多くは、最悪の結末を勝手に想像することだからです。
決定に対応した通知
グループの通知は4種類で、それぞれが誰かが知る必要のある瞬間に対応しています。参加しているグループの新しい投稿、管理者に届く参加リクエスト、自分のリクエストが承認されたこと、そして自分の役割が変わったこと。
最初の一つは初期になく、その結果、投稿があったことをメンバーが単に知らないまま、放置されたように見えるグループができました。同じ失敗はのちに店舗の注文でも起きました。誰にも知らされないコンテンツを生む機能は、静かな機能ではなく壊れた機能です。
グループを外へ共有する
グループは Korat の他の部分と同じ不透明なリンクの仕組みで共有できます。koratland.com/s/<token> の URL で、ランダムな14文字のトークンがアプリ内で解決されます。解決側が返すのはトークンが指す対象の種類とどの対象かだけで、誰が共有したかも何回開かれたかも明かしません。公開の場に貼った勧誘リンクは、貼った人について何の情報も運びません。
グループの投稿はグループ id を持っているだけのフィードの投稿そのものです。順位表つきのランニング仲間やチームがほしいならスポーツクラブのほうです。サブルームはどちらにも同じものがあり、違うのは順位表です。
趣味の集まりではなくお店のチームを管理したいなら、担当者ごとの権限はビジネスコンソールにあります。通報したあとに何が起きるかはセキュリティのページです。