手軽にCI/CDパイプラインを始めたくてオンプレ版のAtlassian製品からCloud版のBitbucket Pipelinesに乗り換えた話
はじめまして
はじめましての方ははじめまして、そうでない方もはじめまして。MotionBoard開発部の武島吉郁と申します。
2019年4月にウイングアークへ新卒入社を果たし、もうそろそろ1年が経とうとしています。趣味はサッカーの試合を観ることです。2019年9月初頭に技術本部内のLT大会でサッカー×統計学を発表テーマとして登壇したので、ウイングアークの方はもしかしたら覚えてくださっているかもしれません。
これから話すこと
SPQI部の荒川さん(Kentaro Arakawa)に誘っていただいたのがブログを書くきっかけとなりました。こういうブログを書くのは初めてなので、温かい気持ちで読んで頂けたら幸いです。
結論としては、手軽にCI/CDパイプラインを始めるならCloudサービスでいいよねという話です。
3行でざっくりまとめると
- 最近興味を持ったCI/CDパイプラインを始めてみたくて、社内サーバーで運用されているAtlassian製品のBambooに挑んだ。
- 使用したいビルドツールの利用には壁があり、貧弱メンタルで挫折した。
- Atlassian CloudのBitbucket Pipelinesを使ってみたら目的まで最短でたどり着いた。感動した。
Atlassianの製品ではCI/CDパイプラインを構築するサービスとしてオンプレ版ではBamboo、Cloud版ではBitbucket Pipelinesが提供されています。両者の機能面での差はほぼなく、オンプレ版かCloud版かという違いしかありません。(両者の比較サイト)
ウイングアークではConfluenceやJIRA、Bitbucketといったオンプレ版のAtlassian製品一式を社内サーバーに入れて運用しており、Cloud版のAtlassian製品は採用していません。
そういった事情ですが、現在の私の業務として進めているアプリケーション開発の過程で、先輩の方々からの助言もありCI/CDと言う概念とサービスについて調べていました。そして「なんて素晴らしい世界なんだ!試しに使ってみたい!!」と1人で無邪気に盛り上がったのがことのはじまりです。
Bambooを諦める
まず、社内サーバーですでに運用しているBambooでやってみるのが自然な流れですよね。
実際に、私のアカウントでビルドの手順を定義するタスクの作成を試みたのですが、今使用しているsbtというビルドツールを利用できるタスクの定義がなかったのため、いくつかの問題点に直面しました。
- スクリプトタスクというものを自作すればビルドができそうだが、ハードルが高そう。
- sbt用の外部プラグインがあるが、開発もサポートも止まっているためBambooのバージョンアップ時に非対応になる可能性が高い。
- プラグインの追加には、サーバー管理者に費用対効果を説明した上でワークフローを通した申請が必要。
特に3つ目の壁が大きく感じました。
私個人としては新しく興味を持ったCI/CDをとりあえず試してみたいという私的な欲求しかなかったのでサポート切れのプラグインでも構いませんでした。しかし、そのためだけに社内リソースを使うことの合理的な説明をする自信も勇気もありませんでした。
したがって、他のサービスで実現できないかという考えに至りました。
Bitbucket Pipelinesに救われる
私は入社後の研修時代に作ったAtlassian Cloudの無料アカウントを持っていました。そこで利用できるCI/CDのサービスがBitbucket Pipelinesです。Bitbucket Cloudと統合されたサービスなので、すでにいくつかリポジトリを管理していた私はすぐに始められそうだと期待して手を伸ばしました。
その結果、つまずく事なくすんなりとCI/CDを回すことができました.sbt問題も秒で解決しました。
やったことは、ビルドの流れを記述するbitbucket-pipelines.ymlファイルをルートディレクトリ下に置いて、その1行目にimage:bitbucketpipelines/scala-sbt:scala-2.12
を書いただけです。この1行で、AtlassianがDocker Hubで公開しているsbt用のDockerイメージ(ここ)をフォークして使うことができるんですね!
あとはビルドの流れを馴染みのあるsbtコマンドで書いていくだけです。
まさに楽園に降り立った気分です!
シンプルで使いやすいUI/UXを体感しました。ちょっと前まで何もしらなかった新卒1年未満のエンジニアが「簡単にできた!」と実感できるって素敵だと思います。リモートにpushしたら自動でテストまで走って生成されたアーティファクトがアップロードされるようになってしまいました。数時間前に夢見ていた世界へBitbucket Pipelinesは連れて行ってくれました!!
まとめ
手軽に始めるならCloudサービス
繰り返しますがBambooもBitbucket Pipelineも機能面での違いはありません。ですが、社内サーバーで管理しているBambooでは私1人だけの気持ちを押し通してサポート切れのプラグインを入れて貰うのは現実的とは言えません。
どんなサービス内容でも、Cloud版の良さは手軽に始められる点にあります。オンプレ版は目的に合わせて追加機能や性能を柔軟にカスタマイズできる利点もありますが、今回の私のケースでは、いち早く試してみたいという軽い動機だったので、新規のプラグイン追加に対する維持費用や管理費用を上回る導入効果をステークホルダーに説明するというフェーズを乗り越えることなく諦めてしまいました。
子供の頃、スーパーの食料品売り場でお母さんに食べたい物をねだってもなかなか買ってもらえませんが、すぐそばにある試食コーナーで試食するだけなら簡単ですよね。私はお母さんにお菓子を買ってもらうことの費用対効果を説明して納得させるのではなく、試食コーナーのつまみ食いで満足するに至ったのだと思います。
ここからは、この体験を通して私が得られたエンジニアとしてのマインドの話です。
UI/UXというソフトウェア品質がもたらすもの
同じ機能用件でも、Cloud版の製品の方がオンプレ版の製品に比べて手軽に始められて幸せだったという体験でした。
導入後の運用コストまでを計算に入れて採用するかどうか決める必要があるオンプレ製品と、サーバーの調達すら不要だが解約も簡単にできてしまうCloud製品では、お客さんの事情も売り方も全然違うのだろうなあと想像できました。
その上で、ソフトウェア品質の面で問われる最初の問いは、いかに少ないユーザー負担でアウトカムをいち早く届けられるようなUI/UXを実現できるかだと思います。せっかくサーバー運用に関する一切の手間を省いて使いはじめたはいいが、製品そのものが使いにくかったらユーザーは諦めてしまうんですね。
逆に、ユーザーの目的を最短でかなえるようなUI/UXであれば、今回のBitbucket Pipelinesのように最高の幸せと感動を届けることができ、ユーザーの心を鷲掴みにできるのではないでしょうか。