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

TECH PLAY

KINTOテクノロゞヌズ

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

å…š1123ä»¶

Interviewee The Global Development Division within KINTO Technologies has a DevOps team with multinational and diverse backgrounds. Although each member has different strengths in different languages, technologies, and experiences, they work very smoothly as a team. This time, we interviewed a team leader, Li-san ( the author of the article "Introduction of Flyway" ). If you are interested in managing an international team, please read on. Self- and Team-Introduction Self-introduction I'm Li, a DevOps team leader in the Global Development Division at KINTO Technologies. After graduating, I spent five years working at an IT subsidiary of a Japanese manufacturer. During this period, Japanese was the common language used in the company, prompting me to learn Japanese, the Japanese culture, and enhance my communication skills across various cultures. At that time, I started out developing, designing, and evaluating web applications, and gained experience as a systems engineer and project manager. I gained not only development experience, but also knowledge of the development process and management. I then served as a lecturer at a university for three years, learning new technologies and pedagogy. This experience also deepened my understanding of effective learning methods. After moving to Japan, I returned to the IT field when my second daughter started preschool. With my cross-cultural communication skills, development experience, management skills and human resource development experience, I currently lead a DevOps team in the Global Development Division. Team-introduction At present, our DevOps team consists of three subteams: CI/CD, Infrastructure, and Test. The six members of the team are as follows, with different nationalities and areas of expertise. From the beginning, the DevOps team's philosophy has been to support application development teams by intentionally combining members with different skill sets. No. Subteam Previous work experience Nationality English proficiency Japanese proficiency 1 CI/CD Development, project management, quality assurance, and system design China B B 2 Infra Infrastructure engineer, project promotion, integration, and design China C A 3 Infra Infrastructure engineer, development, and pre-sales China C B 4 Test Network engineer and project management New Zealand A C 5 Test Development engineer India A C 6 Test Testing, development, and design Myanmar B C *Language proficiency: A: Can reconstruct and express subtle nuances B: Can discuss a wide range of complex topics C: Can express personal thoughts and reasoning D: Can engage in everyday conversation Q&A Corner It can be hard to imagine the daily work of a team with diverse language, cultural, and technical backgrounds. So this time we asked a few questions to the team leader, Li-san. We would like to summarize them here in a Q&A format to provide you with some insight into the team. Q&A Part 1 Q. How do you keep everyone on your DevOps team working toward a common goal, given the variety of professional backgrounds within the team? A. We share a clear roadmap within our team as shown below. Based on this roadmap, we set specific goals so that all members are aligned and work towards the same direction. The team comprises members with a variety of aspirations; some are interested in quality assurance, others aspire to be in charge of infrastructure projects, while some want to be involved in development. We understand each of our strengths and aspirations, and work collaboratively to create a roadmap that everyone can agree with. Roadmap (example) Q&A Part 2 Q. Seven people in your team speak four different native languages. What language do you use to communicate? What about documentation or messages? A. When communicating verbally and writing documents, they use their preferred language (English or Japanese). Messages are mainly sent in English because everyone on the team can understand English. We also encourage the use of translation tools for better understanding each other. To communicate across languages and cultures, the presenter in our team will speak slowly, use simple words, and create an atmosphere in which questions are immediately asked if they are not understood. Q&A Part 3 Q. How do you promote knowledge sharing in your culturally and technically diverse team? A. Our team values knowledge sharing, and we use three methods: Period Means Content Purpose Ice breaking phase Knowledge sharing meeting for each member's field of expertise Previous knowledge To understand each other and expand their knowledge One year after assignment Online course learning (e.g. automated testing tools and microservices architecture courses on Udemy) To enhance the skills lacking for the current job (e.g. system architecture, automated testing tools, or AWS)Improvement of skills needed in current job At any time (after different tasks are completed) Document and retain Procedures, know-how, etc. ( e.g. Automated test blocks ) To facilitate horizontal development in the future Q&A Part 4 Q. As a mother, is it difficult to lead a cross-cultural team? A. My team is incredibly supportive and understanding of me being a mother. As a culture of the Global Development Division, we respect diversity, respect each other, and maintain an appropriate distance. I have two elementary school children, and when I need to participate in school events, my team members support me by adjusting schedules and reallocating tasks. For example, when my entire family recently contracted the flu, I couldn't come to work for about two weeks, but my team members were willing to take on duties to alleviate my workload. I am very grateful for their support. Q&A Part 5 Q. When managing a multinational team, how can you unify the various standards (e.g. work ethics, professional standards, etc.) and keep members motivated while achieving a certain level of results? A. It is important to recognize and respect the rationality of different cultures. As I am from a foreign country myself, I understand the differences between Japanese and foreign practices and can explain them to the team from this perspective. Since this is Japan, I basically adhere to Japanese standards, but I offer commentary from a foreigner's perspective. I also leverage knowledge of management studies and PMP (Project Management Professional) as well as adopt other common industry practices. I prioritize providing team members with significant autonomy, fostering motivation by enabling them to work on projects of their choosing. Lastly Q. What do you value the most or devise when managing such a global team? A. I still think communication is the most important, in line with the philosophy of PMP. In our team, everyone is committed to communicating their ideas clearly and with precision. We always use the 5W1H framework to communicate in our work. We also respect different ways of thinking. Basically, we communicate with each other on the basis of the understanding that people are different. Q. I think the support you receive from your team members stems from trust. What's your secret? A. In my day-to-day work, I make a conscious effort to support and mentor our members. We work together to help members achieve their goals. As a team, each of us is an indispensable member. Because we work together to achieve our goals, I believe we can support each other regardless of our positions as leaders or members. I think sincerity is essential. Summary and Future Prospects In this article, we interviewed Li-san, the DevOps team leader of Global Development Division, about cross-cultural communication and knowledge sharing in a multinational team, balancing motherhood with leadership responsibilities, and managing a multinational team. As she mentioned at the end, even in teams with members from diverse backgrounds, always be aware and respect that "people are different," and communicate ideas clearly through the 5W1H framework. We have found that the accumulation of these practices builds trust and enables us to efficiently support each other toward common goals. This is certainly not only true for multinational teams, but also for teams of the same nationality. We hope that this article will be of some help to those who are struggling to manage teams with diverse backgrounds. In the future, the DevOps team will face additional challenges as their businesses develop and technology evolves. However, with the efforts made thus far and the team's spirit of embracing diversity, we are sure that they can overcome any obstacle. We look forward to the team's future success and growth.
Introduction and Summary Hello. I am Miyashita, a membership management engineer in the Common Services Development Group[^1][^2][^3][^4] at KINTO Technologies. Today, I'd like to talk about how we solved the challenges we faced with building an S3-compatible local storage environment in our development site. Specifically, I'll share a practical approach on how to leverage the open source MinIO to emulate AWS S3 features. I hope this article will be helpful for engineers confronting similar challenges. What is MinIO? MinIO is an open source object storage server tool with S3 compatible features. Just like NAS, you can upload and download files. There is also a similar service in this area called LocalStack . LocalStack is a tool specialized in AWS emulation and can emulate services such as S3, Lambda, SQS, and DynamoDB locally. Although these two tools serve different purposes, both meet the requirements for setting up an S3-compatible environment locally. MinIO website LocalStack website Tool Selection with MinIO and LocalStack Development requirements As a development requirement, it was necessary to automatically create an arbitrary S3 bucket simply by running docker-compose, and register email templates, CSV files, etc., in the bucket. This is because it’s cumbersome to register files with commands or GUI after a container is started. Also, when conducting automated local S3 connection testing, the bucket and files must be ready as soon as the container starts. Tool Comparison After comparing which tool can easily achieve the requirements, LocalStack uses aws-cli to create buckets and operate files, while MinIO provides a dedicated command line tool, mc (MinIO Client). This made it easier to build the system. In addition, I found MinIO to be more sophisticated in the GUI-based management console. A comparison on Google Trends shows that MinIO is more popular. For these reasons, we decided to adopt MinIO. Compose Files To set up a MinIO local environment, a "compose.yaml" file must first be prepared. Follow the steps below. Create a directory. Create a text file in the directory with the filename "compose.yaml". Copy and paste the contents of compose.yaml below and save it. docker-compose.yml is not recommended. Click here for the compose file specifications * docker-compose.yml also works with backwards compatibility. For more information, click here. services: # Configure the MinIO server container minio: container_name: minio_test image: minio/minio:latest # Start the MinIO server and specify the access port for the management console (GUI) command: ['server', '/data', '--console-address', ':9001'] ports: - "9000:9000" # for API access - "9001:9001" # for the management console (GUI) # USER and PASSWORD can be omitted. # In that case, it is automatically set to minioadmin | minioadmin. environment: - "MINIO_ROOT_USER=minio" - "MINIO_ROOT_PASSWORD=minio123" # minio-managed configuration files and uploaded files # If you want to refer to the file locally or if you want to make the registered file persistent, # mount a local directory. # volumes: # - ./minio/data:/data # If you want the MinIO container to start automatically after restarting the PC, etc., # enable it if you want it to start automatically when it is stopped. # restart: unless-stopped # Configure the MinIO Client (mc) container mc: image: minio/mc:latest container_name: mc_test depends_on: - minio environment: - "MINIO_ROOT_USER=minio" # Same user name as above - "MINIO_ROOT_PASSWORD=minio123" # Same password as above # Create a bucket with the mc command and place the file in the created bucket. # First, set the alias so that subsequent commands can easily # specify MinIO itself. # This time, the alias name is myminio. # mb creates a new bucket. Abbreviation for make bucket # cp copies local files to MinIO. entrypoint: > /bin/sh -c " mc alias set myminio http://minio:9000 minio minio123; mc mb myminio/mail-template; mc mb myminio/image; mc mb myminio/csv; mc cp init_data/mail-template/* myminio/mail-template/; mc cp init_data/image/* myminio/image/; mc cp init_data/csv/* myminio/csv/; " # Mount the directory containing the files you want to upload to MinIO. volumes: - ./myData/init_data:/init_data Directory and File Structure Create an appropriate dummy file and start it with the following directory and file structure. minio_test# tree . . ├── compose.yaml └── myData └── init_data ├── csv │ └── example.csv ├── image │ ├── slide_01.jpg │ └── slide_04.jpg └── mail-template └── mail.vm Startup and Operation Check The following is the flow of running MinIO and its client on Docker and checking its operation. The Docker container is started in the background (using the -d flag) with the following command: If Docker Desktop (for Windows) is installed, containers can be created using a command line interface such as Command Prompt or PowerShell. ** Download Docker Desktop here * docker compose up -d * The hyphen in the middle of docker-compose is no longer added. For more information, click here. Docker Desktop Open Docker Desktop and check the container status. You can see that the minio_test container is running, but the mc_test container is stopped. Check the execution log of the mc_test container. MC Execution Log The logs indicate that the MinIO Client (mc) has been executed and all commands are completed successfully. Management Console Next, let's explore the MinIO GUI management console. Access port 9001 on localhost with a browser. http://127.0.0.1:9001 When the login screen appears, enter the username and password configured in compose.yaml (minio and minio123 in this example). List of Buckets Select "Object Browser" from the menu on the left. You will see a list of buckets created and the number of files stored in them. List of Files Select the "image" bucket as an example and look inside. You will see the pre-uploaded files. You can directly view the file by selecting "Preview" from the action menu next to the file. File Preview Function Our mascot character, the mysterious creature K , will be shown on preview. The function to preview images directly in MinIO management console is very useful. Installation of MC (MinIO Client) Using the command line can be more efficient than GUI for handling large numbers of files. Also, when accessing MinIO from source code during development and an error occurs, the command line is very useful for checking file paths. This section describes how to install MinIO Client and its basic operations. *If you are satisfied with the GUI management console, feel free to skip this section. # Use the following command to download mc. The executable file is stored in an arbitrary directory. minio_test/mc# curl https://dl.min.io/client/mc/release/linux-amd64/mc \ --create-dirs \ -o ./minio-binaries/mc # Operation check # Check if the installed mc is the latest version and display the version to check that it was installed correctly. # It is your choice whether to pass the mc command through Path. I will not pass through this time. minio_test/mc# ./minio-binaries/mc update > You are already running the most recent version of ‘mc’. minio_test/mc# ./minio-binaries/mc -version > mc version RELEASE.2023-10-30T18-43-32Z (commit-id=9f2fb2b6a9f86684cbea0628c5926dafcff7de28) > Runtime: go1.21.3 linux/amd64 > Copyright (c) 2015-2023 MinIO, Inc. > License GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html> # Set alias # Set the alias required to access the MinIO server. minio_test/mc# ./minio-binaries/mc alias set myminio http://localhost:9000 minio minio123; > Added `myminio` successfully. # Example of file operation # Display a list of files in the bucket minio_test/mc# ./minio-binaries/mc ls myminio/image > [2023-11-07 21:18:54 JST] 11KiB STANDARD slide_01.jpg > [2023-11-07 21:18:54 JST] 18KiB STANDARD slide_04.jpg minio_test/mc# ./minio-binaries/mc ls myminio/csv > [2023-11-07 21:18:54 JST] 71B STANDARD example.csv # Screen output of file contents minio_test/mc# ./minio-binaries/mc cat myminio/csv/example.csv > name,age,job > tanaka,30,engineer > suzuki,25,designer > satou,,40,manager # Batch file upload minio_test/mc# ./minio-binaries/mc cp ../myData/init_data/image/* myminio/image/; > ...t_data/image/slide_04.jpg: 28.62 KiB / 28.62 KiB # File deletion minio_test/mc# ./minio-binaries/mc ls myminio/mail-template > [2023-11-15 11:46:25 JST] 340B STANDARD mail.txt minio_test/mc# ./minio-binaries/mc rm myminio/mail-template/mail.txt > Removed `myminio/mail-template/mail.txt`. List of MC Commands For more detailed documentation on the MinIO Client, please refer to the official manual. Click here for the official MinIO Client manual. Lastly, Access from Java Source Code After building an S3-compatible development environment using MinIO locally, I'll demonstrate how to access MinIO from a real Java application. First, configure Gradle. plugins { id 'java' } java { sourceCompatibility = '17' } repositories { mavenCentral() } dependencies { // https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 implementation 'com.amazonaws:aws-java-sdk-s3:1.12.582' } Next, create a Java class to access MinIO. package com.example.miniotest; import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectSummary; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.regions.Regions; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; public class Main { public static void main(String... args) { new Main().execute(); } /** *S3 compatibility test of MinIO *Obtain a list of files in the bucket and display the contents. */ private void execute() { System.out.println("--- Start ---"); // When connecting to a local MinIO, // switches when connecting to AWS S3. // Assumed to switch with the spring boot profile. boolean isLocal = true; // Since MinIO is compatible with AWS S3, // you can connect from the AWS library. AmazonS3 s3Client = null; if (isLocal) { s3Client = getAmazonS3ClientForLocal(); } else { s3Client = getAmazonS3ClientForAwsS3(); } // Bucket name final String bucketName = "csv"; // List all objects in the bucket. ListObjectsV2Result result = s3Client.listObjectsV2(bucketName); List<S3ObjectSummary> objects = result.getObjectSummaries(); // Loop as many filenames as possible. for (S3ObjectSummary os : objects) { System.out.println ("filename retrieved from bucket: " + os.getKey()); // Obtain the contents of the file in the stream. // Of course, files can also be downloaded. try (S3Object s3object = s3Client.getObject( new GetObjectRequest(bucketName, os.getKey())); BufferedReader reader = new BufferedReader( new InputStreamReader(s3object.getObjectContent()))) { String line; while ((line = reader.readLine()) != null) { // Screen output of file contents one line at a time System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } // Insert a blank line at the file switching. System.out.println(); } System.out.println("--- End ---"); } /** *Click here to connect to local MinIO. * @return AmazonS3 client instance is an implementation of the AmazonS3 interface. */ private AmazonS3 getAmazonS3ClientForLocal() { final String id = "minio"; final String pass = "minio123"; final String endpoint = "http://127.0.0.1:9000"; return AmazonS3ClientBuilder.standard() .withCredentials( new AWSStaticCredentialsProvider( new BasicAWSCredentials(id, pass))) .withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( endpoint, Regions.AP_NORTHEAST_1.getName())) .build(); } /** * Obtain an Amazon S3 client and set up a connection to the AWS S3 service. * This method uses the IAM role at runtime on Amazon EC2 instance to automatically * obtain credentials and establish a connection with S3. * The IAM role must have a policy allowing access to S3. * * The client is configured as follows: * - Region: Regions.AP_NORTHEAST_1 (Asia Pacific (Tokyo)) * - Maximum connections: 500 * - Connection timeout: 120 seconds * - Number of error retries: Up to 15 times * * Note: This method is intended to be executed on an EC2 instance. * When running on anything other than EC2, AWS credentials must be provided separately. * * @return AmazonS3 client instance is an implementation of the AmazonS3 interface. * @see com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper * @see com.amazonaws.services.s3.AmazonS3 * @see com.amazonaws.services.s3.AmazonS3ClientBuilder * @see com.amazonaws.regions.Regions */ private AmazonS3 getAmazonS3ClientForAwsS3() { return AmazonS3ClientBuilder.standard() .withCredentials(new EC2ContainerCredentialsProviderWrapper()) .withRegion(Regions.AP_NORTHEAST_1) .withClientConfiguration( new ClientConfiguration() .withMaxConnections(500) .withConnectionTimeout(120 * 1000) .withMaxErrorRetry(15)) .build(); } } Execution Result --- Start --- Filename retrieved from bucket: example.csv name,age,job tanaka,30,engineer suzuki,25,designer satou,40,manager --- End --- Source Code Description A notable feature of this code is that the AWS SDK for Java supports both MinIO and AWS S3. When connecting to a local MinIO instance, use the getAmazonS3ClientForLocal method; when connecting to AWS S3, use the getAmazonS3ClientForAwsS3 method to initialize the client. This approach makes it possible to use the same SDK across different backend environments and the same interface for operation. It is nice to be able to easily test an application before deploying it to AWS environment without incurring additional costs. I hope you find this guide helpful. Thank you for reading my article all the way to the end.‍🙇‍♂ [^1]: Post #1 by a team mate from the Common Services Development Group [ グロヌバル展開も芖野に入れた決枈プラットフォヌムにドメむン駆動蚭蚈(DDD)を取り入れた ] [^2]: Post #2 by a team mate from the Common Services Development Group [ 入瀟 1 幎未満メンバヌだけのチヌムによる新システム開発をリモヌトモブプログラミングで成功させた話 ] [^3]: Post #3 by a team mate from the Common Services Development Group [ JIRA ず GitHub Actions を掻甚した耇数環境ぞのデプロむトレヌサビリティ向䞊の取り組み ] [^4]: Post #4 by a team mate from the Common Services Development Group [ VSCode Dev Container を䜿った開発環境構築 ]
Introduction Hello. I'm Kazuki Morimoto from the Analysis Group in the Data Analysis Division. I usually work in the Osaka office and handle analysis topics such as those from the retention project, credit project, used vehicle division and the MyRoute app. (I'd like to post the details separately on the Tech Blog in the future.) In this article, I'd like to share with you what I've learned from using the preview version of "QuickSight Generative BI." When I attended a AWS Generative AI Workshop that was held for TOYOTA Group companies last month, I was introduced to it and thought, "This could be quite useful!" so I gave it a try. What you can find in this article An overview of QuickSight Generative BI I made a Sales Dashboard for a Ramen Subscription service Using Generative BI Good Points and Future Improvements Contents not covered in this article How to Use QuickSight Explanation of QuickSight Q How to Get Started with Generative BI ( This one was well written.) Announcing Generative BI capabilities in Amazon QuickSight What is Generative BI? Simply put, it is a service that applies Amazon Bedrock's LLM to "QuickSight Q" to add a wider range of functions. Originally, there was a function called "QuickSight Q" that enabled users to ask questions in natural language and receive answers with graphs. Applying Amazon Bedrock's LLMs (Large Language Models) to it has empowered us to perform analyses based on natural language with a higher degree of freedom. Quicksight Q *QuickSight Q is available in the Tokyo region and many other regions in Japan. Reference I Made a Dashboard Using Generative BI Let's try out Generative BI right away. I am going to create a dashboard imagining KINTO starting a Ramen subscription service . *As a side note, KINTO is a mobility service company, not in the ramen business... Or at least not for now... Goals This time, I will refer to the "Sales" segment of the Dashboard published by CRISP, with the goal of creating the following two dashboards. Sales (by year and month) Contract plan composition ratio Pre-preparation As a pre-preparation, I will create a service overview and sample data of this Ramen subscription. Service overview I asked ChatGPT to come up with Ramen subscription plans. The plans turned out to be way better than I expected. LOL I’m sold on that! Create sample data Next, I asked ChatGPT to create sample data with the following prompt. Results It generated a CSV file with plausible sample data for real. Practice Now, I'd like to import the sample data I just mentioned into QuickSight to create charts. This time, I'm trying it out using the Northern Virginia region in our in-house sandbox environment. *As mentioned above, how to get started with generative BI is omitted. 1. Create a sales (by year and month) graph First, I'd like to create a graph of sales (by year and month). Generative BI is only available in English (as of December 11, 2023), so I'll create prompts in English. Monthly sales estimates as of December 11, 2023 Enter the following prompt into "Build a visual." Cumulative Sum(Yen) in 2023-12 After pressing Build, the following board was created in about 3 seconds. After confirming that the output is as expected, click "ADD TO ANALYSIS" to add it as a visual. Create a monthly sales trend graph by month and year Similarly, enter the following prompt. Cumulative Sum(Yen) per months This also produced a graph that was almost as expected. Here is the result of manually changing the size of the graph after adding the visual. The horizontal axis is in "MMDD, YYYY HH/hh" format, which is difficult to read, so I changed the visual. Generative BI also seems to be able to make visual changes in natural language. As you may have noticed, my English skills are not very strong, so I rely on our in-house AI-ChatBOT (Sherpa) for support. I Typed in. Apparently, the visual editing functionality is still insufficient. Even if I check the official website , it seems that there aren't many things I can do yet, so I'll modify it manually. I'm looking forward to the future. Create a monthly sales ranking table by prefecture Next, I will try to output a visual in table format. Once again, with the help of Sherpa, I entered the following prompt. Please provide the monthly fee sum yen for each prefecture in a ranking format in a table in December 2023 (Three consecutive “in”s! ) Results How impressive. It displayed exactly the table I wanted. Added to the visual (graph size, etc., has been modified manually.) 2. Contract plan composition ratio Next, I'd like to see the percentage of subscription contract plans as a pie chart. As always, I asked Sherpa to translate and entered the following prompt. total unique number of Contract ID per contract plan in pie It's perfect! I also asked to display the total monthly fee for each plan. Total monthly fee for each contract plan in table Dashboard view Let's turn the created charts into a dashboard and check it. Generative BI created everything, except for the chronological format of the line graph. It looks pretty good, right? Exective summary There seems to be a function that creates a summary based on the dashboard contents. Click on "Executive summary" from the "Build" button in the upper right corner of the dashboard screen. A summary was created in about 10 seconds. The structure seems to be a description of the entire dashboard and each chart. Although it is very simple, the content appears to be accurate. Moreover, a link was embedded in the description of each graph. For large dashboards, clicking on the summary jumps to the linked graph, which is convenient. Good Points and Future Improvements Good points It creates charts instantly by giving natural language commands. For simple graphs, it is faster than making them manually. It will guess the column name to some extent even if you do not explicitly specify it. → Conversely, it is necessary to name the appropriate columns to be guessed. Monthly totals are also done automatically. The Executive Summary can be used as a basis for the material. Future Improvements The fine-tuning function of graphs is still insufficient. It would be faster to do this by hand than by natural language. English only. (As of December 11, 2023) The input field is short, making it difficult to correct sentences. After entering a long sentence, it was a little difficult to edit the sentence when the graph I wanted was not displayed. It does not understand chronological expressions such as last 3 months. Conclusion This time, I tried the public preview version of Generative BI. Although it is not at the level of practical business use yet, I think the service shows a lot of promise depending on future updates. If we can easily and quickly visualize the current situation, we will be able to accelerate the cycle of business improvement, so I look forward to the future. (This is a bit off-topic, but I was very surprised by the high degree of completion in the sample data and illustrations created by ChatGPT.) Furthermore, there is an article about the Analysis Group provided on the Tech Blog below, so please read it if you are interested. A Look into the KINTO Technologies Analysis Group
Introduction My name is Endo and I am the FE team leader of QA Group at KINTO Technologies. I mainly check QA cases from multiple products and projects for the frontend of the Japanese KINTO website developed by KINTO Technologies, and allocate and manage tasks to each of the QA team members. While working, I often engage in conversations with people from both the development side and QA. This time, when we were chatting, a question came up: "Why do we even do QA? " . Since I've been given this opportunity, I would like to share my own thoughts on this. Is QA Necessary in Development? Before writing about the role and necessity of the QA team on the theme, "Why do we do QA?", I would like to consider whether QA itself is necessary in the first place. In some seminars and articles on quality, there is a discussion about the necessity of QA. I have heard someone say that in Agile development, QA is unnecessary if each team has a QA role within the team, rather than having a separate QA team outside of it. For example, if there is a separate QA team from an Agile team, the following concerns may arise: Trying to be flexible in responding to specification changes in a sprint is likely to affect the subsequent QA process. The separate lead time for QA to understand the specifications lengthens the QA process. When a problem occurs, it is not addressed during the sprint, leading to significant rework. From these points, I think the main idea of the discussion was that Agile development can be managed without these concerns as long as there are members in the team who can handle everything from development to testing, including the role of QA. Here, I believe it is important to note that the role of QA itself is not being denied, even though a QA team may not necessary. On the contrary, those who argue that a QA team is necessary may believe that: By having a QA team independent from the development who can make objective judgments, quality can be improved from a different perspective. Knowledge from different specifications can be easily centralized in the QA team and information can be obtained across projects. Based on this conjunction of knowledge, the QA team can provide missing considerations and necessary information for other projects running in parallel. On the other hand, challenges of inserting a QA role within an Agile team include: The difficulty to include highly skilled team members who have the knowledge to oversee everything testing-related, from development to system testing If that is not the case, then it will be necessary to train team members, but acquiring the appropriate skills takes time. Knowledge pools easily around skilled members, and when those leave the team, it becomes difficult to handle QA. I have come across an article in columns of other companies that they do not have a department or group called QA, yet they do QA work for their service users. In other words, whether to create a QA team as an organization is a choice based on development methods and organizational culture. However, I feel that everyone has a common understanding that the role of QA is necessary to check the overall quality for users based on system requirements. The Role of QA Beyond Testing When conducting confirmation and verification, QA is often seen as a specialized testing team, leading to a common misconception that QA is synonymous with testing. However, the role of QA is not only limited to testing. Here are three major aspects on this point. (1) Confirm the correct understanding of specifications When designing test scenarios, QA has to confirm system requirements and will ask questions when needed to the development and operations sides. From the point of conducting testing, QA first confirms what the “correct answers” are to the specifications, based on the requirements. Through this process, QA can point out details in the specifications, helping prevent requirement omissions and to refine the information given in the specifications. The following is an example of a case where the "Screening Application Process" section of the KINTO website was revised. In this case, the expected test result is that the design of "What is required for the application" and "Screening application steps" will match the screen specification. What is required in case of a regular web application is to upload a driver's license image. However, as KINTO services are also offered via dealerships where driver's licenses can be verified on the spot, the system should be created so that the dealership staff could skip the image upload (as indicated by the red box below). When we consulted this point with the development side, they realized that it was necessary to take it into consideration. While it may be a minor detail, we consider the expected use cases and conditions, ensuring that the correct answer aligns with the expected test results. In this way, the specifications that should be in place are confirmed by making specifics for ambiguous expressions or omissions. As mentioned above, through specification checks from the QA team, it is sometimes possible to point out requirements that the development side was not aware of. In addition, by aligning test perspectives in parallel with the development process, although not at the requirements definition stage, we can enhance quality earlier, before testing is conducted. (2) Organize documentation during test design Working on tight deadlines during development can pose challenges to organize documentation effectively. Even if each specification is available, there are cases where it may not be listed or the operating procedures may not be organized. In QA, while confirming the correct answers to the specifications mentioned in (1) above, the following aspects are identified as necessary in test design: scenarios, function confirmation, and display confirmation. In this case, the original information is in the development side, so basically the materials are used as they are, but if necessary, QA lists procedures and organize the information to facilitate what to check during tests. We sometimes receive positive comments from members outside of the QA team, such as how they were able to gain a bird's-eye view of the overall functionality by referring to the materials created by QA, or how helpful it was in confirming certain processes. Since the information is consolidated within the project, the contents of the materials compiled by QA are not necessarily the latest, but they are organized for the purpose of understanding the current specifications. In addition, since QA can observe projects running in parallel from a horizontal perspective, they can provide information on concerns to the development side while organizing specifications, which can be helpful in terms of quality. (3) Feedback from defect analysis After a project is completed, a defect analysis will be conducted based on the results of the QA testing. The following is mainly done on a project-by-project basis. Depending on the characteristics of each project and product, we offer feedback which may include requests for additional consideration during the requirement definition stage or for stronger emphasis on unit testing. By providing feedback to the project at review meetings, they will be able to use it as a reference for the progression of the next project tasks. When analyzing defects, we collaborate to clarify the defect trends for each product and identify project-specific issues that need to be addressed. It is important to report not only the weaknesses of the project but also the effects. For example, sharing a different approach to fulfilling requirements from a different project to provide insight; or if the portion of a unit test was successful it is crucial to communicate what has been effective. Our reports are to guide the initiative towards a positive direction and strengthen it further, so we are cautious to address not only negative aspects when giving feedback. Consequently, the role of QA is significant not only in testing, but also in building quality. So Why Do We Practice QA? For us who provide web and app services, for example, Design is consistent, but buttons are in different positions on different screens Screen transitions take time While there are no issues on a PC, the text becomes challenging to read on a smartphone due to changes in display size. If these issues persist, users may choose not to use the service, finding it difficult to use or view before even experiencing the appeal of the service. I believe that performing QA work is meaningful not only to confirm that the requirements are met, but also to improve a website so that visitors can use it comfortably. In addition, since system requirements can be checked horizontally through QA work, it also plays a role in discovering unexpected project risks by obtaining a certain level of specification information. As KINTO Technologies has multiple projects running concurrently for each product, Are there any risks associated with the timing of project releases? If a common specification changes, are other products that may be affected aware of the changes? By conducting a series of tests, are there any issues with the functionality, including linking data across products? Even in areas where the project side has already considered risks, we check them again during QA to identify any remaining risks and ensure built-in quality. In this way, I think it is necessary for QA to confirm the requirements from an objective viewpoint for our customers who actually use the service, and provide support for the creation of quality aspects. I believe that this mindset of "for our customers" is important. Our services are used by the majority of people. However, the customer faces the service as an individual. We must prevent a situation where the customer never visit our website again due to minor difficulties in use or view. Therefore, I believe that the mindset of “for our customers” plays an important role in creating a positive cycle. It effectively communicates the appeal of the services we aim to convey, ultimately leading to the acquisition of more customers. Conclusion In this article, I wrote my thoughts starting from the point of why we do QA in the first place. As mentioned earlier, the role of QA varies from organization to organization. If you agree with this content or if you have different opinions and are interested in QA, please feel free to contact me. Moreover, If you find the idea of doing QA together enjoyable, or if you want to make QA more exciting and better, you are always welcome! Please apply from the recruitment page below. We can start with a casual interview. https://hrmos.co/pages/kinto-technologies/jobs?category=1783696806032474116
Introduction Hello I'm Nakahara who is in charge of frontend development for KINTO ONE (Used Vehicles) at KINTO Technologies. KINTO ONE (Used Vehicles) is an e-commerce site for leasing again vehicles that were once leased through KINTO ONE before, allowing users to check information on actual vehicles in stock, complete the contract process, and manage their contracts. KINTO ONE (Used Vehicles) Website Despite the extended delivery times for new vehicles, this service comes highly recommended due to the availability of high-quality vehicles with relatively short delivery times and a ¥0 cancellation fee for mid-term cancellations. (As of December 2023, this service is available only in Tokyo and Aichi Prefecture.) Vehicle Image Issues Unlike new vehicles, a site that handles used vehicles treats each individual vehicle as a product. Naturally, e-commerce sites must display images of each vehicle. To commercialize the lease-up vehicles, KINTO ONE (Used Vehicles) takes photos of each vehicle, and stores the images in the backend vehicle management service. To display on the site, the vehicle information, including the image URLs, was obtained from the backend and built as a page in the frontend server container, while the vehicle images were obtained from the client side, from the image distribution path of the vehicle management service. --- title: Server Configuration (Overview) --- flowchart LR %%External Element User U[User] %%Group and Service subgraph GC[AWS] subgraph FE[Used Car Site Frontend] subgraph CF["Cloudfront"] end ECS("Frontend Server") end subgraph BE[Vehicle Management Service] UCAR("Vehicle Management Server") end end %% Relationship between services U --> |"Site Access"|CF CF --> ECS ECS --> |"Obtain Vehicle Information"|UCAR U --> |"Obtain Vehicle Image"|UCAR %%Group Style classDef SGC fill:none,color:#345,stroke:#345 class GC SGC Here, the vehicle images distributed by the vehicle management service were one-size JPGs, which caused the following problems. Inefficient compression Distribution at a size not related to the display size Regardless of the display size on the actual site, images over 1000px in width were distributed PageSpeed Insights , which measures site performance in practice, also pointed out several aspects related to vehicle images. PageSpeed Insights indication Ideal State The first thing that can be mentioned is the improvement of the points indicated by PageSpeed Insights. Efficient compression method of distribution Distributing images in sizes according to the display sizes These improvements not only enhance page display speed and reduce client's network traffic, but also improve server-side costs[^1]. In addition, from a development and operational standpoint, the following points can also be mentioned for achieving the ideal state. Minimize additional resources[^2] Can request image conversion settings from the frontend side Low cost and quick response Since adding resources will increase the associated management workload, it is desirable to keep the configuration as small as possible. For conversion settings, we keep in mind that the requirements for displayed images may change due to design modifications or the addition of new types of high-resolution devices. In such cases, it is desirable to be able to change the resolution and compression method of the images easily obtained from the frontend side. [^1]: KINTO Technologies mainly builds its services on AWS, but data transmission to the internet is also costly point [^2]:. "Resources" here refers to the concept that includes not only AWS resources but also external services for image conversion. Review of Image Conversion Methods Image conversion and distribution at the time of photo registration on the vehicle management service side This method can be said to meet the requirement if only a predefined one is created, but it is not chosen because it does not align with the preceding sections, "Minimize additional resources" and "Can request image conversion settings from the frontend side." Use of external services There are various CDNs with image conversion functions, including imgix, but we did not select this one either. Based on site usage, the US$200-300 per month plan seemed to fit. In addition, it is likely to require some workload to change the settings for the current image management storage and to make internal adjustments for this. Although it is good that we do not have to spend workload for monitoring by using an external service, we did not choose this because KINTO ONE (Used Vehicles) is still a developing service, and it is difficult to estimate its implementation effect in terms of monetary and time costs. Remote image optimization of Next.js The method that requires the least workload to implement is to optimize images using the Next.js Image Component. However, we decided not to choose this method because it does not suit the current site situation. Currently, we use Next.js as a framework for site distribution by server-side rendering, but the server is running on a relatively small instance configuration. However, due to the high number of images per page, the processing load spikes. It seemed necessary to increase the instance size at the minimum load. In fact, the site sometimes went down when the same settings were applied at the beginning of the service. We opted against this method to avoid increasing the instance size just for image conversion. Build our own method with Lambda@Edge (★ chosen option) This method is used in combination with Cloudfront to execute a function that performs image conversion on the edge side and distribute the converted images. The site itself was delivered via Cloudfront, so it seemed like it could be implemented quickly with just a few additional settings. The cost of the conversion process is almost minimal due to the number of images, and compressing the image size can further reduce the transfer cost. It takes a little time and effort to implement, but since the server-less operation is available from then on, so as long as the number of concurrent executions is taken care of, it did not seem to require that much time and effort to manage. Therefore, we decided to use this method. Adding the Image Conversion Function in Lambda@Edge Change to the following configuration: --- title: Server Configuration (after amelioration) --- flowchart LR %% External Element User U[User] %% Group and Service subgraph GC[AWS] subgraph FE[Used Car Site Frontend] subgraph CF["Cloudfront"] LM["Lambda@Edge<br>Resize/WebP Conversion"] end ECS("Frontend Server") end subgraph BE [Vehicle Management Service] UCAR("Vehicle Management Server") end end %% Relationship between services U --> |"Site Access"|CF CF --> ECS ECS --> |"Obtain Vehicle Information"|UCAR U --> |"Obtain Vehicle Image"|CF LM --> |"Obtain Vehicle Image"|UCAR %% Group Style classDef SGC fill:none,color:#345,stroke:#345 class GC SGC We added a behavior when accessing a vehicle image path to return the result of resizing and converting to WebP using Lambda@Edge. Regarding the processing contents of Lambda@Edge, there is a lot of information such as Precedents ^3 and AWS official guide ^4 , so I won't delve into details. Instead, I'd like to touch on some key points in this implementation. Specifying image conversion contents with query parameters The image conversion settings should be able to be specified with the following query parameters. query Description width Specify the width of the image after resizing quality Set the image quality during conversion This allows the site to retrieve images of the size the site side wishes to display at the specified size and quality. Cache settings Set the query parameters above as cache keys. Failure to do so may result in caching the previously generated image, resulting in displaying a smaller image when a larger one is requested. Custom loader next/image settings Once image conversion is enabled on the Cloudfront side, it is necessary to implement it on the page side as well. Since this service is built on Next.js, it is possible to request the optimal image size for the displayed size by setting a custom loader for the Image Component, without need for detailed settings. Note that the sizes property setting is important to select the optimal size for display. By setting this value, the srcset property will be configured appropriately for the actual display size when rendering the Image Component. import Image, { ImageLoaderProps } from "next/image"; // components for vehicle image export function CarImage({ src, sizes, alt = "vehicle Image", className = "" }) { // custom loader function optimizeLoader({ src, width, quality }: ImageLoaderProps) { return `${src}?width=${width}&quality=${quality}`; } return ( <Image className={className} src={src} alt={alt} sizes={sizes} quality={90} loader={optimizeLoader} loading="lazy" /> ); } By creating and using such a component, images can be requested with parameters for image size according to the display size on the site, and resized and WebP converted images can be displayed. Results We have confirmed that image optimization using this method has successfully eliminated the image-related indications in PageSpeed Insights. PageSpeed Insights image-related indications have been resolved. Conclusion This time, we attempted to optimize the display images as part of the site performance improvement. However, there are still a lot of performance issues. We will continue to improve site performance and strive to provide a more enjoyable experience for users.
はじめに こんにちは、今幎 1 月に入瀟した yuki.n です 2023 幎 12 月入瀟のみなさたず今幎 1 月入瀟のみなさたに入瀟盎埌の感想をお䌺いしたした KINTO テクノロゞヌズに興味のある方、そしお、今回参加くださったメンバヌぞの振り返りずしお有益なコンテンツになればいいなず思いたす。 星野 自己玹介 1 月にできた新蚭郚眲であるモビリティプロダクト開発郚の副郚長ずしお入瀟した星野です。 これたでテクニカルな目線でサヌビスを䜜る、運営する、ずいうこずを仕事にしおきたした。 所属チヌムはどんな䜓制ですか 配䞋に 4 チヌムあり、① 自瀟メディア担圓、② むンキュベヌション案件担圓、③ 販売店向けツヌル開発担圓、④ 販売店向けツヌル䌁画担圓ずいった感じです。瀟員数は 2 月時点で 23 名で、゚ンゞニア䞭心ですが、プロデュヌサヌ、ディレクタヌ、デザむナヌもいるので、事業を回せる䜓制です。 KINTO テクノロゞヌズ(以䞋 KTC)ぞ入瀟したずきの第䞀印象は ギャップはありたしたか ちゃんずしおいる 郚眲説明だけでなく、商流説明、ビゞョン、䞭長期蚈画ずいった、䞭途瀟員䞭心だからこその同じ方向を向くためのオリ゚ンテヌションが充実しおいるのは玠晎らしいず思いたす。 珟堎の雰囲気はどんな感じですか 幎霢局は二十代〜四十代ず幅広いメンバヌがいるのにもかかわらず、みな和気あいあいずした感じです。瀟歎が長いメンバヌが倚いのかず思いきや、入瀟しおただ半幎経っおいない瀟員も倚く、新しい人を向かい入れるこずぞの寛容さを感じたす。働き方も倚様で、他の郚眲に比べおリモヌト勀務の頻床が高いようです。 過去の経歎も様々なので、チャレンゞしたい人にはずおもよい郚眲だず思いたす。気になる方はぜひ採甚担圓にご連絡を ブログを曞くこずになっおどう思いたしたか ずおも良い取り組みだず思いたす。情報発信ができる組織は採甚競争力を有利にしたすからね。 【Romie さんからの質問】サヌビスを䜜っお運営するこずは、スタヌトで぀たづくず埌から取り戻すのがすごく倧倉な印象です そこで最初に着手するにあたっお芋逃しおはいけないポむントや倧切にしおいるマむンドを教えおください。 サヌビスは䜿われ始めおからがスタヌトで、そこから䟡倀が発生し、育おおいく必芁がある、ずいう認識が重芁ですね。簡玠に衚珟するず「運甚し続ける䜓制を考慮する」ずいうこずでしょうか。ただ新芏性のあるサヌビスは受け入れられない堎合もあるので、スタヌト時点ではマスト芁件だけに絞っお、最小限でスタヌトするのも倧事かなず思いたす。サヌビスなので、スタヌトした以䞊はトラブルよりも䜕よりも「利甚者にずっおサヌビス終了になる事態」が最も避けるべきこず、ずいう意識も倧事で、持続性/継続性に぀いおはプロダクトオヌナヌずしっかり握っおおくず良いず思いたす。 Choi 自己玹介 12 月に入瀟した KINTO ONE 開発郚 新車サブスク開発 G の Choi です。 これたで色んなりェブサヌビスのフロント゚ンド・バック゚ンドの開発をやっおきたした。 所属チヌムはどんな䜓制ですか コンテンツ開発チヌムずしお私含め人の䜓制ずなっおいたす。 ほずんどがフロント゚ンドの゚ンゞニアです。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 入瀟埌のオリ゚ンテヌションがしっかりあったので、システムがよくできおいるず感じたした。倧手䌚瀟のシステムず若い IT 䌚瀟ずのハむブリッドな感じですごくいい印象でした。 ゚ンゞニアの方々がベテランで、か぀新しい技術に探究・勉匷しおいるこずが第䞀印象でした。 珟堎の雰囲気はどんな感じですか 入瀟しおか月は分からないこずが倚かったのですが、チヌムの皆さんが芪切で業務䞊の質問などに教えおくれおいたした。 勀務先の倧阪オフィスはただ 30 人近くの少人数で、他の郚眲の方ずコミュニケヌションがよく取れおいたす。月回情報共有䌚でオフィスのメンバヌず LT 䌚、オフィス環境の改善に関しお意芋共有などを行っおいたす。 ブログを曞くこずになっおどう思いたしたか 日本語を曞くのが苊手なので少し䞍安でしたが、このか月間の自分の振り返りができたのでいいず思いたす。 【星野さんからの質問】フロント゚ンド゚ンゞニアずしお「これは秀逞」ず思ったアプリがあれば教えお䞋さい。 最近のフロント゚ンドは技術進歩のスピヌドが早い感がありたすね。UI/UX もナヌザヌフレンドリヌになっおいるサむトが倚いです。特にこれはすごい ず思ったアプリはないですが、私はフロント゚ンドだけではなくバック゚ンドやアプリ開発の経隓もありたしお、その芳点で最近 Flutter や React Native などでプラットフォヌムの制玄なく䜜成できるのに興味がありたす。既に公開されお䜕幎か経っおいたすが、私が最初にアプリ開発した際は Android、iOS、りェブアプリを別々䜜らないずいけなかったのでその工数がなくなるのぱンゞニアずしおすごく助かる ず思いたす。 YI 自己玹介 プロゞェクト開発郚 オペレヌションシステム開発 G の YI です。 前職は SIer で業界・業皮問わず、たたフロント/バック゚ンド問わず様々な開発プロゞェクトで䞻に B2B のシステム導入に関わるプロゞェクトに埓事しおきたした。 KINTO ONE 䞭叀車に関連したバックオフィス業務で扱うシステムの開発をしおいたす。 所属チヌムはどんな䜓制ですか 䞭叀車システム T ずしお 5 名、その他 BP さんが 10 名皋床の䜓制ずなっおいたす。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 高䟡な゜フトりェアラむセンスの賌入が景山さんぞの Slack 承認だけで進み、翌日には䜿えるようになっおいたのには驚きたした。 珟堎の雰囲気はどんな感じですか 同幎代の方々が倚い印象なのず、様々なバックグラりンドを持぀方がいらっしゃるずいう雰囲気を感じおいたす。 ブログを曞くこずになっおどう思いたしたか 実は Tech Blog は入瀟前から芋おいたのでこの䌁画に぀いおもなんずなく知っおいたのですが、改めお曞くずなるず「来たか 」ずいう気持ちでした。 【Choi さんからの質問】瀟内で業務倖でしたいアクティビティヌがあれば教えおください趣味・スポヌツなど。 高校の郚掻からやっおいたテニスは「ktc-テニスクラブ」、あずは「ゎルフ郚」「自動車郚」等をやっおみたいず思いたす。普段の業務では䞭々関わるこずのない方々ず「暪の぀ながり」ができるこずはずおもよいこずだず思っおいるので、色々ず楜しみたいず思っおいたす HaKo 自己玹介 デヌタ分析 G 分析プロデュヌス T の HaKo です。 調査䌚瀟や小売通販䌚瀟でリサヌチやアナリストをやっおきたした。 人はどういう思いでサヌビスを利甚したり、䜕を思っお利甚しおいるのか、を知る事に面癜さを感じおいたす。 所属チヌムはどんな䜓制ですか リヌダヌず自身を含めお総勢 9 名。 现分化されおいたチヌムが集玄しおひず぀のチヌムになった歎史有り。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 幎霢局高めの環境に圚籍する事が倚かったので、ガチガチな「埡䜜法」が少なくお感動したした。 珟堎の雰囲気はどんな感じですか 皆それぞれ埗意分野・専門領域を持っおいるず感じおおり、倚皮倚様な刺激を埗られる珟堎だず感じおいたす。 ブログを曞くこずになっおどう思いたしたか ブログを曞くこず自䜓が初めおなのですが、遠い昔に mixi で埒然なるたたに日蚘を曞いおいた頃を思い出したした。 【YI さんからの質問】KTC に入瀟したこずで倉わったこずはありたすか 入瀟早々に匕き継ぎ案件が倚かったのですが、これたで䞻戊堎ずしおきた販促䌁画や分析からではなく、メルマガ配信の仕組みなど技術的な偎面から入っおいくようになった気がしたす。 yuki.n 自己玹介 KINTO ONE 開発郚 新車サブスク開発 G の yuki.n です。 今幎月にフロント゚ンド゚ンゞニアずしお入瀟したした。倧阪配属です。 フロント゚ンドに限らず、いろいろ携われたら嬉しいな、ず思っおいたす。 所属チヌムはどんな䜓制ですか 新蚭されたチヌムずいうこずもあり、珟時点ではチヌム内倖問わず、わたし含めお名で動いおいたす。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 入瀟時のオリ゚ンテヌションだったり、䌚瀟のルヌルだったり、いろんなずころがずおもしっかりしおいおびっくりしたした。 あたりない経隓だったこずもあっお、ものすごく新鮮でした。 珟堎の雰囲気はどんな感じですか 居心地がよく、いい意味での萜ち着きを感じおいたす。自分以倖のメンバヌはみなさん東京にいらっしゃるのですが、コミュニケヌションに぀いお特に壁を感じず、気兌ねなくやり取りさせおもらえおいたす。たた、自分の「やっおみたい」を受け入れおいただけるなど、かなり自由にやらせおもらっおいるので、ありがたい気持ちでいっぱいです。 ブログを曞くこずになっおどう思いたしたか 䌚瀟でのブログは初めおの経隓なので曞くこず自䜓緊匵ですが、すごく良い取り組みだず思いたした。 【HaKo さんからの質問】KTC に入瀟しお驚いた事や感動した事を教えおください。 「珟堎の雰囲気」のずころず重耇したすが、入瀟盎埌なのに、すでに自分の「やっおみたい」を受け入れおいただけおいるこずです。びっくりず感動を同時に味わいたした。 きヌゆの 自己玹介 プロゞェクト開発郚プロゞェクト掚進郚のきヌゆのです。KINTO FACTORY のフロント゚ンド開発を担圓しおいたす。宀町オフィスに勀務しおいたす。 所属チヌムはどんな䜓制ですか 私含め 6 名でフロント゚ンドの開発をしおいたす。チヌム内の最幎少゚ンゞニアずいう肩曞きを欲しいたたにしおいたす。なんなら KTC 党䜓で芋おも最幎少の郚類かもしれない。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか いい意味でゆるいなずいう印象でした。ギャップは特になく、期埅通りのゆるさで幞せです。これをやりたい をどんどん受け入れおくれるずころが玠敵です。 珟堎の雰囲気はどんな感じですか 「アットホヌムな井の䞭の蛙」が自チヌムの特城です。チヌム内コミュニケヌションが掻発で個人を尊重しあえる䞀方で、内向的で察倖的な圱響力に改善の䜙地があるチヌムです。 ずいう結論がストレングスファむンダヌでわかりたした。私も入瀟埌ずおも手厚く迎え入れおいただいたので、すぐに銎染める雰囲気です。 ブログを曞くこずになっおどう思いたしたか 前職でもテックブログをお願いされたこずがあったので、特に気構えるようなこずはありたせんでした。量産型シャむボヌむなので自己開瀺は䞍安ですが、少しでも興味を持っおもらえたら嬉しいです、匊瀟に。 【yuki.n からの質問】技術面でいた興味のある・远いかけおいるこずに぀いお教えおください ChatGPT 等のアりトプットを最倧限に高めるための”プロンプト力”ずいう分野を远いかけおいたす。KINTO テクノロゞヌズで掻甚されおいる”しぇるぱ”を利甚する際にも、この分野が掻きおいたす。 K 自己玹介 プロゞェクト開発郚プロゞェクト掚進郚の K です。 Salesforce 開発を担圓しおいお、宀町オフィスに勀務しおいたす。 前職は SIer で業皮問わず、マルチクラりドのシステム導入に埓事しおきたした。 所属チヌムはどんな䜓制ですか Salesforce チヌムずしお 4 名、その他 BP さんが 10 名皋床の䜓制ずなっおいたす。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 技術系の勉匷䌚が倚いこずが第䞀印象でした。 珟堎の雰囲気はどんな感じですか ベテランの゚ンゞニアの方が倚くお、皆新しい技術を積極的に勉匷しおいるこずを実感したした。 ブログを曞くこずになっおどう思いたしたか これから KTC テックブログを執筆するこずになりたしたので、良い経隓になるかず思いたす。 【きヌゆのさんからの質問】開発する䞊で倧切にしおいるマむンドを教えおください 技術の進化やプロゞェクトの芁件の倉化に察応できる柔軟性が必芁で、新しい状況に適応し、柔軟に察凊するこずが重芁だず思いたす。 問題が発生した際に冷静に察凊し、効果的な解決策を芋぀ける胜力が求められたす。ルヌチンな問題解決だけでなく、創造的な解決方法も暡玢するこずが倧切だず考えおいたす。 向井 (mt_takao) 自己玹介 12 月入瀟の向井 (mt_takao) です。前職では、タクシヌ配車アプリの toB 向けプロダクトのデゞタルプロダクトデザむナヌ兌プロダクトマネヌゞャヌを䞻に担圓しおいたした。 KTC でも、前職同様、プロダクトデザむナヌずしお、トペタ販売店向けプロダクトのデザむン開発党般を担圓しおいたす。 所属チヌムはどんな䜓制ですか 所属郚眲は、モビリティプロダクト開発郚 オりンドメディアむンキュベヌト開発グルヌプ DX Plannning チヌムです。 トペタ販売店が抱えおいる課題やお困りごずをデゞタル・テクノロゞヌの力を掻甚しお解決を目指しおいくこずをミッションに日々取り組んでいたす。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 入瀟時のオリ゚ン等のオンボヌディングが想定しおいた以䞊に敎備されおいる印象を受けたした。 組織課題などは入瀟前に䜕床もお話を聞く機䌚をいただき、十分に把握した䞊で入瀟の意思決定をしたので、倧きなギャップはありたせんでした。 珟堎の雰囲気はどんな感じですか 自分が所属しおいる DX Planning チヌムは、組織が出来おただ若く、最近入瀟した方が倚いのですが、それぞれがこれたで経隓しおきたものを掻かし、泥臭く掚進しおいく姿勢に共感しおいたす。 ブログを曞くこずになっおどう思いたしたか 個人ずしおも組織ずしおも発信力匷化は課題ず捉えおおり、その機䌚をいただいたこずに感謝しおいたす。 【K さんからの質問】UI/UX 芳点で最高ず思ったデザむンがあれば教えおください。 最高のデザむンず蚀うず結構難しいのですが、最近泚目しおいるものず蚀えば、「 Apple Vision Pro 」です。既に、AR や VR ず珟実䞖界を拡匵したようなテクノロゞヌが䞖の䞭に浞透し始めおいるようですが、いよいよ空間自䜓でアプリケヌションを実行できるそんな䞖界がやっおきたのだず感じたした。 参考 Apple Vision Pro 実機レビュヌ。空間党郚を仕事に䜿う䞖界がやっおきた ただ、アメリカでしか䜓隓できないようなので、日本で觊れるようになったら䜓隓したいず思いたす。 䜙談ですが、Microsoft 瀟の未来を描いた「 Productivity Future Vision 」も、Apple Vision Pro が実珟する䞖界に近いず思うので、ご興味あればご芧ください。 Romie 自己玹介 2023 幎 12 月に入瀟した Romie です。プラットフォヌム開発郚モバむルアプリ開発 G 所属です。 組み蟌み →Web 系からのモバむルアプリ開発なのでただただこれからです。 所属チヌムはどんな䜓制ですか iOS/Android ず分かれおいお Android 偎ですが私を入れお 5 名です うち 3 名が倖囜の方です。倚囜籍です。 KTC ぞ入瀟したずきの第䞀印象は ギャップはありたしたか 最新の技術を積極的にキャッチアップしおいおスピヌド感に驚きたした。 䌚瀟のバックアップはしっかりしおいお、瀟颚は思った以䞊に自由で感激したした。 珟堎の雰囲気はどんな感じですか お互い遠慮せずに意芋を蚀えお安心しお仕事ができる感じです。バックグラりンドがそれぞれ違いたすが、フラットな関係性でバランスの取れたチヌムだず感じたす。 ブログを曞くこずになっおどう思いたしたか アりトプットは日々の振り返りにも぀ながりたすし、コツコツ情報発信しおいるずそれだけ泚目床も䞊がりたすからこれからもやっおいきたいず思いたした 【向井さんからの質問】KTC or モビリティ領域で、どんなこずを成し遂げたいですか 私はモバむルアプリ開発の担圓者ですので自分が任されおいるアプリを通じお KTC ひいおはモビリティ領域に貢献したいです。そのためには絶えず技術をキャッチアップし、目の前のプロダクトの成長・発展に取り組みたいず思いたす。 さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTO テクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが増えおいきたすので、楜しみにしおいただけたしたら幞いです。 そしお、KINTO テクノロゞヌズでは、ただたださたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは こちら からご確認ください
Introduction Hello everyone! This is Mori from the Global Development Division and the Tech Blog operation team. I usually work as the Product Manager (PdM) for the Global KINTO Web and the lead for compliance with personal information-related laws in various countries. (Well, I'm doing all kinds of things lol) To share some updates from me, the team I lead, the Product Enhancement team changed its reporting line as of July due to shifts in our organizational structure. (The team name has also changed a little! ) The new group manager for us is Mizuno-san. There has been some communication in the past, but not too much interaction with him and the other teams under Mizuno-san, so we took this opportunity to conduct a "Leadership Integration" workshop with the group manager and team leaders. Today, I would like to share its report📝 It was held in August, but my writing was slow and this article was released at the end of the year😅 What is Leadership Integration? Leadership Integration serves as a framework for communicating between leaders and team members to enhance team cohesion. It is effective when onboarding a new leader or when addressing team relationship issues that require improved team cohesion. Reference: An Encouragement of Leadership Integration I became aware of this workshop when I heard that it was conducted by the Corporate IT Group. Apparently, they had experience in their previous jobs. It wasn't exactly the same as "when onboarding a new leader," but it was right around the time I joined the new reporting line and I hadn't had much interaction with other teams, so I thought, "Why not?" I approached my manager and he readily agreed, so I asked Zushimi-san from Corporate IT Group to facilitate the workshop✹ Leadership Integration Flow Date & Time: 17:30-19:30 August 29, 2023 Place: Jimbocho Office Participants: Global Product Introduction Group, Global Development Division 1 manager (hereinafter “leader”) 5 team leaders (hereinafter “member”) Facilitator: Zushimi-san from Corporate IT Group Time Action Time (m) 17:30 Explanation of initiatives / Facilitator Introduction 5 17:30 Opening from the leader 3 17:33 (Leader leaves the room) 17:35 Write down what members know about the leader 15 17:50 Write down what members don't know about the leader 15 18:05 Write down what you want the leader to know 15 18:20 Write down what members can do for the leader and the group 15 18:35 (Members leave the room, and leader enters the room) 18:40 Time for the leader to look at the opinions expressed by everyone and think about the answers 10 18:50 (Members return to the room) 18:55 Response time from the leader! 30 19:25 Buffer and free talk 5 20:00 Get-together Introduction As introduction, the facilitator and the leader gave respectively an explanation of this workshop and its background. This time, Mizuno-san said, "I'd be happy to receive opinions from everyone in a place different from the usual one-on-one meetings." And then, surprisingly, he left the room! But this is when it really starts. Writing Time by Members It’s when members write down what they know, what they don't know, what they want the leader to know, and what each member can do for the leader. I can't share too much here because some of the content is private, but I will try to mention a few things that came up (Sorry, Mizuno-san). What Members Know About the Leader📝 When he joined KINTO Technologies, he was first in charge of the Used Vehicle projects in Japan. He then joined Global about a year ago. He likes cats.🐱 He likes driving,🚗 etc. Although not for the other leaders, he was a new manager to me, so I often thought, "Oh, I didn't know that about him" during the workshop. What Members Don't Know About the Leader📝 The reason for joining KINTO Technologies. Career to date Development experience 💻 What he evaluates, etc. Here, on the contrary, I had the impression that "surprisingly, everyone is thinking the same thing." What Members Want the Leader to Know📝 The want to communicate more. Interest in getting involved in R&D. The struggle with member management. Interest in going camping with everyone⛺, etc. Since the workshop was held on our assessment period, and we had all become evaluators for the first time due to the organizational changes, we found that we were all struggling with the same issues. What Members Can Do for the Leader and the Group📝 Knowledgeable about vehicles and the automotive industry. Able to listen to leader’s complaints. Having connections with other development teams Able to plan study sessions for engineers. Happy to give new business ideas, etc. I was surprised, in a good way, at the number of things that each of us could do. Response Time from the Leader Then the leader joined and answered each of the sticky notes in place. Without knowing who wrote what, the leader shared his thoughts. As it is not every day you get a chance to hear what a manager thinks, 30 minutes passed in no time. We were able to hear about his personal life, such as his love of cats despite his cat allergy (poor thing!), that he has a closet full with only white t-shirts and black pants (I think I’ve heard a similar anecdote somewhere...), as well as his opinion about the members, such as the importance of what has changed since the beginning of the term, and wanting members to do their best without being demotivated. In particular, when it came to “what members want the leader to know” and “what members can do for the group”, as there were a lot of enthusiastic notes, the leader’s comments included, "Let's share evaluations and organizational concerns with each other," "Let's work together to solve communication challenges," and "I understand that I can leave more to them." Somehow, the impression that the team was united made me feel passionate. The wall was covered with this many sticky notes! Sorry about the mosaic Impressions I participated as a member, and it was great to hear what each team leader was thinking, not to mention the deeper connections I made with the manager. Since some projects do not give the opportunity to work with many people and not everyone was familiar with all participants, this event was a good opportunity to check if we were on the same page. I discovered that all participants were thinking seriously about KINTO Technologies and about Global KINTO, more than I had imagined. Voice from Participants: It was good to know about the challenges other team members were facing. I was able to see the depth and breadth of what I want and know about my leader and compare it objectively with other members. In order to create an atmosphere that is easy to talk, I tried not to get angry or show negative emotions. I discovered that my approach may not have been entirely wrong. It might be a good idea to do a look back or something a few months later to check on the status of what was agreed on the workshop. Even things you don't dare to tell sometimes hold meaning for others. This kind of workshop is effective to bring these things out. For myself, the timing was good because I was new to the group, but others seemed to have a sense of "why now?" I regret not having considered the timing of the workshop. However, there was no opinion that it was completely meaningless, so I felt that it would be even more effective at times such as when a new leader takes office! Conclusion Throughout the workshop, I felt that the results can be greatly influenced by facilitation, such as time allocation or talking to participants while they are writing. For example, when you can't write your thoughts down very well, the facilitator suggested "Have you thought about XXXXX?", or gave good remarks such as "Right, this is also a new discovery, isn't it?" He also considered the allocation of time in a flexible manner. Thank you, Zushimi-san, for coming all the way to Jimbocho🙏 Lastly, if you are going to conduct a Leadership Integration workshop, here is a book that was recommended to me. The power of facilitation is truly amazing when done right! 🥺✚ @ card This article has become quite long, but I'd like to close with a picture of the huge, delicious lamb we enjoyed at the get-together🍖🀀 Thank you very much🙏
Introduction to Istio for Non-Infrastructure Engineers Hello. I'm Narazaki from the Woven Payment Solution Development Group. We are involved in the development of the payment infrastructure application used by Woven by Toyota at Toyota Woven City , and are developing payment-related functions across the backend, web frontend, and mobile application. Within this project, I am mainly responsible for the development of backend applications. The payment backend we are developing contains microservices and runs on a Kubernetes-based platform called City Platform. In this article, I would like to introduce you to Istio , a mechanism to set up microservice networks on Kubernetes. My aim is to explain its purposes and functions in an easy-to-understand manner for backend application engineers who are used to writing business logics or code. I hope this article will help you deepen your understanding of configurations using Istio, that it could be useful when isolating the issue causes during troubleshooting, and facilitate smooth communication with infrastructure and network engineers. What is Istio? With how the architecture of microservices work, their processing span multiple services, resulting in the need of communication cost between these services. As application engineers, we often think that it doesn't matter as long as it connects, but infrastructure engineers would want to effectively control the network layer. That is why Istio was created with the aim to centralize declarative management of various settings such as network routing and security, similar to Kubernetes Manifests, and to provide integrated operational monitoring of network status. Because the network is structured like a mesh, these functions are collectively referred to as the service mesh. Istio Architecture: Data Plane and Control Plane First, it's essential to understand the architecture of Istio. Like Kubernetes, Istio is divided into a control plane and a data plane. Kubernetes is a control plane that receives API requests from Kubectl, etc., and controls resources such as pods, etc., and a data plane is the pod where the application actually runs. Istio’s data plane employs a network proxy called Envoy . If necessary, the control plane injects Envoy as a sidecar container next to the container where our code runs. Control Plane and Data Plane Why Do We Need Istio? Envoy is a network proxy application that can run independently. The configuration items are so varied that configuring a single Envoy instance as intended is not easy. (At least for non-infrastructure engineers! ) In a complex microservices architecture, the network is like a mesh connecting inside and outside the cluster, requiring the configuration of numerous Envoy Proxies. It is not difficult to imagine how difficult it would be to set up individually and make everything work the way you want it to. Resources Configurable in Istio The following features will be available by introducing Istio: Traffic management (service discovery, load balancing) Observability (logging, distributed tracing) Security such as authentication and authorization On the other hand, for backend application engineers, there have been many situations in our experience where each of them is a black box, not knowing what is actually configurable or which configuration file to look at when encountering unintended behavior. Let's take a look at some specifics of what Istio's configurable resources mean. Gateway There are two resources related to Kubernetes networking: Ingress and Egress. Istio intercepts communications with an Envoy proxy called gateway. It is literally a gateway to the Istio network. You can set it up in the following file: Although this file itself rarely contains detailed settings that application engineers should know, it is often referenced by other files in the form of gateways , so make sure that the Gateway is properly configured first. apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: test-gateway spec: selector: istio: ingressgateway # LoadBalancer service available by default when Istio is installed servers: - port: number: 80 # listening port name: http protocol: HTTP # allowed protocols hosts: - "*" # host name Virtual Service Kubernetes has a mechanism called Service that allow deployment and StatefulSet to be accessed from the intracluster network. On the other hand, Istio's Virtual Service defines the route to the Service. While this is powerful as it allows for the definition of a very large number of configuration values, caution must be taken to avoid duplication with other settings. If a request for the service is not received, there may be a mistake in the Virtual Service configuration The istioctl analyze command may tell you about configuration errors, so let's take a look. apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: test-virtualservice namespace: test spec: hosts: - "*" # specified host name. This means that the following rules apply when this host name is specified. If *, the rule applies to any host name gateways: - test-gateway # specify the gateway above Multiple specification allowed - mesh # define 'mesh' here to allow intracluster communication without Gateway http: - match: # rules can be written for filtering requests - uri: prefix: /service-a # URI pattern. Regex, etc., can be selected. route: - destination: host: service-a # destination service port: number: 80 - match: # multiple routing rules and connections can be defined - uri: prefix: /service-b route: - destination: host: service-b port: number: 80  exportTo: - . # where is this rule applied? Kubernetes namespaces.If (dot), only in the namespace where this rule is set Authorization Policy Communication between specific services can be controlled. Specifically, protocols, routing to specific paths, specification of HTTP methods, etc. can be modified in detail, so there may be many opportunities for application engineers to configure them. On the other hand, misconfigurations of rules and numerous unexpected pitfalls are common, so be sure to run tests after configuring. apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: access-allow-policy namespace: test spec: selector: matchLabels: app: some-application # label on the pod action: ALLOW # permission rule rules: - from: # define the source of the request - source: principals: - cluster.local/ns/test/sa/authorized-service-account # Kubernetes service account to: # request receiver definition - operation: methods: ["POST"] # HTTP methods allowed paths: - "/some-important-request" # Permitted endpoints --- apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: deny-policy namespace: test spec: selector: matchLabels: app: some-application action: DENY # example of denying a request rules: - to: - operation: paths: ["/forbidden-path"] Other Settings Destination Rule Service Entry Peer Authentication Envoy Filter and other configuration files, but I will omit the discussion here. Basically, just like the Kubernetes resources, each schema is defined with its own configuration items. If you have a resource that your team uses, it is a good idea to check the documentation once to see what items can be configured. Specific Examples of Common Debugging and Troubleshooting First of all, make sure there are no glitches in the configuration. If you run the istioctl analyze command, most misconfigurations will be reported as errors. If RBAC is enabled, such as in a production environment, and there are constraints on Istio-related resources, have an authorized infrastructure engineer perform them. If there is no misconfiguration that cause errors, check to see how far the request has reached. Let's look at the application or sidecar logs to see if communication is broken at the gateway or up to the application pods. If it appears to be passing through the gateway, it is a good idea to check the sidecar container logs on the namespace of the pod that should be accessed, such as kubectl logs pod <pod-name> -c istio-proxy -n <namespace> . For intracluster communication, you can run curl on a container, but since recent Docker base images often do not contain applications that are not needed to run container applications, attach a container for debugging such as k debug <pod-name> -n <namespace> -it --image=curlimages/curl:latest -- /bin/sh and see if you can resolve names in the cluster. If communication is being blocked, check the Virtual Service file. If there is a problem with authentication, refer to the Authorization Policy file to locate the misconfiguration. Routing and authentication are the areas where items configured in multiple layers are easily conflicted. You can list what authentication rules are applied to a pod with the istioctl x authz check <pod-name>.<namespace> command. In addition, what seems like a network error at first glance often turns out to be an implementation problem. At the same time, the implementation side should also review the network and authentication/authorization settings. The following is what I do when I run into network-related errors. Isolate the causes by running the istioctl analyze command or checking the logs to see if the Istio configurations are incorrect. Check the network communication from inside and outside of the cluster using curl and kubectl debug commands. Check the application configuration, such as whether the deployed application listens for requests at the port specified by the infrastructure layer. Check the request to see if the client application implements the required authentication and authorization mechanisms. These can also be checked for misconfiguration and communication status via GUI if the observability stack settings such as Kiali are enabled. Conclusion By learning about the specific configurable items and their meanings, I hope you gained insight into some of the functions that were black-boxed. Also, some of you may have realised that the configuration items are surprisingly simple. On the other hand, I believe the difficulty of Istio is not in the network configuration itself, but rather at the production operation phase, such as ensuring continuous stable operations (applying version patches and verifying the operations each time). As a backend application engineer, I would like to further understand the behavior of Istio and test the application's performance under actual operational conditions.
Introduction Hello. I am Ito, and I do backend development and operation of the KINTO FACTORY service (hereinafter, FACTORY) at KINTO Technologies. As part of the Advent Calendar series about FACTORY, I will write about how we improved its master data management. About the Master Data Management of KINTO FACTORY Various types of information are stored as master data, including vehicle models, products managed by KINTO FACTORY, and details of dealerships capable of handling vehicle modifications offered by KINTO FACTORY. *Product prices are as of December 11, 2023. Albeit only in Japanese at the release of this article, you can check the KINTO FACTORY website for the latest prices. The base information is provided by Toyota and its dealers in Japan, and the planning department enters it into Excel. After that, the Excel file is shared with the development team, converted to a CSV file, and registered in FACTORY. It's a pretty hard operation When it first started, there was a lot of frustration... Saving nearly ten Excel files as CSV files, converting newline characters, and deleting BOM was all done manually and took time and effort Excel functions were used to check the entered data, which made files heavy to work with... It was hard to make an Excel function for checking, so they needed to be checked by humans Item lists were long, some data was duplicated, and there were also input mistakes It required repeated checks and revisions in a checking environment, and it took a lot of workload Improvement was needed We made the following improvements to get rid those annoyances. Review of the Excel Input Format First, we reviewed the Excel format. Removed unnecessary items that were created for potential future uses Removed duplicates or items determined by other input values Added assisted input with Excel functions We reduced the burden of inputs by removing unnecessary items and reduced input errors by about 75% by using Excel functions and input rules. Automating the Excel-to-CSV conversion Next, we developed a tool to convert Excel files into CSV files in Golang. We Automated the Excel reading, checking, and converting to CSV The number of Excel functions was optimized by using a tool to do checks that were done by Excel functions The tool developed in the Go language supports minor revisions even when items are added to an Excel file By automating Excel-to-CSV conversions, we reduced the amount of effort needed and manual operation mistakes, and made it possible to complete tasks that used to take almost a day in just minutes. By making the tool do all of the work that we did mabually in Excel, we were finally free from having to dedicate our time into just being Excel experts! (Personally, this was my favorite part) Summary In this article, I shared about how we improved the master data management of FACTORY. We reduced out time spent reviewing Excel formats, automating conversions to CSV files, and reducing input mistakes. However, we still are facing issues. In particular, communication between planning and development takes up time no matter what we do, so we are thinking of changing the input-to-verification environment in order to streamline the checking process. We will continue to improve our master data management and provide an even better service. Conclusion KINTO FACTORY is looking for new partners. Please check the job listings below if you're interested! @ card @ card
はじめに こんにちは、KINTOテクノロゞヌズCSIRTの森野です。 2023幎7月12日(æ°Ž) 14日(金)の3日間、日本シヌサヌト協議䌚が䞻催するTRANSITS Workshop 2023 Summerに参加しおきたした。 TRANSITS ずは、CSIRTの蚭立や運甚に関するペヌロッパ発のトレヌニングコンテンツです。 今回のワヌクショップでは、組織、オペレヌション、技術、法埋の4぀のモゞュヌルを孊びたした。 CSIRTはComputer Security Incident Response Teamの略で、コンピュヌタセキュリティの事故察応を行うチヌムを指したす。 コンピュヌタセキュリティの事故ずは機密情報の流出、コンピュヌタシステムぞの䞍正䟵入、マルり゚ア感染などを指したす。 組織モゞュヌル 組織モゞュヌルでは、CSIRTの圹割や提䟛するサヌビス、チヌムの構成などに぀いお孊びたした。 たた、チヌムごずにCSIRTメンバや攻撃者などの人栌を挔じるむンシデントシナリオ挔習もありたした。 この挔習では、むンシデント察応の流れやコミュニケヌションの重芁性を䜓感したした。 オペレヌションモゞュヌル オペレヌションモゞュヌルでは、むンシデントレスポンスやむンシデントハンドリングに぀いお孊びたした。 むンシデントレスポンスはむンシデントの解析や封じ蟌めなどの察凊を指し、 むンシデントハンドリングはむンシデント党䜓の察応を指したす。 たた、チヌムごずにむンシデントハンドリングのプロセスに぀いお怜蚎する挔習がありたした。 この挔習では、あらかじめむンシデントを想定した察応手順を敎えおおくこずの重芁性を孊びたした。 技術モゞュヌル 技術モゞュヌルでは攻撃者の攻撃手法などに぀いお孊びたした。 講矩の䞭で、ずあるセキュリティベンダで様々な組織で発生したむンシデントの解析を携わっおいる方からお話がありたした。 携わったほがすべおのむンシデントは、適切な監芖が行われおいれば攻撃を怜知できたずのこずでした。 たた、セキュリティの基本ずしお挙げられた䞋蚘の蚀葉も印象に残りたした。 空けたら閉める 䜿ったら片づける 動かしたら管理する 法埋モゞュヌル 法埋モゞュヌルでは、サむバヌセキュリティ関連の法埋や芏制に぀いお孊びたした。 特に、ログの取埗や保存に関する法的な芁件や泚意点に぀いお詳しく説明されたした。 たた、譊察ずの連携方法やeディスカバリヌずいう制床に぀いおも玹介されたした。 たずめ TRANSITS Workshop 2023 Summerは非垞に有意矩な経隓でした。 講矩でCSIRT関連の知識やスキルを深められるのはもちろんのこず、挔習などを通しお他の参加者ず亀流できた点が特に良かったです。 CSIRTを蚭立したり運甚したりする方にはぜひおすすめしたいワヌクショップです。
Introduction Hello. I am Yamada, and I develop and operate in-house tools in the Platform Engineering Team of KINTO Technologies' (KTC) Platform Group. In this article, I will talk about the CMDB developed by the Platform Engineering team, its functions, the technology used, and how we made it in-house. What is a CMDB? A CMDB (Configuration Management Database) centrally manages the assets and configurations that are critical to delivering IT services. The primary role of a CMDB is to manage the lifecycles and information of assets (e.g., infrastructure required to deliver IT services, product information, product managers and other human resources). Why We Made the CMDB In-House Before we implemented a CMDB, as the number of products we had was increasing, everyone was working in silos with their asset information. Whenever there was an incident, it was difficult to determine who was in charge of a product or the extent of the impact. As a solution to these issues, we considered implementing a CMDB to centrally manage asset information in the company. There are several off-the-shelf CMDB software, but after considering installation and operation costs and customizability, we decided to make one in-house. The Features of Our CMDB Our company's CMDB includes fundamental functions like product and team management, and it's designed to seamlessly integrate with tools developed by other teams within the Platform Group. Some functionalities are still in development, but we are adding more every day so that anyone can view it and find the information they want. Product Management It manages basic information such as product names, affiliated departments, and management team. If a product malfunctions, you can easily find and contact the person responsible for it. For products that consist of multiple microservices, it can also manage which teams develop which functions, so you can accurately determine the right person in the event of a malfunction. Below is the product details screen, where you can check the team and domain information associated with a product. We plan to add more information such as which environment the product is in. There is also an item called "SID", which I will discuss later. Domain Management This manages domains associated with products. Team Management This manages team information associated with products. Manager Management This manages permissions for each user and group. DB Management This provides a mechanism to easily view all RDS information managed by KTC in the CMDB by linking with tools developed by the DBRE Team, which is also part of the Platform Group. In addition to basic RDS information, you check ER diagrams and DB designs according to the policy set by the DBRE team. Security Management Security management lets you manage the repository and its vulnerability information on the ECR. If a vulnerability is found in the weekly ECR repository scan, the MSP Team, which provides operational support, will work with the team that manages the repository. In that situation, it outputs an Excel file of the scan results and a CVS file that creates a Jira ticket for a response request to the person in charge. Scheduling Management This provides a scheduling management function that stops EC2, ECS, and RDS in the development environment for a certain period of time for the purpose of reducing AWS costs. By stopping services during late weekday nights and weekends when they are not required, it contributes to cost reduction. External Linking With external linking, you can link the AutoProvisioning system to the sandbox environment on AWS and manage the history. For more information, please read the article below! https://blog.kinto-technologies.com/posts/2023-05-30-AutoProvisioning/ SIDs To connect the data in the functions I have talked about up to now, KTC has the concept of SID . SID stands for Service ID and is a unique identifier for each product managed by KTC. For example, the SID of CMDB is set to kakazan . The name "Kakazan" comes from the mountain where the Monkey King was born in the novel Journey to the West. In fact, the name KINTO also comes from the Monkey King's story; it’s the name of his flying nimbus “Kinto'un”. So in the same way, it’s fun to see how a lot of the SIDs for KTC products are referencing Journey to the West. SIDs are used as product names and makes clear who is the owner of each product. This concept is spreading throughout KTC. In particular, AWS resource management uses ECS, RDS, S3, API Gateway, and many other AWS services for each product. The Tag setting is effective when determining which resources belong to which product. The resources are then linked to the products by attaching a SID tag to the resource. The CMDB uses this SID tag setting to link various information together. Technology Used I will briefly go over some technical elements used to develop the CMDB. The frontend is developed using React, while the backend is built with Spring Boot. Both utilize a shared framework for authentication, authorization, and utility classes. Additionally, there are three services—for the main service, DB management, and external linking—that are all dependent on the common framework. Batch processing was also developed with Spring Batch. I would like to write more about the system configuration another time. Future Plans We have more technologies to explore, and we plan to continually update features. Some are still in development, while others are on our agenda for future work. For example, we can try using EKS since KTC uses ECS as its container execution environment, or we can try using microfrontends (which are not necessary in terms of development scale), or we can implement PWAs (Progressive Web Apps) so the CMDB dashboard can be viewed from company smartphones, and so on. I think there are opportunities to explore only because the system was made in-house, so we will make good use of this system by trying out technologies that could be deployed in-house in the future. We also want to add functions to the common framework used to develop the CMDB, create a group of React components to suit the KINTO brand image, and implement them as a library to be used throughout the company. Conclusion In this article, I talked about the CMDB we developed at KTC, its background and functions, and our vision for the future. KTC s actively involved in the development of various systems alongside managing the services handled by KINTO I hope that this article has raised interest in KTC activities.
はじめに クリ゚むティブ宀の杉本です。 今回は、オリゞナルマスコットキャラクタヌができるたでの第二匟をお届けしたす。 第䞀匟は、キャラクタヌ欲しいよねヌずいう声を受けお圢になるたででした。 1.党瀟員を巻き蟌みながら進めおきた道筋ず、2.人気を集めたものを単玔に開発するのではなく、ある皋床、マスコットキャラクタヌプロゞェクト以䞋PJのメンバヌが、KINTOのビゞョンやブランドパヌ゜ナリティから遞択の軞を決め、今埌の展開ずブランディングを含めお方向性を決めおいったこず 3.瀟員の有志から集たったキャラクタヌアむデアから党瀟員にアンケヌトをずり、KINTOの瀟名の由来でもある“雲”をモチヌフにしたアむデアに人気が集たったこずをお話させおいただきたした。 具䜓的には、䞋蚘のキャラクタヌに人気が集たりたした。巊は、圢を自由自圚に倉えられるずいう点に人気が集たり、右は雲をクルマ化させたずころがチャヌムポむント。ちなみに、䞡方ずもクリ゚むティブ宀から遞抜されたこずは、マネヌゞャヌずしお、ほっずひず安心。 こちらの2案に人気が集たりたした。 雲モチヌフに呜を吹き蟌んでいく 1. むンハりスでも、぀くるべきではない制䜜物もある 䞊蚘の2案を元に、次はむラスト化です。 時々、デザむナヌは写真も撮圱できお、動画制䜜もでき、むラストたで描けちゃうず思っおいらっしゃる方がいたす。 「倖泚費がないので、内補でできないですかね。」「AIでちゃちゃっず䜜れないですかね」など、など色々ず聞こえおきたすが。。 瀟内デザむナヌの䞭でも、もちろん、むラストが䞊手なメンバヌはいたす。ただ、逅は逅屋メ゜ッド「お逅はお逅屋さんで぀いたものがいちばん矎味しいのだから、その分野のこずはその道の専門家に任せたほうがうたくいく」ずいう䟋えが、ここは倧事。キャラクタヌの呜ですから 䞊手に描くむラストず、呜を吹き蟌むむラストは違いたす。やはり、むラストレヌタヌやキャラクタヌ制䜜に特化したクリ゚むタヌにお願いするのが、同じクリ゚むタヌ同士ぞのリスペクトだず考えたす。内補でできない、するべきではない制䜜物の䟋であるずいえるでしょう。 2. ならどうするむラストを倖泚 制䜜予算がある䞭でしたが、幞い、PJに入っおいるビゞネス偎の担圓者は、「デザむナヌだからむラストも描けるだろう」ずいった考えではなく、クリ゚むティブを尊重しおくれるメンバヌが揃っおいたので、制䜜費を぀くるべく尜力しおくれたした。倖泚先は、䌁業や商品、たたは地域などのブランディング及び䌁画デザむンなどを埗意ずするクリ゚むティブカンパニヌ「 Steve* inc. 」さんに䟝頌するこずに。 PJが倧切にしたいキャラクタヌぞの想いに寄り添いながら、キャラクタヌにどんどん呜を吹き蟌んでくれる物語をいっしょに぀くっおいっおくれたした。 私たちクリ゚むティブ宀が「 Steve* inc. 」さんに泚文させおいただいたのは、䟋えばグッズを぀くった際にも、倧人でも持ちたくなるようなキャラクタヌ。かわいい、愛くるしい、それだけではない倧人が玍埗できるトヌンにこだわり䟝頌したした。 そのこだわりをもずに、雲のモチヌフキャラクタヌの案を3案぀くっおもらいたした。A案「謎の生物K」B案「はぐれぐも」C案「くもりす」。圌らは党お、どこか俯瞰しおるようでいお、少しかたっおちゃんを感じる衚情は、さすが「 Steve* inc. 」さんPJメンバヌ党員、プレれンをわくわくしながら聞かせおもらいたした。次に、党瀟員にそれぞれの案の良いず思う点ず懞念点を挙げおもらうアンケヌトを実斜。アンケヌトを行うこずで、倚角的な芖点で審査するこずで、かわいい奜きそれだけではないキャラクタヌの課題感が芋えおきたした。 そしお、アンケヌトの結果、A案「謎の生き物K」に決定 「謎の生き物K」っお笑 これが名前 このむンパクトのあるネヌミングを掻かし、このたた名前や存圚に「謎」感を残したプロモヌションで進めおいくのが面癜いのではずいうこずで、マヌケティングやSNS担圓者ずのミヌティングも盛り䞊がりたした。 さあ、フォルムが決たったので、次はブラッシュアップしおもらいたす。さらに、「謎の生き物K」は、読みやすさず身近さを感じおもらえるよう、生き物をひらがなにずいうこずでこちらも地味に改名し「謎のいきものK」ずなりたした。 「謎のいきものK」の圢がどんどんできあがっおいく なんずなくずがけた衚情がグッドな「謎のいきものK」。ですが、長く愛されるようフォルムや顔立ちをブラッシュアップしおいきたした。 具䜓䟋 アルファベットの「K」感をもう少し出したいぱっず芋お「K」を想起できないのではないかずいう意芋が出たした。 もう若干、雲感を出したい珟状、ハンド゜ヌプの泡、マシュマロみたいで 雲がモチヌフなので、目ずカラダのバランスを若干調敎したい。もう少し、雲が倧きく芋える初期のスティヌブさんのむラストくらいのバランス感。 3DのKの目の「癜県」ず「雲」の違いをもう少し出したい珟状黒い郚分のみが芋えるので、ふちの線なのか、シャドりなのかを調敎しもう少し2DのKの目のような可愛さを残したい。か぀もうちょいマットな質感の方が良いかもず思いたした 3DのKのカラヌをもう少しブランドカラヌを入れたい黒目郚分ず䜓の圱など 2Dむラストだけでなく、クルマの画像ずいっしょになったずきにも、違和感がないように3Dむラストも制䜜するこずにしたした。 さらに、圢のモコモコはどうするかむラストで描くぶんにはいいが、着ぐるみになったずきにどう衚すか、目の色はどうするか、口はないたたで、か぀セヌルストヌクはもちろん、䜕も話さないキャラクタヌにするか、性栌や性質などを詰めおいきたした。 そしお、珟圚のフォルムず衚情に ネヌミングは2023幎7月からお名前募集キャンペヌンを行い、党郚で932投皿をいただきたした。 そのなかから、PJでキャラクタヌを決める際の軞 ブログ1を参照 をもずに、ネヌミング候補を遞択。 雲のキントン くもびぃ 謎のいきものK K お客様サブスクKINTOの契玄者の人気投祚では、「雲のキントン」ず「くもびぃ」がずもに人気があったものの、幎代別にみるずタヌゲット䞖代の10代〜30代に「くもびぃ」がダントツ人気になったこずず、瀟内の投祚結果が1䜍になったこずで、 「くもびぃ」 に決定したした。 名前の由来ずしお、雲くもずモビリティが合䜓しおいるのもKINTOらしく、PJメンバヌも玍埗。 こうしお生たれた「くもびぃ」。これから䌚瀟のプロモヌションに露出しおいく機䌚が増えるず思いたす。どうぞよろしくお願いしたす。 ナニヌクな特城の「くもびぃ」をチェックしおみおください â–Œ くもびぃストヌリヌはこちら â–Œ @ card
Introduction Hello, my name is Numata, and I am part of the Project Promotion Group. I work hard every day as a backend engineer for KINTO FACTORY. In this article, I will talk about KINTO FACTORY services and the DX initiatives we did this summer. What is KINTO FACTORY? Many people in Japan think of KINTO as a subscription service, but KINTO FACTORY (hereinafter, FACTORY) offers various upgrade services so that you can ride your favorite vehicle over a longer period of time. To be more specific, you can customize your vehicle by updating its software, changing its interior and exterior such as seat replacement and wheel cap replacement; or improving the opening and closing speed of your doors. The range of available Toyota Group vehicle models (Toyota, Lexus, and GR), products, and areas where customizations are possible, is gradually expanding too. I always thought that once you buy a vehicle you do not really change any features until you switch to another vehicle, so I feel that the efforts of FACTORY and its approach to modularity are challenging and interesting. Modification Process FACTORY provides services not just through KINTO, but also in cooperation with Toyota and its dealer network throughout Japan. *The numbers in the image are for illustrative purposes and are not fixed. First, when a customer applies for a product on the FACTORY site, FACTORY orders the necessary parts from Toyota and shares the application details with the dealer of the customer's choice. After confirming the information in the application, the dealer sets up the arrival date with the customer. Once the delivery date is confirmed, the customer takes their vehicle to the dealer on the day of receipt, and the dealer carries out the modification with the delivered parts. As soon as the modification is completed, the dealer contacts the customer and delivers the vehicle to them. Specifics may vary depending on product and the desired modification, but that is the general process. DX of Modification Certificates Some of you may have never heard of modification certificates before (I learned about them after I joined the company). It is given in Japan to customers after a vehicle modification is completed, and written on it appears the details of what was modified, its date and time, the dealer where it was performed, along with other information. Before, the modification certificate was manually created by the dealer that delivered the vehicle to the customer, but since August, it has been possible to issue it on FACTORY. Process of Issuing a Modification Certificate Once the status of a purchased item changes to modification complete , you can issue a modification certificate from your purchase history on My Page (FACTORY refers to My Page as My Garage😃). When you click the modification certificate button, the certificate is displayed in a separate tab and can be downloaded as shown in the figure below. Currently, modification certificates can be issued for any products except for GR-related ones and event products. It also supports the invoice system that we implemented in October 2023, and payment statements can be issued from FACTORY. Architecture and Technology Stack FACTORY runs on AWS, and we use a microservice architecture like the one in the rough diagram above. The microservice that issues the modification certificate was developed using Go as programming language and uses the gopdf library to publish PDFs. The issued modification certificate is stored in S3. PDF Templates Since our company uses Office 365, we use Excel to manage PDF templates. We modify the Excel template and export it as a PDF whenever there is a change. Toyota Modification Certificate Lexus Modification Certificate We struggled with the fact that, not only the design of the modification certificate varies depending on the model, but the number of characters in the product name also varies, so it was difficult to decide on one layout that would not affect either of them. For convenience, we made it A5 just like the proofs of modification that were made manually. Side note: This was my first time handling PDFs with a program. I honestly did not think it was so straightforward. Beyond the Modification Certificate DX We can now provide a better experience for both customers and dealers by making it possible to easily generate modification certificates on FACTORY instead of having them made manually by dealers. Aside from modification certificates, there is still a lot of work that is done manually, and I think there is a lot of potential for DX in the automotive industry. FACTORY will keep working on various initiatives, to offer even better experiences in the future. Conclusion FACTORY is looking for new partners to liven up the company together. We do casual interviews, so feel free to apply! @ card
Introduction Hello, I am Aritome from the Development Support Division at KINTO Technologies Corporation. I am currently working mainly in the areas of organizational development, and education and training in order to address what is necessary for the company in a quick and agile manner. KTC holds a monthly Development and Organization Headquarters Meeting in which all employees (employees, contract employees, and temporary employees) participate. Today, I will talk about the twists and turns of the meeting. Some of you may be thinking, 'Hey, this is a Tech Blog, but this content isn't technical at all!' However, I want to assure you that I'm writing this article from our Osaka Tech Lab. So, even if the content might not seem technical, the place where I'm writing it is definitely tech-related! Also, I talk with various companies because of my work, and I feel that every company is worried about people and team building, including topics like building an organizational culture and retaining employees. I believe that making products means making people! I hope this will be a reference for those who are also struggling to build their organization. <What is a Development and Organization Headquarters Meeting?> KINTO Technologies Corporation's Development and Organization Headquarters Meetings started in July 2021, before I joined the company, with three departments announcing their respective initiatives in something similar to an in-house LT meeting. According to the minutes of the meeting at the time, there were about 160 participants... (We have grown considerably as a company and now have more than 330 employees.) The meeting has been held once a month since then. Each month, Kageyama, our Executive Vice President, gives a presentation, and two or three divisions talk about their activities in a LT (Lightning Talk) format. After that, one of the divisions gets a Kageyama Award. Kageyama gives a complimentary prize. <Why is the Development and Organization Headquarters Meeting Held in the First Place?> At first, we had a rigid culture in which the departments had a vertical structure and did not share information much, As we were in the business launch phase, we were very busy with practical work that we had to prioritize, and we put building a corporate culture on the back burner As the number of employees increased, so did the distance from Vice President Kageyama and the rest of employees. Due to the launch of the business during the COVID-19 pandemic, there were few chances to meet offline, and the company wanted everyone to communicate with each other at least once a month. Originally, the manager (Currently Mr. K, General Manager of the Development Support Division) was in charge of planning and managing, but when I joined the company, we started reviewing the meetings. We took over the operations of the Headquarters Meeting around April 2022, and have been improving it through trial and error for a year and a half. To prepare for the renovation, we identified the following three challenges and worked on them. (1) Improving communication We started entirely online using an LT meeting format, so at first, employees just listened to presentations one-sidedly instead of actively communicating with each other. I remember being surprised when a lot of employees attended halfheartedly, and I thought it felt like a management meeting. (2) Improving the Kageyama Award Also, I felt that it was a burden for employees in the workplace to make a 5-minute LT presentation even though they were busy. As the organization expanded, the number of managers other than Kageyama increased, so we thought, "We need to create a system that lets the board show the efforts of the members to more people." (3) Understanding other departments' work and sharing activities We received comments in the past such as “I don’t know what other departments are doing” in our questionnaires, so we wanted to use the Headquarters Meeting and other events to better understand what work and activities other departments were doing. (1) Improving communication We implemented a tool called Comment Screen , that displays emojis and comments on a screen in real time, and it encouraged more two-way communication. There were some who liked it because it was in real time, while some thought that it felt cheap, or that the presentations were hard to read. We kept experimenting, and now we communicate through Slack. All employees join the Headquarters Meeting Communication Channel when they join the company and use Slack to communicate in real time during the meeting every month. On each session, we added a friendly poll with questions such as, "What did you eat today for lunch?" By the way, there are a lot of restaurants with delicious food near our office, and a lot of members report going to lunch, but a there is also a handful who sadly say "Red Bull" or "I didn't eat..." lol But, just to be clear, our company is a place where everyone can take breaks easily! (Honestly, our company culture makes it easy to take breaks, and I think that is one of our company's good points) (2) Improving the Kageyama Award The purpose of the program was redefined as "managers should not miss the daily efforts of their members," and the style was changed so that managers recommend candidates, give the reason for their recommendation, and write an award speech. Before, Vice President Kageyama decided the winners, but they are now decided in a meeting with the managers in advance. With this system, team members no longer have to make tedious materials for the sake of being nominated and getting awards, and the managers were more motivated to pay attention to the members' daily efforts. I hope that the corporate culture changes so that people's daily efforts are assessed naturally. (3) Understanding other departments' work and sharing activities We made changes so that every month, the managers of each group take turns sharing information on projects that are being focused on and their activities. Kageyama also gives additional comments when necessary. Thanks to managers sharing information on activities and Kageyama's additional notes, the company's activities felt more concrete to employees, and they were more motivated to be informed. We also shake things up so that it’s not always the same announcements, and during the New Year period for example we introduce things such as the kanji of the year or the goals for next year. In addition, we post information on events from Twitter, announced activities related to the Tech Blog, and try to make the Headquarters Meeting an event where people can understand the company's activities. In addition to the above, the results of the previous month's questionnaire are announced at the start of each meeting, and we try to make communication during the meeting as open as possible. We are still making improvements, but the attendance rate of the Headquarters Meeting is gradually increasing. We have almost every employee (close to 300) attend every month, even as more employees join the company. The number of people participating online with their webcam on and making comments on Slack is also increasing gradually! We also get more happy comments through our questionnaires with each meeting. [Some Questionnaire Responses from our Employees (Examples)] It is really interesting to learn what each department is doing. It is also helpful to hear Mr. Kageyama's thoughts on each department! I like how the meeting is packed with information. Generally speaking, this kind of meeting tends to be light on content, or you can just read the materials afterward to get the information, but I think KTC's company-wide meetings have been different recently (in a good way). I can find out the status of departments that I normally don't have any connection with. I find that helpful. Conclusion What do you think? We will start taking on challenges such as announcing the 2024 kanji of the year and holding in-person events (holding the Headquarters Meeting offline). I think one of the good things about our company is that we are open to new initiatives and challenges. We can implement initiatives that are difficult for conventional large organizations and start them in a relatively quick and agile manner. Even if they fail, for better or for worse, they serve as precedents (and we don't get too mad?), and we can use the experience for our next actions. And of course, if you succeed, people will praise you (lol) Also, we have many employees who say, "I want to do it!" and lend us their strength. Please let us know about your company's initiatives when we meet at events! We will challenge ourselves so we won't lose!
はじめに KINTOテクノロゞヌズでmy routeのAndroid偎を開発しおいるHand-Tomiず申したす。 Android 14が2023幎4月12日にリリヌスされおそろそろ1幎になりたす。 しかし、新しく远加された「地域別の蚭定」に぀いおただ十分理解されおいない方も倚いず感じ、この蚘事を曞くこずにしたした。 倚蚀語察応のアプリケヌション開発においお「地域別の蚭定」を理解せずに進めるず予期せぬバグが発生するリスクがありたす。この蚘事を読んで、そうしたバグを予防できれば幞いです。 この蚘事で解説するもの Locale.getDefault() == Locale.JAPAN :::details コヌド解説 Locale : 蚀語、囜、地域に基づく特定の文化的、地理的蚭定を衚すクラス Locale.getDefault() : 珟圚のアプリケヌションのデフォルトの Locale を返す Locale.JAPAN : 日本の蚀語( ja )ず囜( JP )の蚭定を衚すLocaleのむンスタンス ::: 䞊蚘のコヌドでは端末に「日本語(日本)」が蚭定されおいる堎合、 true が出力されたすかそれずも false が出力されたすか 正解は、Android 13以䞋では true であり、 Android 14以䞊の堎合、これだけの情報では䞍明 です。 この蚘事では、 Android 14以䞊の堎合、なぜ䞍明なのか を解説したす Androidでの Locale ずは Locale は、蚀語、囜、地域に基づいた文化的、地理的蚭定を衚すクラスです。この情報を利甚しお、Androidアプリケヌションは倚様なナヌザヌに適応したアプリケヌションを構成するこずができたす。 Locale は䞻に蚀語や囜を扱いたすが、 LocalePreferences を䜿甚するこずで、より倚くのデヌタを抜出するこずが可胜です。 val locale = Locale.getDefault() println("calendarType = ${LocalePreferences.getCalendarType(locale)}") println("firstDayOfWeek = ${LocalePreferences.getFirstDayOfWeek(locale)}") println("hourCycle = ${LocalePreferences.getHourCycle(locale)}") println("temperatureUnit = ${LocalePreferences.getTemperatureUnit(locale)}") 「日本語(日本)」の蚭定を持぀端末で䞊蚘のコヌドを実行するず、以䞋のようになりたす。 calendarType = gregorian : 暊法 = グレゎリオ暊 firstDayOfWeek = sun : 週最初の曜日 = 日曜日 hourCycle = h23 : 時間呚期 = 0~23 temperatureUnit = celsius : 枩床 = 摂氏 「地域別の蚭定」ずは Android 14から導入される「地域別の蚭定」は、Locale蚀語、囜で蚭定された「枩床」や「週の最初の曜日」をカスタマむズできる機胜です。 枩床 デフォルトを䜿甚 摂氏℃ 華氏°F 週最初の曜日 デフォルトを䜿甚 月曜日 ~ 日曜日 枩床蚭定画面 週最初の曜日画面 :::details 蚭定画面に入る方法 「蚭定アプリ」内の「システム」→「蚀語」セクションから「地域別の蚭定」画面にアクセスできたす。 ![setting](/assets/blog/authors/semyeong/2024-02-28-regional-preferences/setting.png =300x) ::: 「地域別の蚭定」がなぜ必芁か 「アメリカ🇺🇞」ず「オランダ🇳🇱」では、共に英語を䜿甚できたすが、䜿甚される「枩床」の単䜍や「週の最初の曜日」が異なりたす。 アメリカ🇺🇞 オランダ🇳🇱 枩床 華氏 摂氏 週最初の曜日 日曜日 月曜日 「アメリカ🇺🇞」に䜏んでいる「オランダ人🇳🇱」が摂氏に慣れおおり、 枩床のみ を摂氏に倉曎したい堎合は、「地域別の蚭定」を䜿甚しお、 枩床のみ を倉曎するこずが可胜です。 「地域別の蚭定」を蚭定するず、どのような倉化があるのか Locale.getDefault().toString() 蚭定倀を確認するために、䞊蚘のコヌドを䜿甚しながら各蚭定を倉曎しおみたしょう。 蚀語 枩床 週最初の曜日 結果 日本語(日本) デフォルト デフォルト ja_JP 日本語(日本) 華氏 デフォルト ja_JP_#u-mu-fahrenhe 日本語(日本) デフォルト 月曜日 ja_JP_#u-fw-sun 日本語(日本) 華氏 月曜日 ja_JP_#u-fw-sun-mu-fahrenhe 「枩床」や「週の最初の曜日」を蚭定した結果、 #u や mu-fahrenhe 、 fw-sun など理解しにくいテキストが出力されたしたが、これらは Locale のメンバヌ倉数であり、 localeExtensions の倀です。このように localeExtensions に倀が蚭定された堎合、 Locale の hashCode や equals() の結果も倉わり、 Locale.JAPAN ず比范しおも true にはなりたせん。 では、どのようにしお蚀語を確認するか Locale.getDefault() == Locale.JAPAN // X Locale.getDefault().language == Locale.JAPANESE.language // O 蚀語を確認したい堎合、 Locale に含たれる language プロパティで比范しおください。 この方法を甚いれば、「地域別の蚭定」を倉曎しおも圱響を受けず、求めおいる結果を埗られるず思いたす。 最埌に Android 14からこっそり远加された「地域別の蚭定」機胜によっお、突然以前動いおいたコヌドが動かなくなっおも、この倉曎を怜知するこずはかなり難しいですね。 ほずんどの方は問題ないず思いたすが、もしLocaleむンスタンスで蚀語を比范しおいる堎合は、確認しおみおください。 䞀人でも倚くの方がこのようなバグを早く発芋し、解決できれば、この蚘事は倧成功ず蚀えるでしょう たた、myrouteのメンバヌが執筆した他の蚘事もぜひご芧ください Structured Concurrency with Kotlin coroutines myroute Android AppでのJetpack Compose Compose超初心者のPreview感動䜓隓 ここたで読んでいただき、ありがずうございたした。 ※Android ロボットは、Google が䜜成および提䟛しおいる䜜品から耇補たたは倉曎したものであり、 クリ゚むティブ・コモンズ 衚瀺 3.0 ラむセンスに蚘茉された条件に埓っお䜿甚しおいたす。
Hey there! 👋 We're Az, Moji, and Ai—part of the UI/UX team in the Global Product Management Group at KINTO. Today, let's dive into the fascinating world of diversity and inclusivity in UI/UX design! What Does It Mean to Design for ‘Diversity and Inclusivity’? According to Nielson Norman Group , inclusive design describes methodologies to create products that understand and enable people of all backgrounds and abilities. Okay, let’s dive into some examples to get a better understanding of inclusive design. Clear examples can be seen in architecture – ramps for wheelchairs, tactile paving, even bicycle lanes, it’s all about making spaces welcoming for everyone. Examples of inclusive design in everyday life Examples in UI/UX Design Now that you (hopefully) have a clearer understanding of inclusive design, let's delve into specific examples within UI/UX design: (from left to right) Alt text, keyboard navigation, Apple's accessibility For those familiar with HTML/CSS, ever wondered the purpose of for images? It's not just a fallback for when images don't load; it's also the key to providing image descriptions for those visually impaired navigating websites with screen readers. Ensuring that your website is navigable using only a keyboard is crucial. Keyboard accessibility not only enhances the experience for keyboard-only users but also benefits other groups, including screen reader users, individuals with low vision, those with motor impairments or cognitive disabilities, and users who prefer keyboard shortcuts or alternative keyboards. Apple has excelled in incorporating accessibility into its design, with a user interface and experience that cater to individuals with diverse impairments. Notable features include the ability to easily adjust font sizes for improved legibility, the option to tap words for spoken feedback, voice control tailored for those with physical impairments, and a range of other inclusive design elements. You can explore all these features here . These examples represent just a few instances of inclusive design within UI/UX. The Web Content Accessibility Guidelines (WCAG) outline the principles and techniques for enhancing the accessibility of web content, ensuring it is more accommodating to individuals with disabilities. Now that we've explored the fundamentals of inclusive design, let's take a deeper dive into its application in mobility platforms, a core focus of our company. Moji, over to you. Ai has set the stage with the ins and outs of inclusivity, and now it's my turn to zoom in on how we make that happen in the world of moving around. Hi, I'm Moji , and and I'm all about making sure our designs help everyone get where they're going, no matter who they are. I believe as designers, we have the capability, and responsibility, to ensure the products and solutions we develop cater to a wide spectrum of users - in terms of ethnicity, language, age, gender, physical ability, and cultural background. Looking into how the big players nail this isn't just interesting, it helps us do our job better, and it helps us figure out better ways to design more inclusive tech products. Take Google Maps as an example. This app is a daily go-to for many of us for getting around. How Google Maps Sets the Standard for Accessible App Design Not only does Google Maps offer real-time GPS and transit info, it's also designed to cater to a wide-reaching audience. For those with sight impairments , Google Maps has a voice-guided navigation system . It'll tell you when you're about to make a turn, if there's heavy traffic ahead and any disruptions that might mess up your journey. This spoken assist feature makes life easier for anyone who needs audio cues. Google Maps' latest update brings some new features specifically aimed at making the app more accessible and inclusive. The Immersive View for Routes gives a detailed look at the route you’ll be travelling, whether that’s via car, foot or on a bike. Awesome for those with mobility challenges. And, because Google Maps is used all over the world, they’ve made sure it’s available in over 40 languages. This not only makes the app more accessible globally, but also boosts user satisfaction, since people prefer info in their native tongue. Challenges of Creating Globally Accessible App with RTL Language Support Transitioning to a more focused exploration of language and locale considerations in app design, I'll hand the reins over to our teammate Az. She's been at the forefront of tackling the ground-level challenges of designing a globally-accessible app, particularly when it comes to ensuring seamless compatibility for RTL (Right-to-Left) language speakers like those who speak Arabic. Over to you Az. Hi, now it’s my turn; I’m Az from the UI/UX team. While working on RTL (Right To Left) design for a project, I noticed something. And that is: To Promote Diversity, It's Crucial to Remain Mindful of Aspects One May Not Be Familiar With It is important to pick up on details of what one would ‘take for granted' rather than focusing on creating the unprecedented. I discovered many points that were previously unknown to me or learned about them for the first time in this project. The term RTL stands for “Right To Left”, referring to languages that are read from right to left. As the text direction is different from what we are used to in Japanese or even English, the way the eyes move also differs. The layout will also be adjusted to align from right to left. Nested components such as the position of icons and texts, action buttons’ direction, the badge position are also inverted. However, the icons for "the headset" and "the location" are not inverted, as they are physical items and a universal design concept. Not only the display but also the layout itself needs to be inverted. The order of the indicators changes according to the direction. There are some exceptions even in form-related elements. When a numerical sequence has a specific meaning, such as a phone number or a credit card number, it should not be inverted. A proper noun such as “KINTO” will not be inverted We have introduced you to examples in KTC, but you can find additional concrete examples in the Apple Human Interface Guideline and the Google Material Design . I think you noticed from this article that the members in our UIUX team come from diverse backgrounds. That’s why I can improve my knowledge, perspectives, and insights that one may not notice alone. Ai mentioned the necessity of “diversity” through comparison with real-world spaces based on her architectural knowledge. Moji, with her strong research skills and extensive knowledge, provided insights into what is happening in familiar services. Tim, who makes an appearance on another article, is also a reliable member capable of handling a wide range of tasks from project execution to frontend development. By building upon the "taken for granted" knowledge that each of us possess, we will continue to develop services that everyone can comfortably use in the future.
Flutter Webで単䜓テストしおたすか こんにちは。Woven Payment Solution開発グルヌプの倧杉です。 私たちのチヌムでは、 Woven by Toyota においお Toyota Woven City で䜿われる決枈システムの開発を行っおおり、普段はKotlin/Ktorでバック゚ンド開発ずFlutterによるWeb/モバむルのフロント゚ンド開発をしおいたす。 Flutter Webでは、Web固有のパッケヌゞを䜿甚しおいるずテスト実行で゚ラヌになっおしたうこずがありたす。 そのため、今回の蚘事ではFlutter Webのコヌドをテスタブルな状態に維持するために工倫しおいるこずを、特に単䜓テストにフォヌカスしおたずめたいず思いたす。 なお、これたでのフロント゚ンド開発ストヌリヌに぀いおは過去の蚘事を参照しおいただけるず幞いです。 Kotlin゚ンゞニアがFlutterに入門しおヶ月でWebアプリケヌションを䜜った話 バック゚ンド゚ンゞニアたちが耇数のFlutterアプリを䞊行開発しおいく䞭で芋぀けたベストプラクティス Flutter Webずは 初めに、Googleによっお開発が進められおいるクロスプラットフォヌム開発のフレヌムワヌクであるFlutterの内、 Webアプリ開発に特化したフレヌムワヌク のこずです。 Flutterの開発蚀語であるDartは、゜ヌスコヌドを事前にJavaScriptに倉換し、HTML、Canvas、CSSを䜿甚しお描画凊理を行うこずができるので、モバむルアプリで開発したコヌドをそのたたWebアプリに移怍するこずができたす。 Flutter Webの実装方法 基本的な実装は、モバむルアプリ開発ず同じ方法で実装できたす。 䞀方で、DOM操䜜やブラりザAPIにアクセスしたい堎合はどうすればいいでしょうか これもDartの組み蟌みパッケヌゞで dart:html などのWebプラットフォヌム向けのパッケヌゞが甚意されおいたす ^1 。䟋えば、ファむルダりンロヌド機胜もJSによる䞀般的なWebアプリ開発ず同じように実装するこずができたす。 :::message 蚘事執筆時のSDKバヌゞョンは、Flutter v3.16, Dart v3.2を察象ずしおいたす。 ::: 䞋蚘のWidgetは、カりントアップした数倀をテキストファむルずしおダりンロヌドするずいう䜕に䜿うかわからない機胜を持ったサンプルアプリです。Floating Buttonをクリックするずテキストファむルのダりンロヌドが行われたす。 import 'dart:html'; import 'package:flutter/material.dart'; class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ const Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, ), IconButton( onPressed: _incrementCounter, icon: const Icon(Icons.add), ) ], ), ), floatingActionButton: FloatingActionButton( onPressed: () { AnchorElement(href: 'data:text/plain;charset=utf-8,$_counter') ..setAttribute('download', 'counter.txt') ..click(); }, tooltip: 'Download', child: const Icon(Icons.download), ), ); } } Flutter Webのコヌドを単䜓テストする 先ほどのサンプルコヌドのテストコヌドを以䞋のように甚意したしたほずんど flutter create しお出力されたずきのたたです。 import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:sample_web/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { await tester.pumpWidget(const MyApp()); expect(find.text('0'), findsOneWidget); expect(find.text('1'), findsNothing); await tester.tap(find.byIcon(Icons.add)); await tester.pump(); expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); }); } 次のテストコマンドを実行するかVS CodeのTestingタブから䞊蚘のテストコヌドを実行しおみたしょう。 $ flutter test このたたテストを実行するず、次のような゚ラヌが出るかず思いたす。 Error: Dart library 'dart:html' is not available on this platform. // 省略 lib/utils/src/html_util.dart:4:3: Error: Method not found: 'AnchorElement'. AnchorElement(href: 'data:text/plain;charset=utf-8,$data') どうやら dart:html のむンポヌトに䜕か問題があるようです。 プラットフォヌムごずのDartコンパむラ 公匏ドキュメント を確認するず、Dartコンパむラの実行には、 JITコンパむラを行うDart VMずマシンコヌドを生成するAOTコンパむラの Nativeプラットフォヌム DartコヌドをJSにトランスパむルする Webプラットフォヌム の2぀があるこずがわかりたす。たた、それぞれのプラットフォヌムで利甚できるパッケヌゞが䞀郚異なるようです。 プラットフォヌム 利甚できるパッケヌゞ Native dart:ffi, dart:io, dart:isolate Web dart:html, dart:js, dart:js_interopなど ぀たり、前述のテストはVM䞊で実行されおいたため、 dart:html を利甚できなかったずいうこずがわかりたした。 Webプラットフォヌムパッケヌゞのむンポヌト゚ラヌを回避する方法ずしお、テスト実行時にプラットフォヌムを指定する方法がありたす。 䞋蚘のオプションを぀けおコマンド実行するこずで、テストをChrome䞊で぀たり、Webずしお実行するこずを指定できたす ^2 。 $ flutter test --platform chrome :::message オプションなしテストがVM䞊であるこずは、 flutter test --help --verbose で確認できたした。 --platform Selects the test backend. [chrome] (deprecated) Run tests using the Google Chrome web browser. This value is intended for testing the Flutter framework itself and may be removed at any time. [tester] (default) Run tests using the VM-based test environment. ::: Flutter WebのテストコヌドはChromeで実行すべきか ブラりザAPIの利甚はWebアプリを開発する䞊で避けられないこずだず思いたすが、Flutter WebのテストコヌドはChrome䞊で実行すべきなのでしょうか 個人的な意芋ですが、なるべくChromeを䜿わない方が良いずいうのが私の考えです。 理由ずしおは、 テスト実行の際にバックグラりンドでChromeを起動する必芁があるため、テストの起動時間が増倧しおしたう CI環境にChromeをむンストヌルする必芁があり、CI環境のコンテナサむズが倧きくなる。たたは、コンテナのセットアップに時間がかかっおしたう こずが想像でき、CI環境の金銭的コストがかなり増えおしたうこずが考えられたすもちろん、ロヌカルでささっず確認する皋床や富豪な方でしたら問題ないです。 実際に、オプションでプラットフォヌムを指定しない暙準ケヌス(Native)ずChromeを指定したケヌス(Web)を比范したロヌカル環境の実行結果を茉せたした。 プラットフォヌム プログラム実行時間秒 トヌタルテスト実行時間秒 Native 2.0 2.5 Web 2.5 9.0 䞊蚘衚から、Webの方は実際にテストの起動に倧幅に時間がかかるようになりたした。さらに、テスト実行時間も25%ほど増倧しおいるこずもわかるかず思いたす。 ![tester](/assets/blog/authors/osugi/20240301/annoying.png =400x) Webプラットフォヌム䟝存のコヌドは分離しよう Webプラットフォヌムを指定しないで前述の゚ラヌを回避するにはどうしたら良いでしょうか 実は、Dartにはパッケヌゞを条件でむンポヌト・゚クスポヌトする方法ず、プラットフォヌムがWebかNativeかを刀定するためのフラグも甚意されおいたす ^3 。 フラグ 説明 dart.library.html Webプラットフォヌムかどうか dart.library.io Nativeプラットフォヌムかどうか これらを駆䜿するこずで゚ラヌを回避するこずができたす。 たずは、以䞋のようにしおWeb甚・Native甚のダりンロヌド機胜モゞュヌルを甚意し、前述のWebパッケヌゞ䜿甚箇所をテスト察象のコヌドから分離したしょう。 import 'dart:html'; void download(String fileName, String data) { AnchorElement(href: 'data:text/plain;charset=utf-8,$data') ..setAttribute('download', fileName) ..click(); } void download(String fileName, String data) => throw UnsupportedError('Not support this platform'); そしお、䞊蚘モゞュヌルのむンポヌトをプラットフォヌムごずに切り替える方法は以䞋のようになりたす。 import 'package:flutter/material.dart'; - import 'dart:html' + import './utils/util_io.dart' + if (dart.library.html) './utils/util_html.dart'; class MyHomePage extends StatefulWidget { // 省略 } class _MyHomePageState extends State<MyHomePage> { // 省略 @override Widget build(BuildContext context) { return Scaffold( // 省略 floatingActionButton: FloatingActionButton( onPressed: () { - AnchorElement(href: 'data:text/plain;charset=utf-8,$_counter') - ..setAttribute('download', 'counter.txt') - ..click(); + download('counter.txt', _counter.toString()); }, tooltip: 'Download', child: const Icon(Icons.download), ), ); } } ゚クスポヌトをする堎合は、別途 util.dart などの仲介ファむルを甚意しおWidget偎からむンポヌトするこずになるず思いたすここでは省略したす。 export './utils/util_io.dart' if (dart.library.html) './utils/util_html.dart'; 以䞊で、Web䟝存のコヌドによる゚ラヌを回避しおNativeプラットフォヌム䞊でテストを実行するこずができるようになりたした。 Webプラットフォヌム䟝存の倖郚パッケヌゞにはNativeプラットフォヌム甚のスタブも䜜ろう 私たちのシステムは認蚌基盀にKeycloakを採甚しおいたす。 Flutter Webアプリ䞊でKeycloakの認蚌をするために以䞋のパッケヌゞを䜿甚しおいたす。 @ card リンクを開いおもらえるずわかるず思いたすが、このパッケヌゞはWebのみをサポヌトしおいたす。 このパッケヌゞのおかげで楜に認蚌凊理を実装するこずができたのですが、認蚌モゞュヌルずいう特性䞊そのむンタヌフェヌスは色々なずころで利甚されるため、APIコヌルなど認蚌情報を必芁ずするようなWidgetがすべおWebプラットフォヌム䟝存ずなっおしたい、CIでテストできなくなる状況になっおしたったこずがありたしたこの間はロヌカルで --platform chrome オプションでテストしお党PassしたらOKずいう性善説運甚をしおいたした。 ちなみに、このパッケヌゞをむンポヌトするず以䞋の゚ラヌがテスト実行時に発生したす。 Error: Dart library 'dart:js_util' is not available on this platform. そこで、前述のむンポヌト分離ず同様な凊眮を倖郚パッケヌゞにも行っおいくのですが、ここでぱクスポヌトを䜿ったパタヌンで実践しおいきたいず思いたす。手順は以䞋ずなりたす。 1. 仲介パッケヌゞの䜜成 ここでは䟋ずしお inter_lib ずいうパッケヌゞをサンプルコヌドのパッケヌゞ内に䜜成しおいたす。 flutter create inter_lib --template=package 実際のプロダクトコヌドでは、倖郚パッケヌゞに準じたコヌドをプロダクトコヌド内に混入させないため、プロダクトずは別のパッケヌゞを䜜成しお倖郚パッケヌゞを仲介させおいたす。 Melos を䜿うず簡単にマルチパッケヌゞ開発ができるのでおすすめです。 2. Nativeプラットフォヌム甚のスタブの䜜成 keycloak_flutter のスタブを䜜るため、Githubのリポゞトリを参照しおむンタヌフェヌスを暡擬したすラむセンスの確認は適宜お願いしたす。 プロダクトコヌド䞊で䜿甚しおいるクラスやメ゜ッドはすべおが必芁になりたす。 @ card 䜜成したファむルは以䞋のようになっおいたす。 src ディレクトリ以䞋の stub_ のプレフィックスが぀いおいるものが倖郚パッケヌゞのむンタヌフェヌスを暡擬したものです。 inter_lib ├── lib │ ├── keycloak.dart │ └── src │ ├── stub_keycloak.dart │ ├── stub_keycloak_flutter.dart │ └── entry_point.dart たた、 entry_point.dart は実際の倖郚パッケヌゞず同じものを゚クスポヌトするように定矩したした実際にはプロダクトコヌド内で䜿甚しおいるむンタヌフェヌスだけで十分です。 export './stub_keycloak.dart' show KeycloakConfig, KeycloakInitOptions, KeycloakLogoutOptions, KeycloakLoginOptions, KeycloakProfile; export './stub_keycloak_flutter.dart'; この inter_lib をパッケヌゞずしお内郚公開するため、以䞋のように゚クスポヌトの蚭定をしたす。 library inter_lib; export './src/entry_point.dart' if (dart.library.html) 'package:keycloak_flutter/keycloak_flutter.dart'; 3. 仲介パッケヌゞを pubspec.yaml の dependencies ぞ远加 pubspec.yaml に inter_lib ぞの盞察パスを远加したす。 // 省略 dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 + inter_lib: + path: './inter_lib' // 省略 そしお、元々倖郚パッケヌゞを参照しおいたずころを inter_lib に眮き換えたす。 - import 'package:keycloak_flutter/keycloak_flutter.dart'; + import 'package:inter_lib/keycloak.dart'; import 'package:flutter/material.dart'; import 'package:sample_web/my_home_page.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final keycloakService = KeycloakService( KeycloakConfig( url: 'XXXXXXXXXXXXXXXXXXXXXX', realm: 'XXXXXXXXXXXXXXXXXXXXXX', clientId: 'XXXXXXXXXXXXXXXXXXXXXX', ), ); await keycloakService.init( initOptions: KeycloakInitOptions( onLoad: 'login-required', enableLogging: true, checkLoginIframe: false, ), ); runApp( const MyApp(), ); } 以䞊、Webプラットフォヌム䟝存パッケヌゞのNativeプラットフォヌム甚スタブの䜜成フロヌでした。これでテストをVM䞊で実行できるようになりたす。 この方法は今回の䟋ずしお甚いたkeycloak_flutter以倖にももちろん適甚できたす。 ![successful people](/assets/blog/authors/osugi/20240301/success.png =480x) たずめ 今回の蚘事では、Flutter Webのコヌドをテスタブルな状態に維持するために単䜓テストで工倫しおいるこずをたずめたした。 Dartの実行環境には、WebプラットフォヌムずNativeプラットフォヌムがある flutter test はNativeプラットフォヌム実行であり、 dart:html などのWebプラットフォヌム甚パッケヌゞを䜿っおいるず゚ラヌずなっおしたう dart.library.io , dart/library/html のフラグを掻甚しお、プラットフォヌムごずに実パッケヌゞずスタブを切り替える実装をするず幞せになれる
Hello, I am _awache ( @_awache ), and I do DBRE at KINTO Technologies (KTC from now onwards). KTC operates a large number of databases such as Amazon Aurora on Amazon Web Services (hereinafter abbreviated as AWS) as a foundation for providing mobility services. It established the Database Reliability Engineering (hereinafter abbreviated as DBRE) organization and is implementing initiatives to balance business agility and governance. In this article, I will talk about why KTC needs DBRE. About Database Reliability Engineering (DBRE) DBRE stands for Database Reliability Engineering. It is responsible for using an approach that combines the best practices of software engineering and database management. Our main jobs are: Defining and measuring SLO/SLI and making an approach to a development organization accordingly Increasing productivity through automation and autonomy Increasing the uptime of backup, restore, and other services Database security guarantee and governance control Cross-functional collaboration with specialists from other disciplines These roles can be summed up as ensuring the reliability of services by using specialized knowledge and decisions on databases. Do Companies Need DBRE? The term "DBRE" may seem very appealing to some people. However, it is difficult to achieve sustainable results without thinking the reasons why it is necessary in an organization. The rapid growth of AWS and other public cloud services, the evolution and widespread acceptance of DevOps and SRE principles, coupled with the progress in AI technology, have collectively established a robust foundation. This foundation empowers individuals to address problems up to a certain complexity level through Cloud utilization. Consequently, the demand for specialized knowledge in database engineering is diminishing. On the other hand, the basic approach to databases has not changed even now. Separate environment Manage configuration Measure performance Backup/Restore Security guarantee, etc. Simply put, it can be said that it's the environment surrounding databases that has changed . You might also want to consider introducing DBRE at your company if you decide it is necessary given the changes in the times. Why KTC Needs DBRE Here's an explanation of why KTC is adopting DBRE practices. The relationship between software engineers and database administrators had changed The roles of software engineers and database administrators are clearly separated in this age When the company still focused on on-premises configurations, software engineers and database administrators generally had distinct roles and worked in their respective areas of expertise. For example, I think there were classifications like these: Software Engineering Maintaining service uptime and accelerating its growth Extracting necessary data at users' requests Tuning that does not require changes to the database DDL such as query changes Adapting to application according to requests from database administrators Database Administration Maintaining database uptime The major difference between the two is the speed and expertise in responding to requests and users' needs. Because software engineers are closer to the service provider side, they need to respond as quickly as possible to meet needs. Since database administrators focus on the database rather than on services, they use their expertise to solve various issues at the latest even if they respond more slowly. It is like the following figure. ![Relationship1](/assets/blog/authors/_awache/20231211/関係性1.jpg =500x) In an organization like this, the database administrator finds issues throughout the organization and solves them. The rise of public cloud services has decreased work done by database administrator and expanded the area of software engineers The rise of public cloud services such as AWS has drastically changed the roles of both sides. It can be said that the role of the database administrator has been drastically reduced because public cloud services can maintain database uptime. On the other hand, some of the jobs that database administrators were responsible for are done by database administrators and software engineers, specifically: Separate environment Manage configuration Measure performance Backup/Restore Security and Governance Control Software engineers in the workplace are now required to do these things. Because of that, there are times when the database does not get enough attention. ![Relationship2](/assets/blog/authors/_awache/20231211/関係性2.jpg =500x) KTC started facing issues in this regard. In order to keep accelerating business growth, software engineers must be able to focus on business growth. In today's world of cloud utilization, DBRE must be a hub with public cloud services in order for software engineers to focus on business activities. The Key Roles Required of DBRE Maintaining service uptime using databases Making engineers in the workplace more productive Handling database security Protecting the database from internal and external factors By fulfilling these roles, DBRE accelerates the continued growth of the company. ![Relationship3](/assets/blog/authors/_awache/20231211/関係性3.jpg =500x) The following chapters provide more information on each role. The Roles of DBRE in the Cloud Era Maintaining service uptime using databases Generally, a properly functioning database is required for a service to run properly. In other words, database downtime directly leads to service downtime. In order to maintain service uptime, the database must be restored correctly, appropriately, and quickly. So what DBRE needs is the skills to keep the database running on the cloud. king engineers in the workplace more productive Promoting standardized operation of a database can significantly contribute to companies. Examples include using a platform that provides company guidelines, automatically generating database documents such as ER diagrams, and automating routine operations. DBRE also plays an important role in validating new features and applying them to the company, addressing application bottlenecks such as slow queries, and troubleshooting. These do not scale even if only DBRE does them. DBRE has to work with much less resources than software engineers. It is important to note that outputs from DBRE go back to the software engineers and can be handled by anyone. Handling database security The database becomes more important as the business grows. When the database becomes more valuable, it is constantly targeted. A data leak can cause financial losses and tarnish the company's reputation. It is necessary to protect the database from risks like that for the company to keep growing. For that reason, it is important that DBRE implements database security measures as a business unit. ![ChangeinTimeandsValue](/assets/blog/authors/_awache/20231211/時間ず䟡倀の倉化.png =500x) Protecting the database from internal and external factors Data is easily influenced by changes in external factors. Because of that, database operation requirements become more strict over time. In particular, companies have to address changes in governments, regulations, public opinion, and other factor outside of the company's or people's control. For example, the Personal Information Protection Act and other laws get revised regularly, and the penalties tend to get more strict each time. If each service individually addresses influences by external factors, it presents financial risks, the risk of a leak, and other risks. DBRE is required to properly understand the risks of external factors and implement optimal governance control across all databases in the company. KTC DBRE's vision At KTC, DBRE is a cross-functional organization. It provides value by having our outputs reflected on the business. I think that having a cross-functional organization without knowing how to leverage it is the same as paying taxes and not understanding where your money goes. It is important to know how to positively affect the business. These days, businesses change too fast to be handled with just rules and reviews. It is important that DBRE uses its knowledge of databases to contribute to engineers in the workplace and maintain the reliability of KTC as a company. For that reason, we try to solve database issues through engineering to the best of our abilities. We implement governance control in services and positively impact the business by working together with engineers in the workplace and quickly solving issues without being restricted by rules. Conclusion The Roles of KTC DBRE Provide an environment in which engineers in the workplace can focus on growing the business. The Key Roles Required of KTC DBRE Maintaining service uptime using databases Making engineers in the workplace more productive Handling database security Protecting the database from internal and external factors By fulfilling these roles, DBRE accelerates the continued growth of KTC. It is required to positively influence the business by working together with engineers in the workplace and quickly solving issues by focusing on these roles without being bound by rules. Do you want to discuss DBRE with us? We have just starting doing DBRE. We are still doing trial and error to see why we are doing DBRE, what we want to accomplish, and we will do it. By having frank discussions on what we are doing and what we want to do, we can expand our horizons. We also want to talk about our efforts to receive a lot of input. If you are interested, please send us a DM on Twitter. We are Hiring I think recruiting DBRE team members is a huge challenge. If you are interested in our activities, do not hesitate to send your application through our recruitment page . We're also open to casual conversations with anyone who wants to chat with us. We're also planning to organize events such as DBRE meetups and collaborate with companies that follow DBRE practices. We look forward to you joining us when that happens!
Hello, I am _awache ( @_awache ), and I do DBRE at KINTO Technologies (KTC from now onwards). KTC operates a large number of databases such as Amazon Aurora on Amazon Web Services (hereinafter abbreviated as AWS) as a foundation for providing mobility services. It established the Database Reliability Engineering (hereinafter abbreviated as DBRE) organization and is implementing initiatives to balance business agility and governance. In this article, I will talk about why KTC needs DBRE. About Database Reliability Engineering (DBRE) DBRE stands for Database Reliability Engineering. It is responsible for using an approach that combines the best practices of software engineering and database management. Our main jobs are: Defining and measuring SLO/SLI and making an approach to a development organization accordingly Increasing productivity through automation and autonomy Increasing the uptime of backup, restore, and other services Database security guarantee and governance control Cross-functional collaboration with specialists from other disciplines These roles can be summed up as ensuring the reliability of services by using specialized knowledge and decisions on databases. Do Companies Need DBRE? The term "DBRE" may seem very appealing to some people. However, it is difficult to achieve sustainable results without thinking the reasons why it is necessary in an organization. The rapid growth of AWS and other public cloud services, the evolution and widespread acceptance of DevOps and SRE principles, coupled with the progress in AI technology, have collectively established a robust foundation. This foundation empowers individuals to address problems up to a certain complexity level through Cloud utilization. Consequently, the demand for specialized knowledge in database engineering is diminishing. On the other hand, the basic approach to databases has not changed even now. Separate environment Manage configuration Measure performance Backup/Restore Security guarantee, etc. Simply put, it can be said that it's the environment surrounding databases that has changed . You might also want to consider introducing DBRE at your company if you decide it is necessary given the changes in the times. Why KTC Needs DBRE Here's an explanation of why KTC is adopting DBRE practices. The relationship between software engineers and database administrators had changed The roles of software engineers and database administrators are clearly separated in this age When the company still focused on on-premises configurations, software engineers and database administrators generally had distinct roles and worked in their respective areas of expertise. For example, I think there were classifications like these: Software Engineering Maintaining service uptime and accelerating its growth Extracting necessary data at users' requests Tuning that does not require changes to the database DDL such as query changes Adapting to application according to requests from database administrators Database Administration Maintaining database uptime The major difference between the two is the speed and expertise in responding to requests and users' needs. Because software engineers are closer to the service provider side, they need to respond as quickly as possible to meet needs. Since database administrators focus on the database rather than on services, they use their expertise to solve various issues even if they respond more slowly. It is like the following figure. ![Relationship1](/assets/blog/authors/_awache/20231211/関係性1.jpg =500x) In an organization like this, the database administrator finds issues throughout the organization and solves them. The rise of public cloud services has decreased work done by database administrator and expanded the area of software engineers The rise of public cloud services such as AWS has drastically changed the roles of both sides. It can be said that the role of the database administrator has been drastically reduced because public cloud services can maintain database uptime. On the other hand, some of the jobs that database administrators were responsible for are done by database administrators and software engineers, specifically: Separate environment Manage configuration Measure performance Backup/Restore Security and Governance Control Software engineers in the workplace are now required to do these things. Because of that, there are times when the database does not get enough attention. ![Relationship2](/assets/blog/authors/_awache/20231211/関係性2.jpg =500x) KTC started facing issues in this regard. In order to keep accelerating business growth, software engineers must be able to focus on business growth. In today's world of cloud utilization, DBRE must be a hub with public cloud services in order for software engineers to focus on business activities. The Key Roles Required of DBRE Maintaining service uptime using databases Making engineers in the workplace more productive Handling database security Protecting the database from internal and external factors By fulfilling these roles, DBRE accelerates the continued growth of the company. ![Relationship3](/assets/blog/authors/_awache/20231211/関係性3.jpg =500x) The following chapters provide more information on each role. The Roles of DBRE in the Cloud Era Maintaining service uptime using databases Generally, a properly functioning database is required for a service to run properly. In other words, database downtime directly leads to service downtime. In order to maintain service uptime, the database must be restored correctly, appropriately, and quickly. So what DBRE needs is the skills to keep the database running on the cloud. Making engineers in the workplace more productive Promoting standardized operation of a database can significantly contribute to companies. Examples include using a platform that provides company guidelines, automatically generating database documents such as ER diagrams, and automating routine operations. DBRE also plays an important role in validating new features and applying them to the company, addressing application bottlenecks such as slow queries, and troubleshooting. These do not scale even if only DBRE does them. DBRE has to work with much less resources than software engineers. It is important to note that outputs from DBRE go back to the software engineers and can be handled by anyone. Handling database security The database becomes more important as the business grows. When the database becomes more valuable, it is constantly targeted. A data leak can cause financial losses and tarnish the company's reputation. It is necessary to protect the database from risks like that for the company to keep growing. For that reason, it is important that DBRE implements database security measures as a business unit. ![ChangeinTimeandsValue](/assets/blog/authors/_awache/20231211/時間ず䟡倀の倉化.png =500x) Protecting the database from internal and external factors Data is easily influenced by changes in external factors. Because of that, database operation requirements become more strict over time. In particular, companies have to address changes in governments, regulations, public opinion, and other factor outside of the company's or people's control. For example, the Personal Information Protection Act and other laws get revised regularly, and the penalties tend to get more strict each time. If each service individually addresses influences by external factors, it presents financial risks, the risk of a leak, and other risks. DBRE is required to properly understand the risks of external factors and implement optimal governance control across all databases in the company. KTC DBRE's vision At KTC, DBRE is a cross-functional organization. It provides value by having our outputs reflected on the business. I think that having a cross-functional organization without knowing how to leverage it is the same as paying taxes and not understanding where your money goes. It is important to know how to positively affect the business. These days, businesses change too fast to be handled with just rules and reviews. It is important that DBRE uses its knowledge of databases to contribute to engineers in the workplace and maintain the reliability of KTC as a company. For that reason, we try to solve database issues through engineering to the best of our abilities. We implement governance control in services and positively impact the business by working together with engineers in the workplace and quickly solving issues without being restricted by rules. Conclusion The Roles of KTC DBRE Provide an environment in which engineers in the workplace can focus on growing the business. The Key Roles Required of KTC DBRE Maintaining service uptime using databases Making engineers in the workplace more productive Handling database security Protecting the database from internal and external factors By fulfilling these roles, DBRE accelerates the continued growth of KTC. It is required to positively influence the business by working together with engineers in the workplace and quickly solving issues by focusing on these roles without being bound by rules. Do you want to discuss DBRE with us? We have just starting doing DBRE. We are still doing trial and error to see why we are doing DBRE, what we want to accomplish, and we will do it. By having frank discussions on what we are doing and what we want to do, we can expand our horizons. We also want to talk about our efforts to receive a lot of input. If you are interested, please send us a DM on Twitter. We are Hiring I think recruiting DBRE team members is a huge challenge. If you are interested in our activities, do not hesitate to send your application through our recruitment page . We're also open to casual conversations with anyone who wants to chat with us. We're also planning to organize events such as DBRE meetups and collaborate with companies that follow DBRE practices. We look forward to you joining us when that happens!
はじめに 私は2020幎11月にKINTOテクノロゞヌズに入瀟し、KINTO Webのフロント゚ンドずAPIの開発に携わった埌、珟圚はモバむルAndroidアプリチヌムの開発者を務めおいたす👋🏟 IT業界で女性であるこずに぀いおの思いや経隓を曞いおほしいずの䟝頌でしたが、正盎なずころ、性別による違いはないず思いたすし、あるべきでもないず思っおいたす。本蚘事は、KINTOテクノロゞヌズにおけるさたざたな働き方や芖点を掘り䞋げおダむバヌシティを探求する党5回のシリヌズの1぀ですので、ここでは私がKINTOテクノロゞヌズで担圓する開発チヌムでのリヌダヌシップに぀いお、私の思いず個人的な成長に぀いおお話ししたいず思いたす。 簡単な自己玹介  😊 経歎 💡 豆知識高校生の時に始めた個人事業に10幎間埓事 🌱 ゲヌムプログラミングを孊ぶために来日し、15幎の開発経隓あり 💌 前職モバむルアプリ゚ンゞニア、゜フトりェアSmartTV゚ンゞニア、Web゚ンゞニアフルスタック、デゞタルサむネヌゞスタヌトアップ。 📫 2020幎にKINTOテクノロゞヌズに入瀟。 優れたリヌダヌずは 開発者から初めおチヌムリヌダヌになったずき、最初に自問したのは「優れたリヌダヌずはなにか」ずいうこずでした。 初めおリヌダヌを任せおくれた䞊叞が、リヌダヌず䞊叞の違いを説明しおくれお、「こんなリヌダヌになりたい」ず思ったのはその時でした。 リヌダヌずは、メンバヌの力を結集し、優れた成果を生み出し、それを共有する人です。 そのためには、自分が前に立っおチヌムを匕っ匵り、裏ではサポヌト圹ずなっおチヌムを良い方向に導いおいくこずが倧切だず考えたす。 開発チヌムの最終的な䜿呜は、今あるリ゜ヌスを掻甚しお、必芁なサヌビスをできるだけ早く、完璧に䜜り䞊げるこずです。さらに、開発チヌムの目的は優れた開発を行うだけでなく、開発を通じお最倧の䟡倀を生み出すこずでもありたす。最終的にはこれがチヌムの成果ずしお衚れたす。こういったチヌムが優れたチヌムであり、これを支えるリヌダヌが優れたリヌダヌであるず考えたす。 「チヌムワヌク」の重芁性 では、結果を出す優れたチヌムを䜜るにはどうすれば良いのでしょうか。優れたチヌムに最も必芁なものは䜕でしょうか。チヌムメンバヌをひず぀のゎヌルに集䞭させるにはどうすれば良いのでしょうか。その原動力はチヌムワヌクだず私は思っおいたす。チヌムワヌクを高めるために、私がチヌムのメンバヌず行ったこずを以䞋にご玹介したす。 チヌムの党員がリヌダヌになる 「Team Goal Task Content Sharing Meeting (ゎヌル・タスク情報共有䌚)」で珟圚のチヌムゎヌルを共有し、各自がタスクを遞択できるようにしおいたす。通垞、リヌダヌシップが求められるのはチヌムリヌダヌやグルヌプリヌダヌのみで、実際に組織で圹職に就いおいない限り、リヌダヌシップが自分の圹割だず考える人はあたりいたせん。私は、チヌムのメンバヌが自分の仕事に察しおリヌダヌシップを発揮し、䞎えられた仕事に察しお「リヌダヌずしおの」責任感を持おるようにするこずもリヌダヌの圹割だず考えおいたす。そしお、これがチヌムにずっお重芁な圹割を果たしおいるず感じたす。自䞻性があるず人はやる気になり、個人の胜力を最倧限に高めるこずに぀ながるのだず思いたす。 仕事は開発文化によっお生み出される 開発チヌムが良い仕事をするのは、「仕事」のためではなく、チヌムの「文化」があるからだず思っおいたす。 䟋えば、䜜業プロセスを䜜るこず、文曞を䜜成するこず、仕様を明確に䌝えるこず、これらは「仕事」の基本です。 成功する開発チヌムは、チヌムの「文化」が物事をうたく機胜させるず信じおいるのだず思いたす。 チヌムのメンバヌ同士がどのようにコミュニケヌションを取っおいるか。どのようにたずたっおいるか。結論が出た埌はどうするのか。反察意芋を蚀うのか、支持するのか、陰で批刀するのか。などなど。 これが開発文化であり、チヌム文化です。 倚様性を認め、受け入れる チヌムのメンバヌにはそれぞれ匷みがありたす。䞀番倧切なのは、その匷みを最倧限に生かし、最倧限の䟡倀を生み出すこずだず思いたす。 では、私たちのチヌムではどうしおいるのでしょうか デむリヌスクラムリヌダヌチヌム党員が日替わりでリヌダヌになる 私たちのチヌムでは毎朝11時にミヌティングを開いお、チヌムメンバヌが集たり、昚日やったこず、今日やるこず、そしお仕事䞊の問題を簡単に共有したす。通垞のチヌムミヌティングず異なるのは、䞊䞋関係の報告圢匏ではなく、暪䞊びの雰囲気の䞭でメンバヌが亀代でファシリテヌタヌを務める点です。ミヌティングは「共有」の圢匏で進められたす。チヌムメンバヌが問題を抱えおいおタスクを進められない堎合は、デむリヌスクラムの終了埌に「助け合いミヌティング」を開いお解決を目指したす。たた、昚日行ったすべおの䜜業を芚えおいない堎合があるので、Confluenceに曞き留めおおくず、チヌムメンバヌはそれを芋お、スケゞュヌルを立お、やるべきこずを蚈画するこずができたす。 KINTO ONEサブスクチヌムのデむリヌスクラムのやり方をご玹介したす。その日のファシリテヌタヌがデむリヌスクラムのアゞェンダを説明したす。最初の週は、たずは今埌2週間でチヌムが改善すべき点や詊みるべきこずを共有したす。毎朝1015分皋床の短い時間ですが、このように党員が亀代でリヌダヌを務めるこずで、日々の仕事の䞭でリヌダヌシップを鍛えるこずができ、チヌムメンバヌが率先しおチヌムの珟圚のタスクやゎヌルを共有し、タスクに貢献するこずができたす。 その重芁性を理解するこずで、「リヌダヌシップのマむンドセット」を磚くこずができ、やがおそれが_自身の䞭のモチベヌタヌ_ずなっお、より良い結果に぀ながるず思っおいたす。 コヌドレビュヌモチベヌションず自埋性 倚くの開発者は、創造性によっお高い「モチベヌション」を埗おいたす。自分の仕事や衚珟を認め、高く評䟡しおくれる人たちず分かち合いたいず思っおいたす。私自身も、人がやったこずを芋たり、コヌドに没頭しお、人の発想に驚かされたりするのが奜きです。コヌドレビュヌの時間を通しお、私たちは互いの仕事を共有し、互いに孊び合うこずができたす。珟圚の方法よりも良い方法があれば、それを共有し、倧胆な倉曎も取り入れたす。もちろん、どんな倉曎にもチヌム党䜓の合意が必芁です。こうしお、優れたコヌドに぀いお議論し、互いにコヌドレビュヌを行うこずで、私たちは日々成長しおいたす。玠晎らしい仲間ず充実した共同䜜業の経隓が、チヌム内の信頌関係をたすたす匷化しおいるず感じおいたす。 ブレむンストヌミング䞀぀のゎヌルに集䞭しよう 私たちは、なぜこの仕事をする必芁があるのか、なぜこのサヌビスをナヌザヌに提䟛する必芁があるのか、考える時間を取っおいたす。どう䜜るか、どう䌝えるか、どう実珟させるか、そしお私たちの䜜るサヌビスがナヌザヌに䞎える䟡倀の倧きさに぀いお、深く考えたす。コヌドの寿呜やコンポヌネントのスケヌラビリティ、ナヌザヌの芖点に立った党䜓の蚭蚈を考慮するこずで、開発チヌムの各メンバヌが、目的や機胜ごずに開発リヌダヌずしお独立しお技術的な意思決定を行うこずができたす。 私たちのチヌムのブレむンストヌミングは、次のルヌルに則っお進められたす。 トピックに集䞭しよう アむデアを自由に衚珟しよう アむデアを組み合わせよう できるだけ倚くのアむデアを出そう アむデアは批評しない むメヌゞしおみよう アむデアを決定する 自分で決めた堎合は、耇雑なコミュニケヌションプロセスを経ずに自埋的に「プロトタむプ」を䜜り、それを䌁画チヌムに届けおプロダクトにするこずがゎヌルです。 開発文化の成長のために柔軟であり続ける 私自身の成長、チヌムメンバヌの成長、そしお皆の成長のために小さな行動を積み重ねおいく過皋で、優れた開発文化が生たれ、結果ずしお皆がずもに成長しおいくのだず思っおいたす。 私個人ずしおは、玠晎らしい仲間がいるチヌムの䞀員でいられるこずに垞に感謝しおいたす。開発文化は良いサヌビスを䜜るための手段であり、ツヌルであっお、ゎヌルではありたせん。チヌムの文化は今埌も倉化し続け、良い方向に向かっおいくものず信じおいたす。 最埌に、私が考える優れたリヌダヌの理念ずは、チヌムメンバヌの成長をコントロヌルするのではなく、埌抌しし、サポヌトするこずであり、チヌム内で互いに助け合える優れた開発文化を築くこずです。優れたチヌムを䜜るこずが必ずしも倧きな成功を保蚌するものではないかもしれたせんが、その可胜性を高めるこずはできるず私は信じおいたす。