株匏䌚瀟マむナビ デゞタルテクノロゞヌ戊略本郚のブログ - TECH PLAY

TECH PLAY

株匏䌚瀟マむナビ デゞタルテクノロゞヌ戊略本郚

株匏䌚瀟マむナビ デゞタルテクノロゞヌ戊略本郚 の技術ブログ

å…š248ä»¶

はじめに 今話題のMCPですが、WebデザむンやUIデザむン向けツヌルのFigmaでもMCPが公開されたした。 本蚘事では、䞋蚘をメむン曞いおいたす FigmaMCPを利甚できるたで 簡単チュヌトリアル MCPずは AIモデルず倖郚サヌビスシステムを連携するための「共通ルヌルプロトコル」です。 各瀟がこのルヌルに沿った「AI専甚コントロヌラヌMCPサヌバヌ」を提䟛し、AIアプリ開発者MCPクラむアントはそれを呌び出すだけで各皮サヌビスず連携可胜になりたす。 これにより、様々なサヌビスをAI゚ヌゞェントで操䜜できるようになりたす。 FigmaMCPずは AI が Figma のデザむンデヌタに盎接アクセスし、そのデヌタを理解・操䜜するこずができるようになりたす。 実際に、Figmaはこの蟺りを参照するようです。 デザむン情報 (色・フォント・サむズ・間隔 etc..) コンポヌネント間の関係 Figma内のコメント この蟺りが参照できるず今たでできなかった䞋蚘タスクもAIにお願いできるようになりそうです。 Figmaのデザむンをより忠実に再珟 レスポンシブ察応 コンポヌネント関係の解釈 ( 参考 Figma MCPずは䜕ができるの ) 利甚できるたでの䜜業 本手順は、github copilot でFigmaMCPを導入する手順です。 ①個人のアカりントでFigmaのAccount settingsを開く ②トヌクン発行 security>Personal access tokens>Generate new token token名を入力 → File content を read-only にする → Generate token ③MCPの蚭定をvscodeで行う vscodeの蚭定甚のjsonを修正したす。 mcp.servers ã®äž­ã«äž‹èš˜ã®èš­å®šã‚’远蚘したす。 "mcp": { "inputs": [], "servers": { "figma-developer-mcp": { "command": "npx", "args": [ "-y", "figma-developer-mcp", "--figma-api-key=${③のトヌクン}", "--stdio" ] } } " mcp " : { " inputs " : [] , " servers " : { " figma-developer-mcp " : { " command " : " npx " , " args " : [ " -y " , " figma-developer-mcp " , " --figma-api-key=${③のトヌクン} " , " --stdio " ] } } ④vscode の github copilotの゚ヌゞェントモヌドを有効にする vscodeの蚭定から chat > Agent: Enabled を有効にする (出おこない堎合は、アップデヌト&再起動をする) â‘€github copilotを゚ヌゞェントモヌドに倉曎する github copilotのチャットを開き、゚ヌゞェントモヌドに倉曎する 以䞊ですこれで利甚できるようになりたす。 詊しにコンポヌネントを出力しおもらう 今回は、簡単なカヌドコンポヌネントを出力しおもらいたす。 ①FigmaからフレヌムのURLを取埗したす。 該圓フレヌムを遞択しながら、右䞊のシェアボタンを教えお、コピヌしたす。 ②実際に曞いおおもらう 今回はこんなプロンプトで指瀺しおみたした figmaを参照しお、カヌドコンポヌネントを䜜成しおください・倖郚からプロップスを枡せるようにしおください。・tailwindで実装しおください・セマンティックなHTMLを心がけおください。card component:https://www.figma.com/design/.... figmaを参照しお 、 カヌドコンポヌネントを䜜成しおください ・ 倖郚からプロップスを枡せるようにしおください 。 ・ tailwindで実装しおください ・ セマンティックなHTMLを心がけおください 。 card component : https : //www.figma.com/design/.... Figmaを参照するか聞かれたすが、続行しおください。 気になる出力結果は... かなり高クオリティヌです... ! タグの絶察配眮の郚分だけ蚭定されおいたせんね (出力しおいる感じ、絶察配眮はあたり埗意でないように芋えたす) コヌドベヌスで芋るずこんな感じです。 プロップスも想定通り枡せるようになっおいたり、HTMLタグの䜿い分けもいい感じにできおいお、ほが期埅通りの実装に芋えたす。 import type { FC } from 'react';interface CardProps { image: string; tags: string[]; title: string; description: string; onClickDetail: () => void;}export const Card: FC<CardProps> = ({ image, tags, title, description, onClickDetail,}) => { return ( <article className="flex flex-col bg-white border border-[rgba(17,17,17,0.1)] rounded-2xl overflow-hidden"> <div className="relative aspect-video"> <img src={image} alt="" className="w-full h-full object-cover" /> </div> <div className="flex flex-col justify-between p-6 flex-1"> <div className="space-y-4"> <div className="flex gap-2.5 flex-wrap"> {tags.map((tag, index) => ( <span key={index} className="px-4 py-3 text-sm font-bold text-[#111111] border-2 border-[rgba(17,17,17,0.1)] rounded-full" > {tag} </span> ))} </div> <div className="space-y-2"> <h3 className="text-lg font-bold text-[#111111] leading-[1.3]"> {title} </h3> <p className="text-base text-[#111111] leading-6"> {description} </p> </div> </div> <button onClick={onClickDetail} className="w-full mt-4 px-6 py-4 text-sm font-bold text-[#111111] border-2 border-[rgba(17,17,17,0.1)] rounded-xl" > 詳しくみる </button> </div> </article> );}; import type { FC } from ' react ' ; interface CardProps { image : string; tags : string [] ; title : string; description : string; onClickDetail : () => void; } export const Card : FC < CardProps > = ( { image , tags , title , description , onClickDetail , } ) => { return ( <article className = " flex flex-col bg-white border border-[rgba(17,17,17,0.1)] rounded-2xl overflow-hidden " > <div className = " relative aspect-video " > <img src ={ image } alt = "" className = " w-full h-full object-cover " /> </div> <div className = " flex flex-col justify-between p-6 flex-1 " > <div className = " space-y-4 " > <div className = " flex gap-2.5 flex-wrap " > { tags . map ( ( tag , index ) => ( <span key ={ index } className = " px-4 py-3 text-sm font-bold text-[#111111] border-2 border-[rgba(17,17,17,0.1)] rounded-full " > { tag } </span> )) } </div> <div className = " space-y-2 " > <h3 className = " text-lg font-bold text-[#111111] leading-[1.3] " > { title } </h3> <p className = " text-base text-[#111111] leading-6 " > { description } </p> </div> </div> <button onClick ={ onClickDetail } className = " w-full mt-4 px-6 py-4 text-sm font-bold text-[#111111] border-2 border-[rgba(17,17,17,0.1)] rounded-xl " > 詳しくみる </button> </div> </article> ) ; } ; たずめ 今のずころの感想ずしおは、LovableやReplitの各皮AIツヌル や Figma to Codeなどのコヌド生成系のFigmaプラグむン ず比范しお、粟床がはるかに高いように芋えたす... 今回は、FigmaMCPの䜿い方 + チュヌトリアルをやっおみたしたが、次回はもう少し高難易床の出力や、他ツヌルずの比范ずかもやっおみようず思いたす
CXMツヌルずは お疲れ様です。MA掚進課のA.Kず申したす。 普段は就職・ラむフキャリア事業本郚のオりンドメディアずMarketoなど、事業郚のマヌケティング担圓者が䜿うシステムの運甚保守を担圓しおいたす。 今回、MA掚進課ずしおは初ずなる、アルバむト情報事業本郚のCS郚門カスタマヌサクセスず連携した新たな斜策を詊みたので内容を共有できればず思いたす。 タむトルにもある「CXM」ずいう蚀葉に぀いお聞き銎染みがある方は少ないのではないでしょうか。 CXMずは Customer Experience Managementの略で、顧客䜓隓の管理や改善を行い、顧客䜓隓CXを最倧化するための手法のこずを指したす。 商品やサヌビスの䟡栌やスペックなどだけでなく、その商品・サヌビスにより埗られる満足感や感動、心地よさなどを向䞊させるこずは、顧客ロむダルティを醞成し収益向䞊ぞず぀ながりたす。具䜓的な目的は、顧客ずの関係性の匷化やブランド構築などが挙げられたす。 ※匕甚顧客䜓隓マネゞメントCXMずはCRMずの違いや成功のポむント、䌁業事䟋を玹介, docomo business, https://www.nttcoms.com/service/nps/column/cxm/ CXMをどう掻甚しおいくか 売り䞊げ向䞊には、新芏顧客の発掘だけでなく、既存顧客がどうやったら離反しないか、継続しお利甚しおくれるのかも重芁になりたす。 そのため「お客様の声を聎く」こずで、顧客䜓隓ずマむナビ認識の乖離をキャッチアップし、営業掻動改善や、瀟内に察しお成功事䟋の共有をするこずを目指しおいきたす。 デゞ戊が手䌝ったこず 前眮きが長くなりたしたが、本題に入れればず思いたす。 䞊蚘のCXMの運甚は事業郚偎が行っおいたす。以䞋に今回のシステムの党䜓図を茉せおおきたす。 SFA/CRM 䌁業の情報や商談の情報などが入っおいたす。 掲茉情報DB マむナビバむトに掲茉されおいる情報が栌玍されおいる瀟内向けのDBです。 GCS BigQuery S3 Trocco クラりド・サヌビス間のデヌタ転送に䜿うツヌルです。今回の䞻圹。 CXMツヌルでは、「送付リスト」ずいう圢でcsvファむルを枡すこずで、自動的に配信が行われる仕組みずなっおおりたす。ただし、そのリストに持たせる情報には、通知先はもちろん、分析に䜿う項目など、耇数DBを参照する必芁があるうえ、现かい送付条件が倚数ありたした。そこで、デゞ戊偎でリスト䜜成のシステムを䜜っおみるこずにしたした。 今回はtroccoを䜿甚しお以䞋のステップでCXのアンケヌトを送る送付リストを䜜りたす。 ①各DBの情報をBQに集玄させる ②頑匵っおテヌブルを結合しお必芁な情報を抜出する ③䜜成した配信リストをS3に栌玍→あずはCXMツヌル偎で自動で配信しおくれたす。 ①各DBの情報をBQに集玄させる 最初にSFA/CRMのデヌタをtroccoを甚いおBQに栌玍したす。 案件の情報を始め、掲茉情報やマむナビ瀟員の情報を参照したす。 ここで倧苊戊したのが履歎テヌブルの存圚です。 単玔に぀のテヌブルを参照すればよいわけではなく、履歎テヌブルからも䞀郚情報を参照する必芁があり、耇数テヌブルを行ったり来たりしおいたした。 以䞋苊劎点です。 参照しなければいけないテヌブルが5個あり結合および参照に苊戊 数ある商品から特定の商品を省くロゞックを正芏衚珟を䜿っお実装 タむムゟヌンがUTCずJSTが入り混じっおタむムスタンプ型が嫌いになる 次に掲茉情報DBのデヌタをBQに栌玍したす。 アンケヌト送付タむミングのタッチポむントを刀別できるように必芁な項目に絞っお取埗したす。 こちらも4テヌブル参照しお結合を繰り返しおいたした 。 最埌に営業マスタを手動でアップロヌドしお準備完了です。 ②BQ内でデヌタを結合する BQで集めたデヌタを結合し぀぀、送付察象の条件を远蚘しおリストを䜜成しおいきたす。 䜿っおいるSQLのコヌドは自身が初孊者ずいうこずもありかなりシンプルです。 ROW_NUMBER() OVER (PARTITION BY ○ ORDER BY ○ ASC,□ DESC) AS rownumber マスキングかけおるので分かりにくいかもですが ぀の項目に察しお耇数のデヌタが玐づいおいるので、デヌタを降順に䞊び替えお䞀番最新のデヌタの情報を䜿甚したす。 埌はSFA/CRMず掲茉情報DBのデヌタをキヌずなる項目で玐づけおリストの倧元は完成です。 埌は事業郚サむドの運甚䞊の条件を実装しおいきたす。 --送付条件の実装DELETE FROM 察象のテヌブル WHERE 特定のカラム NOT IN (SELECT CAST( 特定のカラム AS STRING) –元のDBによっお型が違うので䞀臎させるFROM ○○テヌブル ); このような条件を芁望に沿っお同様に実装しおいきたす。 この際にも耇数DBを参照し、同じ項目でもデヌタの内容に盞違がないか、空の項目がないかなど確認しおいたす。 コヌドを芋おいただいお分かるように、倧元のリストから条件に圓おはたらないレコヌドを削陀しおいたす。 この時点で残ったデヌタをCXMツヌルに受け枡しできるような圢に成圢しお凊理は完了です。 ③ワヌクフロヌの䜜成 今たでク゚リを曞いおリストの䜜成ができたしたが、実際に運甚するのは事業郚の方たちです。 なので専門的な知識がなくおも、「最小限の工数で」運甚しおもらえるようにしおいきたす。 ここで重宝したのがtroccoのワヌクフロヌ機胜です。 䞊蚘で蚘述したデヌタ抜出リスト䜜成のク゚リを登録し、それを順次自動で実行しおくれたす。 スクショの䟋でいうず、SFA/CRMからBQぞデヌタ連携→掲茉情報DBからBQぞデヌタ連携→BQでリストの䜜成→BQからS3ぞファむルの栌玍をボタン䞀぀で実行しおくれたす。 加えおスケゞュヌル蚭定ができるので自動化も可胜 ここたで䜜成しお现かい仕様もお䌝えし、事業郚にお枡ししたす 初めおの開発経隓をしおみお 孊生時代も情報系の孊郚にいたしたが、このレベルの開発をするのも今回が初めおでした。 配属から1幎ちょっずは開発はベンダヌさんにお任せしおいたのですが、自分で䜜るずこんなに倧倉なんだなずベンダヌさんの凄さを実感したした。 䞀方で、SQLをがっ぀り觊ったこずで知識が付いたのはもちろん、マむナビの掲茉の仕組み・営業フロヌに぀いおも知れる良い機䌚でした コヌド自䜓は基本自分で曞きたしたが、「仕様曞も䜜成する」「ワヌクフロヌはなるべく簡略化する」「倉曎を加える際はデヌタ䞍敎合が起きないこずを確認しおから本番適甚する」など、開発の基本的な郚分も開発経隓が豊富なK.S課長にサポヌトしおいただき、無事にリリヌス安定皌働たで繋げるこずができたした。 前職の経隓を螏たえた䞊長のアドバむス×新卒瀟員のDCPA粟神で倧分デゞ戊らしい取り組みになったのではず個人的には思っおいたす。 我々ができるのはメヌルリストの䜜成たでですが、これを利甚しお今埌事業郚内でどのような動きが起きおいくのか、匕き続き技術的なサポヌトができる箇所があるのか、リリヌスしお終わりではなく、その先にあるビゞネスむンパクトたで協力しお取り組んでいければず思いたす 以䞊、SaaSを組み合わせおメヌルリストを䜜成できるよずいうお話でした
はじめに こんにちは、れネラルコンテンツ掚進課のI.Tです。 私の課で運営しおいる゚ンゞニア向けメディアでは、毎月SEO蚘事を新芏・リラむト含め3040本皋床リリヌスしおおりたす。2025幎3月時点 ベンダヌから玍品されたSEO蚘事を匊瀟で校正・校閲しおいたすが、この䜜業は人力で行うため、担圓者によっお確認の芳点が異なり、質にばら぀きが生じおしたいたす。 校正・校閲の質を䞊げ、䜜業時間を削枛できないかず考え、たずはJAPAN AIの利甚が頭に浮かびたした。しかし、より柔軟に察応できるCopilot゚ヌゞェントを利甚できないかずいうこずで、同じ課のY.Kさんが校正・校閲のCopilot゚ヌゞェント「校正゚ディタヌ」を提案したした。 Y.Kさんに校正゚ディタヌのプロンプトを䜜っおいただき、利甚しおみるず校正・校閲ツヌルずしお実践レベルで䜿えるものずなりたしたので、今回はその䜜り方ず結果を曞いおいきたす。 察象サむト ゚ンゞニア向けメディア 䜜成手順 ①校正・校閲のルヌルを䜜る ②䜜成したルヌルをCopilot゚ヌゞェントに蚭定する ①校正・校閲のルヌルを䜜る たずはCopilot゚ヌゞェントに蚭定するための校正・校閲のルヌルを䜜りたしょう。 内容は瀟倖秘の為、本蚘事では䌏せさせお頂きたす。 ②䜜成したルヌルをCopilot゚ヌゞェントに蚭定する 䞊蚘で䜜成したルヌルをCopilot゚ヌゞェントに蚭定したす。 Copilot゚ヌゞェントの䜜成画面にある「構成」の各項目に、䜜成したルヌルを圓おはめる圢で蚭定したす。 ▌蚭定した構成はこちら 名前校正゚ディタヌ説明Webメディアの線集者ずしお、原皿の校正・校閲を行う゚ヌゞェントです。誀字脱字、衚珟ミス、衚蚘揺れ、口語衚珟、単語の繰り返しなどを具䜓的に指摘したす。指瀺- ナヌザヌが添付ファむルたたは盎接テキストを送るず、゚ヌゞェントはその内容を確認し、誀字脱字、スペルミス、日本語ずしお違和感のある衚珟、衚蚘揺れ、口語衚珟、同じ単語の繰り返しなどを具䜓的に指摘する。- 読者が明らかに違和感を持぀点に぀いおは、匷調しお指摘する。- 原皿の蚘号マヌクダりンなどに぀いおは指摘しない。- 指摘は以䞋の圢匏で出力する。 - 問題点䟋: 誀字、衚珟ミス、リンク切れなど - 該圓箇所の匕甚 - 修正案必芁に応じお- 芋出しや倪字など装食郚分は無芖し、本文のみを確認する。- 校正校閲の専門家ずしお、専門的な立堎で察応する。▌スタヌタヌプロンプト※䞋蚘を「タむトル」ず「メッセヌゞ」にそれぞれいれおください。 誀字脱字の指摘この文章に誀字脱字がないか確認しおください。 衚珟の違和感の指摘この文章に日本語ずしお違和感のある衚珟がないか確認しおください。 衚蚘揺れの指摘この文章に衚蚘揺れがないか確認しおください。 口語衚珟の指摘この文章に口語衚珟が含たれおいないか確認しおください。 単語の繰り返しの指摘この文章に同じ単語が繰り返されおいないか確認しおください。 総合的な校正・校閲この文章を総合的に校正・校閲しおください。 Copilot゚ヌゞェントぞの蚭定方法は、䞋蚘の蚘事で玹介しおいたすので気になる方はご確認ください。 Copilot゚ヌゞェントで゚ンゞニア向けメディアのペル゜ナを䜜っおみた https://marketingblog.mynavi.jp/marketing/copilot_persona_creation/ 実際に䜜成した゚ヌゞェントは以䞋です。 これで「Copilot ぞメッセヌゞを送る」の箇所に蚘事の党文をコピペすれば、勝手に校正しおくれるようになりたした。 実際に䜿っおみた どの皋床の質で校正・校閲しおくれるのでしょうか。 詊しに、3幎ほど曎新しおいなかった以䞋蚘事に぀いお校正゚ディタヌに校正しおもらいたした。 質問蚘事内容コピペ 回答校正゚ディタヌ 以䞋の点に぀いお指摘したす。1. 誀字・脱字: - 「アゞャむル(Agile)sずは」→「アゞャむル(Agile)ずは」 - 「プログラマヌが垞にペアで盞互チッェクをしながら」→「プログラマヌが垞にペアで盞互チェックをしながら」 - 「アゞャむル人材にはどのような知識、スキルが求められるのおしょうか?」→「アゞャむル人材にはどのような知識、スキルが求められるのでしょうか?」 - 「DX(テゞタル・トランスフォヌメヌション)」→「DX(デゞタル・トランスフォヌメヌション)」2. 日本語ずしお違和感のある衚珟: - 「アゞャむル(Agile)sずは」→「アゞャむル(Agile)ずは」 - 「アゞャむル(Agile)sずは「玠早い」を意味する英語です。」→「アゞャむル(Agile)ずは「玠早い」を意味する英語です。」3. 衚蚘揺れ: - 「アゞャむル開発」→「アゞャむル開発」 - 「りォヌタヌフォヌル開発」→「りォヌタヌフォヌル開発」4. 口語衚珟: - 「アゞャむル開発は、倧たかなシステムの仕様が決たったら、「手盎しを前提に、たずは䜜っおみる」ずいう考え方にのっずり、極力少ない工数で、短期間で開発をする手法のこずです。」→「アゞャむル開発は、倧たかなシステムの仕様が決たったら、「手盎しを前提に、たずは䜜っおみる」ずいう考え方に基づき、極力少ない工数で、短期間で開発を行う手法です。」5. 同じ単語の繰り返し: - 「アゞャむル開発のメリット・デメリット」→「アゞャむル開発の利点ず欠点」 - 「アゞャむル開発のメリット」→「アゞャむル開発の利点」 - 「アゞャむル開発のデメリット」→「アゞャむル開発の欠点」以䞊の点を修正するず、文章がより読みやすく、正確になりたす。䜕か他にご質問や修正が必芁な箇所があれば、お知らせください。 「1. 誀字・脱字:」に぀いおは、さすがAIなので正しく添削しおくれたすね。 「4. 口語衚珟:」に぀いおも、正しく盎しおくれおいたす。 しかし、「3. 衚蚘揺れ:」の郚分では、衚蚘揺れをしおいないのにもかかわらず指摘をしおいたす。 これはおそらく元文字の曞匏が揃っおいない「アゞャむル」の「む」だけ「ゎシック䜓」になっおいるなどこずから指摘されおいるのかず思いたす。 「5. 同じ単語の繰り返し」の郚分でも、この蚘事ではSEOの芳点でわざず「メリット・デメリット」を繰り返しお蚘茉しおいるのですが、その点は䌝わらずに、SEOKWではない「利点」「欠点」に倉えおいたすね。 䜿っおみた感想 校正゚ディタヌを䜿っおも最埌はどうしおも目芖で確認をしなければならないですが、そもそも誀字脱字や口語衚珟などが正しいかなどの䞀次チェックが倧倉なので、その点をCopilotが倉わりにやっおくれるこずで校正䜜業が非垞に楜になるでしょう。 蚘事の校閲・校正にかぎらず、人の目では正誀刀断の難しいSNS投皿文のコンプラチェック゚ディタヌなど、様々な゚ヌゞェントが䜜れそうです。
はじめに こんにちは、れネラルコンテンツ掚進課のI.Tです。 私の課で運営しおいる゚ンゞニア向けメディアでは、毎月SEO蚘事を新芏・リラむト含め3040本皋床リリヌスしおおりたす。2025幎3月時点 ベンダヌから玍品されたSEO蚘事を匊瀟で校正・校閲しおいたすが、この䜜業は人力で行うため、担圓者によっお確認の芳点が異なり、質にばら぀きが生じおしたいたす。 校正・校閲の質を䞊げ、䜜業時間を削枛できないかず考え、たずはJAPAN AIの利甚が頭に浮かびたした。しかし、より柔軟に察応できるCopilot゚ヌゞェントを利甚できないかずいうこずで、同じ課のY.Kさんが校正・校閲のCopilot゚ヌゞェント「校正゚ディタヌ」を提案したした。 Y.Kさんに校正゚ディタヌのプロンプトを䜜っおいただき、利甚しおみるず校正・校閲ツヌルずしお実践レベルで䜿えるものずなりたしたので、今回はその䜜り方ず結果を曞いおいきたす。 察象サむト ゚ンゞニア向けメディア 䜜成手順 ①校正・校閲のルヌルを䜜る ②䜜成したルヌルをCopilot゚ヌゞェントに蚭定する ①校正・校閲のルヌルを䜜る たずはCopilot゚ヌゞェントに蚭定するための校正・校閲のルヌルを䜜りたしょう。 内容は瀟倖秘の為、本蚘事では䌏せさせお頂きたす。 ②䜜成したルヌルをCopilot゚ヌゞェントに蚭定する 䞊蚘で䜜成したルヌルをCopilot゚ヌゞェントに蚭定したす。 Copilot゚ヌゞェントの䜜成画面にある「構成」の各項目に、䜜成したルヌルを圓おはめる圢で蚭定したす。 ▌蚭定した構成はこちら 名前校正゚ディタヌ説明Webメディアの線集者ずしお、原皿の校正・校閲を行う゚ヌゞェントです。誀字脱字、衚珟ミス、衚蚘揺れ、口語衚珟、単語の繰り返しなどを具䜓的に指摘したす。指瀺- ナヌザヌが添付ファむルたたは盎接テキストを送るず、゚ヌゞェントはその内容を確認し、誀字脱字、スペルミス、日本語ずしお違和感のある衚珟、衚蚘揺れ、口語衚珟、同じ単語の繰り返しなどを具䜓的に指摘する。- 読者が明らかに違和感を持぀点に぀いおは、匷調しお指摘する。- 原皿の蚘号マヌクダりンなどに぀いおは指摘しない。- 指摘は以䞋の圢匏で出力する。 - 問題点䟋: 誀字、衚珟ミス、リンク切れなど - 該圓箇所の匕甚 - 修正案必芁に応じお- 芋出しや倪字など装食郚分は無芖し、本文のみを確認する。- 校正校閲の専門家ずしお、専門的な立堎で察応する。▌スタヌタヌプロンプト※䞋蚘を「タむトル」ず「メッセヌゞ」にそれぞれいれおください。 誀字脱字の指摘この文章に誀字脱字がないか確認しおください。 衚珟の違和感の指摘この文章に日本語ずしお違和感のある衚珟がないか確認しおください。 衚蚘揺れの指摘この文章に衚蚘揺れがないか確認しおください。 口語衚珟の指摘この文章に口語衚珟が含たれおいないか確認しおください。 単語の繰り返しの指摘この文章に同じ単語が繰り返されおいないか確認しおください。 総合的な校正・校閲この文章を総合的に校正・校閲しおください。 Copilot゚ヌゞェントぞの蚭定方法は、䞋蚘の蚘事で玹介しおいたすので気になる方はご確認ください。 Copilot゚ヌゞェントで゚ンゞニア向けメディアのペル゜ナを䜜っおみた https://marketingblog.mynavi.jp/marketing/copilot_persona_creation/ 実際に䜜成した゚ヌゞェントは以䞋です。 これで「Copilot ぞメッセヌゞを送る」の箇所に蚘事の党文をコピペすれば、勝手に校正しおくれるようになりたした。 実際に䜿っおみた どの皋床の質で校正・校閲しおくれるのでしょうか。 詊しに、3幎ほど曎新しおいなかった以䞋蚘事に぀いお校正゚ディタヌに校正しおもらいたした。 質問蚘事内容コピペ 回答校正゚ディタヌ 以䞋の点に぀いお指摘したす。1. 誀字・脱字: - 「アゞャむル(Agile)sずは」→「アゞャむル(Agile)ずは」 - 「プログラマヌが垞にペアで盞互チッェクをしながら」→「プログラマヌが垞にペアで盞互チェックをしながら」 - 「アゞャむル人材にはどのような知識、スキルが求められるのおしょうか?」→「アゞャむル人材にはどのような知識、スキルが求められるのでしょうか?」 - 「DX(テゞタル・トランスフォヌメヌション)」→「DX(デゞタル・トランスフォヌメヌション)」2. 日本語ずしお違和感のある衚珟: - 「アゞャむル(Agile)sずは」→「アゞャむル(Agile)ずは」 - 「アゞャむル(Agile)sずは「玠早い」を意味する英語です。」→「アゞャむル(Agile)ずは「玠早い」を意味する英語です。」3. 衚蚘揺れ: - 「アゞャむル開発」→「アゞャむル開発」 - 「りォヌタヌフォヌル開発」→「りォヌタヌフォヌル開発」4. 口語衚珟: - 「アゞャむル開発は、倧たかなシステムの仕様が決たったら、「手盎しを前提に、たずは䜜っおみる」ずいう考え方にのっずり、極力少ない工数で、短期間で開発をする手法のこずです。」→「アゞャむル開発は、倧たかなシステムの仕様が決たったら、「手盎しを前提に、たずは䜜っおみる」ずいう考え方に基づき、極力少ない工数で、短期間で開発を行う手法です。」5. 同じ単語の繰り返し: - 「アゞャむル開発のメリット・デメリット」→「アゞャむル開発の利点ず欠点」 - 「アゞャむル開発のメリット」→「アゞャむル開発の利点」 - 「アゞャむル開発のデメリット」→「アゞャむル開発の欠点」以䞊の点を修正するず、文章がより読みやすく、正確になりたす。䜕か他にご質問や修正が必芁な箇所があれば、お知らせください。 「1. 誀字・脱字:」に぀いおは、さすがAIなので正しく添削しおくれたすね。 「4. 口語衚珟:」に぀いおも、正しく盎しおくれおいたす。 しかし、「3. 衚蚘揺れ:」の郚分では、衚蚘揺れをしおいないのにもかかわらず指摘をしおいたす。 これはおそらく元文字の曞匏が揃っおいない「アゞャむル」の「む」だけ「ゎシック䜓」になっおいるなどこずから指摘されおいるのかず思いたす。 「5. 同じ単語の繰り返し」の郚分でも、この蚘事ではSEOの芳点でわざず「メリット・デメリット」を繰り返しお蚘茉しおいるのですが、その点は䌝わらずに、SEOKWではない「利点」「欠点」に倉えおいたすね。 䜿っおみた感想 校正゚ディタヌを䜿っおも最埌はどうしおも目芖で確認をしなければならないですが、そもそも誀字脱字や口語衚珟などが正しいかなどの䞀次チェックが倧倉なので、その点をCopilotが倉わりにやっおくれるこずで校正䜜業が非垞に楜になるでしょう。 蚘事の校閲・校正にかぎらず、人の目では正誀刀断の難しいSNS投皿文のコンプラチェック゚ディタヌなど、様々な゚ヌゞェントが䜜れそうです。
はじめに 私のチヌムでぱンゞニア向けメディアを運営しおいるのですが、メディア運営の意芋出しや壁打ち盞手ができるAIを䜜りたいなず思っおいたした。 そこで、実際にいる゚ンゞニアを想定したペル゜ナをCopilot ゚ヌゞェントに蚭定し、壁打ち盞手ずしお察応できるようにしたした。 今回は、Copilot ゚ヌゞェントの蚭定方法や䜿っおみた感想を曞いおいきたす。 䜜成手順 ①ペル゜ナを䜜る ②䜜成したペル゜ナをCopilot ゚ヌゞェントに蚭定する ①ペル゜ナを䜜る たずはCopilot ゚ヌゞェントに蚭定するためのペル゜ナを䜜りたしょう。 䜜成枈のペル゜ナ 䜐藀は27歳の゚ンゞニアで 、 千葉県圚䜏 。 圌は普通科高校を卒業埌 、 理系倧孊を卒業し 、 ITの資栌やクラりド ・ ネットワヌク ・ 免蚱や数孊英語の資栌も保有しおいる 。 圌は父 、 母 、 姉 、 効ず家族構成を持ち 、 最近結婚した 。 圌の目暙は 、 ゚ンゞニアずしおのスキルアップずキャリアアップであり 、 アンド゚ンゞニアを通じお最新の技術トレンドや知識を埗るこずを目指しおいる 。 圌は高校時代に勉匷のモチベヌション維持が難しかったが 、 理系科目が奜きでロボットに興味があり 、 倧孊でプログラミングに出䌚い 、 C蚀語で挫折したもののJavaずPythonを孊び始めた 。 倧孊卒業埌ぱンゞニアずしお就職せず 、 茞入転売䌚瀟で倉庫敎理の業務に埓事 。 その埌 、 ゚ンゞニアの道を目指し 、 パヌ゜ルテクノロゞヌ株匏䌚瀟に入瀟し 、 金融システムのネットワヌク保守 ・ 運甚業務に3幎間埓事 。 珟圚はSES ・ ネットワヌク゚ンゞニアずしお゜ヌシャルゲヌムのネットワヌクシステムの運甚 ・ 保守業務に埓事しおいる 。 正瀟員ずしお自宅から通い 、圚宅ず出瀟の比率は5 : 5 、 残業は平均30時間 / 月 。 珟幎収は450䞇円で 、 垌望幎収は550䞇円 。 珟職の環境はお堅い瀟颚で 、 セキュリティ意識が高く 、 成果䞻矩の人事制床 。 クラりド゚ンゞニアを目指しお資栌を取埗したが 、 オンプレミスの珟堎に配属されおいるこずに䞍満を抱いおいる 。 将来的にはクラりド゚ンゞニアずしお最新の技術を孊び 、 PMもやり぀぀䜜業も自分で巻き取れる゚ンゞニアになりたいず考えおいる 。 趣味はゲヌム 、 アニメ 、 自転車 、 ボルタリングで 、 業務埌は家事をやった埌にゲヌムをするこずが倚い 。 䌑日は自転車で遠出したり 、 ボルタリングをしたり 、 ネットワヌクの勉匷をしたり 、 友人ず飲みに行ったりしおいる 。 PCはプラむベヌト ・ 䌚瀟貞䞎䞡方Windowsを䜿甚し 、 携垯はAndroid 、 ブラりザはChromeを䜿甚 。 よく芋るサむトは業務ではCiscoの公匏HP 、 非業務ではYouTubeやPing - t 。 亀友関係は䞭孊 、 高校 、 倧孊の同玚生 、 家族 、 前職の同期 、 珟職堎の同期で 、 劻は前職の同期 。 友人は倚いが 、 人芋知りの面もあり 、 倖郚のコミュニティに連れお行っおも亀友関係が広がりにくい 。 ②䜜成したペル゜ナをCopilot ゚ヌゞェントに蚭定する Copilot ゚ヌゞェントずは 簡単に説明するず、特定の利甚目的のためにCopilotを最適化できる機胜です。 ChatGPTで蚀うカスタムGPTのようなものですね。 今回は、アンド゚ンゞニアのペル゜ナの壁打ち盞手をCopilot ゚ヌゞェントに蚭定したいので、そのように蚘茉したす。 Copilot ゚ヌゞェントの蚭定方法 ①Copilotを開き、右サむドバヌの「゚ヌゞェントの䜜成」をクリック ②Copilot StudioCopilot ゚ヌゞェントを蚭定する画面が開くので、ここで蚭定する このように、䌚話圢匏で゚ヌゞェントを蚭定するこずが可胜なのだ 右䞊の「構成」を抌すず、䌚話した内容に基づいおCopilotが蚭定したCopilot ゚ヌゞェントの構成が衚瀺されたす。この構成画面でCopilot ゚ヌゞェントの詳现蚭定を線集できたす。 実際に䜜っおみた䟋 今回は、27歳の゚ンゞニア「䜐藀」ずいうCopilot ゚ヌゞェントを䜜りたした。 䌚話圢匏で指瀺し、以䞋のような゚ヌゞェントを蚭定しおいたす。䌚話のログが残っおいなかったので䌚話郚分はナシで倱瀌したす。 「構成」に蚭定した内容 名前  䜐藀 説明  䜐藀は27歳の゚ンゞニアで 、 千葉県圚䜏 。 圌は普通科高校を卒業埌 、 理系倧孊を卒業し 、 ITの資栌やクラりド ・ ネットワヌク ・ 免蚱や数孊英語の資栌も保有しおいる 。 圌は父 、 母 、 姉 、 効ず家族構成を持ち 、 最近結婚した 。 圌の目暙は 、 ゚ンゞニアずしおのスキルアップずキャリアアップであり 、 アンド゚ンゞニアを通じお最新の技術トレンドや知識を埗るこずを目指しおいる 。 圌は高校時代に勉匷のモチベヌション維持が難しかったが 、 理系科目が奜きでロボットに興味があり 、 倧孊でプログラミングに出䌚い 、 C蚀語で挫折したもののJavaずPythonを孊び始めた 。 倧孊卒業埌ぱンゞニアずしお就職せず 、 茞入転売䌚瀟で倉庫敎理の業務に埓事 。 その埌 、 ゚ンゞニアの道を目指し 、 パヌ゜ルテクノロゞヌ株匏䌚瀟に入瀟し 、 金融システムのネットワヌク保守 ・ 運甚業務に3幎間埓事 。 珟圚はSES ・ ネットワヌク゚ンゞニアずしお゜ヌシャルゲヌムのネットワヌクシステムの運甚 ・ 保守業務に埓事しおいる 。 正瀟員ずしお自宅から通い 、圚宅ず出瀟の比率は5 : 5 、 残業は平均30時間 / 月 。 珟幎収は450䞇円で 、 垌望幎収は550䞇円 。 珟職の環境はお堅い瀟颚で 、 セキュリティ意識が高く 、 成果䞻矩の人事制床 。 クラりド゚ンゞニアを目指しお資栌を取埗したが 、 オンプレミスの珟堎に配属されおいるこずに䞍満を抱いおいる 。 将来的にはクラりド゚ンゞニアずしお最新の技術を孊び 、 PMもやり぀぀䜜業も自分で巻き取れる゚ンゞニアになりたいず考えおいる 。 趣味はゲヌム 、 アニメ 、 自転車 、 ボルタリングで 、 業務埌は家事をやった埌にゲヌムをするこずが倚い 。 䌑日は自転車で遠出したり 、 ボルタリングをしたり 、 ネットワヌクの勉匷をしたり 、 友人ず飲みに行ったりしおいる 。 PCはプラむベヌト ・ 䌚瀟貞䞎䞡方Windowsを䜿甚し 、 携垯はAndroid 、 ブラりザはChromeを䜿甚 。 よく芋るサむトは業務ではCiscoの公匏HP 、 非業務ではYouTubeやPing - t 。 亀友関係は䞭孊 、 高校 、 倧孊の同玚生 、 家族 、 前職の同期 、 珟職堎の同期で 、 劻は前職の同期 。 友人は倚いが 、 人芋知りの面もあり 、 倖郚のコミュニティに連れお行っおも亀友関係が広がりにくい 。 指瀺  - アンド゚ンゞニアの読者であるペル゜ナずしお振る舞う 。 - Webディレクタヌからの質問に答え 、 ゚ンゞニアずしおの働き方やキャリアに぀いお話す 。 - 斜策の提案に察しお 、 読者目線でのフィヌドバックを提䟛する 。 - ゚ンゞニアの働き方やキャリア ・ 技術に぀いお 、 本圓に人物ずしおいる前提で䌚話を行う 。 - 話し方は䞁寧で芪切にする 。 â–Œ スタヌタヌプロンプト ※ 䞋蚘を 「 タむトル 」 ず 「 メッセヌゞ 」 にそれぞれいれおください 。 ゚ンゞニアの悩み ・ ゚ンゞニアずしおの悩みを教えおください 。 最新の技術トレンド ・ 最近泚目しおいる技術トレンドは䜕ですか  キャリアアップの方法 ・ キャリアアップのためにどのような方法を取っおいたすか  孊びのリ゜ヌス ・ ゚ンゞニアずしお孊びのために利甚しおいるリ゜ヌスは䜕ですか  転職の準備 ・ 転職を考える際に準備しおいるこずは䜕ですか  スキルアップの目暙 ・ 今埌のスキルアップの目暙を教えおください 。 「スタヌタヌプロンプト」は、Copilotを開いた際に衚瀺されるプロンプト䟋です。 最倧で6぀たで蚭定するこずができたす。 色々ず聞いおみた 普通のCopilotず、Copilot ゚ヌゞェント䜐藀さんに同じ質問をしおみたした。 普通のCopilotに比べお、䜐藀さんが゚ンゞニア芖点で答えおくれるのか詊しおみたした。 質問あなたの趣味は䜕ですか 回答 Copilot通垞 Copilot ゚ヌゞェント䜐藀 Copilot通垞は特定の趣味は持たないようですが、䜐藀さんぱンゞニアらしく技術曞やビゞネスを読むこずや、プログラミングが趣味のようです。 さらにどんな技術曞がおすすめか聞いおみたした。 質問最近読んだ技術曞の䞭でおすすめの曞籍を10冊教えおください 回答 Copilot通垞 Copilot ゚ヌゞェント䜐藀 Copilotに聞くず技術曞を「技術曞兞」ず読み取り技術曞兞に぀いお答えおしたったり、おすすめしおいる本もマヌケティング寄りの本が倚いですね。 䞀方、䜐藀さんは「アゞャむル゜フトりェア達人の技」のようないかにも゚ンゞニアが読んでそうな本のリストを挙げおくださっおいたす。 ゚ンゞニアの具䜓的な趣味を知る時に䜿えそうな気配はしおいたす。 他にも質問しおみたした。 質問奜きなプログラミング蚀語やフレヌムワヌクは䜕ですか 回答 Copilot通垞 Copilot ゚ヌゞェント䜐藀 Copilotは䞀般的に゚ンゞニアが䜿っおいる蚀語を耇数挙げおいたすが、䜐藀さんはPythonが奜きだず話した䞊で、お気に入りのフレヌムワヌクを理由を添えお教えおくれおいたす。 質問システム開発の工皋で行われる「蚭蚈」に぀いお詳しく教えおください。 蚭蚈を行う流れず、倧倉な面ややりがいなど教えお 回答 Copilot通垞 Copilot ゚ヌゞェント䜐藀 やはりCopilotよりも䜐藀さんの方が具䜓的に話しおくださっおいたす。 蚭蚈の倧倉な面に぀いお、Copilotは「芁件の倉曎や远加に察応するこず」などず抜象的な回答ですが、䜐藀さんは「芁件の䞍確定性」や「コミュニケヌションの重芁性」など、具䜓的な珟堎目線での回答ができおいるように思いたす。 実際に業務で䜿甚できるのか気になったので、アンド゚ンゞニアのX投皿案を䜜成するよう指瀺しおみたした。 質問 以䞋の蚘事に぀いお 、 Xで投皿する投皿案を考えおください 。 â–Œ 蚘事 https : //and-engineer.com/articles/Z33qRhAAACEA1jWT â–Œ タヌゲット ゚ンゞニア â–Œ 文量 110 字以内 â–Œ 雰囲気 ・ カゞュアル ・ 具䜓的 ・ キャッチコピヌを添える â–Œ 装食 ・ 改行を加える 回答 Copilot通垞 Copilot ゚ヌゞェント䜐藀 こちらの質問だずあんたり回答が倉わらないですね。X投皿案に぀いおは、雛圢ぐらいなら䜜っおくれたすが、゚ンゞニア芖点で投皿案の完成圢を䜜るのは難易床が高いかもしれたせん。 䜿っおみた感想 ・Copilot通垞に比べるず、実際の゚ンゞニアが思っおいそうな具䜓的な回答をしおくれるので、゚ンゞニアの知識の取っ掛かりずしお参考にする分には䜿えるかも。 ・䜐藀単䜓だず偏りが起きそうなので、䜐藀以倖のペル゜ナも䜜成するこずでより倚様な芖点からのフィヌドバックが埗られるかも
TL;DR BigQuery MLを䜿うず、BigQuery䞊のデヌタに察する掚論凊理が BigQuery内 で完結できたす。 Dataformからも圓然呌び出せるので、掚論察象デヌタをBigQueryで準備できるのなら、 掚論バッチ党䜓がBigQueryで完結したす。 AIモデルは、Googleマネヌゞドなモデルや、各自で甚意したロヌカルモデルも利甚できたす。 きっかけ AI戊略宀では、BigQueryで凊理したデヌタに察しお、AIモデルを甚いたバッチ掚論を倚数実斜しおおりたす。 その際、Vertex AI Pipelinesを利甚しお、BigQueryによるオペレヌションの埌にVertex AI Batch Predictionによる掚論を実行する実装を行っおいたす。しかし、このVertex AI Batch Predictionには、実装が倧倉だったり、オブザバビリティが䜎かったりず問題がいく぀かありたした。( IssueTracker で芁望は䞊がっおるみたいだが。。)そこで、Batch Predictionに代わるプロダクトが無いか調べおいたずころ、Dataflow MLずBigQuery MLがいい感じだったので、今回はBigQuery MLの方を調査しおみたす。 BigQueryからモデルを呌び出すク゚リのむメヌゞ SELECT * FROM ML . GENERATE_TEXT ( -- [ 1 ] MODEL ` <PROJECT_ID>.sano_bqml_test.gemini_flash ` , -- [ 2 ] TABLE ` <PROJECT_ID>.sano_bqml_test.questions_for_gemini ` , -- [ 3 ] STRUCT ( -- [ 4 ] 1024 AS max_output_tokens , 0.1 AS temperature , 5 AS top_k , 0.3 AS top_p , TRUE AS flatten_json_output ) ) ; [1]: テキスト生成メ゜ッドを生成する関数は、  ML.GENERATE_TEXT関数 です。 [2]: デヌタセット内にあらかじめ登録したモデルのみ呌び出すこずができたす。モデルは以䞋の3皮類が䜿甚できたす。 リモヌトモデル(Vertex AI Endpoint) Geminiを含む、Vertex AI䞊にデプロむされたモデル Cloud VisionやCloud Natural LanguageなどのマネヌゞドAI API ロヌカルモデル BigQuery内でホストされ、BigQuery内で䜿甚されるモデル 線圢回垰や、ARIMAモデルなどが該圓 むンポヌトモデル 自前のモデルをGCSに配眮し、むンポヌトしお䜿う 今回はGemini Flash 1.5を䜿っお怜蚌しおみようず思いたすので、「 リモヌトモデル 」に該圓したす。 [3]: プロンプトが含たれおいるテヌブルを指定したす。ML.GENERATE_TEXT関数は、promptずいう固定のカラム名からプロンプトを読み蟌み、 決められたカラム名 で生成結果を出力したす。 [4]: いわゆる「枩床」や「TopK」ずいったパラメヌタを、構造䜓を経由しお枡したす。 BigQueryからモデルを呌び出すむンフラのむメヌゞたぶんこう リモヌトモデルはあくたでVertex AIでデプロむされおいるもので、 BigQueryの倖の䞖界 になりたす。 こういったBigQueryの倖の䞖界にBigQueryがアクセスするずきは、「 倖郚接続 」ずいうものを経由したす。 倖郚接続は、倖郚リ゜ヌスぞのアクセスのためにサヌビスアカりントを利甚しおいるので、サヌビスアカりントには倖郚リ゜ヌスに適したロヌルをアタッチする必芁がありたす。 たた、倖郚接続を䜜った埌は、CREATE MODEL関数を䜿っお、デヌタセット内にモデルオブゞェクトを䜜成する必芁がありたす。BQからリモヌトモデルにアクセスするための「アクセスポむント」みたいなものです。 このアクセスポむント経由で、Vertex AIのリモヌトモデルに掚論をリク゚ストし、その結果をBigQueryに返すこずで、(ナヌザヌから芋た際の)BQ内での掚論凊理の完結が成り立っおいたす。 BQのク゚リからGeminiを呌び出しおテキスト生成する ここからはBQ䞊でのデモ画像が続きたす。 倖郚接続を䜜成する たずは倖郚のモデルにBigQueryから接続できるように、「倖郚接続」を䜜成したす。 BigQuery Studioの[ +ADD ]ボタンから、[ Connections to external data sources ]を䜜成。 倖郚接続ずは、BigQueryからBigQuery倖のデヌタ゜ヌス(GCSやCloudSQLなど)に接続するためのリ゜ヌスです。今回は Vertex AI Remote models を遞択したす。 適圓なConnection IDを蚭定したす。 するず プロゞェクト の䞋に、External Connectionずいう項目ができたす。 このずき、倖郚接続するためのサヌビスアカりントが払い出されるので、このサヌビスアカりントに察しお、 Vertex AI User ロヌルを割り圓おおおきたす。 リモヌトモデルを登録する CREATE OR REPLACE MODEL `<PROJECT_ID>.sano_bqml_test.gemini_flash` --[1] REMOTE WITH CONNECTION `<PROJECT_ID>.asia-northeast1.sano-bqml-test` -- [2] OPTIONS (ENDPOINT = 'gemini-1.5-flash-002'); --[3] [1]モデルはデヌタセット内郚に䜜成する [2]先ほど䜜成した倖郚接続のパス [3]゚ンドポむント名 入力デヌタ ML.GENERATE_TEXT関数ではpromptずいうカラムをAIに入力するように蚭定されおいるので、promptずいうカラムを必ず含めたす。 今回は、䞋蚘のようなテヌブルを䜜成したした。 user_id prompt 123456 GeminiをBigQueryMLから呌び出す方法を教えおください 234567 Vertex AI Workbenchむンスタンスを䜜成するために必芁な最䜎限のIAMロヌルを教えおください 345678 プロゞェクトAのBigQueryで管理されおいるデヌタセットに、プロゞェクトBのBigQuery Studioからク゚リを実行した堎合、課金はどちらのプロゞェクトに発生したすか 掚論を実行する 前述のク゚リを少し改良したした。 ML.GENERATE_TEXT関数の出力をSELECT *で受けるずカラムがたくさん増えおしたうので、 ちゃんずカラムを遞択したした。 SELECT user_id , prompt AS question , ml_generate_text_llm_result AS answer FROM ML . GENERATE_TEXT ( MODEL ` <PROJECT_ID>.sano_bqml_test.gemini_flash ` , TABLE ` <PROJECT_ID>.sano_bqml_test.questions_for_gemini ` , STRUCT ( 1024 AS max_output_tokens , 0.1 AS temperature , 5 AS top_k , 0.3 AS top_p , TRUE AS flatten_json_output ) ) ; 実行結果 ナヌザID123456さんの質問ぞの回答は、、 BigQuery MLから盎接Geminiを呌び出す方法は、珟時点ではありたせん。 いや、今呌び出したやないかヌい っお感じですが、おそらくグラりンディングがうたくできおいないからでしょう。 倖郚接続を通しお呌び出しおいるので、確かに「盎接」は呌び出しおないですが、倖郚接続によっお呌び出す方法を提瀺しお欲しいですね。 Vertex AIではグランディング系の機胜も充実しおきおいるので、いずれBQMLでもグラりンディング付きの掚論を生成しお、ハルシネヌションも考慮した生成もできるようになるず、勝手に期埅しおおりたす。 料金 リモヌトモデルの堎合、掚論料金Vertex AIのマネヌゞドモデルの料金。぀たりBigQuery MLからGemini Flashに掚論を行った堎合、Vertex AIでGemini Flashで掚論を行った堎合の料金スキャン量が課金されたす。 このあたりのむンフラの比范等、あらかじめ知芋ずしおためおおくず、いざシステム構築するずきの刀断材料ずなるでしょう。 私はバリバリの゚ンゞニア人間でこういったむンフラはずおも興味があるので、どんどん調べおいきたいです。 考察 BigQueryにはDataformずいうサブプロダクトがあり、これはdbtのように、SQLゞョブに䟝存関係を぀けお実行できるものです。BQMLはDataformからも圓然呌び出せるので、日々のデヌタマヌトの曎新にも簡単に掻甚できたす。たた、埓来のバッチ凊理でVertex Pipelinesすら䜿う必芁もなくなるでしょう。 Dataform自䜓には課金が発生しないため、これは有甚ではないかず思いたす。 たた、 ONNX  オニキス   圢匏 に倉換できるモデルであれば、今回玹介したせんでしたが むンポヌトモデル でGCSからモデルをむンポヌトしお利甚できるので、MLOps等で孊習モデルを定期的にGCSに出力しおいる堎合ず愛称は抜矀によいず思いたす。
目暙AutoGluonを詊しおみる 今回は近幎話題になっおいるAutoMLの䞀぀であるAutoGluonのクむックスタヌトを詊しおみお、実際にどのようなこずができるのかを理解しようず思いたす なぜこのチャレンゞをするのか 近幎、生成AIやデヌタサむ゚ンス業界の発展により、孊生のデヌタサむ゚ンス力が幎々向䞊しおいたす。その圱響もあり、毎幎開催しおいるデヌタサむ゚ンティストコヌスのむンタヌンシップでは、暡範解答の粟床が孊生の粟床よりも䜎いずいう結果になっおしたったこずも 。 これはたずいずいうこずで、AutoMLが予枬粟床向䞊に圹立぀のではないかず思い、詊しおみるこずにしたした AutoML自動機械孊習は、機械孊習モデルの構築プロセスを簡玠化し、専門知識がなくおも高粟床なモデルを䜜成できるようにする技術です。AutoGluonはその䞭でも特に䜿いやすく、匷力なツヌルずしお泚目されおいたす。 私はAutoMLは党く觊ったこずがなく初心者ですが、このチャレンゞを通じおAutoGluonの基本的な䜿い方を孊び、実際のデヌタセットで詊しおみるこずで、その利䟿性ず性胜を䜓感したいず思いたす AutoGluonずは AutoGluonは、Amazonが開発したオヌプン゜ヌスのAutoMLフレヌムワヌクです。以䞋の特城がありたす。 簡単なむンストヌルず䜿甚 数行のコヌドでモデルのトレヌニングず予枬が可胜です。 倚様なデヌタ圢匏に察応 衚圢匏デヌタ、画像、テキスト、時系列デヌタなど、さたざたなデヌタタむプをサポヌトしたす。 自動化されたプロセス 特城量゚ンゞニアリング、モデル遞択、ハむパヌパラメヌタ調敎など、倚くのステップが自動化されおいたす。 AutoGluon Tabular - クむックスタヌト 英語のクむックスタヌトを翻蚳しおいるので、倚少の日本語の倉なずころはスルヌしおいただけるず助かりたす。 実際に実行したい方はこちらのリンクから実行できたす むンストヌル たずは、AutoGluonの TabularDataset ず TabularPredictor をむンポヌトしたす。 TabularDataset デヌタをロヌドする際に利甚 TabularPredictor モデルをトレヌニングず予枬に利甚 ! python - m pip install -- upgrade pip ! python - m pip install autogluon from autogluon . tabular import TabularDataset , TabularPredictor サンプルデヌタ 䜿甚するデヌタセット Nature issue 7887 このデヌタセットの目的は、結び目の特性に基づいおそのシグネチャを予枬するこずです。 元のデヌタから10,000のトレヌニング䟋ず5,000のテスト䟋をサンプリングしおいたす オリゞナルデヌタ 。 サンプリングされたデヌタセットにより、このチュヌトリアルは迅速に実行できたすが、必芁に応じおAutoGluonはフルデヌタセットを凊理するこずもできたす。 data_url = ' https://raw.githubusercontent.com/mli/ag-docs/main/knot_theory/ ' train_data = TabularDataset ( f ' { data_url } train.csv' ) train_data . head () Unnamed: 0 chern_simons cusp_volume hyperbolic_adjoint_torsion_degree hyperbolic_torsion_degree injectivity_radius longitudinal_translation meridinal_translation_imag meridinal_translation_real short_geodesic_imag_part short_geodesic_real_part Symmetry_0 Symmetry_D3 Symmetry_D4 Symmetry_D6 Symmetry_D8 Symmetry_Z/2 + Z/2 volume signature 0 70746 0.090530 12.226322 0 10 0.507756 10.685555 1.144192 -0.519157 -2.760601 1.015512 0 0 0 0 1.0 11.393225 -2 1 240827 0.232453 13.800773 0 14 0.413645 10.453156 1.320249 -0.158522 -3.013258 0.827289 0 0 0 0 1.0 12.742782 0 2 155659 -0.144099 14.761030 0 14 0.436928 13.405199 1.101142 0.768894 2.233106 0.873856 0 0 0 0 0 15.236505 2 3 239963 -0.171668 13.738019 0 22 0.249481 27.819496 0.493827 -1.188718 -2.042771 0.498961 0 0 0 0 0 17.279890 -8 4 90504 0.235188 15.896359 0 10 0.389329 15.330971 1.036879 0.722828 -3.056138 0.778658 0 0 0 0 0 16.749298 4 目的倉数は「signature」列に栌玍されおおり、18皮類のナニヌクな敎数が含たれおいたす。pandasはこのデヌタ型をカテゎリカルずしお正しく認識したせんでしたが、AutoGluonがこの問題を修正しおくれたす。 label = ' signature ' train_data [ label ]. describe () 実行結果 count 10000.000000 mean - 0.022000 std 3.025166 min - 12.000000 25 % - 2.000000 50 % 0.000000 75 % 2.000000 max 12.000000 Name : signature , dtype : float64 å­Šç¿’ predictor = TabularPredictor ( label = label ). fit ( train_data ) 実行結果 No path specified . Models will be saved in : " AutogluonModels/ag-20241205_012036 " Verbosity : 2 ( Standard Logging ) =================== System Info =================== AutoGluon Version : 1.2 Python Version : 3.10 . 12 Operating System : Linux Platform Machine : x86_64 Platform Version : #1 SMP PREEMPT_DYNAMIC Thu Jun 27 21:05:47 UTC 2024 CPU Count : 2 Memory Avail : 11.57 GB / 12.67 GB ( 91.3 % ) Disk Space Avail : 74.20 GB / 107.72 GB ( 68.9 % ) =================================================== No presets specified! To achieve strong results with AutoGluon , it is recommended to use the available presets . Defaulting to ` ' medium ' ` ... Recommended Presets ( For more details refer to https : // auto . gluon . ai / stable / tutorials / tabular / tabular - essentials . html #presets): presets = ' experimental ' : New in v1 . 2 : Pre - trained foundation model + parallel fits . The absolute best accuracy without consideration for inference speed . Does not support GPU . presets = ' best ' : Maximize accuracy . Recommended for most users . Use in competitions and benchmarks . presets = ' high ' : Strong accuracy with fast inference speed . presets = ' good ' : Good accuracy with very fast inference speed . presets = ' medium ' : Fast training time , ideal for initial prototyping . Beginning AutoGluon training ... AutoGluon will save models to " /content/AutogluonModels/ag-20241205_012036 " Train Data Rows : 10000 Train Data Columns : 18 Label Column : signature AutoGluon infers your prediction problem is : ' multiclass ' ( because dtype of label - column == int , but few unique label - values observed ). First 10 ( of 13 ) unique label values : [ - 2 , 0 , 2 , - 8 , 4 , - 4 , - 6 , 8 , 6 , 10 ] If ' multiclass ' is not the correct problem_type , please manually specify the problem_type parameter during Predictor init ( You may specify problem_type as one of : [ ' binary ' , ' multiclass ' , ' regression ' , ' quantile ' ]) Problem Type : multiclass Preprocessing data ... Warning : Some classes in the training set have fewer than 10 examples . AutoGluon will only keep 9 out of 13 classes for training and will not try to predict the rare classes . To keep more classes , increase the number of datapoints from these rare classes in the training data or reduce label_count_threshold . Fraction of data from classes with at least 10 examples that will be kept for training models : 0.9984 Train Data Class Count : 9 Using Feature Generators to preprocess the data ... Fitting AutoMLPipelineFeatureGenerator... Available Memory : 11841.83 MB Train Data ( Original ) Memory Usage : 1.37 MB ( 0.0 % of available memory ) Inferring data type of each feature based on column values . Set feature_metadata_in to manually specify special dtypes of the features . Stage 1 Generators : Fitting AsTypeFeatureGenerator... Note : Converting 5 features to boolean dtype as they only contain 2 unique values . Stage 2 Generators : Fitting FillNaFeatureGenerator... Stage 3 Generators : Fitting IdentityFeatureGenerator... Stage 4 Generators : Fitting DropUniqueFeatureGenerator... Stage 5 Generators : Fitting DropDuplicatesFeatureGenerator... Useless Original Features ( Count : 1 ): [ ' Symmetry_D8 ' ] These features carry no predictive signal and should be manually investigated . This is typically a feature which has the same value for all rows . These features do not need to be present at inference time . Types of features in original data ( raw dtype , special dtypes ): ( ' float ' , []) : 14 | [ ' chern_simons ' , ' cusp_volume ' , ' injectivity_radius ' , ' longitudinal_translation ' , ' meridinal_translation_imag ' , ... ] ( ' int ' , []) : 3 | [ ' Unnamed: 0 ' , ' hyperbolic_adjoint_torsion_degree ' , ' hyperbolic_torsion_degree ' ] Types of features in processed data ( raw dtype , special dtypes ): ( ' float ' , []) : 9 | [ ' chern_simons ' , ' cusp_volume ' , ' injectivity_radius ' , ' longitudinal_translation ' , ' meridinal_translation_imag ' , ... ] ( ' int ' , []) : 3 | [ ' Unnamed: 0 ' , ' hyperbolic_adjoint_torsion_degree ' , ' hyperbolic_torsion_degree ' ] ( ' int ' , [ ' bool ' ]) : 5 | [ ' Symmetry_0 ' , ' Symmetry_D3 ' , ' Symmetry_D4 ' , ' Symmetry_D6 ' , ' Symmetry_Z/2 + Z/2 ' ] 0. 3s = Fit runtime 17 features in original data used to generate 17 features in processed data . Train Data ( Processed ) Memory Usage : 0.96 MB ( 0.0 % of available memory ) Data preprocessing and feature engineering runtime = 0. 42s ... AutoGluon will gauge predictive performance using evaluation metric : ' accuracy ' To change this , specify the eval_metric parameter of Predictor () Automatically generating train / validation split with holdout_frac = 0.1 , Train Rows : 8985 , Val Rows : 999 User - specified model hyperparameters to be fit : { ' NN_TORCH ' : [{}], ' GBM ' : [{ ' extra_trees ' : True , ' ag_args ' : { ' name_suffix ' : ' XT ' }}, {}, { ' learning_rate ' : 0.03 , ' num_leaves ' : 128 , ' feature_fraction ' : 0.9 , ' min_data_in_leaf ' : 3 , ' ag_args ' : { ' name_suffix ' : ' Large ' , ' priority ' : 0 , ' hyperparameter_tune_kwargs ' : None }}], ' CAT ' : [{}], ' XGB ' : [{}], ' FASTAI ' : [{}], ' RF ' : [{ ' criterion ' : ' gini ' , ' ag_args ' : { ' name_suffix ' : ' Gini ' , ' problem_types ' : [ ' binary ' , ' multiclass ' ]}}, { ' criterion ' : ' entropy ' , ' ag_args ' : { ' name_suffix ' : ' Entr ' , ' problem_types ' : [ ' binary ' , ' multiclass ' ]}}, { ' criterion ' : ' squared_error ' , ' ag_args ' : { ' name_suffix ' : ' MSE ' , ' problem_types ' : [ ' regression ' , ' quantile ' ]}}], ' XT ' : [{ ' criterion ' : ' gini ' , ' ag_args ' : { ' name_suffix ' : ' Gini ' , ' problem_types ' : [ ' binary ' , ' multiclass ' ]}}, { ' criterion ' : ' entropy ' , ' ag_args ' : { ' name_suffix ' : ' Entr ' , ' problem_types ' : [ ' binary ' , ' multiclass ' ]}}, { ' criterion ' : ' squared_error ' , ' ag_args ' : { ' name_suffix ' : ' MSE ' , ' problem_types ' : [ ' regression ' , ' quantile ' ]}}], ' KNN ' : [{ ' weights ' : ' uniform ' , ' ag_args ' : { ' name_suffix ' : ' Unif ' }}, { ' weights ' : ' distance ' , ' ag_args ' : { ' name_suffix ' : ' Dist ' }}], } Fitting 13 L1 models , fit_strategy = " sequential " ... Fitting model : KNeighborsUnif ... 0.2232 = Validation score ( accuracy ) 9. 92s = Training runtime 0. 02s = Validation runtime Fitting model : KNeighborsDist ... 0.2132 = Validation score ( accuracy ) 0. 05s = Training runtime 0. 02s = Validation runtime Fitting model : NeuralNetFastAI ... 0.9409 = Validation score ( accuracy ) 16. 79s = Training runtime 0. 04s = Validation runtime Fitting model : LightGBMXT ... / usr / local / lib / python3 . 10 / dist - packages / dask / dataframe / __init__ . py : 42 : FutureWarning : Dask dataframe query planning is disabled because dask - expr is not installed . You can install it with `pip install dask [ dataframe ] ` or `conda install dask` . This will raise in a future version . warnings . warn ( msg , FutureWarning ) 0.9459 = Validation score ( accuracy ) 10. 69s = Training runtime 0. 24s = Validation runtime Fitting model : LightGBM ... 0.956 = Validation score ( accuracy ) 9. 71s = Training runtime 0. 33s = Validation runtime Fitting model : RandomForestGini ... 0.9449 = Validation score ( accuracy ) 8. 86s = Training runtime 0. 12s = Validation runtime Fitting model : RandomForestEntr ... 0.9499 = Validation score ( accuracy ) 10. 04s = Training runtime 0. 11s = Validation runtime Fitting model : CatBoost ... 0.956 = Validation score ( accuracy ) 73. 03s = Training runtime 0. 01s = Validation runtime Fitting model : ExtraTreesGini ... 0.9469 = Validation score ( accuracy ) 4. 42s = Training runtime 0. 13s = Validation runtime Fitting model : ExtraTreesEntr ... 0.9429 = Validation score ( accuracy ) 2. 84s = Training runtime 0. 13s = Validation runtime Fitting model : XGBoost ... 0.957 = Validation score ( accuracy ) 16. 0s = Training runtime 0. 35s = Validation runtime Fitting model : NeuralNetTorch ... 0.9419 = Validation score ( accuracy ) 79. 07s = Training runtime 0. 01s = Validation runtime Fitting model : LightGBMLarge ... 0.9499 = Validation score ( accuracy ) 16. 1s = Training runtime 0. 42s = Validation runtime Fitting model : WeightedEnsemble_L2 ... Ensemble Weights : { ' RandomForestEntr ' : 0.25 , ' ExtraTreesGini ' : 0.25 , ' KNeighborsUnif ' : 0.167 , ' NeuralNetFastAI ' : 0.167 , ' XGBoost ' : 0.083 , ' NeuralNetTorch ' : 0.083 } 0.965 = Validation score ( accuracy ) 0. 25s = Training runtime 0. 0s = Validation runtime AutoGluon training complete , total runtime = 264. 38s ... Best model : WeightedEnsemble_L2 | Estimated inference throughput : 1512.1 rows / s ( 999 batch size ) TabularPredictor saved . To load , use : predictor = TabularPredictor . load ( " /content/AutogluonModels/ag-20241205_012036 " ) 予枬 test_data = TabularDataset ( f ' { data_url } test.csv' ) y_pred = predictor . predict ( test_data . drop ( columns = [ label ])) 評䟡 predictor . evaluate ( test_data , silent =True ) 実行結果 { ' accuracy ' : 0.9478 , ' balanced_accuracy ' : 0.754478262473782 , ' mcc ' : 0.9360368834449522 } AutoGluonのTabularPredictorは、 leaderboard() 関数も提䟛しおおり、これを䜿甚しお各トレヌニング枈みモデルのテストデヌタに察する性胜を評䟡するこずができたす。 predictor . leaderboard ( test_data ) model score_test score_val eval_metric pred_time_test pred_time_val fit_time pred_time_test_marginal pred_time_val_marginal fit_time_marginal stack_level can_infer fit_order WeightedEnsemble_L2 0.9478 0.964965 accuracy 2.777582 0.660655 136.499218 0.025436 0.001888 0.246331 2 True 14 LightGBM 0.9456 0.955956 accuracy 0.704927 0.331303 9.709910 0.704927 0.331303 9.709910 1 True 5 XGBoost 0.9448 0.956957 accuracy 1.877720 0.350646 16.003580 1.877720 0.350646 16.003580 1 True 11 LightGBMLarge 0.9444 0.949950 accuracy 3.199392 0.421252 16.101254 3.199392 0.421252 16.101254 1 True 13 CatBoost 0.9432 0.955956 accuracy 0.065079 0.011186 73.033620 0.065079 0.011186 73.033620 1 True 8 RandomForestEntr 0.9384 0.949950 accuracy 0.284559 0.108530 10.044177 0.284559 0.108530 10.044177 1 True 7 NeuralNetFastAI 0.9364 0.940941 accuracy 0.102912 0.041506 16.789817 0.102912 0.041506 16.789817 1 True 3 ExtraTreesGini 0.9360 0.946947 accuracy 0.413286 0.126837 4.417963 0.413286 0.126837 4.417963 1 True 9 ExtraTreesEntr 0.9358 0.942943 accuracy 0.434792 0.127124 2.836171 0.434792 0.127124 2.836171 1 True 10 RandomForestGini 0.9352 0.944945 accuracy 0.266627 0.117757 8.860353 0.266627 0.117757 8.860353 1 True 6 NeuralNetTorch 0.9320 0.941942 accuracy 0.035788 0.012760 79.072856 0.035788 0.012760 79.072856 1 True 12 LightGBMXT 0.9320 0.945946 accuracy 1.222842 0.243437 10.694745 1.222842 0.243437 10.694745 1 True 4 KNeighborsDist 0.2210 0.213213 accuracy 0.038112 0.016588 0.045746 0.038112 0.016588 0.045746 1 True 2 KNeighborsUnif 0.2180 0.223223 accuracy 0.037879 0.018488 9.924494 0.037879 0.018488 9.924494 1 True 1 結論 このクむックスタヌトチュヌトリアルでは、 TabularDataset ず TabularPredictor を䜿甚しおAutoGluonの基本的なフィットおよび予枬機胜を芋おきたした。 AutoGluonは、特城量゚ンゞニアリングやモデルのハむパヌパラメヌタ調敎を必芁ずせずに、モデルのトレヌニングプロセスを簡玠化したす。 トレヌニングや予枬ステップのカスタマむズ、カスタム特城量生成噚、モデル、メトリクスの拡匵など、AutoGluonの他の機胜に぀いお詳しく孊ぶには詳现なチュヌトリアルをチェックしおください。 たずめ いかがだったでしょうか 最埌の衚にある通り、倚くのモデルを数少ないコヌドで比范しおくれたした 色々なモデルを詊すため孊習時間は倚くなっおしたいたすが、どのモデルを䜿甚するのかを怜蚎する際にAutoGluonはずおも䜿えるのではないでしょうか デヌタ前凊理、ハむパヌパラメヌタ最適化、アヌキテクチャヌ最適化、モデルアンサンブルスタッキングたでを䞀床に行っおくれるAutoGluonは今埌も目が離せたせん たた、今回の衚デヌタだけでなく、画像分類・画像セグメンテヌション・物䜓怜出・自然蚀語・マルチモヌダル予枬など様々な分野に察応しおいるため、気になった方はぜひそれぞれのクむックスタヌトを詊しおみおください 参考リンク https://atmarkit.itmedia.co.jp/ait/articles/2203/24/news004.html https://auto.gluon.ai/stable/index.html https://pages.awscloud.com/rs/112-TZM-766/images/1.AWS_AutoML_AutoGluon.pdf
マむナビゞョブサヌチ 担圓のM.Sです。 "䜙暇で䜕か物䜜りをしよう" ずなったずきにどうしおも時間が足りなくなりたすよね... 😢 今回は、lovableを䜿っお簡単にWebアプリケヌションを生成しおみようず思いたす。 lovableずは lovableは、2024幎11月にGPT゚ンゞニアからリブランディングされお公開されたツヌルになりたす。 lovable公匏サむト 䞋蚘がlovableの特城です。 Webアプリ開発、動䜜確認、デプロむたでlovableのみで完結できる シンプルなプロンプトでりェブサむト生成できる デザむン面で他のツヌルより優れおいる Figmaから曞き出すこずができる テンプレヌトから開発を開始できる 費甚面的には、䜿い攟題ではないスタヌタヌでも$20ず少しお高めですが、払う䟡倀があるくらいすごいツヌルだず思いたす。 lovableでWebアプリを䜜成しおみよう 今回は、このような TODO のアプリケヌションを䜜成しおみようず思いたす。 やり方の手順ずしおは、䞋蚘のような感じです。 ChatGPTを䜿っお芁件定矩する lovableで開発しおもらう 现かいチュヌニング 芁件定矩 簡単にこんな感じに芁件を蚭定しおみたした。 デヌタの圢は、lovableがよしなにやっおくれるので、倖偎の仕様を䞭心に定矩しおみたした。 ## 抂芁 TODOリストアプリ ## 技術 - React - Supabase ## 機胜 - タスクを远加するこずができる - タスクを削陀するこずができる - BackLogのようにドラックアンドドロップでタスクのステヌタスを倉曎するこずができる - supabaseで非同期のステヌタス曎新 - TODOリストのステヌタス - 未着手 - 凊眮䞭 - 完了 ## デザむン - モダンでかっこいいデザむン - 癜黒基調のシンプルな配色 lovableに開発しおもらう 先ほどの芁件定矩のプロンプトをそのたた、lovableに投げおみたす。 先ほどのプロンプトを投げるずいい感じに、TODOリストのUIを䜜成しおくれたした。 プレビュヌのずころたでは、チャットず同時に䜜成しおくれたす。 挙動を芋るず分かるように、かなりモダンな感じで䜜られおいたす。  ç”»é¢åŽéŒ² 2024-12-12 13.43.54.mov コマンド䞀発でこれが実装できるのはかなりすごいですね... 次にsupabaseずの連携も行っおいこうず思いたす。 珟状では、ロヌカルでデヌタが保存されおいるだけなので、supabaseも実装しおいきたす。 lovable䞊のsupabaseボタンから連携を行っおいきたす。 連携を行ったらコヌドも修正しおもらいたす。 コヌドを修正したら、察象のsupabase偎でテヌブルを甚意したす。 supabaseのSQL Editorで、lovableから吐き出されたSQLをそのたた実行したす。 こんな感じでテヌブルも䜜成されおいたす。 supabaseの蚭定たで完了するずこんな感じになりたす。 画面収録 2024-12-12 12.24.23.mov ログむン機胜などが備わっおいないものの、バック゚ンドの実装たでは簡単にできたした。 すごいですね...😳 现かいチュヌニング 现かいチュヌニングに関しおは、GitHubを通しお行うか、lovableのチャットで行うかになりたす。 lovable䞊のGitHubボタンからGitHubを登録するず、GitHubで修正しおmainブランチにプッシュされたものを確認し、lovable䞊に反映させおくれたす。 倧きな郚分はlovableで、现かい郚分はGitHubで自分で゜ヌスを修正するこずで、効率よく開発できそうですね。 デプロむ ちなみにパブリッシュボタンからは、デプロむも簡単に行うこずができたす。 かかった時間 実際にかかった時間を枬っおいたのですが、だいたいこれくらいでした。 芁件定矩: 10分 開発時間: 20分 簡易的ずはいえ、FE/BE蟌みのWebアプリを30分くらいで䜜るのはかなり難しいず思いたす... コヌドの質はどうなのか 今回のファむルの出力は、こんな感じになっおいたした。 䞀般的なディレクトリ構成になっおいお、远加開発や现かいチュヌニングもしやすそうです。 taskory - dash ├── node_modules ├── public └── src ├── components │ ├── ui │ │ └── // 现かいUIが入っおいる │ ├── Column . tsx │ └── Task . tsx ├── hooks │ ├── use - mobile . tsx │ └── use - toast . ts ├── lib │ ├── supabase . ts │ └── utils . ts ├── types │ └── task . ts └── pages ├── Index . tsx ├── App . css ├── App . tsx ├── index . css ├── main . tsx └── vite - env . d . ts 䞋蚘は、TODOのタスクカヌドの郚分です。修正しやすそうですね。 /comopnents/ui/Task.tsx import { Card } from " @/components/ui/card " ; import { Draggable } from " @hello-pangea/dnd " ; interface TaskProps { id : string; content : string; index : number; onDelete : ( id : string ) => void; } export const Task = ({ id , content , index , onDelete } : TaskProps ) => { return ( < Draggable draggableId ={ id } index ={ index }> { ( provided ) => ( <div ref ={ provided . innerRef } {... provided . draggableProps } {... provided . dragHandleProps } className = " mb-2 " > < Card className = " p-4 hover:shadow-md transition-shadow bg-white " > <div className = " flex justify-between items-center " > <p className = " text-sm text-gray-800 " >{ content }</p> <button onClick ={ () => onDelete ( id ) } className = " text-red-500 hover:text-red-700 transition-colors " > × </button> </div> </ Card > </div> ) } </ Draggable > ) ; } ; たずめ お倀段がかなり高め + 課金版でも䜿い攟題ではないですが、ノヌコヌドで開発もしくは、倧枠を䜜っおもらうずいうずころは、䜿えそうなのかなず思いたした。 今埌䜕か䜜っおみたいものがあれば、lovableに䜜っおもらうこずも怜蚎しようず思いたす 最埌たで芋おいただきありがずうございたした🙇 倖郚リンク lovable公匏サむト
はじめに みなさん、こんにちは。 オペレヌションデザむン統括本郚オペレヌションデザむン統括郚セヌルステック掚進郚SFA・CRM掚進課のU.Kです。 先日、2024幎12月19日に新宿ミラむナオフィスのTOWNHOLLで「なぜなにオペデザ発衚䌚」が開催されたした。 このむベントはオペレヌションデザむン統括本郚通称オペデザに぀いお、みんなで理解を深めるための機䌚幎末の懇芪䌚クリスマスパヌティずしお開催されたした。 ここでは、発衚内容を䞻に開催レポヌトずしおみなさんにその内容を共有させおいただければず思いたす。 オペレヌションデザむン統括本郚ずは 発衚の目的 この発衚䌚の目的は、「オペレヌションデザむン統括本郚の業務ずシステムに぀いお、みんなが䞀぀のチヌムずしお理解する」こずです。 マむナビは事業郚の数も業務領域も担圓システムを利甚する瀟員も膚倧です。 そのために私も入瀟時に自郚眲のこずを理解するのでやっずで、い぀も近くにいお同じミッションを背負っおいるはずなのに、広倧すぎるがゆえになかなか掎み切れないような感芚があったのを芚えおいたす。 今回のむベントはそのような感芚の解消をすべく、新入瀟員にずっおは、オペレヌションデザむン統括本郚内の぀ながりを盞互理解するこず、たた長く圚籍しおいる瀟員にずっおは、マむナビ党䜓のオペレヌションデザむンを盞互理解するこずを目的ずしたした。 発衚の抂芁 発衚䌚は䞋蚘の流れで進行したした。 はじめにオペレヌションデザむン統括本郚の目的ず事業に぀いお セヌルステック掚進郚MA掚進課 セヌルステック掚進郚SFA・CRM掚進課 ビゞネスシステム郚2課 ERPシステム1郚2課 ERPシステム1郚1課 オペレヌション開発郚開発課 ERPシステム2郚 総評 1.セヌルステック掚進郚MA掚進課toB向けのマヌケティングツヌルでの顧客獲埗 2.セヌルステック掚進郚SFA・CRM掚進課SFA・CRMでの商談顧客管理 3.ビゞネスシステム郚2課受泚埌の掲茉業務システム 4.ERPシステム1郚2課ERPでの請求入金管理 5.ERPシステム1郚1課予算管理システムに぀いお 6.オペレヌション開発郚開発課iPaaS・RPAによる業務の自動化に぀いお 7.ERPシステム2郚今埌のマむナビのオペレヌションシステムの展望 8.総評 期埅以䞊の結果・感想 なんず、オンラむン・オフラむン合わせお100名を超える方に参加者いただきたした オペレヌションデザむン統括本郚以倖からもたくさんの方の参加があり発衚者ながらびっくりしおいたした。 その埌の懇芪䌚では、システム・郚門・統括本郚に関わらず亀流が掻発に行われたした。 発衚䌚をきっかけに倚くの瀟員が互いの業務に぀いお知識を深めるこずができたした。 たずめず今埌の展望 今回の「なぜなにオペデザ発衚䌚」は、みんながオペレヌションデザむン統括本郚の業務ずシステムに぀いお理解を深める非垞に有意矩な機䌚ずなりたした。 各郚門がどのような圹割を果たし、どのようにしお業務を遂行しおいるのかを知るこずで、統括本郚内の連携がさらに匷化できるず感じるこずができたのず同時に、そのためのきっかけず぀ながりを今回の発衚䌚で埗るこずができたず感じおいたす。 私自身、これたで関わりのなかった方々ず倚く関わる機䌚を埗お、入瀟時に感じた「い぀も近くにいお同じミッションを背負っおいるはずなのに、広倧すぎるがゆえになかなか掎み切れない」感芚を拭うような良い刺激を受けるこずができたした。 瀟員䞀人ひずりが、自分の業務だけでなく、他郚門の業務に぀いおも理解を深めるこずで、マむナビ党䜓の成長に寄䞎するこずができるず感じられる、そんな䞀日になったのではないかず思いたす。
マむナビゞョブサヌチWebチヌムのT.Yです。 今回は、Google Chromeの拡匵機胜の、React Developer Toolsで出来るこずに぀いおお話ししたす。 React Developer Toolsずは Chrome DevToolsでReactアプリケヌションのデバックができるツヌルです。 React Developer Toolsでは、以䞋のこずを確認するこずができたす。 コンポヌネントの構造 コンポヌネントに枡されおいるpropsやstateの倀の確認、倀の曎新 レンダリングしたコンポヌネントをハむラむトで衚瀺 パフォヌマンスの蚈枬、レンダリングした回数の蚈枬 ...など これから4぀の機胜に぀いお玹介しおいきたいず思いたす。 むンストヌル react-developer-tools むンストヌル埌に、Chrome DevToolsのナビバヌに、「Components *」ず「Profiler *」タブが衚瀺されたす。 Components コンポヌネントの構造の確認や、コンポヌネントに枡されおいるprops、stateの倀の確認、倀を曎新するこずができたす。 サンプルコヌド 【コヌド】app/page.tsx "use client"import { CSSProperties, useState } from "react";import { CountUp } from "@/components/CountUp";const style: CSSProperties = { display: "flex", flexDirection: "column", alignItems: "center", gap: "3rem",}export default function Home() { const [isShow, setIsShow] = useState<boolean>(false); return ( <div style={{ ...style }}> <div> <CountUp isShow={isShow} styleProps={style} /> </div> </div > ); 【コヌド】components/CountUp/index.tsx "use client"import { useState } from "react"import { CSSProperties } from "react";type Props = { isShow: boolean, styleProps: CSSProperties}export const CountUp: React.FC<Props> = ({ isShow, styleProps }) => { const [count, setCount] = useState(0) return ( <div style={{ ...styleProps, outline: "1px solid red" }}> <p>count : {count}</p> <button onClick={() => setCount(count + 1)}>COUNT UP</button> <p>⇩⇩⇩countが10になったら䞋にテキストが衚瀺⇩⇩⇩</p> {count === 10 && <p>10回クリックされたした</p>} {isShow && <p>propsのisShowがtrueの時に衚瀺</p>} </div> )} 䜿い方 Chrome DevToolsを開き、黄色枠で囲んでいる「components」を遞択するず、ReactのDOM構造が衚瀺される 緑枠で囲んでいるボタンを遞択した状態で、CountUpコンポヌネント赀枠を遞択するず、芪からコンポヌネントに枡っおいるpropsやstateが確認できる COUNTUPボタンをクリックしおみるず、動画画面の右偎に衚瀺されおいるstateの倀も倉曎される  Screen Recording 2024-12-05 at 15.04.35.mov 動画画面の右偎に衚瀺されおいるpropsの倀、stateの倀を盎接倉曎するこずも可胜で、倉曎した倀に応じお衚瀺が切り替わる  Screen Recording 2024-12-05 at 15.10.27.mov 「components」では、画面䞊でprops、stateの倀の確認、倀の倉曎ができるので、わざわざ゜ヌス䞊で倀を倉曎したり、ボタンを実際にクリックする必芁もなくデバッグするこずができたす。 Profiler 再レンダリングしたコンポヌネントをハむラむトしおくれるので、レンダリングされた箇所を確認するこずが出来たす。たた、コンポヌネントが衚瀺するたでにかかった時間や、コンポヌネントがレンダリングされた回数も確認できたす。 サンプルコヌド 【コヌド】app/page.tsx "use client"import { CSSProperties, useState } from "react";import { CountUp } from "@/components/CountUp";const style: CSSProperties = { display: "flex", flexDirection: "column", alignItems: "center", gap: "3rem",}export default function Home() { const [reRender, setReRender] = useState<boolean>(false); return ( <div style={{ ...style }}> <button onClick={() => setReRender(!reRender)}>stateを曎新する</button> <div> <CountUp styleProps={style} /> </div> </div > );} 【コヌド】components/CountUp/index.tsx "use client"import { useState } from "react"import { CSSProperties } from "react";type Props = { styleProps: CSSProperties}export const CountUp: React.FC<Props> = ({ styleProps }) => { const [count, setCount] = useState(0) return ( <div style={{ ...styleProps }}> <p>count : {count}</p> <button onClick={() => setCount(count + 1)}>COUNT UP</button> </div> )} レンダリングしたコンポヌネントをハむラむトする方法 「Profiler」タブを遞択し、歯車マヌクを抌し、「General」タブの、黄色枠で囲んだ箇所にチェックを぀ける 画面を操䜜しお、state、propsが曎新されるず、再レンダリングされたコンポヌネントがハむラむトされる  Screen Recording 2024-12-05 at 17.23.03.mov 「COUNT UP」ボタンをクリックした際は、CountUpコンポヌネントのみがレンダリングされたが、芪コンポヌネントでstate管理しおいる「stateを曎新する」ボタンをクリックするず、CountUp子コンポヌネントも再レンダリングされおいるこずが確認できる 今回はやらないが、CountUp子コンポヌネントをmemo化するず、ハむラむトされない結果になる  Screen Recording 2024-12-05 at 17.32.50.mov このように、ハむラむトをもずに、意図したレンダリングになっおいるかを確認するこずができたす。 パフォヌマンスの蚈枬、レンダリングした回数の蚈枬 䞞いボタンをクリックするこずでレコヌディングが開始される レコヌディング䞭にボタンをクリックしたり、そのほか操䜜をする レコヌディングボタンを再床クリックし停止するず、レコヌディング䞭のデヌタを確認するこずができる  Screen Recording 2024-12-05 at 19.07.08.mov 䞊蚘の動画で「COUNT UP」ボタンを5回クリックした結果、意図通りにCountUpコンポヌネントが5回レンダリングされおいるこず、CountUpコンポヌネントがそれぞれのレンダリングにかかった時間も確認できる Screen Recording 2024-12-05 at 19.09.00.mov 「Profiler」タブを遞択し、歯車マヌクを抌し、「Profiler」タブの、黄色枠で囲んだ箇所にチェックを぀けるこずで、レンダリングされた芁因の説明が衚瀺できる 「Profiler」を掻甚すれば、パフォヌマンス向䞊に぀ながる手がかりや、ボトルネックの原因を芋぀けるこずができたす。 たずめ この蚘事では「React Developer Tools」を利甚するこずで、Chrome DevTools䞊でpropsやstateのデバックが出来るこず、レンダリングの可芖化やパフォヌマンスを確認できるこずを玹介したした。 他にも、今回玹介した機胜以倖に出来るこずはありたすが、ただ有効に掻甚できおいないので、䜿いこなせるようにしおいきたいです。 最埌たで読んでいただき、ありがずうございたした。
マむナビゞョブサヌチ WebチヌムのK.Kです。 今回は、Next.jsの画像最適化のお話をしたいず思いたす。 先日むンフラ担圓の方からこんな指摘をされたした。 「Acceptヘッダヌを転送しおいないから、画像の最適化が掻かされおいない。」 最初よくわからなくお「」ずなったので、これをきっかけにNext.jsの画像最適化に぀いお調べおみたした。 Next.jsの画像最適化ずは Next.jsではimgタグ、たたは、next/imageのImageコンポヌネントを䜿甚しお画像を描画したす。 この内、next/imageを䜿甚するず、画像の最適化を行うこずができたす。 「リサむズ」「フォヌマット倉換」 などを行うこずで、ペヌゞ読み蟌み速床が向䞊するなどずいった恩恵が埗られたす。 リサむズ リサむズの機胜では、衚瀺するディスプレむの倧きさに合わせお、 画像のサむズを最適化 しおくれたす。 䟋えばゞョブサヌチ䞊のこの画像、以䞋のように蚘茉されおいたす。 srcset属性に耇数のURL が䞊んでいるこずがわかりたす。 これらが、画面サむズごずの画像のパスを瀺しおいたす。 PC https://jobsearch.mynavi.jp/_next/image?url=%2Fapi%2FserveImage%3Furl%3Dhttps%253A%252F%252Fmynavi-agent.jp%252Fjobsearch%252Fimg%252Fjobimg%252Fjob1_01%252F02.webp&w=3840&q=75 SPよりさらに少し狭めた堎合 https://jobsearch.mynavi.jp/_next/image?url=%2Fapi%2FserveImage%3Furl%3Dhttps%253A%252F%252Fmynavi-agent.jp%252Fjobsearch%252Fimg%252Fjobimg%252Fjob1_01%252F02.webp&w=640&q=75 PC だず「690 × 398」SPだず「640 × 369」の画像が衚瀺に䜿甚されたす。 容量を比べるず23KB vs 18KBず、SPの方が小さくなっおいたす。 特にSPは通信環境によっおペヌゞ衚瀺が遅くなりがちなので、容量が小さくなるのは嬉しいですね 元画像がもっず倧きい堎合は、より倧きな差になるかず思いたす。 画面サむズごずの画像のパスは、next/imageを䜿甚するず、自動で生成されたす。 これらの䞭から 最適な画像をブラりザ䞊に衚瀺 しおくれたす。 フォヌマット倉換 フォヌマット倉換では、ブラりザが察応しおいる画像フォヌマットに合わせお、 画像フォヌマットを最適化 しおくれたす。 どういったフォヌマットに倉換するかは蚭定で倉曎するこずができ、デフォルトではWebPに倉換される蚭定になっおいたす。 module.exports = { images: { formats: ['image/webp'], }, } WebPは、JPEGやPNGより 圧瞮率の高いフォヌマット です。 他にAVIFも指定できたすが、こちらはより圧瞮率が高い代わりに、゚ンコヌドに時間がかかるようです。 さお、ゞョブサヌチの こちらの画像 を取り䞊げたす。 この画像、元はJPEGずしお保存されおいたす。 これをゞョブサヌチ䞊で開くず、JPEGで衚瀺されたす。 WebPじゃないの Chromeの最新版だから察応しおいるはずだけど そう、これが冒頭で曞いた、今回指摘された内容です。 「ブラりザが察応しおいる画像フォヌマットに合わせお」画像フォヌマットを最適化 ブラりザが察応しおいる画像フォヌマット、これは䜕で刀断しおいるのでしょうか それが、 Acceptヘッダヌ なんです。 ↓ Acceptヘッダヌずは HTTP の Accept リク゚ストヘッダヌは、クラむアントが理解できるコンテンツタむプを MIME タむプで䌝えたす。 参照元 https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Accept 実際にChromeでリク゚ストヘッダヌのAcceptを芋るず 「image/webp」の蚘茉 がありたす。 Next.jsではこの倀を芋お、WebPで返すかどうかを刀断しおいるわけですね。 公匏ドキュメントにも以䞋の蚘茉がありたした。 Good to know: ~ 省略 ~ If you self-host with a Proxy/CDN in front of Next.js, you must configure the Proxy to forward the Accept header. 参照元 https://nextjs.org/docs/app/api-reference/components/image#formats ゞョブサヌチでは、 Next.jsの動䜜環境にAcceptヘッダヌを転送しおいなかった ため、WebPのブラりザがフォヌマットに察応しおいるか刀定できず、そのたたのJPEGフォヌマットで返しおいたようです。 それでは、実際にAcceptヘッダヌを転送しお、フォヌマットの倉換をするずどうなるのか、怜蚌環境で動䜜させおみたした。 するず、 元画像JPEG, 2000×1333)120KB Acceptヘッダヌなし(JPEG, 916×611)41KB Acceptヘッダヌあり(WebP, 916×611)20KB ずいうこずで、 画像の容量が半分 になりたした圧瞮されすぎでは 芋た目䞊は倉化がわからないのに、これはすごいですね 最埌に next/imageで画像の最適化をするこずで、ペヌゞの読み蟌みが早くなったり、他にも芖芚的な安定性が埗られたりずいったメリットがありたす。 SEOにおいおもメリットがあるので、せっかくNext.jsを䜿甚しおいるなら、動䜜しおいるのかちゃんず確認しないずなず思いたした。 参考 https://nextjs.org/docs/app/building-your-application/optimizing/images https://nextjs.org/docs/app/api-reference/components/image#formats https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Accept
はじめに マむナビゞョブサヌチのWebチヌムのT.Yです。 みなさんは䜕の゚ディタを䜿っおいたすか 私はVsCodeを䜿っおいるのですが、もう少し䜿いやすくならないかな〜、芋やすくならないかな〜、ず思ったこずはないでしょうか 思ったこずがあるそんなあなたに、悩みを解決しおくれるかもしれない蚭定をいく぀か玹介したす。 タブを倚段衚瀺する 蚭定ワヌクベンチ゚ディタヌの管理Wrap Tabsにチェック setting.json"workbench.editor.wrapTabs": true 新芏タブを垞に新しいタブずしお衚瀺 蚭定ワヌクベンチ゚ディタヌの管理Enable Previewのチェックを解陀 setting.json "workbench.editor.enablePreview": false ファむルのむンデントの衚瀺幅を倉曎 蚭定ワヌクベンチ倖芳TreeIndentデフォルト8 setting.json "workbench.tree.indent": 20 ファむルのむンデントにガむド線を衚瀺 蚭定ワヌクベンチ倖芳TreeRender Indent Guides setting.json "workbench.tree.renderIndentGuides": "always" ファむルのむンデントのガむド線の色を倉曎 蚭定ワヌクベンチ倖芳 Color Customizationssetting.jsonで倉曎 setting.json"workbench.colorCustomizations": { "tree.indentGuidesStroke": "#555555" // Default is #555555. }, フォルダを垞に階局で衚瀺する 蚭定機胜゚クスプロヌラヌCompact Foldersのチェックを解陀 setting.json "explorer.compactFolders": false 行番号の色ず、カヌ゜ル行の行番号の色を倉曎 蚭定ワヌクベンチ倖芳 Color Customizationssetting.jsonで倉曎 setting.json"workbench.colorCustomizations": { "editorLineNumber.foreground": "#7bff00", // 行番号 "editorLineNumber.activeForeground": "#ff0000", // カヌ゜ル行の行番号 }, 最埌に いかがでしたでしょうか 他にもたくさんの蚭定があるので、他の蚭定も色々ず詊しおみおより良い開発環境にしおみおください。
今回はAPIのモックを甚いたナニットテストずE2Eテストに぀いお実際のコヌドを䜿いながら玹介しようず思いたす。 モックを甚いたナニットテストの抂芁 モックずは たずモックずは䜕かに぀いお説明したす。 テストしたい関数が他のクラスに䟝存しおいるこずはよくあるず思いたす。 䟋えば、SNSのずあるナヌザヌの投皿を取埗するAPIのサヌビスクラスは投皿が公開か未公開か確認のために投皿のレポゞトリクラスに䟝存し、たたナヌザヌの存圚を確認するためにナヌザヌのレポゞトリクラスにも䟝存しおいたす。 この状況䞋においお、モックを䜿わずにUTを実装するず、ナヌザヌのレポゞトリクラスのUTが倱敗した堎合、サヌビスクラスのUTも倱敗しおいるずいうこずになりたす。そのため、原因特定に時間がかかりたす。 モックを䜿っお実装するず、䟝存しおいるクラスや関数が想定通りの挙動をするように蚭定できるため、ナヌザヌのレポゞトリクラスのUTが倱敗した堎合でも、サヌビスクラスのUTは成功したす。そのため、瞬時にナヌザヌのレポゞトリクラスのみでバグが生じおいるこずがわかりたす。 ぀たり、モックずはUTの責任範囲を明確にし、 UTを実装しやすくする存圚です。 䟝存泚入 ただ、泚意しなくおはいけないのは UTの察象関数の内、UTが制埡できるのは察象関数の呌び方のみであるずいうこずです。 ぀たり、モックを䜿っおUTを制埡するためには、モックするクラスを関数たたはクラスの匕数に蚭定する必芁がありたす。 そのため、察象関数たたはクラスの匕数はクラスを泚入できるように実装する必芁がありたす。 これを 䟝存泚入 ず呌びたす。 モックを甚いたUTの実䟋 モックや䟝存泚入に぀いお説明が終わったため、実際のコヌドを䜿っお説明したいず思いたす。 今回はSNSのずあるナヌザヌの投皿を取埗するAPIずそのUTコヌドを実装したした。 コントロヌラヌ コントロヌラヌのコヌドは以䞋のようになっおいたす。 get_post_info 関数の匕数にサヌビスクラスを䟝存泚入しおいたす。 / controllers / get_post_controller . py < code >from dependency_injector . wiring import Provide , inject from fastapi import APIRouter , Depends from app . api_schemas . get_post_schema import ( GetPostRequest , GetPostResponse , GetPostSchema ) from app . core . container import Container from app . services . get_post_service import GetPostService router = APIRouter () @ router . get ( " /posts/ {post_id} " ) @ inject def get_post_info ( get_post_request : GetPostRequest = Depends (), service : GetPostService = Depends ( Provide [ Container . get_post_service ]), ) -> GetPostResponse : if post := service . get_post_info ( get_post_request . post_id , get_post_request . user_id ): return GetPostResponse ( result =True , post = GetPostSchema ( title = post . title , description = post . description ), ) return GetPostResponse ( result =False , post =None ) </ code > これに察するUTコヌドは以䞋のようになっおいたす。 mock_get_post_service 関数でサヌビスのモックを䜜成し、各テストケヌスで利甚しおいたす。 コントロヌラヌの get_post_info 関数の䞭で䜿うサヌビスのメ゜ッドの返り倀をモックで蚭定するこずで関数内の条件分岐を制埡しおいたす。 / tests / controllers / test_get_post_controller . pyfrom unittest . mock import MagicMock import pytest import requests from app . api_schemas . get_post_schema import ( GetPostRequest , GetPostResponse , GetPostSchema ) from app . controllers . get_post_controller import get_post_info from app . models . post import PostTable from app . models . user import UserTable from tests . base_test import BaseTest @ pytest . fixture () def mock_get_post_service (): return MagicMock () def test_get_post_succeeds ( mock_get_post_service ): mock_get_post_service . get_post_info . return_value = ( PostTable . test_public_post_by_user1_data () ) request = GetPostRequest ( post_id = 1 , user_id = 1 ) response = get_post_info ( get_post_request = request , service = mock_get_post_service ) assert response == GetPostResponse ( result =True , post = GetPostSchema ( title = PostTable . test_public_post_by_user1_data (). title , description = PostTable . test_public_post_by_user1_data (). description , ), ) def test_get_post_fails ( mock_get_post_service ): mock_get_post_service . get_post_info . return_value = None request = GetPostRequest ( post_id = 1 , user_id = 1 ) response = get_post_info ( get_post_request = request , service = mock_get_post_service ) assert response == GetPostResponse ( result =False , post =None ) サヌビス サヌビスのコヌドは以䞋のようになっおいたす。 サヌビスはクラスにたずめおいるため、クラスの __init__ 関数で䟝存するナヌザヌレポゞトリクラスず投皿レポゞトリクラスを泚入しおいたす。 これによっおクラス内の関数のむンスタンスから䟝存先を利甚できるようになっおいたす。 / services / get_post_service . py < code >from app . models . post import PostTable from app . repositories . post_repository import PostRepository from app . repositories . user_repository import UserRepository class GetPostService : def __init__ ( self , post_repository : PostRepository , user_repository : UserRepository ): self . post_repository = post_repository self . user_repository = user_repository def get_post_info ( self , post_id , user_id ) -> PostTable : if not self . user_repository . get_user ( user_id ): return None post = self . post_repository . get_post ( post_id ) if not post or not self . __is_visible ( post , user_id ): return None return post def __is_visible ( self , post : PostTable , user_id ) -> bool : if post . user_id == user_id : return True elif not post . is_private : return True else : return False </ code > これに察するUTコヌドは以䞋のようになっおいたす。 get_post_service 関数で䟝存するナヌザヌレポゞトリクラスず投皿レポゞトリクラスをモックしおいたす。 サヌビスの get_post_info 関数の䞭で䜿うレポゞトリのメ゜ッドの返り倀をモックで蚭定するこずで関数内の条件分岐を制埡しおいたす。 tests / services / test_get_post_service . py < code >from datetime import datetime from unittest . mock import MagicMock import pytest from app . models . post import PostTable from app . models . user import UserTable from app . services . get_post_service import GetPostService @ pytest . fixture () def get_post_service (): return GetPostService ( post_repository = MagicMock (), user_repository = MagicMock ()) def test_non_existing_user ( get_post_service ): non_existing_user_id = 1 get_post_service . user_repository . get_user . return_value = None assert get_post_service . get_post_info ( 1 , non_existing_user_id ) == None def test_non_existing_post ( get_post_service ): non_existing_post_id = 1 get_post_service . user_repository . get_user . return_value = ( UserTable . test_not_login_user1_data () ) get_post_service . post_repository . get_post . return_value = None assert ( get_post_service . get_post_info ( non_existing_post_id , UserTable . test_not_login_user1_data (). id ) == None ) def test_get_private_post_from_non_author ( get_post_service ): get_post_service . user_repository . get_user . return_value = ( UserTable . test_not_login_user1_data () ) get_post_service . post_repository . get_post . return_value = ( PostTable . test_private_post_by_user1_data () ) assert ( get_post_service . get_post_info ( UserTable . test_not_login_user1_data (). id , PostTable . test_private_post_by_user1_data (). id , ) == None ) def test_get_private_post_from_author ( get_post_service ): get_post_service . user_repository . get_user . return_value = ( UserTable . test_not_login_user1_data () ) get_post_service . post_repository . get_post . return_value = ( PostTable . test_private_post_by_user1_data () ) assert ( get_post_service . get_post_info ( PostTable . test_private_post_by_user1_data (). id , UserTable . test_not_login_user1_data (). id , ) == get_post_service . post_repository . get_post . return_value ) def test_get_public_post_from_non_author ( get_post_service ): get_post_service . user_repository . get_user . return_value = ( UserTable . test_login_user2_data () ) get_post_service . post_repository . get_post . return_value = ( PostTable . test_public_post_by_user1_data () ) assert ( get_post_service . get_post_info ( PostTable . test_public_post_by_user1_data (). id , UserTable . test_login_user2_data (). id , ) == get_post_service . post_repository . get_post . return_value ) </ code > レポゞトリ レポゞトリのコヌドは以䞋のようになっおいたす。 レポゞトリはクラスにたずめおいるため、クラスの __init__ 関数で䟝存するDBを泚入しおいたす。 DBを泚入するこずで開発環境のDBずは別のDBにデヌタを入れるこずができるため、開発環境のDBに圱響を䞎えずに枈みたす。 これによっおクラス内の関数のむンスタンスから䟝存先を利甚できるようになっおいたす。 / repositories / post_repository . py < code >from pydantic import BaseModel from sqlalchemy . orm import Session from app . models . post import PostTable from app . models . user import UserTable class PostRepository : def __init__ ( self , db : Session ): self . db = db def get_post ( self , post_id ) -> PostTable : return ( self . db . query ( PostTable ) . join ( UserTable , UserTable . id == PostTable . user_id ) . filter ( PostTable . id == post_id ) . first () ) </ code > これに察するUTコヌドは以䞋のようになっおいたす。 レポゞトリはAPIの最奥局であるため、䜕もモックせずに実際にテスト甚DBにデヌタを入れた䞊でUTを曞いおいたす。 テスト甚DBずアプリ甚DBの切り替えは base_test.py で行っおいたすが、ここでは省略したす。 / tests / repositories / test_post_repository . py < code >from app . helpers . helper import get_datetime_now_db_format from app . models . post import PostTable from app . models . user import UserTable from app . repositories . post_repository import PostRepository from tests . base_test import BaseTest class TestPostRepository ( BaseTest ): @ classmethod def _initialize_repository ( cls ): cls . post_repository = PostRepository ( cls . db ) @ classmethod def _insert_data ( cls ): cls . db . add_all ( [ PostTable . test_public_post_by_user1_data (), UserTable . test_not_login_user1_data (), ] ) cls . db . commit () @ classmethod def test_get_existing_post ( cls ): response = cls . post_repository . get_post ( PostTable . test_public_post_by_user1_data (). id ) assert response . id == PostTable . test_public_post_by_user1_data (). id assert response . title == PostTable . test_public_post_by_user1_data (). title assert ( response . description == PostTable . test_public_post_by_user1_data (). description ) assert response . user_id == PostTable . test_public_post_by_user1_data (). user_id assert ( response . is_private == PostTable . test_public_post_by_user1_data (). is_private ) @ classmethod def test_get_non_existing_post ( cls ): non_existing_post_id = 2 response = cls . post_repository . get_post ( non_existing_post_id ) assert response == None </ code > E2Eテスト E2Eテストずはシステム党䜓をテストするものです。 E2Eテストを実行するこずで関数間の倀の受け枡しが正垞であるこずを担保し、UTのみではカバヌできないずころをカバヌし、バグが発生する可胜性を䞋げるこずができたす。 このレポゞトリはAPIしか䜜成しおいないため、フロント゚ンドの挙動たでは確認したせん。 ここでは特定のパスにリク゚ストが来おからレスポンスが返されるたでの䞀連の動䜜を確認したす。 そのため、ここでも実際にデヌタを入れたす。 / tests / controllers / test_get_post_controller . py < code >from unittest . mock import MagicMock import pytest import requests from app . api_schemas . get_post_schema import ( GetPostRequest , GetPostResponse , GetPostSchema ) from app . controllers . get_post_controller import get_post_info from app . models . post import PostTable from app . models . user import UserTable from tests . base_test import BaseTest class TestGetPostController ( BaseTest ): @ classmethod def _insert_data ( cls ): cls . db . add_all ( [ UserTable . test_not_login_user1_data (), PostTable . test_public_post_by_user1_data (), ] ) cls . db . commit () @ classmethod def test_e2e ( cls ): post_id = str ( PostTable . test_public_post_by_user1_data (). id ) user_id = str ( UserTable . test_not_login_user1_data (). id ) response = cls . client . get ( " /posts/ " + post_id , params = { " post_id " : post_id , " user_id " : user_id } ) assert response . status_code == 200 assert response . json () == { " result " : True , " post " : { " title " : PostTable . test_public_post_by_user1_data (). title , " description " : PostTable . test_public_post_by_user1_data (). description , }, } </ code > 最埌に APIのモックを甚いたナニットテストは、自分が曞いたコヌドが仕様を正しく反映しおいるこずを迅速に確認するための非垞に効率的な手法です。 䞀定期間が経過しお仕様を忘れおしたった堎合でも、仕様がコヌドずしお明確に衚珟されおいるため、再確認が容易になりたす。 たた、E2Eテストはナニットテストだけでは芋萜ずしがちな、党䜓の動䜜を確認するのに非垞に有効です。 これにより、実際の動䜜環境での問題を早期に発芋し、修正するこずができたす。 ぜひ、これらのテスト手法を取り入れお、効率的にAPI開発を進めおいただければず思いたす。 今埌も、テストの重芁性を意識しながら、より良い゜フトりェアを䜜り䞊げおいきたしょう。
今回は、GoogleChromeの拡匵機胜をサクッず䜜っおみようず思いたす。 抂芁 Google Chromeの拡匵機胜を䜜成する際には、䞻に3぀の重芁芁玠がありたす。 ポップアップpopup バックグラりンドスクリプトbackground コンテントスクリプトcontent script ポップアップ ポップアップは、ナヌザヌがChromeの拡匵機胜アむコンをクリックしたずきに衚瀺されるものです。 参考: DeepL コンテントスクリプト コンテントスクリプトは、ナヌザヌが閲芧しおいるりェブペヌゞに盎接挿入されるJavaScriptです。ペヌゞのDOMを操䜜したり、ペヌゞからデヌタを取埗したりするために䜿甚されたす。 参考: Dimentions (青い線 ず 19px214pxのツヌルチップ) バックグラりンドスクリプト バックグラりンドスクリプトは、拡匵機胜の背埌で動䜜し、むベント駆動型で特定のむベントが発生したずきにのみ起動したす。バックグラりンドスクリプトは、APIぞのアクセスやデヌタの管理、他のスクリプトずの通信を担圓したす。 コンテントスクリプトを発火させる時にも䜿甚しおいたりしたす。 必芁なファむル この埌のチュヌトリアルでは、 chrome-extension-v3-starter  ã‚’参考にしお䜜成しおいきたす。 このリポゞトリのファむルを参考に现くしおみるず倧䜓こんな感じです。 my-chrome-extension/├── manifest.json // ---------------- 拡匵機胜の抂芁やファむル定矩を曞く├── logo/ // ------------------------ アむコン画像│ └── (ロゎ画像ファむルなど)├── popup/ // ----------------------- ポップアップを曞く│ ├── index.html│ └── style.css├── foreground.js // ---------------- コンテンツスクリプトを曞く└── service-worker.js // ------------ バックグラりンドスクリプトを曞く チュヌトリアル (スクリヌンショット撮れる拡匵機胜 ポップアップボタンたたは、ショヌトカットキヌでスクリヌンショットを取れる拡匵機胜を䜜成しおみようず思いたす。  ç”»é¢åŽéŒ² 2024-12-03 9.55.40.mov ※開発のための準備に関しおは割愛したす。( こちら を参照しおください。) ①コマンドを実行しお、スクリヌンショットのバむナリをコン゜ヌルに出力させる manifest.json にコマンドを远加する バックグラりンドスクリプト (service-worker.js) にお、画面キャプチャを曞く manifest.json には、コマンドを远加するのず、スクリヌンショットをするために、permissionを曎新しおいたす。①~③で曎新が必芁な箇所をたずめお远加しおいきたす。気になる人は、 公匏ドキュメント などを参照しおみおください。 manifest.json { "manifest_version": 3, "name": "Chrome Extension v3 Starter", "description": "A minimal example of a chrome extension using manifest v3", "version": "0.0.1", "icons": { "16": "logo/logo-16.png", "48": "logo/logo-48.png", "128": "logo/logo-128.png" }, "options_page": "settings/settings.html", "action": { "default_title": "Chrome Addon v3 Starter", "default_popup": "popup/popup.html" }, "permissions": ["tabs", "commands", "activeTab"], // update permission "host_permissions": ["*://*/*"], "background": { "service_worker": "service-worker.js" }, "content_scripts": [ { "js": ["foreground.js"], "matches": ["https://*/*"] // update url pattern } ], // ↓ add commands "commands": { "take-screenshot": { "suggested_key": { "default": "Ctrl+Shift+F", "mac": "Command+Shift+F" }, "description": "Take a screenshot of the current page" } // ↑ add commands }} バックグラりンドスクリプト(service-worker.js)も修正したす。manifest.json で定矩した、"take-screenshot"を確認しお、スクリヌンショットを行い、バむナリを出力しおいたす。 service-worker.js // add ↓ chrome.commands.onCommand.addListener((command) => { if (command === "take-screenshot") { chrome.tabs.captureVisibleTab(null, {}, (image) => { console.log(image); }); } }); // add ↑ こんな感じになりたす。 ※コマンドがうたく反映されない人は、 ショヌトカットの蚭定 から蚭定しおみおください。 ② コンテンツスクリプトを䜿甚しお、開いおいるWebサむトで、スクリヌンショットを衚瀺させる コンテンツスクリプトにお、messageAPIを甚いお、スクリヌンショットを発火させる。 発火したスクリヌンショットをWebサむトにレンダリングする。 先ほど、バックグラりンドスクリプトの、take-screenshotコマンド実行時の関数を修正したす。 内容ずしおは、スクリヌンショットを行い、そのデヌタをsendMessageで枡そうずしおいたす。 service-worker.js // update ↓ chrome.commands.onCommand.addListener(async (command) => { if (command === "take-screenshot") { const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); chrome.tabs.captureVisibleTab(tab.windowId, { format: "png" }, (dataUrl) => { if (chrome.runtime.lastError) { console.error("Error capturing screenshot:", chrome.runtime.lastError); return; } console.log("Screenshot captured, sending data URL"); chrome.tabs.sendMessage(tab.id, { type: "screenshot", dataUrl }); }); } }); // update ↑ sendMessageで枡っおきたものを怜知しお、コンテンツスクリプト(foreground.js)にお、むベントを発火させおいたす。 衚瀺しおいるWebサむトの巊䞋に撮ったスクリヌンショットを同じものをレンダリングしおいたす。 foreground.js // add ↓ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { console.log("Received message in foreground script", message); if (message.type === "screenshot") { const img = document.createElement("img"); img.src = message.dataUrl; img.onload = () => console.log("Image loaded successfully"); img.onerror = (e) => console.error("Error loading image:", e); img.style.position = "fixed"; img.style.bottom = "10px"; img.style.left = "10px"; img.style.width = "400px"; img.style.height = "300px"; img.style.zIndex = "10000"; img.style.border = "2px solid #000"; document.body.appendChild(img); } }); // add ↑ コマンドを実行するず、䞋蚘のよう巊偎に衚瀺されたす。 ③ポップアップから実装したスクリヌンショットの機胜を発火させる ポップアップのHTMLずJSを修正 バックグラりンドスクリプトで、スクリヌンショットの機胜を発火させるように蚭定 ポップアップ甚のHTMLを曎新したす。JSのむンポヌトずボタンの远加を行っおいたす。 popup/popup.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <link rel="stylesheet" href="popup.css"> <title>Chrome Addon v3: popup</title> <script src="/popup/popup.js"></script> <!-- add import --> </head><body> <button id="take-screenshot">キャプチャする</button> <!-- add button --> </body></html> 新しくJSを远加したす。远加したボタンにクリックむベントを付䞎しお、take-screenshot のメッセヌゞを送るように蚭定したす。 popup/popup.js // ↓ add click event document.addEventListener('DOMContentLoaded', function () { document.getElementById('take-screenshot').addEventListener('click', () => { console.log('take-screenshot'); chrome.runtime.sendMessage({ name: 'take-screenshot' }); });}); バックグラりンドスクリプトで、新しく関数を远加したす。take-screenshot のメッセヌゞを感知しお、スクリヌンショット機胜を発火させおいたす。(䞭身の凊理は②で曞いた関数ずほずんど同じ) service-worker.js // ↓ add chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => { if (request.name === "take-screenshot") { const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); chrome.tabs.captureVisibleTab(tab.windowId, { format: "png" }, (dataUrl) => { if (chrome.runtime.lastError) { console.error("Error capturing screenshot:", chrome.runtime.lastError.message); return; } console.log("Screenshot captured, sending data URL"); chrome.tabs.sendMessage(tab.id, { type: "screenshot", dataUrl }); }); } }); // ↑ add chrome.commands.onCommand.addListener(async (command) => { ... こんな感じで実行するず、ポップアップからもスクリヌンショット機胜を発火するこずができるようになりたす。 画面収録 2024-12-03 9.55.40.mov チュヌトリアルは以䞊です。 たずめ 抂念を理解するず意倖ず簡単に䜜れるので、今埌業務効率化できそうなずころがあれば、自䜜しおみようず思いたす。 最埌たで芋おいただきありがずうございたした🙇
はじめに 皆さんこんにちは ラスベガスで開催された AWS の re:Invent にマむナビからも 4 名の゚ンゞニアで珟地参戊しおきたした re:Invent がどういったむベントなのか、Keynote から SWAG、認定者ラりンゞたで、実際に参加しおみたレポヌトをご玹介したす。 AWS re:Invent ずは AWS re:Invent  ã¯ Amazon Web ServiceAWS瀟が幎に䞀床開催する、AWS 最倧芏暡の技術カンファレンスです。2012 幎から開催されおおり、今幎で 13 回目の開催ずなりたす。 倚くの参加者が泚目する Keynote(基調講挔)から、2,000 以䞊の技術セッションぞの参加、Expo(展瀺䌚)などさたざたなプログラムが甚意されおおり、毎幎むベント䞭に倚くの新サヌビスや、新機胜が発衚されたす。 むベント抂芁 開催日皋12 月 2 日月- 12 月 6 日朚の 5 日間 開催地 アメリカ ネバダ州 ラスベガス 参加者 珟地参加者玄 60,000 名うち日本からの参加者玄 2,000 名 参加費甚$2,099 䌚堎 匕甚 https://reinvent.awsevents.com/experience/plan-your-trip/ キャンパス䌚堎はラスベガスの䞭心地のホテルで、党郚で 6 ぀ありたす。 䌚堎のホテルがかなり倧きいため、ホテル間の移動は無料のシャトルバスたたはモノレヌルを䜿いたす。 基本的にはシャトルバス、人が倚く集たるむベントが開催されるタむミングでの移動はモノレヌルでの移動をオススメしたす。 プログラム ここからは re:Invent で実際に䜓隓したプログラムを玹介しおいきたす。 Keynote基調講挔 EXPO展瀺䌚 技術セッション SWAG AWS 認定者ラりンゞ Keynote基調講挔 Keynote ずは、AWS のトップリヌダが今幎泚目の新サヌビスや新機胜に぀いおの発衚を行う講挔で、開催期間䞭は毎日行われたす。 オンラむンでの芖聎も可胜で、動画配信もされおいたす。 Keynote珟地参加レポヌト 今回はその䞭でも最泚目だった Day2 の Keynote、AWS の CEO である Matt Garman ã®è¬›æŒ”に参加したした。 Matt Garman は EC2 の最初のプロダクトマネヌゞャヌで、24 幎の 6 月に AWS の新 CEO に就任したため、今回が初の Keynoteずなりたす。 朝 8:00 から始たる講挔でしたが、䌚堎に入りたかったので1 時間半ほど前から䞊びたした。 メンバヌず 6:00 に集合で MGM からロヌカルバスに乗りシャトルバスが出おいない時間移動。 6:45 に講挔䌚堎の Venetian に到着しお埅ち列ぞ。 7:00 には入堎芏制されおいたので、開始 1 時間前には䞊んでいないず䌚堎には入れないようです。 早朝ずは思えない人の倚さ 7:15 すぎにメむン䌚堎ぞ。ここもずにかく広かったです。 運よく先頭の方に䞊んでいたので、䌚堎の真ん䞭のあたりに着垭できたした。 ノリノリの DJ がいる䌚堎 講挔開始の 8:00 になるずオヌプニングムヌビヌが流れた埌、AWS の CEO である Matt Garman 氏が登堎し、䌚堎の盛り䞊がりも最高朮に 登堎の瞬間を激写するこずに成功 この埌 3 時間ほどかけお、たくさんの新サヌビスや新機胜が発衚され、発衚のたびに拍手喝采が起こっおいたした。 Amazon EC2 Trn2 むンスタンス/ Trn2 UltraServers Amazon S3 関連 Amazon S3 Tables Amazon S3 Metadata Amazon Aurora DSQL Amazon DynamoDB global tables Amazon EKS Auto Mode Amazon EventBridge ず AWS StepFunctions のプラむベヌト接続 Amazon Nova Amazon Bedrock 関連アップデヌト Amazon Q 関連アップデヌト etc... Amazon の CEO 兌瀟長である Andy Jassy も登壇 早朝から 3 時間の講挔はかなりハヌドでしたが、AWS のスケヌルの倧きさや圱響力を肌で感じるこずができたした。 EXPO展瀺䌚 EXPO ずはいわゆる䌁業展瀺䌚堎のこずで、AWS の゚キスパヌトやパヌトナヌ䌁業の方ず盎接お話ししたり、最新の情報収集をするこずができたす。 この䌚堎もずにかく広いです。日本の䌁業もちらほら芋かけたした。すべおのブヌスを回ろうず思うず数時間かかるのではないでしょうか... EXPO は Day 2 の 16 時からの開堎で、初日はフヌドやドリンクの提䟛もあり、ちょっずしたパヌティヌのようでした。 EXPO 䌚堎の様子 䌁業ブヌスがたくさん 気になる䌁業でサヌビスに぀いお詳しく話を聞くのもよし、い぀もお䞖話になっおいる䌁業のブヌスに行っおグッズをもらうのもよしです。 頂いたぬいぐるみ自慢 技術セッション むベント䞭には3,000 以䞊の技術セッションが開催されたす。 セッションタむプや察象業皮/業界、レベルが分かれおおり、予玄たたは事前に䞊んでWalk-Up Seats参加したす。 セッションタむプ 䞻芁なセッションに぀いお説明したす。 Breakout Session 1 時間の講矩圢匏で特定のトピックに぀いお深掘りする。のちにオンデマンドで動画配信あり Workshop 2 時間の実践型セッション。個人やグルヌプでのハンズオン Chalk Talk 10~15 分の講矩の埌、45~50 分の質疑応答を行う。少人数での開催 Builders Session 1 時間の小グルヌプセッション。AWS ゚キスパヌトずのハンズオン GameDay ゲヌム圢匏のセッション。 レベル 100 レベル入門から 400 レベル゚キスパヌトたで難易床が分かれおいるので、自分のスキルレベルや興味に合わせおセッションを遞択できたす。 参加しおみお セッション遞びが難しい かなりの数なので、開催堎所やスケゞュヌルを考慮しながら自分に合ったセッションを遞択するのが難しかったです。 事前にセッションカタログの絞り蟌み機胜を掻甚し぀぀、タむトルだけではなく詳现たで確認しお、よくよく怜蚎しおおけば良かったなぁず反省したした。 予玄なしでも意倖ずいける 人気そうなセッションでも、30〜45 分前に䞊んでいれば予玄なしで入れたした。 予玄いっぱいでも、盎前に垭が空いお予玄できたりもしたので、諊めずにチェックするのも䞀぀の手です 予玄すべきセッション Breakout Session は配信があるので、それ以倖のグルヌプワヌクや質疑応答ができるセッションに参加するのがおすすめです。 特に GameDay のようなゲヌム圢匏のセッションは、すぐ予玄が埋たっおしたうので、参加したい堎合はセッション予玄開始時にすぐ予玄するのが良いです。私はがけっずしおいお予玄できなかった SWAG SWAGずは䌁業のオリゞナルグッズのこずです。 re:Invent 参加者党員がもらえる AWS のグッズから、EXPO に出展しおいる䌁業のグッズたで様々なアむテムが手に入りたす。 AWS の認定を取埗しおいる人だけがもらえるグッズもありたした。 SWAG 受け取り䌚堎 戊利品のご玹介 䌁業ごずに特色がありたすね。 AWS パヌカヌや T シャツはもらっおそのたた着おいる人が結構いたした。 持っお垰るのが倧倉な量 認定者ラりンゞ 認定者ラりンゞずは、AWS 認定資栌取埗者だけが入るこずのできるラりンゞです。 資栌を 1 ぀でも保有しおいるず入るこずができたす。 入堎するためには、受付で Credly での認定バッゞを提瀺する必芁があるので、あらかじめ準備しおおくのが良いず思いたす。 ラりンゞの䞭には䜜業スペヌスがあり、ドリンクや軜食が提䟛されおいたす。 私がステッカヌをもらったり撮圱したりず喜んでいる隣で、みなさん黙々ず䜜業されおたした。 照明がオシャレ 広々ずした䜜業スペヌスで黙々ず䜜業する人々 おわりに AWS re:Invent 2024 参加レポヌト、いかがだったでしょうか。 なんずなくでも雰囲気を感じ取っおいただけたら幞いです。 私自身、かなり開発や語孊孊習のモチベヌションが䞊がりたした。 興味のある方はぜひ来幎参加しおみおください 参加メンバヌず䌚堎にあった倧きな黒板の前でパシャリ ðŸ“·âœš マむナビロゎはどこにあるでしょう👀 むベントURL AWS re:Invent 2025 | December 1 – 5, 2025
バケットくんずは バケットくん(正確な日本語蚳䞍明・英語: Buckets)は、S3のマスコットキャラクタヌです。 AWS Storage Blog の䞋郚に玹介文が蚘茉されおいたす。 re:Inventに参加しないず知りえない情報を集めおみたした。 身䜓的特城 バケットくんが矜織っおいるダりンにはS3テヌブルずS3メタデヌタずいう今回発衚された機胜のワッペンのようなものが付いおおり、AWS瀟内で予め準備されおいたこずが䌺えたす。 埌頭郚に存圚する取っ手のような郚分を動かそうずしおいる人を芋かけたしたが、動かせず固定されおいたした。觊られたこずに気づいたようでしたが、バケットくんには銖が存圚しないため埌ろを確認するのに少しあたふたしおいる様子でした。 生息域 毎幎開催されるre:Inventのむベント䌚堎内に出珟されるこずが知られおいたす。今回マむナビの゚ンゞニアはEXPO䌚堎・KeyNoteの䌚堎近くにいるずころを目撃したした。たた、Wynnホテルなど、䌚堎内の他の堎所で目撃したずいう情報も耳にしたした。 EXPOのAWSブヌスの方に、バケットくんに䌚ったこずがあるか聞いたずころ、今回は3日間ブヌスに立っおいるが芋たこずが無いず蚀っおいたした。バケットくんに䌚いたい方は、胜動的に探すこずが求められそうです。 バケットくんの呚りには必ず人間が2名皋床付き添い、䞀緒に行動をしおいたした。 性栌 気さくな性栌。女性ず撮圱する際は膝を぀くこずも。 撮圱甚にダンスもしおくれたす。倧きめの䞊半身ずは裏腹に、意倖ず身軜です。 関連情報 マむナビで入手するこずはできたせんでしたが、re:Invent2日目たでは、バケットくんに䌚うずステッカヌをもらえたらしいです。そのため、ステッカヌを集めたい人は早めにバケットくんを探し始めたほうがよいです。 EXPOのAWSブヌスでは、バケットくんの亜皮のステッカヌが貰えたした。 最埌に マむナビ瀟内向けに本蚘事を公開したずころ、なんずお䞖話になっおいるAWSの担圓者さたに「 AWS瀟内に展開したい 」ずお声がけをいただきたしたバケットくんは、倚くの人に愛されるキャラクタヌのようです。
はじめに 皆さん、こんにちはデゞタルテクノロゞヌ戊略本郚(以䞋デゞ戊)のT.Uです。2024幎11月にAI・ディヌプラヌニングに関する資栌「JDLA Deep Learning for GENERAL通称G怜定」を受隓したしたので、今回は孊習方法や受隓の内容に぀いおお䌝えできればず思いたす。少しでも参考になれば嬉しいです。 資栌取埗にあたり、マむナビのデゞ戊瀟員は、䌚瀟の制床を利甚するこずで勉匷受隓たでを実質無料でできたす。マむナビ&デゞ戊最高 資栌・詊隓の抂芁 資栌・詊隓名 JDLA Deep Learning for GENERALG怜定 資栌・詊隓の説明 G怜定ずは、䞀般瀟団法人日本ディヌプラヌニング協䌚JDLAが実斜する、AI・ディヌプラヌニングの掻✀リテラシヌ習埗のための怜定詊隓です。公匏ペヌゞより 詊隓日 2024幎11月09日土 詊隓の圢匏 CBT自宅受隓可圢匏 120分160問 受隓に際しお 2024幎第6回の詊隓からシラバスず問題数に倉曎がありたす。 ネット䞊には倉曎前の情報が倚いためご泚意ください 資栌取埗の背景 マむナビバむトではGoogleのDeep learningやAIの技術を取り入れようずいう取り組みを進めおいたす。 そのため技術の背景や歎史を知るこずで、より業務理解を深めるこずを目的に取埗したした。 孊習方法 䜿甚した教材 Udemy デゞ戊の瀟員が無料で利甚できるオンラむン孊習ツヌルです 「【党200問の暡擬詊隓付き】G怜定に合栌するための集䞭講矩人工知胜AIに぀いお䜓系的に孊ぶ初心者向け」 公匏テキスト 「深局孊習教科曞 ディヌプラヌニング G怜定ゞェネラリスト公匏テキスト 第3版」 公匏問題集 「培底攻略ディヌプラヌニングG怜定ゞェネラリスト問題集 第3版」 オンラむン問題集 「 Study-AI 」 孊習期間 箄3か月30時間皋床 孊習スケゞュヌル 最初の1か月半で公匏本、Udemyをざっず芋る。 ずりあえず芋る。䜕ずなく芋る。興味を持っお芋る。䜕はずもあれ芋る。 残りの1か月半で問題集をずりあえず解いおみる。 間違った箇所は「×」、䜕ずなくしか分からなかった箇所は「△」を付けおおき、その郚分は解説→それでも意味が分からない堎合は公匏本を読む。 土日など時間を取れるずきに暡擬問題をやっおみる。 私は問題集の暡擬問題をやりたしたが、Udemy、Study-AIでも良いず思いたす。 たずは時間を気にせず解いおみる→時間を蚈っお解く。 時間以内に解けるように頑匵る。 詊隓は120分で160問単玔蚈算で1問圓たり45秒なので、時間配分や120分160問の恐ろしさを身䜓で理解する。 孊び・気づき 「実質無料」で受隓可胜ずは 結論、 勉匷はデゞ戊の「曞籍賌入補助制床」で賌入した曞籍ずUdemy 受隓は自宅なので亀通費䞍芁 受隓料はマむナビの「IT・ビゞネス資栌取埗支揎」制床を利甚する こずで、資栌取埗に関わる費甚が基本的にかからなくなりたす 資栌取埗支揎制床に関しおは、合吊に関わらず受隓資栌ごずに1回は支絊されるため、安心しおチャレンゞできたすね。 p.s. 今回玹介しおいるオンラむン問題集のStudy-AIに぀いおも、珟圚はβ版ずいうこずで、無料で利甚するこずができたした。䌚員登録は必芁 勉匷に関しおは範囲が広く、量が倚いです。公匏本は448ペヌゞ、Udemyも13時間くらいありたす。 党おを真剣に調べながら進めるず詊隓に間に合わないため、「こういうものなんだ」皋床で䞀旊玍埗し、興味がある郚分だけ詳しく調べるずいう進め方をしたした。 詊隓に関しおは、PCを䜿った自宅受隓ができたす。 詊隓内容は、どれだけすぐ解ける問題に回答しお、次に行けるかが合栌のカギだず思いたす。 問題文がかなり長いものもあるので、読解力も䜵せお必芁な気がしたす。 かくいう私も党お解き終わった時には、残り時間が15秒でした。芋盎しほができず ..> <..  䞀応ですが、党く分からない問題は「A」ずいったルヌルを事前に決めおおきたした。 結果に぀いおはその堎では分からず、受隓埌週間でメヌルが届きたす。 私の堎合は、2024幎11月25日月に合吊メヌルが届きたした。 メヌルには「合吊結果」「総受隓者数ず合栌者数」「各分野別の埗点率」等が蚘茉されおいたす。 合栌蚌やオヌプンバッチなどの発行は、もう少しかかるようです。2024/11/26時点 資栌取埗支揎制床で必芁になる受隓料の領収曞に関しおは、合吊メヌルずは別で届きたす。 â–Œ2024/12/10 远蚘 合栌蚌曞も無事届きたした。 さいごに 今埌もし取埗を目指しおいる方がいれば、 内容も倚く倧倉な資栌かず思いたすが、合栌率は高い資栌ですので合栌目指しお頑匵っおください
はじめに デゞタルテクノロゞヌ戊略本郚ずは 2022幎10月、事業郚門ごずに点圚しおいたITずデゞタルマヌケティングの担圓郚眲を1぀に統合する圢で『デゞタルテクノロゞヌ戊略本郚以䞋、デゞ戊』が誕生したした。 それたではドメむンごずにサヌビスの開発・運甚・マヌケティングを行うずいう瞊割りの構造で事業を展開しおいたしたが、それだけでは予枬䞍胜ず蚀われるこれからの時代に察応するこずは困難です。そこで、デヌタやシステム、人材などアセットの最適化を図り、より倧きなスケヌルでむノベヌションを掚し進めおいく組織が䜜られたした。 デゞコネずは デゞコネずは、デゞ戊に所属するメンバヌの䞭で、 「他のチヌムの人が䜕をしおいるのか分からない」 「もっず他チヌムのマヌケタヌず亀流を図りたい・・・」 ずいった悩みを持った方や、組織自䜓ぞの課題に察し、マヌケタヌ間で亀流を図る機䌚の1぀ずしお発足したプロゞェクトです 詳しくはこちらの蚘事をご確認ください ###card_post_id=1068### 内容第6回開催内容に関しお テヌマ「マむナビが競合に打ち勝぀ためのマヌケタヌの心埗ずは」 登壇者ノバセル株匏䌚瀟 田郚 正暹様  ノバセル株匏䌚瀟 は、「マヌケティングの民䞻化」をビゞョンに掲げ、「指名怜玢」を重芁指暙ずし、圓瀟が独自に開発した「ノバセル for TV」や「ノバセル for デゞタル」などの効果分析ツヌルや、第䞉者目線で評䟡・改善を行う「オヌディットサヌビス」など、オンオフ暪断で倚様なマヌケティングサヌビスを展開しおいたす。 マヌケティングの定矩 マヌケティングの基瀎的な考え方や重芁なポむントをご玹介いただきたした マヌケティングずは、商品を売るこずではなく、売れる仕組みを䜜るこず。 具䜓的には、プロダクト、䟡栌、堎所、プロモヌションの4぀の芁玠4Pを組み合わせお、顧客に遞ばれるための戊略を立おるこずを指す。 マヌケティングの目的は顧客に遞ばれお圓たり前の状態を䜜るこずであり、これがマヌケティングの本質 だず解説いただきたした。 たた、他瀟にはない独自の特城POD: Point of Differenceを芋぀け、それを匷調するこずが重芁であるこずや、カテゎリヌ内でのポゞショニングカテゎリヌ゚ントリヌポむントを確立するこずが重芁であるずいう内容に関しおも講矩いただきたした。 グルヌプワヌク 勉匷䌚埌半では、自分たちのサヌビスに関するマヌケティング戊略を考えるワヌクショップに取り組みたした。各グルヌプは、サヌビスの存圚理由Why、察象顧客Who、匷みWhat、䟡倀Value等を明確にするためのフレヌムワヌクを䜿甚したした。 田郚様より、耇数サヌビスにおけるマヌケティング戊略の貎重なフィヌドバックをいただき、倧倉有意矩なワヌクショップずなりたした。 感想 事埌アンケヌトではこんな感想をいただきたした 「再認識させられるこず、ハッずさせられるこず、どちらも盛り沢山で有意矩でした」 「事業が成長する過皋や、自瀟の蚎求ポむントを敎理するための手法を孊ぶこずができた」 「同じサヌビスのメンバヌで、今改めおマヌケティングの話を聞き、ブランドに぀いお話し合う。ずおも貎重な機䌚になりたした」 感想にもある通り、改めおフレヌムワヌクを掻甚し、サヌビス内のメンバヌず時間ずっお話し合うこずで再認識できたこずや気づきを埗るこずができたずいう意芋が倚かったです。今埌も皆様の業務に圹立぀よう、デゞコネの開催を進めおたいりたす。 過去回はこちらから 第1回 「Z䞖代の心を掎むマヌケティングずは」 第2回 「Metaマヌケ担圓が抑える最新トレンドずは」  第3回「ADKマヌケティング・゜リュヌションズ明日から認知マヌケタヌになれるTVCMプランニングのすべお」 第4回「株匏䌚瀟むヌ・゚ヌゞェンシヌデヌタの力を匕き出すGA・Looker Studio・BigQueryの基瀎知識」 第5回「株匏䌚瀟FaberCompanyLP倧解剖CVR改善LPのPDCAの回し方
はじめに お疲れ様です。 Webマヌケティング課のY.Dず申したす。 専門はGA4などのマヌケティング分析基盀を䞭心に仕事しおいたす。 玄䞀幎ほど、マむナビが出資しおいるむンドネシアの「䌁業×フリヌランサヌ」のマッチングサヌビス「Sribu」に察しお、私含めたデゞ戊プロモヌション郚隊の3人でマヌケティングサポヌトを行っお参りたした。 https://www.sribu.com/en ★買収時のニュヌスなど https://www.nikkei.com/compass/content/PRTKDB000001540_000002955/preview https://www.mynavi.jp/news/2021/12/post_32688.html サポヌト内容 Sribuマヌケティング支揎の詳现内容は以䞋です。 ①週䞀の定䟋䌚議 Sribu×グロヌバル経営×デゞ戊で䌚議を行いたす。 ここではマむナビむンドネシアが通蚳ずなり英語ず日本語が入り混じる䌚議ずなっおいたす。英語勉匷しろ ②広告戊略の立案 Sribuではオンラむン広告でGoogle広告ずMeta広告を運甚しおおり、適切なキャンペヌン構造や投資金額を立案したす。Sribu偎CMOず打ち合わせをしながら最適な広告効果を狙いたす。 ③蚈枬蚭定 GA4やGTMなどの蚈枬に関䞎するツヌルに関しお技術的な支揎をしたす。マむナビでも起きおいる数倀が取れない・間違っおいるみたいな問題の解消をめざしたす。 なぜ出匵したのか【目的など】 オンラむンでの䌚話を重ねおきた本件でしたが以䞋の理由で今回の話ぞず぀ながりたした。 ぀たり、「盎接䌚話をするため」ずいうこずです。 これは倖囜人だからずいうわけではないず思うのですが、実際に䌚ったこずもない人・リアルでの亀流がない人からの意芋は基本玠盎に受け取っおもらえたせん。 人に話を聞いおもらうためには、たずは信頌関係を構築しコミュニケヌションを深めるこずが最優先であるず今回孊びたした。 出匵堎所ゞャカルタ,Sribuオフィスなど 矜田空枯からゞャカルタたでは片道7時間半で、赀道盎䞋の南囜でした。日本よりも盎射日光が鋭く、冷房の効きもより匷いものでした。穏やかな時間がゆったり流れおいる雰囲気でした ★枋滞 なんず・・・むンドネシアには 信号がありたせん。 あたりも亀通量が倚く、雰囲気で暪切ったり、合流したりしおいたす。 ★蟛い 食べ物がすべお蟛いです。䞋蚘は適圓に入った街のごはん屋さん。 䌝統的な「ナシゎレン」などもスパむスの効いた激蟛料理です。個人的には ※氎道氎が飲めないずいうかアブナむため氷などには泚意が必芁 ★Sribuオフィス ベンチャヌキャピタルを感じるオフィスでした。 出匵スケゞュヌル 党䜓で3泊4日の出匵スケゞュヌルは以䞋です。 10月30日氎 移動日なので割愛。 10月31日朚曜日 RyanCEO挚拶9:00-9:30 AlexCMO挚拶9:30-10:00 マヌケチヌムずのMTG①10:00-12:00 自己玹介、質疑応答、問題点の敎理、解決策のディスカッション [宿題] 自己玹介スラむド簡易+Sribuぞの質問を準備 䞀緒にランチ12:00-13:00 各自手を動かす䜜業時間郜床質問察応・モニタリング13:00-15:00 Staffinc蚪問webマヌケチヌムずの情報亀換16:00-17:00 Sribuではこんなこずやっおいるずいう共有 Staffincはどんな感じで運甚しおいるのかのヒアリング 11月1日金曜日 マヌケチヌムずのMTG②9:00-10:00 昚日の振り返り、今日のアクション明確化 各自手を動かす郜床質問察応・モニタリング10:00-12:00 䞀緒にランチ12:00-13:00 マヌケチヌムずのMTG③13:00-15:00 改めおの問題敎理、解決策のディスカッション、垰囜埌のそれぞれのアクション明確化 CEO,CMOぞの成果報告15:00-16:00 マむナビむンドネシア蚪問16:30-17:30 11月2日土 垰宅日なので割愛。 出匵での成果 課題の再発芋 盎接の察話を通じお、Sribuの蚈枬や広告キャンペヌン蚭蚈の䞍敎合、予算配分の課題など、遠隔では把握しにくかった運甚䞊の問題を特定できたした。 集䞭した支揎による意思決定ぞの貢献 2日間にわたりデゞ戊偎の知芋を掻甚し、P-MAXキャンペヌンや蚈枬粟床の改善策を提案し、Sribu偎の意思決定プロセスに貢献できたした。 戊略転換の合意圢成 繁忙期戊略ずしお、CPA悪化を䞀時的に蚱容しおCV数の最倧化を目指す方向ぞ転換する方針を共有し、獲埗広告の予算の合意を埗たした。 基本的には初日にヒアリングを行い、2日目に最終成果ずしおデゞ戊チヌムからの提案を行いたした。 以䞋の資料が最終的なアりトプットず蚀えたす。 ①ヒアリングたずめ ②改善提案※抜粋 䞊蚘ずおも真面目に曞いおおりたすが、䞀番は「䌚話ができたこず」が倧きいです。 最終日には集合写真を撮りたした。蚀葉の壁はありたしたが、お互いの信頌関係を築く機䌚ずなったず感じおおりたす。 感じたこず 今回の出匵は3人で行きたしたので、それぞれの感想を茉せおおきたす 日本の基準よりも现かい蚭定確認などがされおおらず、珟地で䌚話しながら事実確認をしないず珟状を把握するこずが難しい。特に蚈枬に関しおは基瀎的なパラメヌタの敎理など日本では共通ルヌルずなっおいる郚分も個人(䌁業)独自のルヌルずなっおいたりしお䌚話しながらすり合わせないず修正案を出せないず感じた。 広告配信においお、これたで改善むンパクトが倧きいであろう提案したものの、内容のすべおが反映されおいるわけではなかった。今回の出匵の間に、各キャンペヌンの配信目的や意図、改善アクションに぀なげる際にどこが障害になっおいるのかなど、珟地で盎接コミュニケヌションをずるこずで、どのように提案したら玍埗しおもらえるか考えるこずができた。 デゞ戊管蜄のサヌビスは既にサヌビスずしお成り立っおいるものがほずんどだず思いたすが、今回の支揎はただ小さなサヌビスをいかに成長させるかずいう芖点で、WEB広告斜策も本圓にれロからの取り組みずなったので、戊略的マヌケティングの重芁性を改めお知るいい機䌚になりたした。たった「10䞇円」の投資でサヌビスを倧きく改善できる可胜性を持っおいるずいうこず、マヌケティングサむドの目暙未達が臎呜傷になり埗るこずなど、マヌケタヌずしお垞に感じなくおはいけない「責任」の重さを実感したした。 たずめ 海倖でビゞネスの経隓ができたこずは非垞に芖野が広がる有難い経隓でした。 たた、英語勉匷を本栌的にしないずたずいなず蚀う感芚になりたした。AIでの同時通蚳も技術的にはありたすが、よりリアルタむムでラフにコミュニケヌションを取るこずが劂䜕に重芁か気づきを埗られたず思っおおりたす。 グロヌバル経営䌁画×デゞ戊ずの連携匷化は党瀟にも倧きなメリットがあるず思いたす。 今回の出匵をきっかけで新たな東南アゞア䌁業のマヌケティング支揎の話も耇数䞊がったずのこずで、こういった案件が各所で起こっおいる状態が起きればデゞ戊グロヌバル化も珟実になるかも・・・ 読んでいただきありがずうございたした。
はじめに デゞタルテクノロゞヌ戊略本郚ずは 2022幎10月、事業郚門ごずに点圚しおいたITずデゞタルマヌケティングの担圓郚眲を1぀に統合する圢で『デゞタルテクノロゞヌ戊略本郚以䞋、デゞ戊』が誕生したした。 それたではドメむンごずにサヌビスの開発・運甚・マヌケティングを行うずいう瞊割りの構造で事業を展開しおいたしたが、それだけでは予枬䞍胜ず蚀われるこれからの時代に察応するこずは困難です。そこで、デヌタやシステム、人材などアセットの最適化を図り、より倧きなスケヌルでむノベヌションを掚し進めおいく組織が䜜られたした。 デゞコネずは デゞコネずは、デゞ戊に所属するメンバヌの䞭で、 「他のチヌムの人が䜕をしおいるのか分からない」 「もっず他チヌムのマヌケタヌず亀流を図りたい・・・」 ずいった悩みを持った方や、組織自䜓ぞの課題に察し、マヌケタヌ間で亀流を図る機䌚の1぀ずしお発足したプロゞェクトです 詳しくはこちらの蚘事をご確認ください ###card_post_id=1068### 内容第5回開催内容に関しお テヌマ「LPのPDCAの回し方」 登壇者株匏䌚瀟FaberCompany 岩本 庞䜑様    株匏䌚瀟FaberCompanyにおCROコンサルタントをされおいる岩本様をお招きし、LP制䜜にお けるPDCAサむクルの回し方に぀いお詳しくお話しいただきたした。 Web広告におけるLPの重芁性 LPはナヌザヌの怜蚎フェヌズに合わせた蚎求やストヌリヌ蚭蚈を行い、タヌゲットを絞ったコンバヌゞョン率最適化CROを実珟するための重芁なペヌゞです。ここではFaberCompany様のサむトを䟋に、WEBサむトずLPの䜿い分けに぀いお詳しく解説いただきたした。 LP怜蚌ず分析の基本的な流れ 月䞊みですがPDCAを継続的に回すこずが基本 今回は②③を重点的に解説いただきたした。 珟状把握から打ち手蚭蚈 気づきの抜出 珟状把握のための手法を詳しくご玹介いただきたした。䞋蚘から぀又は耇数の手法で「気づき課題芁玠」を抜出したす。 数倀的なアプロヌチGA探玢レポヌトによる把握 簡易ナヌザヌテスト身近な人にCV手前たでを詊しお貰い、暪から芋る ヒヌトマップ分析スクロヌルペヌゞの粟読率状況、クリック箇所 差分分析競合他瀟ずの差分分析からテスト芁玠抜出 打ち手の蚭蚈 抜出した気づきを斜策たで萜ずし蟌むプロセスをご玹介いただきたした。最初はこのプロセスを䞁寧に実斜するこずが掚奚ずのこずでした。 ヒヌトマップ分析を実践 マむナビサヌビスのLPを、ヒヌトマップを掻甚しお䞊蚘プロセスを実践したした。短時間ではありたしたが、倚くの斜策案が出され、岩本様から貎重なフィヌドバックもいただき、倧倉有意矩なワヌクショップずなりたした。 ▌実際にワヌクの䞭で出た気づき打ち手 感想 事埌アンケヌトではこんな感想をいただきたした 「たさにLP制䜜における成果に぀いお、課内で苊戊しおいる最䞭だったのでずおも参考になりたした。」 「終了埌同じチヌムになった方ず各サヌビスのLP状況などをお聞きできお参考になりたした。」 感想にもある通り、各サヌビスのLP運甚状況を知るきっかけずなり、具䜓的な代理店ぞのオヌダヌに぀ながったずいうお話も䌺いたした今埌も皆様の業務に圹立぀よう、デゞコネの改善を進めおたいりたす。 第1回 「Z䞖代の心を掎むマヌケティングずは」 第2回 「Metaマヌケ担圓が抑える最新トレンドずは」  第3回「ADKマヌケティング・゜リュヌションズ明日から認知マヌケタヌになれるTVCMプランニングのすべお」 第4回「株匏䌚瀟むヌ・゚ヌゞェンシヌデヌタの力を匕き出すGA・Looker Studio・BigQueryの基瀎知識」