1週間経ってしまったけど書かなきゃ終わらない気がしたので書きます。
初めてJJUG CCCに参加したのが確か2016 Fall の時だったのでそれから8年経って初登壇しました。スポンサー枠ですが。
内容としては 去年9月にクレディセゾンに入社してから担当していた Netアンサーが、今年 大きな移行・更改を行ったのでどういう点を変更したのかっていうことを紹介した内容になります。
いざ書いてみたら色々と話したいことが増えていったこともあり、全体的に浅めな説明にはなってしまったかなと思います。JJUG なので Struts1 から Spring Boot3への移行の話を中心にしたかったので、フロントエンドやインフラ・CI/CD周りはこんな感じですって内容に抑えました。
スポンサー登壇までの歩み
ことの発端は、前回 2024 Spring に参加したときに会場が狭くて聴きたかったセッションが満席で入れなかったりしたのでアンケートにその辺をコメントしたのですが後日「会社に打診してスポンサーになれば広い会場になるかも」的なツイートを見かけたので、ダメ元で テクノロジーセンター内の雑談チャンネルに投げたら翌日には動き始めていましたw (この辺は一緒に登壇した CTO小野さんの資料を見てください)
この件、社内でもあまり話したことは無いのですが、個人的にはSlackで放流したら前向きには検討してくれそうな予感はしていました。というのも 社内にはJJUGにゆかりがある人が結構いたためです。まぁダメだったとしても「会社に打診はしたけどダメでした」とは言えるので、放流するだけ放流しようかなと。
で、スポンサーになるのがOKとなった後は、JJUGのスポンサープロジェクトなるチャンネルが立ち上がり、小野さんに登壇してもらうことも決まり、1つか2つ事例発表も入れようとなってその候補者を募集するって所まではすぐに決まりました。 ただ登壇希望者が現れない状況が続き、自分にも打診はあったのですが、今後、同じような企画をした時に、言い出した人が何かをしないといけないみたいな空気にはさせたく無いなと思い様子を見ていました。
ですが、JJUG CCC でいつかは登壇してみたいって思いながら8年も経過していて登壇する機会を失っていた感があったのと、StrutsからSpringへの移行事例って需要あるかもって話を社内でも聞いているうちに誰も手を挙げないなら自分話しますって手を挙げたって感じでした。
ちなみにこの流れに乗る感じで公募でも3名採択されたことで、内部でもJJUG CCCに向けてお祭り感は出るようになりました。 個人的には裏の目的として自分のチームの若い人達やJJUG CCCに参加したことがない人に参加してもらいたいと思っていたのでこれによって参加しますって人が増えたのも良かった。
当日のこと
正直、緊張というか不安というか、なんか落ち着かない感じでした。 他の方のセッションに参加しても Xでの反応が気になったり、事前に聞いてはいたけど会場のスクリーンが想像以上に小さめで資料が見づらいんじゃないかとか考えていて、あまり他の人の発表が頭に入らなかった気がします。この辺は反省点ですね。
そして自分たちの時間になりまずは前半パートとして小野さんから話して頂きましたが、改めてこの人凄いなって思いましたね。登壇の時の内容は別の機会に何度か聴いてますし今回の資料も事前に共有させて頂いていたのですが、自己紹介のページだけでこんなに豊富で面白い話が出来ることとか自己紹介だけで結構時間を使っていたので20分で終わるのかなとか気になったのですが特に急ぐ感じでもなく予定通り20分で話をまとめた所とか。それに前から参加している方々の表情を見たりしてましたが、みなさん小野さんの話に聞き入っているって感じなのがとても伝わりました。 こんな面白くてみんな聞き入ってる凄い話の後に自分が話すのかって直前になって手を挙げたことへのプレッシャーを感じていました。
それで自分の番が来て、なんとか20分でまとめ上げることができました。 リハーサルしていた時は結構ゆっくり目に話してちょうど良い位だったのですが、本番では小野さんの話の勢いに乗る感じで 台本にないことも含めて少し早口で話して20分少し過ぎちゃう感じだったかなと思います。 間をとることも忘れていたので途中 息切れしたことに自分でも気がつきました。
まだアンケートの結果などは見ていませんが、ツイートや小野さん含め社内の人達からは良い評価を頂けていたようですし、その前の同僚のセッションも含めてクレディセゾン テクノロジーセンターの存在感を見せられた場になったようで良かったです。 あと 登壇後や会場の廊下で 自分は以前から知っていた方々に声かけられて質問されたりしたのですが 聞いてくれていたんだと知って嬉しかったです。
登壇内容の補足
登壇のテーマがモダナイゼーションということでアーキテクチャを変えたことを説明したわけですがそれらの選定理由を登壇時に説明していなかったので、登壇後の質問などで聞かれましたので、この場で補足しようと思います。
その前に大前提
登壇で技術選定について話さなかった理由というか言い訳ですが、入社した2023年9月の時点でプロジェクトは始まっており主要な選定は終わっており自分としてイニシアチブというか選定に関わっていなかったので敢えて避けたって点があります。 入社後にこれは変えた方が良いって感じた所は自分が主導して変更したものも幾つかはありますが。
ただAWS移行後は モダンアプリ側のチームリーダーになり、保守運用を通してこのアーキテクチャにして良い点と改善点も色々出てきていますし、この11月からはクラシック側も含めて Netアンサー開発チームの全体を見るようになったので、これからは少しずつ自分の判断で変える部分も出てくると思います。
ということで、ここでは選定理由だけでなくて運用してみて気づいた点も含めて話します。
Struts1 からの移行先として Spring Boot3 以外の JavaのWebフレームワークにしなかった理由はあるか?
単純にチームメンバー的にも社内的にも Springには慣れているメンバーだったからというのが理由になります。内製化チームとしては他にもSpring Boot利用したシステムを開発していたので、Spring ありきで検討していた所はあります。 JakartaEEなどの他のJavaのWebフレームワークを評価して決めたとかでは無かったです。
ただ、フロントエンドについてはUXの視点からもSPAにしたいって考えていたので、JavascriptのWebフレームワークには変える想定で進んでおりこれについては後述します。
EKS (Kubernetes) を採用した理由は? ECSにしなかった理由は
これは同じ課でNetアンサーの前にモダナイゼーションを進めていた オープンGWという社内向けAPIサービスでEKSを利用し、それをベースにAWSに移行したことが主な理由になります。 オープンGWがEKSを採用した背景については、以前 JAWS-UGで話した内容がYoutubeに公開されているのでそちらをご覧ください。(37分頃から)
尚、登壇時には話していませんが内製化チーム側のモダンサービスのバックエンドは Spring Bootによる業務APIサービス以外に、PDFファイルを生成するNodeJSのサービスなど幾つかのサービスに分割しています。 そしてAWS移行当初は ベンダーさん保守のEC2(現クラシック) と 内製化チーム担当のEKS(モダン)に明確に分かれていたので、AWSのALBによってEC2とモダンの2系統だけをルーティングするようにして、モダン内部のサービス分散はEKS(k8s)でIngress Controller を用意することでモダン自身でコントロール出来るのもメリットでした。
ただEC2もクラシックといてEKSでコンテナ化したので このメリットもあまり意味が無くなってくるので、ECSでよりシンプルな構成にする可能性も今後あるかもしれません。
Svelteを採用した理由は?
ここも大きな理由はなくて自分たちのスキルを考えた時にあっているのは何か?という視点で検討した結果となります。フロントエンド(HTML + CSS + JS) については Thymleaf か JSP に慣れていたので標準的なHTMLの構文には慣れているメンバーがほとんどだったので、Svelte か Vue のどちらかとなり、「公式のチュートリアルの充実さ」や「テクノロジーセンターでSvelteに詳しくSvelte推しな人がいる」という点でSvelteを選択しました。(仮想DOMがー。とかコンパイルがー。とかの技術的な観点はあまり参考にしませんでした。)
ちなみに Vueで開発しているシステムもありますし、NetアンサーチームでもJSフレームワークを使ったフロントエンド開発が初めての人には Reactの公式ドキュメントの「Reactの流儀」などを見てコンポーネント構造の勘所を理解してもらったりもしています。 ReactやVueと比較したときのSveltのエコシステムが充実していないので参考にできるものは参考にしています。
なお、先日 Svelte5 が出ましたが、Netアンサーも早く対応したいのですがとある理由で少し保留中の状態だったりします。
AWS CDK を Javaで書いた理由は?
これもEKSと同様で、オープンGWのインフラ開発期間の都合で慣れていたJavaを使っていてその流れというか流用できる部分が多かったので、NetアンサーのCDKもJavaで書いています。
Javaで書いて困っている点は特段ありませんが、強いてありませんがCDKを実行する前に mvn install
を実行するのですがこれに少し時間が掛かることでしょうか? 今の所、書き直す予定はありませんが、EKSのクラスタアップデートや改善と合わせて Typescriptなど別の言語に書き直すかもしれません。
まとめ
JJUG CCC 2024 Fall における クレディセゾンのスポンサープロジェクトは これで完了になります。(他にもブログを出すメンバーがいると思いますが。) 思えば自分の一言がきっかけで 当日は5人の登壇者の中で自分が一番最後に話したので、自分で始まり自分で終わったなと気がつきました。
今回スポンサーセッションではありますが、初めてJJUG CCC に登壇して準備からかなり大変でしたが終わってみてやって良かったなと思います。 登壇へのハードルも下がったので、今度は何か話したいなと思うネタがあったら CfPを出してみようかな
最後に JJUG CCC 2024 Fall に参加して クレディセゾンのセッションを聴いた方々や 参加はできなかったけど 登壇資料を見て興味を持った方がいらっしゃいましたら、カジュアル面談を受け付けています。 いますぐの転職を考えていなくてもテクノロジーセンターがどんな所でどんな人たちがいるのかを知ることができると思いますので、ぜひお話ししましょう!