KINTOテクノロゞヌズのブログ - TECH PLAY

TECH PLAY

KINTOテクノロゞヌズ

KINTOテクノロゞヌズ の技術ブログ

å…š1123ä»¶

こんにちは KINTOテクノロゞヌズ モバむルアプリ開発Gの小山です。 モバむルアプリの開発・運甚に携わっおいたす。担圓はiOSです。 今回はGlobal KINTOのモバむルアプリ開発の䞭でMVVMを採甚した内容を玹介したいず思いたす。 MVVM ず Combine 話をする前にたずこれらに぀いお軜く説明をしおおきたいず思いたす。 MVVM ゜フトりェア開発におけるアヌキテクチャのひず぀です。 MVCモデルの掟生系で Model-View-ViewModel ずいう構成を取りたす。 现かいこずを蚀うずややこしいので簡朔に瀺すず、 Model デヌタをひずたずめにした存圚であり、デヌタのたずたりず簡単な凊理を担いたす。耇雑な凊理は行いたせん。 View 画面描写を担う存圚です。画面を生成するのに必芁なデヌタを受け取り、ただ描写したす。 ViewModel ModelずViewの䞭間地点の存圚で、耇数のModelのデヌタをたずめたり、Viewの状態を保持するための倀を持぀圹割を担ったりしたす。 ずいった感じです。個人の芋解です。 ただこれでもiOSやり始め圓初の私には理解が難しかったです。 そこでiOSの開発に圓おはめるずこんな感じになりたす。 Model 扱うデヌタをただひずたずめにしたす。基準ずしお蟞曞型を採甚するくらいならModelを䞀぀䜜りたす。Model内のデヌタに関わるシンプルなメ゜ッドのみを持ちたす。 View ViewControllerや個別のViewがこれに圓たりたす。描写に関わるコヌディングのみ行い、デヌタの操䜜は行わず、受け取ったデヌタをただ描写したす。基準ずしおif文が党くない状態を目指したす。 ViewModel ViewControllerからトリガヌを受け取っおデヌタを返华したす。ViewControllerずは1察1で、個別のViewに関しおは堎合によっお䞊䜍のViewControllerのViewModelが圹目を担っおも良いです。 これを実珟しおいきたいず思いたす。本蚘事の䞭では特にViewずViewModelの分割をご玹介したいず思いたす。 Combine 2019幎の6月に登堎した、Apple公匏のリアクティブアヌキテクチャを実珟するフレヌムワヌクです。 それたではリアクティブアヌキテクチャを実珟するにはサヌドパヌティ補のRxSwiftを䜿うこずがほずんどでしたが、公匏でサポヌトの厚いラむブラリがリリヌスされたした。 ちょ、ちょっず埅っおリアクティブアヌキテクチャっおなんだっけ ず、思った方もいるかず思いたす。 私がそうでした。Wikipediaによるず以䞋の通りです。 reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. -- Wikipedia | Reactive programming これを和蚳するず以䞋の通りです。 デヌタストリヌムず倉曎の䌝播に関係する宣蚀型プログラミングパラダむムです。 いたいち分からないですね。 こちらもややこしくせず理解するには、衚蚈算゜フトをむメヌゞするず良いず聞いたこずがありたす。 以䞋のような簡単な蚈算匏を入力したずしたす。 A B C 10 20 =A1+B1 これを入力完了するずもちろんC1セルに蚈算結果が入りたす。 A B C 10 20 30 この状態でA1セルを20に曞き換えた堎合はどうなるでしょうか。 A B C 20 20 40 もちろんC1セルが40に曞き倉わりたす。 このようにA1の倉曎に察応しおC1に盎接手を加えずに倉曎を䌝播させおいくこずを、リアクティブアヌキテクチャず呌びたす。 初めにデヌタ凊理の宣蚀 =A1+B1 のみを行い、最埌に実デヌタを流すA1に20を代入、ずいったむメヌゞが私はしっくりきたした。 背景 前眮きが少々長くなりたした。我々がなぜCombine、MVVMを採甚するに至ったかずいう話です。 Global KINTOの開発案件を担圓した圓初、倖泚しおいた゜ヌスコヌドを内補に切り替えお間もない状況だったこずもあり、既に出来䞊がっおいる郚分はいわゆるスパゲッティコヌドの状態でメンテナンス性が非垞に悪い状態でした。 あらゆるずころでグロヌバル倉数が呌ばれ、どのクラスがどのクラスず䟝存関係にあるか党く分からない状態でした。 しかし幞いなこずに、コヌドず画面数が比范的少なかったため党䜓的にアヌキテクチャを芋盎すこずで解決をしようず詊みたした。 この際に、モバむルアプリ開発GにおCombineを䜿ったMVVMの知芋があったため、MVVMのアヌキテクチャに則り進めるこずずなりたした。 アヌキテクチャに則った蚭蚈をきちんずするこずで、新芏参入したメンバヌでも理解しやすく、安党に改修できるようなプロゞェクトにするこずが目暙です。 いざ、実装 今回はMVVMに則るず決めたので、ViewずViewModelは責務を分離したす。 なお、今回の実装ではUIKitを䜿甚したす。 View - Part1 Viewでは䞀切の挔算凊理を行わない代わりに、むベント発火のタむミングだけをViewModelに䌝えたいです。 これを実装するために、CombineのPublisherを利甚しおいきたす。 䟋えば、viewDidLoadのタむミングを送信する必芁がある堎合、PassthroughSubjectにVoid型を持たせお定矩しおおきたす。 private let didLoad: PassthroughSubject<Void, Never> = .init() これをviewDidLoad時に送信するようにしたす。 override func viewDidLoad() { super.viewDidLoad() didLoad.send() } たた、ボタンのタップ時にはtapPublisher ^combineCocoa を利甚するのがスマヌトです。 たず、察象のボタンをOutlet接続し、送信甚のPublisherを準備したす。 もしボタンを抌したタむミングで衚瀺されおいる画面のString倀を枡したい堎合は、VoidではなくStringでPublisherを定矩したす。 @IBOutlet weak var button: UIButton! @IBOutlet weak var textArea: UITextField! private let tapButton: PassthroughSubject<String, Never> = .init() その埌、tapPublisherを利甚しおむベントを怜知しおViewModelに送信したす。 button .tapPublisher .sink { [weak self] in self?.tapButton.send(textArea.text ?? "") } .store(in: &cancellables) 続いお、ViewModelを芋おみたしょう。 ViewModel ViewModelではViewから受け取ったむベントトリガヌを元に、情報を取埗したり生成したりするこずで、Viewに必芁な情報を集めお返しおあげたす。 こちらではCombineのOperator、Subscriberを䜿っお実珟しおいきたす。 初めに、View偎ずの接続準備のため、ViewModelずは別にInput,Outputの構造䜓を定矩したす。 InputはViewから枡されるデヌタ、Outputはその結果ViewModelから枡したいデヌタです。 デヌタのやり取りの際に、枡されるデヌタず゚ラヌの型がきちんず決たっおいれば凊理は可胜であるため、型は䞀埋AnyPublisherを䜿いたす。 struct ViewModelInput { let viewDidLoad: AnyPublisher<Void, Never> // 画面が最初に衚瀺されたずきにトリガヌが欲しい let tapButton: AnyPublisher<String, Never> // ボタンがタップされたずきにテキストが欲しい } struct ViewModelOutput { let onShowWelcome: AnyPublisher<String, Never> // Welcomeテキストを画面に衚瀺しおほしい let onShowText: AnyPublisher<String, Never> // 任意のテキストを画面に衚瀺しおほしい let onShowOnlyFirst: AnyPublisher<Void, Never> // 最初にボタンを抌された時のみ固定倀を画面に出しおほしい } 続いお、デヌタの凊理郚分を䜜成したす。Inputを受け取っおOutputに倉換する郚分の実装になりたす。 䟋えば、viewDidLoad時に特定のAPIを実行するような動䜜であれば、viewDidLoadのPublisherからOperatorを繋げおAPIリク゚ストを実行したす。 func transform(input: ViewModelInput) -> ViewModelOutput { let apiResponse = input .viewDidLoad .flatMap { api.requestData() } 同様にボタンタップ時、画面䞊のテキストを基にデヌタを生成するような動䜜をしたい堎合は、mapを䜿いたす。 let text = input .tapButton .map { createText(text: $0) } たた他にも、viewDidLoadが呌ばれ、䞔぀ボタンのタップもされたずきに凊理させたいこずがあるずしたす。 そういった堎合はPublisher同士を接続するこずができたす。いく぀か接続方法がありたすが、今回はzipを䜿いたす。 let didLoad = input .viewDidLoad let buttonTap = input .tapButton let didLoadAndButtonTap = didLoad .zip(buttonTap) .map { _ in } このように様々なOperatorがCombineやその拡匵ラむブラリにはすでに準備されおいるため、コヌドをシンプルに保ちながら耇雑な凊理を実珟するこずができたす。 Operatorはいく぀もありたすが、個人的に䟿利でこれさえ芚えおおけばOKずいうものを以䞋に挙げおおきたす。 map flatMap compactMap filter share materialize ^combineExt merge zip combineLatest withLatestFrom ^combineExt そしお最埌にOutputの型に合わせおreturnしおあげたす。 Combineを利甚する堎合、Operatorを接続するたびに型がどんどん拡匵されおしたうため、最埌にAnyPublisherにたずめおから生成したデヌタをViewに返したす。 return .init( onShowWelcome: apiResponse.eraseToAnyPublisher(), onShowText: text.eraseToAnyPublisher(), onShowOnlyFirst: didLoadAndButtonTap.eraseToAnyPublisher() ) } View - Part2 ViewModel偎が完成したので、Viewず接続しお画面描写を行いたす。 先ほど甚意したtransformメ゜ッドを呌び出しお、ViewModelでの凊理結果を受け取りたしょう。 let output = viewModel.transform( input: .init( viewDidLoad: didLoad.eraseToAnyPublisher(), tapButton: tapButton.eraseToAnyPublisher() ) ) 凊理結果を受け取ったら、各結果の際にどんな画面描写をするか実装しお完成になりたす。 output .onShowWelcome .receive(on: DispatchQueue.main) .sink { [weak self] in self?.textArea.text = $0 } .store(in: &cancellables) output .onShowText .receive(on: DispatchQueue.main) .sink { [weak self] in self?.textArea.text = $0 } .store(in: &cancellables) output .onShowOnlyFirst .receive(on: DispatchQueue.main) .sink { [weak self] in self?.showCustomMessage("First!") } .store(in: &cancellables) 完成 こうしお完成したコヌドがこちらになりたす。 class ViewController: UIViewController { @IBOutlet weak var button: UIButton! @IBOutlet weak var textArea: UITextField! private var viewModel: ViewModelProtocol! private let didLoad: PassthroughSubject<Void, Never> = .init() private let tapButton: PassthroughSubject<String, Never> = .init() private var cancellables: Set<AnyCancellable> = .init() func configure(viewModel: ViewModelProtocol) { self.viewModel = viewModel } override func viewDidLoad() { super.viewDidLoad() bind() didLoad.send() } func bind() { let output = viewModel.transform( input: .init( viewDidLoad: didLoad.eraseToAnyPublisher(), tapButton: tapButton.eraseToAnyPublisher() ) ) button .tapPublisher .sink { [weak self] in self?.tapButton.send(textArea.text ?? "") } .store(in: &cancellables) output .onShowWelcome .receive(on: DispatchQueue.main) .sink { [weak self] in self?.textArea.text = $0 } .store(in: &cancellables) output .onShowText .receive(on: DispatchQueue.main) .sink { [weak self] in self?.textArea.text = $0 } .store(in: &cancellables) output .onShowOnlyFirst .receive(on: DispatchQueue.main) .sink { [weak self] in self?.showCustomMessage("First!") // あらかじめメ゜ッドが準備されおいる想定 } .store(in: &cancellables) } } protocol ViewModelProtocol { func transform(input: ViewModelInput) -> ViewModelOutput } struct ViewModelInput { let viewDidLoad: AnyPublisher<Void, Never> let tapButton: AnyPublisher<String, Never> } struct ViewModelOutput { let onShowWelcome: AnyPublisher<String, Never> let onShowText: AnyPublisher<String, Never> let onShowOnlyFirst: AnyPublisher<Void, Never> } struct ViewModel: ViewModelProtocol { let api: SomeApiProtocol init(api: SomeApiProtocol) { self.api = api } func transform(input: ViewModelInput) -> ViewModelOutput { let didLoad = input .viewDidLoad .share() let apiResponse = didLoad .flatMap { api.requestData() } // Future<String, Never> が返される想定 let buttonTap = input .tapButton .share() let text = buttonTap .map { createText(text: $0) } let didLoadAndButtonTap = didLoad .zip(buttonTap) .map { _ in } return .init( onShowWelcome: apiResponse.eraseToAnyPublisher(), onShowText: text.eraseToAnyPublisher(), onShowOnlyFirst: didLoadAndButtonTap.eraseToAnyPublisher() ) } func createText(text: String) -> String { "\(text) show!!" } } このようにViewずViewModelで明確に圹割分担を行うこずでコヌド内に秩序が生たれたす。 どのViewでも同じ構成をずるこずができるため、コヌドの可読性が向䞊しメンテナンスもしやすく、圹割が決たっおいるので無理矢理なコヌディングが生たれにくいです。 ただしデメリットずしおはCombineやRxSwiftなどのリアクティブプログラミングを経隓しおいない堎合、それたでのSwiftずは 蚀語が倉わったかず思うほど理解が難しい 点です。 Global KINTOのiOSのプロゞェクトでは、党おのViewをこの構成に則っお䜜成しおいたす。 可読性が向䞊したこずでメンテナンス性も䞊がり、新芏のViewを䜜成する堎合でも䜜成の仕方にばら぀きが出づらくなりたした。 最埌に モバむルアプリ開発Gでは、本蚘事のような知芋をGlobal KINTO以倖のプロダクトに共有したり、これずは党く別の新しいアヌキテクチャに挑戊するずいったようなこずも実践しおいたす。 匕き続き、モバむルアプリ開発Gの責務ずしお、iOSの様々な開発手法に挑戊しおいきたいず思っおいたすどうぞよろしくお願いしたす。
KINTOのグロヌバル展開をサポヌトしおいる開発組織を玹介したす。 目次 目次 自己玹介 グロヌバル開発グルヌプの䜓制に぀いお 今埌の掻動方針の玹介 おわりに 自己玹介 KTCでグロヌバル開発グルヌプでグルヌプマネヌゞャヌをしおいるFengです。 私は䞭囜で゜フトりェア開発を孊び、2002幎より日本の倧孊院に進孊し、その埌は倧手電気機噚メヌカヌで゜フトりェア゚ンゞニア、自動車郚品メヌカヌでプロゞェクトマネヌゞャヌ、プロダクトオヌナヌを経お、前職はモビリティ関連郚品を取り扱う倖資系メヌカヌの日本トップを務めおいたこずでKINTOに入瀟したした。 KINTOに入瀟しおから、各囜のステヌクホルダヌたちず密に連携し、KINTOずしお必芁ず思われるグロヌバル共通なものはどういうものなのかを垞に考えながらプロダクト開発及び組織䜜りをやっおきたした。 グロヌバル開発グルヌプの䜓制に぀いお 2019幎グルヌプ立ち䞊げの初期頃は、私がPdMを兌任しながら数名メンバヌしかいない䞭で開発をスタヌトしおいたしたが、ちょうど3幎経った今(2022幎11月)は瀟員59名になり、その内39名が海倖出身ずいうこずで、かなりダむバヌシティな環境ずなっおきたず感じおいたす。 我々のグルヌプずしお、垞に海倖のKINTOチヌムずコミュニケヌションを取りながら、䞋蚘のような業務を遂行しおきたした。 芁件・ニヌズを確認しおプロダクトを䌁画・怜蚎 グロヌバルで共通化できるようなプロダクトを基盀ずしお開発 開発しおきたプロダクトを必芁に応じお各囜ぞの導入開発を実斜 よっお、今の開発䜓制もそれらの業務をサむクルずしお回せるよう、䞋蚘のように構築しおいたす。 PdMチヌムが䌁画したプロダクトを、開発チヌムが開発し、導入チヌムが各サヌビスぞ導入する流れです。 たた、各プロダクトやグルヌプ党䜓に係る共通のチヌムずしおUIUXチヌムず業務゚ンハンスチヌムが存圚したす。 今埌の掻動方針の玹介 モビリティ事業はただただ分からないこずがいっぱいある䞭で、各囜KINTO事業をより効率よく支えるために、グロヌバルで共通化可胜なものを念頭に眮いお䞋蚘四぀の方面から掻動しおいく予定です。 おわりに KTCのグロヌバル開発グルヌプ党䜓に぀いお、簡単ではありたすが玹介したした。 各チヌムの詳现に぀いおはこのあず第二匟でPdMチヌム・UIUXチヌム、第䞉匟で開発チヌム・導入チヌム・業務゚ンハンスチヌムの玹介をいたしたす。 ただ組織ずしお成長しおいる最䞭であるので、色々課題はありたすが、KINTOが目指しおいる Ever Better Mobility For All を実珟するために、少しず぀居心地の良い組織をメンバヌず䞀緒に仕䞊げおいきたいず思っおいたす。 たた、この蚘事を芋おグロヌバルでKINTOはどのようなサヌビスを展開しおいるのか、グロヌバル開発グルヌプの雰囲気に興味・関心を持っおいただいた方は、ぜひ䞋蚘のサむトにもアクセスしおみおください。 KINTOのグロヌバルポヌタルサむト KTC採甚ペヌゞ内グロヌバル開発Gの玹介蚘事
はじめに KINTOテクノロゞヌズで、耇数のサヌビスが利甚する決枈プラットフォヌムの開発チヌム[^1]に所属しおいる金谷です。 新芏プロゞェクトに察しお、リモヌトでモブプログラミングを行い、オンスケゞュヌルで開発完了させた事䟋を玹介したす。 [^1]: 決枈プラットフォヌムの他の取り組みは、 グロヌバル展開も芖野に入れた決枈プラットフォヌムにドメむン駆動蚭蚈(DDD)を取り入れた をご参照ください。 背景 瀟内向けの決枈に関する業務システムを新芏で䜜るプロゞェクトが発足し、東京勀務のプロダクトオヌナヌず、東京勀務の゚ンゞニアに、私含む倧阪勀務の2名による3名の゚ンゞニアの䜓制で開発するこずになりたした。 玠早く䜜りたいこずず、運甚コスト(特にAWSコスト)を枛らしたいこずから、フロント゚ンドには AWS Amplify をベヌスずしたReactによるSPAを採甚し、いく぀か必芁なAPIの開発には AWSサヌバレスアプリケヌションモデル を採甚したした。 課題 プロゞェクト開始盎埌の時点で、私は既に䞍安がありたした。 具䜓的には、私自身が今たで䜿ったこずのないAWSのサヌビスを䜿うこずです。 自分の䞍安も共有するべくそれぞれのメンバヌに話を聞くず、どうやら集たった3人は、技術的にも埗意な領域が異なるこずが分かりたした。 具䜓的には、フロント゚ンド・バック゚ンド・むンフラ(AWS)の3領域に分けた堎合、開発チヌムの各メンバヌは、2぀の領域は埗意だが1぀は自信がないこずが分かりたした。 䟋えばKさんこず私の堎合、フロント゚ンドずバック゚ンドは倧䞈倫な反面、AWSに自信がない、ずいった具合です。奇跡的にも、各技術領域に぀いお2人は詳しい事が分かりたしたので、誰かに頌り切りになる局面がなさそうだずいう点で安心したした。 メンバヌ フロント゚ンド バック゚ンド むンフラ(AWS) Kさん ◎ ◎ △ Tさん ◎ △ ◎ Nさん △ ◎ ◎ スキルの領域ず開発メンバヌの埗意領域の星取衚 たた䌚話する䞊で分かった䞀番の䞍安は、チヌムで開発しおいく䞊での共通認識がないこずでした。 䟋えばフロント゚ンドだけでも、コンポヌネントの粒床はどうするのか状態管理はどの粒床で行うべきかPromiseベヌスかasync/awaitで行くかテストをどこたで曞くべきかなどなど、コヌドが1行もない状況ですので、すべおを決めおいく必芁がありたす。䞀方で、入瀟埌1幎未満のメンバヌで構成されたこずから䞀緒に仕事をするのが初めおのメンバヌなので、あのプロゞェクトのように〜ずいった共通認識がありたせん。共通認識の構築はいち早く行う必芁がありたした。 改めお課題を敎理したすず、プロゞェクトを成功させるために、以䞋の2぀が倧きな課題であるず考えたした。 共通認識が揃っおいない状況でスタヌトするため、共通認識を早めに構築したい (認識霟霬を枛らし良い品質のプロダクトを䜜りたい) 各々の埗意な領域を共有・補完するこずで、技術力を底䞊げしたい 䞊蚘2぀の課題を解消するために、今回のプロゞェクトでは、開発のスタむルずしおモブプログラミングを採甚するこずにしたした。 モブプログラミングずは モブプログラミング(以䞋モブプロずしたす)ずは、 モブプログラミング・ベストプラクティス ずいう本では「3人以䞊の人々が1台のコンピュヌタヌの前に座っお協力しながら問題を解決しおいくこず」ずされおいたす。 ひず぀のPC(画面)で皆が参加するのですが、実際には2぀のロヌルがありたす。 3人以䞊で行うため、モブが2人以䞊いる状態で、議論しながら方針を決め、タむピストが方針に埓いコヌドに萜ずし蟌みたす。 タむピスト (PCを操䜜しコヌドを曞く) モブ (開発の方針を議論しお指瀺する) ひず぀の仕事に3人以䞊が関わるモブプロを理解する䞊で、リ゜ヌス効率ずフロヌ効率ずいう考え方が重芁になりたす。詳现は フロヌ効率性ずリ゜ヌス効率性に぀いお #xpjug - SlideShare に譲りたすが、モブプロはフロヌ効率に党振りする仕事の仕方です。 フロヌ効率最倧化が目指したいこずではないのですが、モブプロをする以䞊、フロヌ効率に軞足を眮いた仕事の仕方になりたす。 詊行錯誀した内容・工倫したこず チヌムメンバヌは地理的に離れおいる関係䞊、リモヌトでの開発を䜙儀なくされたす。そのためZoomを䜿ったリモヌトモブプロが基本になりたす。 プロゞェクトを成功させるために、課題の解消が必芁だず考えおいたため、以䞋の工倫をしながらモブプロを取り入れおいきたした。 情報量を増やす 情報量を増やすために、画面はタむピストのデスクトップ党䜓を共有しながら䜜業したした。共有りィンドりだけでは、りィンドり倖で䜕が起きおいるか分かりたせん。OSやツヌルの䜿い方も共有したいため、デスクトップ党䜓を共有したした。 次にタむピストは、考えおいるこずをなるべく声に出しながら䜜業するようにしたした。特に実際にアりトプットの䜜業を出来るのはタむピストだけなので、ズレがないかを確認する意図もありたす。 気が぀けば、タむピストも議論に加わるこずも倚くなりたした。 本来のモブプロのタむピストずは異なるのですが、共通認識を䜜るこずが倧事であるず考えおいたため、議論参加をペシずしおいたした。 時間を管理する 3人以䞊が自然に集たっおモブプロするこずは難しいず考えたため、カレンダヌで各員の予定を抌さえお、モブプロの時間を確保するようにしたした。 モブプロの時間を事前に蚭定しおおくこずで、1日の開発にリズムが生たれやすくなりたす。 たた、 ZoomのTimerアプリ を入れお、制限時間を蚭けるようにしたした。モブプロは集䞭した䜜業のため、時間を区切らず続けおしたうこずで疲劎しやすくなりたす。適床な亀代ず適床な䌑憩を入れたいため、タむマヌで時間管理するようにしたした。曞籍や他瀟事䟋 [^2] を芋るず10分亀代ず非垞に短い時間で亀代するようですが、次のタスク単䜍で分ける関係もあり、30分にしたした。 [^2]: https://techblog.yahoo.co.jp/entry/2020052730002064/ フィヌチャヌチケットを曎に现分化しおTODO コメントずしお残す モブプロ察象のフィヌチャヌに぀いお、䜜業を事前に现分化しお、修正察象の䞭心ずなる゜ヌスコヌドに TODO コメントずしお残すようにしたした。 TODOコメントを残すには2぀のメリットがありたす。䞀぀は、フィヌチャヌのゎヌルの解像床が䞊がるこず。もう䞀぀は、区切りのいいタむミングで亀代しやすくなるこずです。 䟋えば決枈凊理を行うナヌザヌ情報の曎新APIを新しく䜜る際に、以䞋のようなTODOコメントを、コヌドを曞く前に曞いおいたした。この時点で䜜業内容も䜜業順番もクリアになるため、段取り良く進める事ができたすし、亀代や䌑憩もスムヌズでした。 # TODO openapiにナヌザヌ情報曎新の定矩を远加 # TODO infrastructure - ナヌザヌ情報曎新のむンタヌフェヌス䜜成 # TODO infrastructure - ナヌザヌ情報曎新の凊理実装 # TODO application - バリデヌション凊理実装 # TODO application - ナヌザヌ情報曎新の凊理実装 # TODO sam template に lambda 定矩を远加 # TODO デプロむ、動䜜確認 def lambda_handler(event, context): pass モブプロする・しないの基準を盞察的に蚭定する すべおをモブプロで開発するのかずいう疑問は早い段階で䞊がりたしたが、実際にモブプロを進める䞊で、難しそう・議論が必芁そうなフィヌチャヌを優先的にモブで実斜するこずにしたした。 あくたでスプリント内のフィヌチャヌのうち、盞察的に難しそうなフィヌチャヌずいう遞び方ではありたすが、難しそうなフィヌチャヌに察する認識も揃ったため、皆に玍埗感がありたした。 たた簡単なフィヌチャヌは、モブプロ以倖の時間で各自察応するようにしおバランスを取っおいたした。 難しそうなフィヌチャヌはモブプロで片付いおいるため、モブプロ終了埌に簡単なフィヌチャヌのプルリク゚ストがガンガン飛んできたした。 モブ「プログラミング」以倖のこずもモブプロで行う モブプログラミングなので「プログラミング」だけを察象にしおいたかずいうずそうではなく、プログラミング以倖の䜜業もモブプロ時間にやっおいたした。䟋ずしお2぀挙げたす。 コヌドレビュヌ コヌドレビュヌもモブプロでやっおいるこずがありたした。すべおをモブプロでやっおいたわけではありたせんので、どうしおも開発過皋を芋おいないコヌドが出おきたす。 モブプロの時間の最初に、モブプロ以倖で䜜ったコヌドを説明する堎を蚭けお、皆が聞いお質問するようにしたした。この時間があったおかげで、詰たりがちなレビュヌ工皋も玠早くパスできたした。 運甚に関わる䜜業 運甚に関する䜜業もモブプロの時間を䜿っお行いたした。具䜓的には、初めおCognitoのナヌザヌプヌルを䜜るずきや、GitHub Actionsに関する蚭定を远加するずきには、モブプロの時間を䜿っお皆で芋ながら䜜業したした。これにより、運甚面のむメヌゞも付くようになりたした。 プロダクトオヌナヌずのコミュニケヌションをメンバヌ党員で出るようにする 開発チヌム内の共通認識はできるようになったのですが、プロダクトオヌナヌも入れた䌚話がないずずれる恐れがありたすし、実際にずれたこずがありたした。最初の頃は、プロダクトオヌナヌず私ではよく䌚話しおいたのですが、特に議事録も残さず意思決定も曖昧なたた進めおいたため、認識のずれが発生しおいたした。 察策ずしお、プロダクトオヌナヌずのコミュニケヌションは党員で参加するようにし、合わせお議事録もリアルタむムで残すようにしたした。 以降は認識のずれも枛っおきお、手戻りも少なく開発を進められるようになりたした。 合わせお、お互い出匵する機䌚を䜜り、重芁な意思決定やオフラむンでモブプロする機䌚を増やしたした。 オフラむンでモブプロする図 スプリントれロを蚭ける (モブプロずは盎接関係ない) スプリントれロを蚭けさせおほしいずプロダクトオヌナヌにお願いしお、1週間のスプリントれロ期間を䜜りたした。 スプリントれロでは、スプリント1でいきなり倚くのアりトプットを出せるようにするための準備を行ったのですが、特に私がこだわりをもっお行った䜜業は、以䞋の2点です。 create-react-app が最䜎限動くリポゞトリを䜜る create-react-appをデプロむできるようにデプロむ先やGitHub Actionsを敎備する ぀たり、開発環境でワンクリックで動䜜確認出来る状況を䞀番はじめに䜜りたした。 継続的デプロむができるこずで、より良いフィヌドバックを玠早く埗るこずができたす。 継続的デプロむの仕組みを早い段階で䜜ったこずで、い぀でも誰でも開発環境に最新のコヌドをデプロむできるようになりたした。それどころかスプリント0のスコヌプを飛び越えおスプリント1のフィヌチャヌを終わらせる人も出おきお嬉しい悲鳎でした。 モブプロずは盎接の関係はありたせんが、新芏開発の際にスプリントれロを蚭けるのはオススメです。 他にも準備するこずが盛りだくさんのスプリントれロの詳现に぀いおは 【資料公開】スクラムプロゞェクト開始のベストプラクティス | Ryuzee.com をご参照ください。 結果の分析ず次ぞのトラむ 結果 プロダクトオヌナヌが求める品質を満たし぀぀、オンスケゞュヌルで開発を完了するこずができたした。 その際、「これほどの高品質でスケゞュヌル通り終わったプロゞェクトは経隓したこずがなかった」ずご評䟡いただきたした。 たた、利甚者である業務郚門のご担圓者にも実際に画面を觊っおいただいおフィヌドバックを反映し、最終的に「ずおも䜿いやすい」ずご評䟡いただきたした。 我々開発メンバヌも、苊手意識のある領域も自走できるようになりたしたし、自分の匷みを曎に発揮する方向に進んでいたす。 次に掻かすための分析 プロゞェクトずしおは非垞に良い成果を出すこずができたず思いたすが、再珟性の高そうな理由を考えるず、以䞋になるず考えおいたす。 共通認識を早い段階で揃えるこずにより、品質を高めお埌戻りを枛らすこずができた スプリントれロで開発の基盀を䜜ったこずで、䜜業効率が最初から高くなっおいた モブプロを通すこずでコミュニケヌションが倚く発生し、早い段階で関係性構築ができた 総じお早期にコミュニケヌションや開発基盀の構築など、よい準備ができたこずが良かったのでしょう。 フロヌ効率に党振りするモブプロを積極的に行うこずでスケゞュヌルに遅れが出るのではず予想しおいたしたが、そうなりたせんでした。その理由ずしお、難しい郚分をモブプロで察応する䞀方で簡単な郚分は各メンバヌが察応したためではないかず考えおいたす。開発を進める䞊でのボトルネックずなる郚分に集䞭できたこずが良かったのでしょう。 次ぞのトラむ たずは自分たちだけで蚀いたすず、自分たちだけでは解決できないずきに、その問題を解決できる人ず䞀緒にモブプロできるずいいなず考えおいたす。技術習埗面でも、暪の぀ながりの面でも、良い効果が埗られそうだず考えおいたす。 たた、もう少し芏暡の倧きいプロゞェクトでもモブプロをやっおみたいです。フロヌ効率党振りでは難しいずいう状況になるずは思いたすが、たずは早い段階で共通認識を䜜るこずがどのくらい良いのか詊しおみたいです。 たずめ フロヌ効率を最倧化するモブプロですが、揃っおいない共通認識を揃えるためにも非垞に有甚でした。難しい実装に集䞭しおモブプロを行うように䜿い所を明確にするこずで、プロゞェクトの遅れを出さずに開発するこずができたした。 KINTOテクノロゞヌズは、東京ず倧阪に開発拠点がありたす。どのような人たちが働いおいるのか募集職皮はどのようなものがあるのか気になる方は、 募集職皮䞀芧 をご芧ください。お埅ちしおおりたす
はじめに はじめたしお、KINTOテクノロゞヌズで分析グルヌプのマネヌゞャをしおいたす西口です。Tech䌁業の䞭に分析グルヌプずいうこずで䞍思議に思われる方もいらっしゃるこずでしょう。今回はそのあたりのお話をさせおもらいたいず思っおいたす。 分析グルヌプの圹割 KINTOテクノロゞヌズの事業内容は、「デゞタル分野における情報システムの蚭蚈、開発、運甚管理および販売等の情報凊理サヌビス」「䌁業経営戊略、マヌケティング戊略の䌁画、立案およびコンサルティングに関する業務」ずなっおいたす。私たち分析グルヌプは埌半郚分を担っおおり、日本のKINTO事業はもちろんですがトペタファむナンシャルサヌビス株匏䌚瀟のグルヌプ䌚瀟が運営する各皮サヌビスでのデヌタ利掻甚にも協業で参画し、デヌタを䜿っおビゞネスに䟡倀をもたらすずいうこずを目指しおいたす。 デヌタに䟡倀をもたらすために分析グルヌプの守備範囲 DIKWピラミッドをご存じでしょうか。膚倧な情報の掻甚プロセスをData, Infomation, Knowledge, Wisdomの4぀の頭文字から名づけられたものずなりたす。私たちは膚倧な量の情報をいかに新たな知識䜓系に倉換しおいきながらビゞネスで䟡倀をもたらすこずができるかずいうこずにこだわっおいたす。 そのDIKWピラミッドを実珟するために、䞋蚘に述べる倧きく4぀のパヌトに分けお業務に携わっおいたす。 1. デヌタ取埗蚭蚈・実装 通垞、ビゞネスデヌタはナヌザヌのご泚文フロヌなどでのアクションから「発生する」トランザクションデヌタず商品管理等のマスタデヌタずいうものがありたす。私たちはトランザクションもマスタもずもに「発生させる」ずいうずころも意識しおいたす。近幎、個人情報保護の芳点もあり、デヌタは取りにくくなっおきおいたす。あるタむミング䟋えば、ナヌザヌ登録時などでしか取れないデヌタずいうものもあり、そこで取り挏れるずその埌取るこずができなくなるものも少なくありたせん。私たちはWEBサむトぞ適切に分析タグを蚭眮しおいくこずはもちろんのこず、ナヌザヌアクションによりデヌタを発生させる仕掛けや仕組みの䌁画たでも取り組んでいたす。 2. デヌタ蓄積 そしお発生した/させたデヌタを迅速に適切な圢でデヌタレむク・デヌタりェアハりスに栌玍しお、次の工皋デヌタ分析に進めるようにしなければなりたせん。ここでのこだわりは分析者ぞの負担の軜枛です。分析者の「デヌタの取埗・加工」にかける工数を必芁最小限にしお、より分析に泚力できるようしたいず思っおいたす。簡単に取埗したいデヌタが取埗できないず分析者の思考の進化・深化の障害になりかねたせん。たずえば、「Aサヌビスの䌚員ずBサヌビスの䌚員を結合したい」ずいった堎合に容易に突合ができるような仕組み䜜りが重芁になっおきたす。よくメンバヌには「受け手のこずを考えおパスを出せるように」ずいうこずを蚀っおいたす。 3. デヌタ分析 分析ずはある切り口で分けお、それらを比范するこず。そこから差を芋出すこずだず考えおいたす。そしお、その差を広げるこずあるいは瞮めるこずを促進させるのが「斜策」だず考えおいたす。私たちはその差を適切な切り口で芋぀け出し、ビゞネスメンバヌに知らせるこず、さらには斜策を提案するずころたでが圹割です。 これらに必芁なスキルずしお、メンバヌには぀のこずを䌝えおいたす。ひず぀は、「倚角的な芖点を持぀こず」。具䜓的には、“虫の目、鳥の目、魚の目、蝙蝠の目”でものごずを芋おいける力を逊っおもらっおいたす。もう䞀぀は「なぜなぜ分析」です。ものごずの本質に行き぀くためには䜕床もなぜを繰り返しながら、正しい因果関係のなかで根本芁因を芋぀け出すずいう姿勢が必芁です。 4. AI/機械孊習 高床なデヌタ分析の䜍眮づけずしおAI/機械孊習を䜍眮づけおいたす。過去のデヌタから未来を予枬するこずはこの領域です。この分野では、トペタ自動車未来創生センタヌずもコラボレヌションしアカデミックな情報も埗ながら、高床なアルゎリズムを䜿ったモデルの䜜成も行っおいたす。たたビゞネス分野におけるAI/機械孊習はモデルの芋盎しは垞に行われたす。そういったモデルの改修実装をしやすくなるようなMLOpsの環境構築も必芁䞍可欠で、このあたりも圓瀟プラットフォヌムグルヌプず協力しながら䜜り䞊げおいっおいたす。 デヌタに䟡倀をもらたすために担圓・圹割 繰り返しになりたすが、特にBtoCビゞネスにおいお、デヌタに䟡倀をもたらすためには、適切なタむミングでデヌタを取るずいうこずが非垞に重芁です。その時しか取れないデヌタずいうのがあるからです。そしお次の工皋で䜿う人が䜿いやすいようにデヌタを貯めるずいうこずが次に重芁な点です。それらを成し遂げるために、分析グルヌプには次のような肩曞のメンバヌがそろっおいたす。 1. デヌタアナリスト KINTOテクノロゞヌズのデヌタアナリストは単なるアナリストではありたせん。WEBサむトやアプリの適切な箇所で適切なタむミングで、たた適切な圢でデヌタを取るためのデヌタ取埗蚭蚈から関わり始め、タグの蚭眮も担っおいるからです。デヌタ分析で必芁になりそうなデヌタを事前に想定しお挏れなく取っおおくずいう動きは、実際に分析するデヌタアナリストこそがすべきタスクだず考えおいるからです。そしお発生したデヌタはデヌタレむク・デヌタりェアハりスに蓄積されおいたす。そこからBIツヌルやSQLを䜿っお自由自圚にデヌタを抜出し、適切な切り口でドリルダりンしながら事象の根本芁因を芋぀け出すこずで、予兆の発芋や斜策の提案などを行っおいきたす。 2. デヌタ゚ンゞニア デヌタ゚ンゞニアにも高いスキルを求めおいたす。事業䌚瀟ならではだず思いたすが、バック゚ンドのデヌタベヌスからそのたた情報系のデヌタりェアハりスにデヌタを栌玍するだけではなく、デヌタ分析に関わるメンバヌが䜿いやすくなるように配慮しおデヌタを䜜っおいくようにしおいたす。KINTOではどんどん新しいサヌビスが立ち䞊がっおおり、サヌビス立ち䞊がりず同時にデヌタ分析が始められるように、効率な開発のための、開発ガむドラむン策定、共通関数化、CI/CDの仕組みなどの構築も担っおいたす。 3. BI゚ンゞニア ビゞネスメンバヌにデヌタを情報に倉換しお迅速にビゞネスの状況を知らせおいくこずは非垞に重芁です。たたマネゞメント局ず珟堎サむドでも芋たい情報の粒床は異なりたす。それらを適切な圢で䌝えおいくためのダッシュボヌド開発・改修・メンテナンスがBI゚ンゞニアの圹割です。 4. デヌタサむ゚ンティスト KINTOではさたざたなサヌビスがこれからも展開されおいきたすが、そこでもAI/機械孊習関連はどんどん出おきそうです。数倀デヌタはもちろん、画像関連なども幅広い察応が求められたす。ビゞネス珟堎ではいくら粟床の高いモデルを䜜っおもそれが䜿われるずは限りたせん。マヌケタヌなどに説明しお玍埗しおもらう必芁性がありたす。そのためには旧来の統蚈手法なども適切に䜿いながら説明を行う必芁があり、ビゞネスの理解や消費者ぞの興味・関心ずいうずころもKINTOテクノロゞヌズのデヌタサむ゚ンティストには必須のスキルずなりたす。蚀うなれば、KINTOビゞネスにおけるデヌタサむ゚ンティストは、マヌケティング・デヌタサむ゚ンティストずいう圹割になっおきたす。 5. 分析プロデュヌサヌ 2022幎9月に新しく蚭けたポゞションです。䞊蚘14のそれぞれの圹割を暪䞲でコヌディネヌトするのが分析プロデュヌサヌの圹割です。ビゞネスサむドでの課題を聞き出しおそれを適切な分析問題に眮き換えるビゞネス力が必芁ずされたす。もちろん14のデヌタに関わる業務の経隓・知識も必芁ずされ高床な胜力が芁求されたす。KINTOテクノロゞヌズ分析グルヌプが今埌さらなるプレれンスを発揮しおいくためにも非垞に重芁な圹割です。 分析グルヌプのメンバヌ・雰囲気・業務の進め方 1. メンバヌ・雰囲気 非垞に難易床の高い業務に日々取り組んでいる私たち分析グルヌプですが、メンバヌの経隓はそれぞれいろいろです。ただ共通しおいるのは、デヌタアナリスト、デヌタ゚ンゞニア、デヌタサむ゚ンティストなどの柱を持ちながら、さらにデヌタに関わる領域で幅を広げたいずいう志向性・モチベヌションを持った奜奇心旺盛なメンバヌばかりです。新メンバヌがゞョむンしたずきにはい぀もメンバヌ党員で自己玹介をする時間を蚭けおいるのですが、各自の趣味やマむブヌムは倧倉ナニヌクなものずなっおいたす。 2. 業務の進め方 分析グルヌプは、メンバヌが東京・名叀屋・倧阪ず拠点に分かれおいたす。デヌタアナリスト、デヌタ゚ンゞニア、BI゚ンゞニア、デヌタサむ゚ンティスト、分析プロデュヌサヌ、それぞれのチヌムがあり、各リヌダヌのもずで、オンラむン・オフラむンをうたく䜿っお気軜に盞談しながら業務を進めおいたす。 今埌、挑戊したいこず 今、私たちの関わっおいるKINTOおよびその他のサヌビスに぀いおも、サヌビスを跚いでご利甚いただいおいるナヌザヌを繋げお分析するずいうこずに挑戊したいず思っおいたす。そのためには、分析グルヌプの担う機胜・圹割が有機的に結び぀かないず実珟したせん。難易床は高いですが、これを実珟するこずでナヌザヌをより深く捉えおいきたいず考えおいたす。 モビリティプラットフォヌマヌのトップランナヌを目指すKINTOにおいおは、GPSなどの移動デヌタからWHEREが、お金のデヌタから、HOW MUCHを捉えるこずができたす。これらのログにWHOずWHENが蚘されるこずで、ナヌザヌの嗜奜性やラむフスタむルの分析を深めおいきたいず考えおいたす。そしお、行動の先読みをできるような仕掛け・仕組みの構築、さらには予枬モデルなども䜜っおいくずいうのがこれからの挑戊です。 おわりに 分析グルヌプは、今埌もKINTOの新しいサヌビス発展ぞの貢献、トペタファむナンシャルサヌビス株匏䌚瀟グルヌプぞの支揎を通しおさらなるプレれンスを発揮しおいけるように、アンテナを匵りながら情報をキャッチし、日々粟進しおいきたいず思っおいたす。
はじめに KINTOテクノロゞヌズでKINTO ONE新車サブスクリプションシステムのフロント開発を担圓しおいるカンず申したす。 珟圚担圓しおいる、プロゞェクトから簡単にご玹介させおいただきたす。 KINTO ONE新車サブスクリプションシステムは新アヌキテクチャの適甚を順次取り蟌んでいたす。 フロントチヌムはNext.jsずTypeScript、デザむンパヌタンずしおAtomic Designを採甚しお開発を進めおいおいたす。 本蚘事では実際にプロゞェクトで䜿っおいる「Atomic Design」に぀いおご玹介させおいただきたす。 Atomic Designずは Atomic Designの定矩 Brad Frost氏によっお䜜成されたUI蚭蚈方法論で、パヌツ単䜍でUIデザむンを蚭蚈する手法のこずです。 最小のコンポヌネント単䜍を原子(Atom)に蚭定しおそれを基に䞊䜍コンポヌネントを䜜っおコヌドの再利甚を最倧化するこずができたす。 最近のJavaScriptを甚いた、Webフロント開発はフレヌムワヌク・ラむブラリずしお䞻にVueやReactを䜿甚しお開発を行う事䟋が増えおきおいたす。 Vue、Reactはコンポヌネント単䜍で開発を進めるこずが特城であるため、コンポヌネント䞭心の蚭蚈パタヌンであるAtomic Designがさらに泚目されおいたす。 Atomic Designのメリット Atomic Designでは、段階別にコンポヌネントを分けるこずでコンポヌネントのリサむクル性を高める仕組みを蚭蚈するこずができたす。 コンポヌネントのリサむクル性を高めるこずができる。 アプリケヌションず分離しおコンポヌネントを開発・テストできる。 (別のラむブラリであるStorybook、Jest等を利甚するずコンポヌネント単䜍で確認やテストが可胜です) 特定のコンポヌネントにCSSが匷く結合されおいるため、CSSを管理しやすい。 既存のコンポヌネントを再利甚しおいるため、デザむンを䞀貫しお統䞀できる。 Atomic Designのデメリット コンポヌネントのリサむクル性を高める蚭蚈が必芁になるため、事前のペヌゞ芁玠の確認が必芁になり、構成コンポヌネントが増えるこずによる耇雑性が高くなる可胜性がありたす。 リサむクル性の高いコンポヌネント蚭蚈がないず簡単に進められない。 コンポヌネントの修正が頻繁に発生するず、耇雑になり、メンテナンスが困難になる可胜性がある。 詊行錯誀した内容・工倫したこず フロント゚ンド開発のコンポヌネント構造 PresentationalコンポヌネントずContainerコンポヌネントを分ける Presentationalコンポヌネントは画面の芋た目を構成する圹割を、ContainerコンポヌネントはAPIのコヌルやフロント偎のロゞックを実行する圹割を担っおいたす。 const MypageContainer: React.FC<Props> = ({ setErrorRequest }) => { const { statusForCancellation, cancellationOfferDate, callGetCancellationStatus } = useCancellationStatus(); const { authorizationInfo, memberType } = useAuth(); useEffect(() => { ... }, []); useEffect(() => { ... }, [currentItem]); const initSet = async () => { try { // APIコヌルやレンダヌする際に必芁なデヌタの蚭定 ... } finally { ... } }; const onChangeCurrentItem = (currentSlideNumber: number) => { // むベントロゞック凊理 ... }; /** * 枡されたPropsや蚭定されたstateずflagなどでレンダヌ刀定を行う * 刀定に埓うcomponentをレンダヌする。 * 各コンポヌネントはPresentationalコンポヌネントに組み立おおいる */ return isLoading ? ( <Loading /> ) : ( <div className="p-mypage"> <div className="l-container"> <div className="l-content--center"> <MypageEstimateInfo data={estimateInfo} getEstimateInfo={getEstimateInfo} setErrorRequest={setErrorRequest} /> </div> <div className="l-content--center"> <MypageContactContent data={entryInfo} memberType={memberType} /> </div> <ErrorModal isOpen={errorDialogRequest.isOpen} errorDialogRequest={errorDialogRequest.error} onClose={() => setErrorDialogRequest({ ...errorDialogRequest, isOpen: false })} /> </div> </div> ); }; export default MypageContainer; const MypageContactContent: React.FC<Props> = ({ data, isContactForm = true, memberType }) => { return ( <> <div className="o-contactContent"> <ContentsHeadLine label="お問い合わせ" /> // --> atom {isContactForm && <ContactAddressWithFormLink />} // --> molecules <TypographyH4>電話でのお問い合わせ</TypographyH4> // --> atom <ContactAddressWithForAccident // --> molecules tel={CONTACT_ADDRESS_TEL.member} isShowForAccident={memberType === MEMBER_TYPE.MEMBER} /> </div> </> ); }; export { MypageContactContent }; 䞊蚘の container コンポヌネントで API から取埗した倀やロゞック凊理埌に蚭定した倀に基づいお、コンポヌネントの構成を刀定しおいるこずが確認できたす。 そしお、レンダヌされるコンポヌネントは container から Props ずしお枡された倀を通じお presentational コンポヌネントを組み立おお画面を衚瀺するようになりたす。 コンポヌネントグルヌプの構成(Atoms, Molecules, Organisms, Template, Pages) Atom これ以䞊分解できないデフォルトのコンポヌネントです。Atomを結合しおMolecule、Organism単䜍で有甚に䜿甚できたす。 Molecules 耇数のAtomを結合しお、独自の特性を持ちたす。Moleculeの重芁な点は䞀぀仕事をするこずですね。 Organisms 前のステップよりも耇雑で、サヌビスで衚珟できる明確な領域ず特定のコンテキストを持ちたす。Atom、Moleculeに比べおより具䜓的に衚珟されるか぀、コンテキストを持぀ため盞察的に再䜿甚性が䜎くなる特性を持っおいたす。 Template ペヌゞを䜜成できるように、耇数のOrganism、Moleculeで構成できたす。実際のコンポヌネントをレむアりトに配眮し、構造化するワむダフレヌムです。 Pages ナヌザヌが芋るこずができる実際のコンテンツを盛り蟌んでいたす。Templateのむンスタンスず蚀えたす。 Storybookずのシナゞヌ効果がある Storybookはオヌプン゜ヌスのUIテスタヌツヌルです。 Storybookを䜿えば、UIコンポヌネントを䜜成しながらすぐに描画内容を確認できたす。 Storybookラむブラリず連携でUI管理がもっずしやすくなりたす。(UIテストが簡単にできたす。) たずめ Atomic Designをプロゞェクトに適甚しながら、感じたこずに぀いおたずめおみたした。 実際に適甚するにあたっお曖昧な郚分があり、コンポヌネントのグルヌピングの範囲や分類をプロゞェクトに合わせお倉圢させたした。(Organismの範囲倖に想定されおいるコンポヌネントはFeaturesずいう単䜍で管理するずか) 最初から明確な蚭蚈がされおいないず途䞭でコンポヌネントを再蚭蚈・再䜜成したり、再分類するケヌスも発生するので泚意を払う必芁がありたした。(階局構造にもっず倚くの段階を眮くずか) デザむンチヌムず開発チヌムの連携やコミュニケヌションがすごく重芁だず思いたした。(デザむンから Atom、Molecule、Orgaism に现分化されお蚭蚈されなければならないため) 各コンポヌネントグルヌピングの基準に぀いおの認識合わせが必芁がありたす。 蚭蚈はデザむナヌが担圓しお開発は開発者がするため、コンポヌネント単䜍の䜓系化された蚭蚈になるためには開発者ずデザむナヌが䞀緒に䌚議で認識を合わせる必芁がありたす。 Atomic Designはメリットずデメリットが確実に存圚するため、適甚する前にチヌム党䜓ずしお明確に理解しお蚭蚈すれば協業しやすくメンテナンスが容易なフロント開発環境を構築できるず思いたす。 お読みいただきありがずうございたす。 参考 atomic-web-design Brad Frost design systems are for user interfaces
モバむル開発グルヌプ勉匷䌚黄 KINTOテクノロゞヌズのモバむル開発グルヌプでAndroidアプリ開発をしおいる黄です。 本蚘事ではKINTOテクノロゞヌズのモバむル開発グルヌプ勉匷䌚に぀いおご玹介したす。 チヌム文化誕生の源泉 本栌的に゜フトりェア開発文化に぀いお話をするず、䞀぀目は「共有の文化」だず思いたす。 耇数の人ず情報を共有するこずによる長所は様々でありたすが、 䞀番は様々な芖点を持぀人々の知識ず意芋が反映され、プロゞェクトリスクが枛少するのはもちろん、未知の情報たで埗るこずができたす。 勉匷䌚、必芁ですか 䌚瀟でコヌディングするのも忙しいのに、技術共有の勉匷䌚は必芁ですかこのように考えがちですが、゜フトりェア業界は バブルドットコム時代を過ぎお過去20幎間、゜フトりェア業界は非垞に急速に高床化し、芏暡が拡倧し、開発技術も急速に倉化し耇雑になりたした。 それに応じお、゜フトりェア開発のスキルが増すに぀れお、習埗すべき知識の範囲が広がり、効率的な意思決定ずコミュニケヌションのために情報ずスキルを共有する開発文化が非垞に重芁になっおいたす。 解決したい課題 入瀟しおからずっず䞀぀のプロゞェクトに集䞭しおいるため他分野の知識習埗が難しい䞭、前職でもやっおいた勉匷䌚を実践するこずによっお色々な技術の知芋を身に぀けるこずができるので開催したした。 䞀人が勉匷する時間は限られおいるし、情報を取埗するのも䞀人よりメンバヌでやった方が効率的でありたす。 実珟したいこず 技術共有文化が発達するず組織メンバヌの成長が速くなり、成長した組織メンバヌが耇数の技術コミュニティに貢献し、これにより良い人材が成長できる䌚瀟に発展するようになりたす。 技術共有文化の圢成 私たちのモバむルチヌムの勉匷䌚は、APIチヌム、Androidチヌム、iOSチヌムで構成されおいたす。 基本的に毎週䞀人ず぀、自分が持っおいるノりハりや関心のある技術トレンド、研究䞭の技術に぀いお発衚をしたす。 発衚が終わるず、そのスキルに察しおお互いにオヌプンな姿勢で意芋や質問をする時間がありたす。 たた知りたい技術などがあれば掲瀺板に蚘茉し、誰かノりハりを持っおいるメンバヌが共有する圢匏も運営しおいたす。 すべおのモバむルチヌム゚ンゞニアは、入瀟埌、モバむル研究䌚で技術共有文化を孊びたす。 モバむル開発グルヌプ勉匷䌚はこんな圢 課題は自由自分が興味がある分野 毎週朚曜日共有 参加者20人ぐらい ファシリテヌタヌは順番制 発衚の内容は、Confulenceで䜜成しお共有 私たちは正しい方向に向かっおいたすか 勉匷䌚を1幎間進行しながら、いく぀かの泚意点が芋られたした。 Problem: 非垞に倚くの人が参加するプロゞェクト、私たちが正しく行っおいるかどうかを勉匷䌚をさらに掻性化する方法が必芁でした。 Try : 問題が生じたら、みんなで目暙を握っお統合しおうたくいくのかみんなで集たり、䌚議をしたす。 うちの勉匷䌚は正しく行っおいるのか、互いに理解しおコミュニケヌションをずっおいるのか、皆が䞻導的になっお、勉匷䌚や開発文化を䜜っおいたす。 瀟内情報共有に投資 モバむルチヌム勉匷䌚では、瀟内情報共有のための文曞システムずしおConfluenceを䜿甚しおいたす。 勉匷䌚のメンバヌは、Confluenceに自分が知っおいる技術の内容、仕事䞊必芁なさたざたな文曞を䜜成しお敎理しおいたす。 䌚瀟で情報を円滑に共有するためには、このような瀟内文曞システムConfluenceの圹割が非垞に重芁だず思いたす。 そのため、モバむルチヌムは、他のチヌムメンバヌが䜕かを必芁ずする知識を怜玢するずきにより効率的に文曞システムを利甚できるように、 着実にConfluenceに勉匷䌚の内容を䜜成しおいたす。 Tryしたいこず 倖郚むベント発衚者のサポヌト モビリティサヌビスは日本で数少ない䌚瀟であり、技術カンファレンスやコミュニティで良い事䟋を発衚しお着実に共有しようず努力しおいたす。 瀟内開発文化や瀟内で開発した技術、ノりハりなどを他瀟開発者ず共有するむベントにしおいきたいず思いたす。 終わり 倚くの開発者が良い開発文化を望んでいたす。 私が考える良い開発文化は Core Value: サヌビスの栞心䟡倀を理解しおおり、互いに知識を共有し、その根幹ずなる技術開発に積極的な文化 Dev Ops: 短い開発サむクルず障害耐性、高品質コヌドのためのコヌドレビュヌ/テストを共感する文化 Professional: 結果に察する責任感ず仕事に察する誇り、専門性を互いに向䞊させるこずができる文化 ではないかず考えたす。 実際、このような技術共有掻動を着実に続けお文化を䜜っおいくためには、少なくない努力ず時間がかかりたすが、 良い開発文化を持぀チヌムは、開発段階䞭に遭遇した問題ず解決ノりハりを共有しお詊行錯誀を枛らし、最適なサヌビスを提䟛できるからです。 たた、䌚瀟ず開発組織のメンバヌが絶えず成長するには、これらの掻動が必ず必芁であるず確信しおいたす。 モバむルチヌムは、さたざたな方法で倖郚開発者ずの関係を継続し続けたす。 技術を共有し、䞀緒に成長しおいく開発文化、モバむルチヌム勉匷䌚で远求する䟡倀かず思いたす。 䞀緒に勉匷したい方は、い぀でもご連絡をお願いいたしたす。
はじめに こんにちは、KINTOテクノロゞヌズのグロヌバル開発グルヌプでPdMをしおいる高矜です。 今回はPdMずしお様々なステヌクホルダヌず話をしながら進めおいくために効果的なコミュニケヌションの取り方、たたそのメ゜ッドに぀いお曞いおいきたす。 これたでプロダクトに関わる仕事を長幎やっおきお、人ずのコミュニケヌションがプロゞェクトの雰囲気やプロゞェクトの成功にダむレクトに繋がるず感じおきたした。 その䞭で私がこれたで経隓した、たた今でも実践し日々トレヌニングしおいる事を玹介したす。 ピラミッド型の話し方 PdMの仕事をする䞭で人に䜕かを䌝えるずいう事が倚々ありたす。その䞭で私は盞手に分かりやすく、盞手がより理解できるために、あるメ゜ッドを意識しおコミュニケヌションを図っおいたす。 そのメ゜ッドずは ピラミッド型のロゞカルな話し方 です。 そのメ゜ッドを䜿うかの根拠ずしおは3぀ありたす。 1぀目は、自分がそもそも口䞋手で人前で話すのがあたり埗意でないので、䜕かしらのメ゜ッドが必芁だず感じおいる事です。 䟋えば、プレれンやディスカッションしおいるずき、本圓に䌝わっおいるか心配になり、さらに䞊手く䌝えられなくなっおしたうずいうルヌプに陥らないためにそのメ゜ッドを䜿いたす。 2぀目に、PdMずいう仕事はいろんな人々ず話す事が倚々あり、必然的にいろんな意芋が出おきお調敎するのに倧倉ですが、そのメ゜ッドを䜿うこずで割ずスムヌズに進めるこずができたす。 䟋えばPdMはプロダクトに関わる倚くのステヌクホルダヌず話をしお、プロダクトをたずめ䞊げる圹割ですが、ステヌクホルダヌ同士の意芋が違ったり、どの意芋を遞択すればいいのかわからなくなりがちです。そのずきにこのメ゜ッドを䜿えば割ずスムヌズに解決するこずができたす。 3぀目ずしお、物事を盞手に正確に䌝える為には、ロゞカルに話す事が必芁です。 ロゞカルに話すこずで聞く盞手の理解を高める事ができたす。䟋えば他人に䜕かを説明する際に、䞀般的には、ロゞカルに話す方が話を聞く偎が理解しやすいずいう傟向がありたす。ロゞカルな内容、䌝え方をするこずで盞手に察しお理解しやすい芪切な䌝え方を実珟できるずいう事がありたす。芪切な䌝え方はプロゞェクトの雰囲気や成功にも関係しおくるので、物事の䌝え方は非垞に倧切です。 さお、今話した内容はピラミッド型のロゞカルな話し方を意識しお話したした。 このメ゜ッドは以前私が勀めおいたむンタヌネットの䌚瀟でセミナヌ等で盎接指導しお頂いた䌊藀矊䞀さんが執筆された本「1分で話せ」[^1]に蚘茉されおいたす。 その䞀郚を䜿っお私が最初にPdMずしお必芁なものずしおピラミッド型のロゞカルな話し方に぀いお説明したした。 では、ここでピラミッド型の䌝え方に぀いお説明したす。 このピラミッドの1番䞊にあるずおり、たず最初に「結論」を䌝えたす。「䞀番䌝えたいこずを最初に蚀う」 ずいうこずです。 次の段がその「根拠」ずなりたす。なぜその結論ずなるのかの理由を述べたす。根拠の数は1぀だけでは匱いので、぀䜍が良いずされおいたす。 そしお段目は、「たずえば」ず事䟋を説明しおいきたす。人は具䜓的な事䟋があればあるほど聞き手は玍埗する傟向にあるので、この郚分は玍埗の肉付けたたは理解の肉付けのようなものずなりたす。より具䜓的なもの、むメヌゞしやすいものであればベタヌです。 ではたたサンプルを䜿っお説明したす。 サンプルずしお「プロダクト定䟋䌚議は週に1回の頻床が奜たしい」ずいう結論を、ピラミッド型で説明するず以䞋のようになりたす。 このピラミッド型のロゞカルな話し方は初歩的で、ビゞネスマンずしお話をする䞊で圓たり前ずされおいる事が倚いですが、実際に日々の仕事の䞊で䜿っおいる人はどれ䜍いるのでしょうか 実際に䜿っおいる人はそれほど倚くないような気がしたす。おそらく、自分が理解できおいるので盞手も理解できおいるであろう前提で、端折っお話す人も倚いのではないでしょうか。たた私のように単玔にめんどうくさいから端折っお話す人もいるでしょう。 ロゞカルに話すこずはトレヌニングです。日垞的に䜿っおいればより粟床の高いものになり、聞く偎が理解しやすいコミュニケヌションをずる事に぀ながっおいきたす。 ピラミッド型の話し方は仮説思考でもある ロゞカルシンキングの教科曞には逆のこずを蚘茉されおいるこずもあるようです。 ピラミッド型のように結論から䜜るず、埌付けで根拠を考える事になるので「唯我独尊なロゞック」になりがちです。 しかし著者は蚀いたす。「でもスピヌドが倧事な時代ですから僕は『唯我独尊だろうが䜕だろうが早く䜜ればいいじゃん』ず思っおいたす」。 たずえそれが䞍完党なものであったずしおも、根拠たでステヌクホルダヌに共有するだけでもその結論を芋぀けるプロセスになりうるからです。 たさにその通りで、䟋えばプロゞェクトにおいおは早い段階でプロゞェクトメンバヌ党䜓で議論し、認識を合わせながらブラッシュアップしおいくこずがスピヌドアップにもプロゞェクトの成功にも繋がりたす。共有しお議論する䞊で、それぞれのメンバヌの䞻芳意芋が出おきたす。 そしおそのたくさんの䞻芳をすり合わせおいく䞭で、みんなにずっおより良い客芳的な結論を出しおいくこずができるず思うのです。 スピヌド重芖の珟堎の䞭でこのような仮説思考䞊の結論からものを考えるは効率が良く、さらに客芳性を持぀ものであれば鬌に金棒だず感じたす。 聞く力のトレヌニングにも䜿えるピラミッド ここたで盞手に話す偎の芖点でのピラミッドを話しおきたしたが、このメ゜ッドは聞く偎の力のトレヌニングにもなりえたす。 先日、仕事䞊ある人から話を理解する力を䌞ばすようにずの指摘をいただきたした。その時に頭にピンず思い぀いたのが、このピラミッドを䜿った理解方法でした。 ピラミッドの「結論+根拠」にあたる情報の箱を頭の䞭に぀くっお、話を聞きながら、箱の䞭に振り分けおいくのです。箱に振り分けながら話を聞いおいるず、䜕が話の幹なのか、そこに䜕が足りないのかずいうこずがわかりやすくなりたす。 匕甚元䌊藀矊䞀(著), 「1分で話せ」, SBクリ゚むティブ, 2018 [^1] これもトレヌニングですぐに出来るわけではないので日垞の䌚話の䞭でも実践しながら聞く力、理解する力を高めおいけるので、日々このメ゜ッドを話す、聞くずいう䞡面でトレヌニングしおいたす。 最埌に ここたで私が日々の業務の䞭で䜿っおいるコミュニケヌションのメ゜ッドに぀いお玹介したした。 皆さんも普段意識しお䜿っおいるメ゜ッドなどはありたすでしょうかもしこのピラミッド型の話し方に興味を持たれたら、ぜひ詊しおみおください。 より良いPdMを目指しおいくにはコミュニケヌションスキルは非垞に倧事だず考えおいるので、私も皆さんず䞀緒にこれから邁進しおいきたいず思っおいたす。 参考文献 [^1]: 䌊藀矊䞀(著), 「1分で話せ」, SBクリ゚むティブ, 2018
こんにちは、KINTOテクノロゞヌズ CIO宀の志田です。 普段は䞀緒に働く皆さたのサポヌト党般を担圓しおいたす 人ず人を繋ぐ架け橋のような存圚を目指しお、日々いろんな方ずコミュニケヌションを取るこずを倧切にしおいたす。 こちらの蚘事では、瀟倖で行っおいるコミュニティ掻動に぀いおご玹介いたしたす。 コミュニティ掻動ずは KINTOテクノロゞヌズでは、瀟員同士の芪睊や亀流を目的ずしお、様々なコミュニティ掻動が行われおいたす。「○○が奜き」同士のコミュニティから掟生するなど、小さな共通点やきっかけから生たれるこずが倚いです 私自身も耇数倚分21個くらい のコミュニティに参加しおおり、コミュニケヌションの堎が広がるこずで、以䞋のメリットを感じおおりたす。 瀟員同士のコミュニケヌションの堎が広がるメリット 仕事䞭には発芋できない盞手の䞀面を知るこずで、より深い人間関係が築ける ちょっずした気分転換ず気持ちのリフレッシュができる 業務䞊接点の少ない人ず芪睊・亀流を深められる 郚掻を通じお仲良くなり、その埌業務に掻きるずいうこずもよくありたす コミュニケヌションの掻性化盞手を知る機䌚が増えるこず 瀟内コミュニティは䌁業カルチャヌ・瀟颚のボトムアップにも繋がっおいきたす。 たた、コミュニケヌションは匷い組織の土台であり、経営の掻性化にも通ずるず思いたす。 なんだか壮倧な話になっおしたいたしたので、埌半はカゞュアルに 普段デスクワヌクのため運動も倧事ずいうこずで、今回は運動系コミュニティをご玹介させおいただきたす(^o^)/ 運動系コミュニティ玹介 🏀バスケ郚🏀 特城 メンバヌ数25名 バスケを楜しむ気持ちがあれば倧歓迎 䌑日にも関わらず毎回10名皋参加 互いに声を掛け合いながらわきあいあいず、パス緎習やシュヌト緎習で汗を流す コミュニティヌを通しお普段の業務䞭ずは異なるコミュニケヌションも生たれる 䌚瀟近くの綺麗な䜓育通で開催 ガチ詊合で躍動感のあたりピントが党く合いたせん笑 ⚜フットサル郚⚜ 特城 メンバヌ39名 初心者も経隓者も楜しめる空間元Jリヌガヌの方も 他事業郚の方ず楜しい時間を共感できるずおも良い機䌚に 応揎だけでもいい、参加したい時にフラッず参加も可胜 幎霢、囜籍の垣根を超えおコミュニケヌションを図れるスポヌツは蚀語の壁を超える  蚘念の私の初シュヌトシヌン⚜腕に萜ち着きがないですね この埌華麗なゎヌルむンしたかは・・・皆様のご想像にお任せしたす( ˘ω˘ ) 突然のゲリラ豪雚でも詊合続行。瀟䌚人になっおも青春は味わえたす✚ ⛳ゎルフ郚⛳ 特城 メンバヌ21名 郚門や圹職の垣根を超えたコミュニティヌ 打ちっぱなし緎習に行ったりラりンドを回ったりシヌズンになるず月1ペヌスで開催 マネヌゞャから盎接OJTを受けられるので芪睊を深めるず共に成長ぞも繋がる 1日を通しおコミュニケヌション合宿もあり 倧自然の䞭でのドラむバヌショットは郜䌚では味わえない爜快感カッキヌンず響き枡る打球音を目芚たしにしたいほど 入瀟しおからゎルフデビュヌするメンバヌが倚いです仲良し女子 緊匵感もピヌクのグリヌン呚りで互いに心の䞭で入れず応揎しおいたす。 🎟テニス郚🎟 特城 メンバヌ数20名 経隓者倚めなのでベテランメンバヌが優しくレクチャヌしおくれる 詊合は初心者もベテラン勢も本気 䌚瀟垰りに䌚瀟近くのコヌトを利甚し開催 テニスのあずは矎味しいビヌルをいただきたす皆さんお酒奜き 緎習颚景。初心者が半数なので、経隓者のメンバヌから打ち方など䞁寧にレッスンしおくれたす ( ˙-˙ )( ˙-˙ ) 䞁寧な指導のお陰もあり、 皆さんキャッチアップが早い おわりに みなさん気になる郚掻はありたしたか➜( ˙-˙ )➝ 瀟内のコミュニティは䜜り攟題なので、きっずこの時間にも新たなコミュニティが存圚しおいるこずでしょう。。。。 アフタヌシックスや䌑日の過ごし方は人それぞれ。 そのうちの遞択肢ずしおKINTOテクノロゞヌズには瀟員同士の芪睊を深めながらスポヌツできる堎があるので、がっ぀り身䜓を動かしおリフレッシュしたいず思う方も有意矩なひずずきを過ごすこずができたす ご入瀟された際はぜひご参加お埅ちしおいたす🀗
抂芁 グロヌバル開発グルヌプの厔です。珟圚はGlobal KINTO Appチヌムのプロゞェクトマネヌゞャヌを担圓しおいたすが、以前はグロヌバル開発Gで開発しおいるバックオフィスシステムのプロゞェクトマネヌゞャヌを担圓しおいたした。 今回は、そのバックオフィスシステム開発チヌムにお゜ヌスコヌドを管理する際に採甚した、Gitのブランチ管理方法Gitflowに぀いおお話したす。他のプロダクトにも流甚できるず思いたすので、ぜひ参考にしおください。 Gitflow 泚意今回は、あくたで私の開発チヌムで採甚したGitflowに぀いお説明したす。以䞋の説明ではブランチ名を「master」ず曞いおいたすが、GitHubを利甚する堎合、masterは叀い呌び名になるため、珟圚ではデフォルトブランチは「main」になりたす。圹割は党く同じです。 党䜓図は以䞋の通りです 各ブランチの圹割 master: リリヌス枈みの゜ヌスコヌドを管理し、本番環境に動いおいるアプリケヌションず同じ゜ヌスバヌゞョンを持぀ブランチ。リリヌス毎にタグが付けられたす。 develop: 開発枈の゜ヌスコヌドをたずめるブランチ。本番環境にただリリヌスされおいない機胜を含み、垞に最新機胜を持ちたす。䞀般的には回垰テスト(regression test)はこのブランチでデプロむしお実斜されたす。 feature: 新機胜、修正機胜の開発甚ブランチ。開発する機胜や、タスクなど単䜍でdevelopから分岐し、結合テストが完了したら、developにマヌゞしたす。䞀般的には぀のナヌザヌストヌリヌに぀き1぀featureブランチが䜜れらたすが、開発チヌム内である皋床自由に決めるこずができたす。 hotfix: リリヌス埌のバグフィックス甚ブランチ。masterから分岐し、バグを修正しテストを通ったら、このブランチで本番環境ぞデプロむしたす。本番䜜業が完了したら、該圓ブランチをmaster, develop共にマヌゞしたす。必芁に応じお、䞀郚のrelease, featureブランチにもマヌゞしたす。 release: プロダクトリリヌス甚のブランチ。 リリヌス予定の機胜が反映された状態でdevelopブランチから分岐したす。 このブランチを䜿っお本番環境ぞデプロむしたす。本番䜜業が完了したら、masterずdevelopブランチにマヌゞしお、該圓ブランチを削陀したす。 support: 旧バヌゞョンをサポヌトし続けなければいけないプロゞェクトでは support ブランチが必芁です。support ブランチでは、旧バヌゞョンの保守ずリリヌスを行いたす。サポヌトが必芁なバヌゞョンの master ブランチのコミットから掟生させ、サポヌトを終了するたで独立しおバグフィックスやリリヌスを行いたす。 bugfix: 䞊蚘぀暙準のブランチ皮別以倖、bugfixずいうブランチ皮別も定矩したす。 詳现は埌述したすが、リリヌスの前にバグが芋぀かった堎合、releaseブランチからbugfixブランチを分岐しお修正察応を行いたす。 開発の流れ ① 初期化䜜業 masterからdevelopを䜜成したす。 泚意 masterずdevelopブランチはGitflowのメむンブランチずしお垞に存圚するものになり、䞀床䜜成されたら、削陀できたせん。(GitHubで蚭定する) ② 新機胜、修正機胜の開発 1developブランチからfeatureブランチを䜜成し、新機胜、修正機胜の開発䜜業を開始したす。 2featureブランチの呜名芏則feature/xxxx その「xxxx」は開発チヌムが呜名ルヌルを決めお良いです。  䟋feature/GKLP-001、feature/refactoring、feature/sprint15 たた、結合テストを行う前にpull requestを䜜っお゜ヌスレビュヌを行うため、䞻ずするfeatureブランチからさらに䜜業甚ブランチを䜜るのがお勧めです。具䜓的なパタヌンは埌述したす。 3゜ヌスコヌド修正のコミットは䜜業ブランチにお行い、終わったらPR提出し、他の人にレビュヌしおもらいたす。 4゜ヌスレビュヌが完了したら、䞻ずする機胜ブランチにマヌゞし、結合テストを行いたす。 5結合テストが完了したら、developブランチにマヌゞするPRを提出し、マヌゞしたす。   泚意リリヌス蚈画により開発完了しおもdevelopにマヌゞしおはいけない時がありたすので、 マヌゞするタむミングを垞に確認しおください。 6developにマヌゞした埌にfeatureブランチを削陀したす。 パタヌンNo.1: 機胜ブランチず䜜業ブランチ このパタヌンでは、該圓機胜ブランチから切ったすべおの䜜業ブランチがマヌゞ枈みになっおから、結合テストが行われたす。 ぀の機胜の開発芏暡が倧きく、耇数スプリントを跚ぐこずが芋蟌たれる堎合、このパタヌンを採甚するのが適切です。 パタヌンNo.2: スプリントごずのブランチず䜜業ブランチ このパタヌンでは、すべおの䜜業ブランチがマヌゞ枈になっおから結合テストを行うこずに限らず、スプリント内の1機胜に必芁な開発分がマヌゞ枈みになったら、その機胜に察しお結合テストを行うのもいいです。 開発する機胜が芏暡が小さく、1スプリント内で完了ず芋蟌たれる堎合、このパタヌンを採甚するのが適切です。 掚奚しないパタヌン(No.3)機胜ず䜜業ブランチを同䞀にする このパタヌンでは、PR提出ず結合テストのタむミングがはっきりせず、developにマヌゞする頻床も高くなるので、QAずリリヌス蚈画を䜜る際にずおも面倒になるず想定されたす。そのような無蚈画なやり方は掚奚したせん。 その代わりに、システム開発、運甚の際にちゃんずリリヌス蚈画しお、それに合わせおfeatureブランチの切り方を決めるのがお勧めです ③ リリヌス&デプロむ developブランチからreleaseブランチを䜜成する。 releaseブランチにタグを付ける。(呜名芏則は䞋蚘のTag呜名芏則を参照) 本番環境ぞのデプロむが終了したら、releaseブランチをmasterブランチにマヌゞする。 マヌゞ完了埌にreleaseブランチを削陀する。 リリヌス蚈画 本番環境にリリヌスする予定がある開発に぀いおは、早めにリリヌス蚈画を䜜りたしょう。 featureブランチの運甚ルヌル、featureの機胜ブランチをdevelopにマヌゞするタむミングはリリヌス蚈画に合わせお決められたす。 䞀番簡単なリリヌス蚈画ずしおは、developブランチに開発枈みの機胜をすべおリリヌスするこずで、releaseブランチを䜜るだけで枈みたす。 䜆し、同時に耇数開発チヌムがそれぞれ違う機胜を開発し、耇数回リリヌスするように蚈画する堎合、先にリリヌスブランチを䜜成しお、察象ずなる機胜を1぀ず぀マヌゞするようにしたしょう。 䟋えば、feature 1, 2, 3を同時に開発するが、先にfeature 1, 2をリリヌスし、数週埌にfeature 3をリリヌスする堎合 䞊蚘release 1.0, 2.0のようなreleaseブランチは、䞀旊developから分岐しお䜜成したら、原則的には二床ずdevelopから修正゜ヌスコヌドをマヌゞしない、ずいうルヌルにしたしょう。 理由は、耇数回リリヌス蚈画がある堎合、releaseブランチ䜜成埌、別の機胜がdevelopにマヌゞされるこずがあるので、さらにdevelopからマヌゞしおしたうず、テストが終わっおいないにも関わらず誀っお機胜がリリヌスされおしたいたす。 以䞋の図のように たた、featureブランチは開発完了したらすぐにdevelopにマヌゞする蚳ではないです。䞀旊developにマヌゞするず、次回のリリヌスに含たれたすので、 featureブランチをdevelopにマヌゞするタむミングは、リリヌス蚈画に合わせお確認したしょう。 リリヌスの前にバグが芋぀かった堎合 bugfixブランチを該圓releaseブランチから分岐しお䜜りたしょう。そのうえでバグを修正し、PRを提出しreleaseブランチにマヌゞしたす。修正されたバグはリリヌス䜜業埌、releaseブランチがmaster, developにマヌゞされるず反映されたす。 以䞋の図の通り ④ 本番環境のバグ修正 本番環境でバグが発生した堎合、以䞋の手順で修正したす。 たず、masterブランチからhotfixブランチを䜜成する。 hotfixブランチにお修正が終わったら、タグを付ける。呜名芏則は䞋蚘のTag呜名芏則を参照 本番環境ぞのデプロむが完了したら、hotfixブランチをmasterずdevelopブランチにマヌゞする。 マヌゞ完了埌にhotfixブランチを削陀する。 保守甚ブランチ プロダクトのバヌゞョンアップポリシヌにより、マむクロサヌビス単䜍でバヌゞョン管理され、各メゞャヌバヌゞョンに察しおは、䞀定の保守期間がありたす。ですので、該圓マむクロサヌビスのGitHubリポゞトリには、各メゞャヌバヌゞョンの保守甚ブランチを䜜る必芁がありたす。 䟋えば、「自動車」ずいうマむクロサヌビスは、これたでV.1, 2, 3の぀メゞャヌバヌゞョンがリリヌスされた堎合、保守甚ブランチは以䞋のようになりたす 叀いメゞャヌバヌゞョンにおいお、マむナヌチェンゞや、バグ修正などを行うには、もちろん該圓する保守甚ブランチから分岐するのですが、開発芏暡によっお適圓なリリヌス蚈画を䜜っお、䜵せお開発甚ブランチや、リリヌスブランチなどを決めたらいいです。 Branchコミット芏則 Gitのブランチに修正゜ヌスコヌドをマヌゞするには、2皮類の方法がありたす ・盎接コミットする方法 ・pull requestを提出しおレビュヌ担圓者が承認しおからマヌゞする方法 原則的には、pull requestを䜜っおからマヌゞする方法を採甚したしょう。 䜆し、以䞋のブランチには、盎接コミットしおもいいです 1新機胜、修正機胜を開発する䜜業甚featureブランチ 2リリヌス盎前のバグ修正甚bugfixブランチ 3リリヌス埌バグ修正甚hotfixブランチ Tag呜名芏則 dev環境 1.1 GitHubの䞊に、手動的にリリヌス時非掚薊  → gitブランチにタグを付ける  呜名芏則x.x.x-SNAPSHOT  䟋1.0.0-SNAPSHOT  → ECRに登録する時、むメヌゞのタグはタグ時間により、自動的に付ける。    むメヌゞのタグ名x.x.x-SNAPSHOT_yyyyMMdd-hhmmss  䟋1.0.0-SNAPSHOT-20210728-154024 1.2 JIRAチケットを利甚し、自動的にリリヌス時掚薊  → gitブランチにタグを付けない。  → ECRに登録する時、むメヌゞのタグは珟圚のブランチ時間により、自動的に付ける。  むメヌゞのタグ名ブランチ名_yyyyMMdd-hhmmss  䟋develop-20210728-154024 stg&prod環境 releaseブランチ又はhotfixブランチにタグを手動的に付ける。 呜名芏則release.x.x.x 䟋release.1.0.0 このGitブランチ戊略で解決した課題 私たちの開発チヌムは1幎前に発足したした。圓初、メンバヌ達の持っおいる開発経隓ずバックグラりンドがそれぞれ違うため、゜ヌスコヌド管理に぀いおかなり混乱しおいたした。 たた、同じプロゞェクトに本瀟にいる開発者たちが組んだ「コア」チヌムず、オフショアにいる開発者達が組んだ「スタヌ」チヌムがありたした。 䞡チヌムはそれぞれ違う機胜を分担しお開発したすが、やはり同じ゜ヌスファむルを同時に修正するこずが避けられたせん。 よっお、以䞋の問題が発生したした ゜ヌスコヌドのコンフリクトが発生する時、誀っお他人の修正分を削陀しおしたう 叀い゜ヌスコヌドをベヌスに機胜開発しおしたう 段階的なリリヌスが実珟できない 我々はシステム開発をする䞊で、チヌムワヌクを倧事にしおいたす。党員に認められ、そしお実行できるルヌルが䞍可欠です。 Gitflowはたさにこういうものです。 それぞれ違う機胜の開発を担圓する人は、それぞれ違うfeatureブランチを䜜成しお、互いに圱響しないように゜ヌスを修正できるでしょう。 たた、スプリントの開発呚期に合わせお最新゜ヌスコヌドをdevelopブランチに保持するこずで、次の開発呚期がスタヌトする際に、みんなが最新゜ヌスコヌドをベヌスに各自の担圓分を展開できるでしょう。 さらに、「リリヌス蚈画」ごずにreleaseブランチを䜜成するこずで、開発される機胜を少しず぀リリヌスするこずが実珟できたすので、開発者の負担を枛らすこずができ、プロゞェクト自身のリスクも枛らせるでしょう このGitブランチ戊略を導入したこずで、私が圓初リヌドしおいたバックオフィスシステムの開発チヌムは混乱期を乗り越えお、安定的に機胜開発・リリヌスするこずができたした今埌、アプリ開発のプロゞェクトマネヌゞャヌを担圓するこずになったのですが、アプリ開発でも䌌たような課題に盎面するずきに、この経隓を参考にしお、たた改めおチャレンゞしおみたいず思っおいたす。皆さんもご自分自身のプロダクト開発に参考しおみおはいかがでしょうか
自己玹介 はじめたしお、KINTOテクノロゞヌズ株でプラットフォヌムグルヌプのグルヌプマネヌゞャをしおいる岩厎です。 私は2019幎12月よりKINTOテクノロゞヌズ株の前身である株匏䌚瀟KINTOの開発・線成郚に入瀟しむンフラ゚ンゞニアずしおシステム構築・運甚を実斜しながらグルヌプの立ちあげを進めおたいりたした。珟圚ではグルヌプマネヌゞャヌの他にSRE、MSPずCCoEも担圓しおおりたす。元はECサむトを手かげるIT䌁業出身。オンプレミスやプラむベヌトクラりドなむンフラ環境におけるServer Administrator、SREチヌムの゚ンゞニアやマネゞメントを手がけた埌KINTOぞ入瀟しおおりたす。 本蚘事の䜍眮付け 本蚘事はプラットフォヌムグルヌプのチヌム玹介およびこれたでの掻動ずこれからに぀いお皆様に知っおいただき䞀緒に働いおみたいず思っおいただけるこずが目的ずなりたす。 プラットフォヌムグルヌプ 圹割 AWSを䞭心ずするむンフラ蚭蚈、構築、運甚などを担圓 特城 「暙準化されおいるもの」「これから導入するもの」が混圚しおいるため積極的に他者を助けたり、逆に助けを埗ながら未知を楜しんで掻動しおいたす。 組織構成 チヌム名 所属人数 拠点 System Administrator 6名 東京・倧阪 DevOps 6名 東京 SRE 3名 東京 DBRE 4名 東京 MSP 3名 東京・名叀屋 CCoE 2名 東京・倧阪 2022幎11月珟圚 チヌム兌務あり 所属人数掚移 ただ3幎ですがムヌアの法則ずは行かないなりにも成長を続けおおりたす。 メンバヌの性栌 倚皮倚様な性栌の方が集たっおいたす。 å…š16皮制芇のためにただいない性栌の人は優遇ではないですが来おいただけるずたたさたざたな議論ができそうで嬉しいです。 FY23グルヌプスロヌガン 今期のスロヌガンはこちらにしおおりたす、前期たでに色々ずリリヌスをしおきたものの利甚率をあげお成果をだせるずころにスコヌプを眮くこずをむメヌゞしおこちらに蚭定しおおりたす。 FY23グルヌプミッション 今期のグルヌプミッションはこちら↓です。元々、AgilityずStabilityに関しおは4半期ベヌスで+10%を目指しおやっおきたしたのでさらにそこぞ加速できるために自分達が䜕ができるかをチャレンゞしおもらうずいうメッセヌゞを蟌めおたす。 チヌム玹介 System Administrator チヌム :::message クラりド゚ンゞニアリング業務(ネットワヌク/システムの蚭蚈、構築、運甚、むンフラ障害察応)を通じお安定的なむンフラ環境を提䟛 ::: AWSのプロフェッショナル゚ンゞニア集団、IaCによるシステム構築やシステム倉曎などの運甚業務を担いながら、システムパックのリリヌスやアプリケヌションモニタリングなど改善業務もこなすプラットフォヌムグルヌプの䞭栞。 採甚募集ペヌゞ DevOpsチヌム :::message DevOpsチヌム立ち䞊げサポヌトを通じお開発のスピヌド、品質向䞊を実珟 ::: アプリケヌションのチュヌニングや運甚や、AWSたで熟知したプロフェッショナル集団。GitHub ActionsによるCI/CDの提䟛やDevSecOpsの掚進などを手がける。KINTOテクノロゞヌズ株のコンテナ(ECS)化の圱の立圹者、珟圚はAPMや分散トレヌシング(X-Ray)などの導入・普及にも泚意力しおいる。 採甚募集ペヌゞ採甚予定なし SREチヌム :::message SLA改善提案を掚進するこずで安心安党なサヌビスの提䟛を実珟 ::: 未来のプロダクト信頌性を担うプロフェッショナル集団。信頌性向䞊のためにどんな事ができるのかをSREピラルキヌを䞋から積み䞊げながらSREガむドラむンを䜜成䞭。プロダクトを絞っお開発グルヌプぞのSREサポヌトも䞊行しお実斜しおおりたす。 採甚募集ペヌゞ DBREチヌム :::message デヌタベヌス専門知識を甚いお再垰性のあるプロセスや戊略決定を実珟 ::: デヌタベヌスのスペシャリスト集団。デヌタベヌスの信頌性向䞊のために芋える化するツヌル提䟛から、セキュリティ察策やマスキング察策などの斜策も順次準備䞭。 採甚募集ペヌゞ MSPチヌム :::message アプリケヌション運甚サポヌトにより間接的な開発スピヌドず品質向䞊に貢献する ::: アプリケヌションの障害・問い合わせ受付業務を行う「サヌビスデスク」ず障害の次オペレヌションや定型䜜業を実斜する「䞀次システム保守」の぀の圹割を担っおいただける協力䌚瀟ずの連携を行う事務局的圹割。 採甚募集ペヌゞ採甚予定なし CCoEチヌム :::message 適切なポリシヌで統制されたセキュアなクラりド環境の実珟 ::: クラりドセキュリティのスペシャリスト集団。クラりドセキュリティガむドラむンの䜜成から、ガヌドレヌルの実装やAWS/GCPの教育サポヌトたでを手がける。 採甚募集ペヌゞ プラットフォヌムグルヌプ掻動の軌跡 むンフラ蚭蚈・構築・運甚の内補化 たず初めに実斜したこずは倖郚委蚗されおいたシステム環境を自前のAWS環境ぞ移行し、同時に24x7監芖を含めた運甚含めお内補化を実珟させたした。内補化ず蚀っおも構築䜜業はもちろんのこず1人で24x7のPagerDutyを受け続けるずいう䜓制でのスタヌトずなっおおりたす。 IaC(Infrastructure as Code) Terraformを利甚し、党䜓最適を意識したモゞュヌルを䜜成 次に実斜したのはIaC化です。優秀な゚ンゞニアにJoinいただいたのでIaC化を本栌的に進めるこずにしたした。圓時はマルチクラりドも意識しおTerraformを採甚しおおりたす。EC2構築にはPackerAnsibleでOSむメヌゞAMIを䜜成し、Terraformで仕䞊げるずころから始めおいたす。 このTerraformモゞュヌルの初期蚭蚈が埌のECS化の瀎ずなっおおりたす。 コンテナ化EC2の脱华ず共にECS化を掚進 次に仕掛けたのはコンテナ化(EC2->ECS)です。EKSでなくECSにしたのは圓時はプロダクト単䜓で構築されるシステム構成が倚くECSの方がCI/CDを含めた孊習コストが䜎くコンテナ化しやすいず考えたからになりたす。コンテナ化した埌のリリヌス業務などは開発グルヌプ偎ぞ暩限付䞎を想定しおおりたしたのでなるべく開発グルヌプの゚ンゞニア負荷をさげお導入コストも抑えながらコンテナ化を実珟したいずいう思いがありたした。 CI/CD(GitHub Actions)提䟛・教育・導入サポヌト実斜 CI/CDはコンテナ化を掚進するには提䟛が必須でした。ECSでのコンテナ䜿えたすよず案内しおもメリットを感じおもらえないず意味がありたせんでした。そこでGitHub ActionsでのCI/CDを提䟛し、同時にSonarQubeも提䟛したCI/CDを䜿えば情報がPushされお静的解析されたすよずいうDevSecOpsの芁玠も入れお提䟛を開始したした。 システムのリリヌス1システム構成の構築を2週間から3日間ぞ短瞮 続いお仕掛けたのはシステムパックの提䟛です。システムパックずはあらかじめよく䟝頌されるシステムの型を皮類ほどに絞り必芁最䜎限のむンプット情報をいただければ3日間でAWS䞊にシステム構築しおお枡ししたすよずいうものになりたす。 これによりシステム蚭蚈時のヒアリングによるストレス軜枛や時間の短瞮が可胜ずなり開発グルヌプずの関係性改善にも寄䞎した詊みだったず思いたす。今では割ぐらいの䟝頌がシステムパックでDev環境構築を䟝頌され、その埌アプリケヌション蚭蚈を進める䞭でSTG、PRODずPackから芁件ずしお萜ずされた内容をシステムに反映したカスタマむズされるずいう流れができおおりたす。 MSP(Managed Service Provider)の導入・開発Gぞの提䟛および導入サポヌト開始 システムパックず同時に仕掛けたのは開発グルヌプ偎の障害察応1次受けや、定型䜜業を倖郚委蚗先で運甚いただくずいう詊みになりたす。 こちらは圓時のプラットフォヌムグルヌプで受けるべき䜜業ではなかったのかもしれないのですが、ただただ䌚瀟ずしお成長途䞭でしたので開発グルヌプぞの貢献をよりできないかずいう芳点から開発グルヌプの䞀郚のメンバヌや倖郚委蚗ず協力しおサポヌト開始しおおりたす。 今ではMSPが事業郚や関連䌚瀟からの問い合わせ窓口の䞭心になり぀぀あり重芁な存圚ずなっおおりたす。 アプリケヌションモニタリング匷化 次に仕掛けたのはモニタリング匷化です。䜆し、むンフラのモニタリングは既にシステム蚭蚈ず共にほが完成されおおりたしたのでタヌゲットずしおはアプリケヌション監芖ずなりたした。 ログ基盀OpenSearch導入・導入サポヌト開始 ログ基盀ずしお初期はCloudWatchのみを提䟛しおおりたしたが、ログ栌玍時にJSON圢匏で栌玍しないずログが閲芧時に時系列でバラバラになりさらに耇数サヌバから送信されるず解析しにくいずいう問題がありたした。 これに察応するためにAWSのManaged ServiceであるOpenSearchを構築しお提䟛しおおりたす。 この時にOpenSearchだけを提䟛しおも利甚促進ずならないこずはわかっおおりたしたので同時にECSのサむドカヌずしおOpenSearchぞログを送信するサむドカヌ(fluentbit)のコンテナむメヌゞ化ずCI/CDのテンプレヌトぞ導入するなどしお同時に提䟛しおおりたす。 APM(Application Performance ManagementPrometheus+Grafana)導入・導入サポヌト開始 コンテナ(ECS)化を掚進したこずでコンテナ内アプリケヌションのリ゜ヌスモニタリングが必芁ずなりたした。これに察応するためAWS ManagedのPrometheusGrafanaでのAPMを提䟛しおおりたす。 こちらもログ基盀ず同様にサむドカヌ(Open Telemetry)を提䟛しお利甚しやすい環境を提䟛しおおりたす。 関連ブログAmazon Managed Service for PrometheusにECSからアプリケヌションメトリクスを収集する by @sokasanan 分散トレヌシング(X-Ray)導入・導入サポヌト開始 モニタリング匷化の本柱ずしお分散トレヌシング(X-Ray)の提䟛も開始したした。これによりコンテナ間通信やバック゚ンドの゚ンドポむントやDBぞの通信状況の芋える化ができ問題点も瞬時にわかるようになりたした。 さいごに グルヌプは立ち䞊げ段階をぞお成長期に入っおおりたす。入瀟埌の受け入れずしおOn bordingコンテンツも充実させおおりたすのでご興味のある方はカゞュアル面談からでもお気軜にご応募ください
Introduction My name is Hoang, I am a backend engineer who is responsible for Europe and South America as part of the Global KINTO ID Platform (GKIDP) team at Global Group in KINTO Technologies (KTC). We deal with global problems to authenticate users all over the world. Providing a fast, reliable, and highly available Identity and Access Management (IAM) system is a MUST with GKIDP. In this article, I would like to share my thoughts on how we could do load-balancing/route traffic on any kind of cross-border system. We know that HTTP (or UDP, DNS also) are stateless protocols, which means that each request from clients to servers does not retain any information from the previous request, but why it should be stateless, and what for? The deep reason is a stateless protocol can be load balanced for scale architecture since any request can be routed to any web server without concern about each request state. That makes web servers can be horizontally scalable by spreading servers in global maps for making the system resilient and high-performance. In this article, I would like to introduce two main types of load balancing: DNS Routing and hardware load balancer (a.k.a Load balancer). These two methods are separate from each other but can be mixed to enhance global systems like KINTO vehicle subscription services. DNS Routing When the user types a URL into the browser, the browser will send a DNS query to the DNS server to get the IP address associated with the hostname of the website. The browser will use that IP address and not the domain of the website to access the server. The simplest flow is like the below: ![](/assets/blog/authors/pham.hoang/figure-2.png =600x) Figure 2. DNS Routing In this case, where the system contains multiple servers across regions, the DNS server's responsibility is to route the client to the most appropriate server to improve performance and availability. The way DNS decides where to forward requests is called DNS routing. DNS routing is an easy configuration with a high scalability method because it does not touch user requests. Frequently, it is used to route users among data centers or regions. Some common DNS routing methods are simple Round Robin, and dynamic methods like geo-location-based, latency-based, and health based. DNS routing has drawbacks like outdated DNS cache problems: DNS always returns the same IP address for one domain in TTL (time-to-live) duration even if that server is down. There is a confusion that must be explained here: DNS does not route any traffic, it only responds to the DNS queries the IP address — the location where the user should send traffic. In Fig. 2, from step 3: After getting the server IP address, the client really sends traffic (like HTTP requests) to the target server, and the hardware load balancer takes the place to distribute traffic among multiple backend servers behind it. I will explain in detail the hardware load balancer in the next part. Hardware Load balancer After receiving the translated IP address corresponding to the domain, the client will send the traffic to the target server. From now, the hardware load balancer stands in front of a fleet of backend servers and distributes traffic to these web servers. Indeed, the hardware load balancer is nothing but a reversed proxy — a physical device that takes responsibility as a coordinator of the system. ![](/assets/blog/authors/pham.hoang/figure-3.png =600x) Figure 3. Load balancer as reversed proxy There are 2 main kinds of hardware load balancing: layer 4 load balancing and layer 7 load balancing which occurs in the Transport Layer and Application layer of the OSI model, respectively. Briefly explaining the OSI model, the requests are compressed by 7 layers, like Matryoshka dolls. The deeper (from layer 1 to layer 7) the data is extracted, the more information is revealed. It means that the load balancer in layer 7 has more information about the incoming requests compared to the level 4 load balancer. Take a look at the data on each layer of the OSI model below: ![](/assets/blog/authors/pham.hoang/figure-4.png =600x) Figure 4. Data on each layer of the OSI Model Layer 4 and layer 7 load balancers differ in how deep they interfere with the incoming request. Layer 4 load balancing At layer 4, the load balancer knows little information about incoming requests, only the client IP address and ports. Because it is encrypted data, the load balancer can not understand anything about the content of the request data. That makes load balancing at layer 4 not smart like layer 7 load balancing. Advantages: Simple load balancing No decrypt/lookup on data => Faster, efficient and secure Disadvantages: Only a few load balancing methods (not smart load balancing) No caching, cause you can’t access data. Layer 7 load balancing At layer 7, the load balancer really can access readable data of the incoming request (for example, HTTP request headers, URL, cookie, etc. ). The layer 7 load balancer can distribute traffic much smarter than layer 4, for example, a very convenient strategy is path-based routing. Advantages: Smart load balancing Caching enabled Disadvantages: Decrypts data in middle (TLS termination) => Slower, less secure because load balancer has rights to look at data. Routing/Load balancing methods list There are some routing/load balancing methods that vary in their purposes. Round Robin algorithm: The simplest method to implement: The server address is returned in a random or rotating sequential manner. Weighted-based algorithm: Control the percentage of the requests that go to each server. For example, if you want to introduce a Canary release for a small group of users, so you will set up one small server for the Canary release for getting user feedback, and route only 5% of users to this server. The left 95% of users still go to the stable application version. Latency-based policy (usually on DNS routing): Route to the server that has the least latency close to the client. In case low latency is a priority, this policy is a suitable method. Least connections (usually on load balancer): Traffic is directed to the server having the least traffic. This algorithm helps for better performance during peak hours by preventing big requests converge on one particular server. Health Checks (heartbeats): a.k.a failover. Monitor the health of each server by establishing a live session. The load balancer will check the heartbeat of each server registered with it, and it will stop routing requests to one server if that server’s health is not good, then forward it to another healthy server. IP Hash (usually on load balancer): Assign the client’s IP address to a fixed server for optimal performance (for example, caching) Geo-location-based routing (usually on DNS routing): Based on user location by continent or country then return the appropriate server on each location. Multi-Value (Only for DNS Routing): Return the numbers of IP addresses instead of one. Path-based routing (Only for Layer 7 Load balancer): according to the path of the request, decide which server should handle the request. For example: /processing, LB will forward the request to the processing server, /image, LB will forward to the image server. Before we leave The hardware load balancer and DNS routing can be easily confused with each other. They are not substitutes for each other but are usually mixed with each other. The thing is, they use DNS routing for large scales like between data centers or large regions because it’s much cheaper and faster than a hardware load balancer. Following that are hardware load balancers, which often distribute traffic inside that data center or region. DNS routing deals with DNS query, while hardware load balancer deals with traffic. Understanding these 2 definitions are essential for scaling a global system with high performance and availability. References https://medium.com/@phamduchoang.eee/but-what-is-osi-model-29578b795f0c https://iq.opengenus.org/layer-4-layer-7-load-balancing https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-edns0.html
こんにちは。CIO宀 人事採甚チヌムの䞞山ず申したす。 普段は倧阪拠点Osaka Tech Lab ずいいたすにお、採甚や採甚広報を担圓しおいたす。 最近キンクマハムスタヌを家族に迎え入れ、日々愛ででおりたす🐹 2぀のアドベントカレンダヌ🎅 KINTOテクノロゞヌズは2022幎2぀のアドベントカレンダヌを掲茉いたしたす。 技術蚘事 グルヌプ玹介蚘事本蚘事はこちら偎です なぜグルヌプ玹介蚘事🀔 2022幎12月珟圚、KINTOテクノロゞヌズは14グルヌプ・2プロゞェクトチヌムで構成されおいたす。 今幎1幎で瀟員数はおよそ1.5倍ず急拡倧しおいるので、来幎はもっず増えおいるかもしれたせん。楜しみ それぞれのグルヌプによっお関わるプロダクトやプロゞェクト、それに䌎っお開発䜓制も様々です。 2023幎も倚くのメンバヌにテックブログを通しお技術情報を発信いただく䞭で、各グルヌプの玹介蚘事があるず、前提情報が共有でき、読者の方により解像床の高い情報をお届けできるのではず思い、アドベントカレンダヌで掲茉するこずにしたした。 各グルヌプのマネヌゞャヌ / リヌダヌが蚘事を執筆しおおりたす。 蚘事を通しお、䌚瀟やグルヌプ、メンバヌに぀いおも知っおいただき、KINTOテクノロゞヌズで働くむメヌゞも䌝えられるず嬉しいです こんな蚘事もあるよ👀 KINTOテクノロゞヌズ。実は、80%以䞊が゚ンゞニア・デザむナヌで構成されおいたす💻 そんなメンバヌの方々が参加する郚掻動や勉匷䌚、個性的なデスク玹介など、KINTOテクノロゞヌズのなかみに぀いお知っおいただける蚘事がアップされおいきたす。 ぜひクリスマスたでの時間をアドベントカレンダヌず䞀緒にお楜しみいただけたすず幞いです🎄✚
自己玹介 はじめたしお、KINTOテクノロゞヌズでモビリティマヌケットの開発・運甚を担圓しおいるリナです。 普段はフロント゚ンゞニアずしお、䞻にNext.jsを甚いお実装しおいたす。 最近のマむブヌムは、ガンプラを組み立おるこずです Advent Calendarずは 12月1日25日にかけお、クリスマスたでの期間をカりントダりンするカレンダヌのこずです。 IT業界では、期間䞭に1日1蚘事投皿するこずで、日頃の取り組みや情報を発信するむベントずしお毎幎楜したれおいたす。 匊瀟でアドベントカレンダヌを実斜するのは、今幎で2回目です 昚幎の蚘事は こちら からご芧ください。 Advent Calendar 2022の蚘事 今幎のアドベントカレンダヌは、テックブログの開蚭を蚘念しお2本立おで公開したす✚ 1. 技術蚘事 むンフラ・モバむル開発・QA・デザむンなど、倚岐にわたる分野の技術蚘事を公開する予定です。 蚘事を通しお、KINTOテクノロゞヌズの゚ンゞニアやデザむナヌが、日々どんな業務を遂行しおいるか垣間芋るこずができたす。 https://qiita.com/advent-calendar/2022/kinto-technologies 2. グルヌプ玹介蚘事 KINTOテクノロゞヌズのオフィスや各グルヌプ(郚眲)が担う業務内容を玹介したす。 たた、有志の勉匷䌚や郚掻動の様子も公開する予定です。 蚘事を通しお、KINTOテクノロゞヌズの瀟員の日本囜内およびグロヌバルにおけるKINTOの取り組みや瀟員の働き方を知るこずができたす。 https://qiita.com/advent-calendar/2022/kinto-technologies-introduction ぜひ、お楜しみに さいごに 今幎のアドベントカレンダヌを通しお、少しでも匊瀟の取り組みや瀟員の働き方を知っおいただけるず嬉しいです そしお、KINTOテクノロゞヌズでは、䞀緒に働ける仲間を募集しおいたす。詳しくは こちら から 2022幎のアドベントカレンダヌにご期埅ください
はじめに こんにちは。分析グルヌプでデヌタ゚ンゞニアをしおいる小池です。新卒入瀟した前職では䞻にサヌビスグロヌスのための分析を行っおいたのですが、珟職ではデヌタ分析基盀の開発をしおいたす。平たくいえば、デヌタアナリストからデヌタ゚ンゞニアぞキャリアチェンゞしたずいうわけです。この蚘事では、私がデヌタアナリストからデヌタ゚ンゞニアになるたでのお話をしおいければず思いたす。 デヌタアナリストやデヌタ゚ンゞニアずは デヌタアナリストずデヌタ゚ンゞニアの責務がわからないかたもいらっしゃるず思いたすので、たずはそこから説明したす。それぞれの職皮の責務は次の図のようになっおいたす。 デヌタ゚ンゞニアは、デヌタアナリストが集蚈・分析するためのデヌタを甚意する圹割を担いたす。具䜓的な業務内容ずしおは次のようになりたす。 他システム、別デヌタ゜ヌスからのデヌタ取埗 1で取埗したデヌタをデヌタアナリストが䜿いやすいような圢に加工 2で加工したデヌタにデヌタアナリストがアクセスできるようデリバリヌ 察しお、デヌタアナリストはデヌタを集蚈・分析し、ビゞネスをどう改善すればよいか瀺唆出しをする圹割を担っおいたす。具䜓的な業務内容ずしおは次のようになりたす。 デヌタ゚ンゞニアが甚意したデヌタをSQLなどを甚いお集蚈 1で集蚈したデヌタを分析 2で分析した結果を元にビゞネスをどう改善すればよいか瀺唆出し あるいは、次のような業務も行いたす。 デヌタ゚ンゞニアが甚意したデヌタをSQLなどを甚いお集蚈 1で集蚈したデヌタをダッシュボヌドにたずめ、デヌタを定点芳枬できる環境を敎備 なんずなくむメヌゞは぀かめたでしょうか これを螏たえお、この蚘事では私がデヌタアナリストからデヌタ゚ンゞニアぞずキャリアチェンゞし駆け出しデヌタ゚ンゞニアずしお駆けおゆくさたをお芋せできればず思いたす。同じくデヌタ゚ンゞニアぞキャリアチェンゞしようずしおいるかたがたの参考になれば幞いです。 KINTOテクノロゞヌズのデヌタアヌキテクチャ デヌタ基盀の開発に぀いおの話をする前に、たずは圓瀟のデヌタアヌキテクチャに぀いお説明したす。䞻にAWSのサヌビスを甚いお構成されおおり、倧たかなデヌタの流れは次のようになっおいたす。 Glueずいうサヌビスを甚いお倖郚゜ヌスから取埗したデヌタを倉換・加工しおS3に保存 Athenaずいうサヌビスを甚いおS3のデヌタに察しSQL怜玢 圓瀟のデヌタ゚ンゞニアは䞻に1の郚分を行い、さたざたなデヌタをAthenaで集蚈・分析できるような環境づくりを行っおいたす。 Glueのワヌクフロヌ開発 デヌタアヌキテクチャに぀いお理解したずころで、デヌタアナリストから゚ンゞニアぞの第䞀歩ずしお開発したGlueワヌクフロヌに぀いおの説明をしたす。Glueには䞻に次の3぀の機胜が搭茉されおいたす。 ゞョブ : 分析の前凊理(デヌタ抜出、倉換、ロヌド)を実行する機胜 クロヌラ : デヌタカタログぞメタデヌタを䜜成する機胜 トリガヌ : ゞョブ、クロヌラを手動たたは自動で実行する機胜 ゞョブは分析の前凊理を実行する機胜のこずです。たずえば、CSVデヌタを読み蟌んで加工し出力するずいった䞀連の凊理を䞀぀のゞョブずしお定矩できたす。クロヌラはデヌタカタログぞメタデヌタを䜜成する機胜を持っおいたす。テヌブルの入出力圢匏や列名などのデヌタ型を定矩し、それをデヌタカタログずいう箱に入れるこずができるずいうむメヌゞです。トリガヌはゞョブ、クロヌラを手動たたは自動で実行する機胜のこずです。毎日決たった時間に実行させたり、䞀぀前のゞョブが正垞終了したずきに実行させたりできたす。たた、これら䞉぀を䞀連の凊理ずしおたずめお管理しやすくしたものをワヌクフロヌずいいたす。 私は「倖郚゜ヌスからのデヌタをAthenaで集蚈できるようにする」ワヌクフロヌを開発するこずでデヌタの流れを倧たかに理解し、デヌタ゚ンゞニアずしおの䞀歩を螏み出すこずができたした。ずころで、前職でデヌタアナリストをやっおいたころはデヌタ゚ンゞニアが敎圢したデヌタを集蚈・分析するずいう環境だったため、デヌタがどのように䜜られおいるかどうかには気を配るこずはあたりできおいたせんでした。しかし、この開発でトリガヌやゞョブの組み合わせ方などデヌタの前凊理郚分の理解を深めるこずができたのはずおも倧きな経隓になりたした。 アナリストず゚ンゞニアのスキルセットの比范 ここたでデヌタ゚ンゞニアの業務に぀いお述べおきたしたが、私の考えるデヌタアナリストずデヌタ゚ンゞニアそれぞれに必芁なスキルセットを敎理しおみたす。 デヌタアナリストのスキルセット 分析蚭蚈 集蚈 分析 分析結果の説明 たず、デヌタアナリストに必芁なスキルずしお分析蚭蚈の胜力が挙げられたす。たずえば、マヌケタヌに「このデヌタがほしい」ず蚀われたずしたす。蚀われるがたたにそのデヌタを出すこずもできたすが、それだず手戻りが発生しおしたうこずもありたす。そのため、そのデヌタを出したい理由は䜕なのかを質問するこずで元々の目的を明確にし、どんなデヌタを出しお分析すればその目的が達成できるかを定めるずいったこずが必芁になりたす。これが分析蚭蚈です。 続いお、集蚈する胜力です。これは、SQLなどを甚いおほしいデヌタを抜出するこずを指したす。SQLを曞いお抜出したデヌタにミスがないかをチェックするための怜算や、ミスが起きにくいSQLの曞き方を身に぀けるのは意倖ず難しいです。 次に、分析する胜力です。ベヌスずなるのは、䞻芳を入れず論理的に物事を考えられる胜力です。ここに、統蚈や機械孊習などの知識が必芁になる堎合がありたす。 最埌に、分析結果を説明する胜力です。いくら高床な分析を行ったずしおも、その分析結果がビゞネスに掻かせなければ䟡倀があるずは蚀えたせん。意思決定者に適切な説明を行い、理解しおもらうずころたでできお初めお䟡倀が出おきたす。 デヌタ゚ンゞニアのスキルセット デヌタパむプラむンの蚭蚈 コヌドの蚭蚈 デヌタ加工 たずは、デヌタパむプラむンの蚭蚈胜力です。本蚘事で説明したこずず照らし合わせるず、デヌタ加工のワヌクフロヌをどのように構成すれば求めおいるデヌタを䜜れるかどうかを芋定める力ずいえばよいでしょうか。 続いおはコヌドの蚭蚈胜力です。これはデヌタ゚ンゞニアだけではなくすべおの゚ンゞニアに共通するこずだず思いたすが、コヌドは曞いお終わりではなく、のちのち修正する必芁が出おくる可胜性がありたす。そのため、いかに保守運甚しやすいコヌドを曞くかずいうこずは重芁です。 最埌に、デヌタ加工の胜力です。䞻にSQLやPythonを䜿うため、これらを満足に扱える胜力が必芁になっおきたす。 以䞊がデヌタアナリストずデヌタ゚ンゞニアのスキルセットの比范です。 今埌の展望 ここたで、デヌタアナリストからデヌタ゚ンゞニアぞキャリアチェンゞしおからの半幎間に぀いおお䌝えしおきたした。振り返っおみるず、デヌタ゚ンゞニアずしおのスキルを少しず぀぀けるこずができおいたすが、今床は開発に集䞭しすぎおデヌタアナリストずしおの芖点を倱い぀぀あるような気がしおいたす。そこで、今埌の展望ずしおは「利甚者が䜿いやすい基盀を䜜る」こずを意識できればず考えおいたす。開発者にずっおどんなに矎しいデヌタ基盀を䜜ったずしおも、デヌタアナリストが適切にビゞネスサむドぞアりトプットしおいかないずビゞネス的な䟡倀があるずは⟔えたせん。そうならないために、デヌタアナリストずしおの経隓もデヌタ゚ンゞニアずしおの経隓も掻かしお䞀気通貫でデヌタを䟡倀に぀なげられるような人材になれるよう日々邁進しおいきたす
By Ikki Ikazaki, MLOps/Data Engineer at Analysis Group This is the last part in a multi-part series on how KINTO Technologies Corporation(KTC) developed a system and culture of Machine Learning Operations(MLOps). Please have a look at Part1( How We Define MLOps in KTC ), Part2( Training and Prediction as Batch Pattern ), and Part3( Metadata Management or Experiment Tracking Using SageMaker Experiments ). Situation The previous post (Part1) discussed the goal and scope of MLOps and I tried to gain understanding from my colleagues. However, just talking about the concept is not enough for engineers and ML practitioners. People establish their skills once they understand both the idea and how. For software engineers, it seemed to be easy to understand the concept and techniques of the B part of Reliable System Integration while for data scientists A part of Project Management With Speed. This difference in understanding and interests makes it difficult to have better communication and thus a bridge over the gap between them was needed. Task The bridge is an opportunity to let them understand each other's interests and methodologies by making an effort together. Conducting a study session on the common ML platform, SageMaker, was expected to be such an opportunity. The goals of study session was set up as follows: To build a good relationship between software engineers and data scientists. To form a common understanding on MLOps and SageMaker. Action I didn't make a presentation but just focused on organizing the study session by planning how we proceed. The basic flow was as follows. Define a scope of contents. Assigned who takes charge of the contents. Give the material to be studied. Prepare for the session by creating slides and notebook in two weeks. Hold the study session. Back to 2) and continue until all the topics have been discussed. First of all, I outlined the study contents. SageMaker is a huge platform and we don't need to catch up on everything about it. The outlined contents are the below seven. The basics of SageMaker and SageMaker Studio SageMaker's Training Job Batch prediction and Endpoints SageMaker Processing SageMaker Experiments SageMaker Pipelines SageMaker Projects (CI/CD) Then, I proposed to colleagues at both my team (Analysis Group) and another team (Platform Group) about the study session. There were four presenters who come together — one is a data scientist and the other three are infrastructure or DevOps Engineers — and I assigned them the above contents. Because of the difference in interests of each role, I took care of who will be in charge of the contents so that all attendees understand the contents without a lot of preparation. Especially, some contents are targeted at engineers such as SageMaker Processing and Projects while some contents are for data scientists such as SageMaker's Training Job and Experiments. About the study contents, since I've read through the entire developer's guide on SageMaker before and this guide is really well-written, I let the presenter read as well by specifying a scope and executing the relevant notebooks. I believe this way of preparation saves a lot of time for presenters to summarize the information and ensures the quality of the sessions because it is already offered by AWS. To be honest, I just wanted to let them know how well the developer guide is prepared. Result All seven sessions were held bi-weekly from November to January. I hope this study session contributed to building common knowledge about SageMaker and understanding about each other's roles. Through the sessions, it was good that one of the DevOps engineers understood how to deploy SageMaker Pipelines and actually he incorporated it into the internal CI/CD program which is based on GitHub Actions. I hope we can talk about how we developed the CI/CD pipeline of SageMaker with GitHub Actions someday. The study session was a really good way to build a shared culture for both software engineering and data science. How about the four-part series of blog posts on how KINTO Technologies Corporation developed the system and culture of MLOps? Follow our Tech Blog for future posts to stay up to date.
自己玹介 KINTOテクノロゞヌズにおCIO宀セキュリティチヌムのチヌムリヌダヌを担圓しおいる森野です。 趣味は子ども時代を過ごした埌玉県倧宮垂珟さいたた垂のサッカヌチヌムである倧宮アルディヌゞャの応揎です。 最近は機動戊士ガンダム 氎星の魔女にハマっおいお毎週日曜日午埌5時の攟映を楜しみにしおいたす。 本蚘事では先日初参加した 情報セキュリティワヌクショップin越埌湯沢2022 のセッションの䞭から印象に残った講挔を幟぀か玹介させお頂きたす。 情報セキュリティワヌクショップin越埌湯沢ずは 情報セキュリティワヌクショップin越埌湯沢は1998幎から幎次で開催されおいる非垞に歎史の長い情報セキュリティワヌクショップです。 2022幎は10月7日(金)、10月8月(土)の2日間、デむタむムセッション䌚堎は湯沢町公民通、デむタむムセッション䞭継・ナむトセッション䌚堎は湯沢グランドホテルで行われたした。 越埌湯沢ず蚀えばナむトセッション 越埌湯沢の名物ず蚀えば矎味しい日本酒ず枩泉。。ではなくナむトセッションです。 䟋幎チケット争奪戊が激しく、私もナむトセッションのチケットが取れず参加を諊めおいたしたが、幞いにも盎前にチケットを譲っおくれる方が珟れ参加するこずができたした コロナ以前は講挔者ず参加者が車座ずなり議論を亀わしおいたそうですが、今幎はコロナが収たっおいないため講挔者ず参加者の距離を眮いたセッションずなりたした。 しかし、セッション䞭は参加者から講挔者に察しお掻発に質疑応答が亀わされおいたした。 垰っおきたセキュリティのアレ in 越埌湯沢 私も毎回配信を楜しみにしおいるポッドキャスト セキュリティのアレ を配信しおいる方々によるナむトセッション。 SBテクノロゞヌ株匏䌚瀟 プリンシパルセキュリティリサヌチャヌ 蟻 䌞匘 氏 むンタヌネットむニシアティブ(IIJ) セキュリティ本郚 セキュリティ情報統括宀長 根岞 埁史氏 セキュリティむンコ兌協力研究むンコ piyokango 氏 piyokangoさんからは突然発生するサむバヌ攻撃に翻匄されないように倩気予報のように攻撃を予兆するこずをやりたいずいうお話がありたした。 汎甚的なものは難しいかもしれたせんが、䟋えばフィッシング犯眪はフィッシングサむトが実際に立ち䞊がる前にフィッシングサむトに䜿甚するドメむン取埗や蚌明曞取埗が行われたす。 その掻動を捕捉できればフィッシング犯眪の倩気予報のようなこずが行えるのではずお話を䌺いながら思いたした。 根岞さんからはCVSS(Common Vulnerability Scoring System)のスコアの高䜎だけで脆匱性察応の緊急床を刀断するのではなく、実際にサむバヌ攻撃に䜿甚されおいるのか吊かを考慮するべきずいう問題提起がありたした。 CVSSは名前の瀺す通り情報システムの脆匱性の深刻さを数倀化する仕組みです。 参考IPA 共通脆匱性評䟡システムCVSS抂説 日々、脆匱性情報を収集し自瀟システムぞの圱響を刀断する者ずしおは算出されたスコアから脆匱性察応の緊急床を蚈るこずができるため倧倉䟿利です。 しかし、スコアが䜎いものでもサむバヌ攻撃に䜿甚されるこずがあるため泚意が必芁ずのこずでした。 アメリカのCISA(CyberSecurity&Infrastructure Security Agency)がサむバヌ攻撃に䜿甚された脆匱性を 公開 し随時曎新しおいるので、このような情報を脆匱性察応の刀断基準に加えるこずで、より安心・安党なシステムを提䟛できそうです。 蟻さんは。。途䞭、他のセッションに参加したため聞き逃しおしたいたした。。蟻さん、ごめんなさい。 フィッシングハンタヌもたたには枩泉で䌑たナむト 日々フィッシングサむトず栌闘しおいる方々によるナむトセッション。 自称むケメンフィッシング詐欺ハンタヌ にゃん☆たく 氏 ozuma5119 氏 KesagataMe 氏 サむバヌ䟍KAZUMI 氏 講挔者の皆さんがフィッシングに匕っかかる人が䞀人でも枛るようにSNS等で拡散しお欲しいず䟝頌されおいたスラむドをこのブログにも添付させお頂きたした。 SMSやメヌルのリンクがフィッシングなのか吊か刀断するこずは非垞に困難であるため、SMSやメヌルのリンクはクリックせず、ブラりザのブックマヌクや怜玢゚ンゞンの怜玢結果から目的のサむトに移動したしょう。 若幎局のネット掻甚の珟状ず、我々ができるこず 株匏䌚瀟ラック サむバヌ・グリッド・ゞャパン ICT利甚環境啓発支揎宀 䞃條 麻衣子 氏 私には䞭孊生の子どもがいるためずおも興味深く講挔を拝聎したした。 子ども達が専甚のスマヌトフォンを持぀時期ですが9歳の時点で3割に達し13歳の時点では9割に達するそうです。私の想像より遥かに割合が高く驚きたした。 若幎局のネット掻甚の特城に぀いお私の知らなかった点は以䞋の通りですが、共有に関しお、スマヌトフォンアプリを䜿甚しおお互いの䜍眮情報を共有するだけではなく、スマヌトフォンの電池残量たで共有しおいるこずには非垞に驚きたした。 チャット・メッセヌゞでの長文はNG 長文は画像でメモ垳をスクショ アカりントの䜿い分け 高校生の玄半数がSNSでは実名登録仮名だず友だちに芋぀けお貰えないため 実況&動画で情報ず時間の共有 お話を䌺っお理解できない䜿い方や危なっかしい䜿い方だず感じる点が倚々ありたした。しかし、理解できないず子どもに䌝えるのは犁句で、それを䌝えた瞬間に子どもは心を閉ざしおしたうそうです。理解はできなくおもありのたたの珟実を受け入れなさいずのこずでした。 講挔埌に子どものSNSの䜿甚に぀いお盞談させお頂いたずころ、危ないからずいっお犁止しおも芪に隠れお䜿甚するだけで华っお危険なため、芪の監芖の䞋、安党な䜿い方を教えながら䜿甚させた方が良いずのアドバむスを頂きたした。 脆匱性察応ず情報共有瀟内バグバりンティ制床の取り組みを通じお芋えた事 ゚ヌ・ティ・ティ・コミュニケヌションズ株匏䌚瀟 林 郁也 氏  塚越 さくら 氏 バグバりンティ制床ずは゜フトり゚アの脆匱性を発芋した方に察しお報奚金を支払う制床のこずです。 瀟倖の方々に察しおバグバりンティ制床を提䟛する堎合、脆匱性を報告しおくれた方が信頌できる方なのか吊か刀断するこずは非垞に難しい問題です。 そこで゚ヌ・ティ・ティ・コミュニケヌションズ株匏䌚瀟では埓業員を察象にバグバりンティ制床を提䟛するこずにしたそうです。埓業員なら身元が確かなためです。 結果、ナヌザの暩限昇栌が可胜な深刻床の高い脆匱性が芋぀かるなど実際にシステムのセキュリティ匷化に圹立ったそうです。 副次的な成果ずしお、自発的にグルヌプが結成され勉匷䌚が行われたり、゚ンゞニア職以倖から報奚金を埗る方が珟れるなど、埓業員の新たな才胜を発芋する機䌚にもなったそうです。 圓瀟でも瀟内バグバりンティ制床を取り入れおみたいなず感じたした。 おわりに 日垞業務から離れ様々な略歎を持った方々の講挔を拝聎したり、ワヌクショップで出䌚った方々ずお話させお頂いたこずはずおも刺激になりたした。 蚘事の䞭で蚀及させお頂いた脆匱性察応の緊急床の刀断方法はすぐにでも圓瀟の業務に反映しおいきたいず考えおいたす。瀟内バグバりンティ制床に぀いおもすぐには難しいかもしれたせんが圓瀟にも導入できたら良いなず考えおいたす。 越埌湯沢以倖にも枩泉兄匟ず呌ばれる兄匟ワヌクショップが各地で開催されおいたす。皆さんも参加を怜蚎しおみおは劂䜕でしょうか。 サむバヌ防衛シンポゞりム熱海 サむバヌ犯眪に関する癜浜シンポゞりム サむバヌセキュリティシンポゞりム道埌 九州サむバヌセキュリティシンポゞりム
こんにちは。分析グルヌプ(分析G)でMLOps/デヌタ゚ンゞニアしおたす䌊ヶ厎( @_ikki02 )です。 こちらは「KINTOテクノロゞヌズ株匏䌚瀟におどのようにMLOpsを適甚しおいくのか」ずいうテヌマでの連茉最終回です。1本目の蚘事「 KINTOテクノロゞヌズのMLOpsを定矩しおみた 」、2本目の蚘事「 SageMakerを䜿った孊習&掚論のバッチパタヌン 」および3本目の蚘事「 SageMaker Experimentsを甚いた実隓管理 」はそれぞれのリンクよりご確認ください。 背景(Situation) 1本目の蚘事では、MLOpsの定矩ずスコヌプに぀いお玹介したしたが、䞀緒に働くメンバヌず理解をすり合わせる掻動にも取り組んできたした。 ゚ンゞニアやデヌタサむ゚ンティストずいった異なる職掌がいる䞭で共通理解を埗られるように垃教するのは実際難しかったです。勉匷䌚開始時点では、1本目の蚘事で玹介した図で蚀うず、゜フトりェア゚ンゞニアは「(B) 信頌性を高めるシステム連携」の項目掚論基盀やIaC、CI/CDなどが埗意な䞀方、デヌタサむ゚ンティストは「(A) PJ管理・高速化」の項目孊習基盀、メタデヌタ管理実隓管理などに察する前知識があったように思いたす。このような背景や興味関心の違いは、ワヌドチョむスに埮劙な違いがあったり、議論が右埀巊埀しおしたうこずに繋がったりするように感じたした。抂念や甚語の共通認識ずそれを実装する方法を共有し、お互いの認識の差異を吞収する機䌚が必芁だったように思いたす。 業務(Task) その機䌚ずしお勉匷䌚を䌁画したした。共通の機械孊習基盀たるSageMakerに぀いおお互いが孊び合う機䌚ずなるこずを期埅したのでした。 ゎヌルずしおは以䞋のように蚭定したした。 MLOpsを進めるにあたっお関係者の関係構築 MLOpsおよびSageMakerに察する共通理解の圢成 やったこず(Action) 私個人ずしおは䌁画ずファシリテヌションに集䞭したかったのず、コンテンツの習熟をメンバヌに促す趣旚から、コンテンツの準備に焊点を圓おたした。具䜓的な勉匷䌚開催の流れは以䞋の通りです。 勉匷䌚のスコヌプ策定 各勉匷䌚の担圓者割振。担圓分のコンテンツ共有 勉匷䌚甚スラむドおよびノヌトブックの䜜成準備隔週開催 勉匷䌚開催 2に戻る たず「勉匷䌚のスコヌプ策定」を実斜したした。SageMaker党䜓をスコヌプにするず膚倧な量になるため、以䞋の7぀の項目に絞りたした。 SageMaker党䜓像およびStudioの抂芁 蚓緎ゞョブの䜜成 掚論の実行(バッチ掚論ず掚論゚ンドポむント) SageMaker Processing (ETL特化のゞョブ) SageMaker Experiments (実隓管理) SageMaker Pipelines (パむプラむン) SageMaker Projects (CI/CD) 䞊蚘スコヌプを分析グルヌプおよびプラットフォヌムグルヌプのメンバヌに提案し、4名のプレれンタヌ(デヌタサむ゚ンティスト1名、むンフラ&DevOps゚ンゞニア3名)が集たりたした。バックグラりンドの異なるメンバヌが集たった䞭、なるべく準備に負担をかけずに䞀定の品質を担保したかったので、それぞれの埗意領域を意識しお、各勉匷䌚の担圓者を割振るようにしたした。具䜓的には、「蚓緎ゞョブ」や「SageMaker Experiments」はデヌタサむ゚ンスの業務プロセスの理解が必芁だったためデヌタサむ゚ンティストぞ割圓お、「SageMaker Processing」や「SageMaker Projects」はコンテナ呚りやCI/CDの知識が背景に求められるため゚ンゞニアにお願いしたした。 たた、勉匷䌚のコンテンツずしおは、AWS公匏のドキュメントである「 developer guide 」ずそこに掲茉されおいる「 SageMaker関連のサンプルノヌトブック 」を土台ずしお䜜成を䟝頌したした。公匏のドキュメントは画面のスクリヌンショットやサンプルコヌドの掲茉など、本圓によくできおいるので 日本語の機械翻蚳が面癜いこずがあるのはご愛嬌 、むチから新たに䜜り盎すずいうよりは、そこにある内容を各個人の理解に合わせお切り貌りしおたずめおもらうのが良いず考えおいたす個人的にはdeveloper guideの良さを垃教し぀぀、䞀次゜ヌスの匕甚癖を付぀けおいくのも狙いでした。 結果(Result) 䞊蚘の内容で、2021幎11月〜2022幎1月たでの期間で隔週開催したした。嬉しかったのは、勉匷䌚埌、参加メンバヌがSageMaker Pipelinesのデプロむ方法を習熟し、瀟内で開発運甚しおいるGitHubActionsのCI/CDのSageMaker版を構築したこずでした(この連茉でも觊れたバッチパタヌンのCI/CD基盀ずしおも掻甚しおおり、SageMaker Projectsずの差別化のお話などもい぀かこちらのテックブログでご玹介できればいいなず思いたす)。 個人の想いずしおは、゜フトりェア゚ンゞニアリングずデヌタサむ゚ンスずいう様々な知識や圹割を超えお共通認識を構築しおいく勉匷䌚は改めお倧切な取組みだなず感じおおり、この勉匷䌚が目的通り共通認識の圢成ず関係構築に少しでも貢献できおいたらよいなず思いたす。 いかがでしたでしょうか 本掲茉にお「KINTOテクノロゞヌズ株匏䌚瀟におどのようにMLOpsを適甚しおいくのか」ずいうテヌマでの連茉は䞀旊最終回を迎えたすが、プロゞェクト的にも組織的にもただただ倉化の倚いフェヌズのため、MLOpsも進化を続けなければなりたせん。プロダクト開発に機械孊習を組蟌む取組み、そしお䟡倀提䟛を改善し続けおいく取組みはただただ始たったばかりなので、匕続きアップデヌトをお䌝えしおいければず思いたす(本テックブログのTwitterもありたすのでフォロヌしおくれるず嬉しいです)。
こんにちは。分析グルヌプ(分析G)でMLOps/デヌタ゚ンゞニアしおたす䌊ヶ厎( @_ikki02 )です。 こちらは「KINTOテクノロゞヌズ株匏䌚瀟におどのようにMLOpsを適甚しおいくのか」ずいうテヌマでの連茉最終回です。1本目の蚘事「 KINTOテクノロゞヌズのMLOpsを定矩しおみた 」、2本目の蚘事「 SageMakerを䜿った孊習&掚論のバッチパタヌン 」および3本目の蚘事「 SageMaker Experimentsを甚いた実隓管理 」はそれぞれのリンクよりご確認ください。 背景(Situation) 1本目の蚘事では、MLOpsの定矩ずスコヌプに぀いお玹介したしたが、䞀緒に働くメンバヌず理解をすり合わせる掻動にも取り組んできたした。 ゚ンゞニアやデヌタサむ゚ンティストずいった異なる職掌がいる䞭で共通理解を埗られるように垃教するのは実際難しかったです。勉匷䌚開始時点では、1本目の蚘事で玹介した図で蚀うず、゜フトりェア゚ンゞニアは「(B) 信頌性を高めるシステム連携」の項目掚論基盀やIaC、CI/CDなどが埗意な䞀方、デヌタサむ゚ンティストは「(A) PJ管理・高速化」の項目孊習基盀、メタデヌタ管理実隓管理などに察する前知識があったように思いたす。このような背景や興味関心の違いは、ワヌドチョむスに埮劙な違いがあったり、議論が右埀巊埀しおしたうこずに繋がったりするように感じたした。抂念や甚語の共通認識ずそれを実装する方法を共有し、お互いの認識の差異を吞収する機䌚が必芁だったように思いたす。 業務(Task) その機䌚ずしお勉匷䌚を䌁画したした。共通の機械孊習基盀たるSageMakerに぀いおお互いが孊び合う機䌚ずなるこずを期埅したのでした。 ゎヌルずしおは以䞋のように蚭定したした。 MLOpsを進めるにあたっお関係者の関係構築 MLOpsおよびSageMakerに察する共通理解の圢成 やったこず(Action) 私個人ずしおは䌁画ずファシリテヌションに集䞭したかったのず、コンテンツの習熟をメンバヌに促す趣旚から、コンテンツの準備に焊点を圓おたした。具䜓的な勉匷䌚開催の流れは以䞋の通りです。 勉匷䌚のスコヌプ策定 各勉匷䌚の担圓者割振。担圓分のコンテンツ共有 勉匷䌚甚スラむドおよびノヌトブックの䜜成準備隔週開催 勉匷䌚開催 2に戻る たず「勉匷䌚のスコヌプ策定」を実斜したした。SageMaker党䜓をスコヌプにするず膚倧な量になるため、以䞋の7぀の項目に絞りたした。 SageMaker党䜓像およびStudioの抂芁 蚓緎ゞョブの䜜成 掚論の実行(バッチ掚論ず掚論゚ンドポむント) SageMaker Processing (ETL特化のゞョブ) SageMaker Experiments (実隓管理) SageMaker Pipelines (パむプラむン) SageMaker Projects (CI/CD) 䞊蚘スコヌプを分析グルヌプおよびプラットフォヌムグルヌプのメンバヌに提案し、4名のプレれンタヌ(デヌタサむ゚ンティスト1名、むンフラ&DevOps゚ンゞニア3名)が集たりたした。バックグラりンドの異なるメンバヌが集たった䞭、なるべく準備に負担をかけずに䞀定の品質を担保したかったので、それぞれの埗意領域を意識しお、各勉匷䌚の担圓者を割振るようにしたした。具䜓的には、「蚓緎ゞョブ」や「SageMaker Experiments」はデヌタサむ゚ンスの業務プロセスの理解が必芁だったためデヌタサむ゚ンティストぞ割圓お、「SageMaker Processing」や「SageMaker Projects」はコンテナ呚りやCI/CDの知識が背景に求められるため゚ンゞニアにお願いしたした。 たた、勉匷䌚のコンテンツずしおは、AWS公匏のドキュメントである「 developer guide 」ずそこに掲茉されおいる「 SageMaker関連のサンプルノヌトブック 」を土台ずしお䜜成を䟝頌したした。公匏のドキュメントは画面のスクリヌンショットやサンプルコヌドの掲茉など、本圓によくできおいるので 日本語の機械翻蚳が面癜いこずがあるのはご愛嬌 、むチから新たに䜜り盎すずいうよりは、そこにある内容を各個人の理解に合わせお切り貌りしおたずめおもらうのが良いず考えおいたす個人的にはdeveloper guideの良さを垃教し぀぀、䞀次゜ヌスの匕甚癖を付぀けおいくのも狙いでした。 結果(Result) 䞊蚘の内容で、2021幎11月〜2022幎1月たでの期間で隔週開催したした。嬉しかったのは、勉匷䌚埌、参加メンバヌがSageMaker Pipelinesのデプロむ方法を習熟し、瀟内で開発運甚しおいるGitHubActionsのCI/CDのSageMaker版を構築したこずでした(この連茉でも觊れたバッチパタヌンのCI/CD基盀ずしおも掻甚しおおり、SageMaker Projectsずの差別化のお話などもい぀かこちらのテックブログでご玹介できればいいなず思いたす)。 個人の想いずしおは、゜フトりェア゚ンゞニアリングずデヌタサむ゚ンスずいう様々な知識や圹割を超えお共通認識を構築しおいく勉匷䌚は改めお倧切な取組みだなず感じおおり、この勉匷䌚が目的通り共通認識の圢成ず関係構築に少しでも貢献できおいたらよいなず思いたす。 いかがでしたでしょうか 本掲茉にお「KINTOテクノロゞヌズ株匏䌚瀟におどのようにMLOpsを適甚しおいくのか」ずいうテヌマでの連茉は䞀旊最終回を迎えたすが、プロゞェクト的にも組織的にもただただ倉化の倚いフェヌズのため、MLOpsも進化を続けなければなりたせん。プロダクト開発に機械孊習を組蟌む取組み、そしお䟡倀提䟛を改善し続けおいく取組みはただただ始たったばかりなので、匕続きアップデヌトをお䌝えしおいければず思いたす(本テックブログのTwitterもありたすのでフォロヌしおくれるず嬉しいです)。
こんにちは。Woven Payment Solution開発グルヌプの小野です。 私達のチヌムは Toyota Woven City で䜿われる予定の決枈プラットフォヌムの開発を行っおいたす。少し叀い内容ですが、私達のやっおいるこずに぀いおはこちらをご芧ください。 20220422 Woven City Tech Meetup Tech Talk by Rie Ono 今回は私達の決枈システムを蚭蚈する際に利甚したDDDのモデリング手法の䞀぀ EventStorming を䜿っおいたす。ただ研究途䞭なのですが、珟時点で分かったこずをご玹介しようず思いたす。 EventStorming ずは Alberto Brandolini さんが提唱したシステムをモデリングするためのワヌクショップ圢匏の手法です。 EventStorming のサむトを参照するず、以䞋のように曞かれおいたす。 EventStorming is a flexible workshop format for collaborative exploration of complex business domains. (意蚳Eventstormingずは耇雑なビゞネスドメむンを協業的に探求するための柔軟なワヌクショップフォヌマットです。 たた、 Learning Domain-Driven Design のChapter 12.EventStorming には以䞋のように曞かれおいたす。 EventStorming is a low-tech activity for a group of people to brainstorm and rapidly model a business process. In a sense, EventStorming is a tactical tool for sharing business domain knowledge. (意蚳EventStormingはメンバヌからアむデアを匕き出し玠早くビゞネスプロセスのモデルを圢䜜るためのロヌテクなアクティビティです。もう䞀方ではEventStorming はビゞネスドメむンの知識を共有する戊術的なツヌルです。 ぀たり、以䞋のような目的のためのワヌクショップです。 難しくないやり方でドメむン知識を有識者から匕き出す ステヌクホルダヌぞドメむン知識を共有する ドメむンモデルを蚭蚈する EventStormingのための準備 誰に参加しおもらうのか 䞊蚘の Learning Domain-Driven Design には参加者の人数は10人以䞋が望たしいず曞かれおいたす。人数が倚すぎるず発蚀に躊躇したり、意芋をたずめにくかったりするかもしれたせん。 たた異なったバックグラりンドの人を集めるこずでいろいろな発芋があるかもしれない、ず曞かれおいたす。それらを螏たえるず、参加する人を遞ぶのが最初の難しい課題になるかもしれたせん。 ファシリテヌタヌ フェヌズごずに時間を区切ったり、途䞭で話が広がりすぎたりしないように調敎するファシリテヌタヌがいるず良いです。私達の堎合は、蚭蚈を行う゚ンゞニア自身が担圓したした。 ゚ンゞニア アプリケヌションを蚭蚈・開発する゚ンゞニア。 私達の堎合は圓チヌムのメンバヌに加え、ネむティブアプリを開発するアプリチヌムのメンバヌにも、ドメむン知識を共有する目的で参加しおいただきたした。 ドメむン゚キスパヌト ドメむン゚キスパヌトは察象のドメむンに぀いお深い知識を持぀人です。既存のシステムや他瀟のビゞネス、その分野に詳しい人を集めたしょう。EventStormingの目的ずしおは゜フトりェアの蚭蚈のための他に、ドメむン゚キスパヌトの人たちから知識を吞い出すこずにもありたす。 私達の堎合、幞いなこずにビゞネスチヌムには決枈業務に携わっおきたメンバヌが倚く圚籍しおおり、協力しおいただけるこずになりたした。 たた、私達のチヌムをリヌドしおいる亀井は過去に決枈分野に携わっおおり、決枈ず゚ンゞニアリングの䞡方の芖点から指摘ができる方です。 UI/UXデザむナヌ、QA゚ンゞニア 今回は実珟できなかったのですが、できればアプリケヌションの開発に関わるUI/UXデザむナヌずQA゚ンゞニアも含たれおいるず良いず思いたす。業務知識を共有しおUI/UXやQAの蚭蚈の効率化が図れたす。 準備するもの EventStormingは時間がかかりたす。事前の準備をするこずでスムヌズに進行できるようにしたしょう。 参加者のスケゞュヌル確保 参加者の時間をできれば1日か半日は抑えたいずころです。いろいろなチヌムから人を呌ぶので、党員が参加できるスケゞュヌルを抌さえるのが困難ずおもいたすが、重芁です。 堎所 やはりオフラむンだず発蚀がしやすい気がしたす。 いろいろな色の付箋 図のような色の付箋を準備したす。 ホワむトボヌド・マヌカヌ 付箋を貌っおいく倧きいホワむトボヌドずマヌカヌを準備したしょう。 リラックスのためのお菓子や飲み物 を準備 したかったのですが、感染症察策のため断念したした。 前提の知識 EventStormingを開始する前や、事前のテキストコミュニケヌションずしお、今回䜜ろうずしおいるシステムの目的、前提、すでに決たっおいる事項など、を共有し、ある皋床の前提知識を持っおもらいたした。 たた、初察面同士の参加者が発蚀しやすいように、それぞれの簡単な自己玹介時間を甚意したした。 今回は英語でEventStormingを行ったので、ファシリテヌションのやり方やドメむン知識に぀いおの英単語を事前に調べおおきたした。 感染症予防のため察面時間を短瞮する方法を考えおみた Alberto Brandoliniさんは Remote EventStorming で、リモヌトで行うのは難しいずいう旚を曞かれおいたす。ですがこのご時䞖なので、オンラむンでもできないか詊しおみたした。 オフラむンで実斜する堎合は、感染症察策のために、密にならない皋床に広く、それでいお集䞭できる䌚議宀や広堎を準備したしょう。 オンラむンで実斜する堎合は Miro が䟿利でした。 䜿いやすいテンプレヌトがありたす。 Judith Birmoser's Event Storming template | Miroverse 察面時間を短くするために、少人数メンバヌで埌述のPhase2たでたたき台を぀くっおおきたした。実斜時には党参加者にレビュヌしおもらい、足りない箇所を远加しおもらったり、間違っおいる箇所を指摘しおもらいたす。 やっおみた ここからはEventStormingをどのように進めたかを曞いおいきたす。 Phase1 : Big picture たずはビゞネスプロセス党䜓を明らかにするため、Big Pictureを぀くっおいきたす。 ブレむンストヌミングしながらドメむンむベントをオレンゞ色の付箋に曞き出しおいきたす。䟋「決枈が行われた」 各ドメむンむベントに぀いお意芋を出した人に説明しおもらい、重耇したものを取り陀いたり、正しい理解かをドメむン゚キスパヌトに確認したりしお、リファむンメントし、時系列に䞊べなおしおいきたす。 Phase2: Process Modeling 次に、Event間のプロセスをモデリングしおきたす。 掗い出したEventに以䞋の付箋を远加しおいきたす。 Actorを黄色で远加したす。 誰が、たたは䜕がコマンドを実行するのかを考えたす。 Eventの原因ずなるコマンドを青色で远蚘したす。 View modelができるならばを緑色に曞き出したす。 Policyを玫色で曞き出したす。このPolicyの考えが私ずしおは難しいず感じおいたす。コマンドの前提や条件を曞き出すみたいです。 なにか疑問やリスクになりうる事項があれば、赀色の付箋に曞き出しおおきたす。 ドメむン゚キスパヌトには、むベントの内容や時系列が正しいかチェックしおいただいたり、質問に答えおいただきたす。 Phase3: Software Design 次に、たずめられそうなコンテキストに぀いお詳现に考えお行き、コヌディングが始められる状態にしおいきたす。 ビゞネスドメむンずしおデヌタの敎合性が保おる範囲ずしおたずめられそうな箇所をAggrigate山吹色ずしおたずめおみたす。 倖郚システムを介す堎合はピンク色で远加したす。 サブドメむンずしおひずたずたりにできそうな箇所を区切っおみたす。 この時点でUIが定矩できそうならば、ペヌパヌプロトタむプを䜜っおみるのも良いず思いたす。 だいたい出来䞊がっお来たら、赀色の付箋に぀いお詳现にディスカッションしおみるか、すぐに結論が出せないならば、そこを別の機䌚に深堀りEventStormingしたす。 その埌 ここたできたら、抜け挏れがないか、逆順にたどっおいきたす。 Software design as a cooperative game with EventStorming たた、私達の堎合は党䜓のドメむンを掗い出したあず、スコヌプを絞っお曎にEventStormingを行ったりしたした。 やっおみた感想 以䞋は、EventStormingをやっおみおよかった点です。 業務を知っおいるであろう人に、個々にヒアリングに行っお芁求や仕様を䜜成するよりも網矅的、偏らない、事業把握ができる。かえっお時間がかからないかもしれたせん。 いっぺんで数人のメンバヌぞ知識の共有・確認ができるのも良い点だず思いたした。 䞀床やっおみお、れロから䜕かを䜜るずきにやるず効果が倧きいだろうな、ず思ったのですが、考えおいるものの答え合わせずいう効果もあるず感じたした。 副産物ずしお、 モデリングをするうちに、忘れおいた・芋えなかった課題が芋぀かった その業務内容を初めお知るメンバヌによる初心者目線での疑問が課題提起ずなる堎合があった 普段、あたり顔を合わせるこずのないメンバヌ間での぀ながりを䜜るこずができた 以䞋は難しかった点です。 時間がかかるので、メンバヌのスケゞュヌルを抑えるこず、加えお、集䞭力を持続させるのが難しいず感じたした。 ファシリテヌションが難しい。これは慣れの問題であるので、回数を重ねおいけば解決するかもしれたせん。 たた、自分ずしおは英語でファシリテヌションをしたりディスカッションをするのも倧倉で、緎習しおいきたいず思っおいたす。特にドメむン゚キスパヌトの方々は日本の商習慣に特化した決枈に぀いおの説明を英語で行うのは、かなり倧倉だったず思いたす。 これからの課題 これからもEventStormingができる機䌚があれば、回数を重ねお゚ンゞニアメンバヌがEventStormingをファシリテヌトできるようになれば良いず思っおいたす。 たた、このEventStormingで掗い出せたドメむンを実際のコヌドに萜ずしおいくステップをもう少し研究したいです。 䟋 ドメむン蚘述ミニ蚀語 に萜ずしおみる むベント゜ヌシング ぞの応甚 以䞊、EventStormingをやっおみた感想でした
By Ikki Ikazaki, MLOps/Data Engineer at Analysis Group This is the third part in a multi-part series on how KINTO Technologies Corporation(KTC) developed a system and culture of Machine Learning Operations(MLOps). Please take a look at Part1( How We Define MLOps in KTC ) and Part2( Training and Prediction as Batch Pattern ). The fourth and final post will discuss "Benkyo-kai", a series of internal study sessions, to form the common knowledge about SageMaker and MLOps with other departments. Situation As we have already gone through the reason why metadata management is needed in Part1, this chapter will focus on the situation in KTC. Since it has been only four years since the establishment of KINTO Corporation, it was urgent to build relationships between the business and data science teams by presenting a clear output quickly. Sometimes this leads to sacrificing the code quality or documentation, which causes the data science process to be essentially a black box. This approach is not bad at the initial phases of a project, but now the situation has changed and the number of data science projects and members are increasing. We started to look for a better way of management. Task The key concepts of metadata management are "sharable format" and "easy tracking". Since there are a few data scientists in our team, we need to have a common format so that the team can manage their work in a standardized way. The aim of having a common format is that every data scientist can reproduce the model building process and its results. This means they need to track the development environment, the data they use, code scripts, ML algorithm, hyperparameters, etc. There is a trade-off between a common format and easy tracking because the more you leave the records for others to easily understand, the more effort is needed. It is ideal if the information that shows up repeatedly such as the container image name, execution time, data storage path, and more is recorded automatically. With SageMaker Experiments, once you write down the definition of SageMaker Pipelines, the information about the development environment is automatically integrated and so the data scientists can focus on the metrics they really want to track. The way of tracking is possible by a few lines of code using SageMaker SDK, so the effort for implementing the tracking is minimum. Action Naming Convention It is a good start to introduce the managed service for metadata management, but just using it is not enough. SageMaker Experiments is actually composed by small fragments called Experiment and Trial where Experiment is a group of Trials which usually represents a specific use case while Trial stands for each iteration of ML processings. Then, a proper naming convention is required to manage those components so that data scientists can refer to each other's projects or iterations. The below table of naming convention about SageMaker Experiments is used in our team. We consider that metadata management is required mainly on occasions: Experiment of pipeline and Experiment of EDA(Exploratory Data Analysis). Experiment of pipeline is used to track the information about every step of pipeline used in production, so it offers the possibility to reproduce when the pipeline fails somehow. By following the naming convention above, you can find the environmental information at 1.1's Trial — SageMaker Pipelines automatically creates this trial —, and analytical information at 1.2's Trial — you need to create this trial on your own in the pipeline. Also, it is often the case that data scientists want to track their experimental code and model outcomes outside of the production pipeline. Then Experiment of EDA allows them to track the information flexibly. The naming convention of this type is also flexible compared to the Experiment of pipeline, but it may be updated in the future once we find the pattern in experiments. Result Utilizing the managed service is good because there is the benefit of "Standing on the shoulders of giants". SageMaker Experiments provides us with the way of metadata management and analysis on it. By looking up 1.2's trial of Experiments of pipeline, you can inspect the metrics of the model building pipeline. You can even create pandas DataFrame of the Experiments and analyze the time series of its trials. For example, if you track the precision rate at every pipeline execution, you can make a line chart to see the historical change in the metrics. It is useful to detect what is called "model drift" in advance. The sooner you detect some type of anomalies, the faster the ML continuous training process begins. What do you think about this article? Next time, the last post of this four-part series will introduce "Benkyo-kai" and how we share technical knowledge in our company( now available ). Please follow the KTC Tech Blog for future posts to stay up to date.