フロントエンドツールの整備とアプリケーション改修
2つめは、開発速度向上に向けたツールの導入だ。ここでは、フロントエンドのツールを整備することとした。佐藤氏いわく、JavaScriptの処理が多いのにグローバル空間に配置されており、ファイル間の依存関係も分かりづらく、ライブラリのバージョン管理もされていないので修正コストが大きく、新任のエンジニアの認知負担を上げてしまっている状況だった。だが、フロントエンドの機能は多く、一気に変更するのは危険だ。
佐藤氏たちが考えたのは、開発生産向上に主軸を置いた、フロントエンド機能のモジュール化と依存関係の整理だ。
フロントエンドツールには、JavaScriptのライブラリの依存関係を明確にするためのpnpmと、JavaScriptバージョンの変換とRollup機能による段階的な導入を実現するViteを導入した。その後、実装をモジュール構文に変更し、コード上からライブラリの依存関係が分かるように改修。認知負担を減らし、保守性を高める構成に変えた。「まだフロントエンド関係のスキルが弱いので、TypeScriptまで一気に変換をかけずに、JavaScriptのままで分かりやすく整理した」(佐藤氏)
そして3つめは、アプリケーションの修正だ。ここでは主に、監視アラートでのメトリクス取得やログの抑制を実施した。
「KubernetesのProbeリクエストがアプリケーションのアクセスログに混ざっており、デバッグがしづらく、アプリケーションのメトリクスを取得できなかった。Google CloudのLoggerでフィルタすることも考えたが、デバッグ時はアプリケーションのログを直接参照するので、選択肢から外すことにした」(佐藤氏)
最終的には、アプリケーションのヘルスチェックログを抑制してデバッグしやすく変更し、Prometheus用エンドポイントを作成してメトリクスを取得できるようにしたという。「Prometheusのメトリクスを取得するミドルウェアがDjangoにあるので、それを追加。ログの抑制については、Gunicornを使っていたので、デフォルトのLoggerに対してヘルスチェックを除外するフィルタを追加し、KubernetesのProbeのアクセスがあったときは表示しないように設定した」(佐藤氏)
その他、Gunicornのチューニングや認証認可機能の作成、Kubernetes APIを扱うアプリケーションの実装サポートなど、細かい支援を実施。トヨタ自動車は自走に向けて、一歩ずつ前進を始めた。
特に同社が効果を痛感しているのは、スキルトランスファーの支援だ。
「どう動かそうかではなく、ログをどうやって取ろうか、メモリやCPU、レプリカのバランスをどうするかといった会話ができるまでメンバーのレベルが上がったと評価いただいた」。そう明かす佐藤氏は、今後はメンバーのスキルアップを継続するほか、CI/CDの整備、ユニットテストやE2Eテストの文化の醸成、Monorepoにおけるモジュールの共通化など、より深い開発支援を行う予定と述べる。
SREの導入や開発体制の改善を検討中の人に参考になればと述べる佐藤氏。「トヨタ自動車とスリーシェイクはともに、エンジニアを絶賛募集中。トヨタ自動車については、モダンなアプリケーション構成でSREベースの開発にチャレンジできる。興味があれば、ぜひ問い合わせてほしい」と語り、講演を終えた。