(前回の記事は こちら)
開発者体験(Developer Experience)向上への道
開発者の悩みから開発者体験向上を考えてみることで、具体的な道筋が見えてくるだろう。
例えば、システムや製品がユーザーにもたらす価値を明確にし、それを開発者が理解して作業を進めることは非常に有効なはずだ。機能がもたらす価値を理解しないまま設計、開発、テストを実施していくと、間違った仕様やテストケースに気が付くのが遅れ、システムとしては、要望とはかけ離れたものになる可能性がある。
開発スタイルとしては、短サイクル開発のイテレーション型開発で部分的に完成したものをユーザーに提供し、そのフィードバックから改善を図るのも有効だろう。
既存システムのメンテナンスは重要だが、新しい環境や技術に移行するのが困難であり、関わる開発者もスキルアップが進まないなどの影響を受ける可能性がある。AIは開発者の作業を補助することが可能であり、現在の業務を効率化することが可能となる。
まずは最新技術を活用するところから始めて、その理解を深めていく活動が有効ではないだろうか。
図.開発者体験向上への道
開発に携わっている方はお気付きかと思うが、ここで述べた「業務の効率化」「イテレーション型の開発」などは、日本でも長期間言われ続けているDevOpsとAgile(アジャイル開発)の活用と同じことを目指すものだと思える。
DevOps環境
DevOpsは、企業の運用方針を改善する方法論なので、ツールや環境の話として説明するとお叱りを受けるかもしれない。企業の状況はさまざまなので、ここでは共通の内容として論じることができる環境/ツールの観点で進める形とする。
実際に日本の開発現場で行われているのは、「CIツールによる自動ビルド」「SCMツールによるソースコードとアーティファクトの管理」「Unitテストの実行」までという状況が多いのではないだろうか。
目指すべきDevOpsは、Agile管理サーバーによってバックログ、リリースなどを管理し、それと連動する形でCI/CD(継続的インテグレーション/継続的デリバリー)ツールから自動デプロイされたテスト環境で機能テスト、負荷テスト、セキュリティテストも併せて実行する流れになるだろう。そして、「Ops」の部分に関しては、監視ツールやログから得た情報から問題を検知し、その問題を障害情報としてAgile管理サーバーに送付するまでをつなげる形となる。
細かい部分まで含めると、以下の内容も考慮する必要があると思われる。
- 機能テスト、パフォーマンステストのスクリプトを開発初期フェーズから開発者が作成する
- テスト用のスクリプトを後半のテストフェーズ、運用フェーズでも活用する
- セキュリティテストには開発初期の静的ソースコード解析から、テスト環境での動的解析も含める
- クラウドへのプロビジョニングは、複数のクラウド環境への展開を一元管理して効率化を図る
- インシデント、ナレッジの一元管理
- 問題発生時にシステムの詳細情報を分析して根本原因を調査
- ナレッジに基づいた自動修復
しかし、全てを一度に実装するのは非常に困難なので、CI/CDツールの導入などの基本部分から始めて、徐々にUnitテスト、機能テスト、セキュリティテストなどのように範囲を広げて行く形が有効になるだろう。
図.DevOps環境