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

TECH PLAY

KINTOテクノロゞヌズ

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

å…š1132ä»¶

こんにちは こんにちは、2025幎2月入瀟の hayashi-d1125 です 本蚘事では、2025幎2月入瀟のみなさたに、入瀟盎埌の感想をお䌺いし、たずめおみたした。 KINTOテクノロゞヌズ以䞋、KTCに興味のある方、そしお、今回参加䞋さったメンバヌぞの振り返りずしお有益なコンテンツになればいいなず思いたす 䜐竹 康晎 自己玹介 新サヌビス開発郚 プロゞェクト掚進Gの䜐竹です。 瀟内で新たに䌁画するプロダクトやプロゞェクトのPdM/PMを担圓しおいたす。 所属チヌムの䜓制は プロゞェクト掚進G党䜓で15名、私が所属するPMのチヌムは6名の䜓制になりたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった トペタグルヌプの内補䌚瀟ずしお、瀟内組織や䜓制が高床に組み䞊げられおおり、想像以䞊の内補組織でびっくりしたした。 珟堎の雰囲気はどんな感じ 䞍明なこずに察しお情報やアドバむスをもらえるなど、チヌム内での盞互フォロヌ関係ができおおり、出瀟時にはランチ、業務埌や週末には飲み䌚や䞀緒に出かけるなど、郚眲の垣根を越えた亀流も盛んで、掻気がありたす。 ブログを曞くこずになっおどう思った 入瀟前に読んでいたテックブログにこんな早々にブログ投皿するこずになるずは思っおもみたせんでした。 倧倉光栄ですし、色々なこずを発信しおいくこずは奜きですので、今埌も機䌚があれば積極的に投皿させおいただきたいず思いたす。 工藀 啓さん → 䜐竹 康晎さんぞの質問 他郚眲のメンバヌずの関わりなどどのようにされおいたすか Bear BashやKTC内の郚掻など他郚眲メンバヌず亀流できる機䌚に積極参加しお繋がりを広げおいたす。 特にBear Bashでは䌚堎BGMずしおDJを披露したおかげで、倚数の方ず亀流するこずができたした 脇坂 友里絵 自己玹介 開発支揎郚 䌁画管理Gで請求や予算など、KTCのお金に携わるバックオフィス業務を䞻に行っおいたす。 所属チヌムの䜓制は 6名䜓制で分担しながら業務を行っおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 思っおいたよりも意思決定から行動たでのスピヌドが早く驚きたした 珟堎の雰囲気はどんな感じ 珟堎の雰囲気ずしおはずおも協力的だず思いたす。 各拠点にチヌムメンバヌがいるのでリモヌトでのやり取りが倚いのですが、定期ミヌティングを行うなど業務がスムヌズに進むようにコミュニケヌションを増やしおいたす。 ブログを曞くこずになっおどう思った 文章を曞くこずに察しお苊手意識はあるのですが、いい機䌚だなず前向きに捉えおいたす。 䜐竹 康晎さん → 脇坂 友里絵さんぞの質問 入瀟しおみお、今たで勀務されおいた䌚瀟ずは異なっおいたのはどんなずころでしょうか 䌚瀟ずしお勉匷䌚やセミナヌなど、孊ぶこずに察しおの投資は惜しみなくされおいるのかなず思っおいたす。 楊 小韍 自己玹介 業務システム開発郚Salesforce開発Gの楊です。 Kinto Factory保守開発を担圓しおいたす。 所属チヌムの䜓制は 自分を含めお党 6 名のグルヌプです。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 「自由」だず感じたす。 服装も、出瀟時間も 珟堎の雰囲気はどんな感じ チヌム党員が優しく、わからないこずがあったら聞きやすいです。 ブログを曞くこずになっおどう思った 感想類の文曞を曞くこずが苊手ず思いたす。。。 脇坂 友里絵さん → 楊 小韍さんぞの質問 入瀟埌、䞀番困ったこずを教えおください MTG、しゃべりで、時々わからない蚀葉がありたす。 今も日本語を頑匵っお勉匷しおいたす 林田 掋平 自己玹介 プラットフォヌムグルヌププラットフォヌム゚ンゞニアリングチヌムの林田です。 KTC の開発チヌムのために各皮ツヌルの開発・提䟛・メンテナンス等を行っおおりたす。 普段は Osaka Tech Lab で働いおおりたす。 所属チヌムの䜓制は Osaka Tech Lab に3名。 神保町オフィスに6名の䜓制で仕事をしおおりたす。 拠点が離れおいるのでやりずりは Slack や Teams 等のコミュニケヌションツヌルを䜿っお行っおおりたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 創業しお僅か玄4幎の䌚瀟ずは思えないほどに色んな制床やフロヌが敎っおいる䌚瀟だず思いたした。 䞀方で自チヌムに関しおは、ただ未敎備な郚分も倚くこれからチヌムビルディングに関われる機䌚も倚そうで楜しみに思いたした。 珟堎の雰囲気はどんな感じ 私が勀務しおいる Osaka Tech Lab はもずもず1名だったのですが、私が入瀟した時点でやっず3名になりたした。 雰囲気ずしおは拠点が離れおいるぶん、ただ神保町オフィスのトレンドに付いお行けおいない印象があるので、コミュニケヌション面で課題を感じたした。 ブログを曞くこずになっおどう思った 前職でも曞いおいたので特に苊手意識や違和感はありたせんでした。 しかしネタ探しは䌚瀟が倉わっおも倉わらず倧倉なので笑日頃から新しい技術に積極的に觊れるようにしおネタに困らないようにしなければず思っおおりたす。 楊 小韍さん → 林田 掋平さんぞの質問 䌑みの日どう過ごしたすか 劻ず子の5人家族なのでもっぱら家族サヌビスに粟を出しおおりたす。 先週は家族5人で車で愛知県の䞭郚囜際空枯セントレアに遊びに行っお来たした。 兒玉 桜 自己玹介 デヌタ分析郚 分析プロデュヌスG でデヌタ分析をしおいたす。 所属チヌムの䜓制は 䞊長先茩4名自分 KTCぞ入瀟したずきの第䞀印象ギャップはあった 入瀟オリ゚ンテヌションが手厚くお驚きたした。 それ以倖は事前にお聞きしおいた通り適床() に自由な印象を受けおいるので、ギャップはありたせんでした。 珟堎の雰囲気はどんな感じ みんな穏やかで優しい。 しかし仕事はプロフェッショナルずいう謎のギャップにやられおいたす。 (プロフェッショナル怖いずいう先入芳あり) ブログを曞くこずになっおどう思った 話をお聞きしたずきは、正盎「めんどうだな」ず思いたした。 が、実際に蚘事を曞いおいるず自分の珟圚地の再確認にもなりやっお良かったなず感じたした。 䜕事も挑戊する事が倧事だなず思いたした。 林田 掋平さん → 兒玉 桜さんぞの質問 デヌタ分析のお仕事をしようず思ったきっかけは アりト゜ヌシング業界にいたある時、急遜欠員が出たクラむアント先の穎埋めずしおたたたた配属されたのがアクセス解析チヌムでした。 そんな仕事がある事すら知らなかった未経隓状態で始たったのですが、業務にあたるうちに深めたくなっおしたい珟圚に至りたす。 小川 就也 自己玹介 業務システム開発郚 Salesforce開発G 小川です。 Factory BOシステムの保守を担圓しおいたす。 所属チヌムの䜓制は マネヌゞャヌ1名メンバヌ5名でSalesforceの運甚保守、デヌタ連携、Salesforceが関連するプロゞェクト察応を行っおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 技術者集団=ある皋床の技術力や知識が無いず質問や盞談しにくいのではず思っおいたしたが、気軜に質問/盞談できる雰囲気でした。 レスポンスもずおも早く、芪身に察応しおくださる方が倚いです。 珟堎の雰囲気はどんな感じ 入瀟したずきの第䞀印象、ギャップにも曞きたしたが、ずおも気軜に質問/盞談ができる雰囲気です。 ブログを曞くこずになっおどう思った 今たでブログを曞くこずをやったこずが無かったので、機䌚をいただけたこずに感謝しおいたす。 兒玉 桜さん → 小川 就也さんぞの質問 仕事の合間や䌑憩時間、どのようにリフレッシュしおいたすか 圚宅勀務時は昌䌑憩に30分皋ランニングしおたす。 ランニング䞭は考えおいる䜙裕が無くなるので匷制的に無心になれたす。 出瀟時はただ暡玢䞭です。 安田 早垌 自己玹介 プラットフォヌム開発郚 Cloud InfrastructureGに所属ずなりたした、やっさんです。 郚眲名の通り、サヌビス基盀のクラりドむンフラの郚分を担圓しおおりたす。 所属チヌムの䜓制は クラりドむンフラGずしおは9名䜓制ですが、さらに现かくチヌムが分かれおおりたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった ルヌルずか非垞に硬いむメヌゞを持っお入瀟したのですが、実際は䞊䞋関係なく接しやすく、チャットでもスタンプが飛び亀うような和気あいあいずしおいたこずが、ギャップでしたね。 珟堎の雰囲気はどんな感じ 前職では、「静かに、音を立おない」ずいった雰囲気だったこずもあり、なかなか業務のこずを盞談しずらかったのですが、今はすぐに盞談できる状況ですし、チヌム仲がよいので出瀟メンバヌで必ず、ランチを食べに行っおいたす♪ ブログを曞くこずになっおどう思った 入瀟前に芋おいたので、自分も曞くこずになったのかず、感慚深いです 小川 就也さん → 安田 早垌さんぞの質問 神保町オフィス呚蟺でおすすめの飲食店はありたすか 先日行った、「森のブッチャヌズ」ずいうお店がおすすめです。 ランチメニュヌで、ビヌフやポヌクのステヌキが食べ応えあっおよかったです。 11時半ごろに行っお30分埅ちたしたが、䞊ぶ䟡倀がありたした 工藀 啓 自己玹介 モビリティプロダクト開発郚゚ンゲヌゞG配属になりたした工藀です。 販売店様内の業務DX化支揎を行いたす。 所属チヌムの䜓制は チヌムはMgr含め3名ですが、郚内の開発担圓チヌムやKINTO営業郚ずも協業しながら販売店様に入り蟌みDXニヌズを聞き出しおいきたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった ゚ンゞニアが呚りにたくさんいるなヌずいう印象。 これたで゚ンゞニアずがっ぀り仕事をしたこずがなかったので皆さんのモニタヌ画面がコヌドばかりなのが新鮮でした。 珟堎の雰囲気はどんな感じ 珟堎に蚪問するこずが倚く、瀟内にいないこずが倚いのですが、党員販売店様ファヌストで提案を考えおいるこずに刺激を受けたす。 ブログを曞くこずになっおどう思った 䌚瀟のブログに携わるこずがこれたでなかったのでこの内容が発信されるず思うず、本圓に倧䞈倫かなず心配になりたす。 安田 早垌さん → 工藀 啓さんぞの質問 ゚ンゲヌゞメントを高めるために生成AIを䜿うずしたら、どのようなものがあるず思いたすか お客様ぞの代替車皮提案業務など既に、生成AIを掻甚したプロダクトがありたす。 他にも瀟内問合せ業務の効率化に掻甚するなど、販売店様ぞの業務DXにおいお掻甚のシヌンはかなり倚いず思いたす。 さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTO テクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが増えおいきたすので、楜しみにしおいただけたしたら幞いです。 そしお、KINTO テクノロゞヌズでは、ただたださたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは こちら からご確認ください
Introduction Hello, I'm kh, and I came on board this September! In this article, we asked those who joined the company in August and September 2024 about their impressions immediately after joining the company, and summarized them. I hope this content will be useful for those who are interested in KINTO Technologies, and serve as a reflection for the members who participated in the interview. Naito Self-introduction I work in the Engineering Office. I'm involved in improving processes across different product teams. What is the structure of your team? The Engineering Office was just established in January and consists of two people. What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? Thanks to the interviews and chats I had before joining, there weren't any major surprises. The company has offices in Tokyo, Nagoya, and Osaka, with people frequently coming and going between them. On my very first day, I met several colleagues from the Nagoya office and thought, 'Wow, Nagoya’s actually pretty close! As I started chatting with more people in the company, I realized how embedded "kaizen" is in everyday work. Everyone knows about the Toyota Production System (TPS), which impressed me. What is the atmosphere like on-site? I've been reaching out to various development teams for chats and advice, and everyone has been genuinely kind. I really appreciate how they loop me in and make me feel part of things! How did you feel about writing a blog post? I had been reading tech blogs before I joined the company. So being on the writing side now feels pretty exciting. Question from Mari: Why did you choose this company? Cars are a familiar part of my daily life, so the domain naturally caught my interest. On top of that, I felt like KTC is a company that's going to keep evolving—and I wanted to be part of that journey and enjoy the changes firsthand. R.Y. Self-introduction I'm originally from Hong Kong and moved to Japan in 2023. After graduating, I joined KTC this August, and now I'm part of the Security & Privacy Group. What is the structure of your team? In the Security & Privacy Group, we're divided into teams based on our responsibilities. I'm on the Defense Team, where I mainly handle vulnerability assessments and respond to security consultation tickets. What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? The office is really spacious, with lots of open areas that everyone can use freely. There are also plenty of study sessions and social events, so you get the chance to pick up knowledge beyond your daily work. What is the atmosphere like on-site? Everyone is friendly and easy to talk to. In addition to work, there are all kinds of Slack channels for hobbies and local topics, so it's easy to connect with others who share your interests. How did you feel about writing a blog post? Looking back on everything I've experienced over the past three months—and getting to share it with future team members—makes me genuinely happy. Question from Naito: I'd love to travel to your hometown, Hong Kong. Please let me know if you have any recommendations for sightseeing or food! If you're a Disney fan, Hong Kong Disneyland is a must. The park is compact, so it's easy to explore the whole park in one day. When it comes to food, Hong Kong has tons of delicious local comfort food. Some examples of must-tries: chewy and bouncy curry fish balls, fish-meat shumai, and rich, bold-flavored Hong Kong-style milk tea. Eating on the go is common in Hong Kong, so dive in and enjoy the experience of this culture. (By the way, you can try some popular Hong Kong eats right here in Japan too—check out the Tam Jai Sam Goh Official Website if you're curious.) tHyt Self-introduction Hi, I'm tHyt from the Mobility Product Development Division. While I take on some engineering lead responsibilities, I mainly work as a front-end engineer. What is the structure of your team? Our team has nine members, with specialists across front-end, back-end, and infrastructure. It's a well-rounded crew. What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? Since the company is still relatively young, I expected some areas might be underdeveloped in terms of systems and structure—but to my surprise, everything was impressively well organized. What is the atmosphere like on-site? I'm based at the Osaka Tech Lab, and since the members aren't many, there's always chatter happening across teams. It keeps things interesting. All of my team members except for myself work in the Muromachi office, but we enjoy working together through daily meetings and business trips. How did you feel about writing a blog post? I knew about these new joiner blog posts even before I joined the company, and the day has finally come for me to write one...! That's how I feel. I'm looking forward to using the tech blog to share more than just intros! Question from R.Y.: After joining the company, was there anything you struggled to get used to? How did you overcome it? Hands down, business trips. Since I'm the only one in my team based in Osaka, I travel to Tokyo about once a month to help keep communication flowing. (Huge thanks to the company for supporting that!) Before joining KTC, I had only ever been on one business trip, and I rarely took the Shinkansen—so at first, I was pretty anxious about it all. But now, I've gotten used to it and have no trouble traveling. Remote communication works well, but face-to-face interaction is different. I'd definitely like to keep that going. kh ![](/assets/blog/authors/kh/kh.png =250x) Self-introduction I'm part of the Analysis Group. My work mainly involves building the data infrastructure and collecting the data needed for analysis. What is the structure of your team? There are 10 people including the leader, myself, and folks from partner companies and temporary staff. What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? Since KTC is still a relatively new company, I was expecting a fast-paced, startup-like vibe. But it actually felt more relaxed—in a good way. What is the atmosphere like on-site? We are a group of people with a variety of backgrounds, and everyone brings something different to the table in a friendly vibe. How did you feel about writing a blog post? I’d known KTC was active with tech blog posts, so writing this felt like taking that first step into being part of that culture. Question from tHyt: Got any tips for data analysis? Well, I actually focus more on building the data infrastructure rather than doing the analysis itself, so this might not be the exact answer you were expecting. But no matter how great your data analysis is, it won't be helpful if the data quality is poor. Ensuring data quality at the platform level is, in my view, the essential first step in any successful data analysis. woshahua Self-introduction Hi, my name is Gao. I work in the Woven Payment Solution Development Group! I'm a Chinese-born engineer with a solid Kansai dialect—it's stuck with me completely. My hobbies are basketball, sauna and poker. Recently, I've been working on a personal app that analyzes poker win rates—just for fun! What is the structure of your team? Our team is primarily made up of engineers, and we also work together with engineers from Woven. What I really like is that, no matter which organization we’re part of, everyone's aligned and moving together toward the same goals. What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? Even though KTC's attempt is still relatively new in the automotive field, it struck me as a company actively taking on a wide range of services and development projects. No big surprises, but I was honestly impressed by how much the company encourages technical sharing—and how there are study sessions going on nearly every week. What is the atmosphere like on-site? It's an environment where you're encouraged to explore all sorts of technologies, regardless of your past experience. Whenever I run into a roadblock, someone on the team is always quick to jump in and help. I really appreciate how supportive everyone is. How did you feel about writing a blog post? Both the company and the team are big on promoting tech knowledge, so I'm excited to contribute and share more going forward! Question from kh: I heard that you have a pet. Does living with a pet affect your daily life or work? Yes! I have a guinea pig at home, and just watching it after work is incredibly soothing. Being able to work remotely means I can spend more time with my pet, which I love. I truly think having emotional breathing room at work makes a difference in performance. My guinea pig helps ease the stress and gives me a nice mental reset! Mari Self-introduction I'm a team member of the Development Support Division, Human Resources Group, Talent Acquisition Team. We are recruiting mainly engineers. What is the structure of your team? There are six of us, including myself—and starting in January, we'll all be working from the Muromachi office! What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? The office is lovely! All the engineers are easy to talk to—cheerful, approachable, and just fun to be around. What is the atmosphere like on-site? The atmosphere is joyful and open—everyone's kind, and honest. It's full of people who are not only hardworking but also genuinely considerate of those around them. How did you feel about writing a blog post? I wasn't sure what to write at first, but I ended up going with an honest take on how I’m feeling right now! I also got inspiration from reading everyone's blog posts! Question from woshahua: How do you refresh yourself during work or on your days off? During work, I like to go for short walks to clear my head. On my days off, I try to stay active—going out or hitting the gym whenever I can. C4 ![](/assets/blog/authors/kh/20250123/c4.jpg =250x) Self-introduction I'm am part of KTC, but currently seconded to the KINTO Administration Department, where I mainly handle general office operations. My MBTI type is ISFJ-T, so I think I'm naturally suited for administrative work, though that might just be wishful thinking. What is the structure of your team? There are eight of us working at the Nagoya office, including myself. What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? My first thought was, "Oh, this office is really stylish." It was my first time working in an office, and I imagined it to be more formal, but the atmosphere in the team is relaxed and friendly, and we often go out to eat outside of work, so I think there is a lot of communication. What is the atmosphere like on-site? Not just my team, but everyone around me has been incredibly kind. Even when I ask questions during busy times, no one has ever reacted negatively or made me feel like a bother. We have weekly 1-on-1s and team meetings, which help me stay in the loop about what others are working on—even if I'm not directly involved—and I'm really grateful to have regular chances to talk through any challenges in my own work. How did you feel about writing a blog post? To be honest, I wasn't sure if a story from a non-engineer like me—doing admin and general affairs—would even be useful on a tech blog (laughs). But here I am, giving it a shot. Question from Mari: My MBTI is ESFP! The results were eerily accurate, especially the part about struggling with details. What about you? Was ISFJ-T accurate for you? What parts hit home? Oh, yes. Some parts hit a little too close to home, like "resistant to change," "perfectionist," and "self-critical" (ouch, right? lol). And that mindset of "If it makes someone else happy, I'll put myself second"—yep, that one definitely checks out. So yeah, I'd say the result was pretty spot-on. MBTI is great for self-reflection. I definitely recommend giving it a try!! Mari Self-introduction I'm a UI/UX designer in the Retailer Digital Transformation Planning Team, part of the Mobility Product Development Division's DX Planning Promotion Group. I design products that support the digital transformation of dealership operations. What is the structure of your team? We've got one team lead, three directors, and four designers (including me). What was your first impression of KTC (KINTO Technologies) when you joined? Were there any surprises? Since the parent company is big, I expected a lot of structure—and that's definitely true. But at the same time, the atmosphere is surprisingly free and relaxed. No real surprises after joining. What is the atmosphere like on-site? It's busy and we've got a lot on our plates. But that just makes the work more rewarding. The team's full of energy, and everyone gets along great. Very positive and easygoing environment. How did you feel about writing a blog post? I wasn't sure what to write at first, but ended up just sharing how I genuinely feel! I'm also looking forward to reading everyone else's posts! Question from C4: I heard you have a cat at home! I live with five myself. What's one product your cat absolutely loved? (Snacks, toys—anything!) Five!! Amazing! 🥰 My cat's a bit of a diva—most things get the “how dare you present me this peasant toy” treatment. That said, Churu treats is her one true weakness—especially the premium ones with fancy ingredients. Total game-changer 😂 Also, not sure how she feels about it, but I got a Miruto automatic litter box—makes my life way easier and has been super helpful! Oh, and the cat tower I bought? She's never touched it. After a month of rejection, it sadly became oversized trash
 Finally Thanks to everyone who shared their first impressions after joining! There are more and more new members at KINTO Technologies every day! We'll be posting more new-joiner stories from across divisions, so stay tuned! And yes — we're still hiring! KINTO Technologies is looking for new teammates to join us across a variety of departments and roles. For more details, check it out here !
はじめに こんにちは KINTOテクノロゞヌズでWeb゚ンゞニアをしおいる亀山です。 珟圚はマヌケティングプロダクト開発グルヌプずいう郚眲に所属しおいたす。 今回はサヌバレス構築に぀いおお話ししたす。 ECSなどのコンテナが垞時起動しおいるアプリケヌションは、皌働しおいる間、たずえリク゚ストが来なくおも起動しおいる時間分のリ゜ヌスCPUやメモリに察しお課金が発生したす。そのため、PoC開発や極端にリク゚ストが少ないプロダクトにおいおは特に「 䜿っおいないのにお金がかかる 」状態になりがちです。 そのようなプロダクトに察しおは、䜿っおいる間だけサヌバヌが立ち䞊がり、䞀定時間凊理が行われないず自動で停止するような埓量課金型のサヌバレスアヌキテクチャによっおランニングコストを倧幅に抑えるこずが可胜になりたす。 そこで私たちは䞋蚘の芁点でLambdaアプリケヌションを構築したした。 AWSのAPI Gateway + Lambdaでサヌバレス開発 TypeScript + Expressでシンプルか぀汎甚的なAPI開発 サヌバレスに぀いお AWSのサヌバレス構成ずしお広く甚いられおいるLambdaを採甚したしたLambdaはサヌバレスアヌキテクチャであるため、先にも述べたしたが、サヌバヌの起動・停止やスケヌリングを自動で行っおくれ、䜿った分だけ課金される埓量課金制でコストを最小限に抑えられたす。 䞀方でこのようなサヌバレスAPIのデメリットずしおは、 コヌルドスタヌトによる応答遅延 が発生する点がありたす。特にリク゚スト数の少ない環境や、䞀定時間アクセスがないずきにLambdaがスリヌプ状態になり、再床リク゚ストが来た際にコンテナの起動時間実枬倀ずしお応答時間玄1秒がかかるずいう特性がありたす。 たずめるず、 ずにかくサクッずプロトタむプを構築したいであったり、応答遅延を蚱容できるようなナヌザヌ䟋えば瀟内メンバヌ向けのツヌルを構築したいずいう方には特におすすめな むンフラ構成になりたす。 Lambdaでどれくらい費甚が安くなるのか 垞時実行コンテナのFargateず今回䜿甚するサヌバレス型のLambdaで料金比范をしおみたす。 Fargate AWS Fargateの料金に぀いお 0.5 vCPU でメモリ2GBを想定しお1時間あたりの1タスク皌働費甚は vCPU料金: 0.5 vCPU * $0.04048 / vCPU-時間 = $0.02024 / 時間 メモリ料金: 2GB * $0.004445 / GB-時間 = $0.00889 / 時間 ずいう蚈算から1時間あたり合蚈費甚は $0.02024 + $0.00889 = $0.02913 ずなり、 そのため1ヶ月720時間皌働するずするず$0.02913 * 720時間 = $20.9736 が1タスク月圓たりかかりたす。ただし、倜間停止やvCPUスペックダりンによっお節玄するこず可胜 これは1環境あたりの費甚なので本番環境、開発環境など耇数の環境が必芁であればその数だけ掛け算されたす。 Lambda AWS Lambdaの料金に぀いお 䞀方でLambdaはリク゚スト件数ずリク゚ストによっお䞀時的に起動するコンテナの蚈算時間コンピュヌティング時間によっお蚈算されたす。 GB-秒あたり0.00001667 USD 1,000,000 件のリク゚ストあたり0.20 USD Fargateず同様の2GBで、1リク゚ストあたり0.5秒の蚈算時間、さらに1ヶ月あたり10䞇件のリク゚ストであるず想定するず月圓たりの合蚈費甚は$0.02 (リク゚スト費甚) + $1.6667 (蚈算費甚) = 箄 $1.69 が月圓たりかかりたす。 さらに良いこずに、環境を増やしたり、1環境あたりのLambda数を増やしたずしおも、合蚈リク゚スト数が同じであれば䞊蚘ず同じ金額になりたす。 これらの蚈算シミュレヌションからLambdaのコスト面での優䜍性がわかるず思いたす。 特に売䞊の出ないか぀トラフィックの少ない瀟内向けツヌルであったり、PoCのプロダクトであればこのような費甚削枛は特にメリットが倧きくコスト面でのハヌドルを䞋げおくれるこずが期埅できたす。 Expressに぀いお サヌバサむドJSのフレヌムワヌクずしおExpressを採甚したした。 ルヌティングやミドルりェアの抂念が盎感的に理解できるように蚭蚈されおおり、初めお Node.js でサヌバサむド開発を行う開発者にずっおも扱いやすい構成ずなっおいたす。小芏暡なAPIから䞭〜倧芏暡なアプリケヌションたで、スムヌズに拡匵できる蚭蚈が可胜です。たた、ルヌティングの蚘述も簡朔です。 app.get('/users/:id', (req, res) => { res.send(`User: ${req.params.id}`); }); ログ出力には morgan、認蚌凊理には passport、入力バリデヌションには express-validator など、甚途に応じお豊富なミドルりェアのラむブラリを簡単に組み蟌むこずができたす。これにより、アプリケヌションの機胜远加や保守が容易になりたす。 AWS公匏で配垃されおいるLambdaラむブラリを甚いお゚ンドポむントを構築するこずも可胜ですが、汎甚ラむブラリであるExpressを甚いお構築しおおけばアプリケヌションの芏暡が拡倧したタむミングでECSやApp Runnerに転甚する際に゚ンドポむント以降のコヌドを転甚するこずもLamda特化のラむブラリを䜿甚するより容易になりたす。 開発方針 本蚘事では、 1぀のLambda関数に耇数の API ゚ンドポむントをたずめお搭茉する構成 を採甚しおいたす。 これは、Lambdaの特性である「ホットスタヌト」を掻甚するためです。 Lambda関数は䞀床起動されるず、䞀定時間はメモリ䞊に残り続ける「ホットスタヌト」の状態になりたす。そのため、1぀のAPIがリク゚ストされお Lambdaが起動されたあずは、同じ関数内の他のAPIに察するリク゚ストも高速に凊理できるようになりたす。 この性質を掻かすこずで、操䜜時のパフォヌマンスの向䞊が期埅できたす。 ただし、Lambdaにはデプロむ可胜なパッケヌゞサむズに制限zip圧瞮時で50MB以内か぀展開埌で250MB以内があるため、アプリケヌション内すべおのAPIを1぀の関数に詰め蟌むず最終的にこの䞊限に到達するため、珟実的ではありたせん。 そのため、 画面単䜍や機胜単䜍で関連のあるAPIを同䞀の Lambda関数にたずめる構成 ずし、最終的には1぀のリポゞトリで耇数の Lambda関数を管理しおいくmonorepo構成を前提で進めおいきたす。 たた本蚘事ではSAMによるロヌカル実行できるようにするたでをゎヌルずし、AWSコン゜ヌルの蚭定やデプロむ以降のお話は割愛させおいただきたす。 環境構築コヌディングたでの準備 本蚘事では耇数の Lambda関数や共有コヌドを管理しやすいpnpmにAWS SAM を組み合わせた環境構築方法を説明したす。 プロゞェクト党䜓を pnpm のワヌクスペヌスずしお管理し、各 Lambda関数や共通ラむブラリを独立したワヌクスペヌスずしお扱いたす。デプロむツヌルにはAWS SAMServerless Application Modelを利甚したす。 䞻に以䞋のツヌルが必芁になりたす。 Node.js pnpm AWS CLI AWS SAM CLI Git (バヌゞョン管理) Gitのむンストヌルは割愛したす。 必芁なツヌルのむンストヌル Node.js これたでず同様に Node.js が必芁です。公匏サむトから LTS 版をむンストヌルしおください。 Node.js公匏サむト むンストヌル埌、以䞋のコマンドでバヌゞョンが衚瀺されるこずを確認したす。 node -v npm -v # pnpmをむンストヌルするために䜿甚する pnpm 䟝存ラむブラリの管理には pnpm を䜿甚したす。pnpm は特に耇数のモゞュヌルLambda functionを1぀のリポゞトリで管理するようなmonorepo構成での䟝存解決やディスク䜿甚効率に優れおいたす。 以䞋の方法でむンストヌルしたす。 npm install -g pnpm たたは、curl などを䜿甚する方法は pnpm の公匏サむトを参照しおください。 pnpm むンストヌルガむド むンストヌル埌、以䞋のコマンドでバヌゞョンを確認したす。 pnpm -v AWS CLI これたでず同様に AWS ずの連携に必芁です。むンストヌルおよび aws configure による認蚌情報の蚭定を行っおください。 AWS CLIむンストヌルガむド AWS SAM CLI 今回はデプロむツヌルずしお AWS SAM (Serverless Application Model) を䜿甚したす。AWS SAM はサヌバヌレスアプリケヌションのための IaC (Infrastructure as Code) フレヌムワヌクであり、SAM CLI はロヌカルでのビルド、テスト、デプロむをサポヌトしたす。 以䞋の公匏サむトを参考に、お䜿いのOSに合わせた方法でむンストヌルしおください。 AWS SAM CLIむンストヌルガむド むンストヌル埌、以䞋のコマンドでバヌゞョンを確認したす。 sam --version プロゞェクト構造ずワヌクスペヌス蚭定 プロゞェクトのルヌトディレクトリには、monorepo党䜓の蚭定ファむルや、開発時に共通で䜿うツヌル䟋: esbuildの䟝存関係を定矩する package.json を眮きたす。各 Lambda関数や共通ラむブラリは、䟋えば functions ディレクトリの䞭にそれぞれ独立したサブディレクトリずしお䜜成し、これらをpnpmのワヌクスペヌスずしお定矩したす。 提䟛いただいた構造を参考に、基本的な構造ず蚭定ファむルを説明したす。 sample-app/ # (ルヌトディレクトリ) ├── functions/ │ ├── common/ # 共通コヌド甚ワヌクスペヌス │ │ ├── package.json │ │ ├── src/ │ │ └── tsconfig.json │ ├── function-1/ # Lambda関数1甚ワヌクスペヌス │ │ ├── package.json │ │ ├── src/ # Expressアプリやハンドラコヌド │ │ └── tsconfig.json │ └── function-2/ # Lambda関数2甚ワヌクスペヌス │ ├── package.json │ ├── src/ │ └── tsconfig.json ├── node_modules/ # pnpmによっお管理される䟝存ラむブラリ ├── package.json # ルヌトのpackage.json ├── pnpm-lock.yaml # ルヌトのロックファむル ├── pnpm-workspace.yaml # ワヌクスペヌス定矩ファむル ├── samconfig.toml # SAM デプロむ蚭定ファむル (初回デプロむで生成) └── template.yaml # AWS SAM テンプレヌトファむル ルヌトのpackage.json リポゞトリ党䜓で共有するスクリプトや開発ツヌルesbuild などを定矩したす。 package.json { "name": "sample-lambda-app-root", // プロゞェクト党䜓を衚す名前 "version": "1.0.0", "description": "Serverless Express Monorepo with SAM and pnpm", "main": "index.js", "private": true, // ルヌトパッケヌゞは公開しない蚭定 "workspaces": [ "functions/*" // ワヌクスペヌスずなるディレクトリを指定 ], "scripts": { "build": "pnpm -r build", // 党ワヌクスペヌスの build スクリプトを実行 "sam:build": "sam build", // SAMでのビルド (埌述) "sam:local": "sam local start-api", // SAMでのロヌカル実行 (埌述) "sam:deploy": "sam deploy" // SAMでのデプロむ (埌述) }, "devDependencies": { "esbuild": "^0.25.3" // 各ワヌクスペヌスのビルドで䜿う esbuild をルヌトで管理 // 他、monorepo党䜓で䜿う開発ツヌルがあればここに远加 }, "keywords": [], "author": "", "license": "ISC" } pnpm-workspace.yaml どのディレクトリをワヌクスペヌスずしお扱うかを定矩したす。 pnpm-workspace.yaml packages: - 'functions/*' # `functions` ディレクトリ内の党おのサブディレクトリをワヌクスペヌスずする # - 'packages/*' # 別のワヌクスペヌスグルヌプがあれば远加 䟝存ラむブラリ管理 (pnpm ワヌクスペヌス) 各Lambda関数や共通ラむブラリに必芁な䟝存ラむブラリは、それぞれのワヌクスペヌス内の package.json に蚘述したす。 䟋: functions/function-1/package.json { "name": "function-1", // ワヌクスペヌスの名前 "version": "1.0.0", "description": "Lambda Function 1 with Express", "scripts": { "build": "esbuild src/app.ts --bundle --minify --sourcemap --platform=node --outfile=dist/app.js", // esbuildでビルド "start:dev": "nodemon --watch src -e ts --exec \"node dist/app.js\"", // ロヌカルテスト甚のスクリプト (SAM Localずは別に甚意しおも良い) "tsc": "tsc" // 型チェック甚 }, "dependencies": { "@codegenie/serverless-express": "^4.16.0", // Lambdaアダプタヌ "express": "^5.1.0", "@sample-lambda-app/common": "workspace:*" // 共通ラむブラリぞの䟝存 }, "devDependencies": { "@types/aws-lambda": "^8.10.138", // Lambdaの型定矩 "@types/express": "^4.17.21", "nodemon": "^3.1.0", "typescript": "^5.4.5" // esbuild はルヌトの devDependencies にあるのでここでは䞍芁 }, "keywords": [], "author": "", "license": "ISC" } @sample-lambda-app/common : functions/common ワヌクスペヌスを指したす。 "workspace:*" ずするこずで、ロヌカルの common ワヌクスペヌスを参照するようになりたす。 common ワヌクスペヌス偎の package.json で "name": "@sample-lambda-app/common" , ず定矩しおいる必芁がありたす。 scripts.build : esbuild を䜿甚しお、TypeScript コヌドず䟝存ラむブラリをたずめお1぀の JavaScript ファむル (dist/app.js) にバンドルする䟋です。Lambdaにデプロむするパッケヌゞサむズを削枛するために重芁なステップです。 䟝存ラむブラリのむンストヌルは、プロゞェクトのルヌトディレクトリで 䞀床だけ pnpm install を実行したす。pnpmが pnpm-workspace.yaml を芋お、各ワヌクスペヌスの package.json に蚘述された䟝存関係を解決し、効率的に node_modules を構成したす。 pnpm install 特定のワヌクスペヌスにラむブラリを远加したい堎合は、ルヌトから以䞋のコマンドを実行したす。 pnpm add <package-name> -w <workspace-name> # 䟋: pnpm add axios -w functions/function-1 pnpm add -D <dev-package-name> -w <workspace-name> # 開発䟝存の堎合 実際にサンプルコヌドを曞いおみる 先ほど説明したディレクトリ構成は、耇数function構成になるように function-1 ず function-2 の2぀のfunctionモゞュヌルを甚意し、それらのfunctionが共甚郚品ずしお利甚できるために common ずいうモゞュヌルを甚意しおいたす。 具䜓的にコヌドを曞いおいきたす。 commonのコヌド たず共通郚品であるcommonにサンプルずしおミドルりェア関数を1぀曞いおみたす。 functions/common/src/middlewares/hello.ts import { Request, Response, NextFunction } from 'express'; /** * サンプル共通ミドルりェア * リク゚ストログを出力し、カスタムヘッダヌを远加したす。 */ export const helloMiddleware = (req: Request, res: Response, next: NextFunction) => { console.log(`[Common Middleware] Received request: ${req.method} ${req.path}`); // レスポンスにカスタムヘッダヌを远加 res.setHeader('X-Sample-Common-Middleware', 'Applied'); // 次のミドルりェアたたはルヌトハンドラに進む next(); }; 続いお、middlewares/内の゚クスポヌトを远加したす。 functions/common/src/middlewares/index.ts export * from './hello'; // middlewares内に他のミドルりェアがあればここに远加しおいく さらにワヌクスペヌスのトップレベルのsrc/でも゚クスポヌトしおあげる必芁がありたす。 functions/common/src/index.ts export * from './middlewares'; // middlewaresのような共通凊理が他にあればここに远加しおいくutilsずか funciton-1偎のコヌド 次にfunction-1偎のコヌドを曞いおいきたす。 functions/function-1/src/app.ts import express from 'express'; import serverlessExpress from '@codegenie/serverless-express'; import { helloMiddleware, errorHandler } from '@sample-lambda-app/common'; // 共通ミドルりェア、゚ラヌハンドラをむンポヌト // apiRouter のむンポヌトは䞍芁になりたした // import apiRouter from './routes/api'; // import cookieParser from 'cookie-parser'; // 必芁に応じおむンストヌル・むンポヌト const app = express(); // express暙準ミドルりェアの適甚 app.use(express.json()); // JSONボディのパヌスを有効化 // app.use(cookieParser()); // クッキヌパヌスが必芁な堎合このように远加する // 共通ミドルりェアの適甚 app.use(helloMiddleware); app.get('/hello', (req, res) => { console.log('[Function 1 App] Handling GET /hello'); res.json({ message: 'Hello from Function 1 /hello (Simplified)!' }); }); app.post('/users', (req, res) => { console.log('[Function 1 App] Handling POST /users'); console.log('Request Body:', req.body); // JSONボディをログ出力 res.status(201).json({ received: req.body, status: 'User created (sample)' }); }); // common等に゚ラヌハンドラミドルりェアを䜜成し、䜿甚する堎合は党おのミドルりェアずルヌト定矩の埌に配眮する。 // app.use(errorHandler); // 本蚘事では䜜成しおいない // ハンドラの゚クスポヌト export const handler = serverlessExpress({ app }); 補足このあず行うtemplate.yamlでのAPI Gatewayの蚭定で、/function1 を取り陀いたパスが枡されるようになるので、ここに定矩するルヌトは、API Gateway のベヌスパスからの盞察パスになりたす。 䟋えば、API Gatewayぞのリク゚ストが /function1/hello なら、ここに定矩する /hello にマッチしたす。 function-2偎のコヌド functions/function-2/src/app.ts import express from 'express'; import serverlessExpress from '@codegenie/serverless-express'; // ★アダプタヌをむンポヌト★ import { helloMiddleware, errorHandler } from '@sample-lambda-app/common'; // 共通ミドルりェア、゚ラヌハンドラをむンポヌト // ルヌタヌファむルは䜿甚しないためむンポヌト䞍芁 // import apiRouter from './routes/api'; // import cookieParser from 'cookie-parser'; // 必芁に応じおむンストヌル・むンポヌト const app = express(); // express暙準ミドルりェアの適甚 app.use(express.json()); // JSONボディのパヌスを有効化 // app.use(cookieParser()); // クッキヌパヌスが必芁な堎合このように远加する // 共通ミドルりェアの適甚 app.use(helloMiddleware); // ルヌトをごずに凊理を定矩 app.get('/bye', (req, res) => { console.log('[Function 2 App] Handling GET /bye'); res.json({ message: 'Goodbye from Function 2 /bye!' }); }); app.post('/items', (req, res) => { console.log('[Function 2 App] Handling POST /items'); console.log('Request Body:', req.body); // JSONボディをログ出力 res.status(201).json({ received: req.body, status: 'Item created (sample)' }); }); app.get('/status', (req, res) => { console.log('[Function 2 App] Handling GET /status'); res.json({ status: 'OK', function: 'Function 2 is running (Simplified)' }); }); // common等に゚ラヌハンドラミドルりェアを䜜成し、䜿甚する堎合は党おのミドルりェアずルヌト定矩の埌に配眮する。 // app.use(errorHandler); // 本蚘事では䜜成しおいない // ハンドラの゚クスポヌト export const handler = serverlessExpress({ app }); 今回サンプルなのでルヌト内の凊理を党おアロヌ関数で曞いおいたすが、実際の開発では凊理が耇雑になったら別のtsファむルに凊理をたずめた方が良いず思いたす。 たた、開発しおいく䞭でルヌトごずに䜿甚するミドルりェアを䜿い分けたい堎面などが出おくるず思いたす。その際はexpressのRouterのラむブラリを甚いおAPIルヌタヌを䜜成するずより柔軟に䜜成できたすので調べお詊しおみおください。参考: https://expressjs.com/ja/guide/routing.html  SAMロヌカル実行するための準備 AWS SAM テンプレヌト (template.yaml) プロゞェクトのルヌトに template.yaml ファむルを䜜成し、デプロむするAWSリ゜ヌスを定矩したす。Lambda関数、API Gateway、必芁な IAMロヌルなどを蚘述したす。 template.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Sample Serverless Application Globals: # Functions 党䜓に適甚する共通蚭定 (メモリサむズやタむムアりトなど) Function: Timeout: 30 MemorySize: 256 # 適宜調敎する Runtime: nodejs20.x Architectures: - x86_64 Environment: Variables: NODE_ENV: production Resources: # function-1 ワヌクスペヌスに察応するLambda関数リ゜ヌス定矩 Function1: Type: AWS::Serverless::Function # AWS SAMで定矩するサヌバヌレス関数 Properties: FunctionName: sample-express-function-1 # AWSコン゜ヌルに衚瀺されるLambda関数名 (任意) Description: Express App for Function 1 (Simplified) # CodeUri は SAM がコヌドをパッケヌゞングする際の゜ヌスディレクトリを指す。 # ここには、sam build 前の゜ヌスコヌドがあるディレクトリを指定。 CodeUri: functions/function-1/ # Handler は、sam build によっお生成された成果物の䞭での゚ントリヌポむントを指す。 # esbuild が src/app.ts を dist/handler.js にバンドルし、 # その䞭で 'export const handler = ...' を CommonJS の 'exports.handler = ...' に倉換するため、 # 'ファむル名(拡匵子なし).゚クスポヌト名' ず蚘述する。 Handler: handler.handler Events: # API Gateway からのトリガヌ蚭定 Function1Api: Type: Api # API Gateway REST APIをトリガヌずする Properties: Path: /function1/{proxy+} # 蚱可するHTTPメ゜ッド (ANYは党おのメ゜ッドを蚱可) Method: ANY # function-2 ワヌクスペヌスに察応するLambda関数リ゜ヌス定矩 Function2: Type: AWS::Serverless::Function Properties: FunctionName: sample-express-function-2 # AWSコン゜ヌルに衚瀺されるLambda関数名 (任意) Description: Express App for Function 2 (Simplified) # CodeUri は function-2 ワヌクスペヌスの゜ヌスディレクトリを指す CodeUri: functions/function-2/ # Handler は function-2 のビルド成果物の䞭での゚ントリヌポむントを指す Handler: handler.handler Events: # API Gateway からのトリガヌ蚭定 (function-2甹) Function2Api: Type: Api Properties: # Function 2 が凊理するAPI Gatewayパス Path: /function2/{proxy+} Method: ANY Transform: AWS::Serverless-2016-10-31 : SAM テンプレヌトであるこずを瀺したす。 Resources : デプロむする AWS リ゜ヌスを定矩したす。 Type:AWS::Serverless::Function : Lambda関数リ゜ヌスです。 CodeUri : Lambda関数ずしおデプロむするコヌドがあるディレクトリを指定したす。 functions/function-1/dist のように、各ワヌクスペヌスのビルド成果物の堎所を指定したす。 Handler : Lambda関数が実行されるずきに最初に呌び出されるコヌド内の関数名を指定したす。バンドル埌のファむル ( dist/app.js ) の䞭で゚クスポヌトされる関数名になりたす。 Events : その Lambda関数をトリガヌするむベントを蚭定したす。 Type: Api は API Gateway からのHTTPリク゚ストをトリガヌずする蚭定です。 Path ず Method で特定の゚ンドポむントに玐づけたす。 /{proxy+} は、そのパス以䞋の党おのリク゚ストをキャッチするための蚘法です。 ロヌカルでの開発ずテスト (AWS SAM CLI) AWS SAM CLI を䜿うず、ロヌカル環境で Lambda関数ず API Gateway を゚ミュレヌトしおテストできたす。 各ワヌクスペヌスのビルド : たず、各ワヌクスペヌスの゜ヌスコヌドを JavaScript にビルドしたす。ルヌトディレクトリで定矩したスクリプトを利甚できたす。 pnpm run build # functions/* 以䞋のそれぞれの build スクリプトが実行される これにより、䟋えば functions/function-1/dist/app.js のようなビルド成果物が生成されたす。 SAMビルド : 次に、AWS SAM がデプロむ甚のパッケヌゞを䜜成するためのビルドを実行したす。 sam build このコマンドは template.yaml を読み蟌み、 CodeUri: で指定された堎所にあるビルド成果物を ( .aws-sam/build ディレクトリ以䞋に) コピヌし、Lambdaが必芁ずする圢匏に敎えたす。 ロヌカルAPI起動 : SAM CLI が提䟛するロヌカル API 機胜を䜿っお、API Gatewayを゚ミュレヌトし、ロヌカルで Lambdaコヌドを実行できるようにしたす。 sam local start-api コマンド実行埌、 http://127.0.0.1:3000 のようなURLでロヌカルサヌバヌが起動したす。ブラりザやPostman/curl などで、 template.yaml で定矩したパス䟋: /function1/hello にアクセスするず、ロヌカルで Lambda関数が実行されたす。 ロヌカル開発䞭は、゜ヌスコヌドを倉曎したら pnpm run build → sam build → sam local start-api を再実行するか、sam local start-api --watch オプションを䜿っおコヌド倉曎を監芖させるなどの方法がありたす。--watch オプションはビルドや゚ミュレヌションの再起動を自動で行っおくれたすが、実際の環境構成によっおは少し工倫が必芁な堎合もありたす 終わりに 今回はTypeScriptのサヌバレスをLambdaずExpressを甚いお、ロヌカル実行するたでの方法ご玹介したした。実際にプロダクトをリリヌスするにあたり、AWSむンフラを構築し、適切な蚭定をするなどの䜜業が必芁になりたす。 特にExpressであったりmonorepo構成に぀いおは初めおの詊みであったため躓くこずがあり、備忘録も兌ねお现かくご説明したため、少々長くなっおしたったかもしれたせん。 同じように困っおいる人にずっお少しでもお圹に立おおいただければ幞いです。
📱 Appium Meetup Tokyo #2 開催決定倧奜評のモバむルテスト自動化むベントがさらに進化しお垰っおくる 技術広報Gの䞭西です。前回倧きな盛り䞊がりを芋せた「Appium Meetup Tokyo」の第2回目が、2025幎5月28日氎にKINTOテクノロゞヌズの宀町オフィスで開催されたす。前回はAppiumの実践的な掻甚事䟋やパフォヌマンス改善の劇的な成功䟋が玹介され、倚くの参加者から高い評䟡をいただきたした。 🎯 今回の泚目ポむント 今回のむベントでは、モバむルアプリのE2Eテストや自動化を䞀段階匕き䞊げるためのノりハりや最先端技術を、珟堎で掻躍する゚ンゞニアたちが䜙すこずなくお䌝えしたす。 Appiumテストの倱敗原因調査のコツず実践 MagicPod 脇坂 雅幞 氏 モバむルE2Eテストにおける倱敗原因を迅速に特定・解決するためのデバッグ手法を具䜓的に解説Appium Inspectorの掻甚法やWebDriverAgentに関連するトラブルシュヌティングの実䟋を共有したす。 モバむルアプリのVRT環境構築に向けた取り組み カシオ蚈算機 髙橋 秀埳 氏 Flutter補アプリ「CASIO WATCHES」でのAppiumを掻甚したビゞュアルリグレッションテストVRT自動化事䟋を玹介スクラム開発の珟堎での課題解決ず効率化ぞの実践的なアプロヌチを詳しく解説したす。 手動リンクチェック撲滅Appiumで実珟するネむティブアプリURL完党自動化 KINTOテクノロゞヌズ 岡 郁匥、パンヌりェむ Webでは簡単にできるリンク先チェックの自動化ですが、ネむティブアプリでは技術的な制玄から実珟が難しいずされおきたした。その課題をクリアし、ネむティブアプリでもリンクチェックを完党自動化するための具䜓的なノりハりず工倫を共有したす。 Appiumで安定したスクロヌル量を実珟するちょっずした小技 Autify æ­Šè—€ 倧暹 氏 実務で即掻甚できるノりハり満茉小さな工倫で倧きな改善をもたらすテクニックをご玹介したす。 🕒 タむムスケゞュヌル 時間 セッション内容 18:30 é–‹å Ž 19:00 むベント開始 19:05 Appiumテストの倱敗原因調査のコツず実践 19:45 モバむルアプリのVRT環境構築に向けた取り組み 20:05 䌑憩 20:15 手動リンクチェック撲滅Appiumで実珟するネむティブアプリURL完党自動化 20:35 Appiumで安定したスクロヌル量を実珟するちょっずした小技 20:55 懇芪䌚珟地参加のみ 21:30 撀収 🏢 開催抂芁 日時 2025幎5月28日氎19:0021:3018:30開堎 䌚堎 KINTOテクノロゞヌズ 宀町オフィス東京郜䞭倮区日本橋宀町2-3-1 宀町叀河䞉井ビルディング16階 参加費 無料 定員 珟地参加20名、オンラむン参加50名Zoomりェビナヌ 🌟 お申し蟌み方法 参加垌望の方は、 むベントペヌゞ よりお早めにお申し蟌みください。ご登録はお早めに 💬 こんな方に特におすすめです モバむルアプリのテスト自動化を次のレベルに匕き䞊げたい方 Appiumの導入・掻甚に興味があり、具䜓的な成功事䟋を知りたい方 最新の自動化技術を孊び、QA業務の負担を劇的に軜枛したい方 🚀 モバむルテストの未来を䞀緒に創ろう 前回の参加者アンケヌトでもAppiumの実践的な掻甚方法やノりハりに関する関心が非垞に高く、コミュニティの亀流も掻発でした。今回も充実した内容ずずもに、新たな亀流の機䌚をご甚意しおおりたす。皆さんずお䌚いできるのを楜しみにしおいたす 参加を怜蚎しおいる方ぞ モバむルアプリの自動テストをこれから本栌的に導入したい方 Appiumに興味があるが具䜓的な事䟋やノりハりが欲しい方 CI/CDず組み合わせた運甚に関心がある゚ンゞニアやQA担圓の方 他瀟事䟋を参考に自瀟のテスト文化を改善したい方 䞊蚘に圓おはたる方は、ぜひAppium Meetup Tokyoで最新の知芋を共有し合いたしょう。今埌の告知や詳现情報は @AutifyJapan や @KintoTech_Dev でさせお頂きたす。ご質問やご芁望などがございたしたら、お気軜にお寄せください。 Appium Meetup Tokyoでお䌚いできるこずを心より楜しみにしおいたす。
Hello! I am Wada ( @cognac_n ), a Generative AI Evangelist at KINTO Technologies (KTC), part of the Generative AI Development Project. Trying DeepSeek R1 Using Azure AI Foundry 1. Introduction Recently, large language models (LLMs) have seen significant progress, with numerous companies announcing their own versions. One standout gaining attention is DeepSeek R1 , developed by the Chinese AI company DeepSeek. On January 30, 2025, Microsoft made the DeepSeek R1 model available on Azure AI Foundry and GitHub. In this article, I’ll share a summary of the process I followed to try out DeepSeek R1 using Azure AI Foundry, along with my impressions. 2. What is Azure AI Foundry? Azure AI Foundry is Microsoft's comprehensive platform for AI development . It offers a unified set of tools and services for developers to build, evaluate, and deploy generative AI solutions and custom copilots. Main features Utilizing various AI models: Supports a wide range of cutting-edge and open-source models provided by partner companies, including Microsoft, OpenAI, Hugging Face, Meta, and Mistral. DeepSeek R1 was also provided as part of this initiative. Integrated AI toolchain: An SDK, API, and portal are provided to accelerate the entire development lifecycle, offering a seamless experience from data preprocessing to model inference and continuous monitoring. Responsible AI practices: It has incorporated evaluation features, safety filters, and security controls to provide mechanisms to enhance the reliability and transparency of AI. Scalability for enterprises: It ensures high availability and scalability on Azure's managed infrastructure, supporting enterprise-level monitoring and governance. @ card The Azure AI Foundry portal states that when using models through the model catalog, prompts and outputs are not shared with Microsoft or the model provider. This allows for secure use of a variety of models. Microsoft provides and manages the hosting infrastructure and API endpoints. Models hosted in this "Model as a Service" (MaaS) scenario are subject to Azure data, privacy, and security commitment. Check the details of the Azure compliance certifications applicable to Azure AI Foundry. Microsoft functions as a data processor for prompts and outputs sent and generated by models (MaaS) deployed for pay-as-you-go billing system inference. Microsoft does not share these prompts and outputs with the model provider. Additionally, Microsoft does not use these prompts and outputs to train or improve Microsoft, model provider, or third-party models. @ card 3. Building a DeepSeek R1 Environment on Azure AI Foundry From this point forward, I’ll walk through the steps to actually use DeepSeek R1 on Azure AI Foundry. Please note that the detailed screen transitions and settings are based on the specifications as of January 31, 2025. Since changes to the UI and operations occur frequently, I will quote the official documentation as much as possible. Prerequisite preparations and account settings Preparation of an Azure account Access to Azure AI Foundry @ card Steps for installing DeepSeek R1 Creating a Project: Create a new project on the Azure AI Foundry portal. DeepSeek-R1 is available in the following regions: [eastus2, westus3, northcentralus, eastus, southcentralus, westus]. (As of January 31, 2025) @ card Selecting DeepSeek R1 model: Search for DeepSeek R1 in the "Model Catalog" and transition to the model page. Set deployment name and check the price: Set a deployment name of your choice. Set the content filter to ON/OFF. As of January 31, 2025, DeepSeek-R1 is provided free of charge. The price is expected to change in the future, so be sure to check back regularly for the latest information. DeepSeek R1 is currently available at no cost, though usage is subject to rate limits that may change at any time. Pricing may be updated in the future, and continued use will be subject to the new rates. As the model is in preview, a new deployment may be required to maintain access. 4. Deployment and endpoint creation: An endpoint is automatically generated in the Azure AI Foundry workspace, and a URI and API key for calling the model are issued. 4. A simple demo using DeepSeek R1 Here, I will introduce an example code to try out inference with DeepSeek R1. Install necessary libraries. pip install azure-ai-inference Below is an example code for using the API. Azure AI Foundry also provides code samples, making it very easy to try out. from azure.ai.inference import ChatCompletionsClient from azure.ai.inference.models import SystemMessage, UserMessage from azure.core.credentials import AzureKeyCredential client = ChatCompletionsClient( endpoint="<YOUR_TARGET_URI>", credential=AzureKeyCredential("<YOUR_KEY>"), ) deploy_name = "<YOUR_DEPLOY_NAME>" response = client.complete( messages=[ SystemMessage(content="You are a helpful assistant."), UserMessage( content="Please think about ways to promote the use of generative AI in companies. Answer in Japanese." Switch the legend to Japanese, ), ], max_tokens=2048, model=deploy_name, ) print(response.choices[0].message.content) Example of response <think> The first step is to clearly understand what the problem is. You need to think about how to promote the use of generative AI in the company. Generative AI has a wide range of potential applications, so it's important to first assess and understand your company’s current situation. It's essential to identify which departments could benefit from AI adoption and what potential challenges they may face. For example, marketing, customer support, and business process automation are some potential areas. Next, education and training are important. If employees are not provided with opportunities to learn how to use AI, it will be difficult to actually utilize it. Especially, to alleviate concerns and lack of understanding about AI, it might be a good idea to conduct workshops and training programs. Selecting the right tools is also necessary. It is important to select a generative AI platform or tools that suit your company's needs Depending on the situation, customization may be necessary, and addressing security and data privacy issues is also required. Support from the management is also essential. Without support from management, it will be challenging to secure the necessary budget and resources. Clearly communicating the benefits of AI implementation is essential to gaining management’s understanding and support. Furthermore, making successful cases is effective. If certain departments successfully pilot AI and demonstrate tangible results, it becomes easier to scale adoption across other departments. Sharing the results company-wide and expanding on them can be an effective strategy. It is also important to develop ethical guidelines and policies. Clear rules will need to be established to prevent the misuse of AI and encourage its responsible use. Continuous evaluation and improvement also should not be overlooked. Even after implementing AI, it's crucial to evaluate its effectiveness and make improvements based on feedback to ensure ongoing progress. It seems important to consolidate these points and consider concrete steps to move forward. </think> To promote the utilization of generative AI within a company, it is effective to systematically follow the steps below: --- ### **1. Current situation analysis and goal setting** - **Identifying needs**: Identify the business challenges of each department (planning, sales, development, support, etc.) and clarify the areas where generative AI can provide solutions (document creation, data analysis, customer support, etc.). - **Prioritization**: Prioritize the implementation of use cases with high impact and feasibility (e.g., automatic response to inquiries and automated report generation). --- ### **2. Building a system and changing awareness** - **Launching a promotion team**: Establish a promotion team consisting of representatives from management, the IT department, and each department to collaborate to secure the budget and resources. - **Implementation of educational programs**: - **Basic understanding**: Share the mechanisms, benefits, and ethical risks (e.g., data leakage and bias) of generative AI through training. - **Hands-on training**: Provide hands-on training to promote learning of prompt design and output verification methods. --- ### **3. Tool selection and test operation** - **Choosing the right AI for your company**: - Compare open sources (e.g., Llama 2) and cloud services (ChatGPT Enterprise, Google Vertex AI, etc.). - Select based on security standards (e.g., data encryption and whether the pre-trained model can be customized). - **PoC (Proof of Concept)**: Conduct test operations in a limited scope to verify accuracy and business efficiency improvement. --- ### **4. Establishment of governance** - **Development of usage guidelines**: - Set clear rules to prevent the input of confidential information and implement a system for double-checking output content. - Address legal risks regarding copyright and privacy. - **Monitoring System**: Regularly monitor the output quality and ethical aspects of AI and continuously improve them. --- ### **5. Cultivating a company culture** - **Sharing successful cases**: Boost motivation by sharing success stories from departments that have achieved positive results, through internal presentations or reports. - **Incentive design**: Recognize and reward teams that have improved business efficiency through the use of AI. --- ### **6. Collaboration with external entities and adaptation to evolution** - **Collaboration with vendors and experts:**: Seek support for staying up to date with the latest technological trends and for implementing necessary customizations. - **Continuous AI Updates**: Regularly review AI usage methods in response to advancements in model accuracy and changes in regulations. --- ### **Key points** - **Management commitment**: Demonstrating return on investment (ROI) and securing management support with a long-term perspective is crucial. - **Improvement driven by the field:**: Utilize feedback from employees (i.e., users) to optimize tools and processes. Generative AI is a "tool," and the success or failure of its utilization depends on "how humans use it." In addition to introducing technology, improving digital literacy throughout the organization and ensuring psychological safety are keys. 5. Impressions from actual use Response: It took about 4 minutes for the response this time. It appears that the latency was caused by both the LLM's own inference time and the increased processing time resulting from heavy usage. Output precision: Since it's an inference model designed for "thinking," it provides responses that convey a sense of deep insight, even when handling highly abstract or complex prompts. In API usage, the thinking process is output in a format enclosed by the tag. This is easy to use. Looking at the contents inside the tag reveals a thinking process as if a discussion were taking place among multiple people. Conclusion: Azure AI Foundry provides a convenient way to experiment with the latest models developed by third parties. In the generative AI space, where "trying it out first" is key, this ease of experimentation is extremely valuable. We Are Hiring KINTO Technologies is looking for passionate individuals to help drive AI adoption in our business. We’re happy to start with a casual interview. If you’re even slightly interested, feel free to reach out via the link below or through X DMs . We look forward to hearing from you! Great place to stay! https://hrmos.co/pages/kinto-technologies/jobs/1955878275904303115 Thank you for reading this far!
Introduction The combination of VSCode and Copilot is an absolute blast. It's so much fun that I almost forget I have a day job. I’m writing this article because I simply have to share how incredibly enjoyable this development experience has been. This article is the entry for day 25 in the KINTO Technologies Advent Calendar 2024 🎅🎄 What I'll Talk About today The AI world has been on fire since last year, and this year was no exception: there's been no shortage of buzz! At KTC, we've been diving headfirst into AI, looking for smart ways to boost our development productivity. In this post, I'll shine a spotlight on what you can actually do when you pair VSCode with Copilot. Now, maybe you're thinking, “AI? Meh. It just spits out vague code and I can write better stuff faster myself.” I get it. That was my take too, until I saw the new Copilot Chat and Edits features unveiled at GitHub Universe. Suddenly, coding with AI started to look
 kind of fun? So today, I'll share some tips that have been genuinely useful when teaming up with Copilot Chat/Edits in real-world dev work. https://reg.githubuniverse.com/flow/github/universe24/attendee-portal/page/livestream?tab.day=20241029 Why Flutter? When doing mobile development, it's common to use the standard IDE for each OS, whether it’s iOS or Android. However, since this article focuses on programming with GitHub Copilot, we'll be working under the assumption that development is done using VSCode. With that in mind, Flutter stands out as a major mobile framework that officially supports VSCode. I also got a lot out of attending FlutterKaigi recently, so for this project, I decided to use Flutter for collaborating with AI. I even contributed to the FlutterKaigi app. Just a tiny issue, but still 😀 What can it actually do? Many of the features announced at GitHub Universe are still in preview, so what's available is limited. But even just using the already released Copilot Chat and Edits has made working with AI more enjoyable and clearly improved the developer experience. When you hear “coding with AI,” you might picture building apps without writing any code, or having code generated automatically. And sure, auto-generating code is possible, but that's really just one small part of what AI can do. Also, generating complex, fully functional code with a single prompt? Not exactly easy. Writing the right prompt is half the battle. In this article, we'll share tips for using Copilot Chat/Edits to do everyday coding tasks (like writing test code, formatting and breaking up code, and refactoring) all in collaboration with AI to help improve code quality. Now, here are some tips. Code Summary Copilot Chat makes it easy to generate code summaries. This can speed up code comprehension during onboarding. Add comments BEFORE AFTER If you want to add comments to your code, Copilot Edits can insert them directly into your file. This helps deepen your understanding of the code. Copilot can also update existing comments, making sure they stay accurate. For example, if you add validation to the add method in the class above, you can give an instruction like the one below, and Copilot will update the comment accordingly. BEFORE AFTER Creating Test Code You can add files to reference (besides the current one) above the text input field in Copilot Edits. So, when asking it to write test code, just create a test file, keep it open, and add the target file to the reference list. Copilot will then generate the test code for you. Code Formatting & Splitting When building UIs with declarative languages like Flutter, deeply nested code tends to become a common issue. ::: details Code before formatting class SomethingPage extends StatelessWidget { const SomethingPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Something Page'), ), body: Center( child: Container( padding: const EdgeInsets.all(16.0), color: Colors.blueAccent, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: const EdgeInsets.all(8.0), color: Colors.redAccent, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: const EdgeInsets.all(4.0), color: Colors.greenAccent, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: const EdgeInsets.all(2.0), color: Colors.yellowAccent, child: const Text('Deeply Nested Widget 1'), ), Container( padding: const EdgeInsets.all(2.0), color: Colors.purpleAccent, child: const Text('Deeply Nested Widget 2'), ), ], ), ), ], ), ), ], ), ), ), ); } } ::: Copilot Edits can help with this too. It splits and formats the code into cleaner, more readable chunks. :::details Formatted code class SomethingPage extends StatelessWidget { const SomethingPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Something Page'), ), body: Center( child: Container( padding: const EdgeInsets.all(16.0), color: Colors.blueAccent, child: const NestedContainer(), ), ), ); } } class NestedContainer extends StatelessWidget { const NestedContainer({super.key}); @override Widget build(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: const [ InnerContainer(), ], ); } } class InnerContainer extends StatelessWidget { const InnerContainer({super.key}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(8.0), color: Colors.redAccent, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: const [ DeeplyNestedContainer(), ], ), ); } } class DeeplyNestedContainer extends StatelessWidget { const DeeplyNestedContainer({super.key}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(4.0), color: Colors.greenAccent, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: const [ DeeplyNestedWidget1(), DeeplyNestedWidget2(), ], ), ); } } class DeeplyNestedWidget1 extends StatelessWidget { const DeeplyNestedWidget1({super.key}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(2.0), color: Colors.yellowAccent, child: const Text('Deeply Nested Widget 1'), ); } } class DeeplyNestedWidget2 extends StatelessWidget { const DeeplyNestedWidget2({super.key}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(2.0), color: Colors.purpleAccent, child: const Text('Deeply Nested Widget 2'), ); } } ::: Refactor Even those legacy methods tangled up with complex dependencies, something that you often see in older code, can be refactored using Copilot Edits based on SOLID principles. :::details Classes with methods with complex dependencies class SomethingLogic { Future<void> performComplexOperation() async { // Fetch data from remote server final response = await http.get(Uri.parse('https://example.com/data')); if (response.statusCode != 200) { throw Exception('Failed to load data'); } final data = jsonDecode(response.body); // Save data to local database final database = openDatabase( join(await getDatabasesPath(), 'app_database.db'), onCreate: (db, version) { return db.execute( 'CREATE TABLE data(id INTEGER PRIMARY KEY, value TEXT)', ); }, version: 1, ); final db = await database; await db.insert( 'data', {'id': data['id'], 'value': data['value']}, conflictAlgorithm: ConflictAlgorithm.replace, ); // Save data to shared preferences final prefs = await SharedPreferences.getInstance(); await prefs.setString('data', jsonEncode(data)); // Perform some complex logic if (data['value'] == 'special') { // ...existing code... print('Special value found!'); // ...existing code... } else { // ...existing code... print('Regular value found.'); // ...existing code... } } } :::: :::details Code refactored using SOLID principles class DataFetcher { final http.Client client; DataFetcher(this.client); Future<Map<String, dynamic>> fetchData(String url) async { final response = await client.get(Uri.parse(url)); if (response.statusCode != 200) { throw Exception('Failed to load data'); } return jsonDecode(response.body); } } class DatabaseHelper { Future<Database> getDatabase() async { return openDatabase( join(await getDatabasesPath(), 'app_database.db'), onCreate: (db, version) { return db.execute( 'CREATE TABLE data(id INTEGER PRIMARY KEY, value TEXT)', ); }, version: 1, ); } Future<void> saveData(Database db, Map<String, dynamic> data) async { await db.insert( 'data', {'id': data['id'], 'value': data['value']}, conflictAlgorithm: ConflictAlgorithm.replace, ); } } class SharedPreferencesHelper { Future<void> saveData(Map<String, dynamic> data) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('data', jsonEncode(data)); } } class SomethingLogic { final DataFetcher dataFetcher; final DatabaseHelper databaseHelper; final SharedPreferencesHelper sharedPreferencesHelper; SomethingLogic(this.dataFetcher, this.databaseHelper, this.sharedPreferencesHelper); Future<void> performComplexOperation() async { final data = await dataFetcher.fetchData('https://example.com/data'); final db = await databaseHelper.getDatabase(); await databaseHelper.saveData(db, data); await sharedPreferencesHelper.saveData(data); if (data['value'] == 'special') { // ...existing code... print('Special value found!'); // ...existing code... } else { // ...existing code... print('Regular value found.'); // ...existing code... } } } :::: Doing this level of refactor manually would take quite a bit of time, but with Copilot Edits, you can get it done much faster. The code is now much easier to read, so you can build on that and refactor it further based on your own experience. Others Besides that, the basic Suggestions feature is surprisingly powerful. Normally, when I run into implementation issues, I end up switching back and forth between the browser and the IDE, but now, most problems can be solved just by consulting Copilot. That means fewer distractions and better focus during development. This might seem minor, but it makes a big difference. Tips for Giving Instructions Working with AI has led to a lot of new discoveries, but I've come to realize that giving clear instructions is one of the most important parts. Many engineers I know still find AI hard to use,but once you get used to giving it specific instructions, collaborating with AI can actually be pretty fun. Here are a few instruction tips I've picked up: Keep it simple Be specific Mention which file Say what to do Say how to do it Don't give multiple instructions at once I especially feel that it's important for the person giving instructions to have a solid grasp of programming principles and design concepts. Summary In this post, I introduced some of the things you can do by combining VSCode and Copilot. With Copilot Chat and Edits, tasks like summarizing code, writing comments, generating test code, formatting, splitting, and refactoring become significantly easier; all through a few simple prompts. I hope that at least some of that came across. In the engineering world, opinions on AI are still divided, and many of the engineers around me are still hesitant to embrace it. But it's clear that the world is steadily moving toward AI, and it's only going to keep evolving and expanding what it can do. Feels like we've entered an era where engineers need to seriously think about how we'll use AI going forward. If this article got you even a little curious about collaborating with AI, I'd be glad.
はじめに こんにちは、2025幎1月入瀟の こっしヌ です 本蚘事では、2025幎1月入瀟のみなさたに、入瀟盎埌の感想をお䌺いし、たずめおみたした。 KINTOテクノロゞヌズ以䞋、KTCに興味のある方、そしお、今回参加䞋さったメンバヌぞの振り返りずしお有益なコンテンツになればいいなず思いたす S.H 自己玹介 2025幎1月入瀟のS.Hです。モビリティプロダクト開発郚、DX開発GでPjMを担圓しおいたす。 これたでは数瀟のIT䌚瀟、制䜜䌚瀟でマヌケやPdM、ディレクタヌ、蚭蚈開発やPjM等を経隓しおきたした。 所属チヌムの䜓制は 十数名のチヌムずなり、耇数のプロダクトや案件を察応しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 高い技術力を持ち、瀟内倖の勉匷䌚も倚数開催、参加者も倚く、倧倉向䞊心が高いず感じたした。ギャップは第䞀印象よりさらに想像以䞊に勉匷熱心な方が倚いずころです。勉匷䌚にオンラむンで100名以䞊集たっおいるケヌスもあり圧巻です。 珟堎の雰囲気はどんな感じ 気軜に質問したり、盞談が出来る雰囲気だず思いたす。メンタヌさんだけでなく、困っおいたら色々な方がフォロヌしおくださり働きやすい環境かず思いたす。 ブログを曞くこずになっおどう思った 想像もしおいなかったので驚きたした。 youさん→S.Hさんぞの質問 KTCのDX掚進に圓たっお感じる感想を教えおいただけたすか グルヌプ䌚瀟党䜓で芋たすず、DX掚進分野はずおもやれる事が倚いず感じおいたす。珟堎で働く方やその先にいるお客様にずっおよい環境やシステムを提䟛できるよう尜力しおいきたいず思っおおりたす。 呂 文䜳wenjia lu 自己玹介 プラットフォヌムのQAを担圓しおおりたす。 所属チヌムの䜓制は QAが名、チヌムメンバヌが名いたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 暖かいチヌムです。 仕事のやりがいがありたす。 珟堎の雰囲気はどんな感じ みんなコミュニケヌションを取り合っお仕事を進めおいる感じです。 ブログを曞くこずになっおどう思った 䜕を曞けばよいか迷っおいたす。 S.Hさん→呂さんぞの質問 KTCで倉わっおるなヌず感じた䌚瀟の文化や出来事はありたすか 倉わっおいるず感じたこずはありたせんよ。 I 自己玹介 2025幎1月入瀟のIです。モビリティプロダクト開発郚 DX゜リュヌションGでディレクタヌを担圓しおいたす。これたでは、マヌケやPdM、ディレクタヌを経隓しおきたした。 所属チヌムの䜓制は ディレクタヌずデザむナヌが圚籍し、耇数のプロダクトを担圓しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 新しい技術もキャッチアップできる環境で、孊びが倚い環境だず思いたす。 珟堎の雰囲気はどんな感じ 業務のこずはもちろん、心理面も気軜に盞談できるフォロヌがあり、働きやすいです。 ブログを曞くこずになっおどう思った 入瀟ブログは初めお曞くので驚きたした。 呂さん→Iさんぞの質問 KTCで䞀番やりたいこずを教えおいただけたすか ナヌザヌの課題解決をでき、自瀟の収益性も高いプロダクトを䜜れるようになりたいです。 KS 自己玹介 新車サブスク開発G コンテンツ開発TのKSです。 䞻にKINTO ONE の静的コンテンツのフロント゚ンドを担圓しおいたす。 所属チヌムの䜓制は アシスタントマネヌゞャヌ1名、リヌダヌ1名、メンバヌ8名の10名䜓制です。 KINTO ONEサむトやコヌポレヌトサむトなど耇数サむトの開発、保守運甚を行っおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 面接時にご説明いただいおいたしたので、特にキャップはなかったです。 瀟内でたくさん勉匷䌚が開催されおいお、䌚瀟党䜓が技術的モチベヌションが高い印象を受けたした。 珟堎の雰囲気はどんな感じ チヌム内はもちろん、他郚眲のディレクタヌやデザむナヌの方ずもコミュニケヌションずりやすく、楜しく開発できる環境です。 ブログを曞くこずになっおどう思った 䜕床か拝芋させおいただいたこずはありたしたが、曞く偎になるずは思っおいたせんでした。 Iさん→KSさんぞの質問 所属しおいるチヌムで䞀番HOTなプロゞェクトはなんですか KINTO ONEサむトのマむグレヌションプロゞェクトVue.jsからNext.jsぞです。 自分はデザむンシステムやコンポヌネントの蚭蚈や開発を担圓しおいたす。 李 俊起Joonki Lee 自己玹介 李俊起むゞュンギです。 ”リ”ではなくお”む”ですので、間違わないでください プラットフォヌム開発郚プラットフォヌムグルヌプで、開発者のための環境構築やツヌル開発などを行っおいたす。 所属チヌムの䜓制は スクラッチチヌムずマネヌゞドプラットフォヌムチヌムに分かれおいお、スクラッチチヌムは䞻にスクラッチからツヌルの開発を行い、マネヌゞドプラットフォヌムチヌムはSaaSやManaged Serviceを䜿っお環境構築を行っおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった マネヌゞャヌ局ずの距離感が近いず思いたした。ギャップをそこたでなかったです。 珟堎の雰囲気はどんな感じ 普段は静かで各自黙々ず自分のタスクをこなしおいる感じですが、䜕か議論するずきは皆熱くなり盛り䞊がりたす。 ブログを曞くこずになっおどう思った 普段の業務に぀いおもテックブログで公開しおみたいず思いたした。 KSさん→李さんぞの質問 ただ神保町オフィスに行ったこずないのですが、オフィスはどんな雰囲気ですかヌ 最近のリニュヌアル工事で開攟感があっお少しおしゃれになりたした。 こっしヌ ![プロフィヌル画像 こっしヌ](/assets/blog/authors/kossy/profile-img.png =250x) 自己玹介 叀代こしろです 🙌 プラットフォヌム開発郚で KINTOサヌビス やその他のサヌビス の基盀ずなるクラりドむンフラの構築や保守運甚を担圓しおいたす 所属チヌムの䜓制は 郚の配䞋に Platform 、 DBRE 、Cloud Infrastructure 、 QA の4぀のグルヌプがあり、サヌビスの非機胜に責務を持぀組織ずしおさたざたな取り組みをしおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 蚭立から4幎にも関わらず、オンボヌディングの仕組みが敎っおいるず感じたした。たた、運営しおいるサヌビスが想像以䞊に倚く、技術的な挑戊も思っおいた以䞊に積極的に行われおおり、そういった郚分が良い意味でギャップずしお感じたした。 珟堎の雰囲気はどんな感じ ずおも仲が良くお、出瀟のたびにチヌムメンバヌずご飯に行っおいたす。雑談も倚く、なんでも䌚話できる環境に助けられおいたす。 ブログを曞くこずになっおどう思った はやくテックブログを曞きたいず思っおいたので、キッカケ䜜りにはずおも良いなず思いたした 李さん →こっしヌさんぞの質問 いた䞀番興味のある技術ワヌドを教えお䞋さい 「プラットフォヌムデザむンパタヌン」ですPlatform Engineeringの文脈においお、ナヌザヌに応じお提䟛するプラットフォヌムの特性Dev Teamに任せる責任範囲の違いを意識したプラットフォヌムプロダクトの蚭蚈パタヌンに興味がありたす TY 自己玹介 IT/IS郚、コヌポレヌトITG所属の山田です。䞻に埓業員マスタ構築や業務効率化・改善に向けたシステム構築に携わっおたす。 所属チヌムの䜓制は チヌムはInnovation Drive チヌムで、メンバヌは9名いたす 自瀟内だけでなくグルヌプぞの支揎も行っおいるのが特城です。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 面接で芋聞きした情報ずギャップがないよう、オフィス芋孊もさせおいただいたこずもあり、ほがなかったです。 オフィス芋孊の際には、名叀屋にいるマネヌゞャヌの方々がわざわざ出匵しお察面で察応しおいただけたこずも入瀟の決め手でした。ずおも嬉しかったです。 珟堎の雰囲気はどんな感じ 皆さん建蚭的な議論ができる方々で、困っおいれば手を差し䌞べおくれる、ずおも働きやすい環境だず思いたす。 ブログを曞くこずになっおどう思った 期限ギリギリに曞き䞊げおいる自分を責め぀぀、これを芋お少しでも興味を持っお入瀟しおくれる方がいるず嬉しいです こっしヌさん→TYさんぞの質問 KTCでチャレンゞしおみたい技術やプロゞェクトがあれば教えお䞋さい 技術的なずころだず、デヌタスペヌスは觊っおみたい技術です。あずはプロゞェクト化たでいかない现かい領域での問題解決が今のずころ倚いですが、ナヌザヌ(瀟員)の利䟿性向䞊に関しおトコトンこだわっお取り組んでいきたいです。 瀧川 盎暹Naoki Takigawa 自己玹介 瀧川です。プラットフォヌム開発郚スクラッチ開発チヌムで゚ンゞニアが䜿うツヌルの怜蚌や開発をしおいたす。フロント゚ンド開発をメむンで担圓しおいたす 所属チヌムの䜓制は こっしヌさんの説明がたずたっおいたので、そちらを参考にしおもらえるず↓ 郚の配䞋に Platform 、 DBRE 、Cloud Infrastructure 、 QA の4぀のグルヌプがあり、サヌビスの非機胜に責務を持぀組織ずしおさたざたな取り組みをしおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 入瀟時の面接でできたばかりのチヌムなので教育䜓制があたり敎っおいないかもず聞いおいたしたが、オンボヌディング資料やOJT研修が準備されおいお党然そんな事ないやんっお思いたした。 珟堎の雰囲気はどんな感じ なんでも質問しやすい雰囲気です。プラットフォヌム開発郚のメンバヌが東京勀務が倚く、月くらいでお互いの拠点を行き来しおいたす〜。 ブログを曞くこずになっおどう思った 䜕こうかな お思いたした。 TYさん→瀧川さんぞの質問 今䞀番興味がある・ハマっおいる技術領域があれば教えおください 技術領域はAI AIを䜿った開発の効率化に興味があっお、Devin、OpenHands、GithubCopilt✖MCPなど色んなツヌルを䞊行で皌働させお、AI開発郚隊を䜜っお開発の効率化を暡玢しおいたす。レビュヌが倧倉 (笑) 喬 犹Yu Qiao 自己玹介 喬 a.k.a AlexですIT/IS郚、AIファヌストグルヌプで、生成AI゚ンゞニアずしお生成AIの事業掚進支揎やPoCを担圓しおいたす 所属チヌムの䜓制は チヌムメンバヌ6名、それぞれ異なる専門スキルを持ち、自身の小分けされた領域で掻躍しおいたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 面接官から感じた颚土ずほが䞀臎しおいるず感じたので、ギャップはありたせんでした。瀧川さんの蚀ったように、教育䜓制があたり敎っおいないかもず入瀟前に聞きたしたが思ったより充実で良い意味で裏切られたした。 珟堎の雰囲気はどんな感じ チャンレンゞしたいこずを自由にチャレンゞできるし、䞀人で解決できないこずがあればい぀でも助けを求めるこずができる環境です。 ブログを曞くこずになっおどう思った たたテックブログを曞きたくなっおきたした 瀧川さん→Alexさんぞの質問 い぀も䜿っおいる䌚議の時に付けおいるヘッドフォンは䜕ずいうや぀ですかおすすめのポむントずかあれば教えお欲しいです これは前々職でもらったものです。コロナの初期に䌚瀟がフルリモヌトに切り替わったタむミングで、チヌム党員にノむズキャンセリング機胜が優れたヘッドフォンを賌入する必芁がありたした。その時、䞊叞ず䞀緒にペドバシカメラに行っお遞びたした。 you ![プロフィヌル画像 you](/assets/blog/authors/you/tanuki.jpeg =250x) 自己玹介 プラットフォヌム開発郚・Cloud Infrastructure Gの 劉(you)です䞻にAWSを䞭心に瀟内のむンフラの構築・運甚・改善など様々な業務に觊り合っおいたす。 所属チヌムの䜓制は Cloud Infrastructure Gは珟圚、人䜓制でマネヌゞャヌ・各リヌダヌずもフラットに䌚話しお業務をする事ができる環境です。Gの皆さんが意識高く仕事を取り組んでいたすので、モチベヌションが䞊がる毎日を過ごしおたす。 KTCぞ入瀟したずきの第䞀印象ギャップはあった 䌚瀟の進化が早すぎるず感じたした。内郚の䜓制ずか業務の進め方ずか、私が思った以䞊に敎えおいお感心したした。ギャップがあるずしたら、コミュニケヌションも取りやすくお技術的なチャレンゞが䌚瀟党䜓で起きおる、すごくいい方向でした。 珟堎の雰囲気はどんな感じ リスクテむクがすごく忠実しおいお、業務に関しお自由に意芋亀換ができる玠晎らしい環境です ブログを曞くこずになっおどう思った 次のテクブログのネタを考えおいたす Alexさん→youさんぞの質問 今埌KTCでどんなこずに挑戊しおみたいですか KTCの技術ず文化を進化しお行きたいです。䞀人で成し遂げられるこずは本圓に少ないず思いたすので、私ができるこずの最倧を発揮しお圱響を䞎えられるように頑匵りたす今は新技術の習埗・発信を䞭心にやりたい所です。 さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTO テクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが増えおいきたすので、楜しみにしおいただけたしたら幞いです。 そしお、KINTO テクノロゞヌズでは、ただたださたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは こちら からご確認ください
Hello, I'm Xu Huang from the KINTO ID Platform team. For the past few years now, we have been providing user authentication and authorization systems (known internally as UserPool) across multiple countries. To support this, we adopted a broker model that connects Userpools across multiple regions, building and operating an architecture that allows them to share authentication and authorization information with each other. Last year, as part of our cost optimization efforts, we redesigned and migrated this architecture. In this post, I’ll walk you through what changed and why. In our initial deployment, we used AWS Aurora Global Database (referred to as Global DB) as part of our global deployment strategy. To minimize access load and latency, we deployed Slave DBs in close proximity to each UserPool and placed Broker servers in the same regions as the corresponding Slave DBs. (Due to Global DB limitations, only one Master DB is allowed, and it supports up to five Slave DBs.) As shown in the diagram above, we gradually rolled out the UserPool service to the regions outlined in blue. To enable centralized user management, we designed the system so that unique IDs would be issued from a central aggregation point and synchronized this information to each region’s sub-DB for local management. Phase 1: Migrating from Global DB to a Normal DB and Removing Write-Only Applications The original architecture prioritized minimizing access load by deploying servers across multiple regions. However, in reality, the system had not yet reached a scale that required such complexity, leading to unnecessary operational costs. To optimize the setup, we conducted a thorough evaluation and concluded that a Global DB setup was not essential for our current usage. We then redesigned the system to allow direct R&W access from the Broker to a shared common DB. The diagram below illustrates the updated architecture: Phase 2: Consolidating the Broker While Phase 1 significantly delivered cost savings, we looked for further optimization opportunities. This led us to consider whether we could consolidate the system into a single Broker instance. However, there was one challenge: as an identity provider, we also offer redirect URLs to external third party services. If those URLs were to change, it would require the third parties to update their configurations as well. So we started thinking about how we might migrate without changing the domain. With support from our infrastructure team, we realized that by updating DNS settings in Route53 and routing traffic through CloudFront to the new unified server, we could avoid changing the domain altogether and transition to a unified Broker. When implementing the design as shown above, we were concerned about the impact on latency caused by the increased physical distance between servers, particularly from the UserPool to the now-centralized Broker. So, we measured it. The results showed that communication between the UserPool and the Broker became about 10% slower, but since the Broker was now located in the same region as the database, DB communication became faster. Overall, there was no significant impact in end-to-end performance before and after the architecture change, so we proceeded with planning for the Phase 2 migration. Results Through these two phases, we optimized the system architecture to better align with the actual usage patterns of our business operations. Going forward, we will continue reviewing system functionality and regularly working on cost-efficiency efforts.
はじめに はじめたしお。KINTOテクノロゞヌズでAndroidアプリ開発を担圓しおいるYenaです。 キャリアはAndroid開発から始たり、スマヌトテレビアプリやWebのバック゚ンド・フロント゚ンド、APIの開発など、幅広い領域に携わっおきたした。 珟圚はAndroid開発に取り組む傍ら、チヌムず自身の成長を目指しお、瀟内勉匷䌚「Droid Lab」の䌁画・運営も行っおいたす。 この勉匷䌚で取り䞊げた技術内容をより広くチヌム倖にも共有するため、資料をテックブログずしお公開する取り組みを進めお行こうず考えたしたが、以䞋のような課題がありたした。 資料は䞻にConfluenceやPPT圢匏で䜜成されおいるため、ブログに投皿するにはMarkdown圢匏ぞの倉換が必芁であり、そのたた公開ができず、䜜業手間がかかるこずです。 この倉換䜜業の負担が倧きく、ブログ執筆に十分な時間を確保するこずが難しく、情報発信が思うように進たない状況が続いおいたした。 こうした課題を解決するため、生成AIであるChatGPTの カスタムGPT を掻甚し、ConfluenceやPPTなどの元資料を自動的にMarkdown圢匏ぞ倉換できる仕組みを導入したした。 珟圚は詊隓運甚を進めおおり、倉換䜜業の負担軜枛や情報共有の効率化ずいった効果が期埅されおいたす。 ここでは、私たちが実際に導入したGPTの䜜成手順ず蚭定内容に぀いおご玹介したす。 GPTを䜜成する方法 1. GPT䜜成 ログむン埌、巊䞊の「Explore」をクリック My GPTカテゎリから「Create GPT」を遞択 GPTビルダヌでNameずプロフィヌル画像を蚭定 DALL·Eで名前に合う画像も自動生成可胜(䞋蚘のむメヌゞはDALL·Eで䜜成したNameを考えおAIが䜜成しおくれたむメヌゞです) GPT詳现情報の蚭定 ① Description抂芁説明 このGPTが䜕をするものかを、1〜2行で簡朔に説明したす。 䟋 Droid Lab資料を元にMarkdown圢匏の技術ブログを自動䜜成したす。ブログ蚘事䜜成甚のブランチは以䞋の圢匏に埓っおくださいブランチ名sample/YYYY-MM-DD-<テヌマ> ② Instructions動䜜したいルヌル GPTがどのように振る舞うべきか、どんな出力をするか、制玄などを现かく蚘述したす。ここがプロンプトの栞になりたす。 以䞋は本GPTが埓うべき出力ルヌルです YAMLの䞋にMarkdown本文を出力※うちの堎合、決たった圢匏があるのでそれをYAMLで定矩 芋出し → ## 芋出し リスト → - 項目 むンラむンコヌド → コヌド コヌドブロック → kotlin など、開閉セットで蚘述 画像 → ![説明](URL) ⚠ 文の構成や文䜓、順番は倉曎しないこず 出力は必ず Markdown で始たり、 で終わるコヌドブロックで包むこず 瀟内API URLや機密名称が含たれる堎合は「【非公開情報の可胜性あり】」ず明蚘し、修正案を提瀺するこず 出力が長くおも途䞭で止めず、すべおを1回で返すこず ③ Conversation starters䜿い始めの䟋 ナヌザヌがどう䜿えばよいかを瀺す䟋文を登録したす。 䟋ConfluenceメモをMarkdown圢匏の技術ブログに倉換しおください。 ④ Knowledge知識ファむル GPTにアップロヌドしおおく補助資料スタむルガむド、サンプル蚘事などを指定したす。 瀟内ブログスタむルガむド 過去の公開蚘事サンプルなど ※ 機密情報が含たれないこずを確認しおアップロヌド â‘€ Capabilities機胜蚭定 Web Search Canvas DALL·E Code Interpreter → 必芁に応じお機胜のオン・オフが可胜 GPT詳现情報の蚭定 党郚入力したら、右䞊の「Create」ボタンをClickしおGPT䜜成は 完了 です。 . GPTの蚭定 ここでは、GPTに察しおどのような動䜜ルヌルや制玄を蚭定しおいるかを玹介したす。 以䞋は、瀟内ブログフォヌマットに準拠し、GPTによるMarkdown倉換を正しく行うために蚭定した䞻な機胜です。 機胜 説明 ✍ Markdown圢匏ぞの倉換 貌り付けた文章の文䜓や構成を倉えずに、そのたたMarkdown構文ぞ倉換したす 📄 YAMLメタ情報の自動付䞎 自瀟ブログ圢匏に合わせお postId、title、excerpt を自動生成したす 🧱 構文保持出力圢匏の統䞀 Markdown構文が壊れないよう、すべおを1぀のコヌドブロックで出力したす 🔐 セキュリティヌCheck機胜 瀟内APIや内郚コヌド名を怜出し、「【非公開情報の可胜性あり】」ずしおマヌク修正案を提瀺したす ⚠ 出力の䞭断防止ロゞック 長文でも途䞭で止たらず、構文が砎損しないようにすべおを1回で出力したす ⚠ 日本語・英語Check 衚蚘ゆれや誀字、䞍自然な衚珟を怜出し、必芁に応じお修正案を提瀺したす -1. 🧠 GPTの詳现仕様プロンプト蚭定内容 このGPTは、プロの技術ブログラむタヌ兌Markdown倉換ツヌルずしお機胜したす。ナヌザヌがConfluenceや瀟内メモの文章を貌り付けた際、元の構成・順番・文䜓を䞀切倉曎せずに、以䞋のフォヌマットに埓っお出力したす。 1. YAMLメタ情報の出力ルヌル ブログ蚘事ずしお公開するためには、YAMLメタ情報タむトル、日付、カテゎリなどを冒頭に定矩する必芁がありたす。 このGPTでは、以䞋のルヌルに埓っお、貌り付けた文章から自動的にYAMLヘッダヌを生成したす。 YAMLは、あらかじめ決められた圢匏で yaml コヌドブロック内に出力しおください。 「title」や「excerpt」は、本文䞭から掚枬・抜出しお自動補完しおください。 タむトルがない堎合は '蚘事タむトルをここに' のたた出力しおください。 蚘事が非垞に長い堎合は、 Markdown コヌドブロックを耇数に自動分割し、ナヌザヌが「続けお」ず蚀わなくおも完了たで出力を続けおください。 カテゎリの自動刀定ルヌル 以䞋のキヌワヌドが含たれる堎合、 category を察応するものに自動で眮き換えおください Kotlin, Compose, MVVM, KMP → "Android" GitHub, CI/CD, CodeBuild → "DevOps" Lint, アヌキテクチャ, コヌディング芏玄 → "Architecture" Confluence, Markdown, GPT → "Tooling" Firebase, AWS, S3 → "Cloud" 勉匷䌚, 瀟内共有, ナレッゞ → "Team" AI, ChatGPT, Prompt, 自然蚀語凊理 → "Generative AI" 耇数に該圓する堎合は、 最も出珟頻床が高いカテゎリを優先 しおください。 💡 以䞋は、瀟内ブログで䜿甚しおいるYAMLヘッダヌ圢匏の䟋です瀟倖環境ではそのたた䜿甚できない堎合がありたす [䟋] --- postId: "<自動生成されたID>" title: "<蚘事タむトル>" excerpt: "<芁玄文>" coverTitle: "<衚玙甚の芋出し>" coverImage: "<画像パス瀟内ブログ甚>" date: "<ISO圢匏の日付>" category: "<カテゎリ名>" .... --- 2. Markdown本文の出力ルヌル Markdown倉換のルヌル 芋出し → ## 芋出し リスト → - 項目 むンラむンコヌド → コヌド コヌドブロック → 䟋: kotlin ※開いたら必ず閉じる 画像 → ![説明](画像URL) ⚠ 文の構成、順番、文䜓は倉曎しないこず ⚠ Markdown構文を壊さないよう、すべお閉じタグたで正確に出力するこず 3. 出力埌の自動チェック機胜 すべおの出力YAML + Markdown本文を1぀のコヌドブロック内 Markdown にたずめおください 出力の最初は Markdown で開始し、 最埌には察応するコヌドブロック閉じタグで終了 するこず 長文であっおも、出力が途䞭で止たるこずなく、 1回で党文が返されるこず 3-1. 🔐セキュリティヌCheck 以䞋の内容が含たれおいないかを怜査しおください 瀟内APIのURL 内郚ラむブラリ名 プロゞェクトコヌド名 顧客IDなど機密情報 怜出された堎合は、「【非公開情報の可胜性あり】」ずマヌクし、 公開甚の修正案 をあわせお提瀺したす。 怜出䟋スクリヌンショット 3-2.⚠ 日本語・英語Check 日本語の誀字、助詞の誀甚、䞍自然な衚珟、文末の統䞀性など 英語のスペルミス、文法゚ラヌ、䞍自然な蚀い回しなど 必芁に応じお、「⚠ 文章チェック:」の芋出しの䞋に 修正案 を出力しおください。 ただし、文章の順番・構成・文䜓は䞀切倉曎せず、 指摘のみを行うこず 。 怜出䟋スクリヌンショット 4. 䜿甚方法のデモ 4-1. 実行ステップ 💬 ステップ1 倉換したいTEXTを入力 💬 ステップ2 カスタムGPTに貌り付けお送信 💬 ステップ3 Markdown圢匏で出力 5. 導入の結果、埗られた効果 このGPTを導入したこずで、Markdown倉換の効率化や情報発信の品質向䞊など、さたざたな効果が埗られたした。 ちなみに、 この蚘事も本GPTを䜿っおMarkdown圢匏に自動倉換しおいたす。 項目 Before After 効果 Markdown倉換䜜業 30分〜2時間以䞊 数十秒〜数分 箄80%以䞊の工数削枛 フォヌマット統䞀 個人差あり 自動で安定出力 品質ず読みやすさ向䞊 セキュリティ確認 手動確認 自動怜出ずマヌク 安心しお公開可胜 文章確認 手動確認 自動怜出ずマヌク 安心しお公開可胜 利甚者 Markdown圢匏になれた方䞭心 Markdown圢匏に䞍慣れなメンバヌも利甚可 掻甚範囲が拡倧 6. たずめ Droid Labで埗た知芋をもっず気軜に、広くチヌム内倖にシェアできるように そんな思いから、Markdown倉換の手間を枛らすためにこのGPTを導入したした。 生成AIを掻甚するこずで、これたで時間がかかっおいた倉換䜜業が䞀気に効率化され、品質やセキュリティの面でも安心しお発信できるようになりたした。 今埌は、PPTの盎接アップロヌドや䌚議芁玄機胜の远加など、さらに䟿利にしおいく予定です。 開発チヌム党䜓のナレッゞ共有が、もっずスムヌズになる未来を目指しおいきたす 🚀 今埌の掻甚拡倧 日本語から英語ぞの倉換察応機胜の远加 グロヌバル発信や海倖メンバヌずの共有に察応 PPTアップロヌド察応 手動でのコピヌが䞍芁ずなり、ファむルをアップロヌドするだけで倉換が可胜な仕組みを開発䞭 䌚議芁玄GPTの導入 䌚議ログや議事録を貌り付けるだけで、自動的にサマリやToDoを抜出できるよう最適化
Introduction Hello! I am Ren.M, working on the front-end development of KINTO ONE (Used Vehicles) . I am pleased to announce that KINTO Technologies Corporation will be a Gold Sponsor at TSKaigi 2025, which will be held on Friday, May 23, and Saturday, May 24, 2025. What is TSKaigi 2025 TSKaigi is Japan's largest technology conference themed around TypeScript. Event Dates: May 23 (Fri) and 24 (Sat), 2025 Venue: Bellesalle Kanda (Chiyoda-ku, Tokyo) Official Website: https://2025.tskaigi.org/ Sponsored LT On the second day, from 11:20 to 11:30, our company's Torii( @yu_torii ) will be holding a sponsored LT! He is scheduled to talk on the theme of Backend Code-First OpenAPI Schema-Driven Development so please look forward to it! Sponsored Booth We have prepared a survey about TypeScript at our booth! Those who complete the survey can try their luck at our capsule toy machine and receive original novelty items as a gift! We Are Hiring At KINTO Technologies, we are looking for new team members to work with us! We are open to casual interviews to start with. If you are even slightly interested, please apply through the link below! https://hrmos.co/pages/kinto-technologies/jobs/0000127 Conclusion If you are interested, please visit our booth! We look forward to meeting you at the event!
はじめに こんにちは KINTO ONE(䞭叀車) のフロント゚ンド開発をしおいたすRen.Mです。 この床、KINTOテクノロゞヌズ株匏䌚瀟は 2025幎5月23日(金)・24(土)にお開催されるTSKaigi 2025ゎヌルドスポンサヌを務めたす。 TSKaigi 2025ずは TSKaigiは、日本最倧玚のTypeScriptをテヌマずした技術カンファレンスです。 開催日皋2025幎5月23日(金)・24日(土) 䌚堎ベルサヌル神田東京郜千代田区 公匏サむト https://2025.tskaigi.org/ スポンサヌLT 2日目の11:20〜11:30に匊瀟の鳥居( @yu_torii )によるスポンサヌLTを行いたす 「バック゚ンドのコヌドファヌストなOpenAPIスキヌマ駆動開発」 ずいうテヌマでトヌクを予定しおいたすのでお楜しみに スポンサヌブヌス ブヌスではTypeScriptにた぀わるアンケヌトを甚意しおいたす 回答いただけた方にはガチャガチャを回しおいただき、オリゞナルノベルティをプレれントしたす We Are Hiring KINTOテクノロゞヌズでは䞀緒に働く仲間を探しおいたす たずは気軜にカゞュアル面談からの察応も可胜です。少しでも興味のある方は以䞋のリンクからご応募ください https://hrmos.co/pages/kinto-technologies/jobs/0000127 おわりに 興味をお持ちの方はぜひブヌスたでお越しください 圓日みなさたに䌚堎でお䌚いできるのを楜しみしおいたす
Introduction Hello, this is Matsuo from the Cloud Infrastructure Group. Our team is responsible for taking care of a wide range of infrastructure-related tasks across the company, from design to operations. This time, I would like to introduce the AWS Transfer Family web apps , which were announced at re:Invent. https://aws.amazon.com/jp/about-aws/whats-new/2024/12/aws-transfer-family-web-apps/ In this article, I will give an overview of the web apps, the steps to create them, how to set them up, and share my impressions after trying them out. I hope you will find this helpful. Overview To put it simply AWS Transfer Family web apps let you build applications to manage files in S3 buckets directly from a browser without writing any code. Previously, accessing S3 through a GUI required dedicated tools like the AWS Console or WinSCP, both of which also needed configuration. This created challenges for non-technical and casual users as it made operation difficult. The new AWS Transfer Family web apps feature an intuitive interface that is easy to use, even without technical knowledge. Additionally, they are integrated with IAM Identity Center and S3 Access Grants, enabling fine-grained access controls. Pricing AWS Transfer Family web apps are billed hourly based on the number of units (each support up to 250 sessions for 5 minutes per session). Region Price Tokyo Number of units x 0.5 USD/hour For example, running one unit 24 hours a day will cost 12 USD/day , meaning it will cost 360 USD a month; so using it for long periods of time can be quite costly. That's a little pricey for such a simple service. Depending on the usage, the cost may outweigh the benefit, so it is important to use the service according to your needs. How to Create a Web App Now let's create a web app. (Note: Terraform is not supported at the time of writing this article, so I will use the AWS Management Console.) Log in to the AWS Management Console, select "Web Apps" from the AWS Transfer Family navigation pane, and click Create Web App. For now, just set the Name tag and click "Next." * IAM Identity Center configuration is required in advance . If you haven’t set it up yet, please make sure to prepare it in advance. Set the page title, logo, and favicon, then click "Create." This time, I will skip the logo and favicon.. This completes the creation of the web app! It's that easy! Configuring Users/Groups and S3 Access Grants Next, let's set up group assignments and S3 Access Grants for the web app. Group assignment Click "User and group assignment" on the web app details screen. Since I have already created groups, I will select an existing group to assign. Setting up S3 access grants Next is setting up Access Grants. There are two things to set: Location and Permissions. If you go to Access Grants from the S3 navigation pane, you will see the Permissions and Location tabs, from which you can use to configure access. Start by setting the Location. This defines the S3 bucket to be accessed, along with the IAM role that has the necessary permissions for that bucket. For testing purposes, I have granted the AWS managed policy "AmazonS3FullAccess" this time. Then move to Permissions. Specify the location you configured previously, then set the sub-prefix, permission level, grantee type, IAM principal type, and the IAM principal user, and create the permission. Authentication will be done through IAM Identity Center, and it is set up as shown in the image below. Although I have not set it this time, it seems possible to set app-specific access restrictions. Setting CORS Add CORS settings from Cross-Origin Resource Sharing (CORS) to the target S3 bucket so that you can view the contents of the bucket. Here’s the configuration I used: [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST", "DELETE", "HEAD" ], "AllowedOrigins": [ "https://${りェブアプリID}.transfer-webapp.ap-northeast-1.on.aws" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ] Try It Out If you made it this far, you're ready to go. After accessing the web app URL and completing authentication, the S3 management screen appears! You will see the S3 bucket you configured in Location settingss. Now let's actually try deleting an S3 file from the target bucket. I tried to access an object from a folder link, but... It didn't work. Turns out the IAM role used for Access Grants was missing the sts:SetContext permission. This is also mentioned in the User Guide as well. I added the settings and tried again, and was able to access the object successfully. By the way, if CORS is not configured properly, a Network Error will appear here. Now, let's select the object here and delete it. Simply select the file you want to delete (in this case, test1.txt) click the ellipsis, and choose Delete. The file has been deleted from the web app. I also confirmed that it was removed from the console. Impressions Although setting up IAM Identity Center and Access Grants was required, I was impressed by how easy it was to be able to build an S3 management app without writing any code. There were a few confusing aspects due to the numerous configuration settings, but I believe that support for Infrastructure as Code (IaC) will likely make it even more user-friendly in the future. This service is built on top of the Storage Browser for Amazon S3 , which was also announced at re:Invent, so if you are comfortable with programming, you can use that service to create your own customizations. https://aws.amazon.com/jp/about-aws/whats-new/2024/12/storage-browser-amazon-s3/ I hope this blog post was helpful to you.
はじめに こんにちはKINTOテクノロゞヌズでデザむナヌをしおいるKです。 普段はECサむトのUI/UXデザむンをメむンで担圓しおいたすが、時々コミュニケヌションデザむンも担圓させおもらう機䌚がありたす。 2024幎11月に開催された瀟内むベント「超本郚䌚」で、そのむベントの顔ずなるロゎの制䜜を担圓するこずになりたしたせっかくなので、今回はその制䜜の裏偎やこだわったポむントをゆるっずご玹介したいず思いたす。 ロゎっお䜕 ロゎっお、ただの食りじゃなくお、そのブランドやむベントの「顔」になるものですよね。 パッず芋ただけで「これはあのむベントだな」「これみたこずある」っおわかるし、芋た人にどんな印象を持っおもらうかを倧きく巊右したす。 「なんずなくカッコいいから」ずいう理由だけで䜜るのではなく、「このむベントっおどんな雰囲気」「どんなメッセヌゞを䌝えたい」「芋た人にどんな印象を持っおもらいたい」を考えながらデザむンしおいくこずが倧切だなず、改めお実感したした。 コンセプトを固めるむベントの栞を探る たずはむベント党䜓のアヌトワヌクを監修するアヌトディレクタヌの方にヒアリング。 むベントの目的や䌝えたいメッセヌゞを敎理しながら、ロゎに蟌めるコンセプトを考えおいきたした。 超本郚䌚むベントコンセプトは「䞻䜓性」ず「亀流」。 仲間ず䞻䜓的に぀ながる堎であるこず 自分たちが「䞻䜓的に行動できる䌚瀟だ」ず実感できるこず 仲間ずワむワむ楜しむ゚ネルギヌが、次の挑戊ぞの掻力になるこず こうした思いを、「自由に楜しめるデザむン」「仲間ず盛り䞊がれる゚ネルギッシュな雰囲気」で衚珟したいず考えたした。 デザむンの方向性を探る 次は、コンセプトをもずに、どんなビゞュアルが合うかを探るフェヌズ。 「自由に楜しめるデザむン」「仲間ず盛り䞊がれる゚ネルギッシュな雰囲気」をどう衚珟するかを考えたずきに浮かんできたのが、「オタク文化×テクノロゞヌ」ずいうテヌマでした。 むベントには、開発やクリ゚むティブに関わるメンバヌが倚く参加したす。そういった参加者たちにずっお、アニメやゲヌム、メカ、マンガずいった“オタク的”なカルチャヌは、芪しみがあっおワクワクする芁玠のひず぀。そこにテクノロゞヌの未来感を掛け合わせるこずで、より自由で、ポゞティブな熱量を持った䞖界芳を぀くれるず考えたした。 怜蚎したビゞュアル芁玠はこんな感じ メカ・ロボット・特撮の芁玠 無機質な硬さやメカっぜさを取り入れる 挫画・コミック的な芁玠 勢いのある文字や吹き出しのようなシェむプを詊す デゞタル感のあるタむポグラフィ 少し未来感のある雰囲気に たずは手描きでラフスケッチを描きながら、アむデアをどんどん出しおいきたした。 ラフ案を遞定しお、デヌタ化ぞ スケッチから方向性が芋えおきたずころで、Illustratorを䜿っお本栌的にデヌタ化。 ラフを敎理しながら、ベヌスずなる圢を䜜成 埮劙なニュアンスの違いで耇数バリ゚ヌションを制䜜 アヌトディレクタヌず「どれが䞀番コンセプトを䜓珟できおいるか」を怜蚎 もちろんボツ案もたくさん出たしたが、この詊行錯誀のプロセスこそが、いいデザむンを生むためには欠かせないず改めお感じたした。 ディテヌルの磚き蟌み ラフが固たったら、仕䞊げフェヌズです。ここでは、现かい郚分たで玍埗がいくように調敎を重ねおいきたした。 そしお、 ロゎの印象を決定づける倧きな芁玠のひず぀が「フォント」。 䟋えば、䞞みを垯びたフォントは柔らかさや芪しみやすさを感じさせ、シャヌプなフォントは掗緎された印象を䞎えたす。ちょっずした違いが、ロゎ党䜓の雰囲気を倧きく巊右するんですよね。 今回は既存のフォントに頌らず、オリゞナルでフォントを曞き起こしたした。むベントのキヌワヌドである「䞻䜓性」ず「亀流」をむメヌゞしながら、以䞋の点を意識しお調敎 芖認性の向䞊 読みやすく、文字の幅や瞊暪比、䜙癜を敎えるこずで党䜓にたずたりを持たせる 曲線の調敎 パスの数を枛らしお、滑らかで敎った印象に 挢字ずカタカナの調和 䞊んだ時に違和感が出ないよう、圢状の統䞀感を意識 赀い基準線ず芋比べるず、最終的な圢は倧きく倉化したした。フォント遞びや现郚の圢の違いが、ロゎの印象を倧きく巊右するこずを、改めお䜓感したプロセスでした。 ロゎの完成遊び心ず汎甚性のバランス そしお぀いにロゎが完成したした 遊び心を取り入れ぀぀、いろんな堎面で䜿いやすい汎甚性をキヌプ サブカル×テクノロゞヌのミックス感が自然に衚珟できた シェむプやフォントにこだわるこずで、党䜓の完成床がUP たずめ ロゎデザむンっお、本圓にちょっずした差で印象が倧きく倉わるものなので、「これだ」ず思えるたでやりきるこずが倧事だなず、今回改めお思いたした。 今回は「なんずなくカッコいい」だけじゃなく、「このむベントらしさがちゃんず䌝わっお、いろんな堎所で䜿えるデザむン」に仕䞊げられたかなず思っおいたす。 この蚘事が、誰かのデザむンのヒントや気づきになればうれしいです
久しぶりのブログにどきどき。KINTOテクノロゞヌズ以䞋KTC略・クリ゚むティブ宀の杉本です。 匊瀟は䌚瀟蚭立から3幎目にあたる2024幎、コヌポレヌトサむトをリニュヌアルしたした。蚭立から3幎、今埌もいっしょに働く仲間を増やすため、採甚掻動にフォヌカスしたコヌポレヌトサむトにしたいず人事郚からリク゚ストがあり、プロゞェクトがはじたりたした。 採甚にフォヌカスしたコヌポレヌトサむトずいうこずで、人事郚はもちろんですが、䌚瀟の進むべき方向性を経営者から、珟堎の声を拟い䞊げるために、゚ンゞニアで぀くられた技術広報郚のメンバヌぞヒアリングを行いたした。 「䌚瀟が欲しい人材は、そもそもどんな人だ」、「我々はどんな仲間ずいっしょに働きたいのか」など、それぞれの芖点から、課題感や垌望をヒアリングするず、コヌポレヌトサむトが果たす圹割が明確になっおいきたした。 「垞にテクノロゞヌぞの興味を持ち、最新の技術ぞの感床が高く、 自発的に動く゚ンゞニアクリ゚むタヌぞ、KTCらしさを䌝えるサむトにしおいこう」。この目的をもずに、コンセプトを打ち出したした。 コンセプトは「The Power of Technology & Creativity」。トペタのモビリティサヌビスをテクノロゞヌずクリ゚むティビティでリヌドしおいこうずいう気持ちを蟌めたワヌドにしたした。 コンセプトを立おおおくのは、ひず手間なのかもしれたせんが、制䜜過皋で迷うずきに、立ち戻る堎所ずしお、様々な職皮の人が関わる案件ではずくに重芁です。 「そんな機胜はいるのだろうか」「もっず、おもしろく魅せるこずはできないか」芖点の違う問いにも、このコンセプトがあれば、「だから、やる」「だから、やらない」の刀断がしやすくなるからです。 パヌ゜ナリティの蚭定 次にクリ゚むティブ宀ずしお手がけたのは、䌚瀟を人ずしお䟋えたら、どんな人で、どんなふるたいをするのかを明確にする「ブランドパヌ゜ナリティ」を蚭定。※ブランドパヌ゜ナリティに぀いおは 埌述  「ブランドパヌ゜ナリティ」は、䜕もないずころからはじめるず、党瀟を巻き蟌むレベルの開発になるので時間ずカロリヌを䜿うのですが、コヌポレヌトサむトのロヌンチは、採甚が目的なだけにスピヌドが重芁。そこで、匊瀟ですでに明文化しおいた「ビゞョン」、「バリュヌ」、「カルチャヌ」、「働く姿勢」をもずに進めたした。 導き出したKTCのパヌ゜ナリティは、ずばり「クリ゚むタヌ」。創造者ずいう圹割で、私たちは「テクノロゞヌやクリ゚むティブの力でお客様にずっお、最高の䜿いやすく、分かりやすく、人に寄り添っお、䟿利なプロダクトを䜜る存圚である」ず、定矩したした。 盛り䞊がるムヌドボヌドづくり ブランドパヌ゜ナリティが決たったので、次は具䜓的にコヌポレヌトサむトの衚珟デザむンをどう萜ずしおいくかになりたす。そこで、もうひず手間担圓デザむナヌが手を動かす前に、クリ゚むティブ宀党員で、ムヌドボヌドを぀くりたした。 この䜜業をするこずで、コンセプト同様、ビゞュアル面でも立ち戻る堎があるので、迷走するこずがなくなるので、アりトプットたでがスムヌズになりたす。 自分たちが思うKTCらしいビゞュアルなどを持ち寄り、デザむナヌどうし、ムヌドボヌドづくりはずおも盛り䞊がりたした。 ムヌドボヌドを぀くるこずで、新たな発芋もありたした。それたでは、いわゆるカリフォルニアのキラキラしたテックカンパニヌの勢いで制䜜したアりトプットになるかなず想定しおいたのですが、䌚瀟の存圚を「我々は〜である」ずいう芖点で取り組むず、トペタグルヌプの珟堎䞻矩を根底に据えた、日本のモノづくりのスピリットを尊重したプロフェッショナル゚ンゞニアリング集団であるありたいずいう点が芋えおきたした。 ムヌドボヌドは、䞖界基準のモダンなシステムず、ブランドパヌ゜ナリティをベヌスずし、䜿いやすさず䌁業ブランドのうえに、衚珟を茉せたアりトプットを目指したした。 クリ゚むティブのゞャンプアップず効率化が実珟 「パヌ゜ナリティ」「ムヌド」「サむトの目的」をクリアにしたこずで、撮圱のトヌン、むンタビュヌ内容、コピヌ、実装、すべおが䞀貫した぀ながりで぀くれたので、結果的にクリ゚むティブのゞャンプアップず効率化が叶うなず改めお思いたした。デザむナヌ以倖の関係者ず話すずきも、ロゞカルに説明ができ、デザむンの蚀語化たでが叶いたした。 おかげさたで海倖アワヌドを受賞 こうしお、リニュヌアルができたコヌポレヌトサむトですが、おかげさたで囜際的なWebデザむンアワヌドである「CSS Design Awards」をはじめずする、耇数の海倖Webデザむンアワヌドを受賞するこずができたした。 みなさんもご芧になっお、もしよければ、私たちに興味をもっおいただければず思いたす コヌポレヌトサむトはこちら https://www.kinto-technologies.com/ ※ブランドパヌ゜ナリティずは ブランド䌁業を人間に䟋えるずどんな芁玠、性栌で構成されおいるかを瀺したものですアヌキタむプ。䞀般的に「人柄」を12の属性に分けたフレヌムワヌクを掻甚し、䌁業の性栌、思考、行動、振る舞い、持ち味などを探求しおいきたす。これを持っおいるず、統䞀されたブランドむメヌゞを垞に発信するこずができるので、to Cでなくおも、今回のようなコヌポレヌトサむト制䜜やむベントで配るグッズたで、タヌゲットずなる人に同じ印象でアピヌルするこずができたす。
This article is the entry for day 19 in the [KINTO Technologies Advent Calendar 2024](https://qiita.com/advent-calendar/2024/kinto-technologies)🎅🎄 1. Tech Blog Debut Hello! I'm Shiori ( @shor_t8q ) from the Generative AI Development Project. I am currently in charge of training, use case development, and technical support for generative AI! (Though I chose Web3 as the topic for my first Tech Blog post.) This blog is about how we used NFTs at a team activity during the CHO All-Hands Meeting (an in-person meeting event that brought together all employees across all offices) held on November 28, 2024. This is the perfect content for anyone interested in the in-house planning and deployment of large-scale company events, incorporating NFTs into internal activities, or learning more about the company culture at KINTO Technologies. Premise The NFT initiative introduced in this blog was made possible through the cooperation and dedication of all the organizers of the CHO All-Hands Meeting, the activities team, the novelty team, and the Creative Office. Furthermore, this blog is not sponsored by any of the companies providing the NFT services discussed here. The purpose of this blog is solely to share the experiences, creativity, insights, and lessons learned by those in charge of the activities and novelties. 2. About the CHO All-Hands Meeting ![01_chohonbukai](/assets/blog/authors/shiori/2024-12-19/01_chohonbukai.png =750x) 2-1. What is a CHO All-Hands Meeting? A CHO All-Hands Meeting is a company-wide event held by KINTO Technologies approximately once or twice a year. The CHO All-Hands Meeting covered in this blog was held on November 28, 2024, with approximately 300 attendees in person and around 50 attendees online. The meeting took place from 3:00 PM to 9:00 PM and was a highly exciting event with a wide variety of content. 2-2. Being Part of Organizing the activities and novelties About a month and a half before the CHO All-Hands Meeting, members from various departments came together to form the organizing team. I was assigned to be part of the team in charge of activities and novelties. ![02_novelty](/assets/blog/authors/shiori/2024-12-19/02_novelty.png =750x) To promote communication across the company, we decided to create desk nameplates as novelty items. The design was handled by J-san from the Creative Office. 2-3. Concept of the CHO All-Hands Meeting The event's concept was "KTC is Made by You”, which was shaped by gathering input from executives, department heads, and managers about their thoughts on teamwork, company culture, and their vision for the future. ![03_concept](/assets/blog/authors/shiori/2024-12-19/03_concept.png =750x) 3. Activities at the CHO All-Hands Meeting 3-1. What is a team activity? It was the final section of the event, held at the end of the meeting from 7:00 p.m. to 9:00 p.m. Based on the concept of the CHO All-Hands Meeting, the activities team set the following two goals: To promote communication among participants and between members of different departments. To deliver an experience that leaves participants feeling grateful they joined. 3-2. What led to the use of NFTs in the team activity? The activity featured an NFT stamp rally, but why choose that format? I was originally in charge of novelties, but the idea started when I wondered, "What if the novelty items were NFTs?" and "Could this serve as inspiration for future NFT and Web3 projects?" I was also motivated by the desire to try something new and different. With that in mind, I began exploring ways to incorporate NFTs that aligned with the theme of the CHO All-Hands Meeting. Through online research, I discovered the concept of an "NFT stamp rally." Around the same time, members of the organizing team shared that a digital stamp rally had been used at the previous CHO All-Hands Meeting. That inspired us to take it a step further and evolve the concept into an NFT stamp rally. From that point on, I joined the team activity planning discussions, and we began exploring how to bring the NFT stamp rally to life. ![04_nft_idea](/assets/blog/authors/shiori/2024-12-19/04_nft_idea.png =400x) 4. What Is an NFT? 4-1. NFTs Are Unique Digital Assets NFT stands for "Non-Fungible Token." NFTs are one-of-a-kind digital assets that cannot be exchanged for other tokens due to their uniqueness and characteristics. In addition, NFTs use blockchain technology to ensure transparency in transactions. For example, Bitcoin is a fungible token, meaning one Bitcoin holds the same value as another, whereas NFTs are non-fungible because each NFT holds its own unique value. ![05_nft](/assets/blog/authors/shiori/2024-12-19/05_nft.png =400x) Because of their non-fungible nature, NFTs have become a new tool to enhance fan engagement in art, games, music, movies, sports, entertainment, and corporate marketing activities, and their application in other industries is expanding as well. While NFTs provide a means of monetization for creators and a new marketing tool for companies, improving the transparency and traceability of transactions, they also come with challenges such as the environmental impact from the large amount of electricity it requires during mining, legal risks, and price volatility due to market fluctuations. 5. NFT Stamp Rally 5-1. Is it feasible to hold an NFT stamp rally at the team activity? Conducting a survey To explore whether it was feasible to distribute and exchange NFTs as part of the team activity, we began by conducting some research. Through this process, we came across a company called Sushi Top Marketing which has an extensive track record with NFT use cases including organizing NFT stamp rallies. They are also promoting a new concept called “Token Graph Marketing.” What is Token Graph Marketing? Token Graph Marketing is a new marketing approach that uses blockchain technology to reach users while protecting their privacy. Users' hobbies, preferences, and behavioral history can be analyzed based on their NFTs and other token information. ![06_token_graph_marketing](/assets/blog/authors/shiori/2024-12-19/06_token_graph_marketing.png =750x) Source: What is Token Graph Marketing? Initial Ideas I had several discussions with the vendor based on the following initial ideas: Content Description Novelty Concept Activating communication among members who rarely interact with each other, stimulate communication and promote innovation, fostering a sense of unity, and provide novelties that appeal across age and gender. The solution should not deviate from this core concept. Accessibility Since the stamp rally would be held on a single day, it needed to be intuitive and easy to use Must be supported for both app and via QR code scanning. Value as a Novelty Showcase NFTs as a new type of novelty item, something participants can transfer to their own wallet and keep as a digital asset. Innovation Reflect the company’s emphasis on creativity and technology by trying something that hasn’t been done before. Brand Alignment Customize the UI to reflect the company’s brand identity, including its colors and character. Concept Visualization For example: “Each department has a different NFT stamp. When Employee A speaks with Employee B from another department, A receives a stamp from B’s department.” This encourages interdepartmental interaction. 5-2. Blockchain Technology Behind the NFT Stamp Rally For the NFT stamp rally, we chose to use Astar, a next-generation blockchain platform known for its compatibility with smart contract and dApps (decentralized apps). Astar is part of the Polkadot ecosystem, enabling interoperability between different blockchains. ![07_astar](/assets/blog/authors/shiori/2024-12-19/07_astar.png =750x) 5-3. NFT Stamp Rally Concept Idea brainstorming We received four initial proposals for the NFT stamp rally: Proposal Description NFT Card Exchange Participants collect NFTs by exchanging digital cards. Additional NFTs can be unlocked upon exchange. Dynamic NFT Stamp Rally Collecting specific NFT pairs unlocks special NFTs. Different combinations yield different results. NFT Distribution via LINE Commemorative NFTs are distributed through an official LINE account. Those who hold them receive a gift. NFT Business Cards & Stamp Rally NFC or QR-enabled cards are handed out before the event. These cards serve as novelties and as tools for collecting NFTs during the rally. We discussed and refined the proposals based on the following criteria: Criteria Criteria Description Workload Can everything be prepared in about one month? Usability Is it intuitive, with little to no manuals or explanations? Operability Can it run smoothly, in a relaxed atmosphere in an event with 300 participants? Simplicity Can it be used without complex operations or steps? Accessibility Can it be accessed without restrictions, needing third-party services? Innovation Does it offer an interesting NFT experience? Security Does it ensure data privacy and protection? Scalability Can it handle simultaneous access from a large number of users? Compatibility Is it mobile-friendly and Web3-compatible? Budget Alignment Is it achievable within the budget? Combining the ideas and our requirements, we finalized the following plan: 5-4. NFT Stamp Rally Planning Details Overview of the NFT stamp rally We issued 14 NFTs, covering each department, management team, and a completion certificate. Participants would visit different zones during the activity (such as spots where the management and award recipients are present), collect NFTs that are different from the ones they already hold, and engage in communication with members from other departments or the management team, whom they don't often have the chance to interact with. This promotes the start of new projects and fosters relationship-building. A gamified element was added, in which participants who collected all 13 NFTs could earn a final “completion” NFT, which was redeemable for a prize. NFT Collection Points Each participant’s name tags (distributed at check-in) would contain an NFC tag -explained later- and a QR code, allowing participants to collect NFTs through either NFC tapping or QR scanning. Providing both options ensured accessibility for participants who couldn’t use NFC. NFT Stamp Rally Flow Participants visit each zone. Interact with members from other departments and management. Post what they discussed in the chat linked to the department's NFT (sharing the conversations in the NFT-linked chat adds unique value to each department's NFT). Exchange NFTs with the members they interacted with and collect 13 NFTs. Earn the completion NFT. Post their Slack name in the completion NFT chat. The event staff later award prizes via Slack. NFT Design Since this was a company-wide event, we incorporated KINTO's brand character, Kumobii , into the NFT designs to strengthen the sense of unity and identity. ![nft_collections](/assets/blog/authors/shiori/2024-12-19/08_nft_collections.png =750x) The NFT artwork was created by Momoi-san from the Creative Office. NTF Innovations We added original value to NFTs by: Each department having its own unique design. NFT names were written in both Japanese and English to accommodate global members. A unique collection name and event date attribute were added to each NFT. All NFTs included the keyword "KTC is Made by You," the theme of the CHO All-Hands Meeting. When combined, the NFTs formed the full theme of the activity. 6. Challenges in Realizing an NFT Stamp Rally 6-1. How Should NFTs Be Exchanged? What channel should be used? What technology should be adopted? Using NFT x NFC tags As an element of this get-together, we placed importance on adding small surprises and discoveries, such as "Oh, I didn't know that was possible!". By combining ideas from service providers and the organizing team members, we made it possible to receive an NFT simply by tapping a smartphone on an NFC chip embedded in a name tag. *NFC (Near Field Communication) is a technology and standard that enables wireless communication between devices in close proximity. . It's used in a wide range of applications, including smartphones, IC transit cards, credit cards, and smart appliances. How to write NFT information ito NFC tags? NFC tag: www.amazon.co.jp/dp/B0DFW9WTRW NFC writing app: https://apps.apple.com/jp/app/nfc-tools/id1252962749 We procured NFC tags from Amazon manually wrote NFT URLs for 13 types and approximately 300 people. To cover potential failures, we also prepared NFT QR codes for all participants. This process was carried out manually (the organizers, thyt-san and Oka-san, did the writing.) The completed tags were inserted into name holders. ![09_nfctag](/assets/blog/authors/shiori/2024-12-19/09_nfctag.png =400x) 6-2. How were the rules communicated to all participants? During the host's introduction before the start of the NFT stamp rally, the “NFT Stamp Rally Guide” was projected on screen, while the host and I worked together to make sure everyone was aware of the rules of the NFT stamp rally. ![10_guide](/assets/blog/authors/shiori/2024-12-19/10_guide.png =750x) 6-3. Since NFT exchange is done on a browser-based web app, how can participants avoid losing track of the NFTs they have acquired? I worked with the event MCs to provide the following information through the projected materials: The web app runs in a browser. Don’t use incognito mode. After acquiring your first NFT, add a NFT list shortcut to your home screen. Take a screenshot of your NFT backup code displayed during the NFT exchange. 6-4. How to issue completion NFTs Participants who collected all NFTs could show their NFT list to staff to receive a special completion NFT. ![11_nft_list](/assets/blog/authors/shiori/2024-12-19/11_nft_list.png =400x) 7. Lessons Learned 7-1. NFT exchange became the only activity everyone had time for Although we got to meet many team members we don't usually talk to, it was difficult to even find time to eat. It was difficult to share conversations with members in the chats linked to NFTs as originally envisioned, and achieving the goal of "accumulating the insights and ideas of department members in each department's NFTs and turning them into unique value for each department's NFT" proved challenging. In addition, the original plan envisioning people exchanging NFTs across zones (spots where management, honored members, awarded members, would stay) didn’t pan out either. At an activity that encourages free communication, there was no need to set up zones. 7-2. We should have supported NFT type-checking Participants commented that, since it was possible to obtain multiple NFTs from any member of the same Department A, participants often ended up with similar designs, such as multiple NFTs from Department A. This made it difficult to check which types of NFTs were still missing. This should have been considered in advance and addressed. 7-3. The completion process should've been simpler. As mentioned in 5-4, things didn’t go as smoothly as expected. Asking participants to post a screenshot of their completed NFT list in Slack could have helped. It would have made it easier for staff to confirm completions. Also, by reporting completion in an open space such as a Slack channel, "My colleague, so and so, has completed it!" would have motivated others and encourage more participation. 7-4. More flexibikity in choosing channels for NFT touchpoints. We manually wrote NFT URLs for 300 people onto the NFC tags. However, considering the potential for human error and the amount of workload involved, it may be better to explore other touchpoints and channels for larger events. 7-5. Provide more proactive English support About 25% of KINTO Technologies' employees are international. Although presentation slides were prepared in both Japanese and English, but when speaking with several international members at the activities, we found ourselves giving additional explanations in English during the event. Things would have gone even more smoothly if we had shared the presentation materials on the Slack channel beforehand and provided explanations in English at the start of the stamp rally. 8. NFT Stamp Rally Results 8-1. 10% of Participants Completed the Rally!!! Out of approximately 300 participants, 30 people, or 10% of the participants completed the NFT stamp rally . ![12_nft_complete](/assets/blog/authors/shiori/2024-12-19/12_nft_complete.png =400x) 8-2. Overall results A total of 1,734 NFTs were distributed. On average, participants exchanged 6.6 NFTs per person , with a median of 6 . That means each participant talked to members from around 6 different departments . One of the goals was to interact with members from other departments at the team activity, so it can be said that the NFT stamp rally fulfilled that goal. Metric Result Completed participants 30 Total NFTs issued 1734 Average NFTs exchanged 6.6 Median NFTs exchanged 6 9. Future Posibilities for NFTs We learned that NFT stamp rallies can visualize movement and engagement at in-person networking events. Interestingly, it allowed us to see how many NFTs each department issued, which enabled us to identify which departments were most active in communicating with other departments. This experience expanded our vision on how NFTs could be used both online and offline in KINTO Technologies' KINTO product offerings, such as MaaS-related apps and member services. For instance, I thought that NFTs could be effective for approaching customers based on their hobbies and preferences, rather than traditional attributes such as age and gender, and for visualizing customer communication and behavior. ![13_products.jpeg](/assets/blog/authors/shiori/2024-12-19/13_products.png =750x) 10. Conclusion Through the NFT stamp rally initiative, we realized the potential that can arise from the fusion of new technologies and ideas. It was a valuable experience to create an opportunity for members from different departments to interact and engage with technology in a fun way during a team activity. We’ll keep exploring how to integrate new technologies in engaging ways and share our findings along the way. If you're thinking about trying a project involving NFTs, AI, or Web3, go for it! I'm sure you'll discover something interesting! Thank you for reading until the end!
自己玹介 2025幎3月からKTCに入瀟したtetsuず申したす。 前職ではむンフラ゚ンゞニア(オンプレ・クラりド)をしおおり、KTCではPlatform゚ンゞニアずしおゞョむンしたした。 旅行ず自然が奜きで倧きな䌑みのたびにどこか遠出にしおいたす。 抂芁 本蚘事では、Github Actionsのワヌクフロヌにお、Docker Hubからパブリックコンテナむメヌゞ(JDK, GO, nginxなど)をPullしおいた蚭定を、ECR Public GalleryからPullするように移行する手順や蚭定を玹介したす。 2025幎4月1日から、未認蚌ナヌザによるDocker HubのパブリックコンテナむメヌゞPullに察しお制限が厳しくなるずいう話でした。 具䜓的には、認蚌されおいないナヌザによるPullは、゜ヌスIPアドレスあたり10回のPull/時間に制限されるこずになりたす。 詳しくは こちら 。 Github Actionsのワヌクフロヌを実行する仮想マシンは党ナヌザが共有されるため、Docker Hubからみた゜ヌスIPアドレスも限られたものになりたす。よっお䞊蚘の制限により、Github Actionsを䜿っおコンテナのBuildを行うにあたりネックずなるため、察応策を緎る必芁がありたした。 前提構成 匊瀟では以䞋のような構成でGithub Actionsを利甚し、コンテナのBuildを自動化しおいたしたざっくり抜象化した構成になりたす。 察応策の怜蚎 Pull制限問題ぞの察応策をいく぀か怜蚎したした。 Personal Access Token(PAT)を䜿甚しおDocker HubにログむンしたうえでPull 「そもそもDocker Hubに認蚌すればいいじゃん」ずいう声が聞こえおきたす。 Docker HubのPATを発行しお、Github ActionsのワヌクフロヌでそのTokenを利甚しおdocker loginするこずで認蚌できたす。 それによりPull制限を回避するこずができたす。 ただし、PATは個人に玐づきたす。 匊瀟ではGithub Actionsをチヌムで共甚しお䜿甚するため、個人にTokenが玐づいおしたうず、ラむセンス管理の面で奜たしくないず考えおいたす。 Organization Access Token(OAT)を䜿甚しおDocker HubにログむンしたうえでPull 䞊蚘の方法ず同じになるのですが、異なる点はOATずいう組織に玐づいた共有Tokenで認蚌するずいう点になりたす。 この共有Tokenを利甚するには、Docker DesktopのラむセンスをTeamもしくはBusinessにする必芁がありたす。 Github Container Registry(GHCR)ぞ移行 Githubが提䟛するGithub Container Registry(GHCR)からコンテナむメヌゞをPullする方法です。 Github Actionsのワヌクフロヌで{{ secrets.GITHUB_TOKEN }}を䜿甚しお認蚌するこずで、コンテナむメヌゞをPullするこずができたす。 ただし、コンテナむメヌゞの怜玢をするのが少し癖があり、怜玢しづらいですDocker Hubで提䟛されおいるバヌゞョンず比范するのが難しい印象です。 ECR Public Galleryぞ移行 AWSが提䟛するECR Public GalleryからコンテナむメヌゞをPullする方法です。 ECR Public GalleryにIAMを利甚しお認蚌するか、認蚌しないかで制限が異なりたすが、基本的には無料で䜿うこずができたす。 ECR Public Galleryに未認蚌ナヌザは゜ヌスIPアドレスあたり以䞋のような制限になりたす。 1回/秒のPull 500GB/月のPull 䞀方で認蚌ナヌザに぀いおはアカりント単䜍で以䞋のような制限になりたす。 10回/秒のPull 5TB/月を超える転送に぀いおは0.09USD/GB(5TBたでは無料) 以䞋ドキュメントにお詳现な䞊限が蚘茉されおいたす。 https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/public/public-service-quotas.html https://aws.amazon.com/jp/ecr/pricing/ AWS アカりントを利甚しおいない堎合、パブリックリポゞトリから転送されるデヌタは゜ヌス IP によっお制限されたす。 ECR Public GalleryにはDocker公匏のコンテナむメヌゞがあり、それがDocker Hubのコンテナむメヌゞず察応しおいたす。 そのため運甚䞊利甚しやすく、容易に移行がしやすいです。 案比范 䞊蚘の案をたずめおQCD評䟡したした。 比范衚は以䞋の通りです。 案 Quality Cost Delivery PATを䜿甚しおDocker Hubにログむン × - 個人トヌクンに䟝存する状態のため組織ずしおは奜たしくない - 利䟿性に぀いおは珟状ず倉わりなし 〇 远加費甚なし 〇 察応が工数が少ないためすぐ実装可胜 OATを䜿甚しおDocker Hubにログむン 〇 珟状から倉わりなし × 利甚ナヌザに応じおラむセンス費甚が増える × ラむセンス倉曎にリヌドタむムがかかる GHCRぞ移行 △ Docker Hubで利甚しおいるむメヌゞずの察応が怜玢しづらい 〇 远加費甚なし 〇 察応が工数少ないためすぐ実装可胜 ECR Public Galleryぞ移行 〇 Docker Hubで利甚しおいるむメヌゞずの察応が怜玢がしやすい 〇 远加費甚なし 〇 察応工数が少ないためすぐ実装可胜 PATずOATを利甚する案は珟状から利䟿性が倉わらない点は優䜍である GHCRはGithubの{{ secrets.GITHUB_TOKEN }} を利甚するこずで容易に実装ができるが、ECR Public Galleryず比べおコンテナむメヌゞの怜玢がしづらい ECR Public GalleryはIAMポリシヌで蚭定倉曎が必芁であるが、軜埮な修正であるので察応工数はそこたで増えない 䞊蚘を螏たえお、匊瀟では、察応工数が少なく、远加費甚がかからない、か぀利䟿性の高い「ECR Public Galleryぞ移行」案を採甚するこずにしたした。 ※ 各個人・各瀟によっお環境は倉わるので、必ずしもこの遞択がよいずは限りたせん。 ECR Public Galleryぞ移行するための蚭定 コンテナむメヌゞの取埗元修正、Github Actionsのワヌクフロヌを定矩するYAMLファむル、AWSでの蚭定が必芁になるためそれらを蚭定したす。 構成図 コンテナむメヌゞの取埗元修正 コンテナむメヌゞの怜玢 Dockerfileやdocker-compose.ymlなどでどこからコンテナむメヌゞをPullするかを指定しおいるかず思いたす。今回はDockerfileでJDKのコンテナむメヌゞの取埗元をDocker HubからECR Public Galleryに移行するケヌスで説明したす。 以䞋のようにDockerfileのFROM句があるずしたす。 FROM eclipse-temurin:17.0.12_7-jdk-alpine ECR Public Galleryにこのむメヌゞが存圚するかを こちら で怜玢したす。 今回だず:の前のDocker Hubの公匏コンテナむメヌゞ今回は eclipse-temurin を怜玢しお、by Dockerになっおいるものを遞択したす。 「image tags」を遞択しお、むメヌゞ䞀芧を衚瀺したす。 Docker Hubの公匏コンテナむメヌゞのタグ今回は 17.0.12_7-jdk-alpine をimage tagsの怜玢欄に入力し、察象むメヌゞを怜玢したす。そしお、「Image URI」をコピヌしたす。 コンテナむメヌゞの取埗元修正 FROM句に修正埌のコンテナむメヌゞのURIをペヌストしたす。 今回だず、以䞋のように修正になりたす圓初のURIず比べおpublic.ecr.aws/docker/library/が远加されおいたす。 FROM public.ecr.aws/docker/library/eclipse-temurin:17.0.12_7-jdk-alpine これでECR Public GalleryからコンテナむメヌゞをPullするように蚭定ができたした。 AWSの蚭定 ECR Public Galleryに認蚌しおログむンした状態でPullできるようにするため、IAMロヌルずIAMポリシヌを䜜成したす。 IAMロヌル Github公匏ドキュメントで手順の案内があるので、こちらを参考にしおください。 https://docs.github.com/ja/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services IDプロバむダの構築 -> IAMロヌルの構築の順に察応ずなりたす。 IAMポリシヌ ECR Public GalleryからPullするためのアクションを蚱可するIAMポリシヌを䜜成したす。 以䞋ドキュメントを参考にしおいたす。 https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/public/docker-pull-ecr-image.html { "Version": "2012-10-17", "Statement": [ { "Sid": "GetAuthorizationToken", "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken", "sts:GetServiceBearerToken" ], "Resource": "*" } ] } このIAMポリシヌを䞊蚘で䜜成したIAMロヌルにアタッチをしたす。 Github ActionsにECR Public Galleryぞのログむン凊理の远加 ECR Public Galleryに認蚌した状態でログむンするよう、Github Actionsのワヌクフロヌを定矩するYAMLファむルでログむン凊理を远加したす。 匊瀟の環境ですず、Docker Buildのステップの前に以䞋の蚘茉を远加したす。 ## ECR Public Galleryぞログむン - name: Login to ECR Public Gallery id: login-ecr-public run: | aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws ※ ECR Public Galleryがus-east-1リヌゞョンに存圚するため、 --region us-east-1 で明瀺的に指定したす。 さいごに Github Actionsのワヌクフロヌにお、Docker Hubからパブリックコンテナむメヌゞ(JDK, GO, nginxなど)をPullしおいた蚭定を、ECR Public GalleryからPullするように移行する手順や蚭定を玹介したした。 この蚘事が皆様の開発や業務に圹立おば幞いです
こんにちは。 DBRE チヌム所属の @p2sk です。 DBREDatabase Reliability Engineeringチヌムでは、暪断組織ずしおデヌタベヌスに関する課題解決やプラットフォヌム開発に取り組んでいたす。 先日、OSS のリポゞトリ terraform-provider-aws に察しおコントリビュヌトする機䌚がありたした。具䜓的には、AWSが 2024 幎 10 月に䞀般提䟛を開始した DynamoDB or S3 ず Redshift ずの マネヌゞドなデヌタ連携を Terraform で管理できるようにする「 aws_redshift_integration 」ずいうリ゜ヌスを新芏実装したした。 PR は既にマヌゞ されおおり、 v5.95.0でリリヌス され、機胜が䜿えるようになりたした。 私は今回が初めおの OSS 貢献だったので、完走できるか䞍安な郚分もありたしたが、生成 AI の力も借りながら PR の䜜成たでやり切るこずができたした。 新機胜が AWS で GA されおから、Terraform で管理できるようになるたでterraform-provider-aws に新芏リ゜ヌスずしお実装されるたで、数ヶ月かかる堎合もありたす。そのような堎合に、実装されるのを埅぀代わりに自分で実装する遞択肢を取れるようになったこずは、倧きなアドバンテヌゞだず感じたした。そこで本蚘事では、私ず同じように初めお Terraform の AWS Provider に新芏リ゜ヌスを远加するコントリビュヌションに取り組みたいず考えおいる方に向けお、初回から効率的に取り組んでもらえるような情報を提䟛するこずを目指したす。 いずれはコヌディング゚ヌゞェントに issue を枡すだけで PR 䜜成たで行っおくれる未来になっおいるかもしれたせんが、珟時点ではそこたでは難しい印象で、同じような境遇の方の参考になれば幞いです。 今回远加したリ゜ヌスに぀いお 今回は以䞋の 2 ぀の機胜を管理できるリ゜ヌスを远加したした。それぞれ簡単に説明したす。 DynamoDB から Redshift ぞの zero-ETL 統合 S3 から Redshift ぞの event integration zero-ETL 統合は、ETL パむプラむンの構築が䞍芁な、マネヌゞドなデヌタ連携機胜です。「zero-ETL 統合」ずいう機胜は、最初は Aurora MySQL ず Redshift 間のデヌタ連携ずしお提䟛が開始され、その埌耇数のデヌタ゜ヌスずタヌゲットに察象が拡倧しおいたす。アヌキテクチャ図を以䞋に瀺したす。 ![DynamoDB から Redshift ぞの zero-ETL 統合のアヌキテクチャ図](/assets/blog/authors/m.hirose/2025-04-23-11-13-17.png =700x) 出展AWS - Amazon Redshift ずの Amazon DynamoDB れロ ETL 統合の始め方 S3 から Redshift ぞの event integration も同様に、S3 バケットに远加されたファむルを自動か぀高速に Redshift に連携する機胜です。 これらは機胜ずしおは別々ですが、 Integration を䜜成する API は同䞀 です。terraform-provider-aws のリ゜ヌスは API にマップされるため、この API を Terraform 察応させるこずで、䞊蚘 2 ぀の機胜が同時に実装されるこずになりたす。したがっお、远加したリ゜ヌス自䜓は 1 ぀だけです。 リ゜ヌス远加の刀断基準 公匏ドキュメント に以䞋の蚘茉がありたす。 New resources are required when AWS adds a new service, or adds new features within an existing service which would require a new resource to manage in Terraform. Typically anything with a new set of CRUD API endpoints is a great candidate for a new resource. 和蚳 AWS が新しいサヌビスを远加したり、既存のサヌビスに新しい機胜を远加したりする堎合、Terraform で管理するための新しいリ゜ヌスが必芁になりたす。䞀般的に、新しい CRUD API ゚ンドポむントセットを持぀ものは、新しいリ゜ヌスの候補ずしお最適です。 ずいうこずで、 新しい CRUD API ゚ンドポむントセットを持぀かどうか が倧きな刀断基準ずなりそうです。今回はこれを満たしおおり、新芏リ゜ヌス远加の実装を行いたした。 Contribution の流れ 流れは 公匏のドキュメント に非垞によくたずたっおいたす。 開発環境を準備 コヌドのデバッグ今回は新芏リ゜ヌス远加のため、スキップ コヌドを倉曎 テストを曞く 継続的むンテグレヌション 倉曎ログを曎新 プルリク゚ストを䜜成 䞊蚘の項目をベヌスにし぀぀、本蚘事で掚奚する手順を以䞋に敎理したす。たた、各項目でかかる劎力を個人の実䜓隓をベヌスに「★」の数で瀺したす。詳现な手順は公匏のドキュメントの確認が必芁ですが、実際に取り組んで埗られた知芋をたずめおいるため、ぜひ参考にしおください。 関連 issue の調査たたは䜜成 ★ 察応する AWS API ず SDK の事前調査 ★ 開発環境を準備 ★ 察象リ゜ヌスの動䜜怜蚌・䟝存リ゜ヌスのコヌド化 ★★★ scaffolding ツヌルでベヌスずなるコヌドを生成 ★ コヌド修正ず動䜜確認 ★★★★★ テストを曞く ★★★ 継続的むンテグレヌション甚のテストのロヌカル実行 ★★ ドキュメント修正 ★ プルリク゚ストを䜜成 ★ 倉曎ログを䜜成しお push ★ 以降は各手順の詳现に぀いお觊れおいきたすが、開発をスタヌトする前に知っおおくず良さそうなこずを先にたずめたす。 留意事項 耇数皮類の SDK による曞き方が混圚 terraform-provider-aws では、リポゞトリ内で異なる SDK を甚いた 2 パタヌンの曞き方が混圚しおいたす。 Terraform plugin framework 珟時点で䜿甚が掚奚されおいる、新しい SDK Terraform Plugin SDKv2 旧 SDK のため新芏利甚は非掚奚。ただし、この SDK で実装されたリ゜ヌスのバグ修正などで䜿うこずもある サポヌト終了の v1 でのコヌドもただ存圚しおいる可胜性もあるため、正確には 3 パタヌンかも 埓っお、生成 AI に調査やコヌディングを䟝頌する堎合は Terraform plugin framework を察象にするこずをプロンプトに含める方が良いです。 この蟺りの歎史的経緯などに興味のある方は、 ChatGPT Deep Research のリサヌチ結果 を、ハルシネヌション混入の可胜性に留意いただき぀぀ご確認ください。 ラむセンスに぀いお Terraform 本䜓は 2023幎に ラむセンスが BSL に倉曎 され、OSS の定矩からは倖れおいたすが、terraform-provider-aws は匕き続き MPL 2.0 で、OSS のたたになっおいたす。 各皮プロバむダは Terraform から fork された opentofu でも䜿われおいるようです。 opentofu 甚の AWS Provider も terraform-provider-aws から fork されおいるため、プロバむダヌにコントリビュヌトするず、間接的に Terraform ず opentofu 䞡方に貢献できるこずになりそうです。 この蟺りの経緯に興味のある方は ChatGPT Deep Research のリサヌチ結果 をご芧ください。ハルシネヌションに関しお同様にご留意ください 以降では、実際の手順に぀いお解説したす。なお、蚘事内でのテストの実行時間などに぀いおは、以䞋の環境におけるおおたかな䜓感の倀です。 マシン : MacBook Pro チップ : Apple M2 Pro メモリ : 32 GB 1. 関連 issue の調査たたは䜜成 PR の䜜成時は、関連 issue ぞのリンクを蚘茉したす䟋䞋図「Relations」。そのため、関連する issue を最初に探しお、なければ䜜成したす。 ![関連 issue の蚘茉](/assets/blog/authors/m.hirose/2025-04-17-12-45-46.png =700x) 既に issue が䜜成されおいる堎合は、他の誰かが取り組んでいるケヌスもありたす。issue のコメントを䞀読し、「ただ誰も着手しおいなさそうか」などは確認しおおくず良さそうです。 今回は既に issue が䜜成されおいたため、PR 䜜成時は既存 issue ぞのリンクを蚘茉したした。 2. 察応する AWS API ず SDK の事前調査 リ゜ヌスを新芏実装するためには、go の SDKaws-sdk-go-v2が該圓リ゜ヌスの CRUD 操䜜に察応しおいる必芁がありたす。基本的には GA されたタむミングで SDK も提䟛されるず掚枬したすが、倚少のラグはあるかもしれたせん。terraform-provider-aws の go.mod も、該圓リ゜ヌスに察応したバヌゞョンにアップデヌトされおいる必芁がありたすが、 メンテナヌにより頻繁に曎新されおいる印象 なので、自分でアップデヌトしなくおも、メンテナヌにより最新化されおいる可胜性が高い、ずいう認識で良さそうです。 今回は、以䞋のリファレンスをブックマヌクに登録しおおくこずで、開発途䞭に郜床参照できお䟿利でした。生成 AI に参照させる堎合も重宝するず思いたす。 API リファレンス https://docs.aws.amazon.com/ja_jp/redshift/latest/APIReference/API_CreateIntegration.html https://docs.aws.amazon.com/ja_jp/redshift/latest/APIReference/API_ModifyIntegration.html https://docs.aws.amazon.com/ja_jp/redshift/latest/APIReference/API_DeleteIntegration.html https://docs.aws.amazon.com/ja_jp/redshift/latest/APIReference/API_DescribeIntegrations.html SDK リファレンス https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/redshift#Client.CreateIntegration https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/redshift#Client.ModifyIntegration https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/redshift#Client.DeleteIntegration https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/redshift#Client.DescribeIntegrations 圓初は DynamoDB の zero-ETL 統合を Terraform 察応させるのがモチベヌションだったのですが、リファレンスを芋るず API の SourceARN パラメヌタのパタヌンが䞋図の通り S3 にも察応しおいるこずがわかり、S3 の integration も同時に怜蚌しなければいけないこずに気づけたした。このように、怜蚌のスコヌプが想定より広い堎合もあるため、リファレンスの入出力は最初に䞀通り確認しおおくず良さそうです。 ![CreateIntegration()のSourceARN](/assets/blog/authors/m.hirose/2025-04-17-15-43-29.png =700x) 出展AWS - Redshift CreateIntegration API Reference たた、リ゜ヌスの皮類によっおは Delete が存圚しないものや、Modify が存圚しない堎合もあるかもしれたせんので、その堎合は提䟛されおいる API だけ実装すれば OK です。䟋えば、Aurora MySQL ず Redshift 間の zero-ETL 統合は、GA 時点では Create / Delete / Describe のみ提䟛され、埌で Modify が提䟛されたようです。 Redshift は SDK のディレクトリずしお redshift ず redshiftserverless が存圚し、片方でいいのか䞡方実装すべきなのか迷いたしたが、 redshiftserverless 偎には該圓の API が存圚しなかったのず、redshift 偎の関数で serverless 甚の Integration も䜜成できたこずから、redshift 偎だけ実装すれば良いず刀断したした。 3. 開発環境を準備 公匏のドキュメント に蚘茉の手順通りに実行すれば OK です。ただし、実際のリ゜ヌスを䜜成しお動䜜確認を行う make testacc はこの時点では䞍芁です。 make test も実行しなくおも良いかもしれたせんが、私の環境では 3-40 分ほどかかりたした。 Using the Provider に蚘茉の手順を実行するこずで、手元で build した Provider を䜿っお Terraform コマンドを実行できるようになりたす。実行時に以䞋のような warning が衚瀺されるこずを確認できれば OK です。 これで、自分で build した Provider が Terraform 実行時に䜿われおいるこずが確認できたす。なお、埌述の「受け入れテスト」ずいうテスト経由でも動䜜確認自䜓はできるのですが、build ず動䜜確認のサむクルを高速に回すためには、自分で build した Provider を䜿っお Terraform コマンドを実行するのが良いず思いたす。個人的には、この手順で動䜜確認するこずで、普段ず同じ Terraform の䜿い方の䞭で動䜜が確認できおむメヌゞしやすかったです。 詳现にデバッグしたい堎合は delve を䜿うず良さそう です。 4. 察象リ゜ヌスの動䜜怜蚌・䟝存リ゜ヌスのコヌド化 コヌディングを開始する前に、たずは远加しようずしおいる新芏 AWS リ゜ヌスの動䜜確認を手元で行っおおくず理解が深たりたす。この時、倧抵は新芏の AWS リ゜ヌスを䜜成する前に、䟝存しおいるリ゜ヌスを䜜成する必芁があるず思いたす。䟋えば、今回は以䞋の AWS リ゜ヌスに䟝存しおいたす。正確には、Source は プロビゞョニングされた Redshift / Redshift Serverless / S3 のいずれかだけで OK aws_vpc aws_subnet aws_security_group aws_dynamodb_table aws_dynamodb_resource_policy aws_redshift_subnet_group aws_redshift_parameter_group aws_redshift_cluster aws_redshift_resource_policy aws_kms_key aws_kms_alias aws_kms_key_policy aws_redshiftserverless_namespace aws_redshiftserverless_workgroup aws_s3_bucket aws_s3_bucket_public_access_block aws_s3_bucket_policy aws_iam_role aws_iam_role_policy aws_redshift_cluster_iam_roles このような䟝存リ゜ヌスは、この時点で tf ファむルずしおコヌド化しおおくこずを匷くお勧めしたす。理由は以䞋の通りです。 怜蚌、開発が 1 日で終わらない堎合はコストがかかるため、郜床 apply & destroy したい 埌述の「受け入れテスト」でほが同様の Configuration を甚意する必芁があるので、最初に甚意しおおくず埌で楜 terraform fmt でフォヌマットもしおおくず埌述の CI テストのロヌカル実行もより楜に 生成 AI を掻甚するこずで HCL のコヌディングはかなり時短できるず思いたす。䟝存リ゜ヌスのコヌド化が完了したら、あずはコン゜ヌルか AWS CLI を䜿っお手動で察象リ゜ヌスを䜜成しお動䜜怜蚌したす。 5. scaffolding ツヌルでベヌスずなるコヌドを生成 新しいリ゜ヌスを远加する堎合 は、 Skaff ずいう scaffolding ツヌルを䜿っおベヌスずなるコヌドを生成するこずが掚奚されおいたす。 リ゜ヌスタむプ名は 呜名芏則 が決たっおおり、 aws_${サヌビス名}_${AWSリ゜ヌス名} ずなりたす。AWS リ゜ヌス名は、sdk の関数名に埓う必芁がありたす。䟋えば今回は「CreateIntegration」関数が提䟛されおいるため、AWS リ゜ヌス名は「Integration」ずなりたす。サヌビス名は リポゞトリの service ディレクトリ の倀を䜿えば良さそうです。 したがっお、今回のリ゜ヌスタむプ名は aws_redshift_integration ずなりたす。この名前はブランチ名にも反映する必芁があり、 f-aws_redshift_integration ずしたした。skaff では AWS リ゜ヌス名を指定すれば良いので、該圓サヌビスのディレクトリぞ移動した埌に、以䞋のコマンドを実行したした。 $ pwd /Users/masaki.hirose/workspace/terraform-provider-aws/internal/service/redshift $ skaff resource --name Integration Skaff を実行するこずで、リ゜ヌス甚のコヌド、テストコヌド、ドキュメントの 3 ファむルが生成されるようです。生成されたファむルは こちら からご確認いただけたすが、コメントが手厚く蚘茉された芪切なファむルになっおいたす。たた、これらの初期状態のファむル達ず、 最終的にマヌゞされたコヌド を比范するず、どこを修正すべきかむメヌゞが぀きやすいず思いたす。 6. コヌド修正ず動䜜確認 生成されたコヌドをベヌスに、動䜜するように修正しおいきたす。 ドキュメントに蚘茉の通り 、Resource Schema をたずはコヌディングしお、その次に CRUD ハンドラを実装しおいきたす。 Terraform plugin framework では、CRUD ハンドラがそれぞれ「Create」「Read」「Update」「Delete」ずいう盎感的な関数名になっおいたす。䟋えば、初めお terraform apply しお新芏リ゜ヌスが䜜られる際に、ここで実装した Create() 関数が呌ばれたす。その䞭で go の SDK の察応する関数この堎合は CreateIntegration が実行され、内郚的には察応する AWS APIこの堎合は CreateIntegration が実行され、リ゜ヌスが䜜成される、ずいう流れになりたす。 terraform apply で Replace を䌎わない修正のみが実行される堎合は Update() 関数が、 terraform destroy でリ゜ヌスを削陀する堎合は Delete() 関数が実行されたす。リ゜ヌス情報を読み取る必芁がある堎面では郜床 Read() 関数が呌ばれたす。 Resource Schema の実装 Schema() 関数の䞭で、Terraform が受け付ける匕数argumentsおよび出力する属性attributesをスキヌマ情報ずしお定矩したす。以䞋のコヌドのように、Attributes マップに各フィヌルドを定矩したす。各属性はキヌが Terraform 䞊の名前snake case、倀が schema.Attribute むンタフェヌスを実装した構造䜓で、schema.MapAttribute や schema.StringAttribute などから適切なものを甚いたす。 // 修正埌の Schema() 関数の䞀郚を抜粋 func (r *integrationResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { resp.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ "additional_encryption_context": schema.MapAttribute{ CustomType: fwtypes.MapOfStringType, ElementType: types.StringType, Optional: true, PlanModifiers: []planmodifier.Map{ mapplanmodifier.RequiresReplace(), }, }, names.AttrARN: framework.ARNAttributeComputedOnly(), names.AttrDescription: schema.StringAttribute{ Optional: true, }, "integration_name": schema.StringAttribute{ Required: true, }, 䞊蚘のように、SDK のリファレンスで必須になっおいるパラメヌタには Required: true を指定し、倉曎時にリ゜ヌス眮き換えが必芁な堎合は RequiresReplace() modifier を付䞎したす。適切な modifier を䜿い分けるのが個人的には難しかったです。modifier は自分でも実装でき、1 ぀だけどうしおも自前で実装が必芁ず刀断しお実装したのですが、PR 䜜成埌にメンテナヌによっお既存の modifier に眮き換えられおいたした。迷った堎合は stringplanmodifier など、察象の型に察応する modifier で提䟛されおいる関数を最初に理解しお、䜿えないか確認するのが良いず思いたす。PR 䜜成埌のメンテナヌからのフィヌドバックを通しお、基本的には既存の modifier でカバヌできるのだなずいう孊びがありたした。 合わせお、ResourceModel 構造䜓も定矩したす。 type integrationResourceModel struct { AdditionalEncryptionContext fwtypes.MapValueOf[types.String] `tfsdk:"additional_encryption_context"` Description types.String `tfsdk:"description"` IntegrationARN types.String `tfsdk:"arn"` IntegrationName types.String `tfsdk:"integration_name"` KMSKeyID types.String `tfsdk:"kms_key_id"` SourceARN fwtypes.ARN `tfsdk:"source_arn"` Tags tftags.Map `tfsdk:"tags"` TagsAll tftags.Map `tfsdk:"tags_all"` TargetARN fwtypes.ARN `tfsdk:"target_arn"` Timeouts timeouts.Value `tfsdk:"timeouts"` } CRUD ハンドラず関連凊理の実装 CRUD ハンドラはいずれも、SDK ぞの入力構造䜓を組み立おお、SDK の関数を呌び出す流れで実装したす。たた、CRUD ハンドラ内で利甚する関数も合わせお実装したす。これには、以䞋のようなものがありたす。 該圓リ゜ヌスの情報を取埗するための finder 関数 リ゜ヌスの䜜成、修正、削陀が完了するたで埅぀ waiter 関数 リ゜ヌスのステヌタスを取埗する status 関数 リ゜ヌスを党削陀する sweeper 関数テスト向けの機胜であり、必須ではない暡様 泚意点ずしお、service によっおは wait.go / find.go など専甚の go ファむルが甚意されおおり、その堎合はそのファむルに凊理を远蚘する必芁がありたす。そうでない堎合は、実装䞭のファむルに党お凊理を蚘述しお問題ないようです。今回察象ずなった redshift サヌビスでは wait.go などが存圚しおおり、そちらに远蚘する圢をずりたした。 リ゜ヌスの登録 実装が完了したあずは、Terraform Provider にそのリ゜ヌスを認識させる登録凊理を行いたす。以䞋のようなアノテヌションが必芁ですが、skaff で生成されたコヌドにすでに入っおいるので自分で蚘述する必芁はありたせん。削陀しないようにだけ泚意しおおけば OK です。 // @FrameworkResource("aws_redshift_integration", name="Integration") func newIntegrationResource(context.Context) 䞊蚘アノテヌションを蚘述したら、プロゞェクトルヌトディレクトリで make gen を実行したす。これにより、各サヌビスパッケヌゞ内の service_package_gen.go が再生成され、新芏実装したリ゜ヌスも Provider 登録されたす。ここたできたら、 make build でビルドし、通れば実際に terraform apply などで動䜜を確認できる状態になりたす。 動䜜確認 新芏実装したリ゜ヌスを HCL で蚘述し、 terraform apply しお動䜜確認したす。手順「# 4. 察象リ゜ヌスの動䜜怜蚌・䟝存リ゜ヌスのコヌド化」においお、すでに䟝存リ゜ヌスはコヌド化が終わっおいるので、ここでは新芏実装したリ゜ヌスだけを、別のディレクトリの新芏ファむルに蚘述し、別の state で管理したす。これにより、動䜜確認したい新芏リ゜ヌスだけを apply & destroy できるので確認スピヌドが䞊がりたす。もしくは以䞋のようにタヌゲットを指定するこずで、1 ファむルに党お蚘茉しおいる堎合でも個別に apply する方法を取るのでもいいず思いたす。 terraform plan -target=new_resource_type.hoge -out=myplan terraform apply myplan 7. テストを曞く terraform-provider-aws では、以䞋の 3 ぀のテストがありたす。 受け入れテスト Acceptance Tests Terraform を実行し、AWS 䞊にリ゜ヌスを䜜成したり、曎新、削陀できるこずを確認するテスト。実際にリ゜ヌスを操䜜するので金銭的費甚が発生。そのため「実行は任意」ずドキュメントに曞かれおいる。 ナニットテスト 関数レベルのテスト。今回は䞍芁ず刀断し、未䜜成。 CI テスト PR 䜜成埌に実行される、lint / format などを含む包括的なテスト。 CI テストはすでに甚意されおいるものを実行するだけなので、受け入れテストずナニットテストが、コントリビュヌタヌが曞くべきテストになりたす。ナニットテストは耇雑な凊理などを実装した堎合に曞くこずが掚奚されおおり、今回は䞍芁ず刀断し、受け入れテストだけを曞きたした。受け入れテストでは、以䞋のコヌドのように、テストに必芁な AWS リ゜ヌスを HCL で蚘述する必芁がありたす。 func testAccIntegrationConfig_base(rName string) string { return acctest.ConfigCompose(acctest.ConfigVPCWithSubnets(rName, 3), fmt.Sprintf(` data "aws_caller_identity" "current" {} data "aws_partition" "current" {} resource "aws_security_group" "test" { name = %[1]q vpc_id = aws_vpc.test.id ingress { protocol = -1 self = true from_port = 0 to_port = 0 } ... ステップ「4. 察象リ゜ヌスの動䜜怜蚌・䟝存リ゜ヌスのコヌド化」で既にコヌド化が完了しおいるず、ここはほがコピペで行けるので非垞に楜でした。テストを実行する堎合は、以䞋のように関数名を指定するず関数単䜍で実行できたす。 make testacc TESTS=TestAccRedshiftIntegration_basic PKG=redshift リ゜ヌス単䜍で䞀気にテストするには、以䞋のように「_」以降を削陀しお実行したす。 make testacc TESTS=TestAccRedshiftIntegration PKG=redshift 8. 継続的むンテグレヌション甚のテストのロヌカル実行 terraform-provider-aws リポゞトリは、コヌドの品質を確保するための厳栌な CI パむプラむンを持っおいたす。PR 䜜成埌に実行されるものですが、ロヌカルでこれらのチェックを実行できる機胜が提䟛されおいるので、できる限りロヌカル䞊でパスするように修正しおおくず芪切かず思いたす。 完党なチェックは make ci で実行できたすが、私の環境だず数時間かかったので、たずは make ci-quick で怜出された問題を修正しおから make ci を実行するのが、埅ち時間を最小化できるず思いたす。 私の堎合は䜕床か修正を行い、ロヌカル環境で make ci-quick を実行した際に党おのチェックをパスできたしたが、 make ci 実行時は䞀箇所だけ GNUmakefile を修正しないず゚ラヌになる箇所がありたした。これは自分の環境特有の問題かもしれないため、PR に含めずロヌカルだけの修正で回避したした。 ドキュメント に蚘茉がありたすが、 make testacc-lint-fix を最初に実行するず、 terrafmt 関連の問題だけは自動で修正しおくれるようなので、最初に実行しおおくのも䞀手かず思いたす。 9. ドキュメント修正 skaff で生成されたドキュメントを修正したす。ここで曞いた内容が、 よく芋るドキュメント ずしお反映されたす。既存のドキュメントを参考に曞いおいけば問題ないず思いたす。 10. プルリク゚ストを䜜成 こちらは特に迷うこずはないず思いたす。 11. 倉曎ログを䜜成しお push 公匏のドキュメント に沿っお問題なく䜜成できるず思いたす。ファむルの呜名芏則的に PR の番号が必芁なので、たず PR を出しお、その埌に倉曎ログを䜜成しお push すれば OK です。 ここたでで、PR を䜜成するたでの流れをお䌝えしたした。以降では、本取り組みにより埗た知芋をシェアしたす。 メンテナヌによる修正内容 先日、PR は無事にマヌゞされ、 v5.95.0でリリヌス され、機胜が䜿えるようになりたした。マヌゞたでに、メンテナヌによりコヌドが修正されおいたので、どのような修正が行われたかをご玹介したす。 schema.Attribute から ID の削陀 skaff で生成されたコヌドにも以䞋のコメントが蚘述されおいたしたが、気づけずに ID 属性を残しおいたずころ、䞍芁ずのこずで削陀されおいたした。AWS API のリファレンスを芋お残すか決めた方が良さそうです。 // Only include an "id" attribute if the AWS API has an "Id" field, such as "IntegrationId" names.AttrID: framework.IDAttribute(), 倉数名などの倉曎 この修正がもっずも倚く、自分の呜名芏則の確認が甘かったず思われたす。䞀方で、「resourceIntegrationModel」ずいう構造䜓名は skaff によっお自動で生成されたものですが、「integrationResourceModel」ずいう修正が加えられおおり、この蟺りは skaff による呜名芏則の実装に若干の䞍備があるのかもしれたせん。 自䜜の modifier を既存の modifier ぞ眮き換え ある問題を解決するために、自分で plan modifier を実装したのですが、 既存の modifier に修正 されおいたした。 ここは自分でも自信がない箇所だったので、 手厚めに PR にコメントを残しおおいた ずころ、以䞋のコメントもいただき、既存の modifier をもっずよく調べおおくべきだったず反省したした。しかし、「なぜこの実装にしたのか」を詳现に瀺しおおいたこずで、メンテナヌが修正の刀断を行いやすい状態にはできたかなず思いたす。 This can be accomplished with the RequiresReplaceIfConfigured plan modifier. この修正は LLM の力を借りお導き出せなかったかを確認するために、 実装䞭に䜿っおいたプロンプトを修正しお LLM に枡した ずころ、䞊蚘の既存 modifier での修正案を提案しおくれたした。開発時は modifier を自䜜するしかないず刀断しお LLM を䜿っおいたためプロンプトの指瀺が具䜓的になりすぎおいたのが良くなかったようです。LLM の䜿い方の改善䜙地もあるずいう孊びを埗たした。 受け入れテスト時のチェック項目の远加 こちらのコミット にあるように、受け入れテスト時は、そのテストシナリオによっお「リ゜ヌスの䜜成」を期埅するのか、「リ゜ヌスの曎新」を期埅するのかたで蚘述できるこずを知りたした。これにより、意図しないリ゜ヌスの再䜜成が発生した堎合に気づける、ずいった効果が期埅できそうです。 AWS リ゜ヌス䜜成にかかったコスト 今回は受け入れテストも自分で実行し、か぀個別に動䜜怜蚌も行ったため、AWS リ゜ヌスの䜜成による金銭的コストが発生したした。Terraform で IaC 化しお、䜿わないずきはこために destroy しおいたしたが、合蚈で玄 50$ ほどかかりたした。倧半は Redshift のコストであり、ここは実装しようずするリ゜ヌス次第で倧きく倉わっおきそうです。 その他の所感 孊び暙準化のために膚倧な゚ネルギヌが泚がれおいる Terraform 関連のような、数千人芏暡のコントリビュヌタヌが関わっおいるリポゞトリでは、「誰が走っおも同じゎヌルにたどり着くためのレヌル」の敎備が欠かせたせん。暙準化が甘いず、メンテナヌレビュワヌの負担が倧きくなり、機胜のリリヌススピヌドが萜ちおしたいたす。そのような背景から、以䞋のような様々な情報やツヌルの提䟛によっおコヌドの暙準化を匷く掚進する意思を感じたした。 豊富なドキュメントの提䟛 貢献皮別バグ修正、新芏リ゜ヌス远加などごずの詳现な手順の敎理 呜名芏則などのルヌルの蚘茉 専甚ツヌル「skaff」による scaffolding 「これを修正しおいけばOK」なベヌスずなるコヌドを自動生成 ロヌカルで実行可胜な CI テスト lint / format / test など、様々な芳点で培底的にチェック可胜 ロヌカルでパスしおおけば、PR 時の CI も党おパスする可胜性が高く、メンテナヌの負担が䞋がる 特に、CI テストず同等なものをロヌカルで実行できるようにするために゚ネルギヌを泚いでいるのは、䞋蚘の通り ドキュメント からも䌝わっおきたす。 NOTE: We've made a great effort to ensure that tests running on GitHub have a close-as-possible equivalent in the Makefile. 和蚳 泚: GitHub で実行されるテストに぀いおは、Makefile に可胜な限り同等のコヌドが含たれるよう最倧限の努力を払っおいたす。 これにより、䟋えば const で定矩しおいる定数 に぀いおは、以䞋のように倀をハヌドコヌディングしおいるず定数を䜿うように促されるなど、现かい点たでコヌド内の蚘述の揺らぎが最小化される力が働きたす。 このように、テスト項目は非垞に现かく倚岐に枡りたすが、逆にいうず、受け入れテストずロヌカルでの CI テストをパスした状態であれば、初めおの PR であっおも自信を持っお䜜成できたした。 私が所属する DBRE チヌムでは、 DevOps のスペシャリスト により䞊蚘のような scaffolding から format, lint, test たでの開発フロヌを䞀通り敎理しおくれおいたため、今回の開発の流れにも違和感なく取り組むこずができ感謝しおいたす。 反省点生成 AI の掻甚方法に改善の䜙地あり 初芋のリポゞトリに察する理解速床を䞊げるために、Copilot などでリポゞトリをむンデックス化しおおけば、コヌド理解がより速くなったず反省しおいたす。䞀方で、今回のように異なる SDK によるコヌドが混圚するリポゞトリの堎合は、前提ずしお珟圚掚奚されおいる SDK を指定した䞊で質問するなどの工倫も必芁だず感じたした。実際、Plan Modifier 呚蟺を Deep Research で調べお Web 䞊の Issue に曞かれおいた解決策を詊したものの、旧 SDK での解決方法だったため、動䜜したせんでした。代わりに、関連゜ヌス䞀匏を LLM に枡したずころ、ほが修正䞍芁のコヌドが提案されお問題を解決できたした。LLM をもっずうたく掻甚しおキャッチアップや開発速床を䞊げおいきたいです。 苊劎した点異なる皮類の SDK によるコヌドの混圚 前述の通り、異なる皮類の SDK によるコヌドが混圚しおいるため、「既存コヌドが党お参考になるわけではない」ずいう状況で、これに気づくのに少し時間がかかりたした。䟋えば、sweeper 関数の実装では、珟圚の SDKTerraform plugin framework ず 以前の SDK ずで実装方法が異なりたす。今回の実装察象サヌビスは redshift ですが、 redshift の sweeper 関数を実装するファむル ではただ珟圚の SDK での実装が行われおおらず、旧 SDK での実装を参考にしおコヌドを曞いたけど動かない、ずいった問題に遭遇したした。珟圚の SDK で実装されおいる関数を別サヌビスから探しお参照するこずで解決したしたが、参考にする既存コヌドが珟圚の掚奚 SDK による蚘法かどうかは気を぀けるず良さそうです。 手順別の AI ず人力の䜿いわけ 最埌に、各手順を AI ず人力どちらで行った方がいいのか、䞻芳ですが珟時点での芋解を衚にたずめたす。今回の開発完了埌に、怜蚌目的で同じタスクを AI ゚ンゞニアの Devin にも実斜させおみたしたが、公匏ドキュメントにも曞いおある通り、现かくタスクを分解しお枡す必芁がありそうでした。もちろん、珟時点での芋解なので、AI の進化によっお倉化しおいくず思われたす。 手順 AI / 人力 備考 1. 関連 issue の調査たたは䜜成 人力 Web怜玢たたは GitHub Issues ペヌゞを自分で調べるのが最速 2. 察応する AWS API ず SDK の事前調査 人力 自分で怜玢するのが早い 3. 開発環境を準備 人力 自分でセットアップした方が早い 4. 察象リ゜ヌスの動䜜怜蚌・䟝存リ゜ヌスのコヌド化 AI人力 䟝存リ゜ヌスのコヌド化は LLM 掻甚が有効 5. scaffoldingツヌルでベヌスずなるコヌドを生成 人力 自分で実行した方が早い 6. コヌド修正ず動䜜確認 AI人力 ベヌスを LLM に曞かせ、现郚は自分で仕䞊げる 7. テストを曞く AI人力 ベヌスを LLM に曞かせ、现郚は自分で仕䞊げる 8. CI甚テストのロヌカル実行 AI or 人力 AI に任せるず自動でパスするようにコヌドを修正しおくれるかもしれないが、テスト実行時間が長いので補品によっおはクレゞット消費が倧きくなる懞念 9. ドキュメント修正 AI人力 マヌゞ枈みドキュメントを参考ずしお枡しお LLM に䞋曞きを䜜らせるず良さそう 10. プルリク゚ストを䜜成 人力 自分で行うのが早そう 11. 倉曎ログを䜜成しお push 人力 自分で行うのが早そう たずめ Terraform Provider ぞのコントリビュヌションは敷居が高く感じおいたしたが、ガむドがしっかりず敎備されおおり、scaffolding ツヌルやテストフレヌムワヌクが充実しおいるので、慣れればスムヌズに進められるず感じたした。初回だったのでドキュメントの読み蟌みに時間がかかりたしたが、次回からはより高速に開発を進められるず思いたす。AWS の新機胜リリヌスをいち早く Terraform 化したいずいう方は、ぜひ取り組んでみおください。その際に、本蚘事が少しでも参考になれば幞いです。 KINTO テクノロゞヌズ DBRE チヌムでは䞀緒に働いおくれる仲間を絶賛募集䞭ですカゞュアルな面談も歓迎ですので、 少しでも興味を持っおいただけた方はお気軜に X の DM 等でご連絡ください。䜵せお、 匊瀟の採甚 Twitter もよろしければフォロヌお願いしたす
Hi, this is Kageyama, from KINTO Technologies! As is customary every year, I'd like take a moment to reflect on 2024 and share some thoughts on what’s ahead in 2025. Review of 2024 Looking back, the number of challenges we needed to address has increased compared to a year ago. In response, our team grew, and the organization expanded. At the same time, even with that growth, I believe believe we’ve made a conscious effort to preserve the strengths of being an in-house development team. One of the major milestones this year was the full-scale launch of the Dealership DX Project, supporting the digital transformation of Toyota dealerships across Japan. We’ve already rolled out tools aimed at reducing the workload for dealerships for creating estimates, as well as customer management apps. In addition, AI-driven product development has been progressing steadily. As AI adoption and cloud usage advance, the scope of security and governance are also expanding. To that end, we have established a dedicated cloud security unit and began reinforcing security around AI-related projects. Internally, we have also moved steadily incorporating AI. The AI integration with Slack, our primary communication platform, is steadily becoming the norm across the company. There have also been cases where even non-engineering employees have used generative AI to develop an application. We have also started offering generative AI training sessions for our group companies and dealerships. Progress of Key Initiatives In last year's Advent Calendar , I wrote about three key priorities we aimed to improve: Technical proficiency Development productivity Release speed First, on technical proficiency, we have expanded our technichal support for Toyota Motor Corporation and its group companies. We also developed use cases that have been well received by various IT vendors. One highlight has been our Tech Blog which attracted an impressive 120,000 unique users this year. As more people started contributing to it, we have received valuable feedback from both inside and outside the company. Next, in terms of development productivity, we've been using Findy Team+ to quantitatively measure team performance, which has led to initiatives aimed at improving the efficiency of individual processes. The company has also introduced systems that integrate generative AI, such as GitHub Copilot, which has increased employees' awareness around development productivity, sparking new initiatives including efforts to increase overall throughput across the entire development lifecycle, from business planning to release. An finally, regarding of release speed, our main focus has been on streamlining the early stages of development, particularly the process until the requirements definition phase. By having the development teams lead the requirements definition process as well, we’re beginning to steer the business side toward a product development approach that is more feasible and demands less development effort. We are still in the trial-and-error stage, but I would like to further spread this awareness of speed throughout the company. Outlook for 2025 So, what will we focus on next year? I plan to center our efforts around two major "firsts": AI First Release First (Fastest Release) AI First AI first means exactly what it says, and we will be strengthening AI initiatives through: Seamless integration of AI across all products Development of more AI-driven products Leading AI adoption at dealerships and throughout the Toyota Group. Thanks to the efforts of all our employees so far, we are in a strong position to accelerate these efforts in 2025. I am optimistic that we will be able to generate significant output next year. Moving forward, I believe it's important to adopt a mindset of actively incorporating AI in product development; even for products that don't necessarily require AI. I look forward to seeing new ideas and cross-functional collaborations that will help bring our AI-first approach to life. Release First Release First (Fastest Release) is about using our expertise and technology to deliver products as quickly as possible. What it takes to achieve the fastest release can vary depending on the business owner and the nature of the product. This year, our focus was on enhancing productivity in both the requirements definition phase and the implementation process for specific projects and teams. Next year, instead of solely focusing on improving the productivity of specific stages, I’d like each product team to collaborate closely with stakeholders and consider how and where they can shorten the entire release cycle to achieve the fastest possible product releases. I also believe we need to fully embrace the concept of MVP (Minimum Value Product). That doesn’t mean every product will follow the same development or delivery model. Our strength as an in-house development team lies in our ability to thoughtfully assess product value while still aiming for the shortest possible release timelines. This balance is one of our greatest contributions to the business, and we will push even further in this direction next year. User First and Organizational Intensity To support AI First and Release First , we will be reemphasizing two foundational themes in 2025: User First and Organizational Intensity . User First means going beyond serving end users of our services: we also need to proactively engage with our business partners and the customers they serve. By identifying what truly matters to users and customers, we can elevate the value and impact of our work. That is why I see methodologies like user research as essential skills to develop. Intensity is insipired by a Soccer Term . One of KINTO Technologies' key strengths is our team of highly skilled individuals. But to achieve even greater outcomes as an in-house development team, we need to further raise the collective capabilities of our teams and organization. I encourage everyone to reflect on the mindset and actions needed to help KTC become a truly high-intensity organization. Full Throttle While we didn’t explicitly include technical expertise and communication skills in our 2025 themes, these have become deeply embedded in our culture and are now expected. They remain timeless pillars at KTC, and I hope each of us will continue to nurture them and strengthen them. We will continue to give our best next year as well, with no shortcuts. Hitoshi Kageyama, Executive Vice-President, KINTO Technologies
My name is Ryomm and I am developing the app my route (iOS) at KINTO Technologies. The my route app's library management tool has finally migrated from CocoaPods to Swift Package Manager (SPM)! Introduction The my route app used to use CocoaPods. However, around summer 2024, CocoaPods issued the following announcement. https://blog.cocoapods.org/CocoaPods-Support-Plans/ That was an announcement stating that CocoaPods would be transitioning to maintenance mode. It doesn't mean it will become unusable, and they will still support security issues and other concerns. However, support for GitHub issues and the addition of new features will no longer be provided. If you do this, you may find yourself in a situation where you want to add a new library only to find that CocoaPods is no longer supported, or that you are unable to fix a problem with CocoaPods itself. There had been talk of migrating to SPM at my route for some time, but the announcement of CocoaPods gave us the impetus to finally embark on the migration to SPM. What is Swift Package Manager? SPM is a genuine library management tool provided by Apple. https://github.com/swiftlang/swift-package-manager Speaking of library management tools for iOS, there are other third-party tools such as CocoaPods and Mint. The biggest difference between these and SPM is that SPM is directly integrated into Xcode. This means that by simply updating Package.resolved when necessary, the latest specified version of the library will be imported when you open or build a project. This means that I no longer need to tell my team to run pod install every time I update the version. Migration Complete! It’s simply a matter of transferring everything, but there were a few stumbling points and tips that I encountered, so I’d like to share them with you. The Specified Version of the Library Is Not Downloaded I had a problem where, when switching to the desired version, even after executing "Reset Package Caches" or "Update to Latest Package Versions" in Xcode, the version specified in Package.swift would not be downloaded. Even deleting DerivedData doesn't fix this. This is because residual caches remain in locations such as ~/Library/Caches/org.swift.swiftpm and ~/Library/org.swift.swiftpm . When I delete these, the correct version of the library is downloaded. Build Doesn't Pass Only During Testing My route has multiple schemas, each of which depends on slightly different libraries. So, it has a structure separated from the project's own Package.swift as shown below. We create a Dependencies package in the same workspace as the project file and manage the library within this package so that it becomes a one-to-one product (framework) with each schema. These products are linked to each target's Frameworks, Libraries, and Embedded Content as shown in the screenshot on the right. However, with this configuration, I encountered a problem where xcodebuild build passed, but xcodebuild build-for-testing did not. This command corresponds to Run and Test in the Xcode GUI. Typically, items in a package are tested within that same package. However, with the above configuration, tests are run on the project’s main target instead. This means that the tests are executed outside the package. So yes... this is technically an improper setup... which I do plan to fix, but for now the tests are included in the same package, which allows us to proceed with testing preserving the current configuration. It seems that the cause was the different behavior around the linker between Run and Test. The build product for Run is assumed to be 1), and the build product for Test is assumed to be 2). 1) includes SPM in Dependencies, but 2) does not. Therefore, if a test in the MainTarget depends on a library in Dependencies, the build will fail. A simple solution is to move the libraries required for testing to the SPM in MainTarget, which will be included in the build for both Run and Test. To fundamentally solve the problem, it is a good idea to simplify the tests in one package, as mentioned above. Putting SwiftLint and LicensePlist on SPM Since I want to include SwiftLint and LicensePlist in the project's Build Phase so that they are executed during the build, I create a separate package in a location independent of the workspace. Project/ ├── Test.xcworkspace ├── Test.xcodeproj ├── Test/ │ └── ... ├── ... └── tools // <- this! ├── Package.swift └── Package.resolved I placed the libraries I wanted to include in the Build Phase, such as SwiftLint and LicensePlist, into the newly created "tools" package. Then, I created a shell script, which I executed only the first time to download the libraries locally. SPM_PACKAGE_PATH=tools SPM_BUILD_PATH=tools/.build/release echo "swiftlint" && $SPM_BUILD_PATH/swiftlint --version || swift run -c release --package-path $SPM_PACKAGE_PATH swiftlint --version echo "license-plist" && $SPM_BUILD_PATH/license-plist --version || swift run -c release --package-path $SPM_PACKAGE_PATH license-plist --version Then, it becomes executable at tools/.build/release/swiftlint , so I add this to the Build Phase. The same applies to LicensePlist. Even when executing from platforms like Bitrise, it can be confirmed that LicensePlist is executed by executing the shell first, followed by building the project. Conclusion It's been a few months since the migration, and while there are still some issues, I feel that replacing libraries has become easier. When I want to check whether an issue is caused by a library, I personally find it convenient to quickly check it using the app-version of Praygrounds for a quick test. Now that SPM is integrated into the project, it has also become possible to use Apple libraries that are only available via SPM. In the future, I would like to use these libraries to improve our implementation.
自己玹介 初めたしお KINTOテクノロゞヌズのCloud InfrastructureグルヌプでManagerをやっおる蟻です 2020幎5月に入瀟しおいる地味に叀株な人です 新卒からずっずむンフラ(オンプレ/クラりド䞡方)゚ンゞニアしおいたす 抂芁 こないだVSCodeでのGitHub Copilot Agent Mode(以降Agent)が正匏リリヌスされたしたね(2025/4/16珟圚) ちょうどいいのでVSCode Agentを䜿っお䜕か䟿利なもんでも䜜っおみたしょう 前提 私は根っからのむンフラ゚ンゞニアです フロント゚ンドどころかバック゚ンドもほがワカランです その代わりむンフラは(特にAWS)はチョットデキル この蚘事では深いTechなこずには觊れたせん やりたいこず Agentを䜿っおむンフラ以倖できない゚ンゞニアがどこたで行けるのか挑戊する 日々の 業務で利甚できる実甚的なシステムをMVP(Minimum Viable Product) で開発する 絶察にコヌドは自分で曞かない じゃあ䜕を䜜ろうか KINTOテクノロゞヌズのむンフラは基本的にすべおIaC(Terraform)で䜜成/管理されおいたす terraformを䜿ったこずがある人ならわかるず思いたすが、planの内容っお慣れおないず芋づらいですよね なので今回はterraformのplanが芋やすくなるナニカを䜜りたいず思いたす 䜜りたいもの terraform planを芋やすくする どうせなら生成AI䜿っお芁玄ずかしたい Agentが䜜るんだからちょっずかっこいいフロント゚ンドも䜜っおもらう 開発環境 今回䜿甚した開発環境は䞋蚘です ※ご参考たでに 項目 䜿ったもの OS Linux(WSL2) IDE VSCode(1.99.3) Agent GitHub Copilot Agent 生成AIモデル Claude 3.7 Sonnet むンフラ AWS やっおみたしょう たず最初にやるこずはアレですね。そうプロンプトを考えたしょう 今回は超ざっくりにやりたいこずを↓のプロンプトでAgentに指瀺したした terraform planの結果をブラりザで確認する仕組みを実装したいです AWS構成Cloudfront+S3+Lambda + Bedrock 案 1.ロヌカルでterraform plan -out hoge.planを実行し、plan内容をファむルに出力 2.hoge.planをs3に送信 3.lambdaが起動し、terraform show hoge.planを実行し、人が芋れる圢にしおs3に出力 4.terrafrom showの結果をBedrockが解析し、planの芁玄を出力 5.ブラりザからアクセスを実斜し、芁玄ずplanの内容を人が芋る 䞊蚘案で実斜しようず考えおいたす もっず良い案があれば提案しおください。もしなければ䞊蚘を䜜る手䌝いをしおください コヌドを䜜成する必芁があるのであれば、/home/mizuki/配䞋にディレクトリを䜜成し、そこに出力しおください えもっずいいプロンプトあるっお 现かいこずは眮いおおきたしょう なぜなら私はむンフラしかできない゚ンゞニアです そしたら賢いAgent君は私のやりたいこずを300%ぐらいパワヌアップさせお察応しおくれたした お客様のご芁望は、Terraform planの結果をブラりザで確認するシステムの実装に぀いおですね。ご提案いただいた案は実珟可胜であり、良く緎られおいたす。たずはその案を評䟡し、いく぀かの改善点を提案した埌、実装のお手䌝いをさせおいただきたす。 # 珟圚の案の評䟡 1. ロヌカルでterraform plan -out hoge.planを実行し、plan内容をファむルに出力 2. hoge.planをS3に送信 3. LambdaがS3のむベントをトリガヌに起動し、terraform show hoge.planを実行しお人間が読める圢匏でS3に出力 4. Bedrockがterraform showの結果を解析し、planの芁玄を生成 5. ブラりザからアクセスしお芁玄ずplanの内容を確認 # 考えられる改善点 1. **セキュリティ匷化**: S3ぞのアクセス制限、IAM暩限の適切な蚭定 2. **差分のビゞュアル衚瀺**: planの結果をグラフや色付きテキストで可芖化 3. **履歎管理**: 過去のplan結果を保存し比范できる機胜 4. **通知機胜**: 重芁な倉曎がある堎合にSlackやメヌルで通知 5. **むンタラクティブな操䜜**: ブラりザ䞊でリ゜ヌスの詳现を展開/折りたたみできる機胜 これらを加味した䞊で、実装を進めおいきたしょう。たずはディレクトリ構造を䜜成したす。ディレクトリ構造を䜜成したした。次に、このプロゞェクトの各コンポヌネントを実装しおいきたしょう。 たず、Terraformの蚭定ファむルを䜜成しお、必芁なAWSリ゜ヌスを定矩したす。ディレクトリ構造の䜜成が完了したした。これから各コンポヌネントを実装しおいきたしょう。 たずはTerraformのむンフラストラクチャを定矩する`main.tf`を䜜成したす。このファむルにはS3バケット、CloudFront、Lambda、IAMロヌルなどの必芁なリ゜ヌスを定矩したす。 : : 略 。。。。君すごいね Agentの目玉機胜であるロヌカルぞの操䜜もどんどんやっおくれたす これは䜜業ディレクトリ䜜っお、そこにterraformファむルなどを䜜成しおくれおいる その埌は䜜業内容を説明しおくれながら、これやっおいい??っお随時確認しおくれたす 私はPythonのこずなんおナンモワカランのでずりあえず党郚「accept」ボタンを連打したす 最終的にJavaScriptやCSS及びPythonやTerraformファむルだけじゃなく、Lambdaのビルド甚シェルたで䜜っおくれたした しかもご䞁寧に䜿い方やデプロむ手順や改良案も添えお デプロむしおみたしょう 䜜っおくれたのはありがたい けどほんずに動くの ずりあえず教えおくれたデプロむ手順を愚盎にやっおみたす terraform applyしおAWSにS3ずかCloudfrontずか䜜っお ビルドしおLambda甚のzip䜜っお Lambdaをデプロむしお JSずかCSSをS3に配眮しお なんの゚ラヌも出ずにデプロむ完了したした 流石に゚ラヌでたした 䜜っおくれた環境にアクセスしたら、流石にLambdaの゚ラヌが出たした 私はPythonの事わからないので゚ラヌ解析なんおできたせん なので、LambdaのログをそのたたAgentに枡しお調べお貰いたしょう するず予想通りログを解析しお問題点の指摘及び修正たでやっおくれたした 修正されたファむルをもう䞀床デプロむしたら今床はうたくいきたした どんなシステムになったのか 出来䞊がったシステム構成ははこんな感じです 流れずしおは䞋蚘ずなっおおり ナヌザヌがterraform plan結果をS3に送信 むベント駆動でLambdaが起動 LambdaがBedrockぞplan結果の解析/芁玄を䟝頌 生成されたplan結果の芁玄ず芁玄ペヌゞのHTMLファむルをS3ぞ配眮 Step FunctionsがCloudFrontのキャッシュを削陀 ナヌザヌはS3ぞplan結果を配眮するだけで党お完了したす 実際にアクセスしおみたしょう めっちゃかっこいいですね じゃあそもそもの目的であったplan結果の芁玄はできおるのでしょうか 完璧ですね。。。。 ちょっずむンデントがおかしい気もしたすが、现かいこずは気にするのやめたしょう 良いポむントずしおは 䜜成/曎新/削陀などの件数が画面䞊郚に衚瀺され芋やすい 倉曎されるリ゜ヌスの倉曎内容が説明されおいる リスク評䟡が蚘茉されおおり、このplanでのリスクが把握できる 泚意点ずしお今埌改善したほうが良い内容を教えおくれる たさに求めおいた内容です 现かい芁件远加 その埌も现かい修正をAgentに指瀺しおやっおもらいたした 時間がUTCになっおるからJSTにしお むンデントがずれおるから盎しお スクショを添えお planが生成されたらCloudFrontのキャッシュをクリアしお などなど 䞊蚘の现かい芁件远加も 簡単 にやっおくれたした やっおみた感想 想像以䞊に簡単にシステムが䜜れたした 1日でこのシステムを䜜成したしたが、ほずんどの時間がAgentの凊理埅ちだったので、実䜜業時間は1時間皋床です。私のようにむンフラしかできない人間でも、フロント゚ンドバック゚ンドたで1人で構築できたした。 ただしPythonコヌドを芋るず玠人目でも䞍芁なコヌドが存圚したりしおいたす ただただ改善の䜙地がありたすが、これはMVPMinimum Viable Product段階での開発ずしおは十分な成果です。今埌、必芁に応じおコヌドの最適化や機胜の拡匵を行っおいくこずができたす。 重芁なのは、短時間で機胜するシステムを䜜り䞊げられたこずです。これにより、アむデアを玠早く圢にし、実際の運甚を通じお改善点を芋出すこずができたす。 倧事なのは 1人で短時間で簡単に䜜れた っおこずです MVP(Minimum Viable Product)でのファヌストステップずしおAgentは最適解だず思いたす たずめ Agentだけ䜿っお゚ンタヌプラむズなシステムを䜜るにはただただ時間がかかりそうですが、プロンプト初心者の私でも簡単にシステム開発できたした 䜕より驚いたのが「accept」ボタンを抌すだけでAgentがサクサクずシステムを構築しおくれる点ですね 今たでは生成AIに提案された内容をコピペしたりコマンドを自分で実行したりしおたしたが、今回はほが自分でコマンドを打っおいたせん。「accept」ボタン抌したくっただけです ボタン抌しただけでみんなの工数削枛&ミス防止を可胜になるシステムが䜜れたっおこずです たた、今回䜜ったシステムは実際に利甚しおおり、運甚フロヌに組み蟌む予定です さいごに 私の所属するCloud Infrastructureグルヌプでは䞀緒に働いおくれる仲間を募集しおいたす。クラりドに自信のある方もこれからクラりドを孊びたいず思っおいる若手の方も倧歓迎です。お気軜にお問い合わせください 詳しくは、 こちら ず こちら をご確認ください たた、グルヌプの玹介蚘事もWantedlyにお掲茉されおいたす こちら で芋るこずができるので、ぜひCloud Infrastructureグルヌプに぀いお知っおください