Blogは、AnyTechのエンジニアたちによる調査や成果、Tipsなどを公開するブログです。~CI/CD編~技術共有AnyTechの赤川です。Lite(以下、Liteと記載)というものを提供しております。Liteはブラウザベースで稼働するソフトウェアとなっており、その開発メンバーとして参画しています。今回は、我々が開発に利用している技術を紹介する第一弾として、CI/CDをどのようにしているかを紹介しようと思います。CI/CDとはまず簡単にCI/CDとは何かをここでまとめておきましょう。Integrationの頭文字をとったものです。変更されたコードの品質をチェックするためのテストの実行であったり、コードのフォーマットのチェックなど色々なことを自動化することができます。Deliveryの頭文字をとったものです。CDでは、ステージング環境へのデプロイや自動リリースプロセスなどが一般的に含まれているかと思います。それぞれの詳しい解説については、さまざまな場所で説明されているのでここでは割愛させていただきます。Actionsを利用して実施しています。Actionsについて詳しくは以下を参照ください。CIをどのように利用しているか次に、Liteを開発する上でどのような背景がありCIを利用しているかを説明させていただきます。Liteの技術背景について簡単に説明させていただきます(それぞれより深い内容は別途紹介記事を執筆予定です)。2023/11時点ではLiteはフロントエンドとバックエンドから構成されており、それぞれ専用のDockerコンテナを立ち上げることで動作する仕組みとなっています。バックエンド内には個別の役割を持つ複数のコンテナ(以下、サーバと記載)が起動する仕組みになっています。Liteは現時点ではオンプレミスサーバ(以下、物理サーバと記載)上で動作するソフトウェアとなっています。上記を踏まえた上で、まずはCIをどのように導入しているかを説明させていただきます。上述のように、Liteは複数のサーバをベースとしたソフトウェアになっています。Actionsにて定義しています(サンプルはバックエンドのPythonサーバに対して適用しているものの例であり、一部省略しています)。"xxx/cspell.yml"ソースコードのフォーマットをチェックし、修正が必要な場合はエラーとなる仕組みになっています。バックエンドはPythonを利用して開発されており、PEPに従うようにチェックが入るようになっています(なお、precommitの仕組みを入れているのでGitHubにpushされる前にフォーマットチェックは実行されていますが、検知漏れがあってはいけないので実施しています)。xxxサーバごとにテストコードが用意されており、全てのテストコードが通ることが要求されます。pytestPRが作成された際に自動的にCIが実行されるようになっており、CIが成功するまではPRがマージされることはありません。CIを導入することにより、開発されたコードの品質が一定担保されることにより、ロールバックが起こる可能性も減り、かつコード品質を維持した開発を実施できています。CDをどのように利用しているか次にCDをどのように利用してるかを説明します。前提として、Liteは上述のように物理サーバ上に構成される構成となっています。顧客ごとにセキュリティポリシーがあるため、外部ネットワークへの接続ができない場合も多くあります。そのため、CDを用いて直接物理サーバにデプロイすることは現時点では実施していません。LiteはDockerコンテナを複数起動してサーバを構築し、それらを物理サーバで動かす構成にしています。物理サーバに対してコンテナイメージをデプロイする必要があるのですが、コンテナイメージを手動で作成しようとするとかなり手間がかかるので、CDでは主に各サーバをイメージとして配布できる形式にするための一連のワークフローが実装されています。概略としては以下のようなものが実装されています。コンテナイメージを格納するためにGCSとの連携を実行コード難読化処理を適用Dockerイメージをビルドしファイルに落とし込むGCSにアップロードするまた、CD実行時はパラメータを指定することにより、顧客の構成にあったコンテナイメージが自動的に構築されるようになっています。まとめ今回は、Lite開発についてどのようにCI/CDを適用しているかを説明させていただきました。CIを導入する前後を比較すると、コードの品質維持であったり、テストコードが実行されないまま開発が進むことを防ぐことができ、結果として開発ペースおよび品質維持がよりできていると考えています。CDを利用することで、dockerイメージの管理であったりビルドプロセスを手動でする必要がなくなり、別の作業に時間を割くことができるようになり開発ペースが向上していることを実感しています。CI/CDを構築したことがない方にとっては最初はハードルが高いと感じるかもしれませんが、導入するのとしないのとでは大きな差があると思いますので、ぜひ導入してもらえたらなと思います。AnyTechの赤川です。Lite(以下、Liteと記載)というものを提供しております。Liteはブラウザベースで稼働するソフトウェアとなっており、その開発メンバーとして参画しています。Ltd.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。