1ヶ月間仕事でOSSの開発をしてきた

1ヶ月間仕事でOSSの開発をしてきた
TaKO8Ki
April 1, 2021

こんにちは、TaKO8Ki です。

3/2から3/31までサイバーエージェントのDeveloper Productivity室でPipeCD というOSSのCDツールの開発を行うインターンをしていました。

以下では、仕事でOSSの開発をしたことの感想と実際に取り組んだタスクについて書いていきます。

PipeCDとは?

Docs から引用すると下記のようなものです。

PipeCD provides a unified continuous delivery solution for multiple application kinds on multi-cloud that empowers engineers to deploy faster with more confidence, a GitOps tool that enables doing deployment operations by pull request on Git.

KubernetesだけでなくAWS LambdaやCloud Runなどマルチクラウドに対応しているのが大きな特徴です。 簡単にまとめるなら、「マルチクラウドなリソースのGitOps運用ができるようにサポートしてくれるCDツール」という感じかな?

デプロイには、一般的なデプロイ・Blue-Greenデプロイ、Canaryデプロイがあります。

既存のCDツールとしては、FluxCD・ArgoCDがあり、それらとの比較は下記の記事に詳しく書かれていました。

汎用的な継続的デリバリーツール PipeCD が出たぞ

次に下記の図を見ていきましょう。

img

コンポーネントアーキテクチャー

上図にpipedとControl Planeという概念があるのでそれについて簡単に説明します。

piped (dはdeamonのd)は、clusterにインストールするSingle Binaryなコンポーネントで、これがデプロイメントタスクを処理します。
Control Plane は、pipedからデプロイ情報を受け取ってデプロイステータスなどのデプロイ情報を表示します。

以上がざっくりとしたPipeCDの説明です。実際に動かしてみたいという方は、
QuickStart に取り組んでみることをお勧めします。

取り組んだタスク

AWS ECSデプロイをサポートする下記のissueに取り組みました。

Support deployment for AWS ECS #1568

先程少し触れましたが、PipeCDではQuick Sync DeploymentPipeline を使ったデプロイメント(blue-green deployment、canary deployment)があります。

今回は、ECS deploymentのQuick Syncを実装しα版まで持っていくことがゴールでした。

一ヶ月の内序盤1、2週間はECSのキャッチアップを行い、主に後半2週間で実装を行いました。 最終的にマージされたPull Request は10個で、なんとかQuick Syncを完成させることができました。

pull request

一通りデバッグして動くことは確認したのですが、細かい調整のための実装が残っていたりするのでそれは暇な時にでもPR出そうと思います。インターン期間が終わっても開発を続けられるのはOSSの良いところですね。

仕事でOSS開発をしてみて

普段から自分 でOSS作ったり、rust-clippydiesel などのRustで書かれたOSSにコントリビュートすることがよくあるのですが、 お金をもらってOSS開発するのはこれが初めてでした。

仕事でOSS開発をすることのいいところとしてまず挙げられるのは、「commit historyが外部にも見えること」だと思います。 ソフトウェアエンジニアとしてどんな仕事をしているのかを公開することで自分が何者であるのかを分かりやすく示すことができます。

次に挙げられるのが「ユーザーが開発に参加できること」です。通常のプロダクトの場合は、ユーザーからのフィードバックを受けて、実際に何を開発すれば良いのかを整理し開発に取り掛かりますが、OSSの場合は実際にユーザーが開発に参加することができます。これに「よってユーザーが本当に欲しい機能は何か?」を探る手間が省けます。

また、開発チームとしては優先順位が高くない機能開発を外部のユーザーが行うことで需要がそこまで高くないとされる機能の開発を行うこともできます。

最後に、少しOSSとはずれますが、こういったSaaS・ツールを開発するに当たって実際に現場でサービスを使うことは非常に重要です。 単にOSS communityとしてCDツールを開発するのとは違い、企業として開発することで社内の様々なチームでサービスを使ってもらい、フィードバックを受けることができます。 今回のインターンでも別チームからフィードバックを受ける機会がありましたが、やはりユーザーが身近にいて、フィードバックを受けながら開発を受けるのが自分に合っていると感じました。

最後に

改めてOSSの開発の楽しさを感じました。 ぼちぼち就活も終盤なので、「仕事でOSS開発するのか」・「個人的な活動としてOSS開発するのか」をちゃんと考えてどこに行くのかを決めようと思います。