ドイツテレコムMMS社
・業種
ITサービス・ITコンサルティング
・地域
ドイツ ドレスデン
複数のチームやプロジェクトにまたがってAnsibleのコードの品質管理を行うのは容易なことではありません。ドイツテレコムMMS社のシステムエンジニアであるAndreas 氏に、多種多様なAnsible環境を管理するという複雑な業務に、彼らチームがスチームパンク スポッターの助けを借りてどのように対処しているか話を聞きました。
彼らはSteampunk Spotterの書き換え機能により大幅に時間を短縮できただけでなく、Ansible Playbookの改善やアップグレード、メンテナンスにおいて手作業と比較して2~4倍の高速化を実現しました。
それではドイツテレコムMMS社の目標や導入プロセス、これまでに達成した結果、その過程で学んだ貴重な教訓について詳しく見ていきましょう。
Ansibleの複数バージョン管理という課題
ドイツテレコムMMS社では、顧客のフローを自動化するために複数のチームでAnsibleを使用していましたが、問題はそれぞれのチームがAnsibleの異なるバージョンを使用していたことでした。
Ansible Lint(解析ツール)やRenovate(ライブラリの自動更新ツール)といったツールを使い、コードをチェックしてAnsibleを更新していても、コードをクリーンに保ち、ロールやコレクションの重複を避けることは困難でした。
求める先のゴール
「すべてのプロジェクトのAnsible コードを最新バージョンに更新し、アップグレードできれば理想的だと考えていました」とAndreas 氏は説明します。
しかし、複数の顧客とリポジトリが異なるチームメンバーによって管理されていたため、コードの更新は大きな課題となりました。
彼らの求めるゴールは多岐にわたりました。
- コードの品質を高めて、チームメンバー全員が簡単に理解できるようにする
- 特定のモジュールの使用を禁止して、セキュリティを向上させる
- 業界のベストプラクティスに準拠する
- オープンソースプロジェクトの品質を向上させる
Steampunk Spotterのセットアップ
ドイツテレコムMMS社は、わずか4ヶ月ほど前にSteampunk Spotterの導入を行いました。
Andreas 氏はこのように述べました。
「Steampunk Spotterを初めて自社のコードでテストしたとき、まだやるべきことが山積みだと気づきました。例えばあるプロジェクトでは、すでにリンティングのような仕組みを導入していたにもかかわらず、スキャンごとの平均エラー数と検出されたエラー総数が極めて多かったのです」

当初、彼らは効率的なワークフローを構築する必要がありました。チームは主にVS Codeを使用しているため、VS Code用Steampunk Spotterの拡張機能を活用したワークフローを作成することにしました。
複数の顧客を抱える中で、それぞれのコードベースにおけるエラーを区別し、進捗状況を追跡したいと考えていました。そのため、Steampunk Spotter内で複数のプロジェクトを作成しました。
「顧客ごとのプロジェクト用にプロジェクトIDを含む設定ファイルを作成しました。この設定はSteampunk Spotterと非常に相性が良く、自動的に設定ファイルを検索し、プロジェクトIDを使用してスキャンを実行してくれるのです」(Andreas氏)
しかし、コマンドラインインターフェース(CLI)用のソリューションも必要でした。そこで、CLIから簡単にスキャンを実行できるスクリプトを開発しました。このスクリプトは、シンプルに「spots」と入力し、スキャンしたいパスやSteampunk Spotterで通常使用する追加パラメータを指定するだけで動作します。
このスクリプトでは、Steampunk Spotterのトークンとエンドポイントが必要で、これらは通常通りエクスポートされます。チームは「spots」のエイリアスを設定し、リポジトリ内のVS Code設定ファイルからプロジェクトIDを抽出する変数を定義しました。
プロジェクトIDが見つからない場合はエラーがスローされ、プロジェクトIDが見つかった場合は指定されたパラメータを使用してSteampunk Spotterのスキャンが実行されます。
このスクリプトはLinuxやWindows Subsystem for Linux(WSL)などのbash環境で使用するために設計されています。
「PowerShellやWindowsコマンドライン用のバージョンは作成していませんが、必要に応じてユーザーが適応させることは可能です」(Andreas氏)
Linuxの場合、このスクリプトを.bashrcファイルに追加してログイン時に読み込むことで、この機能を自動的に使用できるようになります。

強力な機能でコードを最適化
Steampunk Spotterの助けを借りて、ドイツテレコムMMS社のチームは短期間で大きな進歩を遂げました。彼らはPlaybookを最新の基準に引き上げ、これまで時間がなく放置されていたコードのセクションを微調整し、10を超えるプロジェクトで複数のベストプラクティスを取り入れることに成功しました。
Andreas氏とチームは、完全修飾クラス名(FQCN)の不足や要件ファイルの欠如などの一般的なエラーに取り組みました。また、Steampunk Spotterは非推奨のコードの使用箇所を特定し、ループを実装することで効率化できる領域を提案しました。
さらに、Ansibleのコピーやテンプレートモジュールの使用では、モードを明示的に設定することで最適化を実現しました。こうした取り組みは社内プロジェクトにとどまらず、Steampunk Spotterによる提案を基にした大規模なマージリクエストを通じて、オープンソースプロジェクトであるNomadコンソールに多大な貢献を果たしました。また、Steampunk Spotterを活用して社内のオープンソースプロジェクトの改善にも取り組みました。
ドイツテレコムMMS社のチームは、特にSteampunk Spotterの「リライト(書き換え)」機能に大いに満足しており、特にプロジェクトの初期段階でこの機能を積極的に活用しました。この機能により、コードの品質を容易に向上させることができ、作業量と作業時間を大幅に削減することができたのです。
「当初、リライトの総数は非常に多かったのですが、これはSteampunk Spotterが自動で対応してくれるおかげなので、良い兆候だと思いました。最終的には、検出されるエラーの総数を減らすことができました。この機能は私たちにとって非常に価値があり、非常に多くの時間を節約してくれました」(Andreas氏)

さらに、Steampunk Spotterは継続的なコード改善を促進します。新しいコードをスキャンすることで、最新のベストプラクティスに沿った状態を維持し、コードベースが常に進化し続ける状態にしてくれます。
このプロセスを通じて、私たちのチームは継続的なサポートを提供し、シームレスで快適なユーザー体験を確保するために全力を尽くしました。
「XLABと一緒に仕事ができたのでは、とても良い経験でした。1つ、2つの機能のリクエストや、バグレポートを作成しましたが、非常に迅速に対応していただきました。常にサポートしてくれる姿勢が素晴らしかったです」(Andreas氏)
コード品質を向上し、開発者のストレスを軽減
Andreas氏は、既存の仕組みがある場合でも、Steampunk SpotterがAnsible Playbookの品質を大幅に向上させる点を強調しました。Steampunk Spotterのリライト機能は、手動で行うよりも2~4倍速く、かなりの時間を節約します。
また、Steampunk Spotterは非推奨項目をチェックし、必要な変更についてのガイダンスを提供することで、アップグレードを簡単にします。これにより、開発者は最新のベストプラクティスに沿った最先端のコードを書くことができ、直接的にROI(投資利益率)を追跡することは難しいものの、エンジニアのストレスを大幅に軽減し、より楽しい作業に集中できるようになりました。
最後にAndreas氏はこのように述べています。
「Steampunk Spotterは新しいPlaybookを書く際や、ベストプラクティスに基づいて既存のPlaybookのエラーを自動的に修正する際に優れた力を発揮します。この機能は本当に素晴らしく、Steampunk Spotterを間違いなくお勧めします!」