リリースサイクルの高速化とソフトウェア品質の改善――。永遠とも言える開発者の課題だ。3000人以上の開発者を抱える米NetAppでは、DevOps環境を構築し、それまで24カ月程度の期間を要していたリリースサイクルを1カ月にまで改善し、オープンソースとして公開されている技術に、自社技術を組み合わせることで実現したという。今回、同社 エンジニアリング担当シニアディレクターを務めるBiren Fondekar氏に話を聞いた。

3000人以上の開発者を抱えたNetAppの課題

NetAppには自社製品を出荷前に使う「カスタマーゼロ」というチームを抱えている。カスタマーゼロを率いるFondekar氏は、NetAppのデータ管理ソフトウェア「ONTAP」の機能を利用して、継続的開発・継続的インテグレーション(CICD)を導入し、DevOps環境を構築した。

同社が抱えていた課題として、3000人以上の開発者が世界中に分散して作業をしているため、コードミスがあると世界各地の開発者全員が影響を受ける、つまり生産性が落ちるという状況があった。

「コードの効率化、ビルドの迅速化、信頼性のあるサンドボックスの構築、安全で再運用可能なバイナリ上でテストを走らせる。どの企業も共通して抱えているような課題をわれわれも抱えていた」とFondekar氏は述べる。

試行錯誤を繰り返す

作業は2011年に着手した。最初に行ったことは、開発者がワークスペースの生成に要する時間の短縮だ。ONTAPでは典型的に1000万行から1100万行という大規模なコードベースがあるが、それまではソースコード管理「Perforce」のクライアントを作成し、ソースコードを入れ、ビルドを実装し...というステップにより80分をチェックアウトに要していた。

最初に試したのはハードリンクの追加だ。ユーザーのワークスペースからハードリンクを作成するというもので、半分の40分まで削減できた。一方で、この方法はUX(User Experience:ユーザー体験)が良くなかったため、数カ月試した後に再度やり直すことに。

最終的に行き着いたのが「FlexClone」を使うという手法だ。FlexCloneは、NetAppの仮想クローンイメージ複製機能で、スナップショットエンジン上で動き、瞬時に作成できるという利点を持つ。デーモン(UNIX系OSの常駐プログラム)を走らせ、FlexCloneを使ってワークスペースを作成し、新しいクライアントをPerforceで登録するというステップにより、わずか2~3分に短縮できたという。

  • ソフトウェア開発を加速

    ソフトウェア開発を加速

次に、Fondekar氏らはビルド時間の短縮に手をつけた。ここでも、やはりFlexClone技術を用いることで、インクリメンタルなビルド環境を実現した。

継続的インテグレーション「Jenkins」の継続的開発・継続的インテグレーション(CICD)パイプラインを走らせるが、コードが加わると10分単位でビルドを作成、ビルドが成功するとそのビルドのスナップショットを取るという仕組みを構築した。スナップショットのクローンを作成しておくことで毎時間サニティテスト(動作確認)を行い、継続インテグレーションのテストは3時間ごとに行うというものだ。

  • ビルドの概

    ビルドの概要

このようなパイプラインにより「開発者は常に安定性のある環境を確保できる」と、Fondekar氏は胸を張る。パイプラインが終わると、ONTAPのデータレプリケーション技術であるSnapMirror機能を使い、イメージをミラーリングし、すべての開発サイトにプッシュする。

スモークテストにおける失敗など、何らかのエラーが発生した場合でもエラー部分のみを取り出してバックコミットし、スナップショットがあるためスクラッチからやることはなくなり、常にインクリメンタルに作業ができるという。Fondekar氏は「生産性、市場提供までの時間、効率を改善できた」と手応えを口にした。

  • 米NetApp エンジニアリング担当シニアディレクターを務めるBiren Fondekar氏

    米NetApp エンジニアリング担当シニアディレクターを務めるBiren Fondekar氏

総じて、ONTAPではワークスペースは60倍高速に作成でき、ビルド時間は50%削減、さらにはコンピュート、ネットワーク、ストレージの効率性も20~40倍減少したという。このようなDevOps環境を利用することで、これまで1~2年だったONTAPのリリースサイクルは6カ月、クラウドプラットフォーム「ONTAP Cloud」は1カ月の短縮を可能とした。

また、開発者のモチベーションも上がった。同氏は「それまで、新しいコードを入れ、テストグループがテストして結果を戻すまでに2~3週間かかっていた。DevOps環境により15分もすればフィードバックが得られ、どのコードが悪いのかその場でわかる。イノベーションの速度が速くなった」と、説明した。

実際、以前は2年のリリースサイクルにおいて最後の6~9カ月はテストを繰り返していたが、開発しつつテストが可能なため、開発者の作業はぐっとはかどったという。