2019の2日目の記事です。SWETの加瀬(@Kesin11)です。SWETグループではいくつかの分野ごとにチームを分けて活動をしており、自分は現在CI/CDチームで主にゲーム事業部向けのJenkinsやCI/CDのサポートをしています。Actionsを活用したことについての記事です。xcode-installとはxcode-installはその名の通り、XcodeのインストールやアンインストールをCLIから可能にするxcversionというコマンドを提供するgemです。StoreやAppleのデベロッパー向けサイトからXcodeをダウンロードして手動でインストールしているでしょうから、そのようなツールがなぜ必要なのかと不思議に思われるかもしれません。iOS開発におけるCI/CDには、CircleCIやBitriseといったマネージドサービスを利用することが一般的になってきました。ビルド時間やリポジトリ容量などの問題からそのようなサービスを使いにくいプロダクトも存在します。ビルド用macOSの両方を自前で構築、管理することになります。このビルド用macOSのマシンには、iOSアプリをビルドするための様々なツールを予めセットアップしておく必要があり、Xcodeもその1つです。マシンが1台だけであれば手動で全てのツールをセットアップ可能ですが、ビルドマシン増設を容易にするためSWETではAnsibleを採用してビルドマシンの各種ツールのセットアップを自動化しています。Ansibleでツールをインストールする際には、homebrewのようなCLIツールが提供されていると簡単です。そこで、Xcodeをインストールするにはxcode-installが必要不可欠となります。10.3をインストールしようとしたところ、なぜか失敗するようになっていました。xcode-installが使えなくなるのは自分たちの業務に大変影響があるため、原因を調査して修正することにしました。10系でインストールに失敗するというものでした(issue)。11系のインストールは問題がなかったためか、自分以外にissueで報告している人もいないようでした。10.3のインストールが成功するように修正をしました。xcode-installを修正する難しさ自分は数年前からxcode-installを使用していますが、過去にも度々動作が不安定になったり、特定の人の環境では失敗するという話を社内で聞くことがありました。不安定な要因として、xcode-installに関係する環境の複雑さがありますmacOSのバージョンRubyのバージョンFastlaneのバージョン1インストールしようとしているXcodeのバージョンxcode-installの過去のissueやpull-reqを見てもらうと分かるのですが、自分の環境では動いた/動かなかった、という報告が多いです。11.1の間に含まれる他のバージョンで逆にインストールが失敗してしまうのではないか不安がありました。本来であれば全てのバージョンで動作確認をするべきなのですが、Xcodeのインストールは自分の環境で1回あたり30-40分程度の時間がかかることと、xipをダウンロード後の解凍や検証の処理でCPUパワーが使われるためになかなか辛いものがありました。Actionsを利用したリグレッションテスト手元のmacで実行するのが難しいのであれば、外部のマシンパワーをお借りしたいところです。Actionsがオープンβで個人的にも色々試していた時期で、macOSのVMも使えることが分かっていました。このmacOSのVMを利用してxcode-installの過去のXcodeバージョンのインストール動作確認、すなわちリグレッションテスト(回帰テスト)を行うことを思いつきました。自分が修正パッチを当てる前は、10系のXcodeのインストールが失敗するという状態でしたので、実際に全てのXcodeのバージョンについて問題なくインストールできることを確認することにしました。確認の手順としては以下になります。Actionsを動かし、全てのバージョンで問題なくインストールできることを確認できましたので、自信を持って本家にpull-reqを送ることができました。Actionsは他のCIサービス同様に、publicなリポジトリであればオーナー以外のユーザーも実行ログを確認できます。自分は今回pull-reqを出した側でしたが、レビュワーも実際に動いたログからデグレしていないことを確認できたため、安心できたのではないでしょうか。Actionsのコードはメンテナの方に興味を持ってもらえたようで、別のpull-reqで本家にマージされました🎉xcode-installの動作確認が簡単になることで他の方もコントリビュートしやすくなり、今後は安定性も向上するでしょう。Actionsの少し変わった活用方法をご紹介しました。Actionsでは他のCIサービスと同様にLint、ユニットテスト、デプロイというフローを組み立てるのが一般的だと思いますが、応用次第で今回のように色々と面白いことができるはずです。最後に、CI/CDチームでは社内におけるCI/CD環境の開発・提供を通じて、開発者が開発に専念できるプロセスを支援しています。興味を持たれた方は下記の職種で採用をしておりますので、ぜひご応募ください。Portalにアクセスする処理などにFastlane内部のライブラリが使用されていたりします。2days開催レポートはじめまして、SWETの井口(@hisa9chi)です。(1)リンクプライバシーポリシースターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。