Backlogには、自社サーバーにインストールして利用するオンプレミス型のBacklogエンタープライズがあります。
今年、2023年4月20日にエンタープライズ2.0.0を、2023年7月27日にVer.1を利用しているユーザーがアップグレードできるように2.1.0をリリースしました。 この記事では、エンタープライズ2.1.0までの開発の様子をお伝えします。
目次
目次
エンタープライズVer.2の開発の目的
目的は3つです。
- クラウド版とエンタープライズ版の機能差をなくす
- クラウド版と同じコードベースにする
- コンテナ上で動くようにする
以前にクラウド版はJavaからScalaに移行しましたが、エンタープライズVer.1はまだJavaのままです。また、クラウド版の機能追加に追いつけていません。
ソースコードの管理のしやすさと、クラウド版の機能追加に追いつくため、クラウド版と同じGitリポジトリに変えます。
コンテナ上で動くように変更するのは、エンタープライズ版のインストール・アップデートをしやすくするためです。
全体のタイムライン
開発を進める中で、どんなことをしていたかについて説明します。
大きく分けて4つのフェーズに分かれます。
- 設計・実装
- 2021/04〜2022/12
- テスト
- 2022/10〜2023/02
- 各ガイド作成・リリースのための作業
- 2023/02〜2023/04
- Ver.1からVer.2への移行ツール開発(2.1.0の開発)
- 2023/04〜2023/07
設計・実装
- 2021/04〜2021/06
- ミドルウェアなど改修箇所の調査
- 2022/01〜2022/03
- Active Directoryからユーザーの一括追加画面の開発
- 2022/05〜2022/06
- セットアップ画面の開発
このプロジェクトが開始して、はじめの2か月は影響箇所の調査をしていました。すぐに影響があると分かる箇所はこの期間に調査を進めて、細かなところは他のフェーズで作業を進める中で適宜確認しています。 設計・実装作業は、エンタープライズ版では使えないAPIや外部サービス連携機能を閉じたり、ほとんどが細々とした改修でした。
インパクトの大きかった機能が2つあり、それは、Active Directoryユーザーのインポート画面、エンタープライズ版のセットアップ画面の開発です。この2機能はクラウド版には存在しないので、クラウド版のソースコードをベースにすると、コードが存在しません。そのため、1からコーディング、テスト等が必要になります。
設計を進める中で、何度か議論が必要になるようなことはADR(Architecture Desition Record)を書き残していました。通常はアーキテクチャについて決定をドキュメントとして書き残すものですが、アーキテクチャに限らず、ADRと同じようなフォーマットで、Wikiに書き残しています。このおかげで、時間が経ってからまた話題にあがっても、ページを読み直して思い出しながら話を進めることができました。
テスト
改修箇所の単体テスト、結合環境での機能テストは、タスク毎に設計・実装のフェーズで実施していました。このフェーズは、それとは別に、シナリオテスト・性能テストを実施していたフェーズになります。
シナリオテスト
シナリオテストは、サーバーにインストール、セットアップ、ログインして各機能を簡単に動かす一連の流れを確認するのと、クラウド版向けに用意されていたE2Eテストをエンタープライズ版でも使えるようにして、テストを流しました。クラウド版向けのE2Eテストで足りないテストケースはCypressを利用して、新たに自動テストを追加しました。追加したテストケースには、セットアップ画面やActive Directoryユーザーのインポート画面のテストがあります。
性能テスト
性能テストは、エンタープライズ版のサーバーを構築するのに必要なスペック(メモリ・CPUコア数)と各パラメーター(ヒープメモリのサイズ、Nginxの同時接続数の設定値など)を調べるために実施しました。推奨するスペックについては、インストールガイドに記載しています。スペック・パラメーターの確認以外に、どのくらいの大量アクセスに耐えられそうか、大量アクセスがあった場合にレスポンスが極端に遅くならないか、なども確認しています。
各ガイド作成・リリースのための作業
このフェーズは、インストールガイドやリリースノートといった各ドキュメントの作成と、本番用のDockerイメージの用意などリリースの準備を進めたフェーズになります。
各ドキュメントは英語・日本語の2種類があります。 Gitで管理できるようにMarkdown形式で書き、レビューのしやすさからGoogle Docsに変換しています。ツールでMarkdownからGoogle Docsに直接変換はできないので、pandocを利用して1度Markdownからdocxに変換します。その後に、Google Driveにdocxファイルをアップロードすることで、Google Docsへの変換を実現しています。
問題点としては、Google DocsからMarkdownへの変換ができないので、レビューにて修正した箇所のMarkdownファイルへの反映は、手動で編集しないといけない点です(ツールでGoogle DocsからMarkdownの同期ができない)。今後改善していきたいです。
このフェーズが終わると、2023年4月20日に、新規に利用するユーザー向けとして2.0.0をリリースしました。
Ver.1からVer.2への移行ツール開発(2.1.0の開発)
Ver.1とVer.2ではデータ構造が異なるので、Ver.1で利用していたDBにVer.2から接続するようにしただけでは動作できません。そのため、Ver.1のデータをVer.2で利用できるかたちに変換するスクリプトを作成しました。
このフェーズが終わると、2023年7月27日に2.1.0をリリースしました。
エンタープライズVer.2について
導入方法
ユーザー側には下記のサーバーを用意してもらい、Docker、Docker Compose、AWS CLIをインストールしてもらいます。 あとは、ECRからDockerイメージをダウンロードして起動するだけです。 詳しくは、インストールガイドに記載しています。
- Ver.2をインストールするサーバー
- DBサーバー(MySQL)
- SMTPサーバー
アーキテクチャについて
サーバーにエンタープライズVer.2をインストールすると、上記の図のような構成になります。 基本的には、Nginxを通ってBacklog APIやボード機能など各サービスと通信します。各サービスのログはfluentdが収集して、ログファイルを出力します。
開発を進める中で、各サービスのコンテナを用意して起動するとすぐに動いたわけではなく、コンテキストパスの問題がありました。エンタープライズ版の場合、URLにコンテキスパスとして/backlogをつける仕様にしています。クラウド版と同じコードベースで開発を進めた際に、各画面のリンク先やクリックイベントが呼び出すAPIにはコンテキストパスがありません。エンタープライズ版の時だけコンテキストパスをつけるように、膨大なソースコードを調査する必要がありました。
まとめ・感想
当初は設計・実装やテスト以外の作業をあまり想定できてなかったので、各ドキュメント作成などに苦戦しました。
開発期間が約2年と長かったですが、ユーザーにも開発者にもメリットのあるものを作り上げられて良かったです。
改善できるところはまだまだあるので、今回の開発経験を活かし、Backlogエンタープライズをより良いものにしていきたいと思います。