2024年4月に北國銀行様ならびにデジタルバリュー様が法人向けインターネットバンキング(北國デジタルバンキング)をリリースされました。 ZEN Advisorでは、PaaSを利用したアーキテクチャやフロントエンドのモダナイズ、IaC含むDevOps、スキーマ駆動開発、AI活用など、北國銀行様のプロジェクトを多様な側面でサポートしてきました。 この度、取り組みの振り返りも兼ねてインタビューを実施させていただきました。様々な技術的挑戦を実現された背景として、企業文化も大きく関係しているようでした。
北國フィナンシャルホールディングス 株式会社北國銀行 執行役員 システム部長
株式会社デジタルバリュー 代表取締役 岩間正樹 様
北國フィナンシャルホールディングス 株式会社北國銀行 システム部 開発グループ マネージャー
株式会社デジタルバリュー テクノロジー部 マネージャー 北篤 様
北國フィナンシャルホールディングス 株式会社北國銀行 システム部 開発グループ チーフ
株式会社デジタルバリュー テクノロジー部 シニアディベロッパー 池田寛由 様
株式会社デジタルバリュー テクノロジー部 シニアディベロッパー 掛水優輝 様
ZEN Advisorは全体設計の検討にも参画し、フロントエンドからインフラの幅広い領域でPaaSを利用した全体アーキテクチャ検討やライブラリの選定をサポートさせていただきました。
アプリケーション全体をどう設計していくかをご相談頂いたのが、ZEN Advisorをお使い頂くきっかけになったかと思います。初めは.NET関連や、マイクロサービス間の連携をgRPCでやるかNuGetパッケージを使ったプロジェクト参照でやるか、といったような話をしていましたよね。
北様 (以下敬称略): マイクロサービスでAzureをどううまく使っていくのかなど、全体設計からサポート頂いたことを覚えています。
池田様 (以下敬称略): マイクロサービスでは設定ファイルが分散して管理が難しいという課題がありましたが、その管理方法についても相談に乗っていただきました。
北: 設計をする上で色んな方法が取れると思うのですが、その選び方や道筋を幅広い視点からサポートいただきました。設定ファイルが散らばるという点においても様々なサービスで解決できますが、それぞれの技術的な特徴や我々の仕様に合わせるとどれがいいのか、など深くサポート頂いたのが強く印象に残っています。
Azureの各サービスの概要から提案するのは簡単ですが、細かい制約があったり、実際には使えなかったりというケースは良くあります。ZEN Advisorではお客様のサービスを深く理解しながら進めるケースが多く、仕様に合った技術を提示させていただいています。
北: あとは半年に一回くらいのペースでAzureは技術のアップデートがたくさんあるので、そのキャッチアップもスムーズにできました。例えば設定ファイルの管理でいうと、新しく出てきたKey Vault Referenceを共有頂いたのは大変助かりました。 その他ではApp Serviceによる東日本リージョンのAZ対応が印象的で、可用性の考え方が変わりましたね。ちょうど岩間さんの方で北國銀行としてのSLOを明確にしていただいていたタイミングだったので、どうしていくかというのを一緒に考えられたのも良かったです。
掛水様 (以下敬称略): フロントエンドも走り出しからサポートいただきました。MVCからモダナイズしようという活動で、SPAフレームワークの設計のベストプラクティスが分からないなか、手探りで進めていました。ZENさんに伴走してもらいPoCレベルのサンプルコードを共有してもらったことで、設計方針をブラッシュアップすることができ、次に進めることができました。
フロントエンドは、画面数がこのくらいなのであれば、このライブラリが良いなど、抽象的な内容から決めることが多かったと思います。ZEN Advisorの Web会議で相談していただけたので効果的に進められました。
掛水: 画面数の話では、状態の違いも含めると400件ほどになるということで、モノレポの仕組みを提案頂いたのはチーム開発するうえで大変助かりました。 モノレポでの課題としては、共通スタイルを開発する際に一部画面が壊れてしまうところがありました。途中からですが Storybookを使って、ビジュアルリグレッションテストしながら、他の機能に影響させないことを意識して開発を進められました。
フロント含めて設計部分でサポートをさせていただきましたが、それ以降の相談はかなり減った印象でした。開発が淡々と進んでいるんだろうなぁと思っていたのですが、そういう雰囲気だったのでしょうか?
北: その通りです。設計段階でそれ以降の生産性が決まりますが、しっかりと技術的サポートを頂いていたので、その後は大きな問題なくさくっといった感触でした。
実際に設計の段階で色々なパターンを試されたと思うのですが、そのメリットが活かされた感じですね。開発が一番ピークになるときに技術的な課題があまりない状態になっていたんですね。
サービス運用に欠かせないDevOpsもサポート。リリースの即日対応やセキュリティ維持を実現されました。また、IaCやスキーマ駆動開発によりインフラ管理とフロントエンド・バックエンド間のコミュニケーションを効率化されています。
本格的にAzure Pipelineを利用したのは、法人インターネットバンキングが初めてなのでしょうか?
北: 他のプロジェクトで一部利用していたのですが、今回はAzure Pipelineを利用した方が楽という前提でフルスクラッチしました。それまでは本番ルームで手動によるリリース作業がありましたが、Azure Pipelineを利用するようになり手作業の必要がなくなりました。技術的なサポートももちろん、業務仕様をビジネス側含め行内全体でDevOpsへの理解があったことも推進できた1つの要因です。 Azure Pipelineは初心者にはちょっとクセが感じられるのですが、ZENさんがテンプレート化してくれたのが本当に有り難かったです。
池田: レガシーな銀行の周辺サービスに対応するため、一部のアプリケーションは直接VMにデプロイする必要がありました。その際、Azure DevOpsのPipelineを用いたVMへのデプロイ方法についてもサポートしていただきました。銀行のレガシーシステムに合わせたサポートを提供していただけたことは、本当に助かりました。
DevOpsはネットワークの制限などでなかなか利用できないこともあるので、運用できていること自体が素晴らしいと思います。
池田: サービスのGA直後に不具合が発生し、早急に改善リリースを行う必要があったことが何度かありました。昼頃に発覚した不具合であっても、即座に改修とテストを行い、夜にはリリースすることができました。即日対応が可能であったのは、しっかりとしたDevOps基盤を構築していたおかげだと感じています。
北: インフラ側でいうと、Bicepの推進をサポートいただきましたが、ARM Templateと比較してかなり楽になりました。
IaCの実現ということでTerraformとBicepをどっちにしようか?というところから、既に使っていたARM Templateにデコンパイルできるという視点で、Bicepを提案させていただきました。
北: 我々に合っているものを提案頂いたことから生産性が上がって、私の手が空くことに繋がり、別のプロダクトを手伝うこともできました。 最初はインフラメンバーが6〜7人だったのですが、今は3人しかいないです。何人かは他のプロジェクトでIaCの技術を普及してもらっています。
IaCは整合性のためでもあるのですが、実際にインフラ担当の手があいて、他の付加価値のある作業に回すというのが、本当の狙いなんですよ。
掛水: フロントエンドでは、ご提案頂いたOpenAPI Generatorを利用したスキーマ駆動開発により、バックエンドとのコミュニケーションが効率化されました。 もともとバックエンドの修正に伴ってフロントエンドのコードを手直ししていたのですが、たびたび手戻りも発生しものすごい工数を取られていました。 OpenAPI Generator でスキーマを生成し npm package で配信、フロントエンド側へ取り込み用の Pull Request 作成までを CI/CD で行うようになったので、かなり効率化されました。
セキュリティの話になるのですが、セキュリティを維持するためにはDevOpsレベルでの脆弱性チェック体制が重要となります。その点も相談いただきましたよね。
北: セキュリティの観点では、どうやってライブラリを保守していくのかを相談させてもらいありがたかったと、モバイルの開発メンバーから伺っています。
掛水: フロントエンドもライブラリの更新をCI/CDで回していて、セキュリティ維持の運用が形になっています。
パッケージアップデートをどう回せばよいのかという問い合わせがありましたが、五月雨で実施するのではなく、Pull Request、レポジトリを作って回す話をさせていただきました。チェックをせずにマージしてしまってパッケージが壊れてしまうことを防ぐのも重要ですよね。
Azure OpenAI Serviceの検討もサポートさせていただきました。インフラ管理の効率化により、新しい技術を積極的に取り入れる時間も確保されています。
北さんも最初はインフラ担当という感じだったのが最近ではAIも含めて色々な領域を見るようになりましたよね。
北: そうですね、IaCのおかげです。OpenAIの活用では、アラートの内容からRAGを使って関連情報を取れるようになり、運用保守を簡略化できています。その部分でもZEN Advisorに大変お世話になりました。
池田: Pipeline化が進んでいくなかで、エラーコード一覧を手動でメンテナンスするのが面倒になり、Pull Requestのマージ時にコード内のコメントからエラーコードとその内容の一覧をエラーコード一覧に自動反映する仕組みを構築しています。次はこのエラーコード一覧をRAGの情報元に加えることによって開発から運用までさらに1段上の自動化が行えるのではないかと期待しています。
北國銀行様が自信を持って内製化されている裏にはZEN Advisorが存在しており、技術のキャッチアップ面でも良い刺激となりました。
池田: 打ち合わせの際には、よく「この案についてどう思いますか?」と社内で考えた案について意見を伺わせていただきました。社内でディスカッションを重ねる中で、「これが良いのではないか?」という案は出るのですが、本当に良いのかなぁ、と不安になるんですよね。第三者の意見を聞いて自信を持ちたいという思いに寄り添って頂き、ZEN Advisorに相談できて本当に良かったと思いました。おかげさまで、自信を持って内製化を進めることができています。
ZEN Advisorの目指している役割のひとつでもあるので、とても嬉しい言葉です。
池田: コンサルやSIerなど外部の人に言われるがまま作った場合、うまくいく場合も失敗する場合もあると思うんですけど、うまくいった場合でも、裏付けがいまいちできていなくて、次に繋がらないということがあると思います。 ZEN Advisorでは、必ずこれを使えと言われたことはなく、こういう選択肢があり、それぞれこういったメリットがありますよ、といった風に様々な選択肢とその特徴を説明頂くことが出来ました。 おかげで社内の意見をすり合わせながら最適な選択をすることができ、かつ社内のスキルの底上げを行えたという面でも非常に良かったです。
絶対にこれを使って下さい、というのは極力使わないように意識しています。我々も皆さんの全てのユースケースを把握できているわけではないので、選択肢に対してメリット・デメリットなど出来る限り情報をお渡しするようにして、社内で検討してもらうようにしています。
池田: デメリットが許容できずに他を選択するということもあるので、ZEN Advisorで提示してくれる情報はとても助かってます。
ZEN Advisorで「これは無理」とお伝えすることはあるのですが、選択の幅を広げてもらいたいので、代替案を提示するようにしてます。
フロントエンドでMVCフレームワークからSPAフレームワークへ切り替えるためのキャッチアップは難しかったと思うのですが、どうやって乗り越えたのでしょうか?
掛水: ZEN Advisorのおかげです。ライブラリの実装がどうなっているかというアドバイスがありまして、私たちはライブラリを仕様に沿って使っているだけでしたが、姿勢とか調べ方を吸収させていただき、内部実装を見て解決していくようにキャッチアップするようになりました。 ZENの後川さんがイベント登壇で発信されていたNuxt 3マイグレーションの内容についても、参考にしながら戦略を立てたりもしました。コミュニティでの技術キャッチアップに強くなったと思います。
北國銀行様が様々なチャレンジを実現できたのは、企業文化が関係しており、経営陣の考え、組織の考え、新技術への考えによるものでした。
DevOps文化を進めるための経営的判断、マネジメント面での決断はあったのでしょうか?
岩間様 (以下敬称略): 経営陣は昔から全体最適をやっていこうとか、リスクと利便性のバランスを見極めていこうとか、前向きな話をしてきているんですよね。 今回は、クラウドでいこうというのが決まっていて、拡大解釈するとDevOpsもやるということだよね、と良い風にとらえました。なので、上を説得する必要もなかったのが良かったのだと思います。
例えばフロントエンドにおけるSPAフレームワークへの切り替え等はビジネス側に重要度が伝わりづらいことが多いのですが、マネジメントレベルでも会話はしていたのでしょうか?
岩間: 期待している答えじゃないと思いますが、我々は関与してないですよ。チームに任せています。チームには開発者だけでなく、ビジネス側のメンバーも入っているんですよ。なので、開発側とかビジネス側っていう境目はなくて、我々が目指すところに対して合理的であればやるし、そうじゃなければやらないか、優先順位下げる、となっていくだけなんですよね。 経営層とか上司が、お金がかかるんだったらやめとけとか、よく分からないチャチャとか、あえて口出ししないようにしていたのも、良かったんじゃないかなって想像してますね。
掛水: 今では業務仕様をビジネス側にも相談しながら決めています。
スキーマ駆動開発も、フロントエンドで閉じてしまうとできない内容なのですが、フロントエンドとバックエンドの連携ってどうなっているのでしょうか?
池田: もともとフロントエンドチーム、バックエンドチームと役割別に分かれた横割り組織だったのですが、人員調整が難しい/コミュニケーションコストが高いといった色々な問題がありました。途中から役割ではなく担当ドメイン(機能)ごとにチームを再構成し、各チームにフロントエンド数名/バックエンド数名といった縦割り組織に変えることにしたんですよ。そこから、コミュニケーションがスムーズになりました。担当ドメイン固定による属人化がリスクとしてありますが、属チーム化であれば開発効率と人的リソースに関係するリスクのトレードオフが成立するのではないかという考えで進めています。 今では更に1歩進んだ開発体制を目指してフルスタック化を推進しています。フロントエンド/バックエンドはそれぞれ忙しい時期が異なるので、互いに助け合うチーム作りを目指しています。 フロントエンド専門だけどバックエンドもできますよ、バックエンド専門だけどフロントエンドもできますよ、という人を増やしており、今後開発される新しいサービスには必ずと言っていいほどスマホアプリが絡んでくることが予想されるため、モバイル開発もできる人材を増やしていく予定です。
北: インフラ側はほとんど作業化してしまっているので、バックエンドやフロントエンドのメンバーにもインフラの一部を実装してもらって、フルスタック化を進めています。
最新技術やOSSなどのキャッチアップを積極的にされていて素晴らしいと思うのですが、これも文化なのでしょうか?会社として何か取り組んでいるのでしょうか?
岩間: もちろんありますよ。技術が好き、新しいことをやりたい、みたいなマインドの人を採用していて、私たちはその受け皿になろうとしています。入ってもらったら銀行のレガシーシステムしか見えません、という状態にしちゃうと、結果的に優秀なエンジニアが辞めてしまうということも考えています。 あとは、新しいものを使うことで生産性が良くなったり、セキュリティも向上したりするので、トライアルをどんどんやっていって、いいものは取り入れていくべきだと思います。
北國フィナンシャルホールディングス 株式会社北國銀行 執行役員 システム部長 株式会社デジタルバリュー 代表取締役 岩間正樹 様からのコメント
岩間:デジタルバンキングがスムーズに開発できローンチできたのは、ゼンアーキテクツさんのおかげです。 技術者が新しいことにチャレンジする際の良い壁打ち相手になり、モヤモヤを解決してくれるのがゼンアーキテクツさんでした。おかげで技術に自信をもてるようになり、チームの雰囲気も明るくなりましたし、モチベーションやスキルの向上にも繋がっており、技術面だけでなくマインド面の支援も頂いています。今後ともよろしくお願いします。