やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

第6回「じどうかの窓口。」セミナー 〜クラウド時代のCIサービスとエコシステム〜 に行ってきました #ta_madoguchi

株式会社SHIFTさんで開催された「じどうかの窓口。」セミナーに行ってきました。今回のテーマはクラウドCIサービス(CI as a Service)。

madoguchi100.connpass.com

クラウドCIサービス5つの比較紹介

まず、SHIFTの太田さんから。

  • CI:継続的インテグレーションVCSへのコミットごとに自動テストを含むビルドを行なう、アジャイルのプラクティス。インテグレーション、せいぜいステージング環境へのデプロイまでを指す
  • CD:継続的デリバリー。CIにとどまらず、本番環境へのデプロイまでをパイプラインとして実行する
  • CIツールは、Apache Continuumなどが第一世代、Jenkins(旧Hudson)が第二世代、そしてクラウドCIサービスが第3世代と言える
    • Jenkinsの問題点として、維持管理にコストがかかる、環境が特殊になりすぎて「Jenkinsでしかビルドに成功しない」など。
  • クラウドCIサービスは、ざっと調べただけでも30以上ある
  • 代表的なクラウドCIサービスとして、5サービスを紹介・比較。
    • Travis CI
    • Circle CI
    • drone.io
    • Wercker
    • DEV@Cloud
  • Travis CIとCircle CIは、iOS/Androidアプリにも利用できる(OS Xが使えるサービスは少ない)
  • Circle CIはGitHub Enterpriseでも利用できるプランがあるが、OS Xは使えない
  • Werckerは日本で流行っている印象。利用者の4割ほどが日本人
  • DEV@CloudはJenkinsのクラウド版。無料プランは無いが、トライアル期間はある
  • どのサービスを使うにしても、そのサービスに依存してしまっては同じことの繰り返し。パイプライン構築にwalterのようなツールを使うなどしてポータビリティを上げたほうが良い

CI及びCDについて詳しく知るには『継続的デリバリー』がおすすめです。

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

また、以下の二冊にもCI/CDの概要および、Travis CIの使いかたが紹介されています。

システムテスト自動化 標準ガイド (CodeZine BOOKS)

システムテスト自動化 標準ガイド (CodeZine BOOKS)

  • 作者: Mark Fewster,Dorothy Graham,テスト自動化研究会,伊藤望,玉川紘子,長谷川孝二,きょん,鈴木一裕,太田健一郎,森龍二,近江久美子,永田敦,吉村好廣,板垣真太郎,浦山さつき,井芹洋輝,松木晋祐,長田学,早川隆治
  • 出版社/メーカー: 翔泳社
  • 発売日: 2014/12/16
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る
iOSアプリテスト自動化入門

iOSアプリテスト自動化入門

プルリクエスト駆動型国産コードインスペクションサービスSideCIの紹介と活用方法

SideCIを運営する、株式会社アクトキャットの角さんによる、SideCIの紹介、デモ。

  • SideCIは、コードレビュー向けのCIサービス。インスペクションをやってくれる
  • GitHubと連携し、pull-requestに対してコードの問題点や改善方法をコメントしてくれる
    • インスペクションの対象はpull-requestに含まれるファイルのみなので、フォーカスを絞って対応できる
  • 裏では各言語向けのLint等インスペクションツールを走らせている
    • ツールによっては、SQL Injectionも指摘してくれる
  • 現在はPHP, Ruby, Pythonなどを中心にサポート
  • 現在ベータサービスだが、ほぼすべての機能を無料で提供しているので、ぜひ使ってみて欲しい

www.sideci.com

ディスカッション:クラウドCIサービスやその周辺サービスの活用と課題

テーブルごとに分かれてディスカッション。私のいたテーブル(4名)で出た話は以下の通り。

  • 4名とも、現在はJenkinsを利用*1。しかし内情はそれぞれ異なっている
    • AWS上に構築、AWSの契約は顧客
    • 社内サーバに構築。Active Directoryを使う都合でテスト実行環境を外部に置けない
    • iOSアプリ開発ではビルド環境のバージョンアップ時期にはクラウドサービスは使いにくい
    • 本番環境には直接つながっていない、顧客管理下である、などの理由で、デリバリーまではつながっていない
  • いずれも、Jenkins専任の担当者はおらず、インフラ担当者などが兼任しているが負担は大きい
  • Jenkins環境の安定性はひとつの課題であると太田さんの話にありましたが、AWS上に構築し、イメージの履歴管理をするなど工夫している
  • テストまでは実行しているが、インスペクションについてはわかれた
    • PyLint, pep8を実行している
    • 古いコードがあり、その内部品質が悪いため、インスペクションのエラーに対処しきれない
      • エラーとなるしきい値をチューニングしては?
      • Googleの出した"bugspots"を使う/組み合わせるといいかも?
      • インスペクション対象を指定できればいいかも?
  • クラウドCIサービス導入への課題
    • テスト実行環境の制限
    • 料金。顧客に納得させるか、受託側でかぶるのか
    • 以前オープンソースのプロジェクトにpull-requestを出したとき、ビルド待ちがとても長かった(数時間〜半日)
      • Freeプランだと待つ。有料プランではもっと速いはず

最後に、他のテーブルの「クラウドサービスを利用できない理由」

  • コードを外に出せない、セキュリティ、SLA(ダウンタイムとか)
  • サービスを組み合わせて使うということは、サービスの数だけ会社の承認を取る必要がある

まとめ

みんな苦労してるんだな、というか、苦労してるからここに来たんだな、という当たり前の感想を持ちました。

クラウドサービスにはまだ課題があるとして、それ以前にテスト実行環境のコンテナ化など、テスト実行を安定させるためにできることは多そう。

蛇足ですが、SHIFTの太田さんと玉川さんが監訳された本を持参してサインいただきました!

Seleniumデザインパターン & ベストプラクティス

Seleniumデザインパターン & ベストプラクティス

*1:私も受託案件はJenkins