TECH PLAY

KINTOテクノロゞヌズ

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

å…š975ä»¶

A.K 自己玹介 my route開発GのAです。ラトビア出身です。 前職はスタヌトアップで、フルスタックで幅広く掻動しおいたした。 所属チヌムの䜓制は 自分を含めお6人になりたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 倧手䌁業のグルヌプですが、自分のチヌムは雰囲気が和やかで意倖ず働きやすいかず。 興味がある技術があれば基本的に勉匷䌚があるのは本圓にいいず思いたした。 珟堎の雰囲気はどんな感じ 意倖ず倖囜籍の方が倚いけど、みんな技術レベル高いし、話しやすいず思いたす。 ブログを曞くこずになっおどう思った 埗意じゃないですね。 M.Oさんからの質問スマヌトホヌム化されおるAさん、アレクサによく聞く質問はなんですか そうですね、出かける前に「今日の倩気は」は党䜓聞きたす。 あず、Spotifyが玐づいおるので「この曲䜕」ずか、「〇〇を流しお」ずかもほが毎日䜿っおたす。 豆知識ですが、アレクサはTTSスピヌカヌずしお䜿えるので、カスタムメッセヌゞを流すのは奜きです。 䞀番圹に立っおるのは、簡単なものですが時〜時の間、分ごずに時間メッセヌゞを流すこず。「もう7時35分だよ出る気あるのおい 」みたいな。 S.D 自己玹介 プロデュヌスG所属の出口です。 前職ではカヌナビや地図デヌタ関連の仕事をしおいたした。自然蚀語凊理や機械孊習も関わっおいたした。 所属チヌムの䜓制は 自分を含めお党名のグルヌプです。各メンバヌは個々で異なる案件に関わっおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 面談時から瀟内の雰囲気は説明いただけおたので、倧きなギャップはありたせんでした。 珟堎の雰囲気はどんな感じ メむンのやり取りはSlackで頻繁に行い぀぀も、察面でのやり取りも頻繁に行っおいお、コミュニケヌションがずりやすい環境だなず感じたした。 ブログを曞くこずになっおどう思った 瀟倖発信できる機䌚を蚭けおいるのは良いなず思いたした。 過去事䟋やテックブログにも目を通すきっかけずなり、瀟内メンバヌの情報を色々ず埗るこずができたした。 A.Kさんからの質問 今たで集めたガゞェットの䞭、䞀番圹に立぀のがどれだず思いたすか 1぀に絞り切れないので、いく぀かあげさせおください Raspberry Pi気軜にIoTにも挑戊できお実際に物を䜜り蟌む䜓隓ができる玠晎らしい補品この䟡栌でUbuntu(GUIあり)がきちんず動くのは驚き。 insta360 flowこの性胜のゞンバルをこのコストで楜しめるのはありがたい被写䜓远跡も䟿利 みおねGPS小さいお子さんには持たせたい。スマホはNGずいう堎所でも持ち蟌めるのが良いポむントだず思う。バッテリヌの持ちも良いのがいい。 K.N 自己玹介 分析Gのデヌタ゚ンゞニアリングチヌム所属の西です。 所属チヌムの䜓制は 分析Gはデヌタサむ゚ンスチヌム、デヌタ゚ンゞニアリングチヌム、デヌタプロデュヌスチヌムのチヌム䜓制です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 瀟内勉匷䌚が倚いです 珟堎の雰囲気はどんな感じ 毎朝の朝䌚で、進捗や課題、盞談事などを共有しおいたす。 東京、名叀屋、倧阪の拠点、圚宅ず出瀟の混合勀務䜓制のため、必芁に応じおSlackのハドルで画面共有しながら䌚話したす。 ブログを曞くこずになっおどう思った 過去蚘事など参考にしたので、他の入瀟瀟員のこずを知れるきっかけになるなず思いたした。 S.Dさんからの質問今思えば入瀟時にこんな情報があればもっず良かった、こんな仕組みがあったら良かったず思う事があれば教えおください。 入瀟しおビゞネスモデルのオリ゚ンテヌションなど倚く受講したしたが、ヶ月埌ぐらいに䜕らかの埩習のような機䌚があるず、より知識の定着があるのかなず思いたした。 W ![W avatar](/assets/blog/authors/numami/maymember/4.png =200x) 自己玹介 人事グルヌプ組織人事チヌムに所属しおいる枡邉です。 人材䌚瀟での営業マネヌゞャヌやスタヌトアップで人事をしおいたした。 所属チヌムの䜓制は 人事グルヌプには組織人事チヌム、採甚チヌム、劎務総務チヌムがありたす。 グルヌプ党䜓で13名圚籍しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった ギャップは特にありたせんでした。 TOYOTAグルヌプなので瀟内統制がしっかりしおいるずは思っおいたしたが、想定通りカッチリしおいたした。ずはいえ、十分な自由床は確保できおいるず思いたす。 面談圓時から良くも悪くも様々な瀟内の課題を聞いおいたので、その点もギャップはありたせんでした。 珟堎の雰囲気はどんな感じ 皆さん、それぞれ前向きに業務に取り組んでいる印象です。 入瀟埌1ヶ月は郚長やMGR陣ず面談をさせおもらったのですが、皆さん快く受けおいただいたので安心しおスタヌトするこずが出来たした。 ブログを曞くこずになっおどう思った 瀟内倖ぞの発信に力を入れおいお玠晎らしいなず思いたした。 倧手傘䞋だず、瀟倖発信に関しお統制が聞いおいるのかなず思ったのですが、その蟺りはベンチャヌっぜく自由床が高いず感じおいたす。 K.Nさんからの質問KTCでどんなこずにチャレンゞしたいですか みんなが䞀䞞ずなっお進んでいけるような環境を創るこずにチャレンゞしたいです K 自己玹介 IT/IS郚に所属しおたす。前職ではSier䌁業でMSむンフラ、.Net系開発、情シス系運甚業務等の仕事をしおたした。 所属チヌムの䜓制は IT/IS郚にはAsset-Paltfor、Corporate-Engineering、Tech-Service、EnterpriseTechnologyの4チヌムで構成されおたす。 私はその䞭のCorporate-Engineeringチヌムで、䞻に業務課題や芁望をシステム導入/曎改/改善でアプロヌチする業務に携わっおたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった ギャップは有りたせんでした。 IT/IS郚に所属する党員が「自分の業務タスクがどう䟡倀を提䟛されるか」を考えおおり、統制されおいる点ですばらしいず思ったのが第印象です。 珟堎の雰囲気はどんな感じ 普段は宀町オフィスで業務しおたす。それぞれが気軜に盞談しあい、自分事のように考えおくれる雰囲気です。 定期的にリヌダヌ、マネヌゞャヌ、郚長ずの1on1ミヌテむングで率盎な意芋、感想、芁望、悩みなどを䌚話しおたす。そのため、1on1以倖でも声をかけやすい雰囲気であるず思いたす。 ブログを曞くこずになっおどう思った このブログ以倖でも倖界ぞの発信を積極的に行っおいるので、シンプルに良い斜策だなず思いたした。 Wさんからの質問最近行った面癜かった堎所旅行先などあれば教えおください。 最近匕っ越しをしたしお、遊びに来た倧孊時代の友人ず銭湯ぞ行きたした。昭和的な倖芳ず雰囲気で颚情があり、非日垞感を埗るこずができたした。いたたで銭湯に察しおあたり興味はありたせんでしたが、リフレッシュする面癜い堎所ずしお印象に残っおたす。 JK ![JK avatar](/assets/blog/authors/numami/maymember/6.png =200x) 自己玹介 Toyota Woven City Payment Solution開発G所属の金です。 所属チヌムの䜓制は 自分を含めお党人のグルヌプです。 実際Woven偎の䜜業を行なっおたしお、チヌムにはKTC以倖にWovenのメンバヌがいたす。 フロント゚ンド偎の䜜業からバック゚ンド偎、むンフラ呚りたで幅広い䜜業を行なっおたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 様々な内容をオリ゚ンテヌション時に聞けお良かったず思いたす。 珟堎の雰囲気はどんな感じ 基本的には週に1回スプリント蚈画をを立ち䞊げお目暙通りの䜜業を行なっおたす。 TechtalkやDocumentReadingなどの時間を定期的に持っおたす。 リモヌト䜜業が倚いためSlack, Meet などを掻甚しチヌムメンバヌずコミュニケヌションしおたす。 ブログを曞くこずになっおどう思った 蚘事を読んでくださる方に少しでも有効な情報を䌝えたいず思いたした。 Kさんからの質問仕事をするのに䞀番倧事にしおいるこずは䜕か教えおください どこでも同じだずは思いたすが、人ずのコミュニケヌションが䞀番倧事かず思いたす。特に開発偎では機胜芁件などでコミュニケヌションミスがあったりするず党然違うものが䜜られたりもするのでw 他もう䞀぀は継続です。継続するこずによっお自分、自分の䜜業はもちろんチヌムたでより完成床が䞊がるず思いたす。 M ![M avatar](/assets/blog/authors/numami/maymember/7.png =200x) 自己玹介 デヌタ連携プラットフォヌムT所属のMです。 所属チヌムの䜓制は プロダクトをメンテナンスしおいるのは私を含め2名でやっおいたす。担圓するプロダクトが倚くのシステムず連携しおいるのでいろんな人ずやり取りをするこずが倚いです。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 勉匷䌚や新しいツヌル, サヌビスの導入が積極的でびっくりしたした。 珟堎の雰囲気はどんな感じ 萜ち着いた雰囲気で必芁があれば䌚話をする感じです。 ブログを曞くこずになっおどう思った 特に䜕も思わなかったです。 JKさんからの質問入瀟埌䜜業のOnBoardingやCatchupはどのような圢で行われたでしょうか。その際に感じた良かったずころがあったら教えおください たず最初に1on1でチヌム䜓制、携わる予定のプロダクトの目的・立ち䜍眮に぀いお説明いただきたしたそのあず資料ベヌスでのマシンおよび開発環境のセットアップをしたしたここたでは普通のOnBoardingかなず思いたすそのあずに業務理解のためにKINTO 新車の契玄たでの䞀連の流れをハンズオンでやりたしたハンズオンの資料が䞁寧に䜜成されおいお、車を借りる流れを理解できたのは良かったです D ![D avatar](/assets/blog/authors/numami/maymember/8.png =200x) 自己玹介 my route開発GのDです。 所属チヌムの䜓制は 自分を含めお6名です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 䜕かを発信する機䌚が倚い䌚瀟だなず感じたした。想像しおいたよりもゆるい雰囲気だなず思いたした。 珟堎の雰囲気はどんな感じ 個人で粛々ず䜜業を進めるこずが倚いです。チヌムメンバヌは優しい方ばかりです。 ブログを曞くこずになっおどう思った 瀟倖の方に読たれるず思うず、ずおも緊匵したした。 Mさんからの質問 お気に入りのランチは芋぀けたしたかあれば教えおください ビルの1Fに入っおいるむンド料理のお店です。 M.O 自己玹介 モバむル開発G所属の倧沌です。前職では音声プラットフォヌムVoicyのAndroid゚ンゞニアずしお埓事しおおりたした。バック゚ンドGoやフロント゚ンド(Angular/TypeScript)、iOSアプリなども開発しおいたした。 所属チヌムの䜓制は my routeのAndroid開発チヌムは、私を含めお4名䜓制です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 事前に日本囜倖出身の゚ンゞニアが倚いず聞いおいたしたが、予想以䞊に倚かったです。瀟内勉匷䌚が豊富で、孊びやアりトプットの機䌚がたくさんありたす。 珟堎の雰囲気はどんな感じ 瀟内で各自の担圓領域がしっかりず明確化しおいお業務やコヌディングに集䞭できたす。たた、業務で埗た知芋をすぐに共有し合える環境だず思っおたす。 ブログを曞くこずになっおどう思った 技術のこずをアりトプットするこずは奜きです。 Dさんからの質問もしあれば、入瀟しおから最も困ったこずを教えお䞋さい 圚宅ルヌルに準拠しOutlookでの圚宅の予定を远加するこずです。   
UI Guidelines
Good morning, good afternoon or good evening! This post is brought to you by Az from the Global Development UIUX Team who loves to take apart machines and take pictures while sipping delicious tea. UI Guidelines What are UI Guidelines in the first place? What kind of people use them? Who can become happy by using them? Let’s explore these questions step by step. Differences between Brand Guidelines and UI Guidelines Let me explain about the general differences between Brand Guidelines and UI Guidelines. KINTO does not have them publicly available, but we do have Brand Guidelines available. What are Brand Guidelines? They outline key branding rules to follow, including: The brand's philosophy and values Brand name usage and writing conventions Approved colors and imagery Required user experience elements *this image is for illustrative purposes Based on these rules, designers think about expression methods and designs. Reference: What are Brand Guidelines? What are UI Guidelines? UI guidelines provide clear, practical examples of valid design elements. Colors and shapes used for buttons, text, and so on The screen layout ratio How to use icons and images Here, you'll typically find components and specifications ready to be applied directly, both in design and implementation. What happens when you implement from a requirement? For example, imagine that below are the conditions that make a button "KINTO-like": It uses fixed colors It's rectangular It has an easy-to-read label It can be identified as a button Do you have an idea in mind? Now, let's say we get the below results: All conditions are met, but there are parts that are different from the button we may have been expecting. First row: there are no rounded corners on the four sides Second row, left: the aspect ratio of the margin in the button is wrong Third row, left: it has shadows that are not used with the others If it was created under the same parameters, why don't all the details match up? The root of the issue lies in the lack of a common understanding When the same team members work together consistently, there's a strong likelihood they can collaborate effectively. However, in reality, both teams and its members are often subject to change. When team members experience getting feedbacks like "This is different from what we expected from you...'" after completing a task, the need to redo the work can lead to significant losses in both time and motivation. In the UI Guidelines, the main button is defined with precise specifications, such as rounded corners set to 30 px, top and bottom margins at 10 px, and a width of 1/12 of the screen. This ensures consistent output with no deviation. Concept and usage of UI Guidelines Designing according to this format will make the work easier for both the designer and the front-end team. Let me explain with some common, real-world examples. You can follow the guidelines without a designer No need to stress over minor details—the styles, including text size, are standardized with fixed settings such as unavoidable style presets. Often, improper sizing and margins lead to unstable quality. However, if you follow the guidelines for setting margins, the screen layout will remain well-organized and visually appealing, even without designer adjustments. Minimizes screen size issues A common issue with design files is handling screen size pixels. With the guidelines, ratios and breakpoints are predefined, ensuring there are no discrepancies. Many elements can be created using "standard specifications" Input form layout Input forms are a typical example of content with similar fields where additions and reordering are frequent. We’ve seen several changes in recent projects, but since the designs followed the guidelines, we were able to modify and implement them in parallel without issues. Message delivery Result screens and error screens often contain a large number of text elements and combinations. Since the layout for icons and text is fixed for each status, there was no need to prepare multiple patterns—only exceptions required special treatment. Fewer probles for everyone! Consistent output is achievable, regardless of differences in experience and skills. The guidelines serve two major purposes: reducing the need for verbal and written communication and maintaining a shared understanding across teams. I plan to keep improving the system to ensure we can continue resolving challenges and we can say "If you run into issues, just check the guideline and your problem will be solved!"
Hello, this is HOKA from the Human Resources Group. (I have also written an article in the past called Let's Create a Human Resources Group - Behind the Scenes of an Organization that Grew to 300 Employees in Three Years , so please take a look at that article as well.) On March 28, 2024, just three days before the end of 2023, 40 members of KINTO Technologies' Development Support Division from Osaka, Nagoya, and Tokyo gathered at the Google office in Shibuya, Tokyo to participate in the 10X Innovation Culture Program. Here is a report on the event. What is 10X Innovation Culture Program ? The 10X Innovation Culture Program is a leadership program designed to create an organizational environment that fosters innovation. It was launched by Google Japan in September 2023 . The program consists of three key elements: online training, assessment tools, and a solution packages. Through the online training, participants learn about the "Think 10X" concept. Assessment tools help participants understand their current position and identify issues. The solution packages provide strategies to solve those issues. This program allows participants to naturally integrate innovative ideas and knowledge into their own organizations. How it started Awache from our DBRE, is one of the management team members of Corporate Culture and Innovation Subcommittee , at Jagu'e'r and has shown a strong interest in the 10X Innovation Culture Program. When the program was launched, Awatchi organized a project to gather some volunteers from within the company to experience a light version of the program at the Google office. I participated, and that's how it all began. It was so enjoyable and I learned so much that when I shared it at the morning meeting the next day, everyone was enthusiastic about the idea. The manager suggested, "Let’s do this with the entire team!” and the division head immediately approved, saying, "If it's just for the Development Support Division, I can authorize it myself!" With this excitement, before we knew it, the event was quickly organized. Even before getting approval from the president or vice president, we had already decided to go ahead with this plan. I appreciate our company’s culture and sense of speed. From then on, we began a process of trial and error to see how we could conduct this on a large scale with over 40 people in the entire Development Support Division (lol). The road to implementation At first, we were thinking of conducting it just with our own team members, but that would make it difficult to expand to divisions other than the Development Support Division. To achieve the "10X Innovation Culture," we must fully understand it ourselves and be able to speak about it with confidence. Therefore, this time we decided to hold a 10X Culture Program at a Google office run by Google employees. The goal was to learn how to run the program effectively and to train the "facilitators" who could conduct it within our company in the future. When we carried out a survey within the Development Support Division to find members interested in becoming a facilitators, 17 members responded that they wanted to take on this role. Those from non-HR members were included, regardless of occupation or gender. (They participated in the 10X Culture Program with the intention of becoming facilitators.) Once the overall lineup was decided, two people from Google, Awatchi, and HOKA took the lead in planning the content. Drawing on the experience I gained from taking the course in October 2023, we decided to watch the videos and complete the assessments in advance so we could concentrate more on the discussions. Preparatory meeting online Watch 6 videos Take an assessment 10X innovation culture program at Google office Understanding trends in the Development Support Division from assessment results Conduct two discussions We held a preparatory meeting (March 20th) Awatchi also started preparations for the first preparatory meeting. However, the assessment tool provided didn't work as expected! Awatchi solved it with brute force. There were no assessments available in English! So we requested an English translation from an in-house specialist. There were no English videos either! So we used YouTube's translation tool. Various issues arose, and we received help from people both inside and outside the company. 24% of KINTO Technologies' employees are foreign nationals. This was a moment that made me realize once again the importance of being able to speak English. Awatchi acted as the facilitator for the preparatory meeting. We watched the 10X Innovation Culture Program videos one by one and then answered the assessments, repeating the process. At the end of the preparatory meeting, the results were shared on the spot via Looker Studio, an assessment tool. Participants were able to see trends within the Development Support Division overall and within each group, which made them more enthusiastic. ![AssessmentResults](/assets/blog/authors/hoka/20240611/assessment_result.png =750x) On the day (March 28th) Finally, the day arrived on March 28th. A total of 40 people from Tokyo, Osaka, and Nagoya gathered at the Google office. The event was held at the Google office, which is usually hard to get into, so I felt like a total tourist (lol). ![GatheringAtTheGoogleOffice](/assets/blog/authors/hoka/20240611/arriving.jpg =750x) The facilitators on the day were Rika and Kota from Google. At the opening, they explained what the "10X" in the 10X Innovation Culture Program stands for, using examples from Google. ![ScenesFromTheEvent](/assets/blog/authors/hoka/20240611/state.jpg =750x) Everyone listened attentively and took notes. And finally, the discussion began. To make the most of the limited time available, participants were divided into groups of around five to discuss "intrinsic motivation" and "risk-taking," areas which had shown potential for improvement in the preparatory assessment results. In the "intrinsic motivation" section, we discussed points such as "what is needed to approach daily work with passion" and "how can this be achieved within the company?" On the other hand, in the "risk-taking" section, participants exchanged opinions on topics such as "how to lower the psychological hurdles when taking on new challenges" and "how to create a culture that tolerates failure." The facilitator's role here was to lead each group. In this culture session discussion, it was important to ensure everyone had a chance to speak and to keep the discussions broad without focusing too much on individual points. The agreement for conducting the workshop, presented by Google, included the following points: Basic premises See it as an opportunity to learn Accept that mistakes are normal Notes Be aware of the impact your words have on those around you Interpret all opinions as being given in good faith. Don't share what others have said outside the group Let's Enjoy Google Culture! Let's call each other by nicknames These were very important points for making group work smooth and lively. Here is the actual discussion scene: ![Discussion1](/assets/blog/authors/hoka/20240611/discussion1.jpg =750x) ![Discussion2](/assets/blog/authors/hoka/20240611/discussion2.jpg =750x) ![Discussion3](/assets/blog/authors/hoka/20240611/discussion3.jpg =750x) ![Discussion4](/assets/blog/authors/hoka/20240611/discussion4.jpg =750x) ![Discussion5](/assets/blog/authors/hoka/20240611/discussion5.png =750x) ![Discussion6](/assets/blog/authors/hoka/20240611/discussion6.jpg =750x) The session was very exciting from start to finish, and at the same time, we were able to learn about our own challenges and understand what we could do to improve them. Here are the actual survey results. ![SurveyResult1](/assets/blog/authors/hoka/20240611/survey1.png =750x) ![SurveyResults2](/assets/blog/authors/hoka/20240611/survey2.png =750x) ![SurveyResults3](/assets/blog/authors/hoka/20240611/survey3.png =750x) We also received some nice comments from the two of the Google staffs! Rika Thank you for your hard work! This excitement was only possible thanks to the advance preparations made by everyone here, so let me once again express my gratitude to you all! We were also energized by the enthusiastic participants at the workshop.💪 I believe that the way you are moving forward with cultural transformation at your company will influence other companies as well! Kota Thank you very much for this valuable opportunity! I was overwhelmed by everyone's enthusiasm. I hope this will be the catalyst for KINTO's cultural development to move to the next stage. I'm rooting for you! We hope to develop further initiatives from here, so please continue to support us.😃 Epilogue As it was the end of March, it coincided with the goal-setting period at KINTO Technologies. After participating in this program, we heard many people say things like, " That’s not 10X, is it? ." This made me realize that each and every one of us has begun to think more seriously than ever before about what we want our organization to be. We also decided to introduce Google’s famous "20% rule" in the Development Support Division. Previously, there was a hesitation to adopt this program due to the impression that "only Google can do this." However, experiencing this program firsthand changed our mindset to "maybe we can do it too." Moreover, it has been decided that another event will be held by the Development Support Division, three months from now, at the end of June (which is coming up soon). This time we will run it ourselves. We are also preparing to introduce the program in other divisions. The role of facilitators will be crucial. How was it? If you feel that your company culture has challenges or if you want to improve your company, I highly recommend checking out the 10X Innovation Culture Program . You will surely gain valuable insights. Announcement Google Cloud Next Tokyo '24 Speaker confirmed👏👏 On August 2, 2024, our company's Development Support Division General Manager, Kishi, and Awatchi, who is promoting 10X within the company, will be speaking at Google Cloud Next Tokyo '24 to introduce the 10X Innovation Culture Program’s experience workshop. They will share our honest thoughts about how we felt through this experience, so please drop by if you have time.
Hello. I'm @hoshino from the DBRE team. In the DBRE (Database Reliability Engineering) team, our cross-functional efforts are dedicated to addressing challenges such as resolving database-related issues and developing platforms that effectively balance governance with agility within our organization. DBRE is a relatively new concept, so very few companies have dedicated organizations to address it. Even among those that do, there is often a focus on different aspects and varied approaches. This makes DBRE an exceptionally captivating field, constantly evolving and developing. For more information on the background of the DBRE team and its role at KINTO Technologies, please see our Tech Blog article, The need for DBRE in KTC . In this article, I will introduce the improvements the DBRE team experienced after integrating PR-Agent into our repositories. I will also explain how adjusting the prompts allows PR-Agent to review non-code documents, such as tech blogs. I hope this information is helpful. What is PR-Agent? PR-Agent is an open source software (OSS) developed by Codium AI, designed to streamline the software development process and improve code quality through automation. Its main goal is to automate the initial review of Pull Requests (PR) and reduce the amount of time developers spend on code reviews. This automation also provides quick feedback, which can accelerate the development process. Another feature that stands out from other tools is the wide range of language models available. PR-Agent has multiple functions (commands), and developers can select which functions to apply to each PR. The main functions are as follows: Review: Evaluates the quality of the code and identifies issues Describe: Summarizes the changes made in the Pull Request and automatically generates an overview Improve: Suggests improvements for the added or modified code in the Pull Requests Ask: Allows developers to interact with the AI in a comment format on the Pull Requests, addressing questions or concerns about the PR. For more details, please refer to the official documentation . Why we integrated PR-Agent The DBRE team had been working on a Proof of Concept (PoC) for a schema review system that utilizes AI. During the process, we evaluated various tools that offer review functionalities based on the following criteria: Input criteria: Ability to review database schemas based on the KIC’s Database Schema Design Guidelines Ability to customize inputs to the LMM to enhance response accuracy (e.g., integrating chains or custom functions) Output Criteria: To output review results to GitHub, we evaluated whether the following conditions could be met based on the outputs from the LLM: Ability to trigger reviews via PRs Ability to comment on PRs Ability to use AI-generated outputs to comment on the code (schema information) in PRs Ability to suggest corrections at the code level Despite our thorough investigation, we couldn’t find a tool that fully met our input requirements. However, during our evaluation, we decided to experiment with one of the AI review tools used internally in DBRE team, leading to the adoption of PR-Agent. The main reasons for choosing PR-Agent among the tools we surveyed, are as follows: Open source software (OSS) Possible to implement it while keeping costs down Supports various language models It supports a variety of language models, and you can select the appropriate language model to suit your needs. Ease of implementation and customization PR-Agent was relatively easy to implement and offered flexible settings and customization options, allowing us to optimize it for our specific requirements and workflows. For this project, we used Amazon Bedrock. The reasons for using it are as follows: Since KTC mainly uses AWS, we decided to try Bedrock first because it allows for quick and seamless integration. Compared to OpenAI's GPT-4, using Claude3 Sonnet through Bedrock reduced costs to about one-tenth. For these reasons, we integrated PR-Agent into the DBRE team's repository. Customizations implemented during PR-Agent integration Primarily, we followed the steps outlined in the official documentation for the integration. In this article, we’ll detail the specific customizations we made. Using Amazon Bedrock Claude3 We utilized the Amazon Bedrock Claude3-sonnet language model. Although the official documentation recommends using access key authentication, we opted for ARN-based authentication to comply with our internal security policies. - name: Input AWS Credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_ROLE_ARN_PR_REVIEW }} aws-region: ${{ secrets.AWS_REGION_PR_REVIEW }} Manage prompts in GitHub Wiki Since the DBRE team runs multiple repositories, it was necessary to centralize prompts references. After integrating PR-Agent, we also wanted team members to easily edit and fine-tune prompts. That’s when we considered using GitHub Wiki. GitHub Wiki tracks changes and makes it easy for anyone to edit. So we thought that by using it, team members would be able to easily change the prompt. In PR-Agent, you can set extra instructions for each function such as describe through the extra_instructions field in GitHub Actions. ( Official documentation ) #Here are excerpts from the configuration.toml [pr_reviewer] # /review # extra_instructions = "" # Add extra instructions here [pr_description] # /describe # extra_instructions = "" [pr_code_suggestions] # /improve # extra_instructions = "" Therefore, we customized the setup to dynamically add extra instructions (prompts) listed in the GitHub Wiki through variables in the GitHub Actions where PR-Agent is configured. Here are the configuration steps: First, generate a token using any GitHub account and clone the Wiki repository using GitHub Actions. - name: Checkout the Wiki repository uses: actions/checkout@v4 with: ref: main # Specify any branch (GitHub defaults is master) repository: {repo}/{path}.wiki path: wiki token: ${{ secrets.GITHUB_TOKEN_Foobar }} Next, set the information from the Wiki as environment variables. Read the contents of the file and set the prompts as environment variables. - name: Set up Wiki Info id: wiki_info run: | set_env_var_from_file() { local var_name=$1 local file_path=$2 local prompt=$(cat "$file_path") echo "${var_name}<<EOF" >> $GITHUB_ENV echo "prompt" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV } set_env_var_from_file "REVIEW_PROMPT" "./wiki/pr-agent-review-prompt.md" set_env_var_from_file "DESCRIBE_PROMPT" "./wiki/pr-agent-describe-prompt.md" set_env_var_from_file "IMPROVE_PROMPT" "./wiki/pr-agent-improve-prompt.md" Finally, configure the action steps for the PR-Agent. Read the content of each prompt from the environment variables. - name: PR Agent action step id: Pragent uses: Codium-ai/pr-agent@main env: # model settings CONFIG.MODEL: bedrock/anthropic.claude-3-sonnet-20240229-v1:0 CONFIG.MODEL_TURBO: bedrock/anthropic.claude-3-sonnet-20240229-v1:0 CONFIG.FALLBACK_MODEL: bedrock/anthropic.claude-v2:1 LITELLM.DROP_PARAMS: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AWS.BEDROCK_REGION: us-west-2 # PR_AGENT settings (/review) PR_REVIEWER.extra_instructions: | ${{env.REVIEW_PROMPT}} # PR_DESCRIPTION settings (/describe) PR_DESCRIPTION.extra_instructions: | ${{env.DESCRIBE_PROMPT}} # PR_CODE_SUGGESTIONS settings (/improve) PR_CODE_SUGGESTIONS.extra_instructions: | ${{env.IMPROVE_PROMPT}} By following the steps outlined above, you can pass the prompts listed on the Wiki to PR-Agent and execute them. What we did to expand review targets to include tech blogs Our company’s tech blogs are managed in a Git repository, which led to the idea of using PR-Agent to review blog articles like code. Typically, PR-Agent is a tool specialized for code reviews. The Describe and Review functions worked somewhat when we tested it on blog articles. Still, the Improve function only returned "No code suggestions found for PR," even after adjusting the prompts (extra_instructions).(This behavior likely occurred because PR-Agent is designed primarily for code review.) To address this, we tested whether customizing the System prompt for the Improve function would enable it to review blog articles. After customization, we received responses from the AI, so we also decided to proceed with customizing the system prompts. System prompt refers to a prompt that is passed separately from the user prompt when invoking LLM. It also includes specific instructions on the items to be output and the format. The extra_instructions that I explained earlier are part of the system prompt, and it appears that if the user provides additional instructions in PR-Agent, those instructions are incorporated into the system prompt. # Here are the excerpts from the system prompt for Improve [pr_code_suggestions_prompt] system="""You are PR-Reviewer, a language model that specializes in suggesting ways to improve for a Pull Request (PR) code. Your task is to provide meaningful and actionable code suggestions, to improve the new code presented in a PR diff. omission {%- if extra_instructions %} Extra instructions from the user, that should be taken into account with high priority: ====== {{ extra_instructions }} # Add the content specified in the extra_instructions. ====== {%- endif %} omission PR-Agent allows you to edit system prompts from GitHub Actions, just like extra_instructions. By customizing the existing system prompts, we expanded the review capabilities to include not only code but also text. Below are some examples of our customizations: First, we modified the instructions specific to the code so they could be used to review tech blogs. System prompt before customization You are PR-Reviewer, a language model that specializes in suggesting ways to improve for a Pull Request (PR) code. Your task is to provide meaningful and actionable code suggestions, to improve the new code presented in a PR diff. # Japanese translation # あなたは PR-Reviewer で、Pull Request (PR) のコヌドを改善する方法を提案するこずに特化した蚀語モデルです。 # あなたのタスクは、PR diffで提瀺された新しいコヌドを改善するために、有意矩で実行可胜なコヌド提案を提䟛するこずです。 System prompt after customization You are a reviewer for an IT company's tech blog. Your role is to review the contents of .md files in terms of the following. Please review each item listed as a checkpoint and identify any issues. # Japanese translation # あなたはIT䌁業の技術ブログのレビュアヌです。 # あなたの圹割は、.mdファむルの内容を以䞋の芳点からレビュヌするこずです。 # チェックポむントずしお瀺されおいる各項目を確認し、問題があれば指摘しおください。 Next, we will modify the section with specific instructions so that you can review the tech blog. Changing the instructions regarding the output would affect the program, so we have customized it so that tech blogs can be reviewed by simply replacing code review instructions with text. System prompt before customization Specific instructions for generating code suggestions: - Provide up to {{ num_code_suggestions }} code suggestions. The suggestions should be diverse and insightful. - The suggestions should focus on ways to improve the new code in the PR, meaning focusing on lines from '__new hunk__' sections, starting with '+'. Use the '__old hunk__' sections to understand the context of the code changes. - Prioritize suggestions that address possible issues, major problems, and bugs in the PR code. - Don't suggest to add docstring, type hints, or comments, or to remove unused imports. - Suggestions should not repeat code already present in the '__new hunk__' sections. - Provide the exact line numbers range (inclusive) for each suggestion. Use the line numbers from the '__new hunk__' sections. - When quoting variables or names from the code, use backticks (`) instead of single quote ('). - Take into account that you are reviewing a PR code diff, and that the entire codebase is not available for you as context. Hence, avoid suggestions that might conflict with unseen parts of the codebase. System prompt after customization Specific instructions for generating text suggestions: - Provide up to {{ num_code_suggestions }} text suggestions. The suggestions should be diverse and insightful. - The suggestions should focus on ways to improve the new text in the PR, meaning focusing on lines from '__new hunk__' sections, starting with '+'. Use the '__old hunk__' sections to understand the context of the code changes. - Prioritize suggestions that address possible issues, major problems, and bugs in the PR text. - Don't suggest to add docstring, type hints, or comments, or to remove unused imports. - Suggestions should not repeat text already present in the '__new hunk__' sections. - Provide the exact line numbers range (inclusive) for each suggestion. Use the line numbers from the '__new hunk__' sections. - When quoting variables or names from the text, use backticks (`) instead of single quote ('). After that, add a new Wiki for system prompts, following the steps in "Managing prompts in a Wiki" explained earlier. - name: Set up Wiki Info id: wiki_info run: | set_env_var_from_file() { local var_name=$1 local file_path=$2 local prompt=$(cat "$file_path") echo "${var_name}<<EOF" >> $GITHUB_ENV echo "prompt" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV } set_env_var_from_file "REVIEW_PROMPT" "./wiki/pr-agent-review-prompt.md" set_env_var_from_file "DESCRIBE_PROMPT" "./wiki/pr-agent-describe-prompt.md" set_env_var_from_file "IMPROVE_PROMPT" "./wiki/pr-agent-improve-prompt.md" + set_env_var_from_file "IMPROVE_SYSTEM_PROMPT" "./wiki/pr-agent-improve-system-prompt.md" - name: PR Agent action step omission + PR_CODE_SUGGESTIONS_PROMPT.system: | + ${{env.IMPROVE_SYSTEM_PROMPT}} By following the steps outlined above, we customized PR-Agent’s Improve function, which typically specializes in code review, to support the review of blog articles. However, it’s important to note that the responses may not always be 100% as expected, even after modifying the system prompt. This is also true when using the Improve function for program code. Results of installing PR-Agent Implementing PR-Agent has brought the following benefits: Improved review accuracy It highlights issues we often overlook, improving the accuracy of our code reviews. It allows for the review of past closed PRs, providing opportunities to reflect on older code. Reviewing past PRs helps us continually enhance the quality and integrity of our codebase. Reduced burden of creating pull requests (PRs) The pull request summary feature makes creating pull requests easier. Reviewers can quickly see the summary, improving review efficiency and shortening merge times. Improved engineering skills Keeping up with rapid technological advances while managing daily duties can be challenging. The AI’s suggestions have been very effective in learning best practices. Tech Blog Reviews Implementing PR-Agent to our tech blog has reduced the burden of reviews. Although it's not perfect, it checks your articles for spelling mistakes, grammar issues, and consistency of content and logic, helping us find errors that are easy to overlook. Below is an example of a review of an actual tech blog ( Event Report DBRE Summit 2023 ). ![pr_agent_describe.png](/assets/blog/authors/mhoshino/pr_agent_describe_blog.png =800x) Summary of thePull Request (PR) for the tech blog by PR-Agent (Describe) ![pr_agent_describe.png](/assets/blog/authors/mhoshino/pr_agent_review_blog_01.png =800x) ![pr_agent_describe.png](/assets/blog/authors/mhoshino/pr_agent_review_blog_02.png =800x) Review of the Pull Request (PR) for the tech blog by PR-Agent (Review) ![pr_agent_describe.png](/assets/blog/authors/mhoshino/pr_agent_improve_blog.png =800x) Proposed changes to the tech blog by PR-Agent (Improve) It is also important to note that a human being must make the final decision for the following reasons: The PR-Agent’s review results for the exact same Pull Requests (PR) can vary each time, and the accuracy of the responses can be inconsistent. PR-Agent reviews may generate irrelevant or completely off-target feedback Conclusion In this article, we introduced how the implementation and customization of PR-Agent have improved work efficiency. While complete review automation is not yet possible, through configuration and customization, PR-Agent plays a supportive role in enhancing the productivity of our development teams. We aim to continue using PR-Agent to improve efficiency and productivity further.
Introduction Hello! I'm Hasegawa , an Android engineer at KINTO Technologies! I usually work on developing an app called my route . Please check out the other articles written by members of my route's Android Team! Potential Bug Triggers in Android Development Due to Regional Preferences SwiftUI in Compose Multiplatform of KMP In this article, I will introduce how to get OG information in Kotlin (Android) and how to deal with character codes in the process. To be explained in this article What is OGP? How to get OGP in Kotlin The reason why text in the information obtained by OGP is corrupted How to deal with corrupted text What is OGP? OGP stands for "Open Graph Protocol" and is an HTML element that correctly shows the title and image of a web page when sharing it with other services. Web pages configured with OGP have meta tags that represent this information. The following is a meta tag that excerpts part of it. Services that want to get OG information can read information from these meta tags. <meta property="og:title" content="page title" /> <meta property="og:description" content="page description" /> <meta property="og:image" content=" thumbnail image URL" /> How to get OGP in Kotlin This time, I will use OkHttp for communication and Jsoup for HTTP parsing. First, use OkHttp to access the web page of the URL where you want to get OG information. I will omit error handling since it varies depending on the requirements. val client = OkHttpClient.Builder().build() val request = Request.Builder().apply { url("URL for wanted OG information") }.build() client.newCall(request).enqueue( object : okhttp3.Callback { override fun onFailure(call: okhttp3.Call, e: java.io.IOException) {} override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) { parseOgTag(response.body) } }, ) Then parse the contents using Jsoup. private fun parseOgTag(body: ResponseBody?): Map<String, String> { val html = body?.string() ?: "" val doc = Jsoup.parse(html) val ogTags = mutableMapOf<String, String>() val metaTags = doc.select("meta[property^=og:]") for (tag in metaTags) { val property = tag.attr("property") val content = tag.attr("content") val matchResult = Regex("og:(.*)").find(property) val ogType = matchResult?.groupValues?.getOrNull(1) if (ogType != null && !content.isNullOrBlank()) { ogTags[ogType] = content } } return ogTags } Now ogTags has the necessary OG information. The reason why text in the information obtained by OGP is corrupted I think that I can get the OG information of most web pages correctly so far. However, for some web pages, corrupted text may occur. Here, I will explain the cause. This time, I called string() as shown below. val html = response.body?.string() ?: "" This function selects the character code in the following order of precedence: BOM (Byte Order Mark) information Response header charset UTF-8 unless specified in 1 and 2 More information can be found in the OkHttp repository comments . In other words, what if there is no BOM information, no response header charset, and a web page encoded in a non-UTF-8 format such as Shift_JIS? ... Text corruption occurs. Because it decodes with the default UTF-8. So what do we do? In the next section, I will explain how to respond. How to deal with corrupted text I found the cause of the corrupted text in the previous section. In fact, the character code may be specified in the HTML in the web page as follows. If there is no BOM information and the response header charset is not specified, this information could be used. <meta charset="UTF-8"> <!-- HTML5 --> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <!-- before HTML5 --> However, there is a contradiction that HTML must be parsed according to the character code in order to read the specified meta tag. Or so you might think. For example, UTF-8 and Shift_JIS are compatible in the range of ASCII characters, so it is not a problem to decode with UTF-8 once. (This method may parse twice. If you check the byte array of the meta tag beforehand, you may be able to determine the character code before parsing, but this time I focused on the code comprehensibility.) So, you can write code like the following. /** * Get the Jsoup Document from the response body * If the response body charset is not UTF-8, parse the charset again */ private fun getDocument(body: ResponseBody?): Document { val byte = body?.Bytes() ?: byteArrayOf() // If charset is specified in ResponseHeader, it is decoded with that charset val headerCharset = body?.contentType()?.charset() val html = String(byte, headerCharset ?: Charsets.UTF_8) val doc = Jsoup.parse(html) // If headerCharset is specified, the charset should parse correctly // return as is. If (headerCharset ! = null) { return doc } // Get the charset from the meta tag in the HTML. // If this charset is not present, the character code is unknown and the UTF-8 parsed doc is returned. val charsetName = extractCharsetFromMetaTag(html) ?: return doc val metaCharset = try { Charset.forName(charsetName) } catch (e: IllegalCharsetNameException) { Timer.w(e) return doc } // If the charset specified in the meta tag and UTF-8 are different, parse again with the charset specified in the meta tag // Parsing is a relatively heavy process, so don't double it. return if (metaCharset != Charsets.UTF_8) { Jsoup.parse(String(byte, metaCharset)) } else { doc } } /** * Get the charset string from the HTML meta tag * * Less than HTTP5 -> meta[http-equiv=content-type] * HTTP5 or higher -> meta [charset] * * @return charset character string ex) "UTF-8", "shift_JIS" * Null if @return charset is not found */ private fun extractCharsetFromMetaTag(html: String): String? { val doc = Jsoup.parse(html) val metaTags = doc.select("meta[http-equiv=content-type], meta [charset]") for (metaTag in metaTags) { if (metaTag.hasAttr("charset")) { return metaTag.attr("charset") } val content = metaTag.attr("content") if (content.contains("charset=")) { return content.substingAfter("charset=").split(";")[0].trim() } } return null } Then, let's change the function that creates the Jsoup Document as follows using the process that we just created. - val html = body?.String() ?: "" - val doc = Jsoup.parse(html) + val doc = getDocument(body) Conclusion Thank you for reading this far. Most web pages use UTF-8 character code, and even if you use a different character code, most of the time the charset is specified in the BOM or response header. Therefore, I do not think that this kind of problem will occur very often. However, if you find such a site, it may be difficult to understand the cause and how to fix it. I hope this article will help you.
Hello. My name is Zume, and I am the group manager of the Quality Assurance (QA) Group at KINTO Technologies. Although I have a long and extensive history in QA, I haven’t been particularly focused on sharing my experience or knowledge until now. However, I thought it would be a good idea to take some time to gather my thoughts, but before I knew it, 2022 came to an end with the ringing of the bells on New Year's Eve. It's tough to find time for myself when I’m usually busy with work. This has always been my excuse for not making time for personal projects. If I keep saying "I'll do it next month" a few more times, I'll soon find myself welcoming a new year. About test management This time, I would like to introduce the benefits of the test management tools used by my group and the journey we took to implement them. To all the QA engineers reading this article, how are you managing your test cases? Some of you may already be using some kind of paid test management tool. Generally, Excel or Spreadsheets tend to be used for managing test cases and test executions. However, when using Excel or Spreadsheets for test management, we encountered several challenges: Challenges in the test process - Issues - ⇒ Concerns (potential issues) Test case structuring often becomes personalized by the test designers, and case classifications and formats vary. ⇒When the designer changes, the handover process becomes complicated ⇒Due to the lack of standardized format, it takes time to understand cases when the project changes. To review the cases, you need to open and check the contents of files each time. ⇒It is difficult to share documents and know-how within the team. Stakeholders (other than QA) have a hard time getting an overview of the test content and results. ⇒The QA side needs to prepare reports for stakeholders. For regression testing, a new file needs to be created for each test cycle. ⇒It becomes difficult to track which cases were reused. It is difficult to follow the change history or update history of test cases. ⇒Maintenance, including case updates, takes a lot of time (plus Excel is not suitable for simultaneous online editing by multiple users) Since the test execution results are entered manually, the exact execution time is unknown. ⇒It is challenging to pinpoint the exact time when defects occur Test cases and bug reports are not linked ⇒It becomes difficult to compile statistics such as the defect rate for each function (manual compilation is possible but very tedious). And so on. To address these challenges, we considered implementing tools that support a series of test activities such as test requirements management, test case creation, test execution, and test reporting. In fact, we never considered using Excel or Spreadsheets from the beginning. This is because we knew from our experience that once Excel-based operations become ingrained, it takes a lot of time to shift away from them. Evaluation of tools to be implemented Initially, the tools we considered were: TestLink : An open source web-based test management tool. Free of charge. TestRail : A web-based test management tool. Paid. Zephyr for JIRA : A JIRA plugin. Paid. (Renamed to Zephyr Squad in 2021[^1]) [^1]: Zephyr for Jira is now Zephyr Squad , SmartBear Software., 2021 One of the reasons we considered TestLink was my experience with it at my previous workplace. Another advantage is that it can be tested right away by installing Docker even in a local environment. In fact, I once used a Mac for both testing and running TestLink. However, I joined KINTO Technologies in March 2020 (when it was still KINTO Co., Ltd.), and the project for which we planned to introduce the tool was scheduled to be released two months later, in May. To make things more challenging, the first state of emergency due to the spread of the new COVID-19 was declared in April during this period. In such a nerve-wracking situation, which tool did we choose as the most appropriate option? It was Zephyr for JIRA . The biggest advantage was that it could be implemented quickly as an add-on for JIRA, which was already being used within the company. Additionally, considering the unexpected shift to remote work during the COVID-19 pandemic, it was convenient since it could be accessed from outside the company. Although it was a paid tool, we decided to start using it with the idea that if we could get through the May release, we would reassess its continued use. Looking back at my notes from that time: Since it's a JIRA plugin, I thought I could change the language settings, but it seems only parts of it support Japanese. Zephyr's reports are based on scenarios, and there is no reporting function for individual test steps. etc. [^2] [^2]: ※It seems that requests for step-by-step reports have been made by users as early as 2013, according to the Atlassian community. However, in the comment , TestFLO was recommended as an alternative solution. These notes reflect our trial and error process. It brings back all the memories. Although it was easy to implement, it is still essential for users to be familiar with the system and possess the necessary skills. In that sense, I am still grateful to the team members who flexibly navigated that chaotic period with me. Using Zephyr It's been almost three years(!)Even though it’s an old story, here are my impressions of using Zephyr for JIRA. As it is a JIRA plugin, test cases can be created in the same way as normal issues by selecting the desired issue type. Case items include steps, expected values, results, status, comments, and file attachments, making it convenient to leave screen captures as evidence for each step. On the other hand, it took quite a long time to load the plugin itself. The problem was that it took a few seconds each time we changed screens. A similar question for help was posted on the Atlassian community, so it may be a Zephyr-specific issue . And now to TestLink Now, let's talk about test management after we somehow managed to meet the release schedule and handed off the project in May 2020. We reconsidered the cost aspect as well. Assuming the tool is linked to JIRA and the number of users is around 10 to 20 people, the prices as of 2020 were as follows: Zephyr for JIRA: 11-100 Users ¥510/user/month ⇒ ¥10,200/month for 20 users TestRail: 1-20 Users $32/user/month ⇒ $640 (approx. ¥83,200)/month for 20 users The prices as of 2023 are as follows: Zephyr Squad: 11-100 Users ¥570/user/month ⇒ ¥11,400/month for 20 users TestRail: 1-20 Users $37/user/month ⇒ $740 (approx. ¥96,200)/month for 20 users The fee structure has changed slightly since then, and the prices have gone up a bit. *All prices are calculated at 130 yen to the dollar At first glance, Zephyr seems like a good deal, but since it is a plugin for JIRA, you will actually need to have the same number of licenses as you do for JIRA. In that regard, since not everyone in the Development Division will use it and only QA members will, we want to avoid increasing costs as the organization expands. Still, TestRail is quite expensive. Considering the cost, there is no better option than the free TestLink. Although the UI of TestLink is not the best (it's open source so I won't complain), as a test management tool, it can at least resolve the issues mentioned above as follows. Testing process challenges and their solutions Challenges in the test process When the tool is implemented Concerns when using the tool 1. Test case structuring often becomes personalized by the test designers, and case classifications and formats vary. By describing test suites, test cases, test steps, etc. in a certain format with appropriate detail, a certain degree of granularity is achieved. Easy handover and case deciphering! 2. To review the cases, you need to open and check the contents of files each time. High visibility of implementation items and easy tracing to test requirements make it easy to understand coverage Documents can be easily shared within and outside the team! 3. It is difficult for stakeholders to get an overview of the test contents and results. With real-time tracking of test progress and results viewable in reports, there’s no need for QA to create reports! 4. For regression testing, a new file needs to be created for each test cycle. It can be used on a test suite basis It's easy to identify reusable components! 5. It is difficult to record the change history and update history of test cases. In addition to adding and modifying test cases, the history can be recorded. Case maintenance is easier! 6. Since the test execution results are entered manually, the exact execution time is unknown. Bug reports, execution times, and execution record are accurately logged. You can narrow down the implementation time period! 7. Test cases and bug reports are not linked Easier tracking of requirements/releases, such as test progress rate and defect occurrence rate It's easy to compile data such as the defect occurrence rate for each function! So, we decided to introduce TestLink from June 2020 onwards. Well, I'm sure my teammates will get annoyed if I say it's easy, but the truth is that while the tool isn’t omnipotent, it's a lot easier than using data files like Excel. Postscript Even though it's free, there are still infrastructure costs to run it. We are using an AWS instance for TestLink, which costs several tens of thousands of yen per year. It has been almost three years since we started using it, and so far we have been able to operate it without any major issues. In this article, I explained how we implemented TestLink as a test management tool in the QA group. In future posts, I hope to discuss how TestLink is used in actual projects, its integration with JIRA, and more.
Introduction I am Kanaya, a member of the KINTO FACTORY project, a service that allows you to renovate and upgrade your car. In this article, I will introduce our efforts to improve Deploy Traceability to Multiple Environments Utilizing GitHub and JIRA. Last time, I also wrote an article related to Remote Mob Programming in the Payments Team. Background and Challenges I joined the KINTO FACTORY project from the latter half of the development process. I was assigned as the frontend team leader for the e-commerce site project, and during my time in charge, I noticed the following issues: GitHub Issues, JIRA, and Excel are used for task management, making progress difficult to manage Difficult to track which tasks are deployed in which environment Troublesome to generate release notes when deploying to a test environment ![Excel WBS and Gantt chart example](/assets/blog/authors/kanaya/traceability_excel_gantt.png =480x) Excel WBS and Gantt chart example First, managing progress was difficult. At the time I joined the project, there were three types of task management tools: GitHub Issues, JIRA, and Excel WBS and Gantt charts, all of which were in use. This lack of centralized control of necessary information made it difficult to manage schedules and tasks. Second, it was difficult to track which tasks are deployed in which environment. During development, there were two target environments for deployment (a development environment and a test environment), making it challenging to know which environment the task under development had already been deployed to. Lastly, Troublesome to generate release notes when deploying to a test environment. Since the test environment was used for testing not only by us engineers, but also by the QA team responsible for quality assurance, we needed to communicate when and which content was deployed to it. We used to create release notes as a communication method, but writing them each time took about 5 minutes and was quite stressful. Our goal was to improve deployment traceability to address these issues. At least issue 2 and 3 (environment-specific deployment management issues, release note generation issues) are expected to be resolved. In addition, we aim to resolve issue 1 (difficulty in managing progress) by changing the way of work, as described later. Policy to Enhance Deployment Traceability First of all, traceability is described in DevOps technology: Version Control | DevOps Capabilities as follows. Among these, it is required that differences between multiple environments are either avoided or quickly identified once they occur. Note that version control of all dependencies can be managed in package.json, package-lock.json of npm for the frontend, so I'll skip that here. No matter which environment is chosen, it is essential to quickly and accurately determine the versions of all dependencies used to create the environment. Additionally, the two versions of the environment should be compared to understand the changes between them. As a policy to improve traceability to manage which tasks are deployed to which environments, we did the following: Manage all tasks and deployments with JIRA Rely on automatic generation of release notes Manage all tasks and deployments with JIRA JIRA has a feature to view development information for an issue . Since we know the status of code, reviews, builds, and deployments, we decided to consolidate all development information into JIRA. To integrate JIRA and GitHub, the following steps are required: Set up for JIRA and GitHub integration Include the JIRA ticket number in the branch name to connect the JIRA ticket with the GitHub pull request Set up the environment during deployment with GitHub Actions The second step was the part left to the work of each engineer. In asking each engineer to include the JIRA ticket number, we have decided to eliminate the use of GitHub Issues and Excel, and unify the use of JIRA. By unifying to JIRA, each engineer can manage tasks more easily, and those who manage progress can also use JIRA's roadmaps for centralized management. JIRA roadmap example For the third step, by passing environment parameter to deploy, the deployment status passed to environment will also be linked to JIRA. For reference, here is some of the deployment code by GitHub Actions we are using. In the environment parameter, $${ inputs.env }} is further passed, so that a key for each environment is created. Since $${ inputs.env } contains the environment name of the deployment destination, the deployment destination will be integrated with JIRA. DeployToECS: needs: [createTagName, ecr-image-check] if: ${{ needs.createTagName.outputs.TAG_NAME != '' && needs.ecr-image-check.outputs.output1 != '' }} runs-on: ubuntu-latest environment: ${{ inputs.env }}-factory-frontend steps: - Specific processing As a result, the development status is managed by JIRA roadmaps and tickets, and each ticket can be viewed to manage whether it is under review, merged but not deployed, and to what environment it has been deployed. Status listed on each JIRA ticket Visualizing the deployment status across all tickets, not just each ticket, is also possible. It is useful to see when each ticket was deployed and to which environment. Visualization of deployment status to each environment :::message GitHub also has a project function that can achieve this to some extent, but in light of the roadmap feature and integration with tools used by the QA team , we are unified with JIRA. ::: Rely on automatic generation of release notes For automatic generation of release notes, we decided to use GitHub's automatically generated release notes feature. The automatic generation of release notes is a feature that lists the titles and links of pull requests for the release note portion of GitHub's release feature . It can be better handled by setting a few rules. Here is an introduction. Define the category of release content The pull requests listed in the release notes are not categorized by default, making them difficult to view. Categorizing the pull requests helps keep release notes organized and easy to view. Categories are represented by labels. This time, I wanted to specifically display major changes and bug fixes as categories in the release notes, so I created 'enhancement' and 'bug' labels to represent each. You can also generate a list of pull request titles by category by creating a file .github/release.yml in the target repository and writing the following. changelog: categories: - title: Major Changes labels: - 'enhancement' - title: Bug Fixes labels: - 'bug' - title: Others labels: - '*' An image of the generated release notes is shown below. Pull requests labeled 'enhancement' and 'bug' are now classified as 'Major Changes' and 'Bug Fixes,' respectively All pull requests without 'enhancement' and 'bug' labels are classified as 'others.' Category sorting and title correction at the time of pull request review It is possible to generate release notes and then manually sort them, but once they are generated, it is difficult to remember and sort them. Therefore, at the time of the pull request review, we assign labels that correspond to the categories. We also check the titles to ensure they are appropriate for the content correction. To avoid forgetting to apply labels, others labels are given to refactoring, etc. This ensures that we know the review and category sorting are complete. Results Through the above efforts, we were able to successfully resolve the issues we were facing. In particular, the JIRA roadmaps have been referenced by other teams and are now used throughout the KINTO FACTORY project. Previously, GitHub Issues, JIRA, and Excel were used for task management, making progress difficult to manage. Now, centralized and managed in JIRA tickets and roadmaps. Previously, it was difficult to track which tasks are deployed in which environment. Now, deployment status of each environment is now visible in tickets. Previously, creating release notes when deploying to a test environment was troublesome. Now, work that used to take 2-3 minutes has drastically decreased to 10 seconds. Future Development By deploying to production environment, JIRA can measure two of the DevOps Four Keys in terms of speed. Our team will collaborate to identify the current status and target metrics for deployment frequency and change lead time for continuous improvement. Deployment frequency to production environment Lead time from merge to deploy to production environment The KINTO FACTORY project is looking for team members who will work together to achieve service growth. If you are interested in this article or KINTO FACTORY, check out the job listings below! [KINTO FACTORY Full Stack Engineer] KINTO FACTORY Development Project Team, Tokyo [KINTO FACTORY Backend Engineer] KINTO FACTORY Development Project Team, Tokyo [KINTO FACTORY Frontend Engineer] KINTO FACTORY Development Project Team, Tokyo
Introduction Hello, I am Keyuno and I am part of the KINTO FACTORY front end development team. As part of our KINTO FACTORY service, we are launching a dedicated magazine using Strapi , a headless content management system (CMS). *More details will be shared in an upcoming article, so please stay tuned! :::message What is Strapi? A Headless CMS with high front-end scalability Low implementation costs with default APIs for content retrieval As an open-source software (OSS), APIs can be added and expanded as needed. ::: In this article, I would like to explain how to add custom APIs to Strapi, which we implemented when introducing Strapi. This article covers the following two patterns of custom API implementation. :::message Custom API implementation patterns and use cases Implementing a new custom API We want to retrieve and return entries from multiple collectionType (content definitions) We want it to return the results of business logics that cannot be fully covered by the default API. Overriding the default API We aim to modify entry retrieval by replacing the auto-assigned postId with a custom UID. ::: Optimizing web page management is a constant challenge. I hope this article helps ease the burden for engineers, even if just a bit. Development Environment Details Strapi version : Strapi 4 node version : v20.11.0 Implementing a new custom API This section shows how to implement a new custom API. While this approach offers high flexibility because it can be implemented at the SQL level, overdoing it can make maintenance difficult, so use it wisely. 1. Create a router First, add the routes for the API endpoints you create. Under src/api , there is a directory for each collectionType. In the figure below, the routes directory is under post . Create a file under routes for defining custom-route. *According to the official documentation, there is a command npx strapi generat that prepares the necessary files (though I haven’t used it). In the created file, write the following code: export default { routes: [ { method: "GET", // Refers to the HTTP method. Please modify as needed to suit your purposes. path: "/posts/customapi/:value", // These are the endpoints for the APIs you will implement. handler: "post.customapi", // Specify the controller that this route refers to. } }; method Specify the HTTP method. Please modify as needed to suit the API you are creating. path Specify the endpoint for the custom API you are implementing. The sample endpoint, /:value indicates that the trailing value is received as the value variable. For example, if /posts/customapi/1 and /posts/customapi/2 are called, the value will store 1 and 2 respectively. handler Specify the controller (explained later) that the custom API you are implementing refers to. Specify the name of the function in the controller that you want to reference. 2. Implement the controller Implement the controller referenced by the routes implemented in step 1. Open the post.ts file located in the controllers directory , which is in the same level as the routes directory. In this file, add the handler ( customapi ) specified in the previous routes to the default controller (CoreController) as follows: Before change (initial state) import { factories } from '@strapi/strapi'; export default factories.createCoreController('api::post.post'); After change import { factories } from "@strapi/strapi"; export default factories.createCoreController("api::post.post", ({ strapi }) => ({ async customapi(ctx) { try { await this.validateQuery(ctx); const entity = await strapi.service("api::post.post").customapi(ctx); const sanitizedEntity = await this.sanitizeOutput(entity, ctx); return this.transformResponse(sanitizedEntity); } catch (err) { ctx.body = err; } }, })); What’s changed Added a custom handler customapi() to the default controller Retrieved the result of executing the customapi () service that contains the business logic customapi() , as referenced in line 8. :::message In this section, the business logic is moved to the service layer, but it is also possible to implement the business logic in the controller (choose the layer based on reusability and readability). ::: For details on validateQuery(), sanitizeOutput(), transformResponse() , please refer to Strapi’s official documentation . 3. Implement the service Implement the service referenced by the controller implemented in step 2. Open the post.ts in the services directory , which is at the same level as the controllers directory. Add the method (customapi) specified in the previous controller to the default service (CoreService) as shown below. Before change (initial state) import { factories } from '@strapi/strapi'; export default factories.createCoreService('api::post.post'); After change import { factories } from "@strapi/strapi"; export default factories.createCoreService("api::post.post", ({ strapi }) => ({ async customapi(ctx) { try { const queryParameter: { storeCode: string[]; userName: string } = ctx.query; const { parameterValue } = ctx.params; const sql = "/** Database to use, SQL according to purpose */"; const [allEntries] = await strapi.db.connection.raw(sql); return allEntries; } catch (err) { return err; } }, })); What’s changed Add the custom service customapi() to the default service Line 6: Retrieve the query parameter information Line 7: Obtain endpoint parameter information Line 10: Get the SQL execution results :::message You can use strapi.db.connection.raw(sql) to execute SQL directly , but strapi also provides other ways to obtain data. For other methods of obtaining data, please refer to the Official Documentation . ::: 4. Confirm operation With this, the implementation of the new custom API is complete. Please actually try calling the API and check that it works as expected. Overriding the default API In this section, I will show an example of how to override the default entry detail retrieval API to allow fetching with a custom parameter. [Entry detail retrieval API] [Before override] GET /{collectionType}/:postId(number) [After override] GET /{collectionType}/:contentId(string) 1. Create a router It is basically the same as when implementing a new custom API. Add the following code to the custom.ts under the routes directory: export default { routes: [ { method: "GET", path: "/posts/:contentId", handler: "post.findOne", } }; With this route addition, the endpoint that previously retrieved entry details using /posts/:postId(number) will now retrieve entry details using /posts/:contentId(string) (entry details can no longer be retrieved using /posts/:postId(number) ). 2. Implement the controller The implementation of the controller is basically the same as when implementing a new custom API. Modify the post.ts in the controllers directory, which is at the same level as the routes directory, as follows: Before change (initial state) import { factories } from '@strapi/strapi'; export default factories.createCoreController('api::post.post'); After change import { factories } from "@strapi/strapi"; import getPopulateQueryValue from "../../utils/getPopulateQueryValue"; export default factories.createCoreController("api::post.post", ({ strapi }) => ({ async findOne(ctx) { await this.validateQuery(ctx); const { contentId } = ctx.params; const { populate } = ctx.query; const entity = await strapi.query("api::post.post").findOne({ where: { contentID: contentId }, ...(populate && { populate: getPopulateQueryValue(populate), }), }); const sanitizedEntity = await this.sanitizeOutput(entity, ctx); return this.transformResponse(sanitizedEntity); }, })); What’s changed Added a custom findOne() controller to the default controller In line 12, it extracts records where the contentID column matches contentId . Since .findOne() is used in line 11, the result will be a single object. :::message Lines 13-15 follow the process for applying the populate parameter provided by the default API. If you want to fetch videos or images from mediaLibrary, you must add populate , so please be aware. ::: In this section, the business logic is implemented in the controller rather than the service. 3. Confirm operation With this, the implementation to override the default API is complete. Please actually try calling the API and check that it works as expected. Conclusion This concludes the explanation of implementing custom API in Strapi. I think Strapi is a highly customizable and great tool. Therefore, I hope to continue sharing my knowledge, and I would be happy if you could share your insights as well. We also have other topics, such as: Automatically building applications when publishing Strapi articles. Embedding videos (e.g., mp4) in CKEditor. I will cover these topics in future articles. Thank you for reading.
Overview Hello, we're Mori, Maya S, and Flo from the Operations Enhancement Team at the Global Development Group. The Global Development Group organized an in-house Hackathon-style event called the "KINTO Global Innovation Days" which took place over six days from December 14th to 21st. During the first four days from December 14th to 19th, three seminars were held, followed by two days dedicated to actual development. This was the first time that such an event was held within KINTO Technologies. This article is the first in a series of articles on the event, sharing the journey leading up to it. How it started KINTO Technologies currently consists of about 300 members and has roughly doubled in size in about two years. Among them, the Global Development Group is also currently a large group of 60 members. As an organization, we are subdivided into teams of 5 to 10 members, each performing their tasks but communication across teams has always been a challenge. Even within the Global Development Group, it's common for people to struggle with matching faces to names. In addition, although we had planned and organized internal study sessions to improve communication and skills, they inevitably turned out to be a one-way knowledge sharing. We were looking for an opportunity for engineers to learn through hands-on activities. In July, several of our group members participated in a Hackathon at Toyota Motor North America (TMNA) , which made us think that hosting such an event within our group could address the above issues. So, we decided to start planning and proposing this event at the end of August. Objectives and Timing While hackathon events have a variety of benefits in general, our primary objective this time was to stimulate cross-team communication. We believe that by not leaning too much on the business side, a certain degree of freedom in thinking was gained. We also set a goal of holding the event by the end of 2022 at the latest. The reason was that a major project involving the entire group was set to be completed by November, making it difficult to anticipate tasks beyond the fourth quarter. Research and Content Review Since this was our first time organizing an event, we first researched hackathon cases around the world to consider what an actual event should be like. Maya S was in charge of this research. As various role models were studied, mainly from other companies' tech blogs and hackathon event sites, a pattern began to become apparent. By picking up the elements of the pattern and combining them with aspects that fit our organization and goals, we were able to put together the contents for our Innovation Days. Many examples of findings could be presented, but I will explain three of them below. Finding 1: Benefits As we prepared for the event, we felt the need to communicate the benefits of participating to the participants, stakeholders, and everyone involved. For example, the benefits to the organization include opportunities for gaining ideas for intellectual property, increasing member engagement, and discovering new strengths. As for the benefits to individuals, we emphasized that they can learn in various aspects by coming up with ideas that cannot be tackled in their daily work and by interacting with work processes and members they would not usually encounter. Findings 2: Content ideas Based on the above benefits, the seminars were incorporated as content. We learned that hackathons typically include talks by guest speakers, lectures, and workshops aligned with the event's theme and goals. For Innovation Days, we prepared a workshop on upstream processes which is not usually experienced, a communication workshop, and a workshop on the Toyota Way, given that it was a "Hackathon held by KINTO Technologies." Many people would think of novelty items when it comes to events hosted by IT companies. This time, we distributed stickers, hoodies and clear files to the participants and support members. We also borrowed ideas from various events, like setting up criteria and rules for judging final pitches and deliverables, allocating time for coding, icebreakers, and prizes. Note: After the event name was decided, the UIUX team in the Global Group designed the logo. Thanks to them, we ended up with fantastic novelty items. Appreciate it a lot!!!! Findings 3: Theme setting The last point we want to address is theme setting. Noting that many hackathons have narrowly focused themes and objectives set by organizers, and some even have sponsors for various themes, in our event, the managers decided a "Challenge Theme" and took on the role of "Challenge Owner" to sponsor and explain each theme to the participants. This approach allowed the manager to provide support and encouragement to the participants. Reference: Council Post: Four Tips For Running A Successful Hackathon Urban Mobility Hackathon Find & Organize Hackathons Worldwide - Mobile, Web & IoT Hackathon Guide Theme Review For the content of the themes, four managers (the Group Manager and three Assistant Managers) who will actually evaluate on the day of the event selected four themes. Theme 1-2 Theme 3-4 Encouraging members Since this was the first attempt within the company, it took about three months from the time from the start of planning to recruiting members, through research, content review, and theme selection. At the beginning of November, after finalizing the theme, we held a project briefing for all Global Development Group members, and began recruiting on November 8th. The official event name, "KINTO Global Innovation Days," was decided. There was a proposal to make participation mandatory for all participants, but we chose to respect autonomy and allowed volunteers to opt-in instead. Slack was used for recruiting. 🔻🔻 At the briefing, we received words of encouragement from our managers and told our participants that we had the support from our CEO and CIO. However, recruiting participants was initially challenging, so we focused on highlighting the benefits directly to the team members Flo was responsible for this. We decided to communicate the benefits when talking in person in the office and through DMs. This allows us to ask members who are unable to participate why and make improvements. First, we explained the experience and skills they would gain by participating in the event. We emphasized the opportunities to try programming languages they don't normally use, propose new tools, and suggest improvements that haven't been prioritized. We also appealed to a sense of ownership and investment, as proposals made during the event could be used to improve processes in Global Group (Theme 3), be commercialized as a new service (Theme 1, 2), or be considered for participation in other hackathon events. Among all, our top priority was creating a supportive environment. Although ideas are evaluated and rewarded, the competition is friendly. We also encouraged people who had never participated in such an event, felt they couldn't contribute because they weren't engineers, or thought they'd be of no use to participate because it's an event where they could experience things they normally would not. There are also things that we noticed in conversations. Since the event was held before Christmas, several people were planning to take consecutive holidays or return to their home countries. For this reason, we decided to move the event up a few days. We adjusted the schedule with the instructors of each workshop, and finally set the pre-event for December 14th to 19th, with Innovation Days on December 20th and 21st. This added at least two to three more team members who could participate. As a side note, since there were only three operating members plus one support member, it was convenient for us to have a weekend in the middle of the event. Hosting the event all week long would have been physically demanding. Grouping and Pre-work Thanks to the recruiting efforts, we gathered 30 participants. More than half of the Global Development Group participated, as the group manager, assistant managers, and we operational members were not eligible to participate. Participants came from various teams such as Business Development, PdM (Product Management), UIUX, Frontend, Backend, Testing, and DevOps. We allocated each team leader based on two conditions: 1) involving people who are not usually involved in the work, and 2) ensuring team leaders were separated to maintain a balance of power. We ended up with 5 people in each of the 6 teams. (The members were perfectly divided because we had a total of 30 participants😊) The team members were announced on November 18th, and were then given two weeks to review and submit the following information: Team name Theme of choice Team leader As we are the team that is the most used to interacting cross-functionally in the group, we had concerns about whether the participants would be able to communicate well with each other, or engage actively in the event. However, our worries were unnecessary. As they were participating voluntarily, each team was more proactive than expected, creating their own Slack channels and holding meetings, which gave us hope for future events! 🎉 Review of Preparation Since we started this project with completely no experience, either within the company or from previous jobs, we had to conduct extensive research and seek advice from various people during the preparation. In particular, the approval process took a long time, but involving the CIO and the president was one of our achievements, and a major factor that we believe will lead to future events. In addition, we were able to successfully distribute tasks by combining the strengths of each Operations Enhancement Team member, such as idea generation (including research), planning and reporting, and understanding the situation and inspiring team members, which enabled us to implement the project in a short period of about four months from conception. There were various challenges during the pre-event period and on the day of the event, which will be described in the next article. Conclusion By the way, the planning of KUDOS and this event emerged from our daily conversations within the Operations Enhancement Team. We place a high value on conversations and take pride in our ability to go from casual conversation— like suggesting solutions and sharing experiences —to planning, execution, and results.
Introduction Hello. I am Nakaguchi from KINTO Technologies, Mobile App Development Group. As a team leader of the iOS team, I have previously published articles on team building, which you may find interesting. Please feel free to check them out: Revitalizing Retrospectives Through Professional Facilitators 180-degree feedback: Highly recommended! Recently, I participated in [Probably the world’s fastest event: the "Agile Teams goal-setting Guidebook" ABD Reading Session] My three main objectives for attending this event were as follows: I wanted to experience Active Book Dialogue® (referred to as "ABD" from now on). I was interested in the book featured in the event, "Agile Teams goal-setting Guidebook" . I wanted to meet the author, Ikuo Odanaka. Among these, experiencing ABD for the first time was particularly valuable. I found this reading method incredibly insightful and would like to introduce ABD to more people through this article. Important Notice All individuals and materials mentioned in this article have been approved to be published by the event’s organizers and the respective individuals. About the event This event took place on Wednesday, July 10, 2024, and was held as an "ABD reading session with the author before the publication" of the "Agile Teams goal-setting Guidebook". The event was so popular that the 15 available slots were filled within the same day the registration page was open. I feel incredibly fortunate to have been able to participate. I’m especially grateful to Kin-chan from our Corporate IT Group, who introduced me to this event! About the book I won’t go into too much detail about the book’s content, as I encourage you to read it yourself. However, I’d like to share some insights Ikuo-san introduced during the opening. It seems that goal setting isn’t particularly favored in today’s society. However, if everyone sincerely engages with their goals and strives to achieve them, the world will become a better place. Therefore, creating good goals is extremely important. That said, while setting goals is crucial, finding ways to achieve them is even more important. This book dedicates roughly the first 20% to the process of goal setting, with the remainder focused on how to achieve those goals, incorporating elements of Agile methodology. Although the book doesn’t cover performance evaluations, which are often discussed alongside goal settings, it does include columns written by eight contributors. These columns nicely complement the content, so I highly recommend reading them! Ikuo-san's opening scene About Ikuo-san Although I have never met Ikuo-san before, I was familiar with him through the following LT sessions and articles: ”Keeper of the seven keys four keys and three more ” ”10 reasons Why it’s easy to work with an engineering manager like this!” ”To fulfill the pride of being a "manager." “5 essential books that supported the Ideal EM, Ikuo Odanaka” I found his insights on development productivity, engineering management, and his approach to reading, to be incredibly valuable. I’ve always wanted to meet him and have a conversation. Unfortunately, although I manage to exchange a brief greeting with him during the event, I didn’t have the chance to have a proper conversation. While this was disappointing, I hope there will be another opportunity in the future. About ABD The following is a quote from the official ABD website . What is ABD? Explanation by the developer, Sotaro Takenouchi: ABD is an entirely new reading method that allows both people who are not fond of reading and those who love books to read the books they want in a short period of time. Through the process of dividing the book, summarizing it, presenting and sharing the summaries, and engaging in discussions, participants can deeply understand what the author is trying to convey, leading to active insights and learning. Additionally, by combining the active reading experience of each participants through group reading and discussion, the learning deepens further, and there is potential for new relationships to be fostered. I sincerely hope that through ABD, everyone can take better steps in their reading, driven by their intrinsic motivation. The process Co-summarize Participants bring their own books or divide one book into sections. Each person reads their assigned section and creates a summary. Relay presentation Each participants presents their summary in a relay format. Dialogue Participants pose questions, discuss their impressions and thoughts, deepening their understanding. The appeal of ABD Short reading time ABD allows you to read a book in a short amount of time while gaining a deep understanding of the author's intensions and content. It’s perfect for those who tend to accumulate unread books. Summaries remain After an Active Book Dialogue® session, the summaries remain, making it easy to review and share the key points with others who haven’t read the book. High retention rate Since participants are mindful of presenting when they input and summarize information, followed by immediate output and discussion, the content sticks in memory more effectively. Deep insights and emergence Engaging in dialogue with diverse people, each bringing their own questions and impressions, leads to profound learning and the emergence of new ideas. Multifaceted personal growth ABD helps participants develop focus, summarization, presentation, communication, and dialogue skills, which are all crucial for leadership in today’s world. Creation of a common language When the same team members participate, they share the same level of knowledge, creating a common language. Community building With just one book, you can create a space for dialogue and connect with others, making it ideal for casual community building. Most importantly, it’s fun! The immediate sharing of the excitement and learning gained from reading enriches the experience and, most importantly, makes it enjoyable. Personally, I find the value in 1. Short reading time, 6. Creation of a common language, 7. Community building, and 8. Most importantly, it’s fun! to be exceptionally high. On the day The book was divided into 15 sections. This was the first time I had seen such a sight! lol The book was divided into sections Co-summarize (20 minutes) Each participants read their part and create a summary. We were given 20 minutes to read and summarize the book onto three A4 sheets, which was quite challenging. I was so pressed for time that I forgot to take any pictures. Relay Presentation (1 minute 30 seconds per person x 15 people) Each participant posted their summaries on the wall. The Summaries everyone prepared Then, each person presented their summary in 1 minute and 30 seconds. Everyone’s summaries and presentations were outstanding. This is the photo of me presenting. I was so nervous, and the time was so short that I can’t remember what I said at all! My presentation Dialogue (25 minutes) In this part, we picked three sections from the presentations, and divided into groups to discuss them further. I joined the group focused on "Becoming a team that can help each other." Group discussion Within the group were Scrum Masters and Engineering Managers, and we exchanged various opinions. One particularly memorable discussion was about how we should build teams where people can challenge themselves with what they love, whether it’s their forte (specialty) or something they struggle with (growth opportunity). What I learned from the book through ABD Up until now, I had never used "OKR" (Objectives and Key Results) as a method for goal management, but my understanding of OKR has deepened through this experience. I also learned how crucial it is for a team to set goals driven by intrinsic motivation when creating goals. What stood out to me was the importance of setting goals through discussions within the team, rather than using a top-down approach. Additionally, I was struck by the idea that what truly matters is the “achievement of goals,” not just the “completion of tasks.” The notion that “sometimes, you need the courage to abandon lower priority tasks” was a new perspective for me. Moreover, the breakdown of reasons why we might feel like we don’t have enough time to achieve our goals, such as genuinely not having enough time, being unsure if the time investment is worthwhile, or lacking the motivation, was something I had never considered before. While the idea of “genuinely not having enough time” is easy to grasp, the concepts of “not being sure if it’s worth the time" and "lacking motivation" were new to me, though they resonated with my own experience. The book also offered solutions to these challenges, so I would like to read the book and review it. Thoughts It was my first time experiencing ABD, and I found it both stimulating and very enjoyable. Since all the participants on the day were genuinely interested in book we discussed, the presentations and dialogues were highly constructive, and I learned a lot. I’m considering trying ABD at our company as well, by gathering team members who are interested. However, I also felt that the operational difficulty could be quite high for the following reasons: Facilitators need strong skills because the session must proceed within a limited time. Co-summarizing is challenging, which might lead to differences in the quality of summaries and presentations depending on the participants. Selecting the right book and gathering team members could be difficult. I’ve participated in book study groups several times before, but I found that they often pose challenges like the burden of continuity over a long period and the individual workload (depending on the format of the book study group). In contrast, ABD offers a great alternative by wrapping up the session in a short time, which helps to overcome those drawbacks. However, the trade-off might be a lower understanding of the book due to the shorter session time. I think it’s important to carefully select the book and have prior discussions with participants to determine the most suitable reading method.
はじめに こんにちは、6月入瀟のahomuでございたす。 本蚘事では2024幎6月ず7月入瀟に入瀟された皆さたに入瀟埌の感想などをテキストで回答いただきたした。 KINTOテクノロゞヌズに興味をもっおくださった皆さた、そしお、今回参加くださった各䜍がい぀か芋返したずき有益なコンテンツになればず存じたす hosoya ![芳葉怍物の写真](/assets/blog/authors/ahomu/20241007/hosoya.jpg =300x) 自己玹介 hosoyaです。所属はIT/IS郚です。瀟内情シスのヘルプデスク窓口察応をしおいたす。 所属チヌムの䜓制は チヌムは私も含めお5人です。私の所属チヌムの他に圹割別に耇数のチヌムがあり、問い合わせ内容によっお他チヌムず連携を取っお業務を行っおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 情シス内で圹割毎にチヌムが別れ、しっかり連携が取れおいるずころが印象的でした。1人か2人だけの情シスばかりにいたので、すごくしっかりしおいるなず感じたした。 珟堎の雰囲気はどんな感じ 静かで自分の業務に集䞭できる環境です。しかし呚りに話しかけづらいずいう事はなく、業務の事でも雑談でも話しかけるずすぐに盛り䞊がるので、明るい雰囲気です。 ブログを曞くこずになっおどう思った 業務で関わりがないずなかなか他の方が普段どのような事をされおいるのか知る機䌚がないかず思いたすので、このブログがそういった機䌚になればず思いたす。 他の方からの質問1日の業務スケゞュヌルを教えおください 回答朝9:00に出瀟しお倕方18:00の退瀟たでヘルプデスクの問合せ察応をしおいる感じです。朝ず倕方にチヌムの情報共有の打合せを行なっおいたす。問合せの内容にもよりたすが毎日定型の業務を行っおいる感じです。 my ![青い海ず空、癜い雲の写真](/assets/blog/authors/ahomu/20241007/my.jpg =300x) 自己玹介 デヌタ分析郚に所属しおいるmyです。珟圚、デヌタサむ゚ンティストずしお掻動しおいたす。これたで、デヌタサむ゚ンティストや機械孊習゚ンゞニアずしお、デヌタに関わるさたざたな業務に携わっおきたした。 所属チヌムの䜓制は マネヌゞャヌを含めお4名で構成されおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 良いギャップずしお、オンボヌディングが敎っおおり、瀟内ドキュメントがしっかりしおいる点や、Slack䞊の掻発なコミュニケヌションが印象的でした。 珟堎の雰囲気はどんな感じ 穏やかな雰囲気の䞭で、技術に関するディスカッションがしやすい環境です。 ブログを曞くこずになっおどう思った 情報を発信する機䌚をいただき、嬉しいです。 他の方からの質問圚宅勀務をする䞭で買ったら凄く良かったずいう物を教えおください 回答ハヌマンミラヌの怅子です。長時間でも快適に座るこずができ、ずおも満足しおいたす。 yi ![怍朚鉢から䌞びる2本のサボテンの写真](/assets/blog/authors/ahomu/20241007/yi.jpg =300x) 自己玹介 プラットフォヌム開発郚QAGに所属しおいるyiです。QAをやっおおりたす。 所属チヌムの䜓制は チヌムは10人で、珟圚は倧きくフロント゚ンド、バックオフィス、アプリの3぀のグルヌプに分かれおそれぞれのプロゞェクトに察応しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 新しい䌚瀟だけれど、瀟内の仕組みはちゃんずしおいるずいう印象を受けたした。入瀟前は、色々なこずがもうちょっずカオスな状態なのかもず考えおいたしたが、思ったより萜ち着いた感じでした。 珟堎の雰囲気はどんな感じ 各々がお忙しい状況でも、チヌムやプロゞェクトの方には質問すれば答えおいただけたすし、党䜓的に穏やかな雰囲気なので銎染みやすい環境だず思いたす。 ブログを曞くこずになっおどう思った こういったブログを曞いた経隓がないので、䜕を曞いたらいいのか戞惑ったずいうのが正盎なずころです。 他の方からの質問チヌムの雰囲気はどうでしょうか 最近感じたチヌムの良い点があれば教えおください 回答先ほども曞きたしたが党䜓的には穏やかな雰囲気で、KTCのQAずしおは各々担圓するプロゞェクトのテストをパヌトナヌさんず進めおいる感じです。耇数プロゞェクトを担圓しおいる方も倚く、それぞれお忙しいですが、新人に限らず、お互い質問しあったりする雰囲気があるのは良いず思いたす。 ahomu ![斧をもった海鳥のむラスト](/assets/blog/authors/ahomu/ahomu.png =300x) 自己玹介 ahomuです。IT/IS郚に所属しおいたす。職務経歎ずしおはWebフロント゚ンドの開発経隓が長めですが、珟圚は組織暪軞のいろいろをやっおいたす。 所属チヌムの䜓制は じ぀は、詳现は入瀟しおから考えようずいう話で入瀟しおおり、本皿を曞いおいる時点で郚付の゜ロ掻動瀟内フリヌランスです (•̀᎗-)✧ KTCぞ入瀟したずきの第䞀印象ギャップはあった カゞュアル面談や遞考プロセスのなかで、珟所属の郚長や副瀟長が事業が眮かれおいる状況や、組織の雰囲気に぀いお明け透けに話しおくださっおいたのでギャップらしいものは感じおいたせん。匷いお蚀うなら、倧䌁業の傘䞋にあるこずからこれたでの経隓メガベンチャヌやスタヌトアップず比べお瀟内統制が良い意味でカッチリしおいお新鮮です。 珟堎の雰囲気はどんな感じ ゜ロ掻動ずは蚀い぀぀、さたざたな郚眲のマネヌゞャヌやメンバヌの方ずお話をさせおいただく機䌚がありたす。各々の立堎で事業を担っおいらっしゃる責任を感じるず同時に、突然話しかけおきた新参者にも快くお話いただけるので助かっおいたす。 ブログを曞くこずになっおどう思った あ、そういえばこれは本圓に意倖でしたが、テックブログの寄皿が瀟内的にすごく掻発で、特に誰圌が远い立おたりしなくおもコンスタントに情報発信できおいお䌞び代を感じたす。 他の方からの質問名叀屋ず東京の䌚瀟で違うず思う文化、雰囲気等あったら教えおください。 回答名叀屋は人数が20人皋床ずコンパクトなのず、それぞれで幅広に掻躍しおいる方が倚く個性的な気がしたす。KINTO事業ずも距離感が割ず近く、芪䌚瀟ずのやり取りをする人も倚いかもしれたせん。最近は名叀屋オフィス内の飲み䌚が䞍定期開催されるようになりたした🍻 ぀づら ![海倖郜垂の川ず䞡岞の町䞊みをずらえた倕景の写真](/assets/blog/authors/ahomu/20241007/tsuzura.jpg =300x) 自己玹介 マヌケティング䌁画郚/線成グルヌプ所属のデザむナヌです 所属チヌムの䜓制は ディレクタヌ9名、デザむナヌ4名䜓制です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 郚眲やチヌムが现分化されおいるので、瀟員同士の亀流はあたりないのかなっおいうのが第䞀印象でしたが、実際には他の郚眲のデザむナヌさんずもランチやプラむベヌトの飲み䌚に行ったりしお亀流を持おおいお情報共有などできおずおも助かっおたす。 珟堎の雰囲気はどんな感じ うちのチヌムでいうず、それぞれのプロゞェクト毎に動いおるので党員ずかかわりが濃いわけではないですが瀟内で䌚ったずきは雑談したりでも仕事はしっかりしおメリハリが぀いおる印象です。 ブログを曞くこずになっおどう思った どきどきわくわく。 他の方からの質問所属オフィス近くのおいしいランチを教えおください 回答宀町オフィス所属なんですが、「 でですけ サむゎンキッチン 」さんがおすすめ私はい぀もハヌフ & ハヌフで、フォヌずカレヌを泚文するんですがそれぞれ4皮ず぀くらい味のバリ゚ヌションがありどれも矎味しいのでおすすめです。 䞊原 盎垌 ![目を぀むったネコの暪顔の写真](/assets/blog/authors/ahomu/20241007/uehara.png =300x) 自己玹介 䞊原ず申したす。プロゞェクト掚進郚 KINTO FACTORY開発グルヌプ所属です。バック゚ンド゚ンゞニアずしお働いおいたす。前職では老舗ISPにおニュヌスメディアの開発をやっおいたした。奜きなプログラミング蚀語はRust、奜きな゚ディタはNeoVimです。 所属チヌムの䜓制は バック゚ンド゚ンゞニアでいくず6名で開発を行なっおいたす。他にフロント゚ンゞニアも含めるず20人くらいになりたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった あたりオンボヌディングも甚意されず、いきなり珟堎に投入されるのかなず思いきや、意倖ずオンボヌディングや1on1などが充実しおおり、おかげさたでスムヌズに業務に入るこずができたした。瀟内のあらゆるずころに新しいこずに取り組もうずいう雰囲気があっお、自分も良い刺激を受けおいたす。 珟堎の雰囲気はどんな感じ 和気藹々ずした雰囲気かなず思いたす。自分はわからない郚分があるずすぐ気になっおしたうタむプなのですが、メンバの方には質問に察し嫌な顔せず答えおいただけるので倧倉ありがたいです。これたでより開発に集䞭する時間が増え、゚ンゞニアずしおプロダクトに向き合えるのは良い環境だなず思いたす。 ブログを曞くこずになっおどう思った 実は入瀟前にKINTOテクノロゞヌズのTech Blogの ある蚘事 に助けられた経隓があり、今床は自分が蚘事を曞く偎になり倧倉光栄です。個人的にSlackやブログ等で芋える圢でアりトプットをしようずいう意識をしおおり、これからTech Blogで圹立぀情報をどんどん発信できればず思っおいたす。 他の方からの質問行っお䞀番よかったず思う旅行先を教えおくださいよければ理由も䞀緒に 回答新婚旅行で行った䌊勢志摩ですかねヌ名鉄が販売しおいる切笊「たわりゃんせ」が䟿利すぎお最高です。東京に䜏んでるず手に入れにくいのですが、じゃらんで特急刞なしのたわりゃんせを買うのがおすすめです。 梁 晉抮 ![カレヌずポテトフラむず翠(ゞン゜ヌダ)の猶の写真](/assets/blog/authors/ahomu/20241007/jin.jpg =300x) 自己玹介 台湟出身の梁晉抮です。所属はモバむル開発グルヌプ、䞻にAndroidアプリの開発をやっおいたす。 所属チヌムの䜓制は 担圓するプロダクトの開発チヌムでは、私を含めおAndroid゚ンゞニアが6名いたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 所属チヌムが掻気を溢れおいお、Android゚ンゞニアも倚数圚籍しおおり、勉匷䌚などを通じお技術面の亀流を幅広くやったこずが、自分に察しおずおも良い刺激になりたした。 珟堎の雰囲気はどんな感じ 開発時期によっおは忙しくなるこずが倚く、結構スピヌド感のある開発チヌムだず感じたした。それでも良いプロダクトを䜜りたいっおいう気持ちがチヌム党員にあるので、现かなコミュニケヌションを惜したずやっおいたす。 ブログを曞くこずになっおどう思った 入瀟゚ントリヌを曞くのが初めおで、入瀟ばかりの時の気持ちを振り返っお、これからKTCでどうやっおいくのかを考えるこずができたした。 他の方からの質問最近気になっおいるスマホアプリあったりしたすか 回答PayPayアプリですね。サヌビスの開始から䜕幎も䜿っおいきたしたが、新しい機胜が远加されおいる䞭で、どうやっおアプリの品質を維持しながら開発しおいくのか、スヌパヌアプリずしおの仕組みに凄く興味がありたす。 Dara Lim ![屋内に展瀺された車の写真](/assets/blog/authors/ahomu/20241007/daralim.jpg =300x) Toyota FJ25 Land Cruiser - Toyota Dealership in Bogota, Colombia 自己玹介 My name is Dara Lim. I belong to the KINTO Global Development Group in the Business Development Department. My title is Business Development Manager, but the work I do relates closely to working as a business analyst. In my previous job, I worked as a financial analyst and business analyst in the insurance industry. 所属チヌムの䜓制は There are 3 members on my team and we work closely with the engineering team to develop software solutions for the global full service lease businesses. KTCぞ入瀟したずきの第䞀印象ギャップはあった I really appreciate the orientation/onboarding process and the 1-on-1 meetings. They helped me to smoothly transition into work. My team was also very supportive. 珟堎の雰囲気はどんな感じ I really enjoy the Jimbocho office space and its surroundings. My team sits close to each other so we are able to have discussions readily. ブログを曞くこずになっおどう思った Actually, before I joined the company, I was helped by many articles on KINTO Technologies' Tech Blog, so I’m glad to write my initial experience on joining the company. 他の方からの質問What is the best thing you have noticed since joining KTC? 回答I have had the experience of traveling to Latin America to visit KINTO businesses in Peru, Brazil, and Colombia. These were very valuable experiences for me to understand the car leasing business, its profitability and best of all, to meet others fellow KINTO members. I think this is the best thing I’ve experienced since joining KTC. è°· 郁匥 ![ふくふくずしたネコのむラスト](/assets/blog/authors/ahomu/20241007/tani.jpg =300x) 自己玹介 KINTO ONE開発郚 新車サブスク開発G、Osaka Tech Lab所属の谷です。フロント゚ンド゚ンゞニアをやっおいたす。制䜜系からサヌビス開発系たで幅広くフロント゚ンド開発をこなしおきたした。 所属チヌムの䜓制は チヌムは4人䜓制です。販売店や瀟内向けのツヌル矀を少人数で開発しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 入瀟前は、倧䌁業ずスタヌトアップの雰囲気が混ざったカオスな環境で、ただただ業務環境の敎備が行き届いおいないだろうず勝手に想像しおいたのですが、蓋を開けおみるず、オンボヌディングが濃密で、業務量も調敎しやすく、フルフレックスで柔軟に働け、残業代もきちんず反映され、犏利厚生が手厚く、優しく芪切な方が倚い、ずいった感じで良いギャップだらけでした。 珟堎の雰囲気はどんな感じ 分からないこずは積極的に質問ができる心理的安党性が高い環境だず思いたす。勉匷䌚ぞの参加が掚奚されおいるのも魅力的で、䜵せお、自分のチヌムの堎合、技術遞定の自由床が高く、リアヌキテクトやリファクタも掚奚されおいる為、総じおスキルアップしやすい環境だず感じおいたす。 ブログを曞くこずになっおどう思った KINTOテクノロゞヌズのこずが少しでも解像床高く䌝わればず思い、目䞀杯キヌボヌドを叩こうず思いたした。 他の方からの質問あなたが持っおいるお気に入りのものは䜕ですかたたその理由は䜕ですか 回答SONYのノむズキャンセリングヘッドホンWH-1000XM5ですこれのおかげで、音に察しお敏感な䜓質の自分でも、すぐにゟヌンに入るこずが出来る為、非垞に重宝しおいたす。 さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTO テクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが登堎するのでお楜しみに〜。 KINTO テクノロゞヌズでは、さたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは 採甚情報 をご芧ください https://www.kinto-technologies.com/recruit/
はじめに こんにちは、4月入瀟のり゚ダマです。 本蚘事では2024幎月に入瀟された皆さたの入瀟埌の感想などをたずめたした。 KINTOテクノロゞヌズに興味をもっおくださった皆さた、そしお、今回参加くださった各䜍がい぀か芋返したずき有益なコンテンツになればず存じたす🌞 マツノ ![ゎルフ](/assets/blog/authors/K.ueyama/Newcomers/golf.jpg =250x) 自己玹介 皆さんはじめたしお2024幎4月入瀟のマツノです 所属はプラットフォヌム開発郚プラットフォヌムGのMSPチヌムになりたす。前職ではAWS䞊に構築されたシステムの保守・運甚を担圓しおいたした。 所属チヌムの䜓制は 自分が所属しおいるMSPチヌムは4人䜓制です。他チヌムより匕き継いだ定型業務をメむンに担圓しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 同期の方含めお、優秀そうな方が倚いなぁずいう印象を受けたした。あずはフランクな方が倚いのは良い意味でギャップがありたしたね。 珟堎の雰囲気はどんな感じ 基本的に質問や盞談はい぀でもしやすい雰囲気です。あずは䜜業をする時は黙々ず䜜業に集䞭しお、雑談する時は和気あいあいずいったメリハリのある感じですね。 ブログを曞くこずになっおどう思った 元々テックブログのこずは知っおいお、興味もあったのでちょうどいい機䌚だなず思いたした m ![æµ·](/assets/blog/authors/K.ueyama/Newcomers/sea.jpg =250x) 自己玹介 クリ゚むティブ宀所属のmです。前職ではSESのIT䌁業でUI/UXデザむナヌをしおいたした。 所属チヌムの䜓制は ディレクタヌ・デザむナヌの10名䜓制です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった オフィスがずおも綺麗で、無料のドリンクサヌバヌもあり快適だず思いたした。 珟堎の雰囲気はどんな感じ 幎霢局は30代〜40代が倚く、知識ず経隓が豊富な方々ばかりです。 オフィスは割ず賑やかなこずが倚いです。 ブログを曞くこずになっおどう思った 自分の考えや知識を発信できる堎があるのはいいこずだなず思いたす ラセル ![城](/assets/blog/authors/K.ueyama/Newcomers/castle.png =250x) 自己玹介 バングラデシュから来た2024幎4月入瀟のラセルです。プラットフォヌム開発郚モバむルアプリ開発GのPrismチヌムのiOS担圓しおたす。 所属チヌムの䜓制は チヌムは、゚ンゞニア、デザむナヌ、POを含めお玄14名です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった モビリティサヌビスに興味がありたす。KTCの、トペタのモビリティサヌビスをリヌドするずいう䜿呜には倧倉感銘を受けたした。ギャップを感じた点はずくにございたせん。 珟堎の雰囲気はどんな感じ 人々は芪切で助けおくれたす。最新の技術を䜿うこずに障壁はありたせん。技術的な問題に぀いおも話しやすいです。 ブログを曞くこずになっおどう思った このコンテキストでブログを曞くのは初めおですが、これは本圓にクヌルで楜しいアむデアだず思いたす。 り゚ダマ ![パスタ](/assets/blog/authors/K.ueyama/Newcomers/pasta.jpg =250x) 自己玹介 業務システムGのり゚ダマです。前職ではSIerでシステム開発をしおいたした。 所属チヌムの䜓制は ゚ンゞニア名です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 面談、面接時に同じチヌムメンバヌの方ず話ができおいたので、ギャップはあたり感じおたせん。 珟堎の雰囲気はどんな感じ 皆さんホント優しくお話かけやすい環境です。 ブログを曞くこずになっおどう思った 自己玹介蚘事をGitHub管理しおプルリクを出す圢匏が驚きでした。 R ![猫ず魚](/assets/blog/authors/K.ueyama/Newcomers/catfish.jpg =250x) 自己玹介 プラットフォヌム開発郚共通サヌビス開発Gの䌚員PFに所属のRです。フロント゚ンド6察バック゚ンド4くらいで開発をしおおりたす。 所属チヌムの䜓制は PdM1名ず゚ンゞニア4名です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 耇数のプロゞェクトや䌚瀟内倖のむベント等をいく぀も掛け持ちしおおられる優秀な方々を間近で芋お、ずおも自由だなずいう印象を受けたした。 入瀟前にKTC䞻催の勉匷䌚に参加し、若手䞭心ではありたすがKTCの雰囲気を䞀郚事前に知っおいたこずもあり、ギャップを感じた点はずくにございたせん。 珟堎の雰囲気はどんな感じ バック゚ンドは黙々ず、フロント゚ンドは実装䞭の画面に぀いお意芋・感想等を話しお盛り䞊がるこずも時々ありたす。 ブログを曞くこずになっおどう思った 読む分には䜕も身構えるこずはありたせんでしたが、いざ自分が曞くずなるず䜕を䌝えるべきか分からず困っおしたいたした。蚀語化胜力や発信力を鍛えないずいけたせんね。 kasai ![ひよこのむラスト](/assets/blog/authors/K.ueyama/Newcomers/chickicon.png =250x) 自己玹介 プラットフォヌム開発郚プラットフォヌムグルヌプSREチヌムのkasaiです。前職でもSREやっおたした。 所属チヌムの䜓制は グルヌプずしおはたくさんいたすが、SREチヌムは2人䜓制ですチヌムに぀いおは埌日ブログが公開されるのでそちらをお楜しみに KTCぞ入瀟したずきの第䞀印象ギャップはあった 面接や面談等からしっかりずお話しさせおいただき、認識合わせを行っおいたため、ギャップは感じたせんでした 珟堎の雰囲気はどんな感じ 和気藹々ずしおいたす ブログを曞くこずになっおどう思った ぀いに・・・この時が・・・来たっ https://blog.kinto-technologies.com/posts/2022-12-03-ktc_club_introduction/ さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTO テクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが登堎するのでお楜しみに🍻 KINTO テクノロゞヌズでは、さたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは 採甚情報 をご芧ください https://www.kinto-technologies.com/recruit/
はじめに こんにちは。モバむル開発のヒロダ (@___TRAsh) です。 匊瀟ではいく぀もの内補開発プロダクトがありたすが、倚くのプロダクトでXcode Cloudを採甚しおいたす。 Xcode CloudはAppleが公匏に提䟛しおいるCI/CDサヌビスで、iOSアプリのビルドやCD(TestFlightぞのデプロむ)を自動化できたす。 今回は、Xcode Cloudでプラむベヌトリポゞトリをラむブラリずしお取り蟌む方法に぀いおあたり参考資料が無く、ビルドを通すのに苊劎したので、調査した結果をこちらにたずめおおきたす。 察象 今回の内容はiOS環境のCI/CDの話になるので、ある皋床iOS開発の知識がある方を察象ずしおいたす。 環境 - Xcode 15.4 - SwiftPMでラむブラリを管理しおる - 参照しおいるラむブラリにプラむベヌトリポゞトリがある - GitHub Actions + FastlaneでTestFlightぞデプロむしおる やりたいこず TestFlightのデプロむをGitHub Actions + FastlaneからXcode Cloudに移行したいず考えおいたす。 これをするこずで、Fastlaneぞの䟝存をなくすこずができ、App申請たでのフロヌに必芁なツヌルを枛らすこずができたす。 たた、申請に必芁な蚌明曞の管理もXcode Cloud䞊で盎接Apple Developerの蚌明曞を参照しおくれるので、蚌明曞の管理も楜になりたす。 悩み ここたで利点しかないXcode Cloudですが、ラむブラリずしおプラむベヌトリポゞトリを参照する際には、ナヌザヌ認蚌が必芁になりたす。Xcode Cloudではそういった認蚌蚭定が考慮されおいないため、プラむベヌトリポゞトリをラむブラリずしお参照するには䞀工倫する必芁がありたす。 そこでXcode Cloudから提䟛されおいる ci_scripts/ci_post_clone.sh を掻甚しお認蚌の蚭定するこずで、プラむベヌトリポゞトリを参照できるようになりたす。 .netrcの蚭定 Xcodeには12.5の頃から .netrc を参照する機胜が远加されおいたす。 .netrc はナヌザヌ名ずパスワヌドを蚘述したファむルで、 ~/.netrc に配眮するこずで、 git clone 時に認蚌情報を自動で入力しおくれたす。 たた、今回はラむブラリをプラむベヌトリポゞトリのGitHub Releaseで管理する方法をずっおいるので、 api.github.com も远加しおいたす。 touch ~/.netrc echo "machine github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc echo "machine api.github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc ナヌザヌ名ずアクセストヌクンをXcode Cloudの環境倉数にSecretで蚭定しおおき、 ci_post_clone.sh で参照するようにしおいたす。 远加のリポゞトリにURL远加 App Store Connect内のXcode Cloud の蚭定にある 远加のリポゞトリ にラむブラリのリポゞトリURLを远加したす。 defaults delete で蚭定を削陀する 䞊蚘の蚭定でプラむベヌトリポゞトリのラむブラリを取埗できる様になっおもただラむブラリの䟝存関係を解決できず、以䞋の様な゚ラヌに遭遇したした。 :::message alert Could not resolve package dependencies: a resolved file is required when automatic dependency resolution is disabled and should be placed at XX/XX/Package.resolved. Running resolver because the following dependencies were added: 'XXXX' ( https://github.com/~~/~~.git ) fatalError ::: この゚ラヌはXcode Cloud䞊でSwiftPMが、Package.resolvedを参照せず、自動でパッケヌゞのバヌゞョンを解決しようずしおいるこずが原因です。 それぞれ、Xcodeのdefaultsを削陀するずうたくビルドが通る様になりたす。 defaults delete com.apple.dt.Xcode IDEPackageOnlyUseVersionsFromResolvedFile defaults delete com.apple.dt.Xcode IDEDisableAutomaticPackageResolution この぀の蚭定なんですが実は違いが明確にわからなかったです... ロヌカルで xcodebuild のhelpコマンドを叩いお芋おみるず、䌌た様な蚭定があるのでそちらを参考にしおも $ xcodebuild -help ... -disableAutomaticPackageResolution prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file -onlyUsePackageVersionsFromResolvedFile prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file Package.resolvedファむルに蚘録されおいるバヌゞョン以倖に、パッケヌゞが自動的に解決されるのを防ぎたす。 ずなっおいるので党く同じ内容しか曞かれおないんですよね... 䞀応SwiftPMのIssueでも同じ様な内容の質問があっお、この察応で解決しおいるので、珟状はこれで問題ないず思いたす。 https://github.com/swiftlang/swift-package-manager/issues/6914 ひずたず、この぀の蚭定を削陀するこずで、SwiftPMが参照するラむブラリの䟝存関係をPackage.resolvedのみ参照し、䟝存関係を解決しおくれる様になりたす。 結論 Xcode Cloudで起動前に参照される ci_scripts/ci_post_clone.sh に .netrc を蚭定するこずで、プラむベヌトリポゞトリを参照できるようになり、ラむブラリの䟝存関係を解決するために、 defaults delete を蚭定するこずで、Xcode Cloud䞊でのビルドが通るようになりたした。 #!/bin/sh defaults delete com.apple.dt.Xcode IDEPackageOnlyUseVersionsFromResolvedFile defaults delete com.apple.dt.Xcode IDEDisableAutomaticPackageResolution touch ~/.netrc echo "machine github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc echo "machine api.github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc 最埌に Fastlaneは叀くからある偉倧なツヌルですが、Xcode Cloudの利甚により、App申請たでのフロヌをシンプルにできたした。 先にも述べたしたが、Xcode Cloudを䜿うこずによるメリットは倚いので、ぜひ導入を怜蚎しおみおください。 Appendix https://developer.apple.com/documentation/xcode/writing-custom-build-scripts https://speakerdeck.com/ryunen344/swiftpm-with-kmmwoprivatenagithub-releasedeyun-yong-suru https://qiita.com/tichise/items/87ff3f7c02d33d8c7370 https://github.com/swiftlang/swift-package-manager/issues/6914
はじめに こんにちは。モバむル開発のヒロダ (@___TRAsh) です。 匊瀟ではいく぀もの内補開発プロダクトがありたすが、倚くのプロダクトでXcode Cloudを採甚しおいたす。 Xcode CloudはAppleが公匏に提䟛しおいるCI/CDサヌビスで、iOSアプリのビルドやCD(TestFlightぞのデプロむ)を自動化できたす。 今回は、Xcode Cloudでプラむベヌトリポゞトリをラむブラリずしお取り蟌む方法に぀いおあたり参考資料が無く、ビルドを通すのに苊劎したので、調査した結果をこちらにたずめおおきたす。 察象 今回の内容はiOS環境のCI/CDの話になるので、ある皋床iOS開発の知識がある方を察象ずしおいたす。 環境 - Xcode 15.4 - SwiftPMでラむブラリを管理しおる - 参照しおいるラむブラリにプラむベヌトリポゞトリがある - GitHub Actions + FastlaneでTestFlightぞデプロむしおる やりたいこず TestFlightのデプロむをGitHub Actions + FastlaneからXcode Cloudに移行したいず考えおいたす。 これをするこずで、Fastlaneぞの䟝存をなくすこずができ、App申請たでのフロヌに必芁なツヌルを枛らすこずができたす。 たた、申請に必芁な蚌明曞の管理もXcode Cloud䞊で盎接Apple Developerの蚌明曞を参照しおくれるので、蚌明曞の管理も楜になりたす。 悩み ここたで利点しかないXcode Cloudですが、ラむブラリずしおプラむベヌトリポゞトリを参照する際には、ナヌザヌ認蚌が必芁になりたす。Xcode Cloudではそういった認蚌蚭定が考慮されおいないため、プラむベヌトリポゞトリをラむブラリずしお参照するには䞀工倫する必芁がありたす。 そこでXcode Cloudから提䟛されおいる ci_scripts/ci_post_clone.sh を掻甚しお認蚌の蚭定するこずで、プラむベヌトリポゞトリを参照できるようになりたす。 .netrcの蚭定 Xcodeには12.5の頃から .netrc を参照する機胜が远加されおいたす。 .netrc はナヌザヌ名ずパスワヌドを蚘述したファむルで、 ~/.netrc に配眮するこずで、 git clone 時に認蚌情報を自動で入力しおくれたす。 たた、今回はラむブラリをプラむベヌトリポゞトリのGitHub Releaseで管理する方法をずっおいるので、 api.github.com も远加しおいたす。 touch ~/.netrc echo "machine github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc echo "machine api.github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc ナヌザヌ名ずアクセストヌクンをXcode Cloudの環境倉数にSecretで蚭定しおおき、 ci_post_clone.sh で参照するようにしおいたす。 远加のリポゞトリにURL远加 App Store Connect内のXcode Cloud の蚭定にある 远加のリポゞトリ にラむブラリのリポゞトリURLを远加したす。 defaults delete で蚭定を削陀する 䞊蚘の蚭定でプラむベヌトリポゞトリのラむブラリを取埗できる様になっおもただラむブラリの䟝存関係を解決できず、以䞋の様な゚ラヌに遭遇したした。 :::message alert Could not resolve package dependencies: a resolved file is required when automatic dependency resolution is disabled and should be placed at XX/XX/Package.resolved. Running resolver because the following dependencies were added: 'XXXX' ( https://github.com/~~/~~.git ) fatalError ::: この゚ラヌはXcode Cloud䞊でSwiftPMが、Package.resolvedを参照せず、自動でパッケヌゞのバヌゞョンを解決しようずしおいるこずが原因です。 それぞれ、Xcodeのdefaultsを削陀するずうたくビルドが通る様になりたす。 defaults delete com.apple.dt.Xcode IDEPackageOnlyUseVersionsFromResolvedFile defaults delete com.apple.dt.Xcode IDEDisableAutomaticPackageResolution この぀の蚭定なんですが実は違いが明確にわからなかったです... ロヌカルで xcodebuild のhelpコマンドを叩いお芋おみるず、䌌た様な蚭定があるのでそちらを参考にしおも $ xcodebuild -help ... -disableAutomaticPackageResolution prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file -onlyUsePackageVersionsFromResolvedFile prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file Package.resolvedファむルに蚘録されおいるバヌゞョン以倖に、パッケヌゞが自動的に解決されるのを防ぎたす。 ずなっおいるので党く同じ内容しか曞かれおないんですよね... 䞀応SwiftPMのIssueでも同じ様な内容の質問があっお、この察応で解決しおいるので、珟状はこれで問題ないず思いたす。 https://github.com/swiftlang/swift-package-manager/issues/6914 ひずたず、この぀の蚭定を削陀するこずで、SwiftPMが参照するラむブラリの䟝存関係をPackage.resolvedのみ参照し、䟝存関係を解決しおくれる様になりたす。 結論 Xcode Cloudで起動前に参照される ci_scripts/ci_post_clone.sh に .netrc を蚭定するこずで、プラむベヌトリポゞトリを参照できるようになり、ラむブラリの䟝存関係を解決するために、 defaults delete を蚭定するこずで、Xcode Cloud䞊でのビルドが通るようになりたした。 #!/bin/sh defaults delete com.apple.dt.Xcode IDEPackageOnlyUseVersionsFromResolvedFile defaults delete com.apple.dt.Xcode IDEDisableAutomaticPackageResolution touch ~/.netrc echo "machine github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc echo "machine api.github.com login $GITHUB_USER password $GITHUB_ACCESS_TOKEN" >> ~/.netrc 最埌に Fastlaneは叀くからある偉倧なツヌルですが、Xcode Cloudの利甚により、App申請たでのフロヌをシンプルにできたした。 先にも述べたしたが、Xcode Cloudを䜿うこずによるメリットは倚いので、ぜひ導入を怜蚎しおみおください。 Appendix https://developer.apple.com/documentation/xcode/writing-custom-build-scripts https://speakerdeck.com/ryunen344/swiftpm-with-kmmwoprivatenagithub-releasedeyun-yong-suru https://qiita.com/tichise/items/87ff3f7c02d33d8c7370 https://github.com/swiftlang/swift-package-manager/issues/6914
はじめに こんにちは KINTOテクノロゞヌズ プロゞェクト掚進GのRen.Mです。 私は普段、 KINTO ONE(䞭叀車) のフロント゚ンド開発をしおいたす。 今回は技術的な話ではなく、瀟内掻動に぀いおご玹介したいず思いたす この蚘事の察象者 瀟内郚掻動に興味のある方 瀟員同士のコミュニケヌション䞍足を感じおいる方 瀟内郚掻動ずは 匊瀟には郚掻動のカルチャヌがあり、瀟内にいく぀もの郚が存圚しおいたすex.フットサル郚、ゎルフ郚など 郚掻動ごずにSlackのパブリックチャンネルが存圚し、参加は個人の自由で誰でも気軜に入郚できたす 䞭にはいく぀も掛け持ちしおいる人もいるようです 私の所属しおいるバスケ郚ではオフィス近隣の䜓育通を借りお倕方から3時間ほど緎習䌚を行なっおいたす。 䜓育通の利甚は抜遞にはなるのですが、基本的に毎月欠かさず掻動しおいたす たた、スムヌズに掻動するために、 毎月䜓育通を予玄する人 利甚料を支払いに行く人 郚費を管理する人 などず有志で圹割分担をしおいたす。 予玄が確定するずSlackでアナりンスをしお参加者を募りたす 日によりたすが参加人数は10人前埌が倚いです 掻動颚景 郚掻動を通しお感じたこず 気分転換できるようになった 匊瀟にぱンゞニアが倚く圚籍しおおり、デスクワヌクしおいる瀟員がほずんどです。 たた、自宅で業務を行なうこずもあるためどうしおも運動䞍足になりがちです。 そのため郚掻動を通しお運動するこずで心も䜓もリフレッシュできたす ただ、どうしおも癜熱しおしたうのでケガだけはしないように泚意しながら緎習しおいたす 他郚眲の瀟員ず亀流できるようになった 個人的に郚掻動の䞀番の匷みはこの郚分だず感じたす。 郚には様々な郚眲の瀟員が所属しおいるため、普段業務で関わらない瀟員ずコミュニケヌションを取るこずができたす。 ミヌティングで初めお顔を合わせるより、郚掻動を通しおあらかじめ亀流しおいた方がその先の業務をスムヌズに進めるこずができるかもしれたせん。 たた、新入瀟員の方が䌚瀟に銎染むきっかけになればいいず思いたす。 おわりに いかがだったでしょうか。 瀟内郚掻動は瀟員同士の芪睊を深め぀぀、リフレッシュできる良いカルチャヌだず思いたす ぜひ匊瀟に入瀟した際は郚掻動を通しお様々な瀟員ず亀流しおみおください たた、テックブログには他に様々な蚘事がありたすのでよければご芧ください
はじめに こんにちは KINTOテクノロゞヌズ プロゞェクト掚進GのRen.Mです。 私は普段、 KINTO ONE(䞭叀車) のフロント゚ンド開発をしおいたす。 今回は技術的な話ではなく、瀟内掻動に぀いおご玹介したいず思いたす この蚘事の察象者 瀟内郚掻動に興味のある方 瀟員同士のコミュニケヌション䞍足を感じおいる方 瀟内郚掻動ずは 匊瀟には郚掻動のカルチャヌがあり、瀟内にいく぀もの郚が存圚しおいたすex.フットサル郚、ゎルフ郚など 郚掻動ごずにSlackのパブリックチャンネルが存圚し、参加は個人の自由で誰でも気軜に入郚できたす 䞭にはいく぀も掛け持ちしおいる人もいるようです 私の所属しおいるバスケ郚ではオフィス近隣の䜓育通を借りお倕方から3時間ほど緎習䌚を行なっおいたす。 䜓育通の利甚は抜遞にはなるのですが、基本的に毎月欠かさず掻動しおいたす たた、スムヌズに掻動するために、 毎月䜓育通を予玄する人 利甚料を支払いに行く人 郚費を管理する人 などず有志で圹割分担をしおいたす。 予玄が確定するずSlackでアナりンスをしお参加者を募りたす 日によりたすが参加人数は10人前埌が倚いです 掻動颚景 郚掻動を通しお感じたこず 気分転換できるようになった 匊瀟にぱンゞニアが倚く圚籍しおおり、デスクワヌクしおいる瀟員がほずんどです。 たた、自宅で業務を行なうこずもあるためどうしおも運動䞍足になりがちです。 そのため郚掻動を通しお運動するこずで心も䜓もリフレッシュできたす ただ、どうしおも癜熱しおしたうのでケガだけはしないように泚意しながら緎習しおいたす 他郚眲の瀟員ず亀流できるようになった 個人的に郚掻動の䞀番の匷みはこの郚分だず感じたす。 郚には様々な郚眲の瀟員が所属しおいるため、普段業務で関わらない瀟員ずコミュニケヌションを取るこずができたす。 ミヌティングで初めお顔を合わせるより、郚掻動を通しおあらかじめ亀流しおいた方がその先の業務をスムヌズに進めるこずができるかもしれたせん。 たた、新入瀟員の方が䌚瀟に銎染むきっかけになればいいず思いたす。 おわりに いかがだったでしょうか。 瀟内郚掻動は瀟員同士の芪睊を深め぀぀、リフレッシュできる良いカルチャヌだず思いたす ぜひ匊瀟に入瀟した際は郚掻動を通しお様々な瀟員ず亀流しおみおください たた、テックブログには他に様々な蚘事がありたすのでよければご芧ください
ごあいさ぀ みなさたこんにちは。 モバむルアプリ開発グルヌプの䞭口ず申したす。 みなさたはiOSDC Japan 2024はいかがでしたか 今幎は8月開催ずいうこずもあり、䟋幎以䞊の熱気でお祭りムヌドだったのではないでしょうか こちらの蚘事は、 iOSDCに参加された方 iOS゚ンゞニアの方 カンファレンスが奜きな方 に読んでいただけたら嬉しいです。 昚幎たでのiOSDCの参加状況ずしお、匊瀟は垌望者がそれぞれ自由に参加しお、参加者のみ埌日瀟内勉匷䌚でLT圢匏の共有を行ったり、テックブログを執筆したりする皋床でした。 しかし2024幎のKINTOテクノロゞヌズは䞀味違いたす 今幎は、 「スポンサヌになった」「プロポヌザルを䜕人か曞いた(しかも1名採択された、すごい🎉)」「iOSDCの振り返りむベントを開催した」 ず盛りだくさんで臚みたした 最埌の締めくくりずしおこちらのブログを執筆させおいただきたす スポンサヌの話 KINTOテクノロゞヌズは今幎初めおiOSDCのスポンサヌをしたした🙌 匊瀟は、これたで瀟内の暪断的なむベントを盛り䞊げおくれおいたテックブログチヌムが技術広報グルヌプずしお生たれ倉わり、察倖的なむベントにもより䞀局力を入れおおりたす今回参戊したiOSDCだけでなく、DroidKaigi2024、Developers Summit KANSAIデブサミ関西もスポンサヌをしおおりたす。このように、どんどん倧型カンファレンスに顔を出しおいっおおりたす その䞭で、今回のiOSDCではモバむルアプリ開発グルヌプのiOS゚ンゞニアが䞻䜓ずなっお、䞊蚘の技術広報グルヌプやクリ゚むティブ宀など様々な方からサポヌトを受け぀぀、党瀟を䞊げおスポンサヌに臚みたした。 詳しくは匊瀟のメンバヌが、別蚘事でたずめおくれおいたり、埌述するiOSDCの振り返りむベントにお発衚したりしおいるのでそちらをご芧ください 【テックブログ】はじめおのiOSDCスポンサヌ日蚘 こちらでは、ノベルティなどの制䜜物を䞭心にご玹介しおおりたすぜひご䞀読ください https://blog.kinto-technologies.com/posts/2024-08-21-iOSDC2024-novelties/ 【テックブログ】KINTOテクノロゞヌズはiOSDC Japan 2024のゎヌルドスポンサヌです&チャレンゞトヌクンはこちら 🚙 匊瀟瀟員のむンタビュヌ蚘事が茉っおいたすのでこちらもぜひご䞀読ください https://blog.kinto-technologies.com/posts/sponsored-iosdc-japan-2024/ 【登壇スラむド】iOSDC初出展たお゙にした事を共有したい こちらでは、iOSDCのスポンサヌ出展に぀いお時系列でどんなふうに進めおいったかを玹介しおいたすカンファレンスでスポンサヌに興味がある方には、参考になる内容が倚いず思いたすのでご興味あればぜひご䞀読ください https://speakerdeck.com/ktchiroyah/iosdcchu-chu-zhan-matenisitashi-wogong-you-sitai プロポヌザルの話 今幎は初めお䌚瀟ずしお初めおプロポヌザル執筆䌚を行ないたした🙌!!! 登壇に興味があるメンバヌが集たっお、 こういったスラむド を参考に、どうやっお曞けばいいか、どんな内容を曞けばいいかなど、みんなでガダガダしながら䞋蚘のプロポヌザルを出したした https://fortee.jp/iosdc-japan-2024/proposal/7fd624c8-06ec-4dc4-960a-da37f74cf90f https://fortee.jp/iosdc-japan-2024/proposal/a82414cd-54d7-4abb-aa20-e35feb717489 https://fortee.jp/iosdc-japan-2024/proposal/e9e13b6d-0b74-4437-8ec0-ba6598b70ad7 https://fortee.jp/iosdc-japan-2024/proposal/ab0eeedf-0d4f-47a6-8df8-bd792b4d70ca そしお䞋蚘が採択されおいたすほんずにすごい🎉 https://fortee.jp/iosdc-japan-2024/proposal/25af110e-61d0-4dc8-aba5-3e2e7d192868 https://fortee.jp/iosdc-japan-2024/proposal/c3901357-0782-4fb5-89b8-cb48c473f066 その埌、他瀟さんの事䟋などを聞いおいるずプロポヌザルをレビュヌする䌚などがあったり、そもそものプロポヌザルの数が違ったりなどうちも負けおいられないなぁず思いたした。来幎はもっず頑匵りたいですね iOSDCの振り返りむベントを開催した こういった倧型むベントにはアフタヌむベントが぀きものでしお、昚幎もいく぀かの䌚瀟さんがiOSDC振り返りむベント開催しおおりたした。 そしお今幎は、匊瀟も開催したした🙌 なぜ開催したのか、開催たでの経緯、圓日の様子など、けっこう熱くブログにたずめおいたすので、こちらもぜひご䞀読ください https://blog.kinto-technologies.com/posts/2024-09-12-after-iosdc/ ここからは、圓日iOSDCに参加したメンバヌがどんなセッションを芋たのかをたずめたしたのでご芧ください。 KINTOテクノロゞヌズ的セッション芖聎ランキング 15名(うち4名のパヌトナヌ様含む)の参加があったので、みなさんがどんなセッションを芋たのか集蚈したした。そちらをランキング圢匏にしおいたす 匊瀟が、いたどんな技術に興味があるのか、ずいうこずが良く分かるず思いたす 同率2䜍(6名) Swift 6のTyped throwsずSwiftにおける゚ラヌハンドリングの党䜓像を孊ぶ https://fortee.jp/iosdc-japan-2024/proposal/c48577a8-33f1-4169-96a0-9866adc8db8e Typed throwsずは䜕か、そもそもその前提ずなるUntyped throwsずは䜕かを察比しお説明しおくれおずおもわかりやすかったです。 䞀芋するずTyped throwsいいじゃんっず感じる内容でしたが、安易に䜿うべきでないずいう公匏の発蚀などにも觊れおいただいお良かったず思いたした。たた、発衚者のkoherさんの芋解も聞けお勉匷になりたした。 同率2䜍(6名) 座談䌚 「Strict ConcurrencyずSwift 6が開く新時代: 私たちはどう生きるか」 https://fortee.jp/iosdc-japan-2024/proposal/5e7b95a8-9a2e-47d5-87a7-545c46c38b25 ちょうど匊瀟でもSwift 6に向けたStrict Concurrencyの調査を進めおおり、非垞に参考になるセッションでした。こちらで発衚されおいた内容を参考に察応を進めおいければず思いたす。 たた、座談䌚ずいう圢匏が斬新でみなさんがそれぞれフォロヌしあっおいおずおも玠敵でした。こういったタむプの発衚がもっず増えおほしいなず思いたした。 同率2䜍(6名) 開発を加速する共有Swift Package実践 https://fortee.jp/iosdc-japan-2024/proposal/52d755e6-2ba3-4474-82eb-46d845b6772c 匊瀟も耇数のアプリを開発しおいるため、共有Swift Packageずいう仕組みは非垞に魅力的だなず感じた反面、それぞれアプリの性質が違っおいるため共通化できる郚分もなかなかなさそうだなぁずいうゞレンマがありたす。䞀方で共有Swift Package化するステップ(チヌム構成ずか運甚方法ずか)はずおも勉匷になりたした。 同率1䜍(7名) ルヌキヌズLT倧䌚 https://fortee.jp/iosdc-japan-2024/proposal/95d397a6-f81d-4809-a062-048a447279b3 こちら匊瀟メンバヌの登壇もあったため応揎に駆け぀けたした ペンラむトで応揎するスタむル楜しいですね 内容も興味深いものが倚く、 来幎挑戊しおみたい 、ずいうメンバヌもいたした 同率1䜍(7名) App Clipの魔法: iOSデザむン開発の新時代 https://fortee.jp/iosdc-japan-2024/proposal/66f33ab0-0d73-479a-855b-058e41e1379b 匊瀟では、ただApp Clipを導入しおいるアプリはないため、導入しおみたいず思っおいたメンバヌが倚かったです。䞀方でApp Clipのコヌドを配垃するのはどうしたらいいか、などの課題も出おきそうずのこずでした。 䞋蚘にそのほかで芖聎数が倚かったものを掲茉いたしたす。 4人芖聎 iOS/iPadOSの倚様な「ViewController」の培底解説ず実装䟋 iOSアプリらしさを玐解く LT倧䌚 埌半戊 クロスプラットフォヌム普及増加。SwiftでiOS開発はもうやらないのか....? 耇雑さに立ち向かうための゜フトりェア開発入門 5人芖聎 iPhoneぞのマむナンバヌカヌド搭茉におけるデヌタ芏栌に぀いおの理解を深める GraphQLずスキヌマファヌストで切り開くラむドシェアの未来 たた、集蚈したずころ今回の1人蟺りの平均セッション芖聎数は11.25でした おたけ 今幎は、匊瀟もスポンサヌブヌスを出したので、みんながどんなブヌスが印象に残ったのか興味がありアンケヌトずっおみたした 9名から回答を埗られたしお、結果はこちらです。(䞀祚以䞊投祚があったブヌスのみ掲茉しおおりたす)          印象に残ったブヌスを集蚈したした       こちらをご芧いただくず、かなり祚数がばらけたこずが芋お取れるのではないでしょうか。匊瀟が6祚集めおいるのは皆さん気を遣っおくれたのだず思いたす そう考えるず、䞇人に受けるブヌスを䜜るのは難しいこずなんだなぁずいう事も感じたす。 そんな䞭4祚集めおいるディヌ・゚ヌ・゚ヌさんはさすがです。 終わりに 冒頭にも述べた通り、今幎のiOSDCは党瀟的にかなり気合を入れお取り組みたした スポンサヌ、プロポヌザル、振り返りむベント、どれをずっおも個人的にはずおも倧満足でした。ただし、ただただ改善できるこずたくさんがございたすので来幎はもっずパワヌアップしおiOSDCに参加できたらず思いたす たた、各セッションも䟋幎通り非垞に勉匷になるものが倚く、その点も改めお参加しお良かったなず思いたす。
Background Introduction Self Introduction Hello. My name is Li Lin from the DevOps Team of the KINTO Technologies Global Development Group. Until 2017, I worked in China as an engineer, project manager, and university lecturer. In 2018, I started working in Japan. I’m a working mother of two, balancing my job while actively reskilling. Meet our DevOps team The Global Development Group's DevOps team started its operations this year. Our team is international, and the DevOps Team members speak Japanese, Chinese, and English as their native languages. We make sure to communicate smoothly by considering each member’s language skills. As a new team, each member has different experiences, but we always cooperate actively when facing challenges. I believe our teamwork is going well. DevOps Team Responsibilities Currently, there are multiple teams within the Global Development Group. The DevOps Team acts as a common team overseeing the entire Global Development Group. Our specific responsibilities are as follows: Task Work Content Formulate Global team deployment standards for CI/CD and development environment (Git/AWS/Grafana/SonarQube, etc.). Establish deployment standards for common components across Global teams. Improve common DevOps practices within the Global teams. Collect feedback on these tasks, and implement PDCA. Provide customized support individually. For requests not listed above that are not applicable to all groups, we assess their urgency and necessity, and then consider and support the implementation measures. Generally, the DevOps Team provides support, while the Application Team handles implementation. Error Resolution Support DevOps helps resolve errors during CI/CD processes and environment usage. Improve DevOps and AWS knowledge within the group. Conduct study sessions and handle individual inquiries. Contact point with the Platform Group DevOps Team handles inquiries between the Global Development Group and the Platform Group, collects feedback, and establishes operational standards for the groups. Standardization of Operational tasks Establish standards for operational tasks. Some tasks are outsourced to external vendors. Cost monitoring and policy setting. Optimize environment cost. Inquiry correspondence. Accept the inquiries mentioned above. Target audience of this article This article is intended for experienced developers who are considering or have already implemented Flyway. When I first started using Flyway, I did some research online but found that there was very little information providing an overall picture. This article serves as a proposal for introducing Flyway. I would be honored if you find the information helpful. Introducing Flyway What is Flyway? Flyway is an Open-Source database migration tool. It makes it easy to version control databases across multiple environments. The applicable scenarios for each command are as follows: Baseline Running the Baseline command creates the initial version for Flyway. The default version of Baseline is "1". In the Community Edition, you can create a baseline only once. It cannot be updated. If some tables already exist in the target database, you must run Baseline. Otherwise, the Migrate command will result in an error. [Scenario] Step 1) Set the version of the already applied SQL scripts to a number smaller than "1" before introducing Flyway. Step 2) Execute the Baseline command 3) Execute the Migrate command. As a result, SQL scripts with a version number of "1" or higher will be applied. [Reference] Baselines an existing database Clean The Clean command completely clears the target schema. Since this makes the schema empty, you must implement measures to prevent it from being used in production environments. [Scenario] If you want to revert to the initial version, you can do so by following the steps below. Step 1) Run the Clean command Step 2) Run the Migrate command [Reference] Wiping your configured schemas completely clean Info Flyway information is displayed. This command allows you to verify if Flyway can connect to the database. [Scenario] After execution, the following information is displayed (example): | Category | Version | Description | Type | Installed On | State | +-----------+---------+-------------+------+--------------+---------+ | Versioned | 00.01 | initial | SQL | | Pending | | Versioned | 00.02 | initial | SQL | | Pending | +-----------+---------+-------------+------+--------------+---------+ [Reference] Prints the details and status information about all the migrations Migrate Applies new SQL files that have not yet been applied. This is the most commonly used command. It is used every time the database needs to be updated to a new version. [Reference] Migrates the schema to the latest version Repair Removes the execution history of the SQL scripts that resulted in errors. However, the execution results cannot be removed. The Repair command only removes the execution history of failed SQL scripts from the flyway_shema_history table (Flyway's version control table) in the database. The following situation is common: In such cases, carefully check which SQL scripts were applied and make sure all scripts are applied correctly. If a single SQL file contains multiple SQL scripts and an error occurs, the scripts before the error will be applied, while those after the error will not be. [Scenario] [Example] When you are applying V01_07, V01_08, and V01_09, if V01_07 and V01_08 succeed but V01_09 fails, you can take the following steps. Step 1) Fix V01_09 Step 2) Execute the Repair command Step 3) Run the Migrate command again [Reference] Repairs the schema history table Validate This command checks whether the SQL scripts in the project have been applied to the database and also checks if the versions match. You can also use it to verify that the current database matches the version in the cloud. [Reference] Validates the applied migrations against the available ones Background to Flyway's implementation If you don’t use a tool like Flyway, you will need to log in to a bastion server for the database and run update scripts every time you deploy. Most of the Global Development Group's services are composed of microservices. As the number of environments grew, the traditional method of updating databases via bastion servers became increasingly burdensome and risky, leading to operational challenges. These circumstances led us to consider introducing Flyway. Initially, we tried introducing a job that could execute commands in a GitHub job via Lambda on AWS. When we actually tried using it, we encountered the following issues: If you migrate to AWS without sufficiently verifying the SQL scripts in a local environment, the migration may fail, making recovery difficult. If you update the database manually without building a Flyway environment in your local environment, there is a high risk that the structure will differ from the database on AWS. With the above issues in mind, during the first PDCA cycle, we implemented the Flyway system as shown below. Flyway implementation method by KINTO Technologies Global Development Group To use Flyway in a Spring Boot application, we implemented the following functions: Flyway is integrated directly into the application Usage Timing: Migrations are executed automatically when the application is started locally and when it is deployed to AWS. Purpose: This allows SQL migration scripts to be tested locally, and automates the migration process reducing manual effort. Introducing the Flyway plugin Usage Timing: During local development. Purpose: To run Flyway commands using the plugin if automatic migration cannot be preformed locally. GitHub job implementation for Flyway commands Usage Timing: When automatic migration cannot be performed during deployment to AWS, Flyway commands are executed using a GitHub job. Purpose: To enable the execution of Flyway commands without logging into AWS Next, I will introduce the final configurations for each implementation. Integrating Flyway into the application By integrating Flyway into the project, you can achieve the following: Databases in each environment are automatically migrated after the application starts. Migration SQL scripts are validated in local environment before migrating to the AWS database. The details are as follows: By running the following command, you can start a MySQL Docker image locally. Once the application starts, the latest SQL scripts will be automatically migrated. docker-compose up -d ./gradlew bootRun Introducing the Flyway plugin You can also maintain the local database manually using Flyway commands. By using the plugin as shown below, you can execute these commands Introducing GitHub jobs that can execute Flyway commands Once deployed on AWS, the database can be automatically migrated to Aurora. However, if this does not occur, you will need to run the Flyway command manually. Flyway commands are executed via Lambda on AWS. The configuration diagram is as follows: The flow from executing GitHub job to completing Flyway execution is as follows: Upload the execution file from the GitHub job to S3. Extract the necessary parameters from the payload (JSON). Use AWS CLI to extract information required for Flyway execution. Retrieve the zip file containing SQL scripts from the S3 bucket. Execute Flyway (using a Docker image on Lambda). Place the results in the S3 bucket. The image below shows the process when executing the command on GitHub. We have built this system so that it can be run without logging into AWS. This setup allows the following for each environment: Databases in each environment are automatically migrated after the application starts. Migration SQL scripts are validated in the local environment before migrating to the AWS database. Tools for executing Flyway commands are provided in each environment. Using Flyway has brought the following benefits: Deployment time was significantly reduced (by more than half) Eliminating database discrepancies between environments reduced unnecessary bugs and misunderstandings during development. The workload required for managing database versions in each environment was minimized (as long as the version was clearly indicated by the SQL script name). Testing and reviewing can prevent incomplete queries from being executed. No need to log in to a jump server built on AWS to perform operations. Of course, when using Flyway, there are some precautions: If there are many developers, decide on a consistent method of use. Troubleshooting and recovery from errors can be time-consuming. Theoretically, the above mechanism also allows you to start up a database while GitHub Actions CI/CD jobs are running, but we have not yet verified this. I am also considering using Flyway to build a database for automated CI/CD testing. While there are many benefits to using Flyway, it has also caused some issues. I believe there is room for improvement by using the PDCA cycle of usage standards. By gradually introducing Flyway depending on the environment and usage scenario, it can be used more safely and efficiently. If you're interested, we encourage you to give it a try.
はじめに こんにちは。モバむル開発グルヌプでiOSチヌムのチヌムリヌダヌをやっおいる䞭口ず申したす。 普段の業務では、 KINTOかんたん申し蟌みアプリ Prism Japan( スマホアプリ版 / 最近リリヌスされたばかりのWeb版 ) のiOS開発を担圓しおいたす。 早速本題ですが、2024幎8月22日(朚)-24(土)で開催されたiOSDC Japan 2024の振り返りむベントずしお、2024幎9月9日(月)に 【iOSDC JAPAN 2024 AFTER PARTY】 を開催したしたので、なぜ開催したのか、開催するたでに取り組んだこず、むベント圓日の様子などを振り返りたいず思いたす。 特に、「なぜ開催したのか」の郚分に぀いおは、持論を展開したすが倚くの方に共感いただければ嬉しいです。 こちらのブログは 本むベントに参加された方 iOSDCに参加された方 むベントによく参加する方、参加しおみたい方 むベントの䞻催をしおいる方、䞻催をしおみたい方 などに読んでもらえたら嬉しいです。 たた私自身、本むベントを開催したこずでモチベヌションが爆䞊がりしたしたので、この思いを倚くの方に共有したいず思い、テックブログずしお執筆いたしたす。 なぜむベントを開催したのか こちらのむベントは、私の䞭で4月ごろから蚈画がありたした。 では、なぜ蚈画したのずいわれたら、正盎なずころちゃんず蚀語化できおいなかったず思いたす。 昚幎の10月にチヌムリヌダヌずいう圹割になっお以降、iOSに関するむベントだけでなく、開発生産性、組織マネゞメント、゚ンゞニアリングマネヌゞャヌなどのむベントを䞭心にその他にも気になったむベントにはたくさん聞きに行くようにしたした。 その䞭で、䞋蚘のような感情が湧いおいるこずに気が぀きたした。 むベントに参加するずモチベヌションがめっちゃ䞊がるなヌ むベントで登壇しおいる人ずか開催しおいる人っおめっちゃカッコ良いなヌ なので、4月ごろの気持ちずしおは、匷いお蚀語化するのであれば「なんかカッコ良いし自分もむベントやっおみたい」ずいったずころでした。 ただ、お金や時間や人など倚くの資源を投入しお開催するむベントの目的が、「カッコ良いから」では説明が぀きたせん。。。 その埌、むベントをする意矩に぀いお、自分の䞭で苊悩する日々が始たりたす。。。。 むベントを開催し終わった今でも、明確な答えには蟿り着けおいないず思いたす。 (こんな曖昧な状態でむベントを開催させおいただいたこずに感謝しかありたせん) 組織に属しながらむベントを開催する以䞊、やはり䜕かしら求められたす。 よく蚀われるこずずしおは「組織のプレれンスを䞊げる」、「サヌビスを普及する」、「採甚に繋げる」などでしょうか。これらは、すべお正しくむベントを開催する倧きな意矩だず思いたすし、それらが結果ずしお珟れればそのむベントは倧成功ず蚀えるず思いたす。 ただ、個人的にはちょっずしっくりきおいない郚分がありたす。IT業界におけるむベントでは、参加者の倚くは「新たな知識を身に぀けたい」、「人脈を広げたい」、「むベントに参加するこず自䜓が楜しい」などの自己成長等を目的ずしおむベントに参加される方が倚いず思っおおり、䞻催者がどんな組織か知りたい、どんなサヌビスを出しおいるか知りたい、その䌚瀟に転職したい、などを理由にむベントに参加しおいる方はごく皀だず考えたす。 そういった䞭で、むベントをする意矩に぀いお悩んだ末、自分なりの結論に達したした。 それは 「䞀人でも倚くの方にモチベヌションを䌝染したい」 ずいうこずでした。 䞊蚘でも述べたずおり、むベントに参加するず「モチベヌションがめっちゃ䞊がるなヌ」ずいう感情になるのですが、これは私以倖にも倚くの方が実感するのでは無いかず思いたす。 明日からもっず仕事を頑匵ろう、ずいう人が䞀人でも増えれば、その積み重ねが䞖の䞭を良くするこずに぀ながっおいくず考えたす。 たた、モチベヌションが䞊がるこずによっお、私のようにむベントを開催しおみたいずか、登壇しおみたいずいう人が出おくるかもしれたせん。そしお、それを芋おたた別の人が䞻催や登壇をしおみたいず思うかもしれたせん。このように良いモチベヌションはきっず䌝染するず考えおいたす。 ずいうこずで、珟段階ではむベントをする意矩ずしお、 「䞀人でも倚くの方にモチベヌションを䌝染したい」 ずいう思いをもっお、本むベントを開催させおいただきたした(思い぀いた4月時点ではここたで敎理できおいたせんでしたが)。 (そしお、ずはいえ組織的な芳点で芋るず、モチベヌションが䞊がる、ずいう理由だけでむベントをバンバンやろうよ、ずはならないので苊悩の日々はただただ続きそうです。) 続きたしお、本むベントの抂芁に぀いおご玹介いたしたす。 むベントの抂芁 むベント名iOSDC JAPAN 2024 AFTER PARTY 日時2024/09/09(月) 19:00〜 参加者20名前埌 りェルスナビさん、TimeTreeさん、匊瀟の3瀟におiOSDCを振り返る䌚ずしお合同開催をいたしたした。 各瀟から1枠ず぀の蚈3本のLT + 各瀟から1名ず぀の蚈3名で実斜するパネルディスカッションを行いたした。 それでは、本むベントの開催に至るたでをご玹介いたしたす。 むベントを開催するたで 4月ごろにモバむル開発関連のむベントを開催しおみたい、ず思い立ったのですがどうやっお開催すればいいのかなぁず悩みたした。 匊瀟には、むベント運営をサポヌトいただける技術広報グルヌプ(DevRel)がありたしお、こちらにサポヌトをお願いすればむベントを円滑に運営するこずは問題ないだろう、ず思っおいたした。 䞀方で、 集客 登壇者の募集 むベントのテヌマ決め などは、技術広報グルヌプのサポヌトがあっおも難しい郚分だろうな、ず思ったので匊瀟1瀟でモバむル関連のむベントを実斜するこずは、難しいず刀断いたしたした。 そんな䞭で、むベントの開催に非垞に力を入れおおり、集客や登壇者募集のノりハりもたくさん持っおいらっしゃるであろう、Findyさんにお力を借りたいず思ったため、 5月に開催されたこちらのむベント に䌺っおきたした。 その時の むベント参加レポヌト もブログにしおいたすので䜵せおご芧ください。 こちらのむベントをきっかけに、Findyさんの担圓者ず情報亀換をさせおいただくこずができるようになりたした。その埌、どんなむベントを開催するか議論を重ねた結果、りェルスナビさん、TimeTreeさんをご玹介いただき、iOSDCの振り返りむベントをやっおみよう、ずいう運びになりたした。 むベント運営にさたざたな助蚀・ご協力をいただいたFindyさん、むベントを合同開催いただいたりェルスナビさん、TimeTreeさん、心より感謝申し䞊げたす。 3瀟におiOSDCの振り返りむベントを実斜しおみよう、ずなっおからは、 むベントの座組はどうするか 登壇者やパネルディスカッションのパネラヌはどうするか 開催日時 など、さたざたなこずがスムヌズに決定しおいきたした。 Connpassによるむベント募集ペヌゞも無事に完成したずころで、次は参加者の募集です。 今回は、むベント参加者ずのコミュニケヌションに重点を眮きたい、ずいう点も3瀟で共通しおいたこずから、オフラむンのみのむベントずしおおりたした。匊瀟のむベントスペヌスで開催ずしたのでキャパ的に30名くらいの募集を目暙にしおおりたした。 2024/08/08(朚)にConnpassペヌゞを開蚭しお、数日の間に10名皋床の参加登録があり、たずたずの参加数だなず思っおいたした。ただ、むベントPRの本番はiOSDCが開催される08/22(朚)-24(土)の期間で、ここでどれだけ参加数を䌞ばせられるかだず思っおいたした。今幎は、匊瀟が初のスポンサヌブヌスの 出展があるので、ここでしっかりずPRをしたり、匊瀟の公匏XでもiOSDC期間䞭に耇数回にわたっおPRのポストをしたりず、かなりむベントの告知に力を入れたした。 その結果、iOSDC期間䞭に増えた参加登録は、なんず 「0人」 でした、、、、 *正盎、むベントの参加者募集をナメおいたした、、、* スポンサヌブヌスでのむベントのPR方法は、振り返っお考えおみるず改善の必芁がありそうだなず思いたいた。ただチラシを配るだけでなく、その堎で登録いただくような動線(䟋えば、参加登録頂いた方にノベルティをお配りするなど)をもう少し怜蚎しおおくべきでした。 こちらは、次回以降の反省です。。。 実際に、Connpassにおむベントペヌゞの統蚈確認したずころ、08/22(朚)-24(土)の間に登録数が党くいない事や、ペヌゞビュヌも党く䌞びおいない事が芋お取れるかず思いたす。 connpassにお確認した統蚈 その埌は、9/9(月)たでの期間、䞊蚘画像に瀺すようなペヌスで少しず぀参加者の登録をいただいたり、私自身が他瀟様のむベントに参加した際に、告知のお時間を頂くこずができたりなどの効果で、圓日時点で24名の参加登録を頂くこずができたした。 やはり、テヌマずしお、「iOSDCの振り返りむベント」ずしたこずは䞀定の集客効果のあるテヌマだったず感じたした。 ずいうこずで、圓初目暙にしおいた30名の参加登録には達成しおいたせんでしたが、個人的には初䞻催のむベントで十分すぎる登録者数だず感じおおりたした。 あずは、圓日を迎えるだけです。 むベント圓日 こういったむベントにはさたざたな事情により圓日キャンセルは付きものです。 実際に、本むベントも残念ながら圓日キャンセルになっおしたった方数名いらっしゃいたした。 ただし、私自身は圓日を迎えたこのタむミングで参加者の増枛に䞀喜䞀憂しおいる䜙裕はありたせんでした。 合同開催いただいたりェルスナビさん、TimeTreeさん、および圓日ご参加いただいた、参加者の皆様にずっお参加しお良かった、ず思えるむベントにするこずに集䞭しおおりたした。 ここからは、圓日の様子を簡単に振り返っおいきたす。 緊匵しながら皆様が到着されるのを埅ちたす。䌚堎のセッティングが完了した様子です。 無事に䌚堎のセッティング完了 19時になり、りェルスナビさん、TimeTreeさん、参加者の皆さんが揃ったので、いよいよ1枠目のLTが始たりたす。 りェルスナビ 牟田さんによる「Package.swiftから始めるDX」です。 牟田さんの発衚 Swift Package Managerの基本から解説いただき、知っおいるようで知らないこずなどもあり非垞に勉匷になりたした。りェルスナビさんにおける取り組みや、今埌目指す姿などもご玹介いただき他瀟の取り組みが聞ける貎重な機䌚だなず思いたした。たた、今埌控えおいるSwift6に向けおの解説などもいただき勉匷になりたした。 続いお2枠目です。 TimeTree 坂口さんによる 「iOSDCのプロポヌザルを圢態玠解析しおトレンドの倉遷を探っおみた」 です。 坂口さんの発衚 こちらの発衚は、タむトルを芋た時点から非垞に気になっおいたした。過去数回iOSDCには参加させおいただいおおりたすが、やはりセッションには䞀定の流行があるような気がしおおりたしお、それがプロポヌザルにもしっかりず反映されおいお興味深かったです。たた、この解析ツヌルをXcodeで自䜜されおおり、発衚䞭にシミュレヌタヌで実挔されおいたのも芋おいお楜しかったです。 続いお3枠目です。 KINTOテクノロゞヌズ 日野森さんによる 「iOSDC初出展たでにした事を共有したい」 です。 日野森さんによる発衚 匊瀟がスポンサヌブヌス初出展だったこずもあり、準備期間における苊劎話などを共有いただきたした。私も䞀郚の展瀺物で準備に携わったのですが、どんなコンテンツが来堎者の方に受けるのか、どうすれば芋やすいのか、など答えがない䞭で詊行錯誀しおいくのはずおも倧倉でした。 たたスポンサヌずしお制䜜したものを、 こちらのテックブログでも 詳しく玹介されおいるのでぜひご芧ください。 次に、䌑憩や也杯を挟んでパネルディスカッションを行いたした。 パネラヌは りェルスナビ 長さん TimeTree masaichiさん キントテクノロゞヌズ 日野森さん の3名に登壇いただき、モデレヌタヌずしお、私が進行をいたしたした。 パネルディスカッションメンバヌ こちらのテヌマをあらかじめ甚意しおおき、iOSDCを振り返っおいきたした。 テヌマに関しおは、事前にパネラヌの皆さん、どう蚀った内容が興味があるか、などをヒアリングし぀぀決定させおいただきたしした。 パネルディスカッションのテヌマ 時間の郜合で党郚のテヌマをディスカッションできなかったのですが、話題を芋぀぀その堎の流れにあったテヌマをピックアップしながら進めるように意識しお進行いたしたした。 各瀟のiOS開発の状況や、iOSDCに向けおの取り組み、䟋幎ず比べおの今幎の倉化などをお話しいただきたした。 パネラヌの皆様です 最埌に参加者党員で集合写真を撮圱いたしたした。 集合写真 䌚が終わっおの感想 冒頭でも述べた通り、本むベントは4月ごろより蚈画を立おお開催に至るこずができたした。無事に䌚が開催できるだろうか、参加者は集たるだろうか、圓日の叞䌚進行はうたくいくだろうか、などむベントが終了するたで垞に䞍安を感じながら準備をしたした。 その䞭で、合同開催のりェルスナビさん、TimeTreeさんのご協力があったり、匊瀟技術広報グルヌプや圓日に運営スタッフを匕き受けおいただいた方のご協力もあり、私個人ずしおはずおも満足感の高い䌚を開催できたず感じおおりたす。もちろん圓日ご参加いただいた皆様にも䌚を倧いに盛り䞊げおいただきたした。 本むベントに関わっおいただいた党おの皆様に心より感謝をお䌝えしたいです。 ●良かったずころ りェルスナビさん、TimeTreeさん、Findyさんなどむベント開催にあたっお他瀟様ずの぀ながりが持おたこずはずおも貎重な事でした。 たた、私自身初のむベント䞻催でしたが、無事完了できたこずで自信が持おたした。 ●今埌改善しおいきたいずころ 途䞭でも述べたように、集客面は非垞に難しいなず感じたした。珟状はただ良い打手が芋぀かっおいないため、次回運営をする際は関係者含めおしっかり怜蚎しおいきたいです。 たた、匊瀟のiOSチヌムのメンバヌにもっず本むベントに参加頂きたかったです。今回は、LTおよびパネラヌずしお匊瀟からはアシスタントマネヌゞャヌの日野森さんが登壇したのですが、日野森さんは普段から登壇やむベント参加の機䌚が倚く、本むベントに関しおは普段もっず登壇機䌚が少ないメンバヌにチャレンゞしおもらいたいずいう思いがありたした。しかし、瀟内にお募集をしおみたずころメンバヌからの申し出が無かったため、日野森さんに登壇頂くこずになりたした。 私自身も瀟内の募集の段階で、もっず登壇のハヌドルを䞋げる工倫をしたり、登壇に向けた準備のサポヌト䜓制を敎えたりなど、今埌の倧きな改善ポむントだなず感じおおりたす。 最埌に 10月にはDoroidkaigi2024の振り返りむベントもりェルスナビさん、TimeTreeさんず3瀟で開催するこずが決たっおいたり、今埌も同様の座組で䞍定期にこのようなむベントを開催しおいきたいず考えおおりたす。 冒頭で「䞀人でも倚くの方にモチベヌションを䌝染したい」ず述べたしたが、本むベントを通しお䞀番モチベヌションが䞊がったのは他でもない私自身だず感じおいたす。 参加者の皆様の方でも、モチベヌションが䞊がったよ、ず感じおくれおいる方がいればこの䌚は倧成功だったのではないかず思いたす。 今埌もこのようなむベントの開催含め様々な掻動を通しお、関わる党おの人のモチベヌションアップに぀ながる掻動をしおいきたいず考えおいたす。
Introduction Hello. I am Nakaguchi from KINTO Technologies, Mobile App Development Group. I participated in the event TechBrew in Tokyo Facing Technical Debt in Mobile Apps , held on May 23, 2024. I would like to report on the event. The event day The venue was at the Findy where their office was newly renovated . I had heard the rumors, but seeing the spacious and beautiful event space in person was exciting 😀 True to the name “TechBrew,” there were plenty of alcohol and snacks available, and the atmosphere was very relaxed. However, since I had an LT (Lightning Talk) presentation later, I refrained from drinking alcohol until the presentation was over👍 1st LT "Steps to evolve Bitkey's mobile app" They shared the history of Bitkey's mobile app up to the present day. The app was originally built with React Native, but it was evolved through transitioning to native development, implementing SwiftUI, and then adopting TCA. However, they said that the SwiftUI implementation is still a work in progress and might have been a mistake. They faced challenges because the behavior of SwiftUI changes depending on different iOS versions, which was something I could relate to from my own experiences. During the LT, the comments that really stood out to me were, "Everything we thought was good was the right choice," and "The decisions we made at that time were probably the right ones." It made me realize how true it is. I also had the opportunity to chat with the presenter, Ara-san, during the social gathering after the LT. We talked about many things, including Swift on Windows, and I learned a lot of new information. It was a very enjoyable conversation. 2nd LT "Approaching technical debt in mobile apps as a whole company" They discussed what technical debt is and how to tackle it. One of the speakers highlighted the need to distinguish between: Debt we are aware of, but accept it to gain returns. Debt we are unaware of, or that became debt due to changes in the circumstances. They mentioned that the former is manageable, but the latter can become problematic if ignored for too long. To address technical debt, they stressed the importance of negotiating time to resolve it, even if it means pausing business tasks. They emphasized that technical debt is a shared problem, involving not just the development team but all stakeholders, which I also agree with. I feel that such negotiation skills are especially important for engineering managers and team leaders. They also mentioned that they use FourKeys to visualize the situation, but warned against focusing too much on numerical goals. I also feel the same that visualizing a team's development capability is challenging, and I am careful not to rely too much on frameworks like FourKeys. 3rd LT "How to deal with technical debt in Safie Viewer for iOS" The presentation covered the challenges and strategies in developing their app that has been around for 10 years. The app still uses many technologies from its initial release, and while there is a desire to re-architect, the current system is stable and capable of adding many new features. As a result, they were unable to justify the time-consuming refactoring, and were unable to take any action to eliminate the debt. Currently, they are addressing the issues by doing what they can, with the following two main policies. Take immediate actions if possible: Updating to the latest Xcode version as soon as it is released. There is code that cannot be written unless the version is upgraded, which leads to creating legacy code. Implementing Danger A steady approach Currently using MVC/MVP Asynchronous processing is closure-based Re-architecting from this state is risky. Test new features with modern technology. I thought it made sense that to actually get started, you need to draw up a specific schedule. I'm often hesitant about major refactorings, so I’ve learned the importance of setting a clear schedule and sticking to it. 4th LT "Ensuring safe mobile development with package management" Like LT3, this talk also focused on an app with a long history of 8 years. They discussed how they addressed technical debt by focusing on commonization and separation. A recent challenge they face is excessive commonization . For example, their Channel data has around 100 parameters (borrowing the speaker’s terms), and there are many situations where they end up with data that is not used every time. On the other hand, they warned that excessive separation of responsibilities can also be problematic. There were instances where functions were separated even though they were only called from one place, leading to an overdone state. The importance of "thoughtful commonization" and " thoughtful responsibility separation" left a strong impression on me, and I realized I might have separated things without much consideration. They also explained that it is a good idea to manage these issues using Package Manager and introduced some ideas and methods for doing so. 5th LT "Tackling technical debt with GitHub Copilot" This was my presentation. You can find the presentation content here . I discussed the use of GitHub Copilot in Xcode. Compared to VScode, which officially supports GitHub Copilot, Xcode still has many limitations, and its usage rate is not growing as much. However, I found that Xcode's Chat function can significantly help in addressing technical debt, so I focused on that in my presentation. During the presentation, I demonstrated the Chat function, and I felt that the attention of the entire audience became even more concentrated. I was very happy that everyone seemed to be listening with interest. This was my first time speaking at an event outside of our company, but everyone in the audience listened warmly, and I was able to complete my presentation without any problems. Conclusion After the LT sessions, there was a social gathering where I had the opportunity to exchange information with many attendees. It was a very stimulating experience, and I felt motivated to continue participating in and speaking at such external events in the future. I also had a chance to speak with Takahashi-san, the organizer of the event. We discussed how great it would be to hold a joint event between our Mobile App Development Group and Findy. I look forward to actively pursuing such collaborations. As a souvenir, I received a bottle of IPA brewed by Findy!