DevOpsを実現するためのWebアプリテンプレート開発とメンテナンス

2023/10/12
株式会社日立ソリューションズ
技術革新本部 生産技術部 Cloud Center of Excellence
ITアーキテクト

三好 秀徳© Hitachi Solutions, Ltd. 2023. All rights reserved.

Contents
1. 背景・動機
2. 改善したいこと
3. 改善策の立案
4. 改善策の実現方法
5. 改善策の実装
6. ソフトウェア開発の変化と改善策への反映
7. 改善策実施に関する定量的評価とその効果
参考資料© Hitachi Solutions, Ltd. 2023. All rights reserved.

1

１. 背景・動機© Hitachi Solutions, Ltd. 2023. All rights reserved.

2

１-１ 背景・動機
1.

当社ではDevOpsを実践するためのツールや環境を長期間提供⚫

ソースコード管理：GitLab、自動ビルド／テスト：GitLab CI⚫

詳細情報◆

SPI Japan 2018『新しいITサービス開発への取り組み、DevOps実践を目指して！』◆

https://www.jaspic.org/events/sj/spi_japan_2018/

提供機能
ソースコード管理

自動ビルド・テスト

GitLab

GitLab

アプリ実行

Cloud Foundry© Hitachi Solutions, Ltd. 2023. All rights reserved.

3

2. 改善したいこと© Hitachi Solutions, Ltd. 2023. All rights reserved.

4

２-１ 改善したいこと
ツールや環境はあるが、DevOpsの実践が低調⚫

全GitLab利用プロジェクト中、CI/CD機能の利用は1割未満◆ GitLab利用のほとんどがソースコード管理としての利用提供機能
ソースコード管理

自動ビルド・テスト

GitLab

GitLab

主な利用機能アプリ実行

Cloud Foundry

CI/CD機能© Hitachi Solutions, Ltd. 2023. All rights reserved.

5

２-２ DevOpsの実践が低調な理由を探る
これまで実施している手作業で困っていない

これまでの手作業と同じ結果が得られるのか？

具体的にどのように実装してよいか分からない

実装にかける工数に見合う成果が得られるのかが不明© Hitachi Solutions, Ltd. 2023. All rights reserved.

6

3. 改善策の立案© Hitachi Solutions, Ltd. 2023. All rights reserved.

7

３-１ やらない理由とその対策案の思考
項番

やらない理由1

これまでの手作業で困っていない2

これまでの手作業と同じ結果が得られるのか？

3

具体的にどのように実装してよいか分からない

4

実装にかける工数に見合う成果が得られるのか不明

後からDevOpsを導入するのは困難
コピー＆ペーストできる実例が必要？
全員が頑張る
DevOpsは導入が困難

DevOpsを標準とした実装をプロジェクト開始時から使えば課題は発生しない？
© Hitachi Solutions, Ltd. 2023. All rights reserved.

8

３-２ やらない理由とその対策案の整理
項番

やらない理由対策

1

これまでの手作業で困っていないー2

これまでの手作業と同じ結果が得られるのか？

⚫ プロジェクト開始当初からDevOpsを標準とする

3

具体的にどのように実装してよいか分からない⚫ 日本語ドキュメントの作成⚫ 実装例の提示

4

実装にかける工数に見合う成果が得られるのか不明⚫ プロジェクト開始当初からDevOpsを標準とする

DevOpsの実装例を盛り込んだテンプレートを開発・メンテナンス© Hitachi Solutions, Ltd. 2023. All rights reserved.

9３-２ テンプレートの開発・メンテナンスに依る想定波及効果
1.

DevOpsを実践することに依る定量的指標の獲得⚫

ミドルウェアやライブラリのバージョンアップ対応に要する時間の比較◆ 書籍・ネット情報ではなく、自身の実績値を得たい

2.

テンプレートを構成する部品に関する知見の獲得と展開⚫

ミドルウェア、ライブラリ、ツールに関する知見の獲得© Hitachi Solutions, Ltd. 2023. All rights reserved. 10

4. 改善策の実現方法© Hitachi Solutions, Ltd. 2023. All rights reserved. 11

４-１ DevOpsとは？

“DevOps（デブオプス）は、ソフトウェア開発手法の一つ。開発(Development) と運用 (Operations) を組み合わせたかばん語であり、開発担当者と運用担当者が連携して協力する（さらに両担当者の境目もあいまいにする）開発手法をさす。ソフトウェアを迅速にビルドおよびテストする文
化と環境により、確実なリリースを、以前よりも迅速に高い頻度で可能とする組織体制の構築を目指している。”
DevOps – Wikipedia 2023年8月8日（火）参照
https://ja.wikipedia.org/wiki/DevOps

ソフトウェアを迅速にビルドおよびテストすることに貢献するテンプレートを志向© Hitachi Solutions, Ltd. 2023. All rights reserved. 12

４-２ テンプレートの実装方針
1.

当社プロジェクト実績・世間シェア・保有技術力を踏まえた技術選定

2.

手作業で実施している作業の洗い出しと自動化

3.

The Twelve-Factor Appの実装

4.

テンプレート自身が有する機能の単純化⚫

5.

ツールは極力標準設定で利用する⚫

6.

メンテナンス性、利用可能性を高めるため設定ファイルの設定に時間を費やすのを避けるためカバレッジ100%を目標とした自動テストの実装⚫

メソッド単位の単体テスト＋HTTPリクエスト単位での結合テスト© Hitachi Solutions, Ltd. 2023. All rights reserved. 13

４-３ テンプレートの実装方針（本日ご説明するもの）
1.

当社プロジェクト実績・世間シェア・保有技術力を踏まえた技術選定

2.

手作業で実施している作業の洗い出しと自動化

3.

The Twelve-Factor Appの実装

4.

テンプレート自身が有する機能の単純化⚫

5.

ツールは極力標準設定で利用する⚫

6.

メンテナンス性、利用可能性を高めるため設定ファイルの設定に時間を費やすのを避けるためカバレッジ100%を目標とした自動テストの実装⚫

メソッド単位の単体テスト＋HTTPリクエスト単位での結合テスト© Hitachi Solutions, Ltd. 2023. All rights reserved. 14

5. 改善策の実装© Hitachi Solutions, Ltd. 2023. All rights reserved. 15

５-１ テンプレートの実装方針（本日ご説明するもの①）
1.

当社プロジェクト実績・世間シェア・保有技術力を踏まえた技術選定

2.

手作業で実施している作業の洗い出しと自動化

3.

The Twelve-Factor Appの実装

4.

テンプレート自身が有する機能の単純化⚫

5.

ツールは極力標準設定で利用する⚫

6.

メンテナンス性、利用可能性を高めるため設定ファイルの設定に時間を費やすのを避けるためカバレッジ100%を目標とした自動テストの実装⚫

メソッド単位の単体テスト＋HTTPリクエスト単位での結合テスト© Hitachi Solutions, Ltd. 2023. All rights reserved. 16

５-２ テンプレートの具体化
当社プロジェクト実績・世間のシェア・技術カバレッジを踏まえ選定・具体化
項番

項目値

1

何を作るか？

Webアプリ（簡易ブログ＋認証機能）

2

言語は何にするか？

Java

3

フレームワークは何にするか？

Spring Boot

© Hitachi Solutions, Ltd. 2023. All rights reserved. 17

５-３ テンプレートの実装方針（本日ご説明するもの②）
1.

当社プロジェクト実績・世間シェア・保有技術力を踏まえた技術選定

2.

手作業で実施している作業の洗い出しと自動化

3.

The Twelve-Factor Appの実装

4.

テンプレート自身が有する機能の単純化⚫

5.

ツールは極力標準設定で利用する⚫

6.

メンテナンス性、利用可能性を高めるため設定ファイルの設定に時間を費やすのを避けるためカバレッジ100%を目標とした自動テストの実装⚫

メソッド単位の単体テスト＋HTTPリクエスト単位での結合テスト© Hitachi Solutions, Ltd. 2023. All rights reserved. 18

５-４ ヒアリングから得られた手作業の洗い出しと自動化の実装

わずかな人の努力でプロジェクト全体の効率化が望めるものを中心に自動化
1.

ビルド

6.

ライブラリ依存管理2.

コーディングルール確認・修正

7.

ライブラリ更新確認

3.

ステップカウント

8.

ライセンス情報取得

4.

カバレッジ取得

9.

データベース構成図作成

5.

詳細設計書作成

10. テスト（単体・結合）© Hitachi Solutions, Ltd. 2023. All rights reserved. 19

５-５ 手作業の自動化で活用したツール
項番

項目活用ツール

1

ビルド

Gradle2コーディングルール

Google Java Format

3

ステップカウント

cloc

4

カバレッジ取得

Jacoco5

詳細設計書作成

Javadoc

6

ライブラリ依存管理

Gradle7

ライブラリ更新確認

Gradle plugin

8

ライセンス情報取得

Gradle plugin / sbom-tool

9

データベース構成図作成

Flyway / SchemaSpy

10

テスト（単体・結合）

JUnit / Docker© Hitachi Solutions, Ltd. 2023. All rights reserved. 20

５-６ テンプレートの実装方針（本日ご説明するもの③）
1.

当社プロジェクト実績・世間シェア・保有技術力を踏まえた技術選定

2.

手作業で実施している作業の洗い出しと自動化

3.

The Twelve-Factor Appの実装

4.

テンプレート自身が有する機能の単純化⚫

5.

ツールは極力標準設定で利用する⚫

6.

メンテナンス性、利用可能性を高めるため設定ファイルの設定に時間を費やすのを避けるためカバレッジ100%を目標とした自動テストの実装⚫

メソッド単位の単体テスト＋HTTPリクエスト単位での結合テスト© Hitachi Solutions, Ltd. 2023. All rights reserved. 21

５-７ The Twelve Factor App
1.

モダンなWebアプリとしてあるべき姿をまとめた12個のベストプラクティス⚫

2.

https://12factor.net/ja/

抽象的かつ難解な記述で理解が難しい⚫

特定の言語やフレームワークに適した記述が求められている© Hitachi Solutions, Ltd. 2023. All rights reserved. 22

５-８ The Twelve Factor App
1.

最近のWebフレームワークであれば標準で実装

2.

注意が必要なのは以下の点。サンプル実装を提示⚫

Ⅲ.設定 設定を環境変数に格納する◆

https://docs.spring.io/springboot/docs/current/reference/html/features.html#features.external-config⚫

Ⅵ.プロセス 1つもしくは複数のステートレスなプロセスとして実行する⚫

Ⅺ. ログ ログをイベントストリームとして扱う◆

https://docs.spring.io/springboot/docs/current/reference/html/features.html#features.logging© Hitachi Solutions, Ltd. 2023. All rights reserved. 23

6. ソフトウェア開発の変化と改善策への反映© Hitachi Solutions, Ltd. 2023. All rights reserved. 24

６-１ ソフトウェア開発の変化と改善策への反映
1.

クラウド対応⚫

再試行の考慮
“プライベート クラウド システムを含め、クラウド ホスティングには、低コストで入手できる多数のコンピューティング ノードを使った動的リソース割り当て、共有リソース、冗長性、自動フェールオーバーによって、全体的な可用性を引き上げる効果があります。 しかし、クラウド環境の性質上、一時的な障害が発生する可能性はより高くなります。”
一時的な障害の処理 – Best practices for cloud applications 2023年8月8日（火）参照
https://learn.microsoft.com/ja-jp/azure/architecture/best-practices/transient-faults© Hitachi Solutions, Ltd. 2023. All rights reserved. 25

６-２ 再試行に関するクラウドベンダーの情報
クラウドベンダー提供のSDK利用、リトライ処理用ライブラリの使用⚫

Amazon Web Services：ジッターを伴うタイムアウト、再試行、およびバックオフ◆⚫

https://aws.amazon.com/jp/builders-library/timeouts-retries-and-backoff-with-jitter/

Azure：再試行パターン◆

https://learn.microsoft.com/ja-jp/azure/architecture/patterns/retry⚫ リトライ処理用ライブラリ：Spring Retry◆

https://github.com/spring-projects/spring-retry© Hitachi Solutions, Ltd. 2023. All rights reserved. 26

６-３ ソフトウェア開発の変化とその対応
2.

Docker／コンテナ対応⚫

Twelve Factor Appsに沿った設計・実装が前提⚫

コンテナイメージ作成ツールJibの活用◆ Dockerfileの作成、メンテナンスが不要◆ ベストプラクティスに沿ったコンテナイメージが作成できる◆ https://github.com/GoogleContainerTools/jib© Hitachi Solutions, Ltd. 2023. All rights reserved. 27

７. 改善策実施に関する定量的評価とその効果© Hitachi Solutions, Ltd. 2023. All rights reserved. 28

７-１ 作業工数
1.

テンプレートの作成、メンテナンス⚫

初期バージョン作成 : 20日 （2019年4月～2019年5月）⚫

メンテナンス（2019年5月～）◆ メジャーバージョンアップ : 1日～3日 / 6か月毎
◆ マイナーバージョンアップ : 3時間 / 1か月毎

2.

各種ドキュメント作成⚫

5日/ドキュメント × 10本 = 50日◆ Dockerセットアップ方法＋使い方◆ The Twelve Factor Apps解説＋実装例© Hitachi Solutions, Ltd. 2023. All rights reserved. 29

７-２ テンプレートの利用数とDevOps実践に対する貢献
1.

テンプレートの直接的な利用⚫

2.

6プロジェクト

DevOps実践の推移⚫

DevOps機能利用プロジェクト、実行回数ともに増加◆ 2019年4月時点： 5プロジェクト、573回実行↓◆ 2023年7月時点： 18プロジェクト、2,504回実行© Hitachi Solutions, Ltd. 2023. All rights reserved. 30

７-３ 想定波及効果に対する定量的評価
1.

DevOps実践に依る改善効果の定量化⚫

メジャーバージョンアップ（6か月ごと） 5日 → 1日～3日◆ 非互換性候補の確認／検証に時間がかかる⚫

マイナーバージョンアップ（1か月ごと） 3日 → 3時間◆ 自動テストの実行で検証の大半が終了

2.

テンプレートを構成する部品に関する知見の獲得と展開⚫

作成した資料の閲覧数 累計1,000 view （2022年7月～）© Hitachi Solutions, Ltd. 2023. All rights reserved. 31

参考情報© Hitachi Solutions, Ltd. 2023. All rights reserved. 32

参考情報①1.

Spring Bootを使ったWebアプリケーションのテンプレートを社内OSSとして開発・メンテナンス⚫

2.

Spring Boot⚫

3.

https://spring.io/projects/spring-bootGoogle Java Format⚫

4.

https://qiita.com/hidenori-miyoshi/items/e95d4f639ebc98a93084

https://github.com/google/google-java-format

Flyway⚫

https://flywaydb.org/© Hitachi Solutions, Ltd. 2023. All rights reserved. 33

参考情報②5.

SchemaSpy
⚫

6.

Jib⚫
7.

https://github.com/GoogleContainerTools/jib

sbom-tool⚫
8.

https://schemaspy.org/

https://github.com/microsoft/sbom-tool

The Twelve-Factor App⚫

https://12factor.net/ja/© Hitachi Solutions, Ltd. 2023. All rights reserved. 34

参考情報③9.

再試行に関するクラウドベンダーの資料⚫

Amazon Web Services：ジッターを伴うタイムアウト、再試行、およびバックオフ◆

https://aws.amazon.com/jp/builders-library/timeouts-retries-and-backoff-with-jitter/⚫

Azure：再試行パターン◆

https://learn.microsoft.com/ja-jp/azure/architecture/patterns/retry© Hitachi Solutions, Ltd. 2023. All rights reserved. 35

END
DevOpsを実現するためのWebアプリテンプレート開発とメンテナンス••••••

Cloud Foundryは、Cloud Foundry.org Foundation , Inc.の米国及びその他の国における商標または登録商標です
Spring Bootは、Pivotal Software, Inc.の米国及びその他の地域における登録商標または商標です
Javaは、Oracle International Corporationとその子会社および関連企業の米国およびその他の国における登録商標です
GitLabは、GitLab B.V. の米国及びその他の国における登録商標または商標です
Dockerは、Docker, Inc. の米国及びその他の国における登録商標または商標です
その他記載の会社名、製品名は、それぞれの会社の商号、商標もしくは登録商標です© Hitachi Solutions, Ltd. 2023. All rights reserved.