読者です 読者をやめる 読者になる 読者になる

Meet at Idobata

21世紀の開発者のためのグループチャット Idobata の開発ブログです。

idobata-eventd と Server-Sent Events

書いた人: ursm

これまで Idobata ではイベント配信の仕組みとして Pusher を使ってきましたが、先日のリリースから idobata-eventd という独自のバックエンドを試験的に導入しました。idobata-eventd は送信したイベントを一定期間保持し、クライアントからの要求に応じて再送する機能を備えています。今まではネットワークが切り替わったときなど、イベントを取りこぼした可能性がある場合はすべてのデータを再取得する (= 画面全体をリロードする) する必要がありましたが、idobata-eventd では最後に取得したイベントからの増分のみを受け取って反映できるようになりました。

続きを読む

最近の Idobata

こんにちは! hibariya です。前回の Idobata 更新情報からすこし間があいてしまいました。最近のアップデートについてお知らせいたします。

@all/@here をメンションとして受け取るか

@all や @here (※) をメンションとして受け取るかどうかをユーザ毎/ room 毎にカスタマイズできるようになりました。各 room の settings -> preferences から設定を変更できます。また、左下のアカウントメニュー -> Settings からデフォルトの挙動を変えられます。

(※ @all: 全メンバー宛 @here: オンラインのメンバー宛)

「ここから下は未読」

未読のある room を開くと最も古い未読メッセージの上にマークが付くようになり、どこからが未読なのかはっきりと分かるようになりました。

ゲスト用機能の改善

Idobata ではメンバーとして参加していない organization の room にゲストとして join できます。これは昔からある機能ですが、まだまだ改善の余地がある箇所です。性能面でも至らない点があり、昨年の ISUCON5 オンライン予選が開催された際に障害を発生させてしまう原因ともなりました。障害の原因となった箇所をはじめゲストまわりの設計・実装を見直し、同様の問題が起きないようになりました。

起動の高速化

起動時の処理の見直しを行ない、最初に読み込むデータを減らすことで高速化しました。join している room の数にもよりますが、確認できているうちではスプラッシュスクリーンが表示されている時間を最大で4, 5秒ほど短縮できました。

その他の変更点

  • 左サイドバーの Mentions から自分宛のメンションを一覧できるようになりました。
  • これまでずっと Rails デフォルトのままだったエラーページを差し替えました。
  • 各 room の settings から room_id を確認できるようになりました。bot 開発にご活用ください (関連: hubot-idobata#16)。

idobata-hooks 他

いくつか大きなアップデートがありました。

  • Backlog に対応しました (#58 @ozamasa)
  • Bitbucket のより多くのイベントに対応しました (#57 @masumiya)
  • Coveralls に対応しました (#56 @1syo)
  • esa hook で投稿時に本文も含められるようになりました (#49 #52 @kakutani)
  • hook でパラメータを受け取り、動作をカスタマイズできるようになりました (#54 @hibariya)。

idobata-hooks を含め、ここ半年の間にたくさんの  Pull Requests をいただきました。どうもありがとうございます!

これから

今後も引き続き、使い心地の改善とモバイルアプリの提供に注力していく予定です。それでは!

Idobata の 9/26 - 27 にかけてのサービス接続障害についてのご報告

こんにちは! Idobata 開発チームの hibariya です。 いつも Idobata をご利用いただき、ありがとうございます。

先週末 9/26 (土) から 9/27 (日) にかけて、Idobata では一時的にサービスに接続できなくなる障害が断続的に発生していました。 ユーザーのみなさまには大変ご迷惑をおかけしましたことを、深くお詫び申し上げます。

サービス接続障害が発生していた時期には ISUCON5 のオンライン予選が開催されていました。 Idobata は ISUCON5 の主催者と参加者との連絡用チャットとしてご利用いただいておりましたが、このたび十分なサービスを提供できませんでした。 参加者・関係者の方々にはご不便をおかけしていしまい、申し訳ありませんでした。

今回の反省を今後に生かしていくために、障害の経緯と今後の対策について、簡単にではありますがご説明いたします。

何があったか

9/26 (土)

  • 9:00 頃からサーバの負荷が増加し始め、9:30 頃に Idobata へアクセスしづらくなる。
  • 10:00 頃に現象を確認し、Web サーバのインスタンスを追加する作業を開始。
  • 10:30 頃にインスタンスの起動プロセスにエラーを確認。Engine Yard のサポートと連絡をとり、11:30 頃に追加完了。
  • 午後、API でアクセスが集中していた箇所を改善する対応を行なう。
  • 負荷の集中を軽減するため、2日目の Room へ事前に join していただけるよう ISUCON5 オンライン予選の主催者の方へ連絡。ご快諾いただく。

9/27 (日)

  • 9:30 頃に再び負荷が増加し始める。さらにインスタンスを追加。
  • 13:50 DB へのコネクション数が上限に達しつつあり、設定を変更するため10分ほどサービスを停止。
  • 18:00 から再びアクセスしづらい状況となる。
  • 18:30 頃から復旧。

何が原因だったか

今回の直接的な原因は次の通りです。

  • オンラインメンバーの多い Room への API アクセスが想定以上の負荷となり、さらにそこへアクセスが集中してしまった。
  • 結果的に API 全体へのすべてのリクエストに長い待ち時間が発生してしまった。

今回の対応

9/26 (土) のサービス接続障害を確認後、Web サーバインスタンスの追加を行ないました。 あわせて、不要なクエリ発行を抑え、集中しているアクセスを時間的に分散させる処理を追加しました。

それでも根本的な問題の解決には至らず、Room への join やアクセスが集中するタイミングでは稼働が不安定になる状態が続きました。

翌27日も ISUCON5 のオンライン予選2日目が開催されることから、引き続き Room への join が集中することが予想されたため、参加者の方々が事前に join できるよう ISUCON5 主催者の方へアナウンスをお願いしました。勝手なお願いも関わらず快く了承して頂きました。

今後の対策

今回のサービス接続障害の原因となった API へアクセスが集中しないよう、設計を改善します。 また、大規模なイベントでの利用が想定される場合には事前に備えます。

おわりに

2015年の夏以降、Idobata 開発チームは「より使い心地の良いサービス」を第一の目標として、主にパフォーマンスの改善に取り組み始めていました。その矢先にこのような事態になってしまったことを、重く受け止めています。

ふり返ってみたところ、当日は最善を尽くした対応とは言えませんでした。問題をその場で修正できなかったとしても、例えば一時的にその箇所を無効にすることでより重要な機能を提供することができたかもしれません。不慣れな対応で悔いの残る結果となりました。

ISUCON5 運営の @941 様には、当日お忙しいなかにもかかわらず快く相談に応じていただきました。この場をお借りして御礼申し上げます。 サービスが不安定な中、インターネット上でたくさんの激励のお言葉をいただき、ありがとうございました。 多くの方が思い通りにサービスを利用できなかったことと思います。申し訳ありませんでした。

本件ならびに Idobata について

何かご不明な点などありましたら、ぜひフィードバックフォームまたは hi@idobata.io までご連絡ください。 Idobata の状況については、今後もブログにて状況をお知らせいたします。 今後とも Idobata をよろしくお願いいたします。

お気に入り room、他

こんにちは、提督兼イカの ursm です。Idobata の更新情報をお知らせいたします。

お気に入り room

よく使うルームにアクセスしやすくなりました。ルーム名横の☆をクリックするとサイドバーで常時上に表示されるようになります。

Markdown のフルサポート

メッセージに Markdown の全記法が使えるようになりました。

(従来の挙動がお好みの場合は Settings から “Treats a message as Markdown” のチェックを外すと元に戻ります)

リンクのプレビュー表示

TwitterYoutubeSlideshare のリンクをプレビュー表示するようにしました。

idobata-hooks

新しく以下の hook がサポートされました。コントリビュートいただいた皆さま、ありがとうございました!

その他の変更点

  • 入力欄が自動で拡大/縮小するようになりました
  • メッセージを検索するとき、空白区切りで AND 検索になるようにしました
  • Enter キーの挙動をカスタマイズできるようになりました

今後の予定

しばらく新機能の追加は控え目にして、たくさんご要望いただいているパフォーマンスの改善とネイティブアプリ提供に注力していきたいと思っています。今後ともどうぞよろしくお願いいたします!

brand-new Idobata™

こんにちは、春イベントに向けてアップを始めた ursm です。

本日は皆さまに Idobata の新バージョンをご紹介いたします。今回のリリースでは元々 Bootstrap のバージョンを上げるだけのつもりだったのですが、ついでに色々やってしまった結果、コートベース全体に渡るオーバーホールとなりました。

$ git diff bs3..master | filterdiff -p1 -x  frontend/npm-shrinkwrap.json | diffstat -s
2893 files changed, 14894 insertions(+), 18598 deletions(-)

ユーザインターフェースの改善を中心として、動作の高速化や将来的な機能拡張の容易性を高める変更を行いました。テクニカルな解説は別の記事に譲るとして、今回はユーザから見た主な変更点をご紹介します。

各種ツールへの影響

Bootstrap のバージョンを 2 から 3 にアップデートしました。いくつかのクラス名が変更となっていますので、hook や bot を作成されている方はお手数ですがご対応をお願いいたします (idobata-hooks にマージされているものはすでに対応済みです)。特に badge の色指定がなくなったこと、label の色指定に使うクラス名が変更になったことが影響が大きいと思います。idobata-hooks の該当コミットもご参照ください (ここでは badge を赤くするために .progress-bar-danger を付けるというちょっとしたハックを使っています)。

Pusher のイベント名を変更しました (例: message_created -> message:created)。互換性のため message_created だけはしばらくの間以前と同じタイミングで送るようにしていますが、hubot-idobata をお使いの方はお手隙のタイミングで 0.3.0 以降のバージョンに更新をお願いいたします。 また、room_touched, all_room_touched イベントが廃止されて join:updated イベントになりました。join は room と user の中間モデルという位置付けで、未読数はこれのプロパティとなっています。hubot-idobata 以外のアダプタを作成・利用されている方は誠に恐縮ながらご対応のほどよろしくお願いいたします。

インターフェースの改善

全体的にコントラストを高め、ソリッドな印象になりました。タイトルバーの部分はモバイルでの操作性を考慮してやや大き目に、スワイプによるサイドバーの出し入れもできるようにしています。また、実験的にアニメーション効果を取り入れて操作したときに何が起きたかわかりやすいようにしてみました。

メッセージ一覧は線を減らしてすっきりとした見た目になりました。なるべくゆったりさせつつ、チャットとして大事な一覧性を損ねないよう配慮しています。メッセージの投稿ボタンとアップロードボタンはひとつに統合されました。また、新機能としてルーム内を検索できるようになりました。

設定画面はパネルを基調としたデザインに変わりました。一覧のアイテムを増やす操作は左上の緑色のボタン、絞り込みは右上のフィールドといった具合に操作性の統一を計っています。

編集項目は使い勝手と見た目を考慮して inplace editor 風のコンポーネントになりました。また、トークンや invitation URL はワンクリックでクリップボードにコピーできるようになりました (Flash が有効な環境のみ)。

パフォーマンス

サーバから取得するデータを最適化することで初回のページロードが高速になりました。ページを切り替えたときの動作も速くなってはいますが、こちらまだまだ改善の余地があります。

オフラインからオンラインに復帰したときのリロード処理が高速になりました。以前はページ全体をリロードしていましたが、今はアプリケーションの内部状態を一旦破棄して再構築することで高速化しています。欲を言えばリロードせずに差分のイベントのみを取得するのが望ましいのですが、今後の課題とさせてくださいませ。

クエリのチューニングと合わせてデータベースインスタンスのメモリを4倍に増量しました。これまで以上に快適なチャットをお楽しみいただけるものと思いいます。

キーボードショートカット

ルーム名を部分一致で絞り込んで移動できるコマンドバーという機能を追加しました。c で起動します。? でショートカットの一覧が見れますので合わせてご活用くださいませ。

Android アプリ

Idobata for Android の提供を始めました。例によって WebView を貼り付けただけの簡便なものですが、アセット一式をパッケージングしているので起動が微妙に速い……と思います。iOS 版と同じくプッシュ通知にも対応しています。ぜひご利用くださいませ。

Hook

イマイチわかりにくかった Generic を Custom Webhook と名前を改めました。既存の Generic hook については Endpoint URL 含め影響はありません。


皆さまに新しい Idobata を気に入っていただけることを願っています。今後の展開にもご期待ください!

メンバー管理機能の改善、他

こんにちは、秋イベントに向けて備蓄を始めた ursm です。Idobata の新機能と変更点をお伝えします。

メンバー管理機能の改善

organization の設定画面から「メンバーを外す」「ゲストとメンバーを切り替える」操作ができるようになりました。

room の description

room に description を書けるようになりました。書いた description は room 一覧やサイドバーに表示されます。Markdown が使えますので、お好みの画像やリンクを並べてあげてください!

Commit Status API

GitHubCommit Status API に対応しました。この API をサポートしている CI サービスをお使いの場合は、GitHub hook だけでコミットのビルド結果通知を受け取れるようになります。

「CI サービスの通知の方が好みだからこっちはオフにしたい」という方は、お手数ですが GitHub リポジトリの Settings -> Webhooks & Services から Status をオフにしてくださいませ。

その他の変更点

  • Qiita:Team hook で共同編集記事の更新者が正しく表示されるようになりました (Thanks @eitoball)
  • GitHub hook で issue のラベルを付け外ししたとき、どのラベルを操作したかがわかるようになりました
  • leave organization リンクの位置をわかりやすくなるよう調整しました
  • hook からのメッセージに @mention 形式の文字列が含まれるとき、mention として扱うようになりました
  • ユーザ名や room 名の入力補完で大文字小文字を区別しないようになりました
  • アカウント設定からアイコンをアップロードできるようになりました
  • アカウント設定からアカウントを削除できるようになりました
  • SVG ファイルをアップロードすると Chrome が死んでしまう現象を直しました
  • サインイン/サインアップ周りのエラー表示があまりに scaffold だったので少し気を利かせました

メッセージに permalink が付きました、他

こんにちは、E-6 ラストダンス真っ最中の ursm です。Idobata の新機能と変更点をお伝えします。

メッセージの permalink

メッセージのタイムスタンプをクリックすると日付ごとのアーカイブページを開くようになりました。それぞれのメッセージに id が振られているので permalink としてお使いいただけます。

Trello hook

@eitoball さんの pull requestTrello からの通知をサポートするようになりました。

あわせて読みたい: (翻訳) Trelloは何が違うのか by Joel Spolsky - 小野マトペの納豆ペペロンチーノ日記

キーボードショートカット

いくつかの操作をキーボードから行えるようになりました。他にほしいショートカットがありましたらフィードバックにてお寄せくださいませ!

画像アップロード機能の改善

ドラッグアンドドロップコピーアンドペーストでも画像をアップロードできるようになりました。

room の名前変更

room の設定画面から名前を変更できるようになりました。こちら大変お待たせしてしまって恐縮です…。

その他の変更点