「ビジネス上のコミュニケーションを、メールの不便さから解放したい」という思いから2009年にサイボウズがスタートした無料コラボレーションツール「サイボウズLive」。その開発現場は、Webアプリケーション開発の流行をうまく取り入れたアジャイルなものでした。その様子を、はてなチーフエンジニアの大西康裕がインタビューしました。テーマは、プログラミング言語の選び方から、自動ビルドと自動テスト、リファクタリング、チーム内コミュニケーションなど。大西自身も「面白かった」と語る取材の様子をぜひお楽しみください。記事の最後ではプレゼントもご案内しています。ところでこの取材には、サイボウズ・ラボの竹迫良範氏が、なぜか大量のレッドブルを抱えて登場したのですが……。
(※この記事はサイボウズ株式会社提供によるPR記事です。)
大西 はてなチーフエンジニアの大西です。今日はサイボウズの無料コラボレーションツール「サイボウズLive▼」、その開発現場の実際を聞くために京都からやってきました。よろしくお願いいたします。早速ですがスペシャルゲストの竹迫さん、レッドブル▼はお好きなんですか?
竹迫 サイボウズ・ラボの竹迫です。レッドブルを愛飲しています。普段サイボウズLiveの開発者と話す機会はあまりないので、今日はどんな話が聞けるのか楽しみです。持ってきた24本のレッドブルは、面白い発言をした人にその場でプレゼントしようと思います。
大西 なるほど。サイボウズLiveの開発をエンジニアとしてまじめに話しつつ、ときどき面白いことも言ってもらってレッドブルをゲットで盛り上がろうってことですね。レッドブルのPR記事にならないか心配です。早速、皆さんがこのチームに参加した経緯から聞いてみましょう。
ワンポイント用語集
サイボウズLive - サイボウズが提供するコラボレーションツール。無料で自分たちだけのグループウェアを利用できる。http://live.cybozu.co.jp/ ▲
レッドブル - レッドブル エナジードリンク。いわゆる栄養ドリンクの一種で、パフォーマンスを出したいときに飲む。 ▲
■ 「特に指名したわけでもないのに」(笑)「ひどい」(笑)
生江 サイボウズ ネットサービス事業本部 開発部 部長の生江です。もともと僕と福嶋は、サイボウズLiveの前身にあたるR&Dプロジェクトにいました。そのプロジェクトが終わりそうなころに、サイボウズLiveの企画が始まり、担当することになりました。2008年はじめのことです。
福嶋 開発部の福嶋です。私もサイボウズLiveの最初からチームに参加しました。フレームワーク周りを担当しています。
生江 隣にいる柴田は、2008年の新入社員が配属になるときに、特に指名したわけでもないのに急に入ってきました。まったくもって想定外(笑)
柴田 えっそんな! 冷たい><
竹迫 お二人にレッドブル差し上げます(笑)
柴田 あらためまして、ネットサービス事業本部 開発部の柴田です。2008年に入社して、ずっとサイボウズLiveの開発だけをやっています。
北崎 ネットサービス事業本部 開発部の北崎です。従来はサイボウズの研究開発部門に所属していて、半年前にサイボウズLiveの開発に参加しました。主にAPIや検索システムの開発をしています。今の開発チームはこの4人です。
大西 あまりチーム間の異動はないんですね。はてなでは半年に一度くらい、チームを作ったり統廃合したりというペースで人が動きます。
竹迫 人の流動が早いですね。サイボウズが得意とする企業向けパッケージソフトだと、新規開発には3年くらいかかることもあるので、比較的長期間、同じプロジェクトにアサインされます。はてなで主に利用する言語はPerlですよね?
■ サイボウズLive開発言語選択はPHPとJavaの2択 決め手は愛?
大西 はい、ほとんどPerlとJavaScriptです。それがチーム間のエンジニアの異動を簡単にしている面はあると思います。とはいえ最近はスマートフォンの開発で、Objective-C▼やJavaなど、いろいろな言語を使うようになりました。
竹迫 サイボウズでは製品ごとに言語が違います。C++、PHP、Javaなどです。割合は…
福嶋 最近はJavaによる開発も増えてきましたが、サイボウズLiveの開発当初はPHPやC++が主流でした。
大西 サイボウズLiveのプログラミング言語にJavaを選択された理由を教えていただけますか?
福嶋 当時としてはPHPとJavaの2択でした。開発の早さだとPHPなのですが、サイボウズLiveはバージョンアップを繰り返して機能を増やしていくサービスで、保守性が重要です。そこで、開発環境が整っていて、コンパイルによるチェックもあって保守しやすいJavaがいいなと考えました。
生江 福嶋が「Javaがいい」からJavaにしたというわけではなくて、本当にJavaでいいのかという点を様々な要件でチェックしました。サイボウズLiveの言語選択で最も重視したのはやはり「継続的に改善できるか」です。とはいえ福嶋の「Javaへの愛」が決定打でしたけどね(笑)
大西 愛ですか(笑)。あ、この程度の笑いではレッドブルはプレゼントされないんですね。
竹迫 はい。もう少しでした。もっとはじけていただかないと(笑)
ワンポイント用語集
Objective-C - 現在のiPhone開発で主に利用されるプログラミング言語。C言語がベースで、オブジェクト指向機能を備える。 ▲
■フレームワークの選び方と考え方
大西 なかなか厳しいですね(笑)。フレームワーク▼なども教えていただけますか。
福嶋 フレームワークはSeasar▼を選びました。Seasarならクラス単位のテスト▼を書きやすいとわかっていたからです。あんまり新しいものを選ぶと苦労することもあるので、ある程度古い、ちょっと枯れたくらいのものがいいな、という考え方で選んでいます。
大西 JavaScriptのフレームワークは…
生江 jQuery▼です。
大西 2008年だとprototype.js▼かjQueryあたりが選択肢でしょうか…
福嶋 そうですね。jQueryは実際にちょっとコードを書いて試してみて、すごく書きやすいと感じました。
生江 いろいろクセはあるけれど、少ないコード量でたくさんのことができます。また、当時はまだ多くはなかったけれども、プラグインが充実してきそうな雰囲気もありました。結果としては大正解でした。
大西 標準的というか、王道の構成ですね。はてなでは自社で開発した独自のフレームワークを使っているのですが、一つの会社でいろいろな言語でいろいろなプロジェクトがあるなら、既存のフレームワークを使うのがよさそうですね。
北崎 そうですね。いかにいい製品を作るかというところにフォーカスして、フレームワークから作るところに工数をかけるよりは、既存のフレームワークを使っていい製品にすることに注力したいです。
ワンポイント用語集
フレームワーク - アプリケーション開発で必要になる基本的な機能をまとめたソフトウェア。昨今のWebアプリケーション開発では、何らかのフレームワークを利用する場合が多い。 ▲
Seasar - JavaのWebアプリケーションフレームワーク。http://s2container.seasar.org/2.4/ja/ ▲
テスト - ここでのテストはソフトウェアテストのことで、書かれたプログラムが正しく動作するかを確認すること。 ▲
jQuery - JavaScriptのフレームワークの一種。ユーザーインタフェースの開発に利用する。 ▲
prototype.js - JavaScriptのフレームワークの一種。ユーザーインタフェースの開発に利用する。2006年から2007年ごろに流行した。 ▲
■ 1日2回の自動テストがないと「夜も眠れない」
大西 サイボウズLiveの開発ではいろいろ新しいことを試したとお聞きしたのですが、やってみて一番よかったことはなんですか?
福嶋 テストの自動化ですね。サイボウズでテストコードを書いて、自動的にテストを実行しているプロジェクトは2008年当時にはあまりありませんでした。テストの自動化は本当にやって良かったです。テストコードを記述する工数はどうしてもかかりますが、将来的なデグレード▼の心配がないし、安心してリファクタリング▼できます。機能追加なども思い切ってできます。
生江 開発に入る前から、テストコードを書くことでどのくらい工数が増えるかと、それによって得られるメリットをじっくり考えました。やはりテストコードを書くことで時間の何割かを使うことへの恐怖や心配はありました。でも、時間を使うこと以上のメリットがあったと感じています。
竹迫 最初からテストを導入したんですね。それはすばらしい。
大西 テストあったらいいよねと思いつつ、納期に迫られて、十分なテストコードを書けずにリリースするというのは、僕自身何度か経験があります。テストコードをちゃんと書くところまで納期に要求できるのは、エンジニアとしておいしい環境ですね。
福嶋 そうしたいけれども、納期があってというのは確かにあります。完全にはできていません。でもできるだけ作る。
柴田 この部分にはこれだけのテストコードがあるんだ、と思うとすごく安心感がありますね。テスト環境がなかったらかなり不安です。夜も眠れないくらい(笑)
生江 いま、レッドブル狙っただろ(笑)
竹迫 レッドブルをプレゼントします。これで夜眠らないでください(笑)
柴田 ひどい><
■ 重要視しているのはSeleniumによる自動テスト
大西 テストコードを書く時間をふんだんに取れない中で、どの部分のテストをどのくらい書くのかは、なかなか悩ましい問題だと思います。サイボウズLiveの開発で重要視している部分はありますか?
福嶋 もっとも重要視しているのは、Selenium▼を利用した自動テストです。Hudson▼を利用して、Subversion▼にあるソースコードを自動ビルド、自動テストしています。Javaのクラス単位の単体テストをがんばるよりは、ユーザーの目線に近いWebブラウザ上でのテストをSeleniumで作るほうが、より高い効果が得られると考えました。テスト内容は画面単位で記述しています。例えば「掲示板に書き込む」というような単位です。
北崎 Seleniumの自動テストは、専用サーバーでだいたい3、4時間で完了します。深夜とお昼の1日2回、自動でテストを走らせています。出社すると深夜のテストが終わっていて、昨日のあれ壊れてるな、お昼までに直そうとか。お昼のテストも夜に帰る前に終わるので、壊れていたら「直してから帰ろう」なんて。そういうサイクルです。もし何もなければ「帰ろう帰ろう」って。
竹迫 すばらしいと思います。
大西 おお、これはすごい。毎日ビルドして、短期間で機能を作ってリリースというような、アジャイルなやり方はサイボウズでは初ですか?
福嶋 僕らが最初くらいですかねえ。
柴田 (小声で)最初だと思います(笑)
生江 言ったもん勝ちですか(笑)
竹迫 みなさんにレッドブルをプレゼントです。
福嶋 細かいテストコードをたくさん作ってしまうと、仕様変更のたびにテストコードを追従させる必要があって、これにすごく時間がかかってしまいます。そこで、Seleniumを利用した、Webブラウザ上でのテストを重視しました。テストの記述は、最初はSelenium IDE▼でやろうとしました。ところが、記録は簡単でもその後のメンテナンスが大変でした。画面を変更したとき、Selenium IDEだとテストを再記述しなければならないケースが多いんです。Javaでテストコードを記述すると、画面に表示しているHTMLのidさえ変更しなければ、同じテストコードが利用できます。そこでJavaで記述したテストコードからSeleniumを呼び出すようにしています。
大西 はてなも一部のプロジェクトでSeleniumのテストを動かしています。たしかにテストのメンテナンスは面倒なので、Perlで書いています。
福嶋 複数のテストで共通の処理をメソッドでくくり出せたりするのは便利ですよね。
竹迫 (サイボウズLiveの)APIについては、テストが比較的作りやすいですよね。
北崎 はい。APIについては、テストを作っておかないとAPIとして正しく動作しているのかどうかがそもそもわからないので(笑)。テストの網羅率は一番高いと思います。
大西 サイボウズLive APIの仕様書(https://developer.cybozulive.com/doc/current/)をざっと拝見したのですが、今時っぽいAPIで面白いなと思いました。iPhoneアプリはこのAPIで一通りできそうですね。
北崎 はい、ユーザーの方でもほぼ同等のものを作れる仕様です。開発者のみなさんに、ぜひ楽しんでいただければと思っています。
■ リリースしてからリファクタリング
大西 リファクタリングって結構やっていますか?
福嶋 はい、結構やってます。新機能をリリースした後が多いですね。
北崎 リリース直前は、テストがあることで安心してリファクタリングできると言ってもリスクはあるので、あまりリファクタリングしません。リリースした後、書き散らかしたコードを整理する時間としてリファクタリングしています。
福嶋 新機能を開発する前に、その新機能に関連する部分をリファクタリングしたりもします。既存のところが行き当たりばったりで作られているのを見つけたら、リファクタリングで整えてからその上に作る。
竹迫 ちゃんと助走をしてから飛び跳ねる、みたいな感じですね。
大西 アジャイル本のお手本のような開発プロセスです。自動テストで毎日テストできる状態を保ちつつ、リリースを一つの単位として、開発、リリース、リファクタリングというサイクルが回っています。
竹迫 Seleniumによるテスト中心なのがいいのかもしれませんね。
福嶋 そうですね。単体テスト中心だとこのスタイルは辛いと思います。今やっているスタイルだと、機能として同じように実装していれば、テストを変更する必要はありません。
大西 まじめにいい話で参考になります。レッドブルの出番がありません(笑)
竹迫 セキュリティの話でもしましょうか(笑)
■ 「固くて見つからない」と言ったあの人は
大西 今日ここに来るまでに、サイボウズLiveについて基本的なXSS▼、CSRF▼くらい見つからないかなと思って少し調べてみましたが、全然見つからないですね。
竹迫 (セキュリティの世界で著名な)はせがわようすけさん▼が「固くて見つからない」と言っていました。招待ユーザーによるサイボウズLiveのベータテスト時に、文字が壊れたみたいな謎のHTMLファイルを投げてみたりと、いろいろ試していたみたいですが。
大西 おそらく基本的なところはフレームワークで押さえるという定番をされているかと思いますがいかがでしょうか。
福嶋 そうですね。共通なところで対応するのが基本的なポリシーです。個々に対応すると漏れるので、できるだけフレームワークでふさぐようにしています。
大西 ユーザーが入力したものをHTMLとして出力させたいケースもありますよね。
福嶋 そこが一番難しくて、自力で頑張らないといけません。それ以外の部分は、変数をテンプレートに展開する部分でエスケープ▼していて、自動化できています。
大西 ここも定石通りですね。レッドブルの出番はありませんでした…。
竹迫 レッドブルまだまだありますよー。皆さんはじけてくださーい!
ワンポイント用語集
XSS - クロスサイトスクリプティング。動的にHTMLページを生成するWebサイトにおいて、攻撃者が悪意を持ったHTMLタグや、JavaScriptを送り込み、閲覧者に表示/実行させる攻撃手法、またはその脆弱性のこと。 ▲
CSRF - Webサイトの脆弱性の一種。クロスサイトリクエストフォージェリ(Cross Site Request Forgeries)の略。攻撃者が用意したHTTPリクエストを、閲覧者に送信させることで、攻撃者が意図した書き込みを掲示板にさせたりする。 ▲
はせがわようすけさん - 日本におけるWebセキュリティの技術研究で著名なエンジニアの一人。文字コードに詳しい。http://utf-8.jp/ ▲
エスケープ - 文字列のデータを入出力する際に、セキュリティなどの仕様上、問題のある文字列を取り去ったり置換したりする処理のこと。 ▲
■ チーム内のコミュニケーションはやっぱり!
大西 サイボウズさんでは、情報共有にどんなツールを使っていますか? というすごく失礼な質問をしてみます(笑)
生江 (笑)サイボウズLiveです! 開発中のサイボウズLiveを使いながら、基本的な機能検討をここでやっています。機能ごとに掲示板を立ち上げて、議論しています。
福嶋 開発環境とは別のテスト用の環境を用意して、テスト用環境のURLを貼り付けて、意見を言ってもらうとか、画面キャプチャを(サイボウズLiveの掲示板に)貼って議論をするとか。自画自賛ではありますが、情報を整理して共有できるので、かなり快適に利用できています。複数のメンバーでやりとりしていると、大量の情報が錯綜して混乱しがちです。メールでやりとりをして、それを整理して仕様をまとめて実装していくのは、想像しただけでも気が遠くなります。
大西 チーム内のコミュニケーションも自分たちが作っているアプリケーションを使っているんですね。
柴田 はい。なので新しい機能をテスト用環境に実装してみて、いい機能だとわかると、早く本番で使いたいと思ってしまいます。あっ、まだなかったって(笑)。
福嶋 前職で経験したウォーターフォール▼の開発では、作ってみて「使いにくいなあ」と思っても、仕様は仕様ですからそのままにするしかありませんでした。サイボウズLiveの開発では、使いにくいと思ったらそれをチームに声としてあげて、同意が取れればやり直せる。これはうれしいです。
竹迫 他に利用しているツールはありますか?
福嶋 はい、タスク管理にデヂエ▼を使っています。そのほかには、実装ルールや仕様のメモがWikiに少しあるくらいです。それから、チャットですね。
北崎 チームに入ってすぐのころは、仕様書がないので、ソースを読むしかなくて大変でした(笑)。でも、ここでも自動テストが役に立っています。自分が変更して何かが壊れた場合は、自分の変更が影響を与えたことや、どこに影響したのかがわかります。普段は開発チームのサイボウズLiveを見ていれば何が起こっているかは分かりますし。
竹迫 サイボウズLiveに書いておけば、チームのみんなが読んでくれるという安心感はありますね。
生江 もう一つ欠かせないのが、ユーザーの皆様のサイボウズLiveへのご要望を知るのに利用しているIDEABOX(https://cybozulive.com/ideabox/list)です(要ログイン)。開発メンバー全員が見ています。半年ほど前から始めました。
大西 はてなアイデア(http://i.hatena.ne.jp/)とコンセプトが似ています。これはモチベーションがあがりますよね。逆に辛いお言葉をいただいたりすることはありますか?
生江 落ち込むようなことはありません。むしろユーザーの要望について共通認識が持てるので、議論しやすいですね。ランキングも出るので、これはそろそろやらなきゃいけないとな、と気づくこともあります。
大西 僕はすごく落ち込むことがあります(笑)
竹迫 落ち込んだ時はレッドブルをどうぞ!
ワンポイント用語集
ウォーターフォール - 要求定義から設計、実装、テスト、運用までを滝の流れのようにまっすぐ進む開発モデル、開発手法のこと。従来広く利用されてきた。 ▲
デヂエ - サイボウズが提供するWebデータベースサービス。手軽に利用できるのが特徴。日報管理や、進ちょく管理、タスク管理など様々な用途で利用できる。http://kantan.cybozu.co.jp/dezie/ ▲
■ アジャイル開発で進化を続けるサイボウズLive
大西 最後に、開発チームとサイボウズLiveの今後を教えてください。
柴田 開発チームは、もっとアジャイルにしていきたいと思っています。プロトタイプを作って、使ってもらって、フィードバックからいいものを取り入れてブラッシュアップという流れを、どんどん進めたいと思っています。
福嶋 自分はフレームワークを担当しているので、もうちょっといろいろ簡単に実装できるようにフレームワークを成熟させていきたいなと思っています。Javaでやってよかったなあと思いつつも、軽く飽きてきたので、今度はJavaScriptで(笑)。
北崎 開発中の検索機能をリリースして、一部のユーザー様から公開させていただく予定です。これでサイボウズLiveをさらに便利に使っていただけると思います。
生江 ほかにも「いいね!」ボタンを実装中です。グループの中で「いいね!」し合っていただきたいです。Twitter連携機能も強化します。Twitter IDを登録すると、サイボウズLive上の知人やフォロワーを教えてくれます。さらに、複数のグループをまとめる機能など、実用的な機能もどんどん開発していきます。たぶんこの記事が出るころには、リリースされていると思います。
大西 なるほど、将来も楽しみですね。多くのユーザー様を幸せにできる開発スタイルだなと感じました。技術的にも参考になりました。ありがとうございました。
竹迫 ありがとうございました。ここをお読みの皆様にもレッドブルをプレゼントします!
■サイボウズLiveグッズ詰め合わせと、レッドブルをプレゼント
※キャンペーンは終了しました。たくさんのご応募、ありがとうございました。
この記事で紹介した無料コラボレーションツール「サイボウズLive」のグッズ詰め合わせを抽選でプレゼントします。応募方法は、この記事をはてなブックマークに追加するだけ。さらに、Twitter連携して記事への感想をお寄せいただいた方には、抽選でレッドブル24本入り3ケースを5名様(計1年分)にプレゼント! 詳しくは、応募要項をご覧ください。
ぜひこの機会に、サイボウズLiveでの新しいコミュニケーションをお試しください。
応募要項
- 応募期間
- 2010年12月14日(火)から2011年1月4日(火)24時まで
- 賞品と当選人数
- 「サイボウズLive」のグッズ詰め合わせを5名様、レッドブル24本入り3ケースを5名様(計1年分)
- 応募方法
- 「サイボウズLive」のグッズ詰め合わせ
- この記事をはてなブックマークに追加
- レッドブル24本入り3ケースを5名様(計1年分)
- ブックマークコメントにこの記事への感想を書いて、Twitter連携した上で、はてなブックマークに追加
- ※プライベートモードでご利用の方は対象となりません
- 当選発表
- 賞品の発送をもって替えさせていただきます
- 賞品発送
- 当選発表後、はてなよりメールをお送りし、送付先情報(送付先住所、受取人氏名、電話番号)をお聞きします
写真:佐藤麻紀