クラウドがアプリケーション開発環境を劇的に変えている
江木典之氏は「クラウド技術に代表されるテクノロジーイノベーションが、DevOpsと継続的デリバリーを推し進めるドライバーになりつつある」と語る。
アプリケーション開発におけるクラウドの重要性は、数字でも裏付けられている。たとえばIBM 2013 Annual Reportでは、以下のように示されている。
- 今後、新規に開発されるソフトウェアの85%がクラウド対象となる。
- すべてのアプリケーションの4分の1がクラウドで利用可能になる。
- 開発者の4分の3が、アプリケーション開発にクラウドサービスを利用。
本セッションのテーマは「クラウドによりアプリケーション開発の環境、やり方がどう変わっていくか」になる。中でも江木氏が注視しているのが「ジャスト・イン・タイムな開発」だ。つまり「必要な時に、必要な物を、必要な分だけ作る」こと。
従来、開発プロジェクトを開始する際、開発・実行環境の調達にはまとまった予算と多くのプロセスが必要だった。それがクラウドでは、ユーザー登録と招待だけで、数十秒で環境を入手することができる。加えてWeb APIの利用により、クラウドで提供されるサービスや機能を組み合わせて、アプリケーションを構築できる。例えばGoogleマップを利用したアプリケーションなどが分かりやすい。さらに人的リソースも、クラウド・ソーシング会社を介して調達できる。クラウドにより、初期投資を抑えた早いリリースが可能となっている。
ただ江木氏は「素早く動くものをリリースできれば十分なのか?」と疑問を呈す。なぜなら「サービスの優位性やユーザー体験は、時間とともに低下する」からだ。その要因として挙げられるのが「ライバルが同じようなサービスを出す」「もっと魅力的なサービスが出る」「登場インパクトの賞味期限」などになる。
頻繁に価値を提供しない製品・サービスは、どんどんインパクトを失っていく。優位性を保つにはやはり、継続的デリバリーが重要で、価値/UXが落ちないようにキープしなければならない。そこでもっとも重要となるのが、ユーザーからのフィードバックの継続的な獲得だ。つまりデリバリーとフィードバックのループを、どれだけ早く回せるかにかかっている。
継続的デリバリーを可能にするクラウドサービスとは
では、継続的デリバリーとフィードバック獲得には、どのような開発環境、実行環境、サービスが必要になるのか。江木氏は「実行環境と連携したデプロイ自動化など、チームによるアジャイル開発をサポートしている必要がある」と語る。継続的デリバリーの環境に加えて、定期的にフィードバックを得る環境を自前で用意するのはかなり大変だ。
そこで有用だと期待されるのが、IBMのクラウドサービス、開発環境である「IBM DevOpsサービス」と実行環境である「Bluemix」である。
DevOpsサービスはSaaSで提供されているチーム開発環境で、アジャイル開発と継続的なデリバリーをサポートしている。メニューにはソース管理、バックログ管理、ビルド&デプロイなどがあり、実行環境と連携したデプロイ自動化もできる。GitHub連携や、Web IDE(Orion)も使用可能となっている。
「フィードバックとの連携」ではモバイルが重要視されている。モバイルアプリの中にライブラリを組み込み、ユーザーが操作していて「何か変だな」と思ったときに機器をシェイクするとフィードバックモードに変わる。そこから画面キャプチャーや、メッセージを送信できるようになっている。その情報が開発者にフィードバックされる。
実行環境のBluemixはIBMクラウド上で提供されるPaaSで、様々なプログラミング言語に対応したアプリケーションのランタイムを提供している。ランタイムから容易に利用できる多くのサービスがあり、たとえばビッグデータ関連では、「オンデマンドでHadoopベースのアナリティクスをアプリケーションに追加する」というものがある。
ベースになっているCloud Foundryはオープン・スタンダードであることから、移植性が高い。
ここで江木氏はデモを披露した。シナリオは「開発環境を作ることから始め、Bluemix上に含まれているTwilioというサービスを使用したアプリケーションを構築する」というものだ。Twilioは、以前は多くの手間を要した「電話の機能」をアプリに簡単に組み込むためのサービスで、実際ここで使われたソースコードは25行程度だった。
デモではまずDevOpsサービスにおいて、様々なメニューを選択していくだけでチケット管理、進捗管理、スクラムのスプリント枠設定などができるチーム開発環境が、数十秒で構築される様子が披露された。
ソースコードが入ったZipファイルのドラッグ&ドロップで、Eclipseにコードをインポートし、実行環境のBluemix側にデプロイする。ここからアプリを実行すると、対象である江木氏のケータイが鳴る、という流れだ。以前であれば企画からリリースまで数か月を要した電話機能入りアプリの開発が、クラウドを使うことにより、個人のレベルにおいて数十分で実現できたことになる。
加えてこの「素早いリリース」を、継続的デリバリーに繋げる仕組みがある。チケット管理、コード修正後のPushをトリガー化などと組み合わせたデプロイ自動化だ。
江木氏はさらに「クラウドの特性により、デプロイ自体が変わってきている」と指摘する。一つは「Blue-Green Deployment」と呼ばれているもので、もともと動いていた環境(Blue)と同じ環境(Green)を用意する。新しいモデルを新環境にデプロイし、OKとなればルーターで外部からのリクエストが行く環境を切り換える。
この手法ではサーバーの停止と再起動が不要なのでダウンタイムが短くなる利点もあるし、不具合があればすぐに戻せばいい。リソースの調達が柔軟なクラウドならではの手法だ。
また「Canary Deployments」という手法もある。これも古いアプリから新しいものに切り換えるためのものだが、ここではルーターの切り替えを行わない。現在古いアプリが動いている環境に、新しいものをデプロイするが、その時点では古い方に100%のトラフィックがある。その後、動作を確認しながら、新しい方に徐々に移行していく。最終的に100%新しい方に交換するというものだ。
Bluemixでは、Canary Deploymentsに近いことが可能だ。 BluemixはCloud Foundryなので、cfコマンドが使える。
> cf create-route dev mybluemix.net -n egitest
> cf push --no-route -p A -m 64M egitest-a > cf push --no-route -p B -m 64M egitest-b
> cf map-route egitest-a mybluemix.net -n egitest > cf map-route egitest-b mybluemix.net -n egitest
> cf apps name state instances memory disk urls egitest-a started 1/1 64M 1G egitest.mybluemix.net egitest-b started 1/1 64M 1G egitest.mybluemix.net
2000年頃、アジャイル開発という考え方が出てきたが、当時はなかなか広がらなかった。環境が整っていなかったからだ。最後に江木氏は「今はクラウドによりアジャイル開発がやりやすくなり、継続的デリバリーが可能になっている。使わない手はない」と語り、セッションを閉じた。