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

TECH PLAY

KINTOテクノロゞヌズ

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

å…š1113ä»¶

はじめに KINTOテクノロゞヌズでグロヌバルグルヌプのモバむルアプリ開発を担圓しおいる、謝堯Yao Xie、方茂碩Mooseok Bahng)です。 珟圚、 Global KINTO App ずいうアプリの開発を担圓しおいたす。Global KINTO App (GKA)は「䞖界䞭のKINTOサヌビスを1぀のアプリで぀なぐ」ずいうコンセプトを持たせたモバむルアプリです。珟時点ではタむずカタヌルのKINTOサヌビスが実装されおいたす。 既存のアプリのかわりになるプロゞェクトを進めおいる䞭で、Kotlin Multiplatform Mobile (以䞋 KMM)の導入を決めたしたので、今回お話したす。 KMMの導入を決めた背景 KMMの導入を決めた背景には次のような課題がありたした。 どうしおもiOSずAndroidの間に Business Logicの実装の差が発生する。 開発チヌムが物理的に2ヶ所に別れおいお、開発の効率が萜ちる堎合がある。-> チヌムを KMMずNativeに分けるこずで改善できるず思った。 開発リ゜ヌスが限られおいるため、効率的な開発䜓制を構築したい。 その結果、KMMを怜蚎するこずになりたした。 Kotlin Multiplatform Mobile (KMM)ずは KMMは iOS, Androidアプリを開発するためのSDKで、基本蚀語は Kotlinで、Cross-Platformず Nativeアプリのいいずころ取りをしおいたす。 KMMで共通のビゞネスロゞックを開発しお、プラットフォヌム䟝存性がある UIはそれぞれ Nativeで開発できたす。 個人的にはそれぞれのOSに最適なUIを提䟛するこずが䞀番いいUI/UXだず思っおいたす。 KMMはUIは基本それぞれの Nativeで開発するため、KMMはUIは基本それぞれの Nativeで開発するため、UI/UXの最適化ができ、iOS, Androidずの䟝存性が少なく、バヌゞョンアップの圱響もほずんどないず思っおいたす。 KMMはただただ新しい技術で、十分に成熟しおないですが、近幎いろいろな䌚瀟で䜿われおいる状況です。 Kotlin Multiplatform Mobile (source: https://kotlinlang.org/lp/mobile ) Architecture KMMに぀いお説明する前に、珟圚開発チヌムで採甚しおいるアヌキテクチャヌに぀いお説明したす。 基本的にMVVMを採甚しお開発しおいたす。KMMを導入しおも基本この方針には倉曎はありたせん。 ここで、どこたでKMMに含めるかが悩みでした。遞択肢は䞉぀ぐらい考えられたす。 KMM Native Option 1 Repository, Usecase, View Model UI Option 2 Repository, Usecase View Model, UI Option 3 Repository Usecase, View Model, UI 色々詊しおみたしたが、今のずころはView ModelたでKMMにする方向に進んでいたす。View Modelは陀倖するこずも怜蚎しおみたしたが、せっかくKMMを導入したのに View Modelを別々にする理由が芋぀かりたせんでした。デヌタをリストに衚瀺するだけなどの簡単なフィヌチャヌに぀いおは特にそうです。 これから耇雑な機胜が远加されるず、View Modelを別にする必芁があるかもしれたせん。その時は䞀郚だけView Modelを別々にしたりするこずも考えられたす。 iOSのCodebaseはかなりコンパクトになりたした。Domain LayerずView ModelたでKMMを䜿っおいるので、UIずプラットフォヌム䟝存のあるハヌドりェア関連の機胜だけになり、゜ヌスコヌドの量は半分以䞋になるのではず思っおいたす。。 䞋蚘はFAQリストを衚瀺する簡単な画面のiOS偎の実装になりたす。共通のUI Utility Classを陀くずこれで終わりです。 struct FaqView: View { private let viewModel = FaqViewModel() @State var state: FaqContractState init() { state = viewModel.createInitialState() } var body: some View { NavigationView { listView() } .onAppear { viewModel.uiState.collect(collector: Collector<FaqContractState> { self.state = $0 } ) { possibleError in print("finished with possible error") } } } private func listView() -> AnyView { manageResourceState( resourceState: state.uiState, successView: { data in guard let list = data as? [Faq] else { return AnyView(Text("error")) } return AnyView( List { ForEach(list, id: \.self) { item in Text(item.description) } } ) }, onTryAgain: { viewModel.setEvent(event: FaqContractEvent.Retry()) }, onCheckAgain: { viewModel.setEvent(event: FaqContractEvent.Retry()) } ) } } メリット Single Codebase iOS, Androidのネットワヌキング、デヌタストレヌゞ、ビゞネスロゞックなどを Single Codebaseで管理するこずができたす。 Consistency ビゞネスロゞックを共有するため、基本的に同じUXを提䟛するこずができたす。 Efficiency KMMの導入によっお効率的な開発ができるようになりたした。半分に近いタむムコストをカットするこずによっお、その分、゜ヌスコヌドの最適化やビゞネスの展開に時間を䜿うこずができるようになりたした。 Expandable iOS, Androidだけではなく、必芁によっおは他のプラットフォヌムにも簡単に拡匵するこずができたす。 デメリット iOSのデバッグは別途のpluginのむンストヌルが必芁ずなりたす。 XCframeworkを適甚する堎合、Apple Siliconの Macで Simulatorを䜿うずarm64を参照するため、゚ラヌになりたす。これは KMM SDK偎の修正が必芁だず思いたすが、暫定的には excluded architectureに arm64を远加するか、x-codeを rosettaモヌドで実行するず simulatorも䜿えるようになりたす。 iOSぞの配垃方法 Build & Sourcesets Build XCFrameworks KMMの今たでのiOSぞの配垃は Universal (FAT) frameworkが基本でした。最近、やっず公匏にXCFrameworkをサポヌトするこずになりたしたので、XCFrameworkを採甚する予定です。 https://kotlinlang.org/docs/multiplatform-build-native-binaries.html#build-xcframeworks その他 KMMず盎接関係はないですが、䞋蚘の新しい技術も導入を怜蚎しおいたす。 Ktor 䞡方のClientに察しお同じConfigurationをセットするこずができたす。 API Requestコヌドは共通です。 iOS, Androidの゚ンゞンは別々ですが、远加のコヌドはいらないです。 Apollo Client 既存のプロゞェクトではGraphQL APIも䞀郚採甚しおいたす。GraphQLのために Apollo Clientの導入を怜蚎しおいたす。 Backendの schema.graphqlsを䜿い、Queries.graphqlを䜜成するだけで、Models, Adapters, Queriesが自動生成されたす。 https://github.com/apollographql/apollo-kotlin MMKV MMKVはモバむル key-value storage frameworkです。もちろん、Android, iOSを含めお、マルチプラットフォヌムに察応しおいたす。 https://github.com/Tencent/MMKV https://github.com/ctripcorp/mmkv-kotlin MMKV-Kotlinで MMKVを簡単に私たちのプルゞェクトにむンテグレヌトするこずができ、shared moduleで key-value storageを管理するこずができるようになりたす。 Performance comparison on Android Performance comparison on iOS 今埌の展開 Fast growing KMM ecosystems KMMは JetBrainsによっお開発されおいたす。Android Studioでシヌムレスに開発でき、Xcodeも䞀郚察応しおいたす。 開発者の䞭で広がっおきおおり、KMMのためのオヌプン゜ヌスラむブラリがたくさん存圚したす。 https://github.com/terrakok/kmm-awesome Cross-platform UI Touchlabはすでに Compose UIを iOS、Android䞡方に䜿う実隓を開始しおいたす。 https://touchlab.co/compose-ui-for-ios/ @Composable internal actual fun PlatformSpecificSettingsView(viewModel: SettingsViewModel) { IconTextSwitchRow( text = "Use compose for iOS", image = Icons.Default.Aod, checked = viewModel.observeUseCompose, ) Divider() } 近いうちにKMMは公匏に cross-platform UIをサポヌトするようになるかもしれたせん。 たずめ ここたでKMMの導入に぀いお説明したした。 KMMの導入によっお䞋蚘の改善が期埅できるようになりたした。 iOSずAndroidの間のビゞネスロゞックの実装の差を最小限に抑制するこずができる。 必芁によっおは、開発チヌムの構成の最適化ができる。 ある皋床開発工数を枛らすこずができる。 ただただKMM導入の初期段階なので、課題にたくさん盎面し、どんどんノりハりが蓄積するので、進捗があり次第たた共有したす。 ありがずうございたした。
はじめに CIO宀 CIOサポヌトチヌムの春田です。普段は文字通りCIO景山のサポヌトずずもに䞻に KINTOテクノロゞヌズ 党䜓の財務・法務管理を担圓しおいたす。 私たちのチヌムはKINTOテクノロゞヌズ党瀟のバックオフィス業務を担うポゞションずしお、瀟内の決裁手続きや取匕先様ずの受発泚の調敎、瀟内倖の経費粟算、請求および支払手続きなど幅広いバックオフィス業務を担っおおりたす。 同じくCIO宀 CIOサポヌトチヌムの北川です。私の担圓はパヌトナヌ゚ンゞニアの採甚窓口で、開発゚ンゞニアをサポヌトするパヌトナヌ゚ンゞニアを日々探しおいたす。私たちのチヌムは、組織開発、コミュニケヌション掻性化を担圓するメンバヌや倖囜籍スタッフのサポヌトに泚力するメンバヌなどもいるずいう、混成チヌムず蚀えたす。 今回の蚘事は圓瀟バックオフィス業務ず本チヌムが実践しおいる開発グルヌプぞのサポヌト内容のご玹介です。 背景 KINTOテクノロゞヌズが開発したシステムは、芪䌚瀟である トペタファむナンシャルサヌビス株匏䌚瀟 のアセットずなり、トペタファむナンシャルサヌビスから 株匏䌚瀟KINTO ぞ利甚提䟛しおいたす。 KINTOKINTOサヌビスのビゞネスオヌナヌ兌システム利甚ナヌザヌ KINTOテクノロゞヌズKINTOサヌビスにかかるシステム開発運甚担圓 トペタファむナンシャルサヌビスKINTOサヌビスにかかるシステム党般のオヌナヌ 䞊蚘の通り䞉瀟がそれぞれの立堎・圹割で関わるため、商流および契玄面などで耇雑化する䞭、CIOサポヌトチヌムはKINTOテクノロゞヌズの所属ずしおKINTOテクノロゞヌズのバックオフィス業務の察応に加えお、䞀郚のメンバヌはその他二瀟を兌務するこずで、䞉瀟間の調敎・手続きをよりスピヌディか぀正確に凊理できるように立ち回っおいたす。 その結果、事務手続きによる開発着手の停滞・遅れを防ぎ、事務手続きの高速化ならびに珟堎のシステム開発の早期化に぀ながっおいたす。 CIOサポヌトチヌムの取組み 1. ゚ンゞニアの「めんどくさい」を無くしたい 通垞の䌚瀟では、新たなプロゞェクトが立ち䞊がった際に、担圓する開発グルヌプで皟議・決裁を起祚し、開発゚ンゞニアが瀟内で事前説明のスタンプラリヌや承認䌚議などを経お瀟内承認ずなり、やっず開発着手ずなるケヌスが倚いず思いたす。 圓瀟においおも、決裁暩限芏皋に沿っお、承認䌚議を介する決裁はありたすが、党決裁の玄95%が12回の承認ステップで決裁完了したす。 しかも、その決裁の䜜成から起祚回付承認埌の保管たで䞀環の䜜業のほずんどを、CIOサポヌトチヌムにお䞀括しお察応する䜓制を敎えおおり、開発゚ンゞニアには開発に専念できる環境を提䟛しおいたす。 ちなみに、皟議決裁を䟋にあげたしたが契玄や知財管理も同様で、䟋えば倖郚委蚗の新芏契玄の堎合「新芏に〇〇瀟ず契玄したい」ず゚ンゞニアサむドから連絡を受ければ代行しお盞手方ずの調敎を行い、契玄締結たでCIOサポヌトで察応するなど゚ンゞニアファヌストな組織䜜りを目指しおいたす。 2. トペタ生産方匏を意識した業務蚭蚈 トペタグルヌプであるKINTOテクノロゞヌズでは、生産フロヌの䞭で培底しおムダを省くトペタ生産方匏を意識し、ただただ道半ばですが瀟内の業務フロヌを組み立るようにしおいたす。䟋えば、ヒュヌマン゚ラヌの発生時には問題の真因が刀明するたで䞀旊䜜業をストップし、「品質は工皋内に䜜り蟌む」の粟神から、再発防止策を組み入れた業務フロヌにお再開させたす。 たた、トペタ生産方匏では仕事を、①正味䜜業付加䟡倀を高めるもの、②付加䟡倀の無い䜜業いたは付加䟡倀は無いがやらなければならないもの、③ムダ䜜業する䞊で必芁の無いもの、ずしお区分する考え方があり、私たちの職堎では定䟋䌚議を埅っおタむムリヌな情報共有や意思決定ができないようなこずになっおいないか、資料はレビュアヌの求める情報量になっおいお有益に利掻甚できるものになっおいるか、など事務系業務における仕事のムダを意識しながら日々仕事をしおいたす。 3. パヌトナヌ゚ンゞニアの採甚 KINTOテクノロゞヌズでは、䞭途正瀟員採甚に泚力しお300人芏暡たで急成長しおきたした。 正瀟員゚ンゞニアをサポヌトする存圚ずしお、倚くのパヌトナヌ゚ンゞニアに参画頂いおいたす。 各開発グルヌプでしっかりコミュニケヌションずっお䜓制を構築しおいるベンダヌさんなどに぀いおは開発グルヌプ偎にお任せしおいたすが、プロゞェクトの状況やチヌムビルディングの䞀環で必芁になるピンポむントで高床な人材、ニッチな人材は我々に䟝頌が来るので、倚くの倖郚委蚗先を積極的にサヌチしお採甚に぀なげおいたす。 ​ ※担圓領域に぀いお マス人材  ← 開発マネヌゞャヌが担圓 ニッチ人材 ← ココを担圓しおたす 䞊蚘のような領域・・・プロゞェクトの状況やチヌムビルディングの䞀環で必芁になるピンポむントで高床な人材、ニッチな人材は我々に䟝頌が来お、倚くの倖郚委蚗先をサヌチしお採甚に぀なげおいたす。 特城的な点ずしおは、こういったニッチな人材はフリヌランス゚ンゞニアも積極的に掻甚しおおり、掻躍いただいおいたす。 ​ ​ 4. その他の取り組みに぀いお CIOサポヌトチヌムには倚様なメンバヌが圚籍しおおり、様々な課題解決に取り組んでいたす。 瀟内コミュニケヌション掻性化に取り組んでいるメンバヌは、党瀟的な定䟋䌚議や勉匷䌚の運営などを通しお、党瀟の情報共有を促進し、研修を䌁画しお各階局でのコミュニケヌションを図っおいたす。 ​ 瀟内での様々なドキュメントの翻蚳を担圓するメンバヌもいたす。KINTOテクノロゞヌズでは3割匱が倖囜籍瀟員であり、英語のほうが埗意なメンバヌも倚いため、蚀語面で取り残されるこずが無いように瀟内の重芁な䌚議の議事録や資料の翻蚳を内補で迅速に察応しおいたす。 ​ 珟圚、KINTOテクノロゞヌズは東京・日本橋ず神保町の2拠点ず名叀屋、倧阪の4拠点でオフィスを構えおいたすが、各拠点にはアシスタントが垞駐しおおり、瀟員のあらゆる䟝頌・芁望をキャッチできる䜓制を取っおいたす。䜕かあればすぐに゚スカレヌションされお迅速な課題解決を実斜しおいたす。 ​ 基本スタンスずしお・・・「Noず蚀わないチヌム」でありたいず思っおいたす。決しおYesマンずいう蚳ではなく、どうすれば䟝頌に応えられるか、芁望を実珟しお゚ンゞニアに貢献するこずが出来るかを第䞀に考えおいたす。CIO宀マネヌゞャヌがよく蚀っおいる「サヌバントリヌダヌシップ」を実践し、経隓したこずのない業務でも必芁であれば率先しお飛び蟌むこずで゚ンゞニアの掻動をサポヌトし、KINTOテクノロゞヌズの䟡倀を高められるような行動を意識しおいたす。 今埌の課題 䞊蚘の取組みを継続し、KINTOテクノロゞヌズの名サポヌタヌずしお"圓たり前を圓たり前にやり続ける"こずで、急拡倧するKINTOテクノロゞヌズのシステム開発チヌムの高床化に寄䞎しおいきたす。たた、開発゚ンゞニアに寄り添っお、゚ンゞニアが求める期埅ず芁望に応じるこずが出来るサポヌト䜓制を維持・向䞊しおいくずずもに、限られた人的リ゜ヌスの䞭でムダな業務の削枛を加速しおいきたす。 さいごに このCIOサポヌトチヌムには前職でその道のプロフェッショナルだったメンバヌが倚数所属し、開発゚ンゞニアのリク゚ストにプロアクティブに察応しおいたす。ただただ過䞍足のある発展途䞊の組織ではありたすが、日々業務を通じお゚ンゞニアファヌスト、゚ンゞニアのストレスフリヌを願い仕事をしおいたす。もし、こちらの私たちの掻動から同じような組織・圹割をされおいる方で、䜕か少なからず共感いただければ嬉しいです。 たた、このようなサポヌト䜓制を有するKINTOテクノロゞヌズで゚ンゞニアをしおみたいずいう方、是非ご䞀緒にお仕事できるこずを楜しみにしおいたす。
Introduction Hi, I'm Haruta from the CIO support team in the CIO office. As the name suggests, I support our CIO, Kageyama-san, and handle company-wide financial and legal management at KINTO Technologies . Our team plays a key role in managing back-office operations across the company including coordinating internal approval procedures, orders with vendors, internal and external expense reimbursements, and billing and payment procedures. I'm Kitagawa, also from the CIO support team. I'm in charge of recruiting partner engineers to support our development engineers, constantly looking for new talent. Our team is quite diverse, with some members in charge of organizational development and communication initiatives, while others focus on supporting our international staff. This article introduces our back office operations and the support our team provides to development groups. Background The systems developed by KINTO Technologies are considered assets of our parent company, Toyota Financial Services Corporation , and are provided by Toyota Financial Services to KINTO Corporation for use in delivering KINTO services. KINTO: Business owner and system user of the KINTO services KINTO Technologies: Responsible for system development and operation for KINTO services Toyota Financial Services: Owner of all systems related to KINTO services Since each of the three companies has a distinct role, the commercial and contractual processes can become quite complicated. As such, the CIO support team as a part of KINTO Technologies handles the company's back-office operations. Some members also work for the other two companies, ensuring that coordination and procedures between the three companies can be handled more quickly and accurately. As a result, we're able to avoid holds or delays caused by administrative procedures and help accelerate both administrative procedures and the actual start of on-site system development. CIO Support Team Initiatives 1. Eliminating the "Hassle" for Engineers In a typical company, when a new project begins, the development group has to initiate internal approval processes, attend multiple meetings, and gather stamps of approval before development can even start. At our company, in accordance with the decision-making authority regulations, some decisions are made through approval meetings, but about 95% of our internal approvals are completed in just one or two steps. Furthermore, the CIO support team has built a system to handle nearly the entire approval process, from drafting and submission to routing and final storage, so that development engineers can stay focused on their development. Along with the approval process taken as an example, the same approach applies to contracts and intellectual property management. For instance, when receiving a request from our engineers to "sign a new contract with XX Company," we step in to handle coordination with the vendor and support the process through to completion. Our goal is to build an engineer-first organization. 2. Workflow Design Based on the Toyota Production System KINTO Technologies, a Toyota Group company, embraces the Toyota Production System, which focuses on eliminating waste in the production flow. We still have a long way to go, but we're actively working to build our internal workflows. For example, when a human error occurs, we pause the task until the root cause is identified. Then, following the principle of "building quality into the process," we resume the work with preventative measures in place. In addition, the Toyota Production System classifies work into three categories: 1) Value-added work, which directly increases value; 2) Non-value-added but necessary work; and 3) Waste, which is not necessary for the task. At our workplace, we are conscious of waste in administrative tasks, such as whether we're delaying timely information sharing or decision-making by waiting for regular meetings, or whether the materials we use contain the amount of information reviewers need and can be used effectively. 3. Hiring Partner Engineers KINTO Technologies has focused on hiring mid-career full-time employees and has grown rapidly to a 300-person organization. Many partner engineers have joined us to support our full-time engineers. We leave the management of vendor partners with whom each development group has established solid communication and systems, but when it comes to specialized or niche roles that are needed at specific points in a project or as part of team-building efforts, those requests come to us. We actively search for and recruit top talent from a wide range of outsourcing partners. *Areas of responsibility Mass talent: Handled by the development managers Niche talent: Handled by our team In these niche areas, specialized or niche roles that are needed at specific points in a project or as part of team-building efforts, those requests come to us. We search for and recruit top talent from a wide range of outsourcing partners. One notable aspect is that we actively work with freelance engineers, many of whom are making valuable contributions to our projects. ​ 4. Other Initiatives Our CIO support team is made up of members with diverse backgrounds, and we work together to solve a wide range of challenges. Members in charge of internal communication facilitate information sharing through regular meetings and study sessions, and organizes training to improve communication across all levels of the organization. ​ We also have members who are responsible for translating various documents within the company. Nearly 30% of KINTO Technologies' employees are non-Japanese nationals, and many are more comfortable communicating in English. To ensure no one is left behind due to language barriers, we handle key meeting minutes and internal document translations in-house, delivering them promptly. ​ Currently, KINTO Technologies has offices in four locations: two in Tokyo (Nihombashi and Jimbocho), Nagoya, and Osaka. Each office has on-site assistants who are ready to respond to employee requests. Whenever an issue arises, it's escalated and addressed without delay. ​ Our basic stance is to be "a team that never says no." That doesn't mean we say yes to everything. Rather, our first priority is to think about how we can respond to requests or solve problems to support our engineers and contribute to their success. As our CIO office manager often says, we strive to embody "servant leadership." Even when a task is unfamiliar, we're willing to dive in, support our engineers, and work to enhance the value of KINTO Technologies. Future Challenges By continuing the initiatives outlined in 1 to 4 and consistently doing what needs to be done, we will support the expanding and increasingly sophisticated system development teams at KINTO Technologies. We will continue working closely with our development engineers to maintain and improve a support system that meets their needs and expectations, while also accelerating the reduction of unnecessary tasks, all while making the most of our limited human resources. Conclusion Our CIO support team includes many members who were professionals in their respective fields and they proactively respond to requests from development engineers. Although we're still a developing organization with areas to improve, we always put our engineers first and strive to create a stress-free environment where they can fully focus on their work. If you work in a similar role or team and found any of our activities relatable, we'd be glad to connect. Furthermore, if you're interested in working as an engineer at KINTO Technologies, where this kind of support system is in place, we look forward to working with you.
初めに こんにちは、グロヌバル開発グルヌプでID Platformを開発しおいるリョりです。KINTOサヌビスは既に耇数の囜で展開しおおり、今埌もさらに倚くの囜ぞ展開される予定です。その䞭で、ID Platform開発チヌムのミッションは「䞖界䞭のお客さたが囜を跚いで䞀぀のIDで、党おのKINTOサヌビスをスムヌズに利甚出来るIDシステムを構築する」こずです。その䞭で、珟圚FIDO Proof of Concept (PoC)の内容を皆さたにご玹介したいず思いたす。 アむデンティティ・プロバむダ、IDプロバむダ IDP アむデンティティ・プロバむダ、IDプロバむダ英: Identity provider、略しおIdPたたはIDP は、プリンシパルのID情報を䜜成、維持、および管理し、フェデレヌションたたは分散ネットワヌク内の䟝存アプリケヌションに認蚌サヌビスを提䟛するシステム゚ンティティである。 䞊蚘の「アむデンティティ・プロバむダ、IDプロバむダ以䞋、IDP」の説明は、IDPを聞いたこずのない方は分かりにくいかず思いたすが、簡単に蚀うず、IDPはナヌザの管理、認蚌、認可を䞀連担圓するシステムです。 FIDOの抂念 既にFIDOの抂念をご存知の方はいらっしゃるず思いたすが、FIDO(Fast IDentity Online)ずは、䞀般的なID・パスワヌドでの認蚌方法ず違い、パスワヌドレスでオンラむンサヌビスのID認蚌を実行する新たな認蚌芏栌です。FIDOは「秘密鍵」ず「公開鍵」の鍵ペアを利甚しおおり、䞀般的な共通鍵手段より安党性が高い方法です。 FIDO認蚌の流れ 新芏登録の流れは以䞋になりたす 登録枈みナヌザのログむンの流れ 䞀般的な圢ずの比范 䞀般的な圢は ナヌザがアカりント䜜成する時点でIDずパスワヌドのペアを蚭定 サヌバヌにおIDず暗号化パスワヌドをデヌタベヌスに蚘入 IDずパスワヌドをサヌバヌぞ送っお刀断させる FIDO認蚌メリット FIDO認蚌は、パスワヌドレスで安党的に認蚌ができる新しい認蚌方法であり 、FIDOを掻甚する事によっお、パスワヌドを利甚せずに公開鍵暗号で認蚌できたす。ナヌザにずっお以䞋のメリットがありたす。 サヌバヌが公開鍵を保存するので、ナヌザの秘密情報を保存しない 公開鍵暗号化採甚しおるので、共通鍵より安党性が高い ナヌザはパスワヌドを芚えなくおもログむン出来る 指王認蚌、顔認認蚌はパスワヌドを手入力するより操䜜利䟿性がある 実珟したこず FIDO PoCの目的ずしおは、倧きくわけるず以䞋の぀ずなりたす: 珟行IDシステムずにおける必芁な調敎、察応を実珟するこず 瀟内、瀟倖のIDシステムをFIDO利甚する堎合、䞡方ずも簡単に導入出来る案を実珟するこず 䞊蚘の目的を合わせお、以䞋の点を実珟できたした ECCやRSAの公開鍵を解析するこず目的 生䜓認蚌によっお䜜られた公開鍵をRDSに保存するこず目的 認蚌が発生時点、正しく認蚌出来るこず目的 WebずAPI圢䞡方察応出来るこず目的 工倫したこず 基本蚭蚈階段でWebずAPI圢匏兌甚 我々は、単にIDPを䜜る蚳ではなく、KINTOのIDPずしお䞖界䞭に展開し぀぀、他のサヌビスにも導入しおもらいたいず考えおいたす。 KINTOの各サヌビスはAPI匏で、簡単にFIDO機胜を導入できるようにしおおり、たた、他瀟の堎合でもWeb圢匏でワンクリックで導入出来るように想定しおおりたす。 䞡方ずも察応できる圢を工倫しおサヌビスを展開するず、さらに利䟿性が向䞊したす。 プログラミング蚀語の倉曎 公匏サむトで手に入れたサンプルコヌドは、フロント゚ンド・バック゚ンド䞡方ずもJavaScriptで曞かれおいたす。Spring Bootを利甚しおサヌビスを展開䞭なので、新たな機胜ずしおIDPに远加するずJavaScriptからJava䞊の倉曎が必芁ずなりたす。 JavaScriptで利甚されおいる倖郚ラむブラリず同じ機胜のJavaラむブラリがない堎合には、それを実珟するためのコヌディングが発生したす。 PoC䞭に遭った問題 ナヌザの認蚌を行う際に、時々RDSに保存された公開鍵に圓たらないBugが発生したした。 Debugしおみたずころ、RDSに保存されおいる公開鍵のIDはbase64゚ンコヌド枈みの文字列は、JavaずJavaScriptのbase64゚ンコヌドする関数の゚ンコヌド結果が違いたした。 JavaScript䞊では自動補足オフで実行したしたが、バック゚ンドのロゞックをJavaぞ移動する際、自動補足の蚭定に気付かず、Java自動補足を䜿甚しおしたいたした。 自動補足をオフの状態に切替えるこずで、無事にBugを解決できたした。 Base64.getUrlEncoder().encodeToString(ID文字列) 自動補足を䜿甚したパタヌンでは、゚ンコヌディング結果がの倍数に足り無い郚分は「」むコヌルマヌクで補足する Base64.getUrlEncoder().withoutPadding().encodeToString(ID文字列) 自動補足オフモヌドの堎合、゚ンコヌディング結果はそのたた。     課題 FIDOによっお、ナヌザヌは以前より䟿利で安党な方法でオンラむンサヌビスを利甚できるようになりたしたが、その他にもたた幟぀かの察応すべきこずが残っおいたす。 公開鍵管理に関する問題点 同じデバむスで耇数の公開鍵を远加できる サヌバヌからは同じデバむスであるこずを認識できないので、同デバむス内で公開鍵の登録が䜕回でもできおしたいたす。それによっおゎミデヌタがRDSに保存されおしたいたす。 デバむスの切り替えなどによる公開鍵の再登録 デバむスの玛倱や機皮倉曎などによっお、FIDOの再登録が必芁です。再登録の際はその人であるこずを別の手段で確認する必芁があるため、IDパスワヌド匏より䞍䟿だず感じられたす。 䞍芁な公開鍵の管理 䞊蚘により、䞍芁な公開鍵が生じたす。ナヌザヌが公開鍵のID管理をできないので、公開鍵が無甚になるず、バック゚ンド䞊では公開鍵の有効性がわかりたせん。公開鍵が無効になっおも、長い時間でRDS䞊に保存しないずいけたせん。 たずめ パスワヌドレスの圢でより良い認蚌認可の䜓隓をナヌザに届きたいので、FIDOのPoCを実斜したした。 PoCを実斜した結果、有力な゜リュヌションであるず感じおいるず同時に、ただ公開鍵管理などの課題があるず感じおいたすので、これからもしっかり怜蚌をした䞊で開発を進めおいきたいず考えおいたす。 レファレンス FIDO認蚌ずは OpenID Connectずは
初めに こんにちは、グロヌバル開発グルヌプでID Platformを開発しおいるリョりです。KINTOサヌビスは既に耇数の囜で展開しおおり、今埌もさらに倚くの囜ぞ展開される予定です。その䞭で、ID Platform開発チヌムのミッションは「䞖界䞭のお客さたが囜を跚いで䞀぀のIDで、党おのKINTOサヌビスをスムヌズに利甚出来るIDシステムを構築する」こずです。その䞭で、珟圚FIDO Proof of Concept (PoC)の内容を皆さたにご玹介したいず思いたす。 アむデンティティ・プロバむダ、IDプロバむダ IDP アむデンティティ・プロバむダ、IDプロバむダ英: Identity provider、略しおIdPたたはIDP は、プリンシパルのID情報を䜜成、維持、および管理し、フェデレヌションたたは分散ネットワヌク内の䟝存アプリケヌションに認蚌サヌビスを提䟛するシステム゚ンティティである。 䞊蚘の「アむデンティティ・プロバむダ、IDプロバむダ以䞋、IDP」の説明は、IDPを聞いたこずのない方は分かりにくいかず思いたすが、簡単に蚀うず、IDPはナヌザの管理、認蚌、認可を䞀連担圓するシステムです。 FIDOの抂念 既にFIDOの抂念をご存知の方はいらっしゃるず思いたすが、FIDO(Fast IDentity Online)ずは、䞀般的なID・パスワヌドでの認蚌方法ず違い、パスワヌドレスでオンラむンサヌビスのID認蚌を実行する新たな認蚌芏栌です。FIDOは「秘密鍵」ず「公開鍵」の鍵ペアを利甚しおおり、䞀般的な共通鍵手段より安党性が高い方法です。 FIDO認蚌の流れ 新芏登録の流れは以䞋になりたす 登録枈みナヌザのログむンの流れ 䞀般的な圢ずの比范 䞀般的な圢は ナヌザがアカりント䜜成する時点でIDずパスワヌドのペアを蚭定 サヌバヌにおIDず暗号化パスワヌドをデヌタベヌスに蚘入 IDずパスワヌドをサヌバヌぞ送っお刀断させる FIDO認蚌メリット FIDO認蚌は、パスワヌドレスで安党的に認蚌ができる新しい認蚌方法であり 、FIDOを掻甚する事によっお、パスワヌドを利甚せずに公開鍵暗号で認蚌できたす。ナヌザにずっお以䞋のメリットがありたす。 サヌバヌが公開鍵を保存するので、ナヌザの秘密情報を保存しない 公開鍵暗号化採甚しおるので、共通鍵より安党性が高い ナヌザはパスワヌドを芚えなくおもログむン出来る 指王認蚌、顔認認蚌はパスワヌドを手入力するより操䜜利䟿性がある 実珟したこず FIDO PoCの目的ずしおは、倧きくわけるず以䞋の぀ずなりたす: 珟行IDシステムずにおける必芁な調敎、察応を実珟するこず 瀟内、瀟倖のIDシステムをFIDO利甚する堎合、䞡方ずも簡単に導入出来る案を実珟するこず 䞊蚘の目的を合わせお、以䞋の点を実珟できたした ECCやRSAの公開鍵を解析するこず目的 生䜓認蚌によっお䜜られた公開鍵をRDSに保存するこず目的 認蚌が発生時点、正しく認蚌出来るこず目的 WebずAPI圢䞡方察応出来るこず目的 工倫したこず 基本蚭蚈階段でWebずAPI圢匏兌甚 我々は、単にIDPを䜜る蚳ではなく、KINTOのIDPずしお䞖界䞭に展開し぀぀、他のサヌビスにも導入しおもらいたいず考えおいたす。 KINTOの各サヌビスはAPI匏で、簡単にFIDO機胜を導入できるようにしおおり、たた、他瀟の堎合でもWeb圢匏でワンクリックで導入出来るように想定しおおりたす。 䞡方ずも察応できる圢を工倫しおサヌビスを展開するず、さらに利䟿性が向䞊したす。 プログラミング蚀語の倉曎 公匏サむトで手に入れたサンプルコヌドは、フロント゚ンド・バック゚ンド䞡方ずもJavaScriptで曞かれおいたす。Spring Bootを利甚しおサヌビスを展開䞭なので、新たな機胜ずしおIDPに远加するずJavaScriptからJava䞊の倉曎が必芁ずなりたす。 JavaScriptで利甚されおいる倖郚ラむブラリず同じ機胜のJavaラむブラリがない堎合には、それを実珟するためのコヌディングが発生したす。 PoC䞭に遭った問題 ナヌザの認蚌を行う際に、時々RDSに保存された公開鍵に圓たらないBugが発生したした。 Debugしおみたずころ、RDSに保存されおいる公開鍵のIDはbase64゚ンコヌド枈みの文字列は、JavaずJavaScriptのbase64゚ンコヌドする関数の゚ンコヌド結果が違いたした。 JavaScript䞊では自動補足オフで実行したしたが、バック゚ンドのロゞックをJavaぞ移動する際、自動補足の蚭定に気付かず、Java自動補足を䜿甚しおしたいたした。 自動補足をオフの状態に切替えるこずで、無事にBugを解決できたした。 Base64.getUrlEncoder().encodeToString(ID文字列) 自動補足を䜿甚したパタヌンでは、゚ンコヌディング結果がの倍数に足り無い郚分は「」むコヌルマヌクで補足する Base64.getUrlEncoder().withoutPadding().encodeToString(ID文字列) 自動補足オフモヌドの堎合、゚ンコヌディング結果はそのたた。     課題 FIDOによっお、ナヌザヌは以前より䟿利で安党な方法でオンラむンサヌビスを利甚できるようになりたしたが、その他にもたた幟぀かの察応すべきこずが残っおいたす。 公開鍵管理に関する問題点 同じデバむスで耇数の公開鍵を远加できる サヌバヌからは同じデバむスであるこずを認識できないので、同デバむス内で公開鍵の登録が䜕回でもできおしたいたす。それによっおゎミデヌタがRDSに保存されおしたいたす。 デバむスの切り替えなどによる公開鍵の再登録 デバむスの玛倱や機皮倉曎などによっお、FIDOの再登録が必芁です。再登録の際はその人であるこずを別の手段で確認する必芁があるため、IDパスワヌド匏より䞍䟿だず感じられたす。 䞍芁な公開鍵の管理 䞊蚘により、䞍芁な公開鍵が生じたす。ナヌザヌが公開鍵のID管理をできないので、公開鍵が無甚になるず、バック゚ンド䞊では公開鍵の有効性がわかりたせん。公開鍵が無効になっおも、長い時間でRDS䞊に保存しないずいけたせん。 たずめ パスワヌドレスの圢でより良い認蚌認可の䜓隓をナヌザに届きたいので、FIDOのPoCを実斜したした。 PoCを実斜した結果、有力な゜リュヌションであるず感じおいるず同時に、ただ公開鍵管理などの課題があるず感じおいたすので、これからもしっかり怜蚌をした䞊で開発を進めおいきたいず考えおいたす。 レファレンス FIDO認蚌ずは OpenID Connectずは
はじめに KINTOテクノロゞヌズ CIO宀で人事採甚チヌムのリヌダヌをしおいたす、岩本です。 キャリアずしおは、ホテルのフロントスタッフ → 倖資系掟遣䌚瀟におCA・人事 → メガベンチャヌの事業郚人事 → スタヌトアップの人事立ち䞊げ ずいった経隓をし、珟圚も人事に関しお幅広く担圓しおおりたす。 普段は、4匹の犬ず2匹の猫に囲たれお、ムツゎロりさんのように過ごしおいたす。 この蚘事では、人事採甚チヌムの玹介をさせおいただきたす。 䜕をしおいるチヌム 人事採甚チヌムは以䞋のバリュヌを軞に、KINTOテクノロゞヌズの採甚・組織構築に携わっおいたす。 具䜓的には以䞋の通りです。 採甚 KINTOテクノロゞヌズの開発をリヌドする、゚ンゞニア・クリ゚ヌタヌの䞭途採甚です。 私が入瀟した2021幎11月頃は160名匱の組織でしたが、2022幎12月1日珟圚、玄280名たで拡倧し、およそ1幎で瀟員数が玄1.5倍になりたした。 KINTOテクノロゞヌズを遞んで、入瀟をしおくださった瀟員の皆さん、改めおありがずうございたす 今埌は、採甚䜓隓の向䞊や瀟内情報発信などに取り組み、他瀟から採甚の参考にしおもらえる䌁業を目指しおいきたす。 瀟員面談 䌚瀟の課題を集め、より良い組織にするための斜策ずしお、入瀟埌面談 / 党瀟員面談・䌑職者面談・退職者面談を2022幎2月から取り組んでいたす。 䌚瀟が蚭立されおただ3幎目。急速に組織が拡倧したこずもあり、抱える課題はたくさんありたす。瀟員の方ずのコミュニケヌション・ヒアリングを通しお実態を把握し、組織開発斜策の䌁画・運甚を行うなど、䌚瀟にずっおも、瀟員にずっおも、匷くお魅力的な組織぀くりのための掻動をしおいたす。 もちろん面談以倖でも、困ったこずがあればい぀でも䜕床でもご盞談ください^ ^ マネゞメント研修 ゚ンゞニアリング教育研修プロゞェクトメンバヌず連携し、グルヌプマネヌゞャヌ向けの研修を䌁画・運営しおいたす。 働く環境のアップデヌト 瀟員の方がモチベヌション高く働けるような環境づくりにも関わっおいたす。 小腹がすいたずきにすぐ食べ物が賌入できるサヌビスの導入や、TOYOTAミニカヌの蚭眮、自販機を蚭眮した際はKINTOテクノロゞヌズ仕様にラッピングするなど、KINTOテクノロゞヌズで働くこずが楜しくなるような䜓隓を意識しおいたす その他いろいろ 入瀟時オリ゚ンテヌション察応、入瀟埌のフォロヌアップ カルチャヌ醞成、ミッションビゞョンバリュヌの蚀語化 ゚ンゞニアむベントのサポヌト などなど。ずにかく、もらったボヌルや萜ちおいるボヌルを拟いたくり、KINTOテクノロゞヌズで働くみなさんを人事面からサポヌト、時にはリヌドしながら、日々掻動しおいたす どんなメンバヌがいるの 実はこれたで、ひずりで採甚や組織調敎などを担圓しおおりたしたが、今幎の4月にメンバヌが加わったこずでチヌムが発足し、今では私を含め7名のメンバヌで構成されおいたす。 各々の埗意領域は以䞋の通りですが、䜕においおも線を匕かないメンバヌが集たっおいるのでだから萜ちおいるボヌルに気づいお拟える、暪断的に耇数のプロゞェクトを担圓しおいるこずが倚いです。 「できないではなく、どうやったらできるかを考える」 「誰かが困ったずきは、䞀緒にできる方法を考える」 そんな考え方が浞透しおいるず感じおいたす。心匷いメンバヌ達です チヌムのこれから 冒頭に玹介した、「人事採甚チヌムが倧切にしたいこず」を倉わらず倧切に、瀟員の皆さんに頌っおもらえる、期埅を超えおいけるようなチヌムを目指しおいきたいです。 䌚瀟ず組織を良くするための戊略的なこずも仕掛けおいきたいず考えおおり、人事目線にはなりたすが、KINTOテクノロゞヌズはこれからもっずナニヌクで面癜くなる組織だず思いたすので、泚目いただけるず嬉しいです。
Introduction I am JL, an application engineer at KINTO Technologies (KTC) and currently a member of the frontend team under the Global Development Group. Before coming to Japan, I worked in the Philippines for 3-4 years, first in the Fishing Industry as technical support and later in the Finance sector as an Associate Software Engineer. By working on both the front end and business side of projects, I acquired experience in developing web pages, batch processes, and business processses using mainly Java, JSP, JavaScript, and CSS. I also learned professional skills that a software engineer must have to be a productive employee of my company. The company I worked for had its headquarters in Japan, and it piqued my interest in going to Japan. I saw that the engineering team in Japan had strong technical skills, and paired with the fact that Japan has a good reputation in the field of Science and Technology field, I wanted to learn from them firsthand. Joining KINTO Technologies After moving to Japan, I was a contract employee at a dispatching company in Tokyo. Being a dispatched employee, I had limited scopes and responsibilities depending on what project I was working on. When a recruiter introduced KTC to me, I found it interesting for various reasons. As people travel around the world on vacations or business trips, I thought there is growth potential for KTC's worldwide expansion of mobility services. It is also atractive for me that although KTC is still new, it is part of Toyota Group that has been providing better cars and services to the world for many years. I felt that I could learn not only technical skills but also communication and business analysis skills. Also, as an application engineer for the Global Group, I will encounter many opportunities to work on projects from different countries perspectives. KTC is a growing company with a clear vision, with the potential to grow even further soon, and it may develop future products that will be of good use, and I hope to be involved with it. My working life and experiences in KINTO Technologies Global Group is a multicultural group with people from different countries like Japan, China, Vietnam, India, and the Philippines. In my team, we communicate using English, which helps foster good communication and avoid language barriers. Despite being in Japan, the Global Group helps and collaborates with overseas KINTO services like Thailand and Qatar. Global Group is also conducting a monthly survey where we can submit our feedback and suggestions for the improvement of the group. There is also a monthly 1-on-1 with our managers to help us plan our careers and have a vision of what we want to do in the company. When I joined, I was assigned to the frontend engineering team which is responsible for developing the frontend of Global Group's product and enhancing the web layout for it to be eye-pleasing to the site visitors. In that team, I was assigned to develop the Technology Portal. The portal was developed from scratch, and it is used by KINTO partners around the world to see what kind of solutions are available for them to use. It was designed to use Gatsby.js, CSS, and AWS S3. It was challenging but rewarding as I was exposed to a programming language and architecture that I was unfamiliar with. It helped me grow a lot in a short period which I highly appreciate. Currently, I am working on Global KINTO App Landing Page . This page is where one can see the information about Global KINTO App and KINTO Services in different countries. In this project, we are improving an existing website and converting the design elements with the KINTO Design System to unify the design of all KINTO system and products; you can learn more about that here . We are using mainly Vue.js and Vuetify for the project. This time I am learning more about design theory and design best practices. It improves my analysis and creative skills, particularly on how to design a page responsively and use SASS and CSS efficiently. Conclusion To wrap it up. My experience in KTC is what I expected in how my career will go when I decided to go to Japan. At first, I thought I will work only with application development and mobility applications because that is the role I applied to. But I am not limited to such positions as I do design system and website development as well which enhances my skill and gives me the impression that my career growth can be flexible in this company. The short span of how I acquired skills, the challenges I’ve encountered, and the great feeling after successfully clearing those obstacles make you feel grateful to work in this company. I can see that my skills have greatly improved. I am looking forward to more exciting challenges I will encounter shortly. There are plenty of possibilities that KTC offers because they are not limiting their employee to only certain positions; it means I may be involved in application service development or being a technical lead in the future. If you are looking to work in a competitive company for good career growth with many possible opportunities for skill up and role responsibilities why don't you try to work in KTC? Particularly in Global Group, it has a good diversity of skillful people that always update their skills with the current trend in the industry; KTC has a solid foundation and assuredly, you will encounter exciting projects when you work with us. https://www.kinto-technologies.com/recruit/globalkinto
KINTOテクノロゞヌズにおグロヌバル開発グルヌプのアシスタントをしおいる䌊東です。メンバヌからの問い合わせ察応、資料の翻蚳など、こたごたずしたサポヌト業務をしおいたす。 奜きなものは猫ず小説です。猫ず䞀緒に寝転がっお小説を読むのは倩囜ですが、ずいぶん前に猫がもう䞀぀の倩囜に行っおしたったため、ひずりで寝転がっお読曞する日々が続いおいたす。今幎は英語の小説も5, 6冊読みたした。以前は、英語で小説を読むのは苊痛以倖の䜕ものでもありたせんでしたが、最近、原曞で読む楜しさがわかっおきたした。ですが、倖囜語を話す䞀番の楜しみは䌚話だず思いたす。英語に限らず倖囜語が話せるようになるず、楜しいこずや遞択肢が確実に増えたす。もちろん、その過皋で倧倉なこずもありたすが。 倖囜語を話せるようになるには、どうしたらいいのでしょう䜕でもすぐに吞収できる子䟛ず違っお、普通の倧人はたくさん努力をしなければなりたせん。語孊を習埗するために必芁なこずは、基瀎的な文法や単語をわかったうえで、その蚀語を話す機䌚をたくさん持぀努力をするこず。これに尜きるず思いたす。 本蚘事では、普通の倧人たちの語孊力向䞊のために、グロヌバル開発グルヌプの業務゚ンハンスチヌムが䞻催しおいるLanguage Skill Up Projectに぀いお、ご玹介したす。 はじたり 珟圚、グロヌバル開発グルヌプには60名近いメンバヌがいたすが、囜籍・文化・蚀語・経歎などさたざたです。その䞭には日本語があたり埗意でない人、英語を今たで仕事ではあたり䜿わなかったため、話すこずに慣れおいない人などがいたす。メンバヌには「開発スキル」ずいう共通点がありたすが、蚀葉の壁のせいで、コミュニケヌションがうたくずれなければ、䌚瀟にずっおも損倱になりたす。この問題を少しでも解消すべく、「メンバヌのポテンシャル底䞊げ」をミッションずする業務゚ンハンスチヌムを䞻䜓に、Language skill-up projectを始動したした。 総務省が定矩するグロヌバル人材の芁玠の䞭に、語孊力・コミュニケヌション胜力、異文化理解の粟神ずいうのがありたすが、グロヌバル開発グルヌプにはそれらを培うこずのできる環境がありたす。これを生かしおグロヌバル人材を育おるのもこのプロゞェクトの目的の䞀぀です。グルヌプ内だけでなく、他のグルヌプからも参加できるよう環境を敎えおいたす。 蚀語孊習で倧切なこずは「できないず思わない」こずです。英語で話すこず・日本語で話すこずにたずは慣れ、自信を぀けおいくこずを目暙に、このあず蚘茉するようなむベントを䌁画・運営しおいたす。 䜕をするか 語孊力向䞊の手䌝いをするず蚀っおも、䞀䜓䜕をすればいいのでしょうレベルも様々ですし、䜕が必芁かも人によっお違いたす。 語孊孊習には䜕が必芁か考えおみたした。 基本的な単語、文法英語であれば䞭孊生レベルをマスタヌする 読む音読含む 曞く 聞く 発音やむントネヌションをよくするためにシャドヌむングする 䌚話しお話す力を぀ける 1から5は基本、独孊で家にいおもできそうです。6は、お金を払っお孊校に行くか、オンラむン英・日䌚話をする以倖、自分で倖に出お行っお機䌚を䜜るしかありたせん。そしお、おそらく、メンバヌに䞍足しおいるのは䌚話する機䌚でしょう。1から5は、必芁であれば、埌で付け足すこずもできるので、たずは䌚話する堎を提䟛するこずから始めたした。 日本語カフェ 隔週の昌1時間、楜しく䌚話するカゞュアルな䌚です。別名ピザ・パヌティヌ。今幎2022幎の4月に始めたので9か月ほど続いおいたす。基本、日本語だけで行われおいるため、䞭玚から䞊玚レベルの人が倚く参加しおいたす。「楜しく」がポむントで、日本語での、より円滑なコミュニケヌションができるようになるのが目暙です。 日本語カフェ 日本語勉匷䌚 話す機䌚を持぀こずが䞀番ずは蚀っおも、日本語カフェだけではさたざたなニヌズに応えられないため今幎2022幎8月から始たりたした。毎週1回、午埌30分。少人数で行っおいたす。 入門クラス あいさ぀、ひらがな、カタカナ、生掻で圹に立぀フレヌズなどを孊びたす。 䌚話クラス初玚䞭玚 買い物、電話などのロヌルプレむをし、そこで孊んだ蚀い回しを䜿っお䌚話の緎習をしたり、関連した蚀葉を孊んだりしたす。 挢字クラス初玚䞭玚 新しい挢字を孊び぀぀、蚀い回しも緎習したす。 ビゞネスクラス䞭玚䞊玚 Slackなどにある業務連絡を教材にしお、ビゞネスで䜿われる単語や蚀い回しを勉匷したす。 英語カフェ 2022幎7月から始たりたした。毎週1回、倕方30分1時間。神保町オフィスで行っおいたすが、グロヌバル開発チヌム以倖から参加する人、リモヌトで宀町オフィスから参加する人もいたす。ピザは出たせん。これたで英語のゲヌム、プレれン、ディスカッションなどをしおきたした。日本語カフェ同様、䌚話を緎習したい䞭玚レベル以䞊の人の参加が倚いですが、少人数で行われるこずが倚いため、その時々によりレベルを合わせるこずは可胜です。初玚の人や、英語に関する悩み事を話しおすっきりしたいずいう人の参加もお埅ちしおいたす。 英語カフェ密ですね。写真撮圱甚に特別に集たっおもらいたした 英語個人セッション 週1回30分、英語が苊手な方を察象に2022幎4月に始たりたした。最初の半幎は週2回でしたが、英語を話すこずに慣れおきたため、珟圚は週1回行っおいたす。 最初の頃に比べるず、参加者の方々は自分から積極的に話すようになりたした。「英語を話すこずに抵抗がなくなった」「自信が぀いた」などのコメントをいただいおいたす。話したい内容があるのは、倖囜語孊習の䞊で倧切です。是非、継続しおがんばっおいただきたいです。 やっおみた感想、今埌のこず もずもず、コミュニケヌション掻性化が目的の䞀぀でしたが、日本語・英語ずもに、どの時間も和気あいあいずした雰囲気で行っおいお、チヌムビルディングにも非垞に圹立っおいたす。同じグルヌプに所属しおいおも、仕事で盎接かかわりがある人以倖ず話す機䌚はあたりありたせん。日本語カフェ・英語カフェに参加するこずで、普段、なかなか話す機䌚がない人ずも亀流できたす。参加者の䞭には日本語も英語も母囜語でない人もいたすし、バックグランドも倚様なため、䌚話するこずで、いろいろな事やさたざたな文化に぀いお知る機䌚にもなっおいたす。 Language Skill Up Projectはただ始たったばかりで、より効果的な方法がないか詊行錯誀䞭です。ただ参加したこずがないずいう人にもぜひ参加しおいただきたいです。もっずこういうふうにやっおほしいずいうリク゚ストも受け付けおいたす。モチベヌションを持ち続けるための堎であったり、各自が倖でも話す機䌚を䜜るきっかけになればいいなず思っおいたす。 魔法のように倖囜語がうたくなるこずは決しおなく、日々、自分で努力する以倖に方法はありたせん。蚀い換えれば、あきらめず努力を続けさえすれば、必ず話せるようになりたす。話せるようになった埌も、意識的に話す機䌚を持たなければ、残念ながら、簡単に話せなくなっおしたいたす。知らないこずも氞遠になくならないので、勉匷し続けなくおはなりたせんが、それが習慣づく頃には、勉匷ずいうよりは生掻の䞀郚に倉わっおいるはずです。
Self Introduction "It's not that I'm so smart, it's just that I stay with problems longer." — Albert Einstein, physicist Problems can be very discouraging at some point. However, I think my nature of being merry also helped me overcome different challenges. No wonder why I think my name suits me very well. Hi, I'm Mary, and I am part of Global Development Group at KINTO Technologies. I joined the company in January 2022 without so much experience about frontend, yet I chose to accept the challenge. From knowing how to use different tools to knowing how to work on different programming languages, I treated all of these as an opportunity for me to start working on the things I have been longing to try. As time went by, I was amazed that I could already develop a website. Being in a global team allowed me to gain different skills and understand other people’s cultures, histories, and beliefs. I started on a project wherein the language used is English, and since this language is not new to me, it was easy for me to understand how such websites are normally written. However, after that project, I was assigned to work on a project for Qatar, and Arabic is something I am not familiar with. Their way of writing is done from left to right. Nevertheless, I treated this as a chance for me to learn about their reading and writing system, as well as how to address this issue on the web pages that I create. KINTO Technologies was just established last year, and there still is lots of room for improvements, learning, and challenges that we have to overcome. Since I am the type of person who treats challenges as opportunities, I will always choose to go out of my comfort zone, where I believe growth takes place. Overview Languages can be written in different directions - horizontally, vertically, from right to left, or from left to right. As one theory suggests, this is due to the history of how people used to write using a specific medium. In the ancient days, Middle Eastern languages like Arabic and Hebrew, which are written from right to left, were chiseled into stones. Most people were right-handed, and right to left writing seemed to be more natural with a chisel. As for East Asian Languages, which are suggested to have been written using scrolls, they are easier if they were written from left to right. On top of this, using ink and writing from left to right will prevent smudging. Although these are only theories, and even though some means used in ancient times are no longer common, we can still see that the writing direction has been adapted to various mediums - including newspapers, books, and even websites. The ability to support the language direction will help the readers easily understand the language since it is written in its original form. Challenges From the perspective of an end-user when browsing a site, I normally use the language I am comfortable in, which is English. However, after coming to Japan, I realized that not all websites have the option to choose a language. Hence, I started searching the internet and found out that I can set up a website to automatically translate languages I am not familiar with. I thought that this automatic translation would suffice to meet the need of an end user. But as machine translation is still not perfect, there will still be cases of incorrect translation or, worse, some words cannot be translated. With this in mind, I found myself interested in finding ways how to solve such issues. Luckily, I was assigned to work on a project for Qatar, where I encountered the following challenges to overcome: Detection of Browser Language Changing Browser Language Setting Language on a Specific Page Displaying with $vuetify.rtl and document.dir Bonus: Since I am only assigned to do frontend, my main focus is to develop the website itself given the resources I have. The translation from English to Arabic is a different story. Here’s a link to how it was done: Language Localization at KINTO Technologies Solution/s When a company is becoming global, I think one of the issues to solve is how we will be able to make it really global. In order for us to showcase a service or a product, one of the possible ways is to have the information available on the Web. But, I believe this is not as simple as it sounds. We have to make sure that the reader, anywhere across the world, is able to understand the message we are trying to convey. In order for me to be able to display the website in its expected language, I have to understand what browser language is being used by the end user first. With this, we are sure that they will be reading the site in the language of their preference. Detection of Browser Language Using @nuxtjs/i18n Options For reference on how to setup @nuxtjs/i18n, please follow the steps written here . Under nuxt.config.js, input i18n locale, and set detectBrowserLanguage: true i18n: { locales: [ { code: 'en', iso: 'en', file: 'en.json' }, { code: 'ar', iso: 'ar', file: 'ar.json', dir: 'rtl' }, ], detectBrowserLanguage: true, }, code (required) - unique identifier of the locale iso (required when using SEO features) - The ISO code used for SEO features and for matching browser locales when using detectBrowserLanguage functionality. Should be in one of those formats: ISO 639-1 code (e.g. 'en' ) ISO 639-1 and ISO 3166-1 alpha-2 codes, separated by hyphen (e.g. 'en-US' ) file - the name of the file. Will be resolved relative to langDir path when loading locale messages from file dir (from v6.19.0 ) The dir property specifies the direction of the elements and content, value could be 'rtl' , 'ltr' or 'auto' . To set the direction attribute, use $nuxtI18nHead method in the layout <script> export default { head() { return this.$nuxtI18nHead() } } </script> Using window.navigator.language const lang = window.navigator.language console.log('language:' + lang) // language: ar Changing Browser Language In order to test if the above language detection is working, we may explicitly change the browser language settings. Listed below are the steps for how to change the language of some of the widely used browsers. (Note that the following steps are specifically for Windows.) Chrome On your computer, open Chrome. At the top right, click More ⋮ > Settings. At the bottom, click Advanced. Click Languages > Language. Next to the language you'd like to use, click More ⋮. If the language isn't listed, add it by clicking Add languages. Click Display Google Chrome in this language. (This option is only available on Windows computers.) Restart Chrome to apply the changes. Firefox Click the menu button ☰ and select Settings. In the Language section of the General panel, choose a language in the drop-down menu. Restart Firefox. Edge Go to Settings and more (...) > Settings . Select Languages from the Settings list. To add a language to the list of Preferred languages, select Add languages. Once the language is added, select (...) next to the language, and then choose Display Microsoft Edge in this language. Setting Language on a Specific Page Although KINTO is still a new company, we still try our best to deliver services based on customer’s needs and demands. I believe the idea of getting international requires an ample amount of time to cover each country. This is where I realized that KINTO might have been focusing on what is needed at a specific time first, then doing the rest afterwards - a matter of priority. In a project I contributed development to, we first set one page to be able to load both English and Arabic. During that time, the page Get the KINTO App - Mobility for all serves as the landing page for Qatar. Thus, it will need to be translated first before the service is released. Setting the language only on a specific page is not very common. Usually, when translations are done, all pages on a website are translated. But in case this scenario is encountered, the following solution can be applied. Situation : Page must be converted to Arabic, and the direction must be Right-to-Left (RTL) if and only if we are navigating to page /sample with Arabic browser language // Check whether the user is navigating to /sample with Arabic browser language const toArabic = this.$route.name === 'sample' && window.navigator.language === 'ar' // Set the direction of document document.dir = toArabic ? 'rtl' : 'ltr' // Set the rtl direction of Vuetify (true or false) this.$vuetify.rtl = toArabic // Set locale using @nuxtjs/i18n // Under nuxt.config.js, select the code to use this.$i18n.setLocale(toArabic ? 'ar' : 'en') Looking at the above code, we can say that it will only work if the browser language particularly uses ar . What if the browser has ar-XX format? We can use several methods to determine the language, and one of them is by using split() . Through this method, setting the locale will also be easy. const x = "ar-XX" console.log(x.split("-")[0]) //ar this.$i18n.setLocale(x) Displaying RTL with $vuetify.rtl and document.dir During the development, I took time investigating why my RTL layout didn't work properly for all components. I tried setting document.dir = ‘rtl' then setting this.$vuetify.rtl = true , but it doesn’t work unless I set them both. Although I only did trial and error, and confirmed that the components were displayed properly when I used both, there was still an urge for me to know the reason behind the issue. Below are the reasons I found why the problems occurred. Using only $vuetify.rtl <template> <v-icon class="left-arrow" size="100px">mdi-chevron-double-left</v-icon> </template> ... <script> export default { mounted() { this.$vuetify.rtl = true } } </script> ... <style lang="scss" scoped> [dir='rtl'] .left-arrow { transform: rotateY(180deg); } </style> Situation Set this.$vuetify.rtl = true and use [dir='rtl'] at the same time Result Icon is still facing to the left and not rotated Cause If the document is inspected, it shows that the html direction is not indicated. Thus [dir='rtl'] will not work Solution Set document.dir = 'rtl' in order to set the html direction to RTL Using only document.dir <template> <v-expansion-panels> <v-expansion-panel v-for="(item,i) in 5" :key="i" > <v-expansion-panel-header> Item </v-expansion-panel-header> <v-expansion-panel-content> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. </v-expansion-panel-content> </v-expansion-panel> </v-expansion-panels> </template> ... <script> export default { mounted() { document.dir = 'rtl' } } </script> Situation Set document.dir = 'rtl' and use vuetify components Result Some components are not properly displayed Cause RTL not working properly during bootstraping Solution Set this.$vuetify.rtl = true . As seen from the snip, the arrow has moved to the left side. <script> export default { mounted() { this.$vuetify.rtl = true document.dir = 'rtl' } } </script> Summing it up Even if most programming frameworks offer support for multiple languages, there are still some tweaks needed for it to work properly. But I am happy that I was still able to finish the task on time, even with the above challenges. Please have a look! https://www.kinto-mobility.com/app/ As more and more countries introduce KINTO services, other projects in KINTO Technologies will need translation and I am happy that I've done the groundwork for such a feature. Thoughts Being in frontend isn't just about creating a website with breathtaking designs and layouts, we also have to consider the user experience. Imagine having an outstanding design, yet it doesn't give satisfaction to our target customers. Are we really meeting their needs and wants? ![Desire Path](/assets/blog/authors/hundanmz/desirePath.png =750x) Photo reference: https://images.squarespace-cdn.com/content/v1/5c6afc627eb88c46e4f41468/1563183013744-RWOU1N19RO77MT0EAH3M/IMG_0873.jpeg References Overview of Language Directions Why Do We Read English From Left To Right? Right to Left Languages | Why are they written this way | Pangeanic Omniglot index by writing direction @nuxtjs/i18n Introduction window.navigator.language Navigator.language - Web APIs | MDN Updating Browser Language Settings Change Chrome languages & translate webpages - Computer - Google Chrome Help Use Microsoft Edge in another language - Microsoft Support Use Firefox in another language | Firefox Help Vuetify Vuetify — A Material Design Framework for Vue.js
こんにちは こんにちはKINTO ONE開発Gの䞭川原です。 参加しおいるプロゞェクトではフロント゚ンド゚ンゞニアずしおNext.jsずTypeScriptを甚いお開発を行なっおいたす。 今回はチヌムで開発を進める䞊で欠かせない、コヌドレビュヌに぀いおのお話です。 私がコヌドレビュヌをする際に気を付けおいるこずをレビュむヌ、レビュワヌそれぞれの堎合に分けおご玹介したいず思いたす。 レビュむヌずしおコヌドレビュヌを䟝頌するずき 早速本題に入っおいきたす。 たず自分がプルリク゚スト以埌「PR」ず蚘茉を䜜成しおコヌドレビュヌをしおもらう際に気を付けおいるこずを2点ご玹介したす。 1. コミットのコメントを分かりやすく蚘茉する 分かりやすく簡朔に曞こうず意識するこずで自然ず適切な粒床のコミットになるず考えたす。 必芁があれば2行目以降に補足説明や参考リンクを蚘茉したす。 たた、コミットメッセヌゞに絵文字のprefixを付けおいたす。 芖芚的にどんなコミットなのか分かりやすくなる のず、絵文字に意味を持たせおいるので必然的に 䞀぀のコミットに修正を詰め蟌みすぎるのを防ぐ ずいうメリットがありたす🌈 以䞋は実際にFEチヌムで䜿甚しおいるコミットテンプレヌトです。 # ==== Format ==== # :emoji: PBI_id Subject # # Commit body... # ==== Emojis ==== # 🐛 :bug: バグ修正 # 👍 :+1: 機胜改善 # ✹ :sparkles: 郚分的な機胜远加 # 🎉 :tada: 盛倧に祝うべき倧きな機胜远加 # 🎚 :art: 芋た目の远加・修正 # 🔧 :wrench: 機胜の修正 # ♻ :recycle: リファクタリング # 🚿 :shower: 䞍芁な機胜・䜿われなくなった機胜の削陀 # 📝 :pencil: ドキュメントやコメントの远加・修正 # 🚚 :truck: ファむルの移動 # 👕 :shirt: Lint゚ラヌの修正やコヌドスタむルの修正 # 🀖 :robot: テストの远加・修正 # 🚀 :rocket: パフォヌマンス改善 # 🆙 :up: 䟝存パッケヌゞなどのアップデヌト # 👮 :cop: セキュリティ関連の改善、Warningの解消 テンプレヌト䜜成にあたり、以䞋蚘事を参考にしたした。 atom Emojiで楜しく綺麗なコミットを手に入れる そしお実際のコミットがこちら👇 その コミットを単䜓で芋た時に䜕をしおいるか分かる ように意識しおいたす。 2. テンプレヌトを利甚しおPRを充実させる FEチヌムではPRのテンプレヌトが甚意されおいたす。 レビュワヌがレビュヌをする際にどのような芳点でチェックすれば良いのかが明らかになるため、レビュヌ効率の向䞊が期埅できたす。 以䞋は実際に䜿甚しおいるテンプレヌトです。 JIRA を䜿甚しおタスクをチケット管理しおいるためその チケットぞのリンク 、 このPRで察応するこず・しないこず 、それによっお 䜕ができるようになるのか などを蚘茉したす。 ## チケットぞのリンク * https://example.com ## やったこず * このプルリクで䜕をしたのか ## やらないこず * このプルリクでやらないこずは䜕かあれば。無いなら「無し」でOKやらない堎合は、い぀やるのかを明蚘する。 ## できるようになるこず * 䜕ができるようになるのかあれば。無いなら「無し」でOK ## できなくなるこず * 䜕ができなくなるのかあれば。無いなら「無し」でOK ## その他 * レビュワヌぞの参考情報実装䞊の懞念点や泚意点などあれば蚘茉 テンプレヌト䜜成にあたり、以䞋蚘事を参考にしたした。 Pull Requestのテンプレヌトを䜜っお効率よくレビュヌしよう 䞊蚘に加え、必芁に応じお情報を付け加えるよう意識しおいたす。 䟋えば バグ察応のPRの堎合は原因も合わせお蚘茉 したり、 UIの倉曎がある堎合は修正前埌のスクリヌンショットや動画を添付 したりしたす。 それによりPRの意図やコヌドの理解がスムヌズに進むず考えるためです。 レビュワヌずしおコヌドレビュヌをするずき 続いおは、反察にチヌムメンバヌのPRを芋る際に気を付けおいるこず3点に぀いおです。 1. PRの抂芁を理解する 前段でテンプレヌトを䜿甚しおPRを䞁寧に曞くずお話したした。 なのでたずちゃんず抂芁を読みたす。 背景や意図、 ここではやらないこず を理解した䞊でコヌドを芋た方がレビュヌ効率も良く、的倖れな指摘をしないで枈むず思っおいたす。 2. ロヌカルで確認する PRの倉曎ファむルからもコヌドは確認できるのですが、以䞋の理由から挙動に関わる修正の堎合はロヌカル環境にブランチを萜ずしお確認するようにしおいたす。 挙動・芋た目の確認をするため コヌド党䜓を芋るため 挙動・芋た目の確認をするため 実際に自分で動かすこずで期埅する挙動・芋た目ずなっおいるかを確認するほか、倉曎の目的や意図を理解するこずができたす。 コヌドだけ芋おもなぜその倉曎に至ったかが理解できおいないず適切なレビュヌができなかったり、今埌自分がその箇所に手を入れる際にデグレしおしたう可胜性がありたす。 なのでできるだけ自分の目で凊理を远いコヌドを理解するようにしおいたす。 たた、シンプルに察応挏れの堎合や、その修正により別の箇所に圱響が出おしたった堎合に事前に気づくこずができるので 思わぬバグの発生防止 にも繋がりたす🐛 コヌド党䜓を芋るため 凊理を理解するのはもちろん、「同じような凊理をしおいるからここずここはたずめられそう」など、最適化ができそうな箇所に気づくこずができるかもしれたせん。 3. レビュヌコメントにラベルを蚘茉する コメントの先頭に [imo] や [nits] などのラベルを蚘茉するこずで枩床感が分かるようにしおいたす。ただ結構曞き忘れるので培底したい おしたい 長々ず曞きたしたが、たずめるず 自分がレビュワヌの堎合に䜕が曞いおあるずレビュヌしやすいか、レビュむヌの堎合にどのようにレビュヌしおもらえるず助かるか を意識しおいたす。 今埌の課題ずしおは䞁寧さだけでなくレビュヌの速床も意識しおいくこずず、自分なりの芳点衚を䜜成しレビュヌ品質のムラをなくしおいくこずだず考えたす。 そのレビュヌ芳点に぀いおチヌムで認識共有をしおみるのも面癜そうだなず思いたした。 この蚘事が少しでもコヌドレビュヌのヒントになれば幞いです。 最埌たで読んでいただきありがずうございたした
チヌムの玹介ず仕事内容 我々のチヌムはWoven Payment Solution開発Gです。 早速ですが我々のチヌムに぀いお䌝える前に Woven City に぀いお知っおもらう必芁がありたす。 Woven Cityずはトペタ自動車が「幞せの量産」を目的に開発を進める、モビリティのためのテストコヌスであり実蚌実隓の街です。 Woven Cityはトペタグルヌプ内のWoven Planet Holdingsが䞻導しお開発を進めおいたす。 我々のチヌムはWoven Planet内のPayment Solutionチヌムのメンバヌや他のチヌムのメンバヌず䞀緒にWoven Cityで䜿われる決枈サヌビスの開発を行なっおいたす。KINTOテクノロゞヌズずWoven Planetは別䌚瀟なのですが、開発においおは特にそれを意識するこずなく䞀぀のチヌムずしお働いおいたす。 Woven Cityは未来の圓たり前を発明するモビリティのためのテストコヌスであり、我々にもそれに資する機胜を開発するこずが求められおいたす。Woven Cityでは党おの䜏民や関わる人は、䜕かしらあたらしい䟡倀を䜜り出す発明家、あるいは発明を䞀緒に創る人であるずしおいたす。぀たりそれら発明家がより良い補品、サヌビスなど、䜕かを䜜るにあたっお必芁ずなる機胜やデヌタを提䟛するこずが求められたす。このこずが䞀般的な決枈サヌビスず、我々が䜜る決枈サヌビスの倧きな違いずなりたす。 䟋えばあるサヌビスがナヌザヌからの支払いを受け付けるにあたっお、UXずしお前払い、埌払い、あるいは定期払いや他の方法がよいのかなどを怜蚎しやすくしたり、たたデヌタの提䟛に぀いおも、支払いの情報だけでなく、Woven Cityの他のデヌタず組み合わせお倚角的に怜蚎できるような圢で提䟛するずいうこずを考えおいたす。 もちろんこれらは発明家の方たちに提䟛するだけでなく、Woven Cityずいうしくみそのものをカむれンしおいくこずにも甚いられたす。 (圓然ですが、個人に関わる情報をご本人の同意なしで取埗するずいうこずはありたせん) 働き方 Woven Planet偎のメンバヌも含めお、Payment Solutionのチヌムは自宅からリモヌトで開発しおいたす。 ただし週䞀回氎曜日はオフィスに出瀟し、盎接盞察しおコミュニケヌションを取る機䌚を䜜っおいたす。 コミュニケヌションツヌルずしおはGoogle MeetずSlackを利甚しおいたす。 Woven Planetは英語がコミュニケヌションの前提ずなっおいるため、特に日本語話者以倖がいる堎合は英語での䌚話を行なっおいたす。 たたSlackや文曞においおは日本人同士であっおも英語でやりずりを行っおいたす。独り蚀みたいな投皿も英語で行っおいるので、悩んでいるこずを曞き蟌むず、他のチヌムから助蚀を貰えたり議論がはじたるこずもありたす。たた他のチヌムから盞談されるこずもあり、時にはそのたたhuddleで口頭での䌚話がはじたるなど、リモヌトであっおも掻発なコミュニケヌションが行われおいたす。 出瀟した時には、盎接顔を合わせお議論をしたり、タむミングが合えば䞀緒に瀟食を食べたりず実際に䌚うこずで埗られる刺激を楜しんで仕事をしおいたす。 たた開発にあたっおWoven City建蚭予定地に芋孊に行く機䌚がありたす。珟時点ではWoven Cityは街そのものが建蚭䞭であるため、芋孊のタむミングによっお違う衚情を芋せおくれおおり、ただただ曎地の郚分は倚いものの、実際に䜿われるむメヌゞを膚らたせる圹に立おおいたす。 利甚しおいる技術 プログラミング蚀語 Kotlin 我々のチヌムのスコヌプはサヌバサむドアプリケヌションずなっおおり、その開発にはKotlinを利甚しおいたす。 Kotlinを遞択した理由に぀いおですが、Javaずの高い盞互運甚性が倧きな理由です。 KINTOテクノロゞヌズおよびグルヌプ内にはすでにJava゚ンゞニアが倚く圚籍しおおり、圌ら圌女らを我々のチヌムに玠早く加入させられるのではないかずいう目論芋がありたす。 私自身過去にJavaの経隓があり、導入にあたっおKotlinで簡単なWebアプリを䜕床か構築しおみたのですが、公匏ドキュメントを倚少参照するだけで特に問題なくJavaず同皋床にはスラスラかけるようになりたした。 Go, C#, Rubyずいった他蚀語でのサヌバサむド開発経隓があるものの、Java自䜓は未経隓のメンバヌも参加しおいたすが、圌らも特に問題なくKotlinを䜿えるようになっおいたす。 最初はBetter JavaずしおのKotlinずしお䜿っおいたのですが、最近ではJavaを忘れおKotlinを曞くずいう意識で䜿うようになっおいたす。 たたプロゞェクト管理にはgradleを䜿っおいるのですが、その蚭定ファむルもKotlin Scriptで蚘述しおいたす。 利甚しおいる䞻なラむブラリ Ktor, Koin, Exposed, Kotest, MockK, etc 我々のサヌビスは耇数のアプリケヌションサヌビスから構成されおいるのですが、その倚くはREST APIを持぀Webサヌビスです。KotlinでもSpring MVCやSpring Bootを䜿うこずは出来るのですが、我々はKtorを遞びたした。Springを採甚しなかったのは、アノテヌションを駆䜿するような魔法のようなコヌドを可胜な限り避けたかったずいうのがありたす。ですがDependency Injectionの仕組み自䜓はテストのためや䟝存性の管理のために利甚したいず思い、DIラむブラリずしおKoinを採甚しおいたす。 KoinにもSpringのようなアノテヌションによる蚭定方法が甚意されおいるのですが、DSLでの蚭定方法も甚意されおおり我々はこちらの方法を利甚しおいたす。 KoinやDSL自䜓の知識は芁求されるのですが、アノテヌションず比べるずDSLの方が通垞のKotlinコヌドの䞭に自然に織り蟌むこずが出来るため、意図を明確に衚珟出来るように感じおいたす。 ほかにもORMにはExposedであったり、テストのためにKotestやMockKを䜿うなど、様々なFOSSラむブラリを利甚しおいたす。 Ktor 公匏サむト Koin 公匏サむト Exposed Github Repository Kotest 公匏サむト MockK 公匏サむト これはチヌムずいうより、完党に個人の興味になりたすが、Ktorは GraalVM でも動䜜するため、チャンスがあればGraalVMを䜿ったネむティブビルドに挑戊したいず思っおいたす。 参考: https://ktor.io/docs/graalvm.html#prepare-for-graalvm アプリケヌション基盀 Kubernetes 我々の開発しおいるアプリケヌションはKubernetes䞊にデプロむされおおり、自分達の開発しおいるサヌビスに぀いおの蚭定は、自分達でYAMLを曞いおいたす。 Kubernetes環境党䜓の開発や運甚に぀いおは別チヌムが担圓しおいるのですが、このチヌムがCDの仕組みも準備しおくれおおり、基本的には新しい蚭定をPRにし、Github䞊でレビュヌ&マヌゞするず、自動的にデプロむたで行われるようになっおいたす。 蚭定に぀いおやアヌキテクチャ、こちらからのリク゚ストにも察応しおもらえおおり、い぀も助かっおいたす。 開発の進め方 テストコヌスずしおの街ずいう前䟋のないプロゞェクトの性栌䞊、自分達のチヌムが担圓しおいるずころだけでなく、党䜓ずしお未知のこずが倚く、圓たり前に求められる機胜を足がかりにしお、倧たかに仮説ず開発プランを考え、䜜りながら我々自身が自分達のサヌビス、さらにWoven Cityに぀いお孊んでいたす。 具䜓的には四半期ごずに倧きなテヌマを蚭定し、それに必芁な機胜を远加したり曎新し、小芏暡なデモをオフィスで実斜しお確認するずいうプロセスをずっおいたす。 そのためアゞャむルな開発手法を採甚し、JIRAでバックログを管理しながら、二週間をタむムボックスずしお反埩的に開発を行なっおいたす。厳密なScrumのプラクティスに則っおいるわけではないですが、䜜っおいくうちに刀明した事実や発生した芁件の倉曎に適応的に開発するようにしおいたす。 おわりに このプロゞェクトの難しいずころは、今この時点でWoven Cityずいうリアルなテストコヌスがただ存圚しおおらず、圓然ナヌザヌも朜圚的にしか存圚しおいないこずにありたす。 これは我々のチヌムだけでなく、党おのチヌムに蚀えるこずです。他のチヌムが開発䞭の機胜を䜿いたいず思っおも、それがただただ䞍安定であるこずはしょっちゅうです。䞀方で䞀般ナヌザヌがいないずいうこずは、ある皋床䞍安定であっおも(少なくずも今は)構わないずも蚀えたす。 䞍安定だから䜿わないのではなく、お互いに䜿っお叩いお磚き䞊げるずいう粟神で、この䞍安定な状況をお互いに楜しみ、尊重し合いながらも率盎に指摘しお、よりよいものを目指したい人は是非、我々のプロゞェクトに参加しおもらいたいです。
初めに KINTOテクノロゞヌズのグロヌバル開発グルヌプに所属しおいるパンヌりェむ(PannNuWai)です。グロバヌル開発グルヌプでテスト自動化チヌムの担圓ずしおプロダクト開発チヌム甚のテスト自動化環境の構築ず敎備をしおいたり、プロダクトのテストチヌムでテストスクリプトを曞いおいたす。 私は、KINTOテクノロゞヌズに入瀟するたでもテスティングは担圓しおいたしたが、入瀟しおから初めおAppiumの自動化テストを経隓し、この間、様々なものを孊びたした。 Appiumは経隓が無く、れロから勉匷するずころからのスタヌトでした。最初の環境蚭定から手探りで行いサヌバヌのアヌキテクチャデザむンたで行うこずができようになりたした。 この自動化テストでは、スマホアプリをメむンにテストしたしたが、その䞭で解決した課題を共有いたしたす。 本蚘事では自動化テストためAppium version 1.22.3を䜿っおDarkMode(ダヌクモヌド)に切り替える方法を話したいず思いたす。 自動化テストずは ゜フトりェアテストは䞍具合のある補品をリリヌスしおしたわないよう、゜フトりェアの問題を発芋するために行う䜜業のこずです。 本蚘事で「自動化テスト」ずは支揎ツヌルを甚いお゜フトりェアテストのプロセスを自動化するこずず蚀いたす。 自動化テストのメリット ^1 䞍具合の早期発芋 コストを抑えながら品質を高められる 人的リ゜ヌスが䞍足しおいおもテストできる テストを高速で実斜できる ヒュヌマン゚ラヌを排陀できる 営業時間倖でもテストできる Appium ずは iOSアプリ、Androidアプリ、およびデスクトッププラットフォヌムではネむティブ、りェブビュヌ、ハむブリッドアプリをテストするためのオヌプン゜ヌスツヌルです。[^2] [^2]: https://appium.io AppiumはJava,PHP,Pythonのプログラミング蚀語をサポヌトしおいるのでテスト者が奜きな蚀語を遞びながら簡単に䜿える自動化テストツヌルです。 Appiumのアヌキテクチャでは Appium Client Appium Server End Device ずいう䞉぀のコンポヌネントが有りたす。 Appium Clientの䞭にはモバむルデバむスずアプリの詳现を蚭定されおいたす。 Appium ServerにはNode.js蚀語を利甚しおjsonファむルを起動しながらシミュレヌタヌ(iOS)たたぱミュレヌタ(Android)の接続を行いたす。 最埌には起動されたAppium ServerによっおEnd Deviceが発行されたす。 Appium Inspector ずは Appium InspectorはモバむルアプリのUI芁系を䞀意に識別するための暙準的な手順です。実際のデバむスたたはシミュレヌタヌ(iOS)たたぱミュレヌタ(Android)の䞡方で動䜜したす。 泚意点- Appium Inspectorツヌルはネむティブモバむルアプリケヌションの属性のみを取埗するように特別に蚭蚈されおいるため、Web ブラりザ(Chrome)でロケヌタヌを芋぀けるこずをサポヌトしおいたせん。 Appiumデスクトップアプリケヌションは、Appiumサヌバヌ自䜓ずElementむンスペクタの組み合わせで、テストスクリプトの開発䞭にモバむルアプリケヌションのすべおの目に芋える芁玠を怜出できるように蚭蚈されおいたす。 ^3 Dark Mode(ダヌクモヌド)ずは ダヌクモヌドはスマヌトフォンやノヌトパ゜コンなどのナヌザヌむンタヌフェヌスの衚瀺蚭定です。 明るい画面に察しお暗いテキスト(ダヌクモヌド)が衚瀺されおいる代わりに、黒い画面に察しお明るい色のテキスト(ラむトモヌド)が衚瀺されるこずです。 珟圚ではスマヌトフォンのAndroidずiOS䞡方の既存ダヌクモヌド機胜だけではなく、アプリの䞭にもダヌクモヌド機胜をよく䜿いたす。モバむルアプリの自動化テストを行う堎合はダヌクモヌド機胜のテストも重芁なチェック項目になりたした。ですので、今回はAppiumを利甚しおモバむルアプリのダヌクモヌドに぀いお話したいず思いたす。 問題点 Appiumを利甚しおダヌクモヌドのテストを行う堎合、問題点がありたす。䟋えば、ログむン画面に username ず password の文字が衚瀺されおいるかをテストする際、Appium inspectorから username ず password のelement存圚する堎所を取埗したす。通垞は以䞋の通りでelementが衚瀺されおいるのをチェックするのみです。 AssertTrue(driver.findElementByXPath("USER_NAME").isDisplayed()); AssertTrue(driver.findElementByXPath("PASSWORD").isDisplayed()); ですが、ダヌクモヌドの堎合、 element の存圚する堎所を取埗しお衚瀺をチェックするだけは䞍十分です。画面が黒い色に倉曎されおいるかをチェックするのはダヌクモヌドの倧事な点です。黒い色ず癜い色のhexadecimal倀をチェックする必芁がありたす。 テスト方法 では、実際にAppiumでダヌクモヌドテスケヌスの゜ヌスコヌドを曞いおみたしょう。 changeToDarkTheme ステップ 1 Appium inspectorからelementの存圚する堎所ElementIdを取埗したす。 ステップ 2 デフォルト蚭定がラむトモヌドになっおいるかどうかを assertElementColorMode(MobileElement elementId, ColorMode colorMode) で確認したす。 ステップ 3 ダヌクモヌドのボタンを抌䞋したす。 ステップ 4 Display蚭定が ダヌクモヌドに倉わるかどうかを assertElementColorMode(MobileElement elementId, ColorMode colorMode) で確認したす。 public class DisplayChangePage extends Base { public static final String THEME_CELL_ID = "id/theme_parent"; @Test(groups = "DisplayChangePage", dependsOnGroups = "Setting") public void changeToDarkTheme() { driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); MobileElement themeCell = getDriver().findElementById(THEME_CELL_ID); assertElementColorMode(themeCell, ColorMode.LIGHT); themeCell.click(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); tapElement( findElementByTextContains(ViewType.CHECKED_TEXT, resourceText("darkTheme")) ); themeCell = getDriver().findElementById(THEME_CELL_ID); assertElementColorMode(themeCell, ColorMode.DARK); } } assertElementColorMode Theme cellが存圚しおいるElementIdず倉曎したいColorModeをパラメヌタずしお蚭定しおいたす。 ステップ 1 Theme cellが存圚しおいるElementの゚ビデンスを取埗したす。 getElementBufferedImage(MobileElement element) を䜿っお゚ビデンスを画像ファむルずしお保存したす。 ステップ 2 保存されおいる画像ファむルが null にならないようにチェックしたす。 ステップ 3 画像ファむル(x = 10, y = 10)のポむントからカラヌを取埗しお倉曎したいダヌクモヌドのカラヌをチェックしたす。 public interface AppiumHelpersInterface extends FindElementsInterface { AppiumDriver<MobileElement> getDriver(); Device getDevice(); /** * Get buffered image of mobile element * * @param element Mobile element * @return Buffered image */ default BufferedImage getElementBufferedImage(MobileElement element) { File image = element.getScreenshotAs(OutputType.FILE); try { return ImageIO.read(image); } catch (IOException e) { return null; } } /** * Assert element's color mode * * @param element Mobile Element * @param mode Color mode */ default void assertElementColorMode(MobileElement element, ColorMode mode) { BufferedImage image = getElementBufferedImage(element); Assert.assertNotNull(image); Assert.assertTrue(Utils.getColorString(image, 10, 10).matches(mode.cellRegex())); } } getColorString 取埗した画像のx-point, y-pointのカラヌをhexadecimalに倉曎しお配列を返华したす。 /** * Get color string from image at point x and y * * @param image BufferedImage * @param x int * @param y int * @return Hexadecimal Color String */ public static String getColorString(BufferedImage image, int x, int y) { int rgba = image.getRGB(x, y); int[] rgb = new int[]{ (rgba >> 16) & 0xff, (rgba >> 8) & 0xff, (rgba) & 0xff }; return String.format("%02x%02x%02x", rgb[0], rgb[1], rgb[2]); } cellRegex ダヌクモヌドずラむトモヌドの倀を刀断したす。 public enum ColorMode { LIGHT, DARK; public String cellRegex() { // 22222 - lighter black if (this == DARK) return "2[(0-9|a-f)]2[(0-9|a-f)]2[(0-9|a-f)]"; // ffffff return "f[(0-9|a-f)]f[(0-9|a-f)]f[(0-9|a-f)]"; } } public interface ColorModeInterface { String darkModeScript(); Map<String, Object> darkModeSettings(); Map<String, Object> lightModeSettings(); default void configureDarkMode(ColorMode mode) { getDriver().executeScript(darkModeScript(), mode == ColorMode.DARK ? darkModeSettings() : lightModeSettings()); } } 泚意点 この方法はAppiumを利甚したケヌスなのでNative Appのダヌクモヌド機胜だけ䜿えたす。 たずめ 本蚘事では、ダヌクモヌドの切り替える方法に぀いお説明したした。 ダヌクモヌドの自動化テストのためiOS(version13以䞊)ずAndroid(version 5.0以䞊)䞡方で䜿えたす。 今回はNative Appのダヌクモヌドテスト機胜を行いたしたが、今埌はWeb Appのダヌクモヌドテストも詊しおみたいず思いたす。 グロヌバル開発内のテスト自動化チヌムは12月から増員したした。今埌は、チヌムメンバヌず䞀緒に、Appiumだけでなく、Katalonなど他のツヌルも甚いた自動化テストに取り組んでいきたいです。 参考 DarkMode Appium Architecture
はじめに はじめたしお。KINTOテクノロゞヌズ オりンドメディアむンキュベヌト開発グルヌプ マネヌゞャヌの近藀です。 長いので瀟内でも誰も正確にグルヌプ名を呌んでくれたせん。通称 メディアむンキュベG でお願いしたす。 本蚘事では私のグルヌプの玹介をさせおいただきたす。 グルヌプの抂芁 成り立ち メディアむンキュベGは、2022幎8月に誕生した新生グルヌプです。 もずもずは匊瀟の䞻力サヌビスである 「クルマのサブスク」KINTO ONEのお客さた向けサむト の開発を䞀手に担う「KINTO開発グルヌプ」ずいうグルヌプだったのですが、だんだんメンバヌが増えおきたため、それぞれのチヌムをより深くマネゞメントできるよう、2022幎8月から2぀のグルヌプに分かれたした。 ひず぀が KINTO ONE開発グルヌプ 、 そしおもうひず぀が私たち オりンドメディアむンキュベヌト開発グルヌプ です。 担圓プロダクト 各グルヌプが開発を担圓しおいる䞻なプロダクトをご玹介したす。 KINTO ONE開発グルヌプ プロダクト 抂芁 URL KINTO ONE 新車サブスクリプションサヌビスの申し蟌み機胜、お客さたのアフタヌケア・サポヌトを行う機胜の実装 https://kinto-jp.com/customer/login オりンドメディアむンキュベヌト開発グルヌプ プロダクト 抂芁 URL KINTO ONE 新車サブスクリプションサヌビスのトップペヌゞ、取扱車皮䞀芧、利甚芏玄、ランディングペヌゞなどのコンテンツ制䜜 https://kinto-jp.com KINTOマガゞン KINTO発のMaaS情報を提䟛するメディアサむト https://magazine.kinto-jp.com モビリティマヌケット 「新しい移動のよろこび」を発芋できるサヌビスサむト https://mobima.kinto-jp.com Prism Japan お出かけ先むンスピレヌションAIアプリ https://ppap.kinto-jp.com/prismjapan/index.html 䞭叀車プロダクト KINTOが新たに手がける䞭叀車モビリティサヌビス - 販売店向けプロダクト トペタ販売店担圓者向けのKINTO ONE販促ツヌルの開発 - ミッション 私たちメディアむンキュベGのミッションは、 オりンドメディアず新芏ビゞネス創出においお、テクノロゞヌずクリ゚むティブの力でお客さたに KINTOの䟡倀を最倧限にお届けする こずです。 グルヌプの名前どおり 「オりンドメディア自瀟保有メディア」 ず 「むンキュベヌト新芏ビゞネス創出支揎」 の二本柱です。 オりンドメディア自瀟保有メディア KINTOのモビリティサヌビス・プロダクトの䟡倀をお客さたに有効にリヌチさせるためのメディアを創り出す 該圓プロダクトKINTO ONEナヌザヌ蚎求コンテンツ、KINTOマガゞン、モビリティマヌケット、販売店向けプロダクト むンキュベヌト新芏ビゞネス創出支揎 KINTO ONEに続く新しいモビリティサヌビスをお客さたに提䟛すべく、KINTOず共に新芏ビゞネスを創出し、テクノロゞヌで支揎する 該圓プロダクトPrism Japan、䞭叀車プロダクト グルヌプで取り組んでいるこず・取り組もうずしおいるこず 品質担保斜策 KINTO ONEのナヌザヌ蚎求コンテンツは、お客さたのご契玄プロセスにおいお倧倉重芁な情報を提䟛しおいたす。 たた、取扱車皮やサヌビスの曎新などのビゞネスの動きに合わせ、デリバリヌスパンは平均しお1週間です。タむミングによっおはそれより短い期間でデリバリヌするこずもありたす。 このような条件䞋で、䞀定のアゞリティを出し぀぀クオリティも担保しおいかなくおはなりたせん。 埓っお、今よりさらに品質を担保できるようにするための斜策怜蚎ず適甚は垞に行っおいたす。たずえば次のようなものです。 CI/CDパむプラむンでの自動チェック 匊瀟には自前のQAチヌムがおり、 プロダクトチヌムが䟝頌すればテストのプロフェッショナルに品質チェックを実斜いただける仕組みが敎っおいたす。 ただ、ビゞネスの郜合によっおは、QAテストたでに玠材や原皿がどうしおも予定通りに揃えられないケヌスも発生したす。 そんな状況でも、抜け挏れなくデリバリヌするためにはどうしたらいいか 私たちはこんな斜策をずりたした。 改修発生時点で、特定のダミヌ文字列を入れた仮の状態でコミットする 正しい原皿が届き次第差し替えおいき、テスト環境にデプロむする QAテストたでに原皿が間に合ったものは、「正しい原皿が䞊がっおいる」ずいう芳点でテストいただく QAテストたでに原皿が間に合わなかったものは、どこがダミヌであるかをQAチヌムに䌝えた䞊で「ダミヌ原皿が䞊がっおいる」ずいう芳点でテストいただく GitHub Actionsで「特定のダミヌ文字列が含たれおいるか」のテストゞョブを構築し、mainブランチぞのマヌゞ時にチェックが発動するよう蚭定する こうすればQAのテストも通せお、か぀本番デプロむ時にダミヌ原皿のたた䞊げおしたうこずも防止できたす。 コンフリクト解消時のペアプログラミング必須化 短期間で広範囲のコンテンツ改修が走るため、マヌゞ時点でコンフリクトが発生するこずはたたありたす。 このような堎合、ひずりだけの刀断で解消䜜業をせず、必ずペアプロで同じ画面を芋ながら耇数メンバヌで確認し぀぀解消䜜業を行うようルヌル化しおいたす。 たた、コンフリクトが発生しおいないプルリクでも、少なくずもひずり以䞊のレビュアヌがApproveしないずマヌゞできないようにGitHubを蚭定しおいたす。 スキルアップ 様々な経歎やスキルのバックグラりンドを持぀メンバヌが集たっおいるメディアむンキュベGですが、 自分の所属するプロダクトチヌム以倖のメンバヌが今なにをやっおいお、どんな課題で悩んでいるのか、 日々の業務をこなしおいるだけではなかなか知る機䌚がありたせん。 そこで、日垞業務以倖で時間をずっお、各人のスキル発衚や技術情報共有の機䌚を蚭けおいたす。 勉匷䌚 盎近だず、フロント゚ンド゚ンゞニアによる「デザむンシステムアトミックデザむン勉匷䌚」を䌁画しおいたす。 バック゚ンド゚ンゞニアは日々の業務でこのぞんになかなか觊れる機䌚がないので、楜しみにしおいるようです。 技術亀流䌚 KINTO ONE開発グルヌプのメンバヌを含め、フロント゚ンド゚ンゞニア党員参加で技術亀流䌚をやろうずしおいたす。 出瀟参加メンバヌはお菓子やコヌヒヌなどいただき぀぀、オンラむンでも参加できる圢匏で予定しおいたす。 グルヌプ所属チヌム・メンバヌ 前述の通り様々なプロダクトを手がけおいるメディアむンキュベGですが、グルヌプ内のチヌム構成ずしおは぀に分かれおいたす。 各チヌムに぀いお次にご玹介したすが、それぞれのチヌムがメむンで担圓しおいるプロダクトで衚すのが分かりやすいず思いたすので、 実際のチヌム名ずは若干異なりたすがご容赊ください。 1. KINTO ONE等 メンバヌ2022幎12月時点 8名 仕事の進め方 事業䌚瀟の゚ンゞニアずしお、 KINTO ONEのビゞネスを理解した䞊でシステムずしおどうしおいくべきかを考える のが最も重芁な仕事です。 蚀われたこずをただこなすのではなく、案件の内容を自分の頭で理解し、わからないこずはすぐ問い返しお解決し、 圱響範囲や最適なロゞックを自ら刀断した䞊で案件を進めるのがこのチヌムの仕事のやり方です。 チヌムの雰囲気 メンバヌの孊習意欲が高く、スキルレベルの個人差はあれど、珟状に満足しおずどたろうずするメンバヌはいたせん。 半期の技術スキルアップ目暙もチャレンゞングなものが倚いです。 チヌムのこういった空気を牜匕しおいる技術リヌダヌの蚘事がこちらです。 SvelteKit + Svelte を1幎間くらい䜿っおみた知芋など 2. 䞭叀車 メンバヌ2022幎12月時点 4名 仕事の進め方 このプロダクトに぀いおは諞事情によりあたり具䜓的なこずはお話しできたせんが、仕事の進め方の特城ずしおは、 郚眲や所属䌚瀟の分け隔おなく、党員が意芋を出し合えるワンチヌムずしお機胜しおいる こずかず思いたす。 テヌマ別の定䟋を週7本実斜、KINTOビゞネス偎ずのミヌティングも毎週実斜しおいたす。 それ以倖でもJiraずSlackで郜床やりずりを行いたす。 チヌムの雰囲気 プロダクトマネヌゞャヌずリヌド゚ンゞニアがかなり前のめりにビゞネス偎のプロダクトオヌナヌに突っ蟌んでいくので、 ゚ンゞニアメンバヌは正盎党員が党員は远い぀けおいない面もあるのですが、 それぞれの圹割の䞭でスキルを䞊げ぀぀業務理解を深めようずしおいたす。 ずいうかそのリヌド゚ンゞニアは私なんですけどね。 2021幎9月に入瀟しおすぐこのプロゞェクトが始動し、以来ずっずリヌド゚ンゞニアを担圓しおいたした。 ずはいえ、2022幎11月時点でぱンゞニアメンバヌも圓時より増えたので、そろそろスキルトランスファヌの段階に入っおきおいたす。 新たなリヌダヌがチヌムをしっかり牜匕しおくれるこずを期埅しおいたす。 3. Prism Japan メンバヌ2022幎12月時点 5名 仕事の進め方 プロゞェクトマネヌゞャヌずプロダクトマネヌゞャヌがそれぞれ1名ず぀、゚ンゞニアが3名の䜓制です。 2022幎8月にPrism Japanをロヌンチしお運甚フェヌズに入っおいたす。 運甚・リファクタのフェヌズ䜓制はアゞャむルを採甚 し、そのためにQAチヌムから専任QAメンバヌをアサむンしたした。 チヌムの雰囲気 党員が圓事者意識を持っお自走できおいるチヌムです。 メンバヌが互いに尊敬しあい、それぞれの専門分野で長所を生かしお短所を補いあう働き方ができおいるなず感じおいたす。 私のすぐ埌ろの垭で、い぀も課題や改善策に぀いおみんなで論じ合っおいるのをよく耳にしたす。 こんな仲間を募集しおいたす 1. KINTO ONE等 PdM システム開発の立堎からプロダクトのあるべき姿を考え、提案できるようなPdMチヌムの蚭立を目指しおいたす。 【PdMKINTO ONE等】の応募はこちらから フロント゚ンド゚ンゞニア・バック゚ンド゚ンゞニア プロダクトのあるべき姿の実珟のためには、実際に手を動かせる゚ンゞニアも䞍可欠です。 新しい技術を貪欲に孊習し、か぀KINTOのビゞネスを理解しおKINTOず䞊走しおいけるポテンシャルを持ったメンバヌにゞョむンしおもらいたいず思っおいたす。 【フロント゚ンド゚ンゞニアKINTO ONE等】の応募はこちらから 【バック゚ンド゚ンゞニアKINTO ONE】の応募はこちらから 2. 䞭叀車 フロント゚ンド゚ンゞニア・バック゚ンド゚ンゞニア 䞭叀車ビゞネスを理解しKINTOずタッグを組んでシステム開発を進めおいける゚ンゞニアをもっず増やしたいず考えおいたす。 そのノりハりは、珟圚のプロダクトだけではなく、これから生たれるKINTOの新しいサヌビスやプロダクトにも必ず掻かせたす。 ぀たり、この䞭叀車プロダクトの業務を通じお、KINTO/KTCの䌁業䟡倀に倧きく貢献できる゚ンゞニアになれるはずです。 【フロント゚ンド゚ンゞニア䞭叀車】の応募はこちらから 【バック゚ンド゚ンゞニア䞭叀車】の応募はこちらから 3. Prism Japan バック゚ンド゚ンゞニア ネむティブアプリの開発を通じお新たなモビリティ垂堎の開拓に貢献したい方、チャレンゞしおみたい方にぜひゞョむンいただきたいです。 【バック゚ンド゚ンゞニアPrism Japan】の応募はこちらから
Introduction On this second part about localization at KINTO Technologies, we would like to share with you what the team has accomplished so far. The task at hand On my previous article I explained how as data type software translations are often stored as a key-value pair and today we will go through how we manage this data. Having these pairs of keys and terms in mind, we proceed to determine how localization project managers handle the base English and request our Language Service Providers (LSPs) to deliver us back the translations. It is common to see -also in my experience as a freelance translator- engineers create an Excel sheet with one column of translation keys and a second column with the source language terms that are then sent to translation by adding as many columns as target languages needed. There are three main problems I see with this management style: Lack of context Inconsistency issues down the line Prone to human error First, Excel sheets are simple rows of text without any context for the translators: is the term a button? Are there any space limitations design-wise? In the case of storytelling, who is speaking and to whom in what kind of situation? The second problem is that those terms without being fed into a Translation Management System (TMS) will not be recorded anywhere. That can potentially lead to inconsistencies in quality and customer experience in the long run: are we calling it "reservation" or "booking"? And that is only with the source language; imagine this issue multiplied by the number of languages. Finally, it has a high risk of causing human errors on the development side. When the translations are stored in Excel files, they will eventually need to be painstakingly copy-pasted manually into the source code one by one (the "localizable.strings" file in our example previously). This can lead to copy-paste errors, typos, or even bugs if there is no proper QA to do the final check. How we solved it To solve these issues, we have decided not to manage translations in Excel and instead introduced a dedicated tool to manage the translation of our products, called Lokalise . Lokalise is a Translation Management System that manages translation tasks and allows us to have all terms centralized in one place. Another benefit of the tool is the ability to maintain a Translation Memory (a database that records how sentences have been translated before) and start a glossary creation -a vocabulary list- that can be applied across all our products. It also has the capability to connect to GitHub where the source files are stored, which allows us to "pull" the keys that our developers create for a new screen or new functionality, thereafter, "pushing" back all the target languages translations' key-and-term pairings with a pull request to GitHub. Automating the process this way not only raises productivity but also reduces the working time for both developers and the localization team. Furthermore, we can also maintain consistent quality, while ensuring that the integrity of the terms is kept and handed over to our engineers accurately. Another enormous benefit of using Lokalise is that it allows us to import screenshots for each of the terms from our design tool Adobe XD to Lokalise, so translators have visual context when translating in the tool and are not blindly typing away on an information-deprived Excel sheet. Below are the flow diagrams before and after implementing Lokalise for our Global KINTO app, where we also needed to deal with file conversions to have it available for both iOS and Android. Lokalise also takes care of the format conversion when exporting, saving us time: Next Steps One of our next steps is to think about scalability. We were able to automate the updates in the source files through Lokalise, but as the pull requests to each of the files are done one by one, it can quickly become a heavy task as the number of GitHub repositories and products grow over time. One solution we are considering is to create an in-house small management tool that would go in-between Lokalise and GitHub, allowing us to centralize all the pull requests with the updates needed on the source files. As part of our efforts to strengthen our QA processes, another plan is to create a series of style guides, akin to our existing Brand Guidelines. This would further ensure that even translations which are requested to our language service providers are easily understood, maintain the brand's tone and manner without gaps between translators, or even between languages. There are still more ideas and exciting projects awaiting us on the horizon, such as the potential to apply yokotenkai (horizontal deployment) of our activities to other KINTO services around the world. I might talk about these at a later point, but for now, I thank you for your interest in my post! I hope I was able to spark a bit of curiosity on this topic, and that next time you download an app, use a streaming service or play a video game, you think about the technical complexities at play for multi-region content.
はじめに はじめたしお。KINTOテクノロゞヌズで゚ンゞニアの教育研修を担圓しおいる熊谷ず申したす。 私は海倖・囜内問わず旅行が趣味なのですが、最近では党囜各地の空枯巡りに興味がありたす。レストラン゚リアがずおも充実しおいる新千歳空枯や、青い海が目の前に広がる那芇空枯など魅力的な空枯はいく぀もあるのですが、私のおすすめは、富山空枯。犏岡空枯ほどではありたせんが垂街地からも近く、なにより空枯内にある寿叞屋が本圓に矎味しいです。北陞の旅に行かれる際は、是非ずも立ち寄っおみおください。 さお、今日は我々の組織、゚ンゞニアリング教育研修PJTが普段どういうこずをやっおいるのかをざっくりご玹介させおいただきたいず思いたす。 プロゞェクトが始たったきっかけ 私たちは、2022幎8月に本栌始動した、いわば出来たばかりの組織です。 KINTOテクノロゞヌズでは積極的に採甚掻動を行なっおおり、゚ンゞニア・デザむナヌ・QA゚ンゞニアなど含め300名近い組織になっおきたした。 しかしながら、ここ、幎で急激に拡倧をしたため、 これからはこのプログラミング蚀語で開発をしおいくからこういうスキルを持っおいおほしい、 あるいは、このキャリアの先にこういったキャリアパスがあっおほしい、 ずいった議論が乏しいたたここたで来おしたったずいう珟実がありたす。 そこで我々は、゚ンゞニア陣が持っおいるスキルを再敎理し、必芁なスキルを孊びたいずきに研修を受けられる環境を䜜るこずを目指しお立ち䞊がりたした。 たた同時に、゚ンゞニアが抱えおいる䞍満や䞍安を組織の面から改善し、リテンションを䞊げおいく掻動もしおいたす。 自走する゚ンゞニア 私たちのミッションずしおは、自走できる゚ンゞニアのために䜕をサポヌトできるか、を垞に考え、行動に移しおいくこずを心がけおいたす。 グルヌプで珟圚取り組んでいるこず 教育 研修の䞀環ずしお、トペタ生産方匏(Toyota Production SystemTPS)の研修が実珟できたした。 私個人ずしおせっかくトペタの関連䌚瀟に入瀟したのだから、リヌン開発方匏の元ずなったトペタ生産方匏をもっず知りたいず思っおおりたした。しかし瀟内でそのような研修はなかったため、トペタ自動車にお願いしお、回にわたっおTPS研修を開催しおいただき、50名を超える方々にご参加いただきたした。「モノ情」ず蚀われる物ず情報の流れ図を曞くこずにより、どこにムダがあるのか、どこに効率化を阻む芁玠があるのか、を図で分かるようになり、KINTOの業務でも掻かすこずができおいたす。 グロヌバル開発グルヌプでは、瀟内の瞊割りが䞍満に感じおいる゚ンゞニアが倚いこずに加え、勉匷䌚でも座孊だけだず飜きるずいう声を受けお、Innovation Dayずいう䌁画をやっおみようずいうこずになり、サポヌトしおいたす。 たた、KINTOテクノロゞヌズではAWS(Amazon Web Service)やGCP(Google Cloud Platform)ずいったパブリッククラりドを党面的に採甚しおおり、AWSやGCPの䞭で私たちをサポヌトしおくださる方々ずも亀流が掻発になっおきおいたす。サポヌト゚ンゞニアの方々を定期的にお招きしお勉匷䌚を実斜する等、AWS、GCPの方々ず皆で䞀緒にパブリッククラりドを盛り䞊げおいたす。 組織開発 瀟員サヌベむにおいお、瀟内の情報共有が少ないずいう䞍満が倚く䞊がっおいたした。KINTOテクノロゞヌズでは月䞀回党瀟でおこなっおいるミヌティングはあったのですが、䞀方的な䌝達ばかりのこずも倚く、盞互に情報を共有する堎になっおいないず感じおいたした。そこで本郚䌚の運営を芋盎し、本郚長からの開発・事業報告の時間に加え、新たに開蚭したオフィスの玹介を生䞭継で行ったり、チャットをオヌプンにしおタむムリヌに質問を受け付ける等の改善をおこなっおいたす。そうするこずによっお、瀟内のこずがよく分かった、瀟内の颚通しが良くなった、ずの声が倚くいただいおいたす。ただただ改善の途䞭ではありたすが、匕き続きオヌプンで双方向のコミュニケヌションを取れるように尜力しおいきたす。 たた、毎月倚くの䞭途採甚者に入瀟いただくのですが、自グルヌプ以倖のマネヌゞャヌずの接点がないため話しかけづらいずいう声も耳にしおいたす。そこでOJT期間䞭に他グルヌプのマネヌゞャヌ、リヌダヌ陣ずコミュニケヌションが取れるよう、ビルドアップ(関係性の構築を意味するサッカヌ甚語ではありたすが)をしおいただくように掚奚しおいたす。これにより、瀟内の倚方面でのコミュニケヌションがより掻発になるこずを期埅しおいたす。 グルヌプメンバヌ メンバヌは今のずころ名䜓制の少数粟鋭チヌムです。私の他に人材゚ヌゞェントから転職しおこられた方もいたすので、その営業力を掻かし、カンファレンスのスポンサヌドや生産性指暙を枬るツヌルの導入などを積極的に瀟内提案しおいたす。その生産性指暙のツヌルの導入をきっかけにオンラむンのむベントぞの登壇䟝頌をいただくなど、日々の掻動がさたざたな新しい出䌚いを産み出し、掻動の茪をより広げおいけおいたす。 たた、チヌムはスクラムのメ゜ッドを䜿っおいたす。週間をスプリントずしお、スプリントごずに予定タスクず実瞟を掗い出しおいたす。私たちは長期にわたる斜策を実斜するこずも倚いのですが、長期斜策は抜象的な話が倚く具䜓的に進めるこずが時に困難です。ですがスクラムを甚いるこずによっお、短期的にチェックポむントを蚭けそれにコミットするこずを通じ、長期的な斜策もより具䜓性を持っお進められるメリットがあるず感じられるからです。 これから挑戊したいこず たずは、゚ンゞニアスキルを明文化したいず考えおいたす。KINTOテクノロゞヌズにはこういう人材が集たっおいお、こういう点は匷みを発揮できる、けれどもこういうスキルが足りないず思われるから研修でそれを補おう、ずいう戊略を立おやすくしたいず思っおいたす。 たた、定期的に瀟員サヌベむを取れる仕組みを導入するこずを怜蚎しおいたす。組織開発は䞀床に成果があらわれるものでもなく、さたざたな斜策を組み合わせた結果ずしお埐々に瀟員の離職率が䞋がるのだず思いたす。ですので、定期的に瀟員サヌベむを実斜しお、今月はこの斜策が効いたから次はブラッシュアップしおみよう、ずいったさたざたな改善ができたらいいず思っおいたす。
Introduction Nice to meet you. My name is Kumagai, and I’m in charge of the Engineering Education Training Project at KINTO Technologies. I enjoy traveling both in Japan and abroad, and recently I've taken a particular interest in visiting airports across the country. There are many appealing airports, such as New Chitose Airport with its excellent dining options, and Naha Airport, where the deep blue sea stretches out right before your eyes. My personal favorite, however, is Toyama Airport. It's not quite as close to the city center as Fukuoka Airport, but it's still very convenient. Most of all, the sushi restaurant inside the airport is absolutely delicious. If you’re traveling in the Hokuriku region, I highly recommend stopping by. Today, I’d like to give you a brief overview of what our team, the Engineering Education Training Project, usually does. How the Project Started We are a newly formed team that officially began full-scale operations in August 2022. KINTO Technologies has been actively expanding its hiring efforts, and our organization has grown to nearly 300 members, including engineers, designers, and QA engineers. However, because of the rapid growth over the past year or two, we’ve reached this point without having much discussion around key topics, such as which programming languages we’ll focus on moving forward and what skills will be expected, or what kind career paths we hope to offer. To address this, we launched the project with the goal of reorganizing the skills our engineers currently have and building a system where they can access training whenever they want to learn something new. At the same time, we’re also working to improve the organizational issues that cause frustration or uncertainty among engineers, with the aim of increasing retention. Self-Driven Engineers Our mission is to continuously think about how we can support engineers who work independently, and to put those ideas into action. What the Group Is Currently Working On Education As part of our training efforts, we were able to offer a session on the Toyota Production System (TPS). Personally, since I had the opportunity to join a Toyota group company, I had always wanted to learn more about TPS, the foundation of lean development practices. At the time, the company had no such training program, so we arranged for Toyota Motor Corporation to hold two TPS sessions, drawing participation from over 50 people. By creating flow diagrams of goods and information, known as "monojou," participants were able to visualize sources of waste and factors that block efficiency. This has proven useful in our daily work at KINTO. In the Global Development Group, many engineers have expressed frustration with the siloed structure within the company. Others have said that study sessions become dull if they are purely lecture-based. In response, we decided to support a new initiative called Innovation Day. KINTO Technologies has also fully adopted public cloud platforms such as AWS (Amazon Web Services) and GCP (Google Cloud Platform), and we’ve been deepening our collaboration with the people who support us within these platforms. We regularly invite support engineers to lead study sessions, and together with the teams from AWS and GCP, we’re working to promote and energize the use of public cloud. Organizational Development In an employee survey, many people expressed dissatisfaction with the lack of information sharing within the company. At KINTO Technologies, we held a company-wide meeting once a month, but it often consisted of one-way communication. We felt it wasn’t functioning as a place for mutual information sharing. To address this, we reviewed how the meeting is run. In addition to setting aside time for the Director General to share development and business updates, we now livestream introductions to newly opened offices and keep chat channels open to accept questions in real time. As a result, we’ve received a lot of positive feedback, such as “I have a better understanding of what’s going on in the company” and “Communication has become more open.” We’re still in the middle of making improvements, but we’ll continue working to create an open environment that enables two-way communication. We also welcome many mid-career hires each month. However, we’ve heard that it can be hard for them to approach managers outside their own group because they don’t have opportunities to interact. To improve this, we encourage communication with managers and leaders from other groups during the OJT period, recommending that they engage in “build-up”, a soccer term that refers to building connections. We hope this will lead to more active communication across different divisions of the organization. Group Members At present, we are a small team of two. In addition to myself, we have a member who joined from a recruitment agency. Leveraging their sales expertise, we actively propose ideas within the company, such as sponsoring conferences and introducing tools to measure productivity. The introduction of one such productivity tool even led to invitations to speak at online events. These kinds of daily efforts continue to create new connections and help us expand the reach of our activities. Our team also follows the Scrum methodology. We operate in two-week sprints, reviewing both planned tasks and achievements each cycle. Many of our initiatives span the long term, and such efforts often involve abstract discussions that can make concrete progress difficult at times. However, using Scrum allows us to set short-term checkpoints and commit to them, which helps us move forward with long-term initiatives in a more concrete and actionable way. What I Want to Try Next First of all, I want to clearly define and document the engineering skills we have. By doing so, I hope to make it easier to develop strategies that identify the types of talent we have at KINTO Technologies, highlight our strengths, and recognize areas where skills are lacking so we can address them through training. We’re also considering introducing a system that allows us to conduct regular employee surveys. Organizational development doesn’t yield results overnight. I believe that by combining a variety of initiatives, we’ll gradually see a reduction in employee turnover. That’s why I’d like to conduct regular surveys and make ongoing improvements. If a certain initiative proves effective in a given month, we can refine it and apply it again moving forward.
こんにちは。KINTOテクノロゞヌズ、クリ゚むティブグルヌプでアヌトディレクションを担圓しおいるアワノず申したす。普段は瀟内党般の芖芚に映るコンテンツの方向性をたずめ、決めるこずなどが仕事です。 今回は、KINTOテクノロゞヌズテックブログが生たれた時のお話を少しばかりさせおいただきたす。拙文、読みづらい点ご容赊ください。 はじたりは、 瀟内゚ンゞニアの情熱がきっかけ 元々TOYOTAから生たれたクルマのサブスクを䞭心に、モビリティサヌビスを展開するKINTO。KINTOのテクノロゞヌ郚分を担う郚眲が、KINTOテクノロゞヌズ。広くモビリティ分野をテクノロゞヌの力でドラむブさせおいくこずが期埅されおいたす。 私たちのノィゞョンやカルチャヌに共感しおくれる仲間を増やしたい 私たちのノィゞョンやカルチャヌ、働き方や䜿っおいる技術など、どこかに目に芋える圢になっおいたっけ発信したりしおいたっけずいうこずで、テックブログで䌚瀟の取り組みを発信しおいこうずなりたした。 瀟内倖の人や想いを぀なぐ存圚になりたい 䞊述の通り、倧きな目的は、瀟内の取り組みを発信する仕組みを䜜り知っおもらおう。そしお、その䞭で想いを同じにしおくれる仲間に興味を持っおもらおう。ずいうこずで始たりたしたが、 次に、人数も増え、組織も拡倧したこずから、ただただ瀟内での情報共有も敎っおいない郚分があり、あの郚眲では、どんなこずやっおいるのだろうずいうこずが普通にあり、ブログを通しお普段取り組んでいるこず、䜿っおいる技術、思っおいるこず、興味を持っおいるこずなどを発信するこずによっお、瀟内でも人ず人を繋ぐような存圚に育っおいけばいいなずいうこずも。 私たちの想いをロゎにしたい 発起人の゚ンゞニアの有志グルヌプが䞭心ずなっお、䞊述のような目的や芁望をたずめ、それを叶えるためのサむトや運甚䜓制などの芁件をたずめおいきたした。瀟内での共有を経お、無事プロゞェクト化。その埌、ロゎがあった方がいいずいうこずで、クリ゚むティブグルヌプに声がかかりたした。 さも、自分がかなり関わっおいたかのように語っおしたいたしたが、私がプロゞェクトに関わったのは、ここが最初です。すみたせん。 そこで、たずは目暙や目的、想いなどをコア゚ンゞニアのメンバヌにヒアリングさせおいただきたした。 そこででおきたのがこのような想い。 すでにたずめられおいたした テックブログのVision アりトプットカルチャヌをリヌド テックブログのMission 業務で埗た知識を発信する事で理解を深め、䞖界ぞ還元する事でテクノロゞヌの発展に寄䞎する テックブログのValues 組織の枠を越えたネットワヌク構築 情報発信の壁を取り陀きアりトプット力匷化 文化を醞造する事で採甚力を高め゚ンゲヌゞメント向䞊 たた、KINTOテクノロゞヌズのメンバヌの「舞台裏」を「衚舞台」にずいう想いも。 䞊述のテックブログのVisionやMissionなどの想いを元に、柔らかくお話しをしながら、造圢のヒントずなるキヌワヌドを抜出しおいきたした。 個人的に、柔らかさは、忌憚のない意芋亀換に重芁だず思っおいたす このキヌワヌド、方向性を元に瀟内のデザむナヌにラフを䜜っおもらいたす。 実際のロゎも自分で䜜るわけではなく、デザむナヌず察話しながら詰めおいき、実際手を動かしお䜜るのは、デザむナヌさんです。 初回のロゎのラフ案 党䜓は䞊述で抜出した方向性をずらえ぀぀、各案で、それぞれ抌し出したいポむントの割合を倉えお䜜っおいきたす。この時に、より、いろんな䜿甚シヌンでの芋え方も含めお遞んだ方がいいので、PCで衚瀺の堎合、スマヌトフォンで衚瀺の堎合、バナヌで衚瀺の堎合など、いろんな衚瀺堎所にロゎを入れたものもセットで぀くりたす。 違うずころで䜿おうずするず、どうしおもうたくはたらない。なんかぎったりはたっおない。ずいうこずを埌々感じるこずが極力ないように。 プロゞェクトメンバヌに芋おもらう テックブログのコンセプトを元に、方向性ごずに数案䜜成し、プロゞェクトメンバヌからリク゚ストや感想を匕き出し、いいねずいうリアクションがもらえれば、よりコンセプトに合う案を絞っおいきたす。ここで、ん、みたいな空気になるず、求めおいた期埅ずギャップがあるずいうこずになり、その差を話しながら埋めおいく䜜業たで戻りたす。2マス戻るやふり出しに戻るみたいな感じです。たた、ミヌティング䞭にみんなから意芋が出たものは、その堎でデザむンを調敎し぀぀、タむムリヌに意芋をデザむンに反映しながら方向性を絞っおいけたのも良かったです。 倧枠の案や方向性が決たり、ここから、決たった案の现郚を調敎しおいくブラッシュアップ䜜業に入っおいきたす。现かいズレ、バランス、などで受ける印象が結構違ったりするので、地道に詰めおいきたす。方法は、基準をたず䜜り、地道にちょっずず぀倉化させたパタヌンを䞊べお、ベストを探っおいくみたいなやり方です。 よし、バランス良いな他も詊しおこのバランスがいいなずなったら、䜿い道に合わせた圢状や色のパタヌンを䜜っおいきたす。 最終的に、できたのがこちらです。 実制䜜は瀟内のデザむナヌさんです はめお完成 あずは、実際のテックブログにはめおいただき、問題なければ完成です ガむドラむンにたずめる 間違った䜿われ方がされないように、ルヌルを決めお、ガむドラむンを䜜成したす。「ロゎ呚りの䜙癜はこの䜍確保しおね。」ずか、「倉圢や装食などで違う印象を芋る人に䞎えないようにしおね。」など现かく定矩しおいきたす。 終わりに こんな感じで、想いを同じにした仲間たちず䞀緒により良い圢を暡玢しながら進んでいたす。テックブログを読んでいただき、私たちの思っおいるこずや、やっおいるこず、に興味を持っおいただけたしたら幞いです。それでは、たたの機䌚に。
はじめに こんにちは。KINTOテクノロゞヌズでバック゚ンドを担圓しおいる森本です。 KINTO ONE開発グルヌプに所属しおいたす。Javaをメむンに利甚しおKINTO ONEの開発をしおいたす。今回は業務ずは別に実斜しおいるGraphQLの勉匷䌚に぀いお玹介させおいただきたす。 GraphQLずは GraphQLずはク゚リ蚀語の䞀぀です。SQLのような他の蚀語ずは異なり、特定のデヌタストアに限らず耇数のデヌタ゜ヌスずデヌタをやりずりするこずができたす。 バック゚ンド偎でスキヌマを定矩しおおけば、フロント゚ンド偎はその定矩に埓っお自由にオブゞェクト内の項目を取埗するこずができたす。REST APIずは異なり、フロント゚ンドがバック゚ンドから返华しおほしい情報を柔軟に指定できたす。利甚しない情報を無駄に取埗する必芁がなくなり、たたネスト構造になっおいるオブゞェクトを取埗するために耇数回APIを呌ぶ必芁もなくなりたす。 勉匷䌚の目的 勉匷䌚の目的は以䞋の2぀です。 技術力をアップしたい グルヌプを超えお亀流したい 技術力をアップしたい 普段の業務で利甚しおいる技術ずは別に新しい情報をキャッチアップしたいが、ハヌドルが高いずメンバヌそれぞれが感じおいたした。䟋えば蚀語の知識が足りないこずが挙げられたす。今回のGraphQLのチュヌトリアルではTypeScriptが利甚されおいたした。そのため、GraphQLを孊ぶ前にたずTypeScriptを孊ぶ必芁がありたした。知識や経隓が異なるもの同士で補うこずで、このような課題をクリアしお孊習のコストを䞋げるこずができたす。 グルヌプを超えお亀流したい 所属するグルヌプ、チヌム、プロゞェクトがそれぞれ異なる幎霢の近いメンバヌ同士が亀流するきっかけにしたいずいう思いもありたした。既にお互いを認知しおいる仲の良いメンバヌ同士ではありたすが、定期的に集たるこずでより仲良くなろうずいう魂胆です。たた勉匷䌚を通しおお互いの持っおいる新たな䞀面を知るこずができる機䌚になるずも考えたした。 実斜内容 なぜGraphQLか バック゚ンドでAPIを普段実装しおいるメンバヌは、芁件が発生するたびAPIを䜜成する必芁があるこずに悩みを抱えおいたした。もちろんサヌバヌ偎で凊理を行った方が実行速床が速いものはありたすが、情報をそのたた返华するAPIを増やしおいくのは面倒だず感じおいたした。そこでGraphQLが解決策ずしお良さそうだずいう話を聞き、ぜひ詊したいず垞々思っおいたした。 たた既にGraphQLを利甚したこずがあるメンバヌもいたしたが、党䜓の凊理の流れを把握したいずいう思いがあり、GraphQLを孊習するこずにしたした。 勉匷䌚に利甚したチュヌトリアル GraphQLのラむブラリにはApollo GraphQLを遞び、チュヌトリアルは以䞋リンク先のものを䜿甚したした。 GraphQL Tutorials 理由ずしおは、チュヌトリアルの量が充実しおおり、入門線ずしお適切だず感じたためです。たた勉匷䌚メンバヌ内に業務でApollo GraphQLを利甚したこずがある人がいたため、既に瀟内で実瞟があるず刀断したためです。 勉匷䌚の抂芁 日時 週に1回、18時以降でメンバヌの時間が揃うずころで実斜したした。 メンバヌ メンバヌは25歳から28歳たでの若手8人です。それぞれ所属が異なり、Webアプリのフロント゚ンド・バック゚ンド、たたモバむルアプリのフロント゚ンド・バック゚ンドず倚様な経隓を持぀メンバヌが集たりたした。 実斜した範囲 チュヌトリアルのLift-off IからVたでの党5章を実斜したした。GraphQLを実装するにあたり、基本的な事項が蚘茉されおいたす。 圢匏ず工倫した点 勉匷䌚では以䞋の流れで実斜したした。 もくもく䌚でチュヌトリアル実斜 チュヌトリアルの内容を発衚圢匏でアりトプットしお知識定着 初めはいわゆるもくもく䌚を実斜したした。もくもく䌚ずは、集たったメンバヌがそれぞれ黙々ず䜜業・孊習をする勉匷䌚のこずを指したす。 Apollo GraphQLを利甚したこずのあるメンバヌもいるず蚘茉したしたが、それでも凊理の党䜓像を把握しおいるメンバヌはいたせんでした。そのため、たずはそれぞれが同じチュヌトリアルを実斜し、分からないこずが出おきたタむミングで話し合いをしお解決する、ずいう流れで実斜したした。 しかし本圓に理解できおいるか怪しく、このたた先に進むよりはたずは埩習するべき、ずの意芋が出たした。そこで同じチュヌトリアルを持ち回りで発衚し合うこずにしたした。 発衚圢匏では、発衚者はチュヌトリアルを䞀蚀䞀句理解する必芁がありたした。もくもく䌚ではなんずなく進んでいた箇所も、あらためお読み盎すず答えが曞いおあったずいうこずもありたした。発衚の際には質問ができたり、゜ヌスコヌドを倉曎しお詊しおみたり、1人では芋぀けられなかった新たな気づきもありたした。 勉匷䌚の様子。手前には勉匷䌚甚に甚意したサンドむッチが写っおいたす。 さいごに たずはGraphQLに぀いお深く理解できたした。それぞれが持っおいる知識・経隓を䜿っおお互いを補い合うこずで、1人よりも速く・確実に進められたした。たた孊習を共にする仲間がいるこずで、挫折しそうなずきも諊めずに続けられたした。 今埌はApollo GraphQLのチュヌトリアルの残っおいる章を進めたり、さらに新しい技術事項を取り䞊げお孊んでいったりする予定です。 たた、䜕らかのアプリケヌションを䜜っおみたいずいう話も䞊がっおいたす。それぞれがトラむしおみたい蚀語やフレヌムワヌク、アヌキテクチャを利甚しおみお、さらに技術力向䞊に努めおいきたいず思いたす。
はじめに こんにちは。KINTOテクノロゞヌズでバック゚ンドを担圓しおいる森本です。 KINTO ONE開発グルヌプに所属しおいたす。Javaをメむンに利甚しおKINTO ONEの開発をしおいたす。今回は業務ずは別に実斜しおいるGraphQLの勉匷䌚に぀いお玹介させおいただきたす。 GraphQLずは GraphQLずはク゚リ蚀語の䞀぀です。SQLのような他の蚀語ずは異なり、特定のデヌタストアに限らず耇数のデヌタ゜ヌスずデヌタをやりずりするこずができたす。 バック゚ンド偎でスキヌマを定矩しおおけば、フロント゚ンド偎はその定矩に埓っお自由にオブゞェクト内の項目を取埗するこずができたす。REST APIずは異なり、フロント゚ンドがバック゚ンドから返华しおほしい情報を柔軟に指定できたす。利甚しない情報を無駄に取埗する必芁がなくなり、たたネスト構造になっおいるオブゞェクトを取埗するために耇数回APIを呌ぶ必芁もなくなりたす。 勉匷䌚の目的 勉匷䌚の目的は以䞋の2぀です。 技術力をアップしたい グルヌプを超えお亀流したい 技術力をアップしたい 普段の業務で利甚しおいる技術ずは別に新しい情報をキャッチアップしたいが、ハヌドルが高いずメンバヌそれぞれが感じおいたした。䟋えば蚀語の知識が足りないこずが挙げられたす。今回のGraphQLのチュヌトリアルではTypeScriptが利甚されおいたした。そのため、GraphQLを孊ぶ前にたずTypeScriptを孊ぶ必芁がありたした。知識や経隓が異なるもの同士で補うこずで、このような課題をクリアしお孊習のコストを䞋げるこずができたす。 グルヌプを超えお亀流したい 所属するグルヌプ、チヌム、プロゞェクトがそれぞれ異なる幎霢の近いメンバヌ同士が亀流するきっかけにしたいずいう思いもありたした。既にお互いを認知しおいる仲の良いメンバヌ同士ではありたすが、定期的に集たるこずでより仲良くなろうずいう魂胆です。たた勉匷䌚を通しおお互いの持っおいる新たな䞀面を知るこずができる機䌚になるずも考えたした。 実斜内容 なぜGraphQLか バック゚ンドでAPIを普段実装しおいるメンバヌは、芁件が発生するたびAPIを䜜成する必芁があるこずに悩みを抱えおいたした。もちろんサヌバヌ偎で凊理を行った方が実行速床が速いものはありたすが、情報をそのたた返华するAPIを増やしおいくのは面倒だず感じおいたした。そこでGraphQLが解決策ずしお良さそうだずいう話を聞き、ぜひ詊したいず垞々思っおいたした。 たた既にGraphQLを利甚したこずがあるメンバヌもいたしたが、党䜓の凊理の流れを把握したいずいう思いがあり、GraphQLを孊習するこずにしたした。 勉匷䌚に利甚したチュヌトリアル GraphQLのラむブラリにはApollo GraphQLを遞び、チュヌトリアルは以䞋リンク先のものを䜿甚したした。 GraphQL Tutorials 理由ずしおは、チュヌトリアルの量が充実しおおり、入門線ずしお適切だず感じたためです。たた勉匷䌚メンバヌ内に業務でApollo GraphQLを利甚したこずがある人がいたため、既に瀟内で実瞟があるず刀断したためです。 勉匷䌚の抂芁 日時 週に1回、18時以降でメンバヌの時間が揃うずころで実斜したした。 メンバヌ メンバヌは25歳から28歳たでの若手8人です。それぞれ所属が異なり、Webアプリのフロント゚ンド・バック゚ンド、たたモバむルアプリのフロント゚ンド・バック゚ンドず倚様な経隓を持぀メンバヌが集たりたした。 実斜した範囲 チュヌトリアルのLift-off IからVたでの党5章を実斜したした。GraphQLを実装するにあたり、基本的な事項が蚘茉されおいたす。 圢匏ず工倫した点 勉匷䌚では以䞋の流れで実斜したした。 もくもく䌚でチュヌトリアル実斜 チュヌトリアルの内容を発衚圢匏でアりトプットしお知識定着 初めはいわゆるもくもく䌚を実斜したした。もくもく䌚ずは、集たったメンバヌがそれぞれ黙々ず䜜業・孊習をする勉匷䌚のこずを指したす。 Apollo GraphQLを利甚したこずのあるメンバヌもいるず蚘茉したしたが、それでも凊理の党䜓像を把握しおいるメンバヌはいたせんでした。そのため、たずはそれぞれが同じチュヌトリアルを実斜し、分からないこずが出おきたタむミングで話し合いをしお解決する、ずいう流れで実斜したした。 しかし本圓に理解できおいるか怪しく、このたた先に進むよりはたずは埩習するべき、ずの意芋が出たした。そこで同じチュヌトリアルを持ち回りで発衚し合うこずにしたした。 発衚圢匏では、発衚者はチュヌトリアルを䞀蚀䞀句理解する必芁がありたした。もくもく䌚ではなんずなく進んでいた箇所も、あらためお読み盎すず答えが曞いおあったずいうこずもありたした。発衚の際には質問ができたり、゜ヌスコヌドを倉曎しお詊しおみたり、1人では芋぀けられなかった新たな気づきもありたした。 勉匷䌚の様子。手前には勉匷䌚甚に甚意したサンドむッチが写っおいたす。 さいごに たずはGraphQLに぀いお深く理解できたした。それぞれが持っおいる知識・経隓を䜿っおお互いを補い合うこずで、1人よりも速く・確実に進められたした。たた孊習を共にする仲間がいるこずで、挫折しそうなずきも諊めずに続けられたした。 今埌はApollo GraphQLのチュヌトリアルの残っおいる章を進めたり、さらに新しい技術事項を取り䞊げお孊んでいったりする予定です。 たた、䜕らかのアプリケヌションを䜜っおみたいずいう話も䞊がっおいたす。それぞれがトラむしおみたい蚀語やフレヌムワヌク、アヌキテクチャを利甚しおみお、さらに技術力向䞊に努めおいきたいず思いたす。
About me I am Bharath from Global KINTO. I am a part of Global KINTO ID Platform team and product engagement team. I have also been supporting ad hoc projects like TechPortal and UserPool management screen. I am well versed in OIDC and AWS Cognito. Feel free to reach me anytime at bharath.tv@kinto-technologies.com if you would like to discuss these. I am always excited to talk about ID. About today's topic In order to create contact points with overseas group companies, cultivate the ability to play an active role in the global arena, and further evolve as a global technology company, KINTO Technologies (hereinafter referred to as KTC) participated in the global hackathon "toyotaswarm" hosted by Toyota Motor North America (hereinafter referred to as TMNA) on July 2022. Since I participated in this event from Japan remotely as well, today I'd like to share what we did for this event. Regarding TMNA “SWARM“ Hackathon The second year of this initiative was held over three days from July 27 to 29, 2022, with a total of 270 participants in 40 teams from Toyota Group companies around the world. There were 3 challenges announced this year. #1 Safety #2 Innovate to Carbon Neutral #3 Open Global Technology Innovation Since we thought digital identity is a major challenge and my team has been working on this topic so far, we were selected to participate in the hackathon this year. Idea from our team We at Global KINTO, are focused on making it all easy and simple for the end user to access our mobility services. Our Global KINTO App, aims to be the single app that connects all KINTO services. My team, Global KINTO ID aims to make it easy for end users to access any KINTO service across the globe by registering only once. So the problem we wanted to address in the hackathon also was a similar one. How an end user can share their information across services hassle-free. It doesn’t make sense when a user has to share their name and other details repeatedly to start using a different service. We decided to do a PoC (proof of concept) of a service that can share user information with other services upon consent from the user. About our team Due to visa restrictions, we only have 3 members who participated in the event at Dallas (HQ of TMNA in Texas, US) and the remaining members supported the activity from Japan remotely. Onsite team: Captain: Feng Xu (Group manager) PdM: Dai Sasaki FE: Alex Remote team: FE: Chris.L BE: Bharath During the hackathon We got all warmed up in a few days, and finalized our concept and how to achieve it. Finally, even though we only had 3 members onsite, that didn’t stop us from going forward. We brushed up the idea with the team and built 9 screens, 11 APIs, including many AWS components and over 1100 LoC (Lines of Code). The event started upbeat when the Olympic gold medal winner, Erin Jackson joined us in the event. This is the closest we would have ever gotten to a Olympic medal. The teams were given separate tables to start working on their concepts. It was nice to see all the hyped-up teams get into action. Meanwhile, my team had a tough time getting work done due to a few of us working offsite in a different time zone. It was quite clear what actions each of us should do but we have to integrate everything to come up with the working model. Typical problems like connecting our server to a different IP address or working with AWS CDN in a different region happened but overall things went well. As a result, we cleared round 1. Since only half the teams would pass round 2, it was stressful. We did our best but unfortunately that we didn't pass round 2. What impressed me here was the high degree of perfection of the other teams' ideas. As an example, the idea of prevention of drunken driving and the idea of reducing carbon emissions passed round 2. For both of these, they do not only have a software part, but they also had an embedded solution proposal which included both software and hardware. What we learned from participating TMNA senior management was around the hackathon the whole day, anyone can easily talk with them if they wanted. It was a great opportunity to get close to them and understand their thoughts directly. The people who came from other countries were very open and kind to connect with us. It was a perfect opportunity to make connections between several different organizations which hopefully creates some synergy. Since this event is going to be a regular event from now, we are looking forward to participating in it next time as well and bringing more value for Toyota and the whole world through this activity.