Update2016/7/6Rails環境にCircleCIをサクッと導入する方法EngineeringAuthorkakinokiこんにちは、エンジニアの柿木です。今までのスペースの時間貸し利用だけでなく、宿泊貸しでの利用もできるようになりました。スペ−スマーケットさて、今回は、そんなスペースマーケットの開発で利用しているCIツールのお話です。スペースマーケットでは、今まで、CIツールはWerckerを利用していました。諸々の事情と、並列テストなどを利用してテスト時間を短く出来そうという理由から、CircleCIにサクッと移行することにしました。本日は、その時の調査・導入の過程を共有したいと思います。全体像の把握まずは、色々と情報を得ようと、Google先生にCicleCIについて聞いてみました。僕が参考になったのは、以下のリンクでした。設定ファイルとかが参考になりました価格お金がかかることなので、価格についても、もちろんリサーチ。2コンテナ目からは、ひと月50$かかりますが、1コンテナ使うだけでは無料そうなので、とりあえず無料枠から始めてみることにします。Ruby/Railsが対象なので、きちんとサポートされていることを公式ドキュメントで確認します。特徴Docker使って色々と出来そうではありましたが、とりあえず、サクッと入れる上で関係ありそうな特徴は以下2点でした並行テスト可能CircleCIでは、並列にテストを実行してくれるとのことで、これはテストが早くなって便利そう!と思いましたが、複数コンテナ利用している場合のみの挙動らしく(まぁ、そらそうか)、今回はこの恩恵に与れず。ログイン可能これは、今回、かなり便利になりました。Wercker上だと失敗する問題が発生した際に、エラーログからはトレースできず、どうしてもデバッグしたくなる時があったからです。CircleCIの場合、ビルドごとにDockerが起動してテストが始まる動きとなるらしく、テスト後、そのDockerに30分間SSH接続して、デバッグすることができます。いざ、導入してみる設定手順やるべきこととしては、以下の通りです。SSH接続CircleCIへのSignUpとGitHubのリポジトリ登録こちらは超簡単。参考にCircleCIに登録して、GitHubのリポジトリを登録します。登録すると、こんな管理画面が表示されます。PROJECTSから登録できます。circle.ymlとdatabase.yml.ciの追加circle.ymlはRailsアプリケーションのルートディレクトリに配置します。CircleCIを読んで、理解しました。何ができるのかをざっくりチェックすることです。Ruby/Railsを参考にcircle.ymlを作っていきます。スペースマーケットで設定しているcircle.ymlと実際の内容は違いますが、こんな感じで設定できます。spec/また、CircleCI上で新規にデータベースを構築して、テストを行うので、CircleCI用のdatabase.yml.ciも作成します。動きとしては、上のcicleci.ymlのdatabaseのphaseでテストのために、database.ymlをdatabase.yml.ciで上書いています。これまた、実際の内容とは違いますが、こんな感じでdatabase.yml.ciは設定しました。Variablesから設定しておくことができます。Slackとの連携Slackを利用しているチームも多いと思いますが、CircleCIはビルド結果をSlackに通知することが可能なので、そのための設定も入れておきました。参考にSlackとCircleCIの管理画面で簡単に設定できます。設定がうまくいって、CircleCIからテストを行うと、こんな感じで、Slack上に通知がされます。ビルドしてみる上記手順で作成した、circle.ymlとdatabase.yml.ciをGitHub上にpushすると、CicleCIのビルドが自動的に動き始めます。ビルド結果は、Slackへの通知、GitHubのPR画面、CircleCIの管理画面、あと、登録しているメールアドレスにも通知してくれます。これだけ確認できる箇所があれば、ビルドの失敗も見落とさないですね。以下は、ビルド結果をCircleCIの管理画面で確認する時の画面です。GitHubのPR画面では、以下のような感じで確認できるようになります。SSH接続してみる特徴のところで記載した通り、CircleCIでは、CircleCI上に構築された一時的なテスト環境へSSH接続して、デバッグすることが可能です。enabledを実行することで、ビルド終了後、30分間SSH接続することができるようになります。接続情報は以下のように表示されます。SSH接続に関する手順は、公式ドキュメントが参考になります。SSH接続するには、事前に、GitHubとのSSH認証を行えるようにしておく必要があります。参考に設定することをオススメします。まとめ今回は、CicleCIの導入を検討されている方にも参考になるよう、調査から導入までの過程を書いてみましたが、いかがでしたでしょうか。実際の作業では、プロジェクト個別のエラー対応などももちろんありましたが、それでも全体として、半日くらいの時間でと入れることができました。機能が豊富な上に、簡単に無料で導入できるのは、開発者としてありがたい限りです。民泊プロジェクトの中で、ひとまず移行というカタチで導入しましたが、まだまだ色々な機能がありそうなので、今後も色々とメンテナンスしていければと考えています。最後まで読んで頂き、ありがとうございました。AuthorkakinokiエンジニアとPMをしています。お酒が好きですが、肝臓が悲鳴をあげだしたので、適度な付き合い方を模索しています。