12.3K Views
June 07, 25
スライド概要
JJUG CCC 2025 Springの資料です。クレディセゾンにおけるSMS送信システムの内製開発の事例、および内製開発はなぜ重要なのか、やりがいや大変なことなど、内製開発のリアルを可能な限りご紹介します。
Java、Spring、IntelliJ IDEA
クレディセゾンの内製開発事例 ユーザー部門と共に SMS送信システムを開発した話 JJUG CCC 2025 Spring 2025年6月7日 株式会社クレディセゾン 多田真敏 1
このセッションについて ◆クレディセゾンでは、社員エンジニアがシステムを開発する 「内製開発」に取り組んでいます。 ◆このセッションでは、多田がインフォメーションセンターと 共に作ったSMS送信システムの事例をご紹介します。 ◆内製開発はなぜ重要なのか、やりがいや大変なことなど、 内製開発のリアルを可能な限りご紹介します。 2
自己紹介 ◆多田真敏(@suke_masa) ◆JJUG・JSUGスタッフ ◆クレディセゾンで 社内システムの内製化+AWS化 ◆元・研修講師 ◆OSSドキュメントの和訳 ◆Thymeleaf・Resilience4j 3
ざっくり経歴 約1年半のみの現場経験 ◆2008年〜2009年 ◆新人研修受講後、1社目の親会社に出向してシステム開発 ◆2010年〜2015年 ◆1社目に戻って研修講師(Java・C・Java EE) ◆2015年〜2021年 ◆2社目で研修講師(Java・Java EE・Spring・Kubernetes・Goなど) ◆2021年〜 この中の1つを紹介します ◆クレディセゾンで2つのシステムをリード、1つのシステムをサポート 4
目次 ① クレディセゾンの紹介 ② 内製開発とは何か、なぜ重要なのか ③ 内製開発の事例: SMS送信システム ④ 内製開発のやりがいと大切なこと ⑤ 内製開発で大変だったことと、どのように解決したか 5
目次 ① クレディセゾンの紹介 ② 内製開発とは何か、なぜ重要なのか ③ 内製開発の事例: SMS送信システム ④ 内製開発のやりがいと大切なこと ⑤ 内製開発で大変だったことと、どのように解決したか 6
クレディセゾンのイメージは? ◆おそらく一般的なイメージ = クレジットカードの会社 7
実際のクレディセゾンは 金融で生活を総合的に サポートする https://corporate.saisoncard.co.jp/business/management/ 8
クレディセゾンのビジネス ・クレジットカードを中心に 多様な決済サービス ・家賃保証事業 ・OA機器リース ・フリーローン ・住宅ローン ・レンディング事業 ・インベストメント事業 https://corporate.saisoncard.co.jp/business/ 9
クレディセゾンのDX 多田はこちら https://corporate.saisoncard.co.jp/business/csdx/ 10
エンタープライズ開発センター ◆多田の所属部署 ◆多田が入社してからの4年間で17名→86名 ◆いろんなシステムを内製開発しています ◆ネットアンサー ◆オープンGW(ネットアンサーと基幹をつなぐAPI Gateway的なもの) ◆お客様にSMSを送信するシステム ◆画像アップロードシステム 後ほど事例紹介 ◆・・・など 11
小野和俊さん ◆取締役(兼)専務執行役員CDO(兼)CTO ◆全IT部門のトップ ◆DataSpider開発者 ◆元Sun Microsystems ◆note記事: クレディセゾンでDXを進めてきた 5年間を振り返る ◆https://note.com/lalha/n/n939e576f5509 12
目次 ① クレディセゾンの紹介 ② 内製開発とは何か、なぜ重要なのか ③ 内製開発の事例: SMS送信システム ④ 内製開発のやりがいと大切なこと ⑤ 内製開発で大変だったことと、どのように解決したか 13
内製開発とは ◆社員自身がシステム開発に関する全てを行うこと ◆ユーザー部門と要件を定義する ◆他システムと連携する ◆コードを書く ◆AWSインフラを構築する ◆システムを運用する 14
システム開発の「モード1」「モード2」 モード1 モード2 ウォーターフォール的 規模と正確さ重視 アジャイル的 スピードと柔軟性重視 ◆プロジェクトの性質に応じてモード1・モード2の 割合を変えて内製開発しています ◆固めのプロジェクトはモード1:モード2 =8:2、とか ◆今回紹介するSMS-PLANEはモード1:モード2 =1:9 ぐらい 15
2種類の内製開発 A) 新規開発(モード2の割合が多め) 今回の事例はこちら ◆必要なシステムをゼロから作る ◆AWS + Java + Spring Boot + Svelte or Vue.jsという構成が多い B) 既存システムのモダナイズ(モード1の割合が多め) ◆レガシーシステムをリアーキテクト(例: J2EE → Spring Boot) ◆オンプレミスからAWSへの移行 16
目次 ① クレディセゾンの紹介 ② 内製開発とは何か、なぜ重要なのか ③ 内製開発の事例: SMS送信システム ④ 内製開発のやりがいと大切なこと ⑤ 内製開発で大変だったことと、どのように解決したか 17
インフォメーションセンターのお悩み オペレーター お客様に口頭で情報をお伝えするのは大変。 時間もかかるし不正確だし、 お客様にもメモなどご負担をかけてしまう・・・ お客様の携帯電話に、 手軽にSMSを送りたい!!! 18
こんな仕組みにしたい Amazon SNS オペレーター 顧客情報管理 システム SoRa SMS SMS送信 システム SMSPLANE お客様 19
SMSプロジェクト爆誕! インフォメーション センター エンタープライズ 開発センター Aさん Bさん プロダクト オーナー リーダー Cさん
エンタープライズ開発センターのメンバー ◆多田 ◆転職してきて入社2年目(当時) ◆現場エンジニア通算2年ちょい(当時) ◆Aさん SMS送信システム SMS-PLANE担当 ◆元インフォメーションセンターのオペレーター ◆異動してきてエンジニア1年目(当時) ◆Bさん ◆元インフォメーションセンターの課長さん ◆異動してきてエンジニア2年目(当時) 顧客情報管理システム SoRa担当 ◆Cさん ◆多田と同期入社の転職組。ベテランエンジニア 21
まずは初回ミーティング ◆インフォメーションセンターから要件書をいただいたので、 その説明を受ける ◆画面イメージも含め、やりたいことがほぼ網羅されていた ◆説明を聞きながら疑問点があったら質問する ◆ざっくりアーキテクチャを考えるために必要な情報を収集する ◆以降、週1回の定例ミーティングを実施 ◆要望は随時Redmineにチケットとして書いてもらった ◆チケットに書くまでもないことはSlackでやり取り ◆ミーティングの際はなるべくインフォメーションセンターに出向いた 22
ざっくりアーキテクチャを考える ◆やりたいことそれぞれをWebアプリにするのか? それともバッチ処理にするのか?を決める ◆社内ネットワークの事情も踏まえて、AWS構成図を書く ◆詳しい人(現在の上長)にレビューしてもらいました ◆外部システムとの連携方法を考える ◆データ連携の5W1Hを定義する(いつ、何を、どのように、など) ◆How → ファイル連携?Web API連携?メッセージキュー?DB連携? 23
Webアプリの構成 ◆動作環境: 当時はElastic Beanstalk → 現在はApp Runner ◆当初はApp Runnerがプライベートネットワーク非対応だった ◆AWSのことをよく聞いてた人(現在の上長)が当時よく使っていたから Elastic Beanstalkにした(今はECSをよく使っているらしい) ◆リリースしてしばらく後に、App Runnerがプライベートネットワークに 対応したため、App Runnerに変更した ◆Java 21 + Spring Boot 3 App Runnerは制約が多いので 使う時は必ず確認してください ◆mvn spring-boot:build-imageでコンテナイメージにビルド → ECRにプッシュするだけでApp Runnerにデプロイされる 24
バッチ処理の構成 ◆動作環境: AWS Lambda+EventBridge ◆EventBridge Schedulerの方が、日本時間を指定できるのでオススメ (当時はそれが無かった) ◆Java 21 + Spring Boot 3 ◆実行回数が少ないので、多少起動時間が長くてもコスト的に問題なし ◆Go・Pythonは他に書ける社員が少ない、JavaScriptは多田が不得手 ◆lambroll+シェルスクリプトでデプロイ(Thanks @fujiwara) 25
AWS構築 ◆ほぼ全てAWS CLIで構築 ◆マネジメントコンソールは使いづらかった・分かりづらかった ◆各CLIのヘルプを見れば何を指定すべきか分かりやすかった (例: aws ec2 create-security-group help) ◆多田がほぼ1人でゼロから勉強しながら構築 ◆勉強の一環でAWS資格取得(SAA・DVA) Terraformいいですよ! ◆後にAさんがTerraformでIaC化してくれた ◆AWS公式のCloudFormationは遅くて耐えられなかった (最初のエラーメッセージが出るまで90分待った) 26
SMS送信システムSMS-PLANE爆誕 ◆毎日数千件のSMSをお客様に送信 実際のファビコン ◆主な機能 ◆SMSの定型文を作成するテンプレート管理画面 ◆SMS送信やテンプレート検索などを受け付けるWeb API ◆各種バッチ処理(社員データのインポートなど) 27
費用対効果 ◆平均顧客対応時間が短縮された ◆お客様を待たせない、多くのお客様に対応できるなどいいことずくめ ◆マーケティング効果の向上 ◆お客様からのリアクションが良くなった 明確には書けませんが、 かなり大きい数字が出ています 28
主な成功要因 ◆ユーザー部門 ◆要望をしっかり出してくださった ◆ビジネス面の調整をしっかりやってくださった ◆開発部門の事情(工数など)を理解してくださった ◆開発部門 ◆元インフォメーションセンターのAさん・Bさんが ユーザー側の事情などを解説してくれた ◆毎週の定例ミーティングのやりとりなどで ユーザー部門から信頼を得られた 29
後日談 ◆SMS利用の拡大 ◆SoRa以外のシステムからもSMS送信を受け付けるようになった ◆開発当時は想定していなかった様々な業務で利用されている ◆Aさん ◆後にインフラ+AWS+Terraform学習 → 別システムで構築を見事完遂 ◆その後、また別のシステムでリーダーになった → プロジェクトを見事完遂 ◆Bさん ◆その後、インフォメーションセンターに戻り、ユーザー部門の変革を主導 ◆現在は更に別のシステム部門に異動し、システム更改に尽力 30
目次 ① クレディセゾンの紹介 ② 内製開発とは何か、なぜ重要なのか ③ 内製開発の事例: SMS送信システム ④ 内製開発のやりがいと大切なこと ⑤ 内製開発で大変だったことと、どのように解決したか 31
内製開発のやりがい ◆要件定義・設計・実装・テスト・運用まで全部自分でできる ◆自分で提案したものを自分で作るのでやりがいがある ◆運用も自分でやるので、ログ出力や異常時の復旧も きちんと考える習慣がつく ◆ユーザーさんから直接フィードバックをもらえる ◆リリース後に、効果が出ていることを教えてもらった時の 充実感は格別でした 32
大切なこと ◆要望の背景まで聞く ◆ユーザーさんはやりたいことをシステムで実現する方法を考え、 その上で「こんな機能・画面が欲しいです」とシステム側に伝える ◆背景まで聞くと、システム側はよりよい実現方法を提案できる ◆技術を分かりやすい言葉で説明する ◆ユーザーと技術の間に立つのも仕事の1つ ◆ミーティングで受けた質問は、なるべくその場で即答する ◆信頼を得やすくなる 33
目次 ① クレディセゾンの紹介 ② 内製開発とは何か、なぜ重要なのか ③ 内製開発の事例: SMS送信システム ④ 内製開発のやりがいと大切なこと ⑤ 内製開発で大変だったことと、どのように解決したか 34
隠れた要望の表面化 ◆プロジェクト後半で、ある仕様について認識の齟齬が発覚 ◆定例ミーティングとは別に緊急ミーティングを開催 → 齟齬を解消+システムに実装 35
要望が膨れ上がる ◆要望はなるべく叶えてあげたいものの、 納期や工数を考えると厳しいものもあったりする ◆その機能が必要な時期や業務内容も聞いた上で、 着手順序や簡単な代替手段を提案して解決 ◆それでも厳しい場合は、上長に相談して増員とか 36
アーキテクトとマネジメントの兼務 ◆Aさんが出来る人とは言え当時1年目だったので、 多田が担当する実装タスクは多かった ◆システムを作るアーキテクトと、 ユーザー部門や他システムとの調整をするマネジメントを 兼務していたので大変だった ◆これはとにかく頑張って解決 37
納期とメンバー教育のバランス ◆メンバーの教育を考えると自分で完遂してほしいが、 納期を考えると多田が巻き取るしかなったこともあった ◆もっと何かやりようがあったんじゃないかと今も悩み中 38
システム間連携の調整 ◆コミュニケーション不足により相手システムと仕様の認識齟齬 → 相手システム側の修正に追加費用が発生 ◆忙しかったから仕方ない面もあったけど、 やはりもっと綿密に認識を合わせるべきだった ◆にゃーん (社会性フィルター)なこともあった 39
最後に 40
内製開発は楽しい! ◆システム開発のサイクル全てに責任を持ってやれる ◆要件定義から設計・実装・テスト・運用まで全て! ◆ユーザーさんと直接コミュニケーションを取れる ◆要件定義したりフィードバックいただいたり ◆解決策の提案だけでなくその実現まで全て自分でやれる ◆プログラミングで問題解決! 41
We are hiring! ◆開発環境はけっこうモダンです ◆最新のLTS Java、IntelliJ IDEA、生成AI(いろいろ活用を進めてます)、 AWS + Infrastructure as Code、GitHub Actions、Svelte、Vue.js、 在宅勤務、フレックスタイムなど ◆お給料はけっこういいです 42
カジュアル面談お申し込み ◆ のQRコードから お申し込みください! ◆多田と話したい場合は XでDMください! (@suke_masa) 43