オープンソースで商用クラウドサービスを作るためのチームビルディング。NTTコミュニケーションズ(後編)

2013年2月19日

2月14日、15日に都内で開催されたイベント「Developers Summit 2013」、通称デブサミ。2日目に行われたセッション「OSSで作る!クラウドサービス開発戦記」では、NTTコミュニケーションズの川口克則氏が、オープンソースを基盤としたサービス開発の苦労や解決のための試行錯誤について講演を行いました。

(本記事は「オープンソースで商用クラウドサービスを作るためのチームビルディング。NTTコミュニケーションズ(前編)」の続きです)

第2章:トラブルの教訓、属人化をどう解決するか

第2章は2012年春から秋くらい。開発チームも、会社として投資しましょうということで少しずつ増えていきます。

fig

この時期にやったことは大きく4つで、upstreamがどんどんアップデートされていったので、それにあわせてアップデートするのと、顧客をPaaSへ乗せていくためのサポート。バグフィックスや機能追加と、必要に応じてそれをプルリクエストしていったり。

それから開発がどんどん陳腐化していくので、新しいやり方に適応していく、とかです。

それぞれを説明していきます。

upstreamへの追随ですが、風の噂によると本家cloudfoundry.comも1週間か2週間で数百VMあるPaaSをアップデートしているらしいので、我々もそうしたいねと思っていました。でもここでトラブルが。

fig

最新のupstreamを取り込んでHello Worldは動いたのですが、数時間たつとMySQLのデータベースが消えてしまいます。

内部で不要なデータベースインスタンスを消すのをやっているのですが、ソースコードを見るとつねに全部選択していて、それは全部消えるだろうと。

OSSとかCIで回しているので大丈夫だと思っても、それでちゃんと動くとは限らない、ということが身にしみてきました。

対策としては3つ。ステージング環境で様子を見る。今回だと数時間たって回収処理が動いたときに死ぬという、なかなかテストでは拾えない問題だったので、ステージング環境でしばらく様子を見ましょうと。

それから当たり前ですが、ちゃんとコードを読みましょうと。upstreamが速いとつらいですが、ちゃんとコードを読んで何が変わったか理解してから使わないと問題が起きますよと。

そして問題が起きたらテストを書いて、2回目は起こさないようにしようと。

fig

顧客へのPaaSの導入サポートでは、顧客のアプリがPaaSで動かないこともあります。

その場合は選択肢が2つに分かれていて、PaaS側で対策するか、アプリ側で対策するか。PaaSを直すと、それをOSSにするか、しないかも分かれます。

ある顧客ではmemcachedが必要だったのですが、当時のCloud Foundryはサポートしていなかったので、実装してみました。これはみんな必要だよね、ということでCloud Foundry本家に投げました。

一方、JavaのWebアプリケーションサーバでResinというのがあります。これをサポートする必要があって、Cloud Foundryに乗せました。でもこれは現状OSSとして公開されていません。それは、そもそもそんなに需要があるかというか、これをやるにはいくつかのライブラリに変更が必要なのですが、それを英語で説得するのが大変だったりするので。

開発が分かってくると、Core Compatibleを守りつつ国内のお客様の要望に応えられるというのが、このサービスの価値なんだなというのがチームで分かってきました。そしてOSSもやる気次第でできる、というのも分かってきました。

ただ、問題も出てきました。

例えばPaaSのテストは、特にシナリオテストでランタイムとアプリの組み合わせが爆発したり、属人化してきて誰々さんじゃないとできないとか、チームで決まったことでもやる人が決まっていて全然チームで動けていないとか。それから振り返りがマンネリ化するとか。

fig

テストの時間がかかる問題は、JenkinsのSlaveを使って並列実行しています。ここで大活躍するのが、自社でIaaSを持っているのでそのリソースを最大限使うことです。

fig

属人化の対策は、毎週必ずペアで作業するようにして、やった内容を1チーム5分でライトニングトークして、その内容をWikiに書いて共有するとか。

fig

それからコードレビューの強化ではGithubのpull requestを使う体制に移行して、必ずオーサー以外がマージするようにしました。

fig

IRCも、飽きないように強化しました。デプロイが始まるとJenkinsが顔文字で知らせるとか。MinchanというRedmineのチケット操作と連動するとか。なぜかこういうものの開発が一番速いです(笑)

fig

振り返りにも飽きてきたので、やり方を変わてKPT以外のことを試したり、金曜日は定時退社日で何が何でも定時に帰らなくてはならないので、どうせなら振り返りをやって定時に帰るとか。そういうのをやりました。

fig

第3章:成果の出たやり方を組織に広げていく

2012年12月におかげさまで商用サービスを開始できました。リリース目標もきっちり守れて成果が出たと。第3章では、それを組織に広げようとしています。

fig

いまやっているのは、隣のプロジェクトと連携したり、隣の人に火をつけると。

これがいまはそんなにうまく行ってないです。

私たちの組織はどうなっているかというと、開発運用をする部隊があって、マーケやPMOなどがありますが、今日の話は全部ここ(PaaSの開発)なんです。

fig

なかなかここからは広がらなくて、なんで広がらないかというと前提が違うし、目標も、リリース規模も内容も、そもそもビルが違うし、ツールはSVNを使ってたりと違う。

でもツイッターで愚痴ってるくらいなら、それより何かしなくちゃいけなくて。

でもやるんだよと。

生き残るためとか、仕事を楽しくするためとか、NTTコムって通信の会社だよねっていわれていてはまずいとか。

fig

で、始めたのが社内勉強会です。昨年末で第五回になって、githubの使い方とか、テストの書き方とか、隣のチームとランチミーティングしたり、よその部署とつながる怪しいIRCのチャンネルを作るんですが誰もいないとか。

何も成果が出ていないわけではなくて、隣のプロジェクトの人と仲良くなったりと、少しずつ前進しています。

fig

まとめると、ここで発表した中にオリジナルなことはないと思っていて、いろんな本やコミュニティでお薦めされた内容をまず試してみて、やってみないと始まらなくて、やってみたらなんとかなった。というのが感想です。

いいな、と思うことがあったらやってみるといいんじゃないかと思います。それからもっとよい方法があれば教えてください。スクラムが部分適用になっててよくないねと、そういうところがあれば教えてください。

fig

公開されたスライド「OSSで作る!クラウドサービス開発戦記

川口氏本人によるセッションの振り返り「DevSumi2013で発表した。」。

あわせて読みたい

アジャイル開発 クラウド Cloud Foundry オープンソース




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本