TECH PLAY

KINTOテクノロジーズ

KINTOテクノロジーズ の技術ブログ

946

こんにちは。分析グループ(分析G)でMLOps/データエンジニアしてます伊ヶ崎( @_ikki02 )です。 こちらは「KINTOテクノロジーズ株式会社にてどのようにMLOpsを適用していくのか」というテーマでの連載1本目です。後続の記事では、SageMaker Pipelinesを用いたバッチ推論、SageMaker Experimentsを用いた実験管理、そして、他部署も巻き込んで開催した勉強会のお話などをしていければと考えています。 背景(Situation) KINTOテクノロジーズでは機械学習を用いた様々なプロジェクトに取組んできました。新車の申込台数予測、中古車の残価予測、画像の類似度判定、ランキングアルゴリズムの開発など、様々なドメインや機械学習タスクがあります。また、分析グループにはデータサイエンティストが何名か在籍しており、それぞれの実行環境やお作法が異なったり、実験結果のスムーズな共有が難しかったことがありました。そのため、EDA(探索的データ分析のこと)やモデル開発にあたって、共通のプラットフォームが求められており、MLOpsという言葉も社内で使われるようになってきました。 ところで、MLOpsとは何でしょうか。また、既存のプロジェクトに対して、どのように組み込んでいけばよいのでしょうか。個人的にはMLOpsという言葉は抽象度が高すぎて、できれば避けたい言葉だったりします(正確には、成し遂げたい課題に対して、より適切な要素技術や言葉があるはず、と考えています)。 業務(Task) そこで、この記事では、いくつかの論文やドキュメントを参考にしながら、MLOpsの全体像を明確にしつつ、KINTOテクノロジーズで特に重要視している要素技術についてご紹介していければと思います。MLOpsの話をする際に親の顔より見た絵としてよく以下の図が紹介されているかと思います(Sculley et al., 2015)。 この図では機械学習に関連するコードはアプリケーション全体のほんの一部であることが示唆されています。実際、機械学習を本番環境のアプリケーションにデプロイする際には、ソフトウェアエンジニアリングやDevOps等の技術に習熟する必要があり、データサイエンスとはまた異なるスキルセットや文化が求められます。一方で、MLOpsはバズワード化することもなく多くの研究者等によってその定義やスコープが明確にされつつあるようにも思えます。Kreuzberger et al. (2022)は様々な分野で活躍する機械学習の専門家に対してインタビューや文献調査を実施し、MLOpsの9つの原則と要素技術の解説をまとめています。また、メルカリ社により公開されているml-system-design-patternでは、機械学習システムを本番稼働させるためのデザインパターンがまとめられており(Shibui et al., 2020)、MLOpsの社内定義に際して、大いに参考にさせていただきました。 これらの情報をKINTOテクノロジーズの内部にてよく使われている用語や技術をベースに再整理し、社内展開できるようにまとめていきました。 やったこと(Action) 目的とスコープ まず、MLOpsの目的を明文化します。目的については、KINTOテクノロジーズ独自の要素を織り交ぜるわけではなく、ある程度一般性を持たせた形にしています。すなわち、 機械学習のPoCを「効率よく」本番環境へ 「信頼性高く」デプロイし運用する その上で、MindMeisterというマインドマップツールを用いて、要素技術を樹形図状に可視化してみました。 MindMeisterは樹形図の項目を表示したり隠したりできるので、MLOpsという広範な概念をまとめる際に重宝しました。すべての項目を表示すると、見通しが悪くなるので、上記の図では「スケーラビリティ」の一部の項目を中心に展開しています。 また、この樹形図と上述の目的を照らし合わせ、以下の形式でスコープを整理しました。 目的の「効率よく」という文言に図中の「(A) PJ管理・高速化」、「信頼性高く」という文言に「(B) 信頼性を高めるシステム連携」という戦略を割当て、優先度に応じて各項目を手段(戦術)として検討できるようにしています。 いずれの戦略も重要ですが、KINTOテクノロジーズではまず「(A) PJ管理・高速化」に焦点をあて、要素技術の開発ないし普及に努めていこうと考えています。今後投稿予定の連載では、この中の「パイプライン」および「メタデータ管理(実験管理)」について取組みを詳しく紹介していこうと考えており、この記事ではその概要についてご紹介できればと思います。 スケーラビリティ 樹形図の通り、KINTOテクノロジーズでは「スケーラビリティ」という大項目の中に「パイプライン」を位置付けています。スケーラビリティとは、コンピューティングリソースや組織の人的資本に関する拡張性のことを指し、スケールアウトやスケールインといった使われ方をします。データサイエンスのプロジェクトにおいて、このスケーラビリティは重要です。データには非決定的な性質があり、予め必要なコンピューティングリソースの見積もりが難しいためです。仮に既存の設定値でうまく動作していたとしても、たとえばCMや新商品の投入といった需要喚起策で急激にスパイクした場合はいかがでしょうか。アプリケーション内で使われているMLのモデルにもよりますが、メモリやCPU(GPU)のリソース不足で障害の原因となることがよくあります。そのため、このようなリソース不足のエラーに対して柔軟にスケールアウトやスケールアップする(不要時にはうまくスケールインまたはスケールダウン)仕組みが重要になってきます。データサイエンティストがモデルを開発する「学習基盤」、モデルをデプロイし推論結果を提供する「推論基盤」、それらの橋渡しとなる「パイプライン」において、このスケーラビリティの確保は重要です。 メタデータ管理(実験管理) メタデータ管理では、開発したデータサイエンティストや機械学習エンジニア当人のサポート無しに実験結果やモデル開発を再現できるように、その過程のメタデータを記録し管理することが求められます。データサイエンスは組織においてまだまだ新しい領域だとみなされることも多く、特に他の職種の人々にとってその業務内容や関わり方について十分に認識できていることは少ないと考えます。時にはデータサイエンティスト同士でさえ、専門性(e.g. 時系列、画像、言語、テーブルデータ、地理空間、因果推論、ベイズ統計学など)が異なれば、そのデータサイエンスプロジェクトは容易にブラックボックス化してしまうことでしょう。このような状況では、データサイエンスプロジェクトの管理は属人的になり、作った当人がいない状況では誰もその業務を引継ぐことはできません。また、仮に他のデータサイエンティストがプロジェクトで使われている技術に習熟していたとしても、結果を再現するには具体的にどのようなデータがいつ使われ、ハイパーパラメータの正確な値は何であるのか、なぜそう設定したのかなど、膨大かつ厳密な情報が必要になります。そのため、良き機械学習基盤には、実行環境やデータ、利用するMLアルゴリズム、ハイパーパラメータ、評価指標、解釈などの自由記述文といったメタデータを容易に記録し保存できる機能が求められます。必要な情報がうまく管理されているメタデータレポジトリがあれば、それは実験結果やモデル開発を再現するための青写真となり、また情報を思い出すための試行錯誤も減らせるため、結果として実験サイクルを回すのにかかる時間を短縮し、プロジェクトの高速化が期待できます。そのため、メタデータ管理はMLOpsの目的に沿った戦略と考えます。 結果(Result) MLOpsの全体像を可視化することで、図中の項目や要件を指しながら、必要な範囲の業務スコープを洗い出したり、他の部署のメンバーと共通認識が持ちやすくなったと思います。ただし、この全体像はまだバージョン1なので、業務で活用していく中で継続的な改善をしていきたいです。理想としては、AWSのWell-Architectedのように、機械学習プロジェクト立上げ期に真っ先に参照されるようなフレームワークへ成長させ、定着させていけたらいいなと考えています。 いかがでしたでしょうか。次回の連載では、本記事(のスケーラビリティの項)で軽く触れたパイプラインについて、SageMaker Pipelinesを用いたバッチパターンの推論基盤についてご紹介しています(Part2は こちら よりご確認ください)。引続きご覧いただけると嬉しいです。 Reference Kreuzberger, D., Kühl, N., & Hirschl, S. (2022). Machine Learning Operations (MLOps): Overview, Definition, and Architecture. ArXiv, abs/2205.02302. Sculley, D., Holt, G., Golovin, D., Davydov, E., Phillips, T., Ebner, D., Chaudhary, V., Young, M., Crespo, J.-F., & Dennison, D. (2015). Hidden Technical Debt in Machine Learning Systems.. In C. Cortes, N. D. Lawrence, D. D. Lee, M. Sugiyama & R. Garnett (eds.), NIPS (p./pp. 2503-2511), . Shibui, Y., Byeon, S., Seo, J., & Jin, D. (2020). ml-system-design-pattern[GitHub Pages]. Retrieved from https://mercari.github.io/ml-system-design-pattern/
アバター
はじめに KINTOテクノロジーズで KINTO FACTORY のリードエンジニアをしている 中西 葵 です。現在KINTO FACTORYプロジェクトでは今後の対応車種や商品の拡充、全国展開を見据えてシステムの見直しを行っており、システム開発もモダンな技術や開発フローを取り入れている先進的なプロジェクトです。 本記事ではKINTO FACTORYで取り組んでいるスキーマファースト開発について解説します。 スキーマファースト開発とは? スキーマファイルを定義しコードジェネレーターを使用してコードを生成しAPIを開発する手法で以下のような課題を解決します。 結合してみたら型が違って動かない ドキュメントが古くてコードが正しい クライアントの実装が言語毎に重複 1. 結合してみたら型が違って動かない フロントエンド、バックエンド、各マイクロサービス間、外部サービスなどとのインターフェースとしてスキーマを定義する為、データ構造の齟齬などが発生しにくくなります。 2. ドキュメントが古くてコードが正しい ドキュメントの生成もジェネレーターを用いて出力することで運用が続くと発生しがちなドキュメントとコードの内容が乖離する状況も回避できます。 3. クライアントの実装が言語毎に重複 Webアプリ, モバイルアプリなどクライアントの開発言語が何であっても定義したスキーマファイルからコードを自動生成するため同一機能の別言語実装など開発工数のムダも防ぐことができます。 その他 チームに経験者がいない場合導入の壁が高いと感じる方も多いですが、他にも値のバリデーション、モックサーバー用コードの自動生成、git上でバージョン管理など、開発者にとっては良いこと尽くめの開発手法がスキーマファースト開発です。 KINTO FACTORYのシステム構成 KINTO FACTORYではマイクロサービスアーキテクチャを採用して以下の通り ブラウザからはGraphQL サードパーティシステムからはREST API 各マイクロサービス間はgRPC(Protocol Buffers) のような構成で通信を行う設計になっています 定義言語(IDL) 一般的にそれぞれのAPI設計において以下のようなIDL(Interface Description Language)を用いて定義していきます。 Interface IDL GraphQL GraphQL Schema https://graphql.org/learn/schema/ REST API Swagger Spec https://swagger.io/specification/ gRPC Protocol Buffers https://developers.google.com/protocol-buffers ※複数の定義言語を学ぶことは学習コストも高く効率的ではありません スキーマ変換ツール それぞれのIDLは名称や型などを定義してコードを生成することが出来るのであればSchema間での相互変換も可能ではないか?と考えて調査を進めたのが以下の表になります。 変換前 \ 変換後 GraphQL Schema Swagger Spec Protocol Buffers GraphQL Schema - ? ? Swagger Spec openapi-to-graphql - openapi2proto Protocol Buffers go-proto-gql protoc-gen-openapiv2 - GraphQL Schemaをベースに変換するツールは情報が少ない Swagger Specをベースに変換するツールは長期間メンテされていない Protocol Buffersをベースに変換するツールは上記より選択肢や情報が多い 以上の調査結果より Protocol Buffersで定義して他のSchemaに変換を行う選択をしました。 ソースファイル(.proto) 準備 1 https://github.com/googleapis/googleapis からRest APIを定義する上で必要なファイルを取得 google/api/annotations.proto google/api/http.proto google/api/httpbody.proto 準備 2 https://github.com/danielvladco/go-proto-gql からGraphQL Schemaを定義する上で必要なproto定義ファイルを取得 protobuf/graphql.proto 定義ファイル(example.proto) ※以下の定義ファイルはテックブログの記事を例に本稿用に作成したものです syntax = "proto3"; package com.kinto_technologies.blog; option go_package = "blog.kinto-technologies.com"; import "google/api/annotations.proto"; // 準備1で取得したファイルの読み込み import "protobuf/graphql.proto"; // 準備2で取得したファイルの読み込み // 記事 message Article { // タイトル string title = 1; // 著者 string author = 2; // コンテンツ string content = 3; } // リクエスト message Request { uint64 id = 1; } // 結果 message Result { uint64 id = 1; } // テックブログサービス service TechBlog { // 記事投稿 rpc PostArticle(Article) returns (Result) { option (google.api.http) = { post: "/post" }; option (danielvladco.protobuf.graphql.rpc) = { type: MUTATION }; } // 記事取得 rpc GetArticle(Request) returns (Article) { option (google.api.http) = { get: "/get/{id}" }; option (danielvladco.protobuf.graphql.rpc) = { type: QUERY }; } } .proto -> .graphql への変換 go-proto-gqlのインストール リポジトリをクローン git clone https://github.com/danielvladco/go-proto-gql.git cd go-proto-gql Protoc pluginsをインストール cd ./protoc-gen-gql go install .proto から .graphqlに変換 protoc --gql_out=paths=source_relative:. -I=. example.proto 出力ファイル(.graphql) """ テックブログサービス """ directive @TechBlog on FIELD_DEFINITION """ 記事 """ type Article { """ タイトル """ title: String """ 著者 """ author: String """ コンテンツ """ content: String } """ 記事 """ input ArticleInput { """ タイトル """ title: String """ 著者 """ author: String """ コンテンツ """ content: String } type Mutation { """ 記事投稿 """ techBlogPostArticle(in: ArticleInput): Result } type Query { """ 記事取得 """ techBlogGetArticle(in: RequestInput): Article } """ リクエスト """ input RequestInput { id: Int } """ 結果 """ type Result { id: Int } .proto -> .swagger.json への変換 protobufのインストール brew install protobuf protocol-gen-openapiv2のインストール go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest .proto から .swagger.json への変換 protoc -I . --openapiv2_out=allow_merge=true,merge_file_name=./example:. example.proto 出力ファイル(.swagger.json) { "swagger": "2.0", "info": { "title": "example.proto", "version": "version not set" }, "tags": [ { "name": "TechBlog" } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "paths": { "/get/{id}": { "get": { "summary": "記事取得", "operationId": "TechBlog_GetArticle", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/blogArticle" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string", "format": "uint64" } ], "tags": [ "TechBlog" ] } }, "/post": { "post": { "summary": "記事投稿", "operationId": "TechBlog_PostArticle", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/blogResult" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "title", "description": "タイトル", "in": "query", "required": false, "type": "string" }, { "name": "author", "description": "著者", "in": "query", "required": false, "type": "string" }, { "name": "content", "description": "コンテンツ", "in": "query", "required": false, "type": "string" } ], "tags": [ "TechBlog" ] } } }, "definitions": { "blogArticle": { "type": "object", "properties": { "title": { "type": "string", "title": "タイトル" }, "author": { "type": "string", "title": "著者" }, "content": { "type": "string", "title": "コンテンツ" } }, "title": "記事" }, "blogResult": { "type": "object", "properties": { "id": { "type": "string", "format": "uint64" } }, "title": "結果" }, "protobufAny": { "type": "object", "properties": { "@type": { "type": "string" } }, "additionalProperties": {} }, "rpcStatus": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "details": { "type": "array", "items": { "$ref": "#/definitions/protobufAny" } } } } } } まとめ 本稿では、スキーマファースト開発の紹介と、複数のスキーマ定義を最小限に抑えて運用する方法としてスキーマ定義を変換するツールについて紹介しました。 複数の定義言語が入り乱れている状態を解消したい方、特にProtocol Buffersの定義からGraphQL Schemaへの変換、Swagger Specへの変換について検討している方の一助になれば幸いです。 ドキュメントの生成やバリデーション処理の自動生成、コードの自動生成などについては別の記事として公開したいと思います。 Follow us! KINTOテクノロジーズのTwitterアカウントも運用開始しました。最新情報を発信していきますのでぜひフォローをお願いします https://twitter.com/KintoTech_Dev We are hiring! KINTOテクノロジーズでは一緒にモビリティの未来を創る仲間を募集しています。カジュアル面談なども行っておりますのでご興味をお持ち頂けましたらぜひお気軽にご連絡ください。 https://www.kinto-technologies.com/#/recruit/job
アバター
はじめに my route開発Gの木下です。 普段はモバイルアプリ、フロントエンド、バックエンドを跨ぎ、PoCで先行開発を行っています。 今回は、認定スクラムマスター研修を受講する機会をもらい、無事に試験に合格し、LSMの資格取得しましたので、その経験をまとめていきます。 LSMとは 今回取得したLSMについてですが。LSMは、Scrum Inc.の認定資格で、Scrum Inc.認定スクラムマスター(Licensed Scrum Master)になります。Scrum Inc.認定スクラムマスター研修を受けた後、試験に合格すると貰える資格です。 スクラムマスターの認定団体は複数あり、それぞれで資格の名前が異なります。 名前 認定団体 URL 費用 ライセンス更新費用 LSM、Licensed Scrum Master、認定スクラムマスター Scrum Inc https://scruminc.jp/ 200,000円 / 税抜 $50 / 年 CSM、Certified Scrum Master、認定スクラムマスター Scrum Alliance https://www.scrumalliance.org/ 300,000円 / 税込 $100 / 年 PSM、Professional Scrum Master、プロフェッショナルスクラムマスター Scrum.org https://www.scrum.org/ $150 なし [参考: https://www.ryuzee.com/faq/0034/ ] LSMは、2日間のコースで講義とワークショップが含まれた内容でした。このコースを修了することで、受験資格をもらうことができます。 資格取得後は毎年の更新が必要となり、$50と更新時の試験の合格が必要になります。そのため、継続するかを検討する機会が毎年あります。 なぜ受けたのか KINTOテクノロジーズは、先端なWeb企業の組織を目指し、日本製造業としての文化・風土の足かせとなる部分を変え、ベンダーロック剥がしやレガシーシステムの改修、業務フローのシステム化を行うなど、現在進行系でDX化を進めています。 進めている中で、手法としてアジャイル開発を選択できる機会も多くなってきました。 自分の所属するグループも、アジャイル開発を選択して進めています。その中で、上長からスクラムマスター研修を薦めてもらいました。 多くの小さい規模の開発チームと同様に私が所属しているmy routeチームでもチームのメンバーの少なさから、プロダクトオーナーがスクラムマスターを兼任している現状でもありました。 薦めを受けた後に、友人や知り合いにスクラムマスターと開発者を兼任しているチームの話を多く聞き、少しずつ興味を持ちました。 再度、上長と会話し以下の考えを持ったため、受講することを決めました。 スクラムマスターを行うに当たり必須のものでは無く、無くても行うことは問題ありませんが、これまで体系的に学ぶことをしていないこともあり、良き学ぶ機会にできる スクラムやアジャイルを進めるに当たり、スクラムの人脈ネットワークの構築を行うことができる可能性 例えば、セミナーの中で弊社と同じような組織課題を抱えた会社の人と、進め方について情報交換できるのかもしれない 開発者の目線でも、スクラムマスターの考えや気持ちを学ぶことは、動き方を知る上でメリットが多い LSMを選んだ理由 資格の取得は目的ではないため、PSMは選択肢にありませんでした。 最初は、社内の人から知名度のあるCSMの方を教えてもらっていましたが。 別の社内の人からスクラムのコミュニティーネットワークを構築できるかもしれないとLSMお勧めしてもらい、またトヨタグループのTRI-AD(現ウーブン・プラネット・ホールディングス株式会社)が導入をしていたことからグループとしての相性が良かったことで、社内における信頼感が増してLSMを選びました。 事前知識 研修受講前の知識量としては、 SCRUM BOOT CAMP THE BOOK と スクラムガイド を読み終えた程度です。 また、経験値としては、かっちりとスクラムを取り入れた組織で働いたことはなく、アジャイルをふわっと取り入れているチームで働いたことがある程度になります。 研修でやったこと 研修はZoomを繋いでのオンラインでした。 参加者をいくつかのチームに分けて進めるワークショップを交えながら、講義を進めていく感じでした。 研修の前日に、以下の内容を含んだメールが届きます。 スクラムガイド 用語集 テキスト Zoom チームごとのワークシート MURAL という、オンラインホワイトボードツールのURLを貰います。 ワークシートは修了後、PDFでダウンロード可能です。 学習内容としては、スクラムマスターというものについて、歴史を含め、何をすべきなのか、そのためにどういう行動をすべきなのかを、学問的に深く学ぶ内容でした。 メンバー編成については、研修開始直後にチームビルドのワークが行われ、初めてそこで一緒にワークを行うメンバーを知ることになります。 何名か会社の同僚と一緒に受講しましたが、なるべく同じ会社、近い業種の人と組合わさらないようにと気配りがあり、自分のチームでは、全く別業種の方と組むことができました。 そのため、日々の業務の中では得られない感覚と知見に触れることができました。 進め方は、学習ステップが1つ終わるたびに、座学からワークに移って問題文が出され回答or実践する形で、説明した内容を理解するように進みます。 学習する内容はボリュームがあり、個人的にはワークよりも講義が長いと感じることが多かったです。 しかし、話を聞いていないとワークで何もできなくなるため、集中力を保つことが大事な2日間でした。 試験について 資格試験は、コース修了後すぐに受験可能でした。 回答時間は無制限ではあるものの、研修の内容、テキストとスクラムガイドを理解していないと回答できない、理解の深さを問う問題が多いと感じました。 アジャイルやスクラム未経験の人には、少し辛いところもあるかもしれません。 ですが、1回までは再受験が無料ですぐ受けられるらしい(無事に1度目で合格したため、再受験については説明で聞いた話をそのまま書いています。)ので、合格のチャンスは多いです。 まとめ・感想 チームのメンターやメンバーは、明るくてノリが良かったこともあり、終始ワークショップは暖かい空気で進みました。 ワークショップを通して普段接しない業界のメンバーと進めていけるのは新鮮で、特にとても良かったです。 しかし、リモートであるためインタラクションが少なく、打ち解ける速さや深さは、実際に会って行うとでは雲泥の差がありました。 また一緒に受講した同僚は、1日目はあまり打ち解けあえず冷めたまま進んでいたようで、自分のチームのやり取りを聞いて、「なんて羨ましい…!」とこぼしていました。 メンバーやトレーナーの質によっては、上手くチームビルドができないというガチャ要素があります。 (同僚の場合は、2日目に「あれからすごく話すようになった!やっぱりアイスブレイク大事!!」と言っていたので、無事に打ち解け合えたようです。) 研修の内容に関しては、スクラムマスターというものに対して、学問的に深く学ぶ内容でした。 業務で困っているスクラムの取り入れられない組織での解決方法などを学ぶものではないため、普段の業務での困難についての銀の弾丸を直接に得るものではありませんでした。 研修を通して学問的に学んだものを、チームや組織、仕事にどのように活かすのは自分たち次第になります。 そのため、学習したもの全てをそのまま組織に取り込めて、上手く活かせる会社は稀なので、個々の会社それぞれが、何が合うのかを試し実践を繰り返していくのが大事になっていきます。 可能ならば、ワークで知り合ったチームメンバーでもいいですし、過去の参加者など、外部の人と共有し合える機会を持てる場や機会とか、運営団体のイベントなどで用意があれば、もっと知見が広がり更に良いと思いました。 いざ自身の会社に活かすことを考えると ワークしたチームメンバーに話を聞いたところ、他社もスクラムを活かしにくい環境で、また近しい課題感を抱えているところも多くありました。 それらを踏まえ、以下3パターンの適正があるのではと考えています。 作るものが決まっている場合は、スクラムよりウォーターフォールが適する 作るものが決まっておらず、やりながら作り込む場合は、スクラムは適する サービスを高めようと業種の垣根を超えて、チームが組める風通しが良い場合、スクラムは適する 自社で学びの内容の効果を最大限に発揮するには、考えた適正のように実践しやすい環境から整える必要がありますが、いきなり整えることは一筋縄ではいきません。 時折り完成の定義が崩れてしまうプロダクトインクリメントを正したり、社内の点々と散らばった小さなスクラムチームが繋がる取っ掛かりを探して Scrum of Scrum を目指したりと、少しづつ取り組むことで現状より改善に向けていければを結びの言葉にします。
アバター
はじめに こんにちは、KINTOテクノロジーズでフロントエンドを担当している渡邊です。普段はKINTO開発グループの一員として、国内向けKINTO ONEサービスをReact.jsなどのフレームワークを用いて開発しています。エンジニア集団であるKINTO開発グループでは、毎月数名の新メンバーを受け入れていますが、規模の大きなシステムで業務領域全体を理解することは複雑であると考えています。そこで、毎月中途入社者向けのオリエンテーションを実施し、新メンバーがいち早く活躍出来るようサポートしています。本記事では、なぜ中途入社者向けのオリエンテーションは重要なのかと、実際に行っているオリエンテーションの中身をご紹介したいと思います。 グループ内オリエンテーションのアナウンス オリエンテーションを実施するべき理由 中途入社者がいち早く社内で活躍するためには、早期に職場環境に慣れ、日常的なコミュニケーションからチームでの人間関係を構築することが不可欠です。新卒社員とは異なり、社会人経験があるため、中には「オリエンテーションは必要ない」と考える方もいるかと思います。しかしながら、中途入社者であっても環境の変化にすぐ適応できるとは限りません。前職との仕事のやり方の違いや業界や社内の専門用語が分からないために、入社間もないにも関わらず、不安やモチベーション低下を感じている方もいるかと思います。私たちのチームでもオリエンテーションを行っていなかった当時は、具体的な業務にアサインされるまで何から手をつけていいのか分からず、自席で困惑しているメンバーも見受けられました。また先輩社員も業務の合間を縫って、手取り足取りレクチャーすることは負荷がかかります。 このような課題に対し、KINTO開発グループでは、独自に設計したオリエンテーションを通じて、中途入社者の不安や戸惑いを解消することで、その後の業務にも良い影響を及ぼすと考えています。中途入社者にいち早く会社に馴染んでもらえるよう、以下の3つを目的にオリエンテーションを設計・実装しました。 KINTOのサービス理解を深めてもらう 自身の役割やバリューを把握してもらう 新しい環境・職場を好きになってもらう オリエンテーションを組み立てる4つのアプローチ それでは、私たちが実際に行っているオリエンテーションを4つご紹介いたします。各回60分ほどの講義形式になっていて、先輩社員が講師役を担って進行します。 プロダクト・チーム紹介(KINTO開発グループへようこそ!) グループ内のどのチームでどのような業務を行っているかを、顔つきの相関図を用いて紹介します。入社したばかりで顔と名前が一致しない中でいきなり業務に入ることに不安を感じるという声が多く、オリエンテーションの一番初めに実施しています。チーム構成やプロダクトメンバーを何となくでも把握しておくことで、困ったときに誰に聞いたらいいかを明確にすることが出来ます。 サービス・業務説明(ハンズオンを通じてサービスの流れを体験しよう!) KINTO ONEのサービスの流れをハンズオン(シナリオ)を通じて体験してもらいます。サービスに登場する様々なアクターになりきって、ウェブ画面を操作することで、今後業務で関わるステークホルダーを把握することが出来ます。また、登場人物や用語などを図を介して説明することで、自動車業界に携わってない方でも、理解を深めることが出来ます。 システム概要説明(使われているシステム・技術について理解しよう!) 実際に稼働しているシステムの裏側について、鳥瞰図を用いて紹介しています。システム全体の構成要素や機能、相互作用について事前に把握することで自身の担当・専門領域が明確になり、スムーズにプロジェクトイン出来ると考えています。技術スタックについての質疑応答もこちらのオリエンテーションを通じて行われます。 ウェルカムランチ(先輩社員と仲良くなって会社を好きになろう!) 実は一番大事なコンテンツだと考えています!複数の先輩社員とざっくばらんと会話することで、社内の雰囲気を感じることが出来ます。堅苦しい内容は抜きにして、新入社員の方に居心地の良さを感じてもらうことを目標に実施しています。オフィス周辺のランチ情報をSlackチャンネルに流したりと社内にはグルメな方が多いです😋(座敷や掘りごたつがあるお店などを選ぶと会話が弾みます笑) オリエンテーションを実施してみて分かったこと オリエンテーションを毎月行っていく中で、多くの知見や課題を発見することが出来ます。 オリエンテーションは自由に作れる 普段の開発業務と同様に、オリエンテーションも設計や実装が必要です。バックグラウンドや年齢が異なる中途入社者だからこそ、メンバーに合わせて、言葉を噛み砕いて説明・議論しています。特にクルマの知識がない方でも理解していただけるように、サービスの関わる登場人物を図を用いて説明したり、逆質問から認識齟齬が無いように努めています。全行程終了時には理解度や有効度を測るためにアンケートを取り、今後のオリエンテーションのためにナレッジを蓄積します。月ごとに柔軟にカスタム出来るのもオリエンテーションの面白さの一つです。 同期の仲が深まる 入社間も無く不安を感じている中途入社者にとって、同期入社のメンバーは心の拠り所になると思います。新メンバーには同タイミングで研修やハンズオンを体験してもらうので、メンバー同士で試行錯誤する風景が見受けられます。そこで毎月入社する新メンバーとオリエンテーション担当者でのSlackチャンネルを作成し、気心が知れた同期とコミュニケーションが生まれるように工夫しています。実際、「大人数がいるチャンネルより小規模のグループの方が発言しやすい」という方が多いです。入社オリエンテーションを通じて、同期の仲が深まるきっかけになることは、オリエンテーションを担当していてやりがいを感じる瞬間です。 先輩社員(担当者)の業務理解が深まる オリエンテーションは先輩社員による講義形式で行われます。オリエンテーション用のドキュメントを作成する中で、他グループからヒアリングをしたり、再度ハンズオンをトライすることで、これまで知らなかった・気づけなかった業務知識が増えたりします。そのためにも、定期的なドキュメントのアップデートも必要です。オリエンテーションは新入社員のためのものと思われがちですが、先輩社員にとっても有意義なものです。先述したアンケートも毎回担当者に共有しています。 まとめ エンジニア組織において、オリエンテーションの最大の効果は、新メンバーの「不安を取り除き」ながら、短期集中して「業務知識を得る」ことで、いち早く「プロジェクトに貢献」出来、ユーザーに「価値を提供」し続けられることだと思います。 中途入社者は、細かな指導をしてもらう機会はなかなかありません。分からないことがあれば自分で調べるという風潮があります。もちろん自力解決が一番ですが、入社して間もない仲間をサポートする体制を作ることで、円滑なコミュニケーションが取れる風通しの良いチームになると思います。 今後は、これまで以上に中途入社者をサポート出来るよう、アンケートやツールを用いてオリエンテーションをアップデートしていきたいです。また、多くのグループメンバーがオリエンテーションに携わることで、多角的にコミュニケーションが生まれ、よりクオリティが高くオリジナルなオリエンテーションが作れると思います。 皆さんの会社で実施している面白いオリエンテーションなどもシェアしていただけると幸いです!
アバター
はじめに はじめまして、KINTOテクノロジーズでモビリティマーケットの開発・運用を担当しているリナです。 普段はフロントエンジニアとして、Next.jsを用いて実装しています。 この度、KINTOテクノロジーズでテックブログを始めます!! KINTOテクノロジーズ設立から約1年、弊社で取り扱うプロダクトや社員数も増え、ようやくテックブログを始めることができました👏 KINTOテクノロジーズは、年齢・性別・国籍問わず多様なメンバーが在籍しており、トヨタグループのモビリティサービスの世界展開を実現する技術集団として、日々さまざまな課題に取り組んでいます。 このブログでは、そうした課題への取り組み内容や日々の業務の様子、また、AWSを始めとしたインフラ技術やフロントエンド・バックエンド開発に役立つ情報などをエンジニアから発信していきます。 初回エントリは、KINTOテクノロジーズで取り扱うサービスと弊社の個性豊かなエンジニアによるAdvent Calender2021の記事をご紹介します! KINTOサービス紹介 KINTOテクノロジーズでは、30ヵ国で展開するグローバルモビリティブランド『KINTO』関連プロダクトや、マルチモーダルモビリティサービス『my route』など、「クルマに乗る人」に焦点を当てた新しいサービスの開発・運用を行っています。 現在(2022年7月11日時点)展開しているサービスは、以下7つです。 KINTO Global KINTO KINTOマガジン ![KINTO](/assets/blog/authors/rina.k/blog-start/kinto_logo.jpg =200x) ![Global KINTO](/assets/blog/authors/rina.k/blog-start/kinto_logo.jpg =200x) ![KINTOマガジン](/assets/blog/authors/rina.k/blog-start/kinto_magazine_logo.png =300x) my route モビリティマーケット KINTO FACTORY Vintage Club ![my route](/assets/blog/authors/rina.k/blog-start/myroute_logo.png =150x150) ![モビリティマーケット](/assets/blog/authors/rina.k/blog-start/mobility_market_logo.png =200x) ![KINTO FACTORY](/assets/blog/authors/rina.k/blog-start/kinto_factory_logo.png =200x) ![Vintage Club](/assets/blog/authors/rina.k/blog-start/vintage_club_logo.png =200x) ここで、各サービスを簡単にご紹介します。 1. KINTO 国内向けのサービスの「KINTO ONE」は、車両代金・自動車税・保険料などマイカーにかかる費用がコミコミ&月々定額のサービスです。WEB申し込みで簡単申し込みが可能、トヨタの人気車種やレクサス車からお好きな車両を選ぶことができます。付随サービスとして、 のりかえGO や わりかんKINTO があります。 2. Global KINTO グローバルに展開しているKINTOサービスです。ハイブリッド車を利用したカーシェアサービスの「KINTO SHARE」やライドシェアサービスである「KINTO JOIN」など、6つのサービスを提供しています。 3. KINTO マガジン KINTOやクルマにまつわる情報をコラムや漫画を通じてご紹介しています。 4. my route 移動手段の検索・予約・決済まで、移動に関する一連の機能をひとつのアプリ内で完結できるサービスです。電車・バス・タクシー・サイクルシェア・カーシェアなど、街の色々な移動手段を組み合わせたルートをご提案しています。 5. モビリティマーケット クルマライフの楽しさを広げるサービスです。ドライブしたいと思い立ったときにぴったりなお出かけ先はもちろん、愛車のお手入れに役立つサービスなど、多彩なプログラムをWEBサイトでご紹介しています。 6. KINTO FACTORY クルマのオーナーに向けた愛車のカスタム・機能向上サービスで、お乗りのトヨタ・レクサスのクルマに最新の安全装備等を後付けするサービスです。 7. Vintage Club みなさんとKINTOが一緒に旧車を楽しむためのコミュニティです。SNSフォロワー限定の試乗会やイベントのほか、YouTubeなどオリジナルコンテンツをお届けしています。 Advent Calender 2021 昨年のAdvent Calenderにて、個性豊かなエンジニアがインフラ・開発・マネジメントなど、多岐にわたるテーマの記事を執筆しました! 今回は、私の独断と偏見で一部のおすすめ記事を紹介します。 AWS SES。もう自前バウンス対応は不要かも。 by @okinocchi Amazon Managed Service for PrometheusにECSからアプリケーションメトリクスを収集する by @sokasanan PRテンプレートを使ってチーム力アップ! by @MrSmart 完全コンテナベースのローカル開発環境を構築する(Docker+Spring Boot+MySQL+Flyway+Spock) by @chiggg 他の記事は こちら から閲覧できます。 おわりに 本エントリでは、KINTOテクノロジーズで取り扱うサービスとAdvent Calender2021を紹介しました。少しでも弊社のサービスに興味を持っていただけると幸いです。 そして、KINTOテクノロジーズでは、一緒に働ける仲間を募集しています!詳しくは こちら から 国内だけでなく、グローバルな取り組みも毎週配信していく予定です。 今後の「KINTO Technologies Tech Blog」にご期待ください!
アバター
Introduction Hello, my name is Rina and I’m involved in Mobility Market development and operation at KINTO Technologies. Usually I work as a front-end engineer implementing websites using Next.js. We are excited to announce that we are starting a KINTO Technologies Tech Blog !! It’s been almost a year since KINTO Technologies was established, during which we saw an increase in number of employees as well as the amount of projects we handle, and we are finally able to start a tech blog! 👏 KINTO Technologies is a diverse team who tackles a multitude of challenges each day as a technical group for the global development of Toyota Group’s mobility services. In this blog, our engineers will share the details of these challenges, the state of our daily operations, and useful information on AWS and other infrastructure technologies as well as front-end and back-end development. Our first entry is about the services we offer at KINTO Technologies as well as the Advent Calendar 2021 articles by our engineers full of personality. KINTO Services Introduction KINTO Technologies develops and operates new services focusing on "people in cars", including products related to the "KINTO" global mobility brand, which is available in 30 countries, and the "my route by KINTO" multimodal mobility service. KINTO Services to be Deployed Globally As of December, 2022, the following seven services are being deployed. Service name Description ![KINTO ONE](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-One.png =600x) Subscription service that allows the customer to drive one model during the contract period. ![KINTO FLEX](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Flex.png =600x) Subscription service that allows customers to drive multiple models during the contract period. ![KINTO JOIN](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Join.png =600x) A corporate program that allows employees to share rides when commuting by car, thereby helping to ease traffic congestion in the surrounding area, solve parking shortages and even reduce CO2 emissions. ![KINTO SHARE](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Share.png =600x) Car sharing service available by the minute. ![KINTO RIDE](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Ride.png =600x) A service that calls up vehicles via an online platform and provides door-to-door transport. ![KINTO GO](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Go.png =600x) Multi-modal services that combine several modes of transport according to customers needs and present travel route options. ![KINTO FACTORY](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Factory.png =600x) A service that makes you 'evolve' your Toyota/Lexus vehicle by updating software, hardware features and items in a timely manner in accordance with subsequent technological innovations of your already purchased Toyota/Lexus vehicle. For more information, see here ( KINTO's global expansion ). KINTO services and related products in Japan Of the above services, the following three are currently operating in Japan (as of December 2022). ![KINTO ONE](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-One.png =600x) ![KINTO GO](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Go.png =600x) ![KINTO FACTORY](/assets/blog/authors/rina.k/blog-start/service_logo/Kinto-Factory.png =600x) KINTO ONE KINTO ONE, a service for the domestic market, is a monthly subscription service that includes the vehicle price, automobile tax, insurance premiums, and other costs associated with a personal car. You can easily apply online and choose your favorite vehicle from popular Toyota and Lexus models. Additional services include のりかえGO (Norikae GO) and わりかんKINTO (Warikan KINTO) . KINTO also provides services such as 'my route by KINTO' and 'KINTO Magazine' as other KINTO-related products. Related service name Description ![my route](/assets/blog/authors/rina.k/blog-start/myroute_logo.png =600x) This mobility service allows customers to perform different actions, from searching for means of transport to booking and payment, to be completed within a single app. The app will suggest you routes that combine various means of transportation within a city, such as trains, buses, taxis, cycle shares, and car shares. ![Vintage Club by KINTO](/assets/blog/authors/rina.k/blog-start/vintage_club_logo.png =600x) A community for you and KINTO to enjoy vintage cars together. In addition to test driving and exclusive events for social media followers, we also upload original content on YouTube. ![Mobility Market by KINTO](/assets/blog/authors/rina.k/blog-start/mobility_market_logo.png =600x) This service extends the enjoyment of your life with a car. Our website introduces a variety of programs, such as services that help you take care of your beloved car, as well as destinations that are perfect for when you want to go for a drive. ![KINTO Magazine](/assets/blog/authors/rina.k/blog-start/kinto_magazine_logo.png =600x) Information on KINTO and cars is introduced through articles and cartoons. ![Prism Japan](/assets/blog/authors/rina.k/blog-start/prism_logo.svg =600x) A destination-inspired AI app that finds the perfect place for you. ​ ![のるウェイ!(Noruwaaaaaaaay)](/assets/blog/authors/rina.k/blog-start/noruway_logo.svg =600x) A web magazine that provides information on cars for those who feel a bit lost and want to relieve their feeling of "I wish I knew that" about cars. Advent Calendar 2021 At last year's Advent Calendar our engineers wrote about their unique take on a wide variety of themes such as infrastructure, development, and management. This time, I will introduce some recommended articles based on my personal preferences. https://qiita.com/okinocchi/items/dfc1db62d9f3988e213d https://qiita.com/sokasanan/items/738c69c7f4d6fd47378a https://qiita.com/MrSmart/items/89a9dec8e9f2a0288da9 https://qiita.com/chiggg/items/4976615fe98d5a437011 Other articles can be viewed here . Summary In this post, we introduced the services we have in KINTO Technologies as well as the content on the Advent Calendar 2021. We hope that this sparked your interest in our services. We plan to post about not only domestic but also global initiatives every week. Please look forward to what’s next in store for the "KINTO Technologies Tech Blog"! Furthermore, KINTO Technologies is looking for people to work with us! You can find more information here
アバター