OpenROVとDiscourse

Jeff Atwood
Jun 15, 2015 • 9 min read

私たちがDiscourseをオープンソースプロジェクトとして評価する際に使うのは、一つのシンプルな指標です。それは、Discourseのコミュニティが機能しているかどうかということです。あなたのコミュニティは機能していますか?私たちは先日、OpenROVの**Brian Adamsにインタビュー**を行い、彼らがDiscourseをどのように活用しているか、またコミュニティで機能していること・していないことについて具体的な話を聞きました。

OpenROVとは何ですか?

OpenROVは製品であり、コミュニティでもあります。製品としては、低コストながら高い性能を持つ遠隔操作水中ビークル(ROV)をキットとして販売しています。すべてオープンソースのハードウェアとソフトウェアで構成されており、組み立てには週末程度の時間がかかりますが、完成後はラップトップからROVを操縦しながら、水面下最大75M(ヤンキー流に言えば246フィート)からのHD映像をストリーミングで受け取ることができます。コミュニティは50か国にまたがる国際的なものです。メーカー、探検家、トレジャーハンター、教育者、大学の研究者、政府機関、そしてプログラマーなどが参加しています。

ちなみに、プログラマーの方々へ:これはNode.js、Linux、Arduinoで動作するレーザー搭載の水中ロボットです!ぜひ参加してみてください :slight_smile:

いつ始まったのですか?

OpenROVは2010年にEric StackpoleとDavid Langによって始まりました。彼らの目標は、水で満たされた洞窟の奥深くに埋もれた財宝を発見できる超小型ROVを作ることでした。彼らはこのアイデアを参加希望者に広く公開し、ROVの開発を手伝うアイデアをさまざまな人々が持ち寄ったオンラインフォーラムを作りました。2012年には、キットを誰でも入手できるようにするためのKickstarterキャンペーンを大成功させました。このKickstarterが私たちを世に知らしめるきっかけとなりました。

コミュニティはいつ形成されたのですか?

コミュニティは最初から存在していたため、水中ロボットに関する議論はおよそ5年間続いていることになります!こちらが最初の投稿です

コミュニティはどのようにつながっていたのですか?

何らかのフォーラムやBBSシステムなしに全員と交流しようとすることは、私には想像もできません。

2015年1月に、Discourseへの移行を決断されました。移行のきっかけは何だったのでしょうか?

私たちは最初、Ningを使って始めました。当時のNingはまだ多くの資金を背景に注目を集めていました。すぐに使えるコミュニティ構築ソリューションとしては優れたものでした。しかし5年後、Ningは方針を転換し、フォーラムやその他のコミュニティツールへの投資を止めてしまいました。イノベーションの欠如とコミュニティ構築への注力不足は、深刻な問題でした。

Kickstarterを終えた私たちは、できるだけ多くの人々の手にROVを届けることに集中していました。成長というビジョンを実現するためには、サポートと励ましの両方を提供できる健全で活気あるコミュニティが鍵でした。心の中では、新しいフォーラムソリューションへの移行を遅らせれば遅らせるほど、移行が難しくなると分かっていました。そこで1月に思い切って踏み出しました。

5000人のコミュニティをDiscourseに移行されました。(技術的な)移行プロセスはどのようなものでしたか?

私たちの場合、Discourseへの移行にあたって乗り越えるべき重要な技術的ハードルがいくつかありました。

  1. 最も不安だったのは、NingからすべてのデータをDiscourseに移行することでした。コミュニティのアイデンティティを反映した貴重なデータやディスカッションが存在しており、それを失う余裕はありませんでした。Discourseチームのネイルが移行の主な窓口となりました。その時点での私の仕事は、Ningからデータを取り出すことだけでした。幸い、巨大なJSONフィードや旧フォーラムのほとんどのアセット(動画や写真)をダンプするエクスポートツールが存在しており、なんとか機能してくれました。ネイルはそのエクスポートデータを使ってサンドボックスサイトを作成し、私たちがログインして確認できるようにしてくれました。サンドボックスサイトは大変役に立ち、実際のコンテンツで公開する前にフォーラムのあらゆる側面をカスタマイズすることができました。サンドボックスを使って移行に失敗したエッジケースを見つけ、ネイルが修正を加えてデータセットを再読み込みしてくれました。移行で失ったのは、アクティビティ、閲覧数、いいね数のみでした。それらのデータはエクスポートファイルに物理的に存在していなかったことが分かりました。
  2. 2つ目の大きなハードルは**シングルサインオン(SSO)**でした。Ningはブログ、フォーラム、フォトギャラリー、その他多くのミニアプリを一つの巨大なエコシステムに統合したサービスでした。Wordpressとそのモジュール群によく似ています。これらすべてのアプリケーション間で単一の認証が共有されていることは、当たり前のように見過ごされがちです。Discourseを選んだ際、私たちは単一の統合ソリューションではなく、フォーラム、ブログなどのベストオブクラスのサービスを組み合わせて使うことを選んでいました。私たちにとっての統合とは、すべてのサービスに透過的にサインインできる単一のアイデンティティを意味していました。認証ソリューションとしてAuth0を選んだのですが、当初Discourseのメタフォーラムを調べた際、Auth0プラグインが利用可能だと確認していました。しかしDiscourseのホスト型ソリューションへの移行を進めていくうちに、スタンダードプランやビジネスプランではカスタマー管理のプラグインがサポートされていないという事実に直面しました。Auth0プラグインは使えませんでした。Auth0はOAuthやSAMLなどの標準的な認証プロトコルに対応するように設計されていましたが、DiscourseはJavaScriptトークンを使った独自のSSO方式を採用していました。結局、週末を費やしてDiscourseトークンとAuth0トークンを変換するブリッジサービスを構築し、ユーザーが現在はDiscourseに、将来的には他のサービスにも認証できるようにしました。

移行のその他の技術的な部分は非常にシンプルでした。カットオーバーは夜間に行い、フォーラムを数時間停止してNingからの最新データダンプを取り込み、DNSを切り替えて復旧しました。

移行には技術的な課題だけでなく、人的な課題もありますね。その点はいかがでしたか?

カットオーバーで離脱者が出る可能性があることは、最初から分かっていました。私たちはそれを受け入れ、リスクを軽減するために最善を尽くしました。メタフォーラムでは他の人々がアイデアを共有しているいくつかのディスカッションがあり、私はそれらをすべて読みました。最終的に、変更内容とカットオーバーのタイミングをコミュニティに説明するブログ投稿を行いました。DiscourseのサンドボックステストサイトへのリンクとDiscourseを使用している他の大規模コミュニティへのリンクも共有しました。

カットオーバーの時点では、フォーラムに複数のピン留めされたリマインダーを投稿し、古いデータに再リンクするためにアカウントの再登録が必要なことを説明しました。この最後の問題が、最も改善できたであろう点だと思います。カットオーバー後の数週間、私はAuth0とDiscourseのログを監視して、人々が古いアカウントに再度ログインできているか確認していました。しかし実際には非常に混乱を招くものでした。人々がパスワードのリセットを何度も試みたり、メールアドレスの確認なしにログインしようとしたりしているのが、そのままログに見えていました。ログインページ周辺のヘルプテキストだけでは到底足りませんでした。最終的に、Discourseからユーザーリストをエクスポートする方法(Ningからユーザーネームとメールアドレスはあるがパスワードなしで移行されたもの)を見つけ出し、そのデータをAuth0のAPIにアップロードしました。これにより、ユーザーは再登録やメールアドレスの再確認をせずに、パスワードリカバリーだけで古いアカウントに戻れるようになりました。

カットオーバー直後の利用状況はやや低調でした。しかし指標が確認できるようになると、移行前からコミュニティの多くのメンバーが徐々に活動を減らしていたことが明らかになりました。Discourseが提供していた機能の中で私が特に気に入っていたのは、エンゲージメントを維持するための洗練されたメール通知システムです。ところが、新しいフォーラムシステムにまだログインしていないユーザーにはこれが機能していないことが分かりました。解明するまで数週間かかりましたが、ネイルがユーザーのステータスデータを修正すると、システムから1700件のサマリーダイジェストが一斉に送信され、人々が状況を確認しに来るのに大いに役立ちました。1700という数字が5000と大きく異なることにお気づきかもしれません。実はこれが、過去1年以内に旧システムで活動していたユーザー数だったのです。Discourseのダッシュボード指標がいかに便利かについて触れましたが、旧システムではスパム対策として共同創業者が新規ユーザーリクエストを手動で承認していました。多くのアカウント有効化リクエストがスパムフィルターに消えていたことが判明しました。承認されたことのなかった恥ずかしいほど大量のアカウントを削除することになりました。Discourseのアンチスパムソリューションのおかげでもはや手動で新規ユーザーを承認する必要がなくなり、本当に助かっています。

Discourseフォーラムソフトウェアの普及については、まだ進化中です。コミュニティは私たちが注いでいるエネルギーに対して比較的敏感に反応します。ディスカッションに積極的に参加する日は、多くの人々が会話に加わり大きなトラフィックが見られます。メールダイジェストはユーザーにとって当然のものになってきていると思います。それは良いことです。実際にダイジェスト設定を変更したユーザーがどれだけいるか、レポートを依頼して確認すべきかもしれません。ほとんどのユーザーにとって、データ入力は直感的だったようで、特に不満の声はありません。

フォーラムでお気に入りのインタラクションの種類は何ですか?

断然好きなのは、コミュニティメンバーが自分の遠征やROVプロジェクトについて共有するトピックです。ロボットハンド金属製のOpenROVバリアントクジラの目撃など、「ビルドレポート」や「プロジェクト」カテゴリーへの投稿を見ると、私たちが目指していることの正しさを実感します。

専用のサポートデスクもお持ちですね。この2つのコミュニケーション方法をどのようにバランスを取っていますか?

先ほど述べたように、私たちはコミュニティであると同時に、製品を販売する会社でもあります。両方をサポートする最善の方法を見つけるのに多くの時間を費やしました。私たちは、製品についてのほとんどの質問は、フォーラムを検索することで回答が見つかると心から信じています。それでも解決しない場合は、フォーラムに投稿するのが最も早く回答が得られますし、質問が公開されることで最も多くの人の役に立ちます。

同時に、問題を公開の場で議論することに抵抗を感じるユーザーも一定数いることは認めざるを得ませんでした。そこで妥協点に落ち着きました。サポートセクションでは最初にフォーラムを案内しますが、ZendeskでサポートチケットをオープンできるContact Supportのオプションも用意しています。お客様は自分が使いたい方法を使います。フォーラムのモデレーターは、フォーラムが適切でないと判断した場合(配送・注文に関する質問や保証サポートなど)、ユーザーをZendeskサポートに誘導し、サポートチームもフォーラムの既存の回答へユーザーを誘導することがよくあります。

ZendeskとDiscourseを統合して、モデレーターがトピックにタグを付けると自動的にZendeskにチケットが作成され、Zendeskチケットへのサポートチームのレスポンスがフォーラムの投稿として自動的に反映される仕組みを構築しようとしました。残念ながら、それを実現する方法は見つけられませんでした。将来的なZapier(またはIFTTTが実現すれば)のサポートで2つの製品を連携できるようになることを期待しています。

Discourseをほぼ6か月ご利用いただいていますが、うまく機能していることは何ですか?

指標、通知、トピックへのメール返信、リンクのワンボックス化、検索です。

Discourseはオープンソースであり急速に進化していますが、ホスト型サービスのカスタマーとして最も望む改善点は何ですか?

いくつかあります:

  1. 詳細セクション、アンケート、取り消し線などの追加機能を表示するエディターの改善
  2. ユーザーが好みのスタイル(特にレイアウト)を選択できる機能。指標が多すぎて困っているユーザーもいれば、特に多くの投稿をするユーザーはトピックへのエンゲージメント数を確認したいと思っているようです。
  3. 埋め込み動画のクリックスルーインジケーター
  4. 開発中のSolvedプラグイン。
  5. フォトギャラリープラグイン。Xのベストショットを投稿してもらうようなトピックでは、メイントピックに写真をスライドできるカルーセルがあると良いです。
  6. Markdownの表サポート。この点に関する議論は読みました。実際私たちはさまざまな比較表を投稿しています…ああ、そうか、できないんでした。:stuck_out_tongue:

トピック一覧にカスタムスタイルを使用されていますね。なぜここをカスタマイズされたのか詳しく教えてください。

デフォルトのスタイルに感じた問題は、十分に使い込んでようやく良さが分かるころには、初めて見た時の直感的な反応を忘れてしまっているということです。私の経験では、その最初の反応は「ごちゃごちゃしている」というものでした。アクションへの呼びかけが埋もれていました。エリックは私たちの共同創業者でコミュニティを始めた人物です。ロールアウト後、エリックはその同じ直感的な反応を改めて感じましたが、他のことで忙しく、フォーラムソフトウェアを深く使いこなすための時間が取れていませんでした。エリックはコミュニティの中心的存在であり、彼がアクティブでいられるよう障壁をなくすことは最優先事項です。「エキスパート」モードのレイアウトを評価できるほど彼がフォーラムに参加してくれるよう、画面を簡略化することもその戦略の一つです。これが、要望機能セクションの#2にもつながっています。

フォーラムの懐かしい思い出といえば、昔のことでも最近のことでも何かありますか?

子供の頃、BBSシーンにかなり関わっていました。友人がサイト(確かコモドール上で動いていました)を運営していました。ある時、登録フォームにいい加減なことを入力したところ、彼がセッションに割り込んで「おいこら、嘘つき野郎…」と言ってきて、そこからあだ名が生まれました。当時は馬鹿げた量の時間をASCIIアートの署名作りに費やしていました。自分が使っていたものは今でも覚えています。思い出すと笑顔になりますね。

openrov-brian-old-sig

Brianさん、詳細なご回答をありがとうございました。詳しくはOpenROVをご覧いただき、ぜひOpenROVコミュニティもチェックしてみてください!

原文はこちら:


Good Loopでは、Discourseのセルフホスティングを安価で提供しています。開発元であるCDCK社の協力のもと、公式ブログ記事の翻訳・公開など、日本での普及にも努めています。

詳しくはこちら: Discourseの導入・運用支援・コンサルティング – Good Loop