garbagetown

個人の日記です

#NUCON に行ってきた

去る二月四日、オンラインドローツール Cacoo が 100 万ユーザを達成 したことも記憶に新しい福岡のスタートアップ 株式会社ヌーラボ さんが開催したヌーラボカンファレンス、略して NUCON (ヌーコン) に参加してきました。

f:id:garbagetown:20140204133329j:plain

以下、拝聴したセッションについてメモと感想。一部資料は こちら に公開されています。

基調講演

橋本さん

まず代表取締役社長の橋本さんからヌーラボの紹介。

社員数は 22 名で、勤務地は福岡、東京、京都、台湾、シンガポールインドネシア

もっとも長く提供しているプロジェクト管理ツール Backlog は 20 万アカウント、10 万プロジェクト。日本語、英語、中国語、韓国語に対応。そして三月末に待望の iPhone アプリをリリース予定!

続いて Cacoo は 110 万アカウント、400 万シート。特筆すべきなのは海外ユーザの占める割合で、86% が海外のユーザ。一位のアメリカは 13% で二位の台湾は 9% だけどこちらのほうが伸びているから逆転するかもしれないとのこと。三位はコロンビアだけど、なぜ受け入れられているのかは不明とか。

その他、社内サーバにデプロイして使える Cacoo エンタープライズ と、アプリに組み込んで使える Cacoo SDK エディション を紹介されていました。

吉澤さん

ここでバトン (というか黒曜石) を吉澤さんにタッチして、ヌーラボ三番目のサービス、typetalk 正式ローンチの発表!おめでとうございます!

吉澤さんがヌーラボにジョインしてから typetalk の必要性を実感し、業務時間外にプロトタイプを作成、社内 LT で発表、サービス化へと至る歴史を紹介した後、オンラインデモ。手元の iPhone アプリから typetalk に tweet を埋め込んだり、ヌーラボさんらしいハートフルなエフェクトの Like 機能などを紹介。

その後、ロードマップとして backlog との連携強化、デスクトップアプリ、1 対 1 チャット、プレミアムプランなどを挙げられていました。

縣さん

続いて取締役兼 CTO の縣さん。

backlog, cacoo, typetalk にひとつのアカウントでログインできるようになるヌーラボアカウントの発表!各サービスのメニューにランチャーが追加され、簡単にサービスを切り替えられるようになるとのこと。

今後のロードマップとして、グループ管理、契約管理の集約化やヌーラボアカウントによるサードパーティサービスへのログインなども挙げられていました。

開発者がかたるヌーラボのコラボレーションサービス API 最前線

基調講演のあとはずっと Technical Track にいました。どのセッションも満員で立ち見が出る大盛況振り。

まずは Backlog, Cacoo, typetalk の各 API のこれまでとこれから。

Backlog

まずは染田さんから Backlog API について。

現時点の Backlog API でできることは基本的にチケットに関することだけだが、ファイルについては WebDav, バージョン管理についてはそもそも svn と git なのでプログラムから制御できないのは wiki くらいのもの。実際に Jenkins Backlog plugin はこれらを組み合わせていろいろできるよ、と。

Backlog API を叩く有志によるライブラリは様々な言語のものが存在するが、今後はヌーラボオフィシャルとして Java のライブラリをメンテナンスしていくとのこと。その際、さすがに少し古くなってきた API を v2 として刷新、wiki 操作 API も追加する予定とのことでした。

Cacoo

続いて中原さんから Cacoo API について。

実は Cacoo は API でずいぶんいろいろなことができて、ちょっと変わった例では Cacoo で描いた AWS の構成図の内容を API で読み取って実際に EC2 インスタンスを起動するなんてこともできます、と軽く仰っていたけど個人的にこれは大興奮。ドキュメントと実態の乖離はアタマの痛い問題なので、こういう方向性はすごく正しいと思います。

今後は CMS プラグインの拡充や、図を描く API も用意していきたいとのこと。API で図が描けると Mashup Award とかでとんでもなく楽しいものが飛び出してきそうな気がします。

typetalk

続いて後藤さんから typetalk API について。

typetalk は根本的に API 前提で作られており、一部管理系機能を除いて web アプリケーションもモバイルアプリも公開されているものと同じ API を使用しているとのこと。

そして今後はストリーミング API も追加予定とのこと!チャットサービスという性格上、ストリーミング API はぜひぜひ公開して頂きたいと思います。

最後に「これは妄想なんですけど」と前置きしながら、人間が typetalk を通して自然言語で backlog にジョブを指示するスライドを紹介されていました。個人的にこういうことは割と本気で信じているので、妄想で終わらずにどんどん挑戦して頂きたいと思いました。

Nulab Developers

最後に再び染田さんから Nulab Developers について。

現在ばらばらに存在している API ドキュメントの集約や、ドキュメントとサンプルの充実、オンラインコミュニティやハッカソンの開催など、Nulab API を使用する開発者のサポートを充実させていくとのことでした。

Cacooを支える技術 〜世界の100万ユーザを支えるドローツールの今と未来〜

続いて平山さんのセッション。このセッションは Starling で作った iPad アプリをスライドのように使用されていたので、資料は公開されていないようです。

Cacoo のサーバサイドが Apache, Tomcat, Seasar2, Cubby, Mayaa そして BlazeDS で、クライアントサイドが Flex とやや懐かしいプロダクトで構成されている理由を、Cacoo が生まれた当時の背景などから説明し、これらをモダンなプロダクトで作り替えるとするとどうなるか、HTML5Flash を単純に置き換えるものではないことなどを説明されていました。

とは言え新しい技術にも取り組んでおり、今後は Cacoo サポートツールと銘打ったローカルアプリとの連携、そしてデスクトップ版と待望のタブレット版も作っていきたいとのことでした。

職人任せにしないインフラ構築/運用 ~ DevOps時代を生きぬくために ~

続いて通称いきっこさんこと中村さんのセッション。

ちょっと前から耳にするようになった DevOps というキーワードで、アプリのひともインフラを触れるようになると色々と楽になるよ、というお話でした。

個人的には今後クラウドと相性の良いイミュータブルインフラストラクチャ、ブルーグリーンデプロイ、ポータブルな web アプリケーションなどが主流になっていくと考えていて、インフラの知識がないとやっていけないと思います。

ヌーラボの中のひとは Ruby より Python が得意なので Chef ではなく Ansible を使っているというお話と、yum の update に追従するためにサーバの構成に変更が無くても定期的に Jenkins の job で packer を使って AMI を更新しているというお話が興味深かったです。

Jenkins や Ansible の結果を typetalk に通知するというのもヌーラボさんらしくてとてもよいと思いました。

今どきのリアルタイムコラボレーションツールの作り方〜Backlog、Cacoo、Typetalkにおける実践例〜

そして最後は縣さんのセッション。

Backlog, Cacoo, typetalk はそれぞれ多かれ少なかれリアルタイムコラボレーションする機能があり、なぜ今これらの機能が必要なのか、どのように実現しているのかというお話。

Backlog

従来の画面遷移型アプリケーションの Backlog でリアルライムコラボレーションが必要なのはお知らせ情報の通知くらい。シンプルに XHR で自分宛てのお知らせ情報をポーリングしているとのこと。

サーバ負荷をできるだけ下げるために Local Strage を使って複数タブ間のお知らせ情報取得状況を制御しているというお話と、数秒程度の遅延は許容できる機能なのでタブの活性/非活性に応じてポーリング頻度をチューニングしているというお話が興味深かったです。

Cacoo

複数人で同じ画像を編集するアプリケーションである Cacoo では、ほとんどすべてのユーザアクションをリアルタイムに反映する必要があります。

Command パターンを愚直に実装しており、ユーザのアクションは Command オブジェクトとしてメッセージングサーバを経由して別のユーザに配信されるとのこと。Command オブジェクトには操作を一意に特定する id が振られてあり、これにより競合を検出しているとのことでした。

typetalk

リアルタイムコラボレーションそのものを提供する typetalk も、ほとんどすべてのユーザアクションをリアルタイムに反映する必要があります。

typetalk はプロダクトオーナーの吉澤さんが技術好きと言うこともあり、Angular.js, socket.io, nginx, Playframework2/Scala, node.js, Redis などエッジなプロダクトで構成されています。スライドには記載されていませんが、ORM には瀬良さんが開発している Scalikejdbc を使っています。

とは言え複雑なことをしているわけではなく、基本的に XHR で投げたユーザのアクションをバケツリレーのようにプロダクト間を転送するシンプルな実装であり、Like 機能は一日程度で追加することができたそうです。

質疑応答

最後に会場からいくつか質問。

  • Backlog のタブ活性/非活性はどのように判断しているのか
    • JavaScript で取得できるが、「非活性から活性化した」というイベントは取れないので、定期的に取得している
  • Cacoo の特にアクションの競合はどのようにテストしているのか
    • Selenium などでもテストできると思うが、手作業でテストしているのが現状
  • typetalk のモバイルアプリではどのようにリアルタイム反映しているのか
    • 現在はポーリング。今後ストリーミング API を追加する予定

nulab night

で、ヌーラボナイト。こんなに豪華な食事が無料!橋本さんから「残っても困るから全部食べてください」とアナウンス。

f:id:garbagetown:20140204185052j:plain

アルコール含むドリンクも飲み放題で、きれいなレッドブルガールもいる。

f:id:garbagetown:20140204185235j:plain

そしてそして Dirty Nu によるライブ演奏!

f:id:garbagetown:20140204195812j:plain

セットリストはこちら。

IT 系カンファレンスの参加レポートでセットリストを紹介するのは初めてです。

チェンジビジョン平鍋さんのゲスト参加などもあり (主に自分が) 大盛り上がりでした。後ほどヌーラボの方々とご挨拶させて頂いた際「最前列で盛り上がってくれていたひとですね」と笑われたのも今となってはいい思い出です。

まとめ

わずか 22 名という社員数で、世界に類を見ないサービスを三つも提供したり、こんなに素敵なイベントを成功させたりと、ヌーラボさんは本当に日本が誇るスタートアップ企業だと痛感しました。

JavaFlash などオワコンと叩かれがちな技術を使っていても、ユーザに本当の価値を届けることができているヌーラボさんから学ばなければならないことが沢山あります。

f:id:garbagetown:20140204204448j:plain

超楽しかったです!ありがとうございました!