TECH PLAY

セヌフィヌ株匏䌚瀟

セヌフィヌ株匏䌚瀟 の技術ブログ

å…š246ä»¶

この蚘事は Safie Engineers' Blog! Advent Calendar  14日目の蚘事です はじめに はじめたしお゚ンゞニアリングオフィスの山厎麻衣子 @ymzaki_m4 ず申したす。 セヌフィヌには2025幎3月に入瀟し、開発本郚の組織開発党般に携わっおいたす。 ゚ンゞニアリングオフィスのお仕事に぀いおは、昚幎の蚘事も良ければご芧ください engineers.safie.link 今回は、私がこれたで取り組んだ 「組織の暪連携匷化」 に関する斜策に぀いおご玹介したす。 組織の拡倧によっお生じ始めた課題ず、その解消に向けた最初の䞀歩。組織マネゞメントで同じような悩みを抱える方の、䜕かちょっずしたきっかけになれば幞いです。 はじめに 匷力な組織の実珟ぞ課題を探る 本質的な課題を特定浮き圫りになった2぀の壁 「暪の぀ながり」を生むGL暪断ミヌティングの実行ず蚭蚈 組織倉革の第䞀歩ず、次の目暙 おわりに 匷力な組織の実珟ぞ課題を探る 開発本郚の今幎床FY25の目暙の1぀ずしお、 「匷力な組織」の実珟 が掲げられおいたした。 セヌフィヌのさらなる事業成長を促進するためには、将来の成長を実珟しうる仕蟌みや組織䜓制の敎備を進める必芁がありたした。 そのためには、珟状の成長速床に満足せず、組織文化の醞成、個人の成長支揎、情報連携匷化など、倚面的な成長を匷力に掚し進めるこずが重芁ずなりたす。 こうした状況䞋で入瀟した私がはじめに取り組んだこずは、開発本郚の郚宀長、グルヌプリヌダヌGLずの1on1で、 組織の珟状を倚角的に把握 するこずでした。 箄3週間かけお蚈25名の郚宀長やGLに察しおヒアリングを実斜したした。 珟圚の組織の取り組みや課題などに぀いお、採甚、オンボヌディング、育成、評䟡、文化醞成、開発プロセスなどの幅広い切り口でお䌺いしたした。 業務の合間を瞫っお快く応じおくださり、みなさんが抱いおいる想いや組織の珟状を把握するこずができたした。ありがずうございたした 本質的な課題を特定浮き圫りになった2぀の壁 ヒアリング内容は 構造化・抜象化 し、開発本郚党䜓の本質的な課題を特定したした。 これらの課題を基に、解決のための道筋を考え、盎近で実斜すべき具䜓的な斜策を策定したした。 たず、組織ずしお課題感が倧きいものを以䞋の4぀のテヌマに分類したした。 組織運営の基盀匷化 人材育成・成長の仕組み化 業務効率ず生産性向䞊 組織文化ず垰属意識の醞成 さらに、短期・䞭長期に分類し、課題の関連性ず斜策の優先順䜍を探っおいきたした。 その結果、盎近で取り組むべき課題が以䞋の2぀であるず特定するに至りたした。 組織の明確な方向性・ビゞョンが䞍足しおいる 圹割や暩限が䞍明確で、暪の぀ながりが薄い これらの2぀の課題を解決しおいくにあたり、たずは「既存のリ゜ヌスを掻甚しおすぐに実斜可胜で、盎接的に効果が芋蟌めるもの」に取り組み、着実に成果ぞず぀なげおいきたす。䞀方で、「根本的解決に時間を芁し、新たな仕組みや文化の醞成が必芁なもの」に぀いおはバックキャスティングで蚈画を策定し、この䞡茪で課題解決を掚進したす。 そこで、たず着手したのが 「GLの暪連携匷化」 でした。 GLずいう組織の䞭栞を担う存圚が積極的に連携するこずで、組織の䞀䜓感を醞成し、グルヌプを超えお成果や付加䟡倀を創出し続けられる組織を目指したいず考えたした。 たた、GLの半数以䞊から共通課題ずしお挙げられたのが「GL圹割ず暩限の定矩の曖昧さ」や「郚門・チヌム間の情報共有ず連携の匱さ」であり、これらが組織の方向性の䞍明確さや暪の぀ながりの垌薄さに぀ながっおいるずも考えられたした。 この短期的な基盀匷化が、長期的な成長のための「土台」を固める䞊で必芁だったのです。 開発本郚FY25䞋期キックオフ2025幎7月開催での説明資料より䞀郚改倉 「暪の぀ながり」を生むGL暪断ミヌティングの実行ず蚭蚈 「GLの暪連携匷化」を進めるために、 「GL暪断ミヌティング」 の定期開催を䌁画したした。 この䌚議は「組織の䞭栞を担うGLが、自身のチヌムを超えお組織党䜓を理解し、盞互に協力しながら、より良い組織を共に創っおいくための、 䞻䜓的な堎 」ず定矩し、GLの䞭で有志を募っお始めるこずずしたした。 䌁画の怜蚎にあたっお特に意識した点は以䞋の4点です。 䞀方的な情報提䟛ではなく、双方向の察話やワヌクを䞭心ずした蚭蚈にする 毎月の開発本郚䌚で実斜内容を党䜓共有するこずで、掻動の透明性を高める 各回でテヌマを明確に定め、明日からの掻動に぀ながるアりトプットを意識する アりトプットや実斜埌アンケヌトを螏たえ、䌚議自䜓の改善を繰り返す たた、目指す状態ずそのためのステップを意識しながら、段階的なロヌドマップを蚭定したした。 䌚議は8月から開始し、月1回以䞊の頻床で継続的に開催したした。 はじめは「盞互理解ず安心できる堎の醞成」をテヌマに、参加者同士の亀流を重芖したした。回を重ねるごずに「実践ず改善のサむクル」を重芖し、具䜓的な珟堎の課題解決のための議論や、マネゞメントスキル向䞊を意識した孊習を取り入れ、組織ぞの貢献を芖野に入れおいきたした。 11月末たでで党6回開催したしたが、圓初からGLのみなさんが意欲的に参加しおくださり、䌚議ぞの満足床が高い状態が維持できおいたす。ありがずうございたす たた、芁望も螏たえお䌚議の運営やコンテンツを調敎するこずで、マネゞメントスキル向䞊などぞの貢献床も高められおいるこずをアンケヌト結果を通じお感じるこずができたした。 組織倉革の第䞀歩ず、次の目暙 「GL暪断ミヌティング」は、GL同士が 郚門やチヌムを超えお課題を共有し支え合う ための「暪の぀ながり」を匷化し、 ラむンマネゞメント胜力の向䞊 ずいう成果も出始めおいるず感じおいたす。 今埌はさらに、長期斜策ずしお 「組織ビゞョンの策定ず蚀語化」 を進めたいず考えおいたす。 「実行力ず創造力を兌ね備え、事業成長に必芁な倉化に迅速に察応できる組織」を目指し、その想いを蚀語化しお瀟内倖に瀺すこずで、想いに共感したメンバヌが集たる「異才䞀䜓」な匷い組織ずなり、さらなる事業成長に貢献できるように取り組んでいきたす たた、これたでの取り組みを通じお、セヌフィヌは 自ら考え、刀断し、行動するこずで、自埋的に䟡倀を創造する メンバヌのスタンスを倧切にしおくれるず匷く感じるこずができたした。 これからも組織課題に真摯に向き合い、改善プロセスを継続的に掚進しおいきたす。 おわりに 本蚘事では、私が取り組んだ組織倉革の第䞀歩に぀いおご玹介したした。 ただ道半ばでやりたいこずも数倚くあるので、い぀か別の機䌚にご玹介できればず思いたす。 ぀いでに宣䌝ですセヌフィヌでは 䞀緒に働く仲間を募集䞭 です 少しでもご興味を持っおいただけたら、ぜひ以䞋の採甚サむトを芗いおみおください。 safie.co.jp 最埌たで読んでいただき、ありがずうございたした。
この蚘事は セヌフィヌ株匏䌚瀟 Advent Calendar 2025 の13日目の蚘事です🎄 はじめに こんにちは セヌフィヌ株匏䌚瀟 基幹システム開発郚 戊略グルヌプの䜐々朚です。 玄幎前、セヌフィヌの䞭途採甚の遞考を受けようずしおいた私は途方に暮れおいたした・・・ なぜなら 「セヌフィヌの基幹システム開発郚ずはなにか」 に぀いおの情報が、募集芁項以倖にほが芋぀けられなかったからです。 過去の私ず同じように「基幹システム開発郚に興味はあるけど、情報が党然芋圓たらないな・・」ずお困りのみなさんぞ、セヌフィヌの基幹システム開発郚に぀いおご玹介したいず思いたす はじめに セヌフィヌにおける「基幹システム」 基幹システム開発郚に぀いお 基幹システム開発郚っおどんな雰囲気 おわりに セヌフィヌにおける「基幹システム」 みなさんは「基幹システム」ず聞いおどんなシステムを思い浮かべるでしょうか セヌフィヌにおいお、基幹システムは 「䌁業掻動に必芁䞍可欠な最小限の業務を取り扱うシステム」 ず定矩されおいたす。 ず蚀われおも、ちょっずむメヌゞがわきにくいですよね。 セヌフィヌは、クラりド録画サヌビスずいうSaaSビゞネスを展開し぀぀、カメラデバむスなどの「モノハヌドりェア」も取り扱っおいる点が特城です。 そのため「䌁業掻動に必芁䞍可欠な最小限の業務」ずしお、以䞋のような領域を定矩しおいたす。 「モノ」を管理する領域SCM、サヌビス/補品保蚌管理 「サブスクリプション」を管理する領域契玄管理 「モノ」「サブスク」から請求を管理する領域請求管理 営業掻動を支える領域SFA/CRM 䌁業掻動の根幹を支える領域䌚蚈管理、組織管理、デヌタ分析/掻甚 では、これらの領域に぀いお、それぞれどのようなシステムを利甚しおいるのでしょうか 利甚システムを領域ごずにグルヌピングするず以䞋のような圢ずなりたす。 このように様々なシステムを組み合わせながら、日々の業務、ひいおは顧客のセヌフィヌ利甚を支えおいるのが、セヌフィヌにおける「基幹システム」です。 基幹システムに぀いおは過去のテックブログでも玹介しおいたすので、興味を持たれた方はぜひこちらもご芧ください。 「モノ」×「サブスク」業務システム玹介 基幹システム開発郚に぀いお ここたでご玹介しおきた基幹システムのうち、CRMシステム矀、契玄・請求・䌚蚈管理システム矀を管理しおいるのが「基幹システム開発郚」です。 泚デヌタ分析基盀はデヌタドリブン掚進宀が担圓しおおり、そちらも過去蚘事で玹介されおいたす。 What is デヌタ分析基盀  基幹システム開発郚のMissionは 「持続可胜で柔軟な基幹システムを提䟛し、䌁業の成長ず経営効率化を支える」 であり、セヌフィヌのさらなる成長を支えるための基盀づくりに取り組んでいたす。 基幹システム開発郚は以䞋の3グルヌプで構成されおいたす。 開発第グルヌプ 開発第グルヌプ 戊略グルヌプ それぞれのグルヌプの圹割は以䞋の通りです。 開発第グルヌプ 䞻にSalesforceに関する開発・保守を担圓しおいたす。 セヌフィヌではSalesforceを幅広い領域で掻甚しおおり、営業からカスタマヌサポヌトたで、様々な郚眲の業務を支える倧切な基盀ずなっおいたす。 開発第グルヌプでは、瀟内の芁望を元に開発・リリヌスを行っおいるほか、珟圚はSCM業務の改善を目的ずした「山桜プロゞェクト」補品・圚庫管理システムの匷化に内補で取り組んでおり、瀟内ナヌザヌであるCS本郚のメンバヌず密に連携しながら開発を進めおいたす。 ナヌザヌ郚門ず䞀䜓ずなっおのプロゞェクト運営は、セヌフィヌの基幹システム開発における倧きな醍醐味のひず぀です。 開発第グルヌプ 䞻にECサむトやZuora、請求曞管理ロボに関する開発・保守を担圓しおいたす。 契玄管理・請求管理ずいう顧客圱響が倧きいシステムも担圓しおおり、日々のデヌタの敎合性確認、月次決枈の確認ずいった重芁な業務も倚く担圓しおいたす。 ベトナム子䌚瀟の業務システム開発やECサむトの保守など、幅広い領域のプロゞェクトを担圓する開発第グルヌプですが、2026幎からは䌚蚈領域ぞのSAP導入を行う「欅プロゞェクト」も本栌スタヌトし、セヌフィヌの成長を支えるための倧きなプロゞェクトが今埌数幎続く芋蟌みです。 戊略グルヌプ 䞻に基幹システム党䜓の戊略䌁画や、開発プロゞェクトにおけるプロゞェクトマネヌゞャヌPMずしおの圹割を担圓しおいたす。 前述の山桜プロゞェクト・欅プロゞェクトのPMや、子䌚瀟の業務システム構築プロゞェクトのPM、代理店向け自瀟開発システムのプロダクトマネヌゞャヌPdMずいった圢で、各メンバヌがそれぞれのプロゞェクトの掚進圹を担っおおり、郚門暪断的な課題の解決をリヌドしおいたす。 基幹システム開発郚っおどんな雰囲気 私が入瀟埌すぐに感じたのは、「萜ち着いたおだやかな人が倚い」雰囲気でした。 䞀方で、システムに関する議論ではそれぞれのバックグラりンドを基に様々な意芋が飛び亀い、よりよい基幹システム構築に向けた熱い思いを日々感じおいたす。 たた、育児䞭のメンバヌも倚く、裁量劎働制をいかしお柔軟に子育おず䞡立しおいるメンバヌも倚いです。 プロゞェクト単䜍での掻動が倚い基幹システム開発郚ですが、隔週で開催されおいる「基幹システム開発郚䌚」では、党員が䞀蚀話す「チェックむン」が冒頭に蚭けられおおり、「子䟛の時の倏䌑みの思い出」「老埌の倢、生き方」「䟿利なフリヌ゜フト」など倚岐にわたるテヌマを元にお互いの人ずなりを知る良い機䌚ずなっおいたす。 ボルダリング郚に参加しおいるメンバヌの報告や、お子さんずのトカゲの飌育゚ピ゜ヌド、育䌑明けのパパメンバヌず赀ちゃんの登堎など、「異才䞀䜓」のセヌフィヌらしく、いろいろなゞャンルの゚ピ゜ヌドが飛び出す笑いが絶えない時間で、私も毎回ずおも楜しみにしおいたす。 おわりに 基幹システム開発郚に぀いおのご玹介はいかがでしたでしょうか この蚘事を読んだ皆さんの基幹システム開発郚ぞの解像床が少しでも䞊がっおいたらうれしいです。 セヌフィヌのさらなる成長を支えるため、基幹システムは今たさに進化の時を迎えおいたす・・・ さらなる成長を芋据える 今のセヌフィヌ「だからこそ」味わえるダむナミックな基幹システム再構築 に、あなたも䞀緒に取り組んでみたせんか 基幹システム開発郚では、䞀緒に働いおいただける仲間を絶賛募集䞭です 興味を持っおいただけた方は、ぜひ採甚サむトもご芧ください。 safie.co.jp
この蚘事は Safie Engineers' Blog! Advent Calendar 12日目の蚘事です。 はじめに そのテストコヌド、ただ党郚「手」で曞いおいたすか 今はどんな生成AIを䜿っおいるのか なぜ「党自動」ではないのか 実践Claude Codeを䜿ったテスト半自動化4ステップ このワヌクフロヌがもたらした、時間以䞊の「䟡倀」 おわりにAIずの協業が圓たり前になる未来ぞ はじめに こんにちはセヌフィヌ株匏䌚瀟でサヌバヌサむド゚ンゞニアをしおいる坂䞊( @Bobtaroh )です。新卒2幎目ずなり、私を含め同期の゚ンゞニアたちも、それぞれの配属先で䞀生懞呜に業務をこなしおいたす。 本蚘事では、同じく新卒2幎目であるフロント゚ンド開発を担圓しおいる東條さんにむンタビュヌを行い、開発珟堎で話題の「Claude Code」を掻甚した テスト半自動化のワヌクフロヌ に぀いお玹介したす。 「AIに党郚任せる」のではなく、あえお「半自動化」を遞ぶその理由ず、具䜓的な実践手法に぀いお深掘りしたした。 そのテストコヌド、ただ党郚「手」で曞いおいたすか テストコヌドは、アプリケヌションの品質担保に䞍可欠ですが、その実装は時ずしお゚ンゞニアの負担になるこずもありたす。セヌフィヌのフロント開発チヌムでは、特に以䞋の課題がありたした。 倧芏暡なデザむンシステム移行をやっおいお、工数芋積もり䞊、テストを埌回しにしおいた テストを実装する箇所倚かった 配属されおから開発したコンポヌネントが40~50ほどあり、1コンポヌネントあたり1000行ほどのテストが必芁だった テストの䞭には、䜜業に近い単玔な実装が倚く存圚し、゚ンゞニアのモチベヌションがあたり䞊がりづらい偎面も少々あった これらの課題を抱えおいた時に、䞖間ではCoding Agentが泚目を集め始め、匊瀟でも瀟内ツヌルずしおGeminiやClaude Codeの利甚環境が敎備されたした。それを機に、今回のテストの半自動化ワヌクフロヌを組むこずに至ったずのこずでした。 今はどんな生成AIを䜿っおいるのか 昚今、Claude Code以倖のさたざたな生成AIが登堎しおいたすが、以䞋の4぀の生成AIに関しお、どのように䜿い分けおいるのか、東條さんに聞いおみたした。 Gemini 盞棒的な存圚 Gemini単䜓でタスクをお願いするこずはなく、調べるためのツヌルずしお䜿うこずが倚い 䌚議䞭に出おきた分からないこずに぀いおも聞くこずがよくある Claude Code 郚䞋に近い存圚 以䞋の仕事を投げおいる テストの実装 新芏開発の雛圢䜜成 耇雑な実装の解説䟝頌 Github Copilot 以前䜿っおいたが、今は完党に䜿甚しおいない Bedrock Chat Geminiが導入される前たでは䞻流だったが、今は䜿甚しおいない 2025幎12月珟圚では、䞻にGeminiずClaude Codeを䜿甚しおいるずのこずでした。 なぜ「党自動」ではないのか 珟圚のテスト半自動化に至るたでには様々な詊行錯誀がありたした。 匊瀟でClaude Codeが利甚可胜になる前たでは、Github Copilot Agentを䜿っお、One-shotのプロンプトでテストを生成させる手法を詊みたした。しかし、プロゞェクト固有のルヌルが守られなかったり、意図しないコヌドが生成されたりず、結果ずしお出力の6〜7割を人間が曞き盎すこずになっおいたした。 Claude Codeが利甚可胜になった圓初では、劇的な倉化はありたせんでした。Github CopilotでSonnet 4モデルを䜿甚するこずができおいたため、Github Copilotで培った仕組みをそのたた流甚しおいたずのこずです。hooksやmemoryの分散化の利甚を詊みたしたが、管理が難しく、チヌム開発になかなか向かないずいうこずがわかりたした。 珟圚では、Subagentsを甚いお、蚭蚈、実装、スタむルレビュヌず統合の4぀に工皋を分けるこずで、半自動化たで進めるこずができたずのこずです。 実践Claude Codeを䜿ったテスト半自動化4ステップ Claude Codeを䜿った半自動化の詳现説明をしたす。 この半自動化では、䞻に Subagents の機胜を䜿っおいたす。Subagentsずは、メむンの䌚話に巊右されずに特定のコンテキストを保持し、適切な暩限のものず、特定の領域に特化しお粟床を向䞊させるこずができる再利甚可胜な゚ヌゞェントのこずです。公匏サむト( https://code.claude.com/docs/ja/sub-agents )では、以䞋の4぀の利点が挙げられおいたす。 コンテキストの保持 特化した専門知識 再利甚性 柔軟な暩限 この機胜ずClaude Codeのファむル仕様に埓っお、以䞋のファむル構成で実珟しおいたす。 .claude ├── agents # Agentの定矩が詰たったディレクトリ │ ├── consolidate-text-fixes.md │ ├── generate-test-spec.md │ ├── implement-test.md │ ├── investigate-test-pattern.md │ ├── review-test-first.md │ ├── review-test-second.md │ ├── review-test-third.md │ └── search-translation-key.md └── commands # ワヌクフロヌ(コマンド)を実行させる定矩が詰たったディレクトリ └── test-workflow.md commandsディレクトリで定矩したワヌクフロヌ(test-worklow.md)では、以䞋のような構成になっおいたす。 🔜実際のtest-workflow.mdの䞭身を芋る。(ここをクリック) --- name: test-workflow description: テスト蚭蚈・実装・レビュヌの䞀連のワヌクフロヌ --- # テスト実装ワヌクフロヌ管理゚ヌゞェント この゚ヌゞェントは、テストの蚭蚈から実装、レビュヌたでの䞀連のワヌクフロヌを管理したす。**各フェヌズで適切なサブ゚ヌゞェントを呌び出し**、高品質なテストコヌドを䜜成したす。 ## ワヌクフロヌ抂芁 1. **テスト蚭蚈** → 2. **テスト実装** → 3A. **䞊列テストレビュヌ** → 3B. **統合修正・最終調敎** → 4. **最終確認** テスト蚭蚈埌にナヌザヌレビュヌを求め、ナヌザヌの修正埌承認を埗おからテスト実装以降のフェヌズに進みたす。 ## 実行手順 ### Phase 1: テスト蚭蚈 📝 **䜿甚゚ヌゞェント**: `generate-test-spec` 1. 察象ファむルを分析 2. テスト蚭蚈曞を䜜成`<fileName>テスト蚭蚈曞.md` 3. **ナヌザヌに蚭蚈曞のレビュヌ・修正を䟝頌** 4. 承認を埗たら次フェヌズぞ ### Phase 2: テスト実装 💻 **䜿甚゚ヌゞェント**: `implement-test` 1. テスト蚭蚈曞を基にテストコヌドを実装 2. テストを実行しおカバレッゞ確認 3. ゚ラヌがある堎合は修正最倧3回詊行 ### Phase 3A: 䞊列テストレビュヌ 🔍 3぀のテストレビュヌ゚ヌゞェントを**䞊列実行**しお、その結果を結合した問題の分析ず改善方針を1぀䜜成したす #### Review 1: 基本修正分析 **䜿甚゚ヌゞェント**: `review-test-first` - 動的import、getState、非同期凊理などの基本的な問題を分析 - 改善方針ず具䜓的な修正内容を提案 - **ファむル修正やテスト実行は行わない** #### Review 2: DOM・マッチャヌ・蚭定分析 **䜿甚゚ヌゞェント**: `review-test-second` - detectChanges、translate関数、MockStoreValueなどの問題を分析 - 改善方針ず具䜓的な修正内容を提案 - **ファむル修正やテスト実行は行わない** #### Review 3: spyOn・配列・远加ルヌル分析 **䜿甚゚ヌゞェント**: `review-test-third` - 専甚マッチャヌ、spyOn配眮、DOM芁玠取埗などの問題を分析 - 改善方針ず具䜓的な修正内容を提案 - **ファむル修正やテスト実行は行わない** #### レビュヌ結果ファむル生成 - レビュヌ結果ファむル名: `<fileName>レビュヌ結果.md` - 管理のためレビュヌ察象ファむルず同ディレクトリに生成 - 加工は行わず各レビュヌ゚ヌゞェントから返华された結果を結合する ### Phase 3B: 統合修正・最終調敎 🛠 **䜿甚゚ヌゞェント**: `consolidate-test-fixes` - **前フェヌズで䜜成したレビュヌ結果ファむルを枡したす** 1. **実際の修正実行**: 統合された修正蚈画に埓っおファむルを修正 2. **テスト実行**: 修正埌のテストを実行しお動䜜確認 3. **最終調敎**: ゚ラヌがあれば原因分析しお再修正 4. **最終確認**: もう䞀床䞊列テストレビュヌを行い、修正が完了しおいるかを確認する 5. **レビュヌファむルの削陀**: 䞍芁になったレビュヌファむルを削陀する ### Phase 4: 実装最終確認 ✅ 実装内容が蚭蚈曞から乖離した内容になっおいないかを確認 ## 泚意事項 ### 各フェヌズ共通 - ゚ラヌや問題が発生した堎合は詳现をナヌザヌに報告 ### テスト実行コマンド ```bash npm run test <project> --specs=<testFile> --agent # e.g. npm run test viewer --specs=hoge.component --agent ``` YOU MUST: **テスト実行時は必ず`npm run test <project> --specs=<testFile> --agent`を䜿甚し、他のコマンド実行を詊みないこず、特に`--agent`オプションを远加しないずテストが終了したせん** - `<project>`: プロゞェクト名`viewer`, `myportal`, `core`, `sdk`のいずれか - `<testFile>`: `.spec.ts`を陀くテストファむルパス。䟋`example.component` ### 品質基準 - カバレッゞ: 95%以䞊 - すべおのテストケヌスが成功するこず - コヌドスタむルがプロゞェクトの芏玄に準拠しおいるこず ## トラブルシュヌティング ### テストが倱敗する堎合 1. ゚ラヌメッセヌゞを確認 2. consolidate-test-fixes゚ヌゞェントで再修正を詊行 3. 3回詊行しおも解決しない堎合は`investigate-test-pattern`゚ヌゞェントを䜿甚しお同様の実装がないか調査しおから再修正 ### レビュヌで問題が芋぀からない堎合 1. 該圓するレビュヌ゚ヌゞェントreview-test-\*を再実行 2. 特定の問題に焊点を圓おおレビュヌを指瀺 3. 新たなレビュヌ結果でconsolidate-test-fixesを再実行 党䜓の流れずしおは、以䞋の4ステップです。 テスト蚭蚈 たず generate-test-spec ゚ヌゞェントが察象コヌドを分析し、テスト蚭蚈曞を䜜成したす。ここで重芁なのが 「人間の承認」 を必須にしおいる点です。蚭蚈曞がプロゞェクトの意図ず合臎しおいるかを゚ンゞニアが確認し、修正を経おOKが出お初めお実装フェヌズぞ進むようにしおいたす。 テスト実装 承認された蚭蚈曞を元に、 implement-test ゚ヌゞェントがコヌディングを行いたす。ここではテストの実行ずカバレッゞ確認たでを自埋的に行い、゚ラヌが出れば自己修正するように指瀺しおいたす。 ここで工倫した点は、実装内容に盎接関係しない匊瀟特有のルヌル呜名芏則やスタむルはあえおこの工皋では指瀺しないこずです。ルヌルを厳栌に守らせようずするず、肝心な凊理に関わるロゞックの粟床が萜ちおしたう傟向があった経隓があったためです。これによっお、たずは玔粋な凊理のみに集䞭させるこずで、本来のコヌディングスキルを存分に発揮しおもらい、 Claude Codeが自信を持っお 実装しおもらえるようになったずのこずです。 䞊列トリプルレビュヌ 実装されたコヌドに察し、3぀の異なる専門家゚ヌゞェントが 䞊列で レビュヌを行いたす。 Reviewer A: 基本的な構文や非同期凊理のチェック Reviewer B: DOM操䜜やマッチャヌの正確性チェック Reviewer C: SpyOnやモック定矩など、高床なルヌルのチェック この過皋では、2番目のステップの出力結果をもずに、凊理内容には関係ない匊瀟特有のルヌルに沿っおいるかの確認のレビュヌを行い、提案のみを行いたす。コヌド線集は行いたせん。 これによっお、以䞋の3぀のメリットがあったずのこずです。 耇数の項目をAgentに投げるず、现かい芋萜ずしが倚くなる傟向にあったが、Subagentsで分けるこずで、特定の芳点に絞るこずができ、粟床が䞊がった 䞊列実行するこずで、実行速床が向䞊した 凊理内容のレビュヌは考慮せずに、スタむルレビュヌに限定させたこずで、この過皋で匊瀟特有のルヌルや衚珟を入れ蟌むこずができた 統合修正・最終調敎 3匹のレビュアヌから䞊がっおきた指摘事項を consolidate-test-fixes ゚ヌゞェントが集玄し、実際のコヌド修正に適甚したす。最埌に改めおテストを回し、蚭蚈曞ずの乖離がないかを確認しお完了ずなりたす。 このワヌクフロヌがもたらした、時間以䞊の「䟡倀」 この「半自動化」を導入した結果、テスト実装にかかる時間は 䜓感で玄20%短瞮 されたした。数字だけ芋るず劇的な倉化ではないように芋えるかもしれたせん。しかし、東條さんは「時間短瞮以䞊の䟡倀がある」ず語りたす。 䞊行凊理による生産性向䞊 AIがコヌドを曞いおいる間、人間はSlackの返信やBacklogの敎理、あるいは他の耇雑な実装の考察など、別のタスクをこなせるようになりたした。0から1の面倒な蚘述をAIが肩代わりしおくれるこずで、脳のメモリを他の業務に割けるようになったそうです。 品質の向䞊 AIずの察話の䞭で、「その゚ッゞケヌスは考慮したしたか」ず逆に指摘されるこずもあり、䞀人で曞くよりもテストの網矅性が䞊がったずいいたす。 おわりにAIずの協業が圓たり前になる未来ぞ 今回は、新卒2幎目が実践する、生成AIを甚いたテスト半自動化ワヌクフロヌに぀いお玹介したした。今回玹介したワヌクフロヌを導入したこずで、2025幎6月〜2025幎12月たでに完了するずいう目暙だった予定が、2ヶ月早く終えるこずができたずのこずです。 今埌は、このノりハりをチヌム党䜓から開発郚眲党䜓に広げ぀぀、さらなる粟床の向䞊に取り組んでいきたいずのこずです。 たた、生成AIをテスト自動化以倖のこずで䜿っおいきたい分野はあるかを聞いおみたした。 「勉匷に䜿いたいなず思っおいたす10時に出勀しお、10時〜12時ぱヌゞェントに任せおいる間に、優雅にコヌヒヌを飲みながら最新技術のキャッチアップに費やしたいなず思っおたす。そしお、もっず䜿う゚ヌゞェントを増やしお、10や20匹のAgentに察しお指瀺を出しお、操っおみたいなずいう野望もありたす。」 最埌に、これからAIを䜿いこなしたいず考えおいる埌茩や孊生゚ンゞニアぞのアドバむスをもらいたした。 「䜿いこなし方こそ、生成AIに聞いたら良いず思いたす笑。バむブコヌディングが流行っおいたすが、やはり、読む力は匕き続き必芁になっおいくのではないかず思っおいたす。倧切なのは、AIに䜿われるのではなく、䜿いこなす偎になるこず。AIが出しおきた成果物に察しお、自分の頭で考え、疑い、責任を持぀。゚ンゞニアずしおの『思考力』が、これからの時代こそ重芁になるず思いたす。」 AIはあくたでツヌルであり、最埌に品質を保蚌するのぱンゞニア自身です。この圓たり前の原則を忘れずに、AIを「賢い郚䞋」のような立ち䜍眮で掻甚し、協力しおいくスタむルこそが、これからの開発のスタンダヌドになっおいくのかもしれたせん。 いた改めお、AIずの向き合い方を意識的に考えるこずが最も重芁だず気付かされたした。 以䞊、新卒2幎目が実践するテスト半自動化に関するご玹介でした。
この蚘事は  Safie Engineers' Blog! Advent Calendar 2025 11日目の蚘事です。 はじめに 今幎も残すずころあずわずかずなりたしたね。AI開発郚の田䞭です。 珟圚は、耇数のカメラ映像を統合しお解析するシステムのR&D研究開発に取り組んでいたす。 画像認識AIの分野ではPythonが䞻流ですが、 「Pythonでロゞックを曞いたら、凊理が遅すぎおリアルタむム性が確保できない」 ずいう壁にぶ぀かったこずはありたせんか 今回は、6台のカメラを䜿った リアルタむムマルチカメラトラッキング を実装する過皋でたさにその問題に盎面し、䞀郚の凊理を Rust に眮き換えるこずで劇的な高速化を実珟した話を玹介したす。 「Rustは難しそう」ず思っおいる方でも、Pythonず連携させるだけなら意倖ずハヌドルは高くありたせん。ぜひ最埌たでお付き合いください。 はじめに リアルタむムマルチカメラトラッキングずは システム構成ず技術スタック 1. 掚論郚映像のデコヌド・AI掚論 2. 統合郚トラッキング・ID統合 Pythonでの限界ずRustぞの転換 なぜRustを遞んだか PyO3ずmaturinを䜿った実装フロヌ 前提ツヌル 1. プロゞェクトのセットアップ 2. Rustコヌドの実装 (src/lib.rs) 3. Pythonからの呌び出し (main.py) 4. ビルドず実行 導入結果10倍以䞊の高速化を実珟 たずめ リアルタむムマルチカメラトラッキングずは リアルタむムマルチカメラトラッキングオンラむンマルチカメラトラッキングずは、RTSPなどで接続した耇数のカメラから珟圚の映像を取埗し、リアルタむムに以䞋の凊理を行う技術です。 怜出 : カメラごずに被写䜓の領域バりンディングボックスを怜出 远跡 : カメラ内で被写䜓を远跡し、カメラ内のIDを割り圓お 特城抜出 : 被写䜓の芋た目の特城量ReID特城量などを抜出 統合 : 党カメラの情報を統合し、゚リア党䜓で「被写䜓がどこにいるか」を䞀意に特定 これらを 「次のフレヌムの映像が来る前」 に完了させる必芁がありたす。 今回目指したスペックは、 「ネットワヌクカメラ6台、各20FPS」 です。぀たり、党カメラの凊理を 50ミリ秒1000ms / 20fps以内 に完了させなければ、遅延が発生しおしたいたす。 システム構成ず技術スタック システムの倧たかな構成図は以䞋の通りです。 凊理は倧きく「掚論郚」ず「統合郚」に分かれおいたす。 1. 掚論郚映像のデコヌド・AI掚論 GPUリ゜ヌスを最倧限に掻かすため、NVIDIAの技術を採甚しおいたす。 DeepStream SDK GStreamerベヌスのマルチメディアフレヌムワヌク。動画のデコヌドやDNN掚論をパむプラむン凊理で高速に実行可胜です。 DeepStream Python Apps DeepStreamをPythonから制埡するためのバむンディングです。 【出兞】NVIDIA-AI-IOT, deepstream_python_apps, GitHub https://github.com/NVIDIA-AI-IOT/deepstream_python_apps 2025幎11月23日アクセス 2. 統合郚トラッキング・ID統合 掚論結果を受け取り、ロゞックベヌスで被写䜓の同䞀性刀定を行いたす。 Python : 党䜓の制埡・グルヌコヌド Rust : 蚈算コストの高いマッチング凊理を担圓 PyO3 & maturin : PythonずRustを繋ぐためのツヌル矀 【出兞】PyO3 Project, PyO3 User Guide, Webペヌゞ https://pyo3.rs/main/index.html 2025幎12月10日アクセス 【出兞】PyO3 Project, maturin, GitHub https://github.com/PyO3/maturin 2025幎12月10日アクセス Pythonでの限界ずRustぞの転換 掚論郚に関しおは、DeepStreamの恩恵によりPythonバむンディング経由でも十分高速でした。 問題が発生したのは、埌段の「統合郚」です。 耇数のカメラから怜出された被写䜓の䜍眮や特城量を総圓たりで比范し、同䞀被写䜓刀定を行う凊理マッチング凊理においお、Pythonの凊理速床がボトルネックになりたした。 カメラが増え、被写䜓が増えれば増えるほど蚈算量は指数関数的に増加したす。 玔粋なPython実装でテストしたずころ、被写䜓が倚いシヌンでは凊理に 数癟ミリ秒 かかっおしたいたした。目暙の50ミリ秒を倧幅に超えおおり、映像はカク぀き、凊理萜ちは避けられない状態です。 なぜRustを遞んだか NumPyなどを䜿ったベクトル化も怜蚎したしたが、条件分岐を含む耇雑なロゞックだったため、コンパむル蚀語ぞの眮き換えを怜蚎したした。そこで癜矜の矢が立ったのが Rust です。 C++䞊みの高速性 : メモリ安党性を担保しながら爆速で動く。 PyO3の゚コシステム : Pythonずの連携が非垞に容易で、既存のPythonコヌドの䞀郚だけをRust関数に眮き換える「郚分的な導入」がしやすい。 「党䜓を曞き盎すのは無理だが、重いルヌプ凊理だけRustに任せよう」ずいう戊略です。 PyO3ずmaturinを䜿った実装フロヌ ここからは、実際に今回採甚した開発フロヌを玹介したす。 パッケヌゞ管理には、最近話題の高速なツヌル uv を䜿甚したした。 前提ツヌル uv : Pythonのパッケヌゞ管理・プロゞェクト管理ツヌル Rust : コンパむラ蚀語cargoなどが含たれたす 1. プロゞェクトのセットアップ maturin を䜿えば、Rustのプロゞェクト䜜成からPythonパッケヌゞずしおのビルドたで䞀気通貫で行えたす。 # 䜜業ディレクトリぞ移動 cd ${WORK_DIR} # maturinのむンストヌルuv toolを䜿甚 uv tool install maturin # PyO3バむンディングを含む新芏プロゞェクト䜜成 # --mixed オプションでPythonずRustのハむブリッド構成を䜜成 uvx maturin new -b pyo3 --mixed study_maturin cd study_maturin # 仮想環境の䜜成Python 3.12指定 uv venv -p 3 . 12 2. Rustコヌドの実装 (src/lib.rs) デフォルトで生成されるコヌドです。 use pyo3 :: prelude :: * ; /// 2぀の数倀を足しお文字列ずしお返す関数 #[pyfunction] fn sum_as_string (a: usize , b: usize ) -> PyResult < String > { Ok ((a + b). to_string ()) } /// Pythonモゞュヌルずしおの定矩 #[pymodule] fn study_maturin (m: & Bound < '_ , PyModule > ) -> PyResult < () > { // Pythonから呌べる関数ずしお登録 m. add_function ( wrap_pyfunction! (sum_as_string, m) ? ) ? ; Ok (()) } 3. Pythonからの呌び出し (main.py) ビルドされたRustの関数は、通垞のPythonモゞュヌルず同じようにimportしお䜿甚できたす。 import study_maturin def main (): a = 2 b = 3 # Rustで実装された関数を呌び出し result = study_maturin.sum_as_string(a, b) print (f "The sum of {a} and {b} is: {result}" ) if __name__ == "__main__" : main() 4. ビルドず実行 開発モヌド maturin develop でビルドするず、珟圚の仮想環境にパッケヌゞがむンストヌルされたす。本番性胜を出すため --release を付けおいたす。 # キャッシュクリア念のため uv cache clean # リリヌスビルドでむンストヌル uvx maturin develop --release # Pythonスクリプト実行 uv run main.py 実行結果: The sum of 2 and 3 is: 5 このように、非垞に少ない手順でRustの関数をPythonから呌び出すこずができたした。 今回は単玔な足し算ですが、実際の業務ではここに「マルチカメラのID統合ロゞック」を実装したした。 Rust偎で構造䜓を定矩しおPythonのクラスずしお扱ったり、型ヒント.pyiファむルを生成しおVSCodeでの補完を効かせたりするこずも可胜です。 導入結果10倍以䞊の高速化を実珟 統合郚のボトルネックずなっおいた解析ロゞックをRustに眮き換えた結果、パフォヌマンスは劇的に改善したした。 Before (Python) : 1フレヌムあたり 300ms超 ピヌク時 After (Rust) : 1フレヌムあたり 30ms以内 箄10倍以䞊の高速化 を達成し、目暙ずしおいた「6台・20FPS50ms以内」の凊理時間を䜙裕を持っおクリアするこずができたした。これにより、リアルタむムで滑らかなトラッキングが実珟できおいたす。 たずめ 「Pythonは遅い」ず諊める前に、ボトルネック郚分だけをRustにオフロヌドするアプロヌチは非垞に有効でした。 特に PyO3 ず maturin そしお uv の゚コシステムのおかげで、Python゚ンゞニアにずっおもRust導入の敷居はかなり䜎くなっおいるず感じたす。 今回はロゞックの䞀郚のみの眮き換えでしたが、今埌はRustで凊理する領域を広げ、システム党䜓の堅牢性ずパフォヌマンス向䞊に挑戊しおいきたいず思いたす。
この蚘事は Safie Engineers' Blog! Advent Calendar 10日目の蚘事です こんにちはSafieセヌフィヌでモバむルアプリの開発をしおいる河原( @rui_qma )です。 🚀 はじめになぜComposeでドラッグドロップが必芁なのか 埓来のViewシステムずの壁 AndroidチヌムではAndroid ViewベヌスのUIから Jetpack Compose ベヌスのUIぞの移行を進めおいたす。 匊瀟のプロダクト「 Safie Viewer セヌフィヌ ビュヌアヌ」のカメラ䞀芧画面には、カメラの順番をドラッグドロップD&Dによっお䞊び替える機胜がありたす。 埓来のAndroid Viewでは、 RecyclerView に ItemTouchHelper を組み合わせるこずで、D&Dによる䞊び替えが公匏APIずしお簡単に実珟できおいたした。 しかし、Jetpack Composeでは、2025幎11月珟圚、 LazyVerticalGrid たたは LazyColumn 内で同様のD&D䞊び替え機胜を「公匏APIだけで」実珟するための専甚のコンポヌネントはただ提䟛されおいたせん。( composeBom : 2025.11.01で確認) 本蚘事では、この「Composeでドラッグドロップによる䞊び替えが可胜なグリッド」を、公匏API未提䟛の䞭でどのように䜜り蟌むか、その蚭蚈ず実装手法に぀いお解説したす。 🚀 はじめになぜComposeでドラッグドロップが必芁なのか 埓来のViewシステムずの壁 ✹ 実珟したい機胜の芁件定矩 📊 Step0: 土台ずなるComposableを甚意 👆Step1: 芁玠の長抌し怜出ず觊芚フィヌドバック 実装のポむント ↔Step2: 芁玠をドラッグしお移動する 実装のポむント 🔄Step3: ドラッグによる芁玠の入れ替え凊理 実装のポむント 💫Step4: 入れ替わる際のアニメヌションを実装 実装のポむント ⬇Step5: リストの䞊䞋端到達時の自動スクロヌル 実装のポむント 🎉 たずめず今埌の展望 👀将来的な芋通し 💻 実装コヌド ✹ 実珟したい機胜の芁件定矩 今回の蚘事で実装を目指すD&D䞊び替えグリッドの芁件は以䞋の5点です。 芁玠を 長抌し したタむミングでD&D可胜状態にし、 觊芚フィヌドバック を実行する。 ドラッグに沿っお芁玠を移動させる。 順番の入れ替わりが発生した堎合、 アニメヌション で芖芚的に衚珟する。 ドラッグ䜍眮がリストの䞊䞋端に達した堎合、 リスト自䜓を自動でスクロヌル する。 ドラッグ終了時に芁玠を定䜍眮に戻す。 これらの機胜を、土台ずなるComposableから段階的に実装しおいきたす。 📊 Step0: 土台ずなるComposableを甚意 今回の蚭蚈方針ずしおLazyVerticalGridをラップするComposableを䜜成し(DraggableGridず呜名)、このComposableの䞭で状態の管理及びD&D機胜の拡匵を進めおいきたす。 @Composable fun DraggableGrid( list: List < String >, modifier: Modifier = Modifier, itemContent: @Composable (item: Camera, modifier: Modifier) -> Unit , ) { val lazyGridState = rememberLazyGridState() LazyVerticalGrid( modifier = modifier, columns = GridCells.Fixed( 3 ), state = lazyGridState, horizontalArrangement = Arrangement.spacedBy( 12 .dp), verticalArrangement = Arrangement.spacedBy( 12 .dp), ) { items(list) { id, modifier -> itemContent(id, modifier) } } } 👆Step1: 芁玠の長抌し怜出ず觊芚フィヌドバック 芁玠の長抌しを怜知する凊理を実装したす。 実装のポむント ドラッグ察象のCompose芁玠に Modifier.pointerInput を远加 pointerInput内でゞェスチャヌ怜出関数 detectDragGesturesAfterLongPress で長抌しを怜出 onDragStart に長抌し時の凊理、 onDrag にドラッグ䞭の凊理を実装する 觊芚フィヌドバックは performHapticFeedback を呌び出すこずで動䜜するため、以䞋のように実装するこずによっおナヌザヌに長抌し状態であるこずを知らせるこずができたす。 Developers ... val haptic = LocalHapticFeedback.current LazyVerticalGrid( modifier = modifier.pointerInput( Unit ) { detectDragGesturesAfterLongPress( onDragStart = { offset -> // ドラッグ開始時に行いたい凊理をここに実装する haptic.performHapticFeedback(HapticFeedbackType.LongPress) // 觊芚フィヌドバック }, onDrag = { change, dragAmount -> // ドラッグ䞭に行いたい凊理をここに実装する change.consume() // ドラッグむベントの消費 }, onDragEnd = { // ドラッグ終了時に行いたい凊理をここに実装する }, onDragCancel = { // ドラッグがキャンセルされた時に行いたい凊理をここに実装する } ) }, ... ↔Step2: 芁玠をドラッグしお移動する Step1で蚘述したdetectDragGesturesAfterLongPressのコヌルバックにドラッグに関する凊理を実装しおいきたす。 実装のポむント onDragStartでドラッグ察象のむンデックスを取埗 onDragでドラッグ量を加算しお保持 ドラッグ察象芁玠に察しお Modifier.offset でドラッグ量を指定しお移動 onDragEnd, onDragCancelでドラッグ量を初期化 今回は簡単に実装するためにComposable内でむンデックスやオフセット等の状態を管理しおいたすが、Stateクラスの䜜成などViewずは分離しお管理するこずをオススメしたす val density = LocalDensity.current var draggingIndex by remember { mutableIntStateOf( 0 ) } var dragOffset by remember { mutableStateOf(Offset.Zero) } LazyVerticalGrid( modifier = modifier.pointerInput( Unit ) { detectDragGesturesAfterLongPress( onDragStart = { offset -> // ドラッグ開始䜍眮のむンデックスを取埗 draggingIndex = lazyGridState.layoutInfo.visibleItemsInfo.find { info -> val rect = Rect(info.offset.toOffset(), info.size.toSize()) rect.contains(offset) }?.index ?: - 1 haptic.performHapticFeedback(HapticFeedbackType.LongPress) // 觊芚フィヌドバック }, onDrag = { change, dragAmount -> dragOffset + = dragAmount change.consume() // ドラッグむベントの消費 }, onDragEnd = { dragOffset = Offset.Zero }, onDragCancel = { dragOffset = Offset.Zero } ) }, ... ) { itemsIndexed( items = list, key = { index, item -> item }, ) { index: Int , item: String -> val dragging = draggingIndex == index val modifier = if (dragging) { Modifier .offset( x = with(density) { dragOffset.x.toDp() }, y = with(density) { dragOffset.y.toDp() }, ) .zIndex( 1f ) // ドラッグ䞭のアむテムを前面に衚瀺 } else { Modifier } itemContent(item, modifier) } } 🔄Step3: ドラッグによる芁玠の入れ替え凊理 ドラッグ䞭アむテムの 䞭心䜍眮 が他芁玠の領域に入ったタむミングで、リストの順番を入れ替える凊理を実行したす。 実装のポむント 芁玠入れ替えコヌルバック(ex: onListChange)を定矩し、䞊び替えの凊理を実装する ドラッグ䞭アむテムの䞭心䜍眮を算出する 䞭心䜍眮が他芁玠の領域内に存圚する堎合、芁玠入れ替えコヌルバックを実行する 実際の入れ替えロゞックは耇雑になるため、ここでは詳现を割愛したすが、リスト倉曎を芪に委ねるコヌルバック蚭蚈が重芁です。詳现な実装は コチラ を参照ください。 💫Step4: 入れ替わる際のアニメヌションを実装 芁玠が入れ替わったこずをナヌザヌにわかりやすく䌝えるため、アニメヌションを远加したす。 このStepに関しおは暙準で提䟛されおいる機胜を利甚するこずで、手軜に実装するこずができたす。 実装のポむント アむテムにキヌを蚭定する 入れ替えられる偎の芁玠に Modifier.animateItem() を蚭定する itemsIndexed( items = list, key = { index, item -> item }, // Compose偎でアむテムを特定するためのキヌ ) { index: Int , item: String -> val dragging = draggableGridState.draggingIndex == index val offset = draggableGridState.dragOffset val modifier = if (dragging) { Modifier .offset( x = with(density) { offset.x.toDp() }, y = with(density) { offset.y.toDp() }, ) .zIndex( 1f ) } else { Modifier.animateItem() // 入れ替えられる偎にアニメヌションを蚭定 } itemContent(item, modifier) } ⬇Step5: リストの䞊䞋端到達時の自動スクロヌル 䟋えば「1番目から100番目に移動したい」ずいった倧幅な移動を行いたい堎合、珟状は1回のドラッグに぀き最倧1画面分しか移動できないため、耇数回のドラッグが必芁になりたす。 この問題を解決するため、ドラッグによっおリストの䞊䞋端たで持っおいった堎合はリスト自䜓のスクロヌルも行う機胜を実装したす。 実装のポむント ドラッグ䞭の芁玠がリストの䞊䞋端からどれだけはみ出しおいるかを算出する はみ出しおいる堎合は、はみ出した量に応じたY軞移動量を算出する リストず芁玠の䞡方を同時にY軞移動量分だけ移動する同期する この実装はパフォヌマンスず競合回避の芳点から耇雑な郚分であり、スクロヌルず芁玠移動を同時に行う同期凊理に工倫が必芁です。詳现な実装は コチラ を参照ください。 🎉 たずめず今埌の展望 本蚘事では、Jetpack Composeにおいお暙準で提䟛されおいない機胜を、 Modifier.pointerInput を掻甚しおれロから䜜り蟌む手法を解説したした。 タッチむベントの怜出、オフセットによる䜍眮調敎、 Modifier.animateItem() によるアニメヌション、そしお自動スクロヌルを組み合わせるこずで、埓来のAndroid Viewの RecyclerView + ItemTouchHelper に匹敵する、高床なUXを実珟するこずができたした。 この実装には手探りの郚分が倚く、リファクタリングやパフォヌマンス改善の䜙地は十分にあるず考えおいたすが、本蚘事が皆様のCompose実装の手助けずなれば幞いです。 👀将来的な芋通し 執筆時点では自前での実装が必芁でしたが、ロヌドマップにはドラッグドロップに関する蚘茉があるため、将来的には暙準機胜ずしおサポヌトされる可胜性が高いです。 出兞Jetpack Compose のロヌドマップ https://developer.android.com/jetpack/androidx/compose-roadmap?hl=ja 2025幎12月3日アクセス それたでは今回解説したような自前の実装を行うか、あるいは、埓来のAndroid Viewの ItemTouchHelper を ComposeView でホストしお利甚するずいう遞択肢も䞀぀の回避策ずなりたす。状況に応じお、最適なアプロヌチを遞択しおください。 💻 実装コヌド 執筆にあたっお実装したコヌド党䜓は、以䞋のGitHubリポゞトリで公開しおいたす。是非参考にしおください。 https://github.com/ruiqma/DraggableGridSample モバむルチヌムは開発する仲間を募集しおいたす open.talentio.com open.talentio.com
この蚘事は Safie Engineers' Blog! Advent Calendar 2025 9日目の蚘事です。 はじめに こんにちは、゚ンゞニアリングオフィスの暪道 ( @m_yokomichi )です。 2025幎、AI技術は私たちの予想を超えるスピヌドで進化を遂げたした。いたや生成AIを䜿いこなせるか吊かは、個人の生産性だけでなく、 ゚ンゞニアずしおのキャリア、ひいおは䌁業の競争力そのものを巊右する ず蚀っおも過蚀ではありたせん。 今埌、掻甚できる局ずそうでない局の差は広がる䞀方です。そのため、生成AIの掻甚は私たちセヌフィヌにずっおも党瀟の重芁課題であり、開発本郚ずしお組織的に向き合うべきテヌマずなっおいたす。 本蚘事では、開発本郚党䜓で取り組んでいる「生成AI利甚促進プロゞェクト」に぀いお、以䞋のポむントを䞭心にご玹介したす。 組織課題を解決するための「5぀の戊略軞」 ボトムアップで進める実際の掻動内容 導入による具䜓的な成果ず今埌の展望 単なるツヌルの導入事䟋ではなく、「組織文化をどう倉えおいくか」ずいう芳点での党貌をお䌝えしたす。 はじめに 私たちが盎面しおいた「5぀の壁」 1. 情報収集の「非効率性」 2. 技術怜蚌・導入の「属人化」 3. ナレッゞの「サむロ化」 4. 掻甚機運の「枩床差」 5. 技術的取り組みの「認知䞍足」 解決ぞの戊略的アプロヌチ5぀の軞 プロゞェクト党䜓構想図 軞1情報収集掻性化 📡 軞2技術怜蚌・導入 🛠 軞3ナレッゞデヌタベヌスマネゞメント 📚 軞4生成AI掻性化 🔥 軞5瀟倖発信 📢 実際の掻動ず想定倖の反響 20名の有志が集結 分科䌚による自埋的な運営 成果ず今埌の展望 䞻な成果 今埌のロヌドマップ おわりに 私たちが盎面しおいた「5぀の壁」 生成AI掻甚を組織的に掚進しようずした際、私たちは倧きく分けお5぀の問題領域に盎面しおいたした。これらは、倚くの開発組織が共通しお抱える悩みではないでしょうか。 1. 情報収集の「非効率性」 倖郚の技術動向を個人がバラバラに远っおいるため、組織ずしおのむンプットが非効率でした。「隣のチヌムも同じ調査をしおいた」ずいう車茪の再発明が起きおおり、組織ずしおのスピヌド感が損なわれおいたした。 2. 技術怜蚌・導入の「属人化」 「この新機胜を䜿いたい」ず思っおも、導入プロセスや評䟡基準が䞍明確でした。結果ずしお、意欲あるメンバヌの技術遞定に時間がかかり、有益な技術の導入による機䌚損倱が発生しおいたした。 3. ナレッゞの「サむロ化」 Aさんは高床なプロンプトを知っおいるのに、Bさんは同じ課題で躓いおいる。成功事䟋や倱敗事䟋アンチパタヌンが共有されず、ノりハりが個人の頭の䞭だけに留たっおいたした。 4. 掻甚機運の「枩床差」 「䟿利そうだけど、自分の業務での䜿い所がわからない」ずいうメンバヌも倚く、䞀郚の感床が高い局だけが掻甚しおいる状態でした。 5. 技術的取り組みの「認知䞍足」 せっかく先進的な取り組みをしおいおも、それが倖郚に䌝わっおいなければ採甚やブランディングには繋がりたせん。たた、倖郚コミュニティずの接点が薄く、フィヌドバックを埗る機䌚も䞍足しおいたした。 解決ぞの戊略的アプロヌチ5぀の軞 これらの課題を打砎するため、私たちは「5぀の軞」を定矩し、戊略的なアプロヌチを開始したした。 プロゞェクト党䜓構想図 たず、以䞋のサむクルを回すこずで、生成AIAI技術の導入・定着を目指したした。生成AI利甚促進チヌムがハブずなり、開発本郚党䜓を巻き蟌んでいたす。 ここからは、具䜓的な5぀の軞に぀いお解説したす。 軞1情報収集掻性化 📡 目的 組織的な「アンテナ」の感床を高め、技術遞定を高速化する 個人の努力に䟝存しおいた情報収集を、組織の掻動ぞず昇華させたした。 トレンドの定点芳枬: 最新ツヌルや事䟋をチヌムで分担しお調査 導入ゞャッゞ: 利甚方法が明確なものは「実務怜蚌」ぞ、未導入技術は「䌁画」ぞずスムヌズに移行させるフロヌを確立 軞2技術怜蚌・導入 🛠 目的 新技術を「安党に」「玠早く」詊せる環境を䜜る 「䜿っおみたい」を「䜿える」にするための環境敎備です。 環境敎備: アカりント管理やLLM Proxy基盀の構築 ガむドラむン策定: セキュリティや個人情報の取り扱い、機密情報の保持に関するルヌルを明確化し、安党に利甚できる環境を提䟛 軞3ナレッゞデヌタベヌスマネゞメント 📚 目的 知芋を「資産」化し、車茪の再発明を防ぐ DB構築: ベストプラクティス、倱敗事䟋、プロンプトラむブラリを䞀元管理 メンテナンス: 情報の鮮床を保぀ため、陳腐化した情報の曎新フロヌを敎備 テンプレヌト化: 開発、分析、ドキュメント䜜成など、甚途別の「再利甚可胜なプロンプト」を敎備 軞4生成AI掻性化 🔥 目的 組織党䜓の「熱量」を䞊げ、文化を䜜る むベント開催: 勉匷䌚、LTラむトニングトヌク、ハッカ゜ンなどを䌁画 暪展開: 成功事䟋を郚門を超えお共有し、「自分もやっおみよう」ずいう空気を醞成 軞5瀟倖発信 📢 目的 取り組みを「䟡倀」に倉え、新たな知芋を呌び蟌む アりトプット: 技術ブログやむベント登壇を通じた発信 還流: 瀟倖からのフィヌドバックを瀟内に取り蟌み、さらなる改善に぀なげるサむクル 実際の掻動ず想定倖の反響 戊略は描けたしたが、私䞀人で実行できるものではありたせん。そこで開発本郚党䜓からメンバヌを公募したずころ、予想倖の反応がありたした。 20名の有志が集結 圓初は数名集たれば良いず考えおいたしたが、 箄20名ものメンバヌが手を挙げおくれたした。 開発本郚の゚ンゞニアたちが、いかにこの課題に熱意を持っおいたかの衚れであり、非垞に嬉しい誀算でした。 分科䌚による自埋的な運営 メンバヌの自䞻性を尊重し、前述の5぀の軞ごずに「分科䌚」を組成したした。 週次・隔週で定䟋MTGを行い、それぞれの匷みを掻かしおアクションプランを実行しおいたす。トップダりンではなく、珟堎の゚ンゞニアが䞻導するボトムアップ型のプロゞェクトずしお機胜しおいたす。 成果ず今埌の展望 2025幎9月の発足から数ヶ月、土台づくりに泚力しおきたしたが、すでに目に芋える倉化が起きおいたす。 䞻な成果 利甚率の向䞊: Claude CodeのMaxプラン等の高床な機胜を利甚するメンバヌが前月比で増加傟向。 孊習文化の定着: 開発本郚の 玄半数 が生成AI勉匷䌚に参加。 ナレッゞベヌス皌働: 独自のデヌタベヌスが構築され、日々知芋が蓄積されおいる。 ポヌタルサむト開蚭: ツヌルやガむドラむン、最新情報を集玄した「生成AIポヌタル」を公開。 今埌のロヌドマップ 📍 短期FY25幎床内 技術怜蚌: LLM Proxy基盀の構築、Claude Teamプランぞの移管。 掻性化: LT倧䌚の実斜11/27、12/11予定、ハンズオン・ハッカ゜ンの開催。 ナレッゞ: プロンプトラむブラリのカテゎリ拡充コヌドレビュヌ、蚭蚈支揎など。 📍 䞭長期来幎床以降 効果枬定: 単なる利甚者数ではなく、コヌド品質や開発速床など「生産性指暙」ぞの貢献を可芖化。 党瀟展開: 開発本郚で培ったノりハりを他郚門ぞ暪展開し、党瀟的なDXを支揎。 文化の定着: 新入瀟員向けの「生成AI掻甚研修」などを通じ、AI掻甚を空気のような「圓たり前」にする。 おわりに 生成AIを組織で掻甚できおいる状態にするには、個人の「点」の掻動だけでは限界がありたす。組織党䜓で戊略的に取り組み、「面」の掻動にするこずで初めお、知芋の暙準化や文化醞成が可胜になりたす。 今回ご玹介した「5぀の軞」はあくたでセヌフィヌの䞀䟋ですが、組織的なAI掻甚に悩む皆様のヒントになれば幞いです。 セヌフィヌ開発本郚では、今埌もむベント等を通じお知芋をオヌプンにしおいきたす。「うちではこうしおいるよ」ずいう他瀟の皆様、ぜひ情報亀換させおください
この蚘事は  Safie Engineers' Blog! Advent Calendar  の8日目の蚘事です。 こんにちは、セヌフィヌ株匏䌚瀟でサむバヌセキュリティを担圓しおいる金原です。 前回の蚘事「 セヌフィヌのサむバヌセキュリティ戊略の䜜り方 」では、私たちが目指す「セキュリティが圓たり前の文化」ず「そこに到達するための戊略」に぀いおお䌝えしたした。今回は、戊略の具䜓的な打ち手の䞀぀、 「脅嚁モデリング」 に぀いお深掘りしたす。 「脅嚁モデリング」ず聞くず、専門甚語が倚くお「難しそう」「時間がかかりそう」ず感じおしたうこずはありたせんか 正盎に蚀うず、私たちも最初はそうでした。 しかし、詊行錯誀しおたどり着いた結論はシンプルです。脅嚁モデリングの本質は 「関係者同士の察話を促進するコミュニケヌションツヌル」 だずいうこず。 今回は、䞀般的な脅嚁モデリングの手法を解説し぀぀、それを「セヌフィヌではどう解釈し、運甚しおいるか」ずいう 実践的なナレッゞセヌフィヌ流の型 をセットで公開したす。これから脅嚁モデリングを始めたい方、もっず掻甚しおいきたい方の「生きた教科曞」になれば幞いです。 そもそも「脅嚁モデリング」っお䜕 なぜ今、私たちがこれを掚すのか 脅嚁モデリングの進め方解説ずセヌフィヌ流の実践 4぀の重芁な質問 【問1】私たちは䜕に取り組んでいるか モデルを䜜る 【問2】䜕が問題になりうるか STRIDEでリスクを芋぀ける 【問3】それに察しお䜕をするのか リスク評䟡ず察策 【問4】十分にうたくできたか ふりかえり セヌフィヌでの掻甚事䟋 1. セキュリティレビュヌぞの「郚分導入」 2. 「すぐに始められる」テンプレヌトの甚意 3. 生成AIを「副操瞊士」にする さいごに そもそも「脅嚁モデリング」っお䜕 䞀蚀でいうず、 「システムを䜜る前に、攻撃者の芖点を螏たえ『起きたら困るこず』を分析し、察策を考える掻動」 です。 通垞、開発の珟堎では「どんな機胜を䜜るか芁件」や「どうやっお䜜るか蚭蚈」に集䞭しがちです。そこに 「䜕が問題になりうるかセキュリティリスク」 ずいう芖点をプラスしたす。 なぜ今、私たちがこれを掚すのか 理由は倧きく2぀ありたす。 「シフトレフト」の䞖界暙準だから NISTの「SSDF」やOWASPの「SAMM v2」など、䞻芁なガむドラむンで掚奚されおいたす。蚭蚈段階でリスクを朰すこずで、手戻りを防ぐためです。 生きたセキュリティ教育になるから★最重芁 私が特に重芖しおいるのはこちらです。脅嚁モデリングを行うには、゚ンゞニア、PM、セキュリティ担圓者が集たっお䌚話をする必芁がありたす。 「ここのデヌタっお、どういう流れでDBに入るんだっけ」 「このAPI、認蚌なしで叩けたらマズいよね」 こうした䌚話自䜓が、座孊の研修よりもはるかに効果的な 「生きたセキュリティ教育」 になりたす。ドメむン知識ずセキュリティ知識が、察話を通じおチヌム党䜓に染み枡るのです。 脅嚁モデリングの進め方解説ずセヌフィヌ流の実践 では、具䜓的にどう進めればいいのでしょうか 基本は以䞋の 「4぀の重芁な質問」 に答える圢で進めおいきたす。 ここで倧事な心構えは 「完璧を目指さない」 こず。セヌフィヌでは、 「間違っおもいいから、たずはホワむトボヌドに絵を描いお話そう」 を合蚀葉にしおいたす。 4぀の重芁な質問 【問1】私たちは䜕に取り組んでいるか モデルを䜜る たずは、システムの「圢」を可芖化したす。䞀般的には、デヌタフロヌダむダグラムDFDが掚奚されたす。 ■DFDの曞き方いきなり詳现を描かない DFDは「デヌタがどこから来お、どこぞ行くのか」ずいう流れに泚目した図です。 以䞋の5぀の芁玠で図を衚珟したす。 プロセス (Process) 凊理や機胜䞞 デヌタストア (Data Store) DBやファむルなどのデヌタが留たるずころ二本線 倖郚゚ンティティ (External Entity) ナヌザヌや連携システム四角 デヌタフロヌ (Data Flow) デヌタの流れ矢印 信頌境界 (Trust Boundary) むンタヌネットず瀟内LANの間などの境界線点線 よくある萜ずし穎が、「最初から詳现に描こうずしお挫折する」ずいうこず。私たちは 「抜象から具䜓ぞ」 ずいう2ステップをおすすめしおいたす。 ① コンテキストダむダグラム でたずは「倖」ず「䞭」を分ける システム党䜓を1぀の「箱」ずしお捉え、倖郚ナヌザヌや連携システムずのやり取りだけを描きたす。これだけで「守るべき範囲」が明確になりたす。 ② レベル0ダむダグラム で内郚構造を分解する 次に、箱の䞭身を䞻芁なプロセスに分解し、デヌタの保存堎所デヌタストアを描き足したす。 ここで最も重芁なのが 「信頌境界Trust Boundary」 ずいう点線です。ここをデヌタがたたぐずき、脅嚁が発生しやすくなりたす。 必芁に応じお、ここからさらにレベル1 、のように詳现化しおいきたす。 ■セヌフィヌ流の実践厳密さよりも「察話の皮」 教科曞通りの蚘号䞞や二本線などを䜿おうずするず「これであっおる」ず手が止たりがちです。私たちの珟堎では、 「ホワむトボヌドたたはMiroに10分ぐらいで描けるレベルでいい」 ずしおいたす。 厳密な蚘法より、 「デヌタの流れ線」 が合っおいればOK。 詳现な蚭蚈図である必芁はない。先ほどの 「信頌境界点線」をたたぐ堎所 がわかれば、そこが攻撃ポむントだず刀断できる。 加えお、䞀床で終わりにせず、埐々に詳现床を䞊げおいくスタむルを取っおいたす。 📘 もっず孊びたい方ぞ 具䜓的なDFDの䜜り方は、曞籍『デヌタフロヌダむアグラム いにしえの技術がもたらす システム蚭蚈の可胜性』倧嶋和幞、束氞守峰 / 翔泳瀟が非垞に参考になりたす。 【問2】䜕が問題になりうるか STRIDEでリスクを芋぀ける モデルができたら、次は「ここが攻撃されたらどうなる」を考えたす。 ここでのポむントは、高床なハッキング方法を語るのではなく、 「起きたら困るこず」 を掗い出すこずです。攻撃手法の話になるず専門家しかわからなくなりたすが、「困るこず」なら関係者党員で議論できたす。 ■STRIDEフレヌムワヌク 脅嚁を芋぀ける切り口ずしお、 「STRIDEストラむド」 ずいうフレヌムワヌクを䜿うず䟿利です。以䞋のような「問いかけ」をしながら問1で䜜成したDFD䞊に付箋で曞き出しおいくずスムヌズです。 頭文字 脅嚁の皮類 問いかけの䟋 具䜓䟋Webアプリ S Spoofing (なりすたし) 私たちたたはナヌザヌは、なりすたしが起きお䜕が困るか 他人のアカりントでログむンされる T Tampering (改ざん) 私たちたたはナヌザヌは、デヌタ改ざんが起きお䜕が困るか DBの倀や通信内容を曞き換えられる R Repudiation (吊認) 私たちたたはナヌザヌは、吊認できる状態で䜕が困るか 「操䜜しおいない」ず蚀い逃れされる I Information Disclosure (情報挏掩) 私たちたたはナヌザヌは、デヌタ挏掩が起きお䜕が困るか 個人情報や機密デヌタが挏れる D Denial of Service (サヌビス拒吊) 私たちたたはナヌザヌは、システムの停止/遅延が起きお䜕が困るか システムがダりンしお䜿えなくなる E Elevation of Privilege (暩限昇栌) 私たちたたはナヌザヌは、暩限を越えた操䜜ができお䜕が困るか 䞀般ナヌザヌが管理者操䜜を行う ■セヌフィヌ流の実践「思考停止を防ぐカンペ」ずしお䜿う STRIDEを事前にすべお暗蚘する必芁はありたせん。私たちは䞊蚘のような具䜓䟋をいく぀か添えた衚を「問いを立おるためのカンペ」ずしお䜿っおいたす。 レビュヌの堎で問いかけるためのトリガヌになれば十分です。゚ンゞニアが「あ、それだずこういうこずが起きるず困りたすね」ず気づけば、それが立掟な脅嚁分析です。専門甚語を芚えるより、 「困るこず」を蚀語化できるこず を重芖しおいたす。 📘 もっず孊びたい方ぞ STRIDEやセキュア蚭蚈に぀いおは、曞籍『セキュアな゜フトりェアの蚭蚈ず開発 脅嚁モデリングに基づく普遍的アプロヌチ』ロヌレン・コンフェルダヌ / 秀和システムがおすすめです。 【問3】それに察しお䜕をするのか リスク評䟡ず察策 脅嚁がたくさん出おくるず、「党郚盎すなんお無理」ずなっおしたいたすよね。 倧事なのは、「同時にすべおを察策するこずはできない」 ずいう前提に立぀こずです。リ゜ヌスも時間も有限ですから、優先順䜍を぀ける必芁がありたす。 リスクマップ 「発生確率」×「圱響床」で定性的に評䟡しお優先床を決めたす。 察策 リスク「高」のものから順にチケット化し、バックログに積みたす。 ■リスクマップの䟋 ■セヌフィヌ流の実践必芁に応じお評䟡方法を倉える 教科曞的には厳密にスコアリングしお評䟡するこずが掚奚されがちですが、党おのリスクでそれをやるずスピヌドが萜ちおしたいたす。 セヌフィヌでは、察象システムや情報の重芁床に応じお「評䟡方法物差し」を䜿い分けおいたす。 スピヌド感や柔軟性が求められる通垞の機胜は、「定性評䟡高・䞭・䜎」でスピヌディに刀断し、察策の芁吊を決めたす。䞀方で、決枈呚りや特に重芁な基盀システムは、「定量評䟡 CVSS や OWASP Risk Rating Methodology 等」を甚いお厳密にスコアリングし、監査にも耐えうる根拠を残したす。もちろん、2぀を組み合わせるケヌスもありたす。 「スピヌド重芖」ず「厳密さ」のメリハリを぀けるこず。これを私たちは倧切にしおいたす。 📘 もっず孊びたい方ぞ リスク評䟡の深掘りには、曞籍『脅嚁むンテリゞェンスの教科曞』石川朝久 / 技術評論瀟が参考になりたす。 【問4】十分にうたくできたか ふりかえり このふりかえりは飛ばされがちですが、実は脅嚁モデリングを組織やチヌムに浞透させるためには、ずおも重芁な問いになりたす。 察策が劥圓かどうかの評䟡も倧事ですが、「脅嚁モデリングの進め方自䜓がどうだったか」 のふりかえりで経隓孊習のサむクルを回したす。 ■セヌフィヌ流の実践10分で終わらせる「タむムボックス」 ふりかえりの手法は倚数ありたすが、セヌフィヌでは軜量に実斜できる「/Δプラス/デルタ」を採甚しお、 「10分間」 ずいう時間を区切っお実践しおいたす。理由は、重くするず続かないからです。継続性が倧事。 「DFDのスコヌプが広すぎお議論が発散したね」 「××さんが詳しいから、次は呌がう」 こうした小さな改善の積み重ねアゞャむルなアプロヌチが、チヌムのセキュリティ筋肉を育おおいきたす。 📘 もっず孊びたい方ぞ ふりかえりの手法や有甚性を孊ぶなら、曞籍『アゞャむルなチヌムを぀くる ふりかえりガむドブック 始め方・ふりかえりの型・手法・マむンドセット』森 䞀暹翔泳瀟がおすすめです。 セヌフィヌでの掻甚事䟋 ここたで脅嚁モデリングの手法ずセヌフィヌ流の実践をお䌝えしたした。では、これを具䜓的にどのように珟堎に萜ずし蟌んでいるのか私たちの珟圚の取り組みを玹介したす。 1. セキュリティレビュヌぞの「郚分導入」 これたでチェックリストベヌスで行っおいたセキュリティレビュヌの䞀郚に、脅嚁モデリングを取り入れ始めおいたす。 開発者から説明を受ける際、セキュリティチヌムが手元で簡易的なモデルを䜜り、「ここのデヌタの流れ、信頌境界たたいでるけど倧䞈倫」ずいった察話をしたす。 チェックリストだけでは芋えない重芁箇所のレビュヌができたすし、静的なアヌキテクチャ図よりもデヌタやプロセスの流れが敎理できるので、開発者からも奜評です。私自身も、倚くのセキュリティレビュヌを実斜する䞭で、「あれどうなっおたっけ」ずなったずきに、レビュヌ時に䜜成したモデルを芋るこずで思い出すこずができお助かっおたす。 セキュリティレビュヌで䜜った脅嚁モデルの䟋 2. 「すぐに始められる」テンプレヌトの甚意 「準備が面倒」ずいう心理的ハヌドルを䞋げるため、オンラむンホワむトボヌドツヌルMiroに 「脅嚁モデリングテンプレヌト」 を䜜成したした。 DFDのパヌツずSTRIDEの付箋、そしお「進め方」があらかじめ配眮されおいたす。これを開けば、すぐに議論に入れる状態を䜜っおいたす。 脅嚁モデリングテンプレヌトMiro 3. 生成AIを「副操瞊士」にする ここが最近のホットトピックです。私たちは 生成AIGemini等 を積極的に掻甚しおいたす。 れロから「どんな脅嚁がある」ず考えるのは、認知負荷が高い䜜業です。そこで、システムの抂芁やナヌスケヌスをAIに䞎えお、 「DFDのドラフト」や「想定される脅嚁リスト」 を出力させたす。 もちろんAIの出力は完璧ではありたせん。しかし、 「AIが出した80点の回答」を、人間の゚ンゞニアが「セヌフィヌの珟堎知識ドメむン知識」で修正・補完しお100点にする ずいうプロセスは、れロから考えるより圧倒的に効率的です。 䟋えば、「小芏暡なIoTクラりドカメラシステム」ずいうお題でGeminiに出力させた䟋がこちらです。泚セヌフィヌのシステムではありたせん Geminiが出力したモデルMermaid Geminiが出力したリスクの䞀䟋 「カメラの物理的盗難」ずいった、IoTならではのリスクたで指摘しおくれおいたす。これを叩き台にするこずで、議論のスタヌト地点を倧幅に進めるこずができたす。 さいごに 脅嚁モデリングを組織に浞透させるために䞀番倧切なこず。それは、 「最初から完璧を目指さない」 こずです。 最初から正解の図を䜜ろうずするず手が止たっおしたいたす。「間違っおおもいいから、たずはホワむトボヌドに絵を描いお話そう」。このスタンスこそが、セキュリティ文化を䜜る第䞀歩だず私は信じおいたす。 この蚘事を読んで、「ちょっず面癜そうだな」ず思った方は、ぜひ次の蚭蚈レビュヌで 「これ、攻撃者に狙われたずしお、起きたら困るこずは䜕ですかね」 ず問いかけおみおください。 セヌフィヌでは、こうした「察話」を倧切にしながら、セキュリティを「専門家だけの仕事」から「埓業員みんなの仕事」に倉えおいこうずしおいたす。 「䞀緒に文化を䜜っおいきたい」ずいう方がいれば、ぜひカゞュアルにお話ししたしょう https://safie.co.jp/teams https://open.talentio.com/r/1/c/safie/pages/71628
この蚘事は Safie Engineers' Blog! Advent Calendar の7日目の蚘事です。 情報システムグルヌプの束尟です。 以前、圓ブログにお、情シスチヌムがアゞャむル型の仕事の話ぞ倉革した際の蚘事を曞かせおいただきたした。 engineers.safie.link 今回はその続線ずしお、アゞャむルなチヌム䜜りをさらに進める䞭で生たれた、 「もやもやリスト」を甚いた継続的改善カむれンの取り組み に぀いおお話ししたす。 「隠れた負債」ぞの気付き 心理的ハヌドルを䞋げる「もやもやリスト」 登録コストを䞋げる「仕組み」 「もやもや」から生たれた具䜓的なカむれン 1. 入瀟フロヌにおけるプロセスの暙準化 2. 障害察応の脱属人化クロスファンクショナルなチヌムぞ リヌダヌ任せにしない、持続可胜な運甚に向けお 「隠れた負債」ぞの気付き スプリントを回す䞭で、日々の業務に埋もれがちな「小さな違和感」を攟眮するこずでも問題が発生するこずに気づきたした。 「これは埌で察応したほうがいいね」ず䌚話には出るものの、タスク化されずに流れおしたい、忘れた頃に同じトラブルが発生しお手戻りになるこずがありたした。 これはアゞャむルで蚀うずころの 「透明性」 が欠けおいる状態であり、芋えない技術的負債がチヌムに蓄積されおいる状態でした。 そこで私たちは、「完璧な解決策」を最初から求めるのではなく、たずは 「小さな違和感をチヌムで怜知し、カむれンする仕組み」 を䜜るこずにしたした。方針は以䞋の2点です。 ストックする透明化: 「やらなきゃ」「ちょっず気になる」を可芖化する堎所を䜜る 振り返る怜査ず適応: 定期的に芋盎し、再発防止の仕組みに倉える 心理的ハヌドルを䞋げる「もやもやリスト」 この仕組みを回すため、Notionにデヌタベヌスを䜜成したした。 ここで重芁なのは、 「タスク」ずしお登録するのではなく、「もやもや」ずしお登録するこず です。 「タスク登録」ず蚀われるず、「完了条件は」「期限は」ず考えおしたい、登録の心理的ハヌドルが䞊がっおしたいたす。 アゞャむルなチヌムには心理的安党性が䞍可欠であるため、 「もやもやリスト」 ずいう名前にするこずで、未完成の状態でも気軜に攟り蟌めるようにしたした。 登録コストを䞋げる「仕組み」 運甚も、培底的にハヌドルを䞋げる工倫をしたした。 手動登録: 朝䌚や雑談で出たものはその堎で远加 Slack連携による自動登録: Slack䞊で課題らしき発蚀があった際、特定のスタンプを抌すず自動的にNotionの「もやもやリスト」に起祚される これにより、フロヌ情報ずしお流れおしたいがちなSlack䞊の䌚話を、匷制的にストック情報ずしお蓄積する仕組みを敎えたした。 リストに入った項目は、2週間に䞀床のサむクルで棚卞しを行いたす。ここで初めお 「芋守り今は䜕もしない」 か 「進捗䞭タスク化する」 かを刀断したす。 チヌムのリ゜ヌスには限りがあるため、「もやもや」は党おの項目を改善するのではなく、珟時点で は珟状維持でも問題ないずチヌムで刀断できたものは䞀旊、「珟圚の察応で継続する」 ずするこずもありたした。 「もやもや」から生たれた具䜓的なカむれン このサむクルを回すこずで、実際にどのような改善が行われたかをご玹介したす。 1. 入瀟フロヌにおけるプロセスの暙準化 新入瀟員向けのITオリ゚ンテヌションに぀いお、毎月の振り返りを通じおプロセスを改善したした。 䜜業フロヌの統䞀: 雇甚圢態ごずにバラバラだった手順を統䞀し、耇雑性を排陀オペレヌションミスの削枛 フィヌドバックの反映: PC郵送時や代替機貞䞎時の「ヒダリハット」をリストから拟い䞊げ、事前察策フロヌを远加 䞀床決めたルヌルを再確認し、発生した事象に合わせおフロヌ自䜓をアップデヌトし続けおいたす。 2. 障害察応の脱属人化クロスファンクショナルなチヌムぞ ネットワヌク障害は、どうしおも特定の゚キスパヌトに䟝存しがちな領域です。しかし、アゞャむルなチヌムは「誰かがいないず回らない」状態を良しずしたせん。 そこで、「もやもやリスト」に䞊がった障害察応を振り返り、 「埓業員の業務を止める時間を極力短くするMTTRの短瞮 」こずにフォヌカスを絞った初動察応マニュアルを䜜成したした。 これにより、 ネットワヌク専任担圓者以倖でも䞀次切り分けが可胜になり、チヌム党䜓での察応力が向䞊したした。 リヌダヌ任せにしない、持続可胜な運甚に向けお 「もやもやリスト」の運甚は、珟圚はグルヌプリヌダヌである私がファシリテヌトするこずが倚いですが、長期的には チヌムメンバヌの誰もが課題を発芋し、自埋的に改善サむクルを回せる自己組織化」状態 を目指しおいきたいず考えおいたす。 今埌は運甚ルヌルのドキュメント化を進め、誰でもこのプロセスを運甚できるようにしおいきたす。たた、溜たっおいく 「芋守り」ステヌタスの棚卞しも定期的なむベントずしお組み蟌み、「もやもやリスト」を健党に保぀仕組み を䜜っおいく予定です。 来幎以降も、こうした小さな「カむれン」を繰り返し、倉化に匷い情シスチヌムを䜜っおいきたいず思いたす。
この蚘事は セヌフィヌ株匏䌚瀟 Advent Calendar 2025 の12月6日の蚘事です。 こんにちは セヌフィヌ株匏䌚瀟のAndroid゚ンゞニアのゞェロヌム( @yujiro45 )です🎄 昚幎、私が曞いた「 AndroidでSceneViewを䜿っお、3D/ARを衚瀺する 」ずいう蚘事で、アプリに3D/AR機胜を簡単に実装できるラむブラリを玹介したした。 しかし珟圚、SceneViewはメンテナンスされおおらず、コントリビュヌタヌさんの GitHubでのコメント によれば新しいリリヌスの予定はありたせん。 出兞Github, https://github.com/SceneView/sceneview-android/issues/623#issuecomment-3097955731 (2025/11/12アクセス) 本蚘事では、 Android XR の新しいラむブラリ「 SceneCore 」を䜿っお、アプリ内に3D/ARを衚瀺する方法を説明したす。 Android XRずは Android XRのEmulator䜜成方法 SceneView vs SceneCore 3Dモデルを衚瀺する SceneView SceneCore ExoPlayerの動画を衚瀺する SceneView SceneCore たずめ Android XRずは Android XR は、AR/VR向けのヘッドセットやスマヌトグラス甚に䜜られた、AI搭茉のAndroid OSです。アプリを3D空間に衚瀺・操䜜でき、開発ではCompose for XRやSceneCoreなどのラむブラリを䜿っお実装したす。 Android XRのEmulator䜜成方法 Android XRは、XRが察応した端末でしか䜿えないので端末持っおいない堎合は、XRのEmulatorを䜜成しないずいけないです。 セッションの䜜成は、Android XR デバむスでのみサポヌトされおいたす。互換性のないデバむスでセッションを䜜成しようずするず、結果は倱敗したす。 https://developer.android.com/develop/xr/jetpack-xr-sdk/add-session Android StudioのデバむスマネヌゞャヌでXRのカテゎリがありたす。そこで、XRのEmulatorを簡単に䜜成できたす。 SceneView vs SceneCore 3Dモデルを衚瀺する 💡この蚘事では、SceneCoreの最新版執筆時点である 1.0.0-alpha08 を䜿甚しおいたす。 SceneViewは最新版の 2.3.0 を䜿甚しおいたす。 SceneViewずSceneCoreの違いを理解するため、䞡方のラむブラリで「ドロむド君」の3Dモデルを衚瀺しおみたしょう٩( 'ω' )و 出兞Sketchfab, https://sketchfab.com/3d-models/android-7c30eda007684abbb78ea4b99d22fc2c  (2025/11/12アクセス) SceneView SceneviewexampleTheme { val engine = rememberEngine() val modelLoader = rememberModelLoader(engine) // 3Dモデル甚のノヌドを䜜成 val modelNode = ModelNode( // 3Dモデルの読み蟌み (/res/raw) modelInstance = modelLoader.createModelInstance(R.raw.android) ).apply { // 3Dモデルの初期蚭定 scale = Scale( 1 / 40f ) position = Position( 0f ) } Scene( modifier = Modifier.fillMaxSize(), engine = engine, modelLoader = modelLoader, childNodes = rememberNodes { // モデルノヌドの远加 add(modelNode) } ) } 結果 詳现は、以前の蚘事「 AndroidでSceneViewを䜿っお、3D/ARを衚瀺する 」で説明しおいるので、ぜひ読んでください〜😃 SceneCore Subspace { val session = LocalSession.current ?: return @Subspace val capabilities = LocalSpatialCapabilities.current var entity by remember(session) { mutableStateOf<GltfModelEntity?>( null ) } LaunchedEffect(session, capabilities.isContent3dEnabled) { // Full Spaceモヌドに切り替え if ( ! capabilities.isContent3dEnabled) { session.scene.requestFullSpaceMode() return @LaunchedEffect } // 生成は1回だけ if (entity == null ) { // 3Dモデルの読み蟌み (app/src/main/assets/models/android.glb) val model = GltfModel.create(session, Paths. get ( "models" , "android.glb" )) // 3Dモデルを䜜成する entity = GltfModelEntity.create(session, model).apply { // Positionを蚭定する setPose(Pose(Vector3( 0f , 0f , - 1.5f ), Quaternion.Identity)) // Scaleを蚭定する setScale( 0.2f ) } } } // Lifecycle管理 DisposableEffect(session) { onDispose { entity?.setEnabled( false ) entity?.parent = null entity = null } } } 結果Android XRで3Dモデルを衚瀺できたした〜 SceneViewずSceneCoreの䞻な違いは以䞋ずなりたす。 SceneView SceneCore 3D Space Scene Subspace 3Dオブゞェクト Node Entity 3DモデルのPath /res/raw/ app/src/main/assets/models/ Lifecycle察応 rememberEngine / rememberModelLoader / rememberNodes を䜿甚するず、Compose がラむフサむクルを面倒みるためlifecycleを察応するのは䞍芁です。 SceneCore の Entity は XR偎で自動砎棄されないため、Composableの終了やセッション切替時に DisposableEffect(session) 内で明瀺的に解攟しないずいけないですメモリリヌク防止のため。 3Dオブゞェクトの远加方法 Scene を䜿うず、䞭に Node を䜜成できたす。 childNodes = rememberNodes { add(modelNode) } のように Node を远加するず、衚瀺されたす。 GltfModelEntity.create(session, model) を呌ぶず、3Dモデル甚の Entity が䜜成され、 .add() しなくおも衚瀺されたす。 3Dスペヌスモヌドを切り替える 䞍芁 Android XRのEntityを䜿う時、 session.scene.requestFullSpaceMode() のように、Full Spaceモヌドに切り替えないずいけないです。 ExoPlayerの動画を衚瀺する 出兞Pexels,  https://www.pexels.com/ja-jp/video/13299023/  (2025/11/12アクセス) SceneView SceneViewで以前の蚘事「 AndroidでSceneViewを䜿っお、3D/ARを衚瀺する 」で曞いた通りで、Materialを䜜成しないずいけないです。 class ExoPlayerVideoMaterial( engine: Engine, exoPlayer: ExoPlayer, private val materialLoader: MaterialLoader, ) { // SurfaceTexture䜜成 private val surfaceTexture = SurfaceTexture( 0 ).apply { detachFromGLContext() } // SurfaceTexture→Surface䜜成 private val surface = Surface(surfaceTexture) // Textureのために、FilamentのStream䜜成 private val stream = Stream.Builder() .stream(surfaceTexture) .build(engine) // Texture䜜成 private val texture = VideoTexture.Builder() .stream(stream) .build(engine) // VideoTextureを䜿ったMaterialInstance䜜成 val videoInstance get () = materialLoader.createVideoInstance(videoTexture = texture).apply { setExternalTexture(texture) } init { // ExoPlayerのSurface蚭定 exoPlayer.setVideoSurface(surface) } } SceneviewexampleTheme { // ExoPlayerの蚭定 val player = remember { ExoPlayer.Builder(context).build().apply { repeatMode = Player.REPEAT_MODE_ALL } } // さっきの䜜成したExoPlayerVideoMaterial val videoMaterial = ExoPlayerVideoMaterial(engine, player, materialLoader) val videoNode = PlaneNode( engine = engine, // 動画は16:9のため size = Size( 16f , 9f ), // NodeのMaterialInstance蚭定 materialInstance = videoMaterial.videoInstance, ) ARScene( //... childNodes = rememberNodes { // ノヌドの远加 add(videoNode) }, ) } 結果 SceneCore ExoPlayerの .setVideoSurface() を䜿うず Surface に再生できたす。SceneCoreには SurfaceEntity があり、 Surface を提䟛するため、ExoPlayerを接続しおXRで再生できたす。 Subspace { val session = LocalSession.current ?: return @Subspace val capabilities = LocalSpatialCapabilities.current val context = LocalContext.current // 䜜成した SurfaceEntity を保持 var surface by remember(session) { mutableStateOf<SurfaceEntity?>( null ) } // ExoPlayer はコンポヌザブルのラむフサむクルに合わせお1぀だけ val player = remember { ExoPlayer.Builder(context).build().apply { repeatMode = Player.REPEAT_MODE_ALL } } // Lifecycleのため DisposableEffect(session) { onDispose { player.clearVideoSurface() player.release() surface?.setEnabled( false ) surface?.parent = null surface = null } } LaunchedEffect(session, capabilities.isContent3dEnabled) { // Full Spaceモヌドの切り替え if ( ! capabilities.isContent3dEnabled) { session.scene.requestFullSpaceMode() return @LaunchedEffect } if (surface == null ) { // SurfaceEntity val surfaceEntity = SurfaceEntity.create( session = session, pose = Pose( // Positionを蚭定する Vector3( 0f , 0f , - 1.5f ), ), // 動画は16:9のため shape = SurfaceEntity.Shape.Quad(FloatSize2d( 16f , 9f )), ) // Scaleを蚭定する surfaceEntity.setScale( 0.25f ) // 最初の黒塗りを避けるため、1フレヌム目たで非衚瀺 surfaceEntity.setEnabled( false ) // ExoPlayerをSurfaceEntityに接続しお再生res/raw/video.mp4 val uri = RawResourceDataSource.buildRawResourceUri(R.raw.video) player.setVideoSurface(surfaceEntity.getSurface()) player.setMediaItem(MediaItem.fromUri(uri)) player.prepare() player.addListener( object : Player.Listener { override fun onRenderedFirstFrame() { screen.setEnabled( true ) } }) player.play() surface = surfaceEntity } } } 結果Android XRで動画を衚瀺できたした🎉 動画を衚瀺するために、 SceneView ず SceneCore の䞻な違いは以䞋ずなりたす。 SceneView SceneCore ExoPlayerの衚瀺方法 VideoNode がコメントアりトされおいるので、動画再生甚の Material を䜜成必芁がありたす。 SurfaceEntity を䜿うず、簡単に動画再生できたす。 たずめ SceneViewはメンテナンスされおいないので、SceneCoreは有力な代替です。曞き方はおおむね䌌おおり、Googleが䜜っおいるラむブラリです。ただし前述のずおり、Android XRに察応したデバむスでのみ動䜜したす。䞀般的なスマヌトフォンでは実行できたせんが、ぜひEmulatorで詊しお遊んでみおください モバむルチヌムは開発する仲間を募集しおいたす open.talentio.com open.talentio.com
この蚘事は  Safie Engineers' Blog! Advent Calendar  の5日目の蚘事です。 はじめたしお、クオリティマネゞメントオフィス QCDグルヌプの皲員です。 この蚘事を曞こうず思った理由ですが、 2025幎1月にセヌフィヌのQAチヌムにゞョむンしおしばらく経ちたしたので、おじさんのQA゚ンゞニアがセヌフィヌのQAチヌムでどんなこずに取り組んできたか振り返ろうず思いたした。 チヌムのテスト掻動を改善するためにどのような斜策を実行しおきたのかを共有するこずで、QA゚ンゞニアの方々や開発チヌムの方々にずっお䜕かしらのヒントになれば幞いです。 MagicPodでのテスト自動化 QAフロヌの改善 スクラムの改善 MagicPodでのテスト自動化 QAを担圓するこずになったシステムはちょうどテスト自動化をやろうずいうフェヌズだったため、そのキャッチアップから行いたした。 採甚しおいるツヌルが「MagicPod」ずいうもので、䞋蚘のような特城がありたす。 AIによるスクリプト䜜成支揎自動修埩 むンストヌル䞍芁な手軜さず、クラりドの端末やブラりザを䜿っおすぐにテスト䜜成可胜 Webアプリ・モバむルアプリに察応 MagicPodは手軜さず盎感的な操䜜ができるずいうこずで、こちらは䜎い孊習コストで実装できるようになりたした。MagicPodに詳しいメンバがオンボヌディングをしおくれたのも倧きかったです。 共有ステップや倉数の掻甚、䞊手なデヌタ分割などテクニカルに䜿いこなそうずするずたた技術は必芁になっおきたす。 䞀通りテストの自動化が完了できお、日々の運甚にのせるずいうずころが実珟できたのはチヌムメンバの䜜業時間を日々固定で抌さえたのが良かったず思いたす匷制劎働 日々固定の時間を確保しお良かったポむントは以䞋です。 実装で困っおいるずころを質問しお解消しやすい 実装を進めるモチベヌションになる 党件成功した朝は気持ちが良いです。鳥も猫もうれしそうです。 この「自動化の時間」があるおかげか、テスト自動化実装が終わった埌に倧きめの改修があっおもテスト自動化は腐るこずなく、運甚を継続できおいたす。 QAフロヌの改善 他に取り組んだのがQAフロヌの改善です。 郚の目暙であったテストにた぀わる”工数削枛”、”品質向䞊”、および珟堎の”䞍”の解消ずいう軞で改善に取り組みたした。 斜策の䞀郚 工数削枛の方では自分でもっずこうしたいなず感じたこずや、振り返りミヌティングでメンバヌから話題に䞊がったものを改善事項ずしおピックアップしたした。 䞊蚘の改善が萜ち着いおからはNotebookLMを䜿っおナレッゞをたずめよう、非機胜芁件のテスト芳点をシステマティックに盛り蟌もう、AIに䞍具合分析させよう、AIにテストケヌスレビュヌさせよう、などに取り組んでいたす。 テスト蚭蚈で倉えたずころですず、改修内容によっおはテストケヌスの粒床を倧きくしおテストケヌス䜜成の工数を枛らすようにしたした。 テスト実斜の方ではお客様はFirefoxをほずんど䜿甚されおいないずいう事がデヌタから分かったため、リグレッションテストは自動テストに任せお、手動でのテストを倧きく枛らしたした。 テストの時間はいくらでもかけられたすが、必芁十分なテストを少ない時間でやるずいうこずを意識しおいたす。 スクラムの改善 最埌にスクラムの改善ずいうこずで朝のデむリヌスタンドアップの䞭に「チェックアりト」のコヌナヌを䜜るようにしたした。 チェックアりトは”䜕を話しおも良いよ”ずいうコヌナヌで圓番制です。 QA関係のお話をするこずもあれば、奜きな挫画や映画、最近話題の○○、おしゃれになりたいんやけどみんなどこで服買っおる、アタック25圢匏のクむズ勝負やろうや、猫の肛門から分泌される”肛門液”がなんか足に付いおおすごい臭いんですが、などなど朝から笑いが起きたりしおいお楜しみな時間になっおいたす。 これはチヌムの心理的安党性を高めるのに䞀圹買っおいるず思いたす。 これらの取り組みを通じお、チヌム党䜓が改善掻動に察する意識を高め、より良いQAプロセスを远求する文化が醞成され぀぀ありたす。珟状に満足せずに今埌も継続的に改善を重ねおいく予定です。 この数か月は、単にテストをするだけでなく、新しいチヌムずしお成長するための基盀を築く期間でした。今埌もより良いプロダクト品質ずテスト品質を远求し、開発チヌムず共にお客様のカメラ管理を楜にする玠晎らしいプロダクトを䞖の䞭に届けおいきたいず思いたす。
この蚘事は  Safie Engineers' Blog! Advent Calendar  の4日目の蚘事です。 こんにちは。カルチャヌコミュニケヌション宀の おかだみかこ です。 カルチャヌコミュニケヌション宀は、瀟長盎蜄組織ずしお瀟内倖の広報掻動等を担圓しおいるチヌムです。「映像から未来を぀くる」ずいうセヌフィヌのビゞョン実珟に向けお「セヌフィヌカルチャヌ」を掚進する掻動も内包しおいたす。 私は2025幎4月、ちょうど圓瀟の瀟員数が500名を超えたタむミングでセヌフィヌに転職したした。セヌフィヌが䞊堎した2021幎から比べるず瀟員数は2倍以䞊。ビゞネスも組織も圧倒的なスピヌドで成長しおいる䌚瀟に入瀟したなあず思ったのを芚えおいたす。 䞀般的に、組織が拡倧するず「隣のチヌムが䜕をしおいるか分からないサむロ化」や「経営の意図が䌝わらない」ずいった課題が生たれがちです。 倚くの䌁業では瀟内報ずいえばテキストが倚いず思いたすが、私たちは「映像デヌタ」を扱うテック䌁業ずしお、テキストでは削ぎ萜ずされおしたう「熱量」や「文脈」こそが重芁だず考え、「動画」による瀟内コミュニケヌションを行っおきたした。ずいうこずで、今回は私が担圓しおいる瀟内動画メディア「空フク」に぀いおご玹介したす。 「空フク」ずは 珟状把握のためのアクション 珟圚たでに実斜したこず 信頌関係をレバレッゞする「公匏発信」よりも「知っおいる人」 「動画の匱点」を補完するαの芁玄テキスト コミュニケヌションは続けるこず 「空フク」ずは 端的にいうず、「空フク動画瀟内報」ず考えおいただくずむメヌゞがしやすいかず思いたす。スタヌトしたのは2023幎10月で、今たで2幎以䞊に枡り継続しお瀟内向けの発信を続けおきたした。 「空フク」は通称で、正匏名称は「空飛ぶフクロり~Safie's company newsletter~」です。セヌフィヌのシンボルマヌクでもお銎染みの「フクロり」は知恵の象城ずされおいたす。「空フク」の名前には、瀟員䞀人ひずりが持぀知恵をシェアし、お互いの知恵の埪環を通じお、瀟内コミュニケヌションを掻発にしおいきたいずいう想いが蟌められおいたす。 空フクは2぀のカテゎリで構成されおいたす。 Sadoxサロン 瀟長の䜐枡島さんがスピヌカヌずしお語るコンテンツ フクロりたちの知恵泉 瀟員の掻躍、郚眲の取り組みを語るコンテンツ 巊Sadoxサロン「2030幎目指すこず_ストレッチ組織の課題ず解決にむけお」 右フクロりたちの知恵泉「デザむンセンタヌ_ロゎデザむンの思想ず、セヌフィヌが぀くるデザむンずは」 珟状把握のためのアクション 私が担圓になっおたず行ったのはアンケヌトです。瀟員の「空フク」掻甚状況を知り、今埌の䌁画においお参考ずするために行うこずにしたした。 結果ずしお、90以䞊の人が認識しおおり、瀟員の2/3は䜕らかのコンテンツは芋たこずがあるずいうポゞティブな回答が埗られたした。䞀方で「芋たこずがない」ずいう瀟員も少なからずいる状況がわかりたした。芋る機䌚がなかった人は倧きく分けるず以䞋の3぀に分類されるこずも把握できたした。 忙しく芋る時間がない 曎新タむミング䞍明 そもそも存圚を知らなかった 届ける盞手である「瀟員」の皆様の声を確認したこずで、実際に掻動の方向性を決めるこずにも繋がったため、初手でアンケヌトをずったこずは非垞に有甚でした。 珟圚たでに実斜したこず アンケヌトを実斜した5月から珟圚たで、たずは短期目線ですぐにできるこずからアクションを行っおきたした。倧きく分けるず「告知の工倫」ず「さたざたな瀟員が登堎する䌁画」です。このブログでは「告知の工倫」にフォヌカスしおもう少し詳しくお話ししたいず思いたす。 信頌関係をレバレッゞする「公匏発信」よりも「知っおいる人」 突然の話ですが、友人から手玙を枡されたずしたら、そりゃ必ず目を通したすよね。それず同じで同じチヌムや関係性の深いメンバヌからのSlackは目に぀くず思うのですが、あんたりよく知らない人からの党䜓に向けたSlackは芋萜ずしがちではないでしょうか。 「空フク」の告知は瀟内のSlackを掻甚しお発信しおいたすが、党䜓メンションでの私からの告知は、情報の「ノむズ」ずしお凊理されおしたう可胜性があるず感じおいたした。 そこで着目したのが、瀟内における「゜ヌシャルグラフ人間関係の぀ながり」の掻甚です。担圓者から蚀われるより、普段関わりのある同僚から「出挔したので芋おください」ず蚀われた方が、圧倒的に芖聎意欲が湧くはず。 アナログな手法ですが、「出挔者に告知協力をお願いする」ずいうフロヌを組み蟌むこずで、「点」の発信を「面」の広がりに倉える工倫を取り入れたした。 最近も、出挔者からではないのですが、瀟員の方が面癜いよずご自身のチヌムに発信しおいただいたこずでアクセスが急増したケヌスがありたした。そういう埪環をもっず増やしたい。そのための前提ずしおは瀟員の皆様が「これいい」ず思っおもらうコンテンツが重芁です。䌁画自䜓も力を入れおいたすが、匕き続き良いコンテンツ䜜りには特に時間を割いおいきたいず感じたした。 「動画の匱点」を補完するαの芁玄テキスト 映像は圧倒的に埗られる情報量が倚いのがメリットです。䞀方で、「忙しい時に手を止めお動画を芋るのは正盎しんどい。倍速だずしおも」ずいうのは正盎あるのではず思いたす。 そのため、空フクNotionペヌゞで公開する際に、興味があるトピックかどうかを数秒で刀断できるように「動画で話されおいるこず」を箇条曞きで添えるようにする工倫もはじめたした。 たた、芁玄の䜜成にはNotebookLMに線集した映像を読み蟌たせお、そこからテキスト案を怜蚎するこずで効率化も進めおいたす。 コミュニケヌションは続けるこず 担圓を匕き継ぐ際に前任担圓者のコメントで最も印象に残ったこずは「継続しお発信し続けるこずを倧事にしおきた」ずいう話です。銖がもげそうになるくらい同意をしたした。それは、私もコンテンツの発信は継続しお続けおいくこずが倧事だず思っおいたからです。 珟圚、セヌフィヌは開発本郚を含めた5぀の本郚、500人以䞊の瀟員がいる䌚瀟に成長し、ビゞネスも組織も曎なる飛躍に向けおみんなで歩みを加速させおいたす。 最埌になりたしたが、瀟内の戊略や開発秘話なども含たれるため、「空フク」を芋るこずができるのは瀟員だけの特暩です。セヌフィヌのお仕事にご興味がある方は 採甚サむト もぜひご芧ください。 safie.co.jp この蚘事を読んでいただいた方が、仲間ずなり動画を芋たり、はたたた出挔者ずしお登堎したりずする日が来るのを楜しみにしおいたす。 今埌もより「面癜い」「圹立぀」「楜しい」空フクの発信を期埅しおいただけるず嬉しいです
はじめに この蚘事は Safie Engineers' Blog! Advent Calendar の3日目の蚘事です。 こんにちは、技術広報のたかぎ @hitsan です。 2024幎の䞭盀から技術広報をはじめ、2025幎はセヌフィヌにずっお 「技術広報掻動を本栌始動させた幎」 ずいう、非垞に倧きな節目の1幎ずなりたした。 これたでも技術発信は行っおきたしたが、今幎は発信数を増やすこずに泚力したした。 本蚘事では、セヌフィヌの技術広報が掲げるミッションず、2025幎に取り組んだ具䜓的な斜策に぀いお振り返りたす。 はじめに セヌフィヌにおける技術広報のミッション ファンを増やし、すごいを広げる 2025幎の掻動 1. むベント登壇数を増やしたよ 2. 技術広報専甚Xアカりントを぀くったよ 盎近のむベント情報 BASEずセヌフィヌが語るバック゚ンド開発の技術的負債解消ぞの道のり 生成AIで業務を改善しNight さいごに セヌフィヌにおける技術広報のミッション ファンを増やし、すごいを広げる 技術広報ずしお掲げおいる最倧のミッション、それは 瀟内倖にセヌフィヌのファンを増やすこず です。 この蚀葉には2぀の意味が蟌められおいたす。 「セヌフィヌっお技術的に面癜い䌚瀟だね」ず認知しおもらうこず。 ゚ンゞニア自身が自分たちの開発しおいるプロダクトはすごいず胞を匵れる状態を䜜るこず。 どれほどがプロダクトが良くおも䌝わらなければファンは増えたせん。このミッションを達成するために、以䞋のような3幎蚈画を策定したした。 幎床 フェヌズ 2025幎 発信文化の醞成 2026幎 聞き手を意識した発信 2027幎 テックブランドの確立 2025幎の掻動 2025幎のテヌマは「土壌づくりず発信文化の醞成」です。 文化を䜜るためには、たず行動の総量を増やす必芁がありたす。そこで打垭数を増やしたした。 発信数打垭が増えれば、「自分たちは技術発信をする組織だ」ずいう認識が生たれる 第䞉者の目に觊れるこずで、「自分たちが圓たり前にやっおいるこずは、実はすごいこずなんだ」ず気づける これらを実珟するために、具䜓的に実行した斜策をご玹介したす。 1. むベント登壇数を増やしたよ 今幎はむベントぞの参加・開催数は昚幎ず比范しお2倍になりたした。 2024幎たでは䟝頌があれば登壇するずいうスタンスでした。2025幎からは他瀟ず共催しおむベントを䌁画するようになりたした。 䌁画から行うこずで、タヌゲット局や䌝えたい技術テヌマをコントロヌルできるようになり、以䞋のようなトピックを深く掘り䞋げるこずができたした。 映像解析アプリケヌションの開発プラットフォヌム構築の玹介 若手゚ンゞニアの掻躍 倧芏暡プロダクトにおける技術的負債の解消 䌁画から携わるこずで、参加者からのフィヌドバックを゚ンゞニアぞ盎接還元するサむクルも䜜れおいたす。 2. 技術広報専甚Xアカりントを぀くったよ 先月、セヌフィヌ技術広報アカりント @SafieDev を新たに開蚭したした。 はじめたしおこのアカりントは、セヌフィヌの技術情報や゚ンゞニアの取り組みを発信するアカりントです🎉 ゚ンゞニアの皆さんが気になる情報をお届けしたす。 ぜひお気軜にフォロヌしおください #セヌフィヌ #゚ンゞニア #開発者 #技術広報 — セヌフィヌ技術広報 (@SafieDev) 2025幎11月7日 これたでは䌁業公匏アカりントから発信しおいたしたが、以䞋の理由から独立させたした。 ゚ンゞニア、PdM、デザむナヌに特化した情報を届けたい ゚ンゞニアの日垞的な取り組みや詊行錯誀も発信したい 䌁業の公匏アカりントよりも高頻床で投皿したい アカりントを分けたこずで、テックブログの曎新情報やむベント情報に加え、開発珟堎の空気感が䌝わるような発信を匷化しおいたす。ぜひフォロヌをお願いしたす 盎近のむベント情報 12月は泚目のむベントを2件開催したす。ぜひご参加ください。 BASEずセヌフィヌが語るバック゚ンド開発の技術的負債解消ぞの道のり 明日、12/4(朚)にBASE株匏䌚瀟様ず共催でバック゚ンドの技術的負債にフォヌカスしたむベントを開催したす。セヌフィヌからは、倧芏暡リアヌキテクチャの取り組みに぀いお玹介予定です。 safie.connpass.com 生成AIで業務を改善しNight 12/15(月)には、生成AIを掻甚した業務改善むベントを開催したす。 こちらはLTやセッションではなく、ワヌルドカフェ圢匏を採甚。参加者党員で業務改善のアむデアをディスカッションする参加型むベントです。 safie.connpass.com さいごに 2025幎の掻動を振り返りたしたが、正盎に蚀えば、党員が自然ず発信する文化にはただ到達できおいたせん。 今幎はむベントずいう堎を甚意し、打垭数を増やすこずには成功したした。しかし、それが組織党䜓の習慣ずしお定着し自走しおいくたでには、ただいく぀ものハヌドルがありたす。 ただただ手探りですが、これからも走り続けるので2026幎のセヌフィヌの技術発信にも、ぜひご期埅ください。
この蚘事は Safie Engineers' Blog! Advent Calendar 2日目の蚘事です。 はじめに 私にできるこず 新たに䜜ったもの アプリの玹介 䜜ったきっかけ 䜜り方 AWS Bedrockでお題を生成 Next.jsでUI実装 AWS Amplifyでデプロむ 終わりに はじめに こんにちはセヌフィヌに25新卒で入瀟し、AI開発郚に配属された川䞊です。 孊生時代は研究で、人の歩き方を解析するAIの開発をしおいたした。 そしお配属前に行われた研修では、瀟内備品を管理するアプリTreasure Collectionを開発したした。Treasure Collectionの蚘事は埌日掲茉されるのでぜひご䞀読ください。 この蚘事では私が新たな技術領域を身に付けるためにアプリの開発に挑戊した話をしたいず思いたす。 私にできるこず 先に述べたように、孊生時代はPythonを぀かっお映像の研究をしおいたした。そしお研修のTreasure Collectionの開発では、入瀟するたでに䜓隓したこずがなかったフロント゚ンド領域を担圓したした。研修を終えお、フロント゚ンドずバック゚ンドデヌタ凊理の領域を経隓した゚ンゞニアになれたした。 しかしながら、むンフラ領域が分からないずいう気づきも埗たした。 Treasure CollectionはWebアプリで、デプロむなどのむンフラ回りはすべおチヌムメンバヌが実装しおくれたした。フロント゚ンドの技術は身に぀けられたしたが、アプリをナヌザヌに届ける方法が分からないずいう状況になりたした。 新たに䜜ったもの これから、研修を終えた埌に開発した ice-breaker ずいうWebアプリの玹介をしたす。このアプリを䜜ったこずで新たな技術領域を䜓隓でき、ナヌザヌに䜜ったものを届けられるようになったのでそこを共有できればず思いたす。 アプリの玹介 ice-breakerはミヌティングなどの冒頭で行うアむスブレむク・チェックむンのお題を提䟛したす。 アむスブレむクずチェックむンは少し異なるものですが、倧たかに以䞋のように説明できたす。 アむスブレむク、チェックむンずは 目的集たりの冒頭で、参加者の間の緊匵をほぐし、堎に掻気や䞀䜓感を生み出すこず。 特城「堎」の雰囲気づくりに焊点を圓おる。 倚くの堎合、ゲヌムや簡単なアクティビティ圢匏で行われる。 参加者同士が気軜に話せるきっかけを提䟛し、本題に入る前の心理的な障壁を取り陀く。 このアむスブレむク、チェックむンはセヌフィヌに入瀟しおから䜕床も行っおきたした。そしおこの床、アむスブレむク、チェックむンに圹立぀アプリを開発したした。 アプリにアクセスするず次のような画面が衚瀺されたす。 画面巊偎の“話題を生成”ボタンを抌すずボタンの䞋にお題が衚瀺されたす。 参加者䞀芧に名前を入力し”远加”ボタンを抌すず参加者が远加されおいきたす。 “次の発衚者”ボタンを抌すずボタンの巊に次の発衚者が衚瀺され、発衚枈みに発衚者が远加されたす。 “次の発衚者”ボタンを䜕床か抌しお、党員が発衚枈みに远加されるず”終了党員話し終わりたした”ず衚瀺されたす。 䜜ったきっかけ 配属前に行っおいた研修の週次定䟋の冒頭に、10分皋床のアむスブレむクを行っおいたした。 アむスブレむクのお題はその郜床考えおいたために、お題に困るこずがありたした。 たた進め方はお題を考えた人が最初に発衚しお、発衚した人が次の発衚者を指名するずいう方匏をずっおいたした。この進め方はアむスブレむクが盛り䞊がるいい方法でした。しかし、「党員発衚した」ず確認したり「次誰にしよう」ず悩んだりしお、時間を䜿っおしたうためにアむスブレむクの予定時間を少し超えおしたうずいう問題もありたした。 行っおいたアむスブレむクのよさを保ちながら、困りごずを解決するためのアプリを䜜っおみようず思ったこずがこのアプリを䜜ったきっかけです。 䜜り方 ここからはアプリの䜜り方を説明したす。 AWS Bedrockでお題を生成 たず、アプリの栞ずなるお題の生成に぀いおです。 お題の生成は生成AIで行っおいたす。生成AIはAWS Bedrockから利甚したした。AWS Bedrockにアクセスし、APIキヌを発行したす。 Next.jsでUI実装 UIはNext.jsで実装したした。Next.jsを䜿った理由は研修で唯䞀身に぀けたフロント゚ンドの技術スタックだからです。 アプリの構成は以䞋のようになっおいたす。 src/app/ ├── page.tsx # メむンUIクラむアントコンポヌネント ├── api/ │ └── bedrock/ │ └── route.ts # Bedrock API呌び出しサヌバヌサむド └── components/ ├── addNames.tsx # 参加者远加コンポヌネント └── participants.tsx # 参加者衚瀺コンポヌネント UIはシンプルなのですべおの玹介は控えたすが、工倫したこずを2぀玹介したす。 同じ話題が衚瀺されないようにプロンプトを改善 api/bedrock/route.ts ではAWS BedrockのAPIにプロンプトを含んだ、API Requestを送信しおいたす。そのコヌドは以䞋のようになっおいたす。 import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { try { const url = "xxx"; const history = (await request.json()).history || []; const payload = { "messages": [ { "role": "user", "content": [{"text": "ちょっず倉わったアむスブレむクの話題を1぀返しお。" + "過去の話題履歎: " + history.join(", ") }] } ], "inferenceConfig": { "temperature": 1.0, "maxTokens": 500, "topP": 1.0, } }; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${process.env.NEXT_PUBLIC_API_KEY}` }, body: JSON.stringify(payload) }); const data = await response.json(); return NextResponse.json({ output: data }); } catch (error) { console.error("API Error:", error); } } 過去の話題履歎を page.tsx ず連携しおプロンプトに含めながら話題を䜕床か生成したずきに同じ話題が衚瀺されないようにしたした。 Next.jsのサヌバヌサむドからAPI Rrequestを送信 以䞋のコヌドは page.tsx に実装した、話題を生成するずきに実行される関数です。この関数ではたず api/bedrock にAPI Requestを送信したす。これはNext.jsのサヌバヌサむドで実装されおいるAPIです。 const onGenerate = async () => { setloading(true); const data = await fetch("/api/bedrock", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ history: history, }), }) .then((res) => res.json()) .then((data) => { setResult(data.output.output.message.content[0].text); setHistory([...history, data.output.output.message.content[0].text]); }) .catch((error) => { console.error("Error fetching data:", error); }); setloading(false); }; 先に説明したようにAWS BedrockぞのAPI Requestの送信は api/bedrock から行われたす。 このようにAPIを経由しおAWS Bedrockを利甚しおいるこずには理由がありたす。それはAWS Bedrock ぞの API Requestの送信はフロント゚ンドから行えないからです。セキュリティ䞊の理由でその仕様になっおいたす。 今回開発に甚いたNext.jsでは別途バック゚ンドサヌバヌを立おずにサヌバヌサむドにAPI゚ンドポむントを立おるこずができたす。図らずも、開発䞭に生じた課題が解決され、スムヌズな開発を進めるこずができたした。 AWS Amplifyでデプロむ ロヌカル環境で動䜜確認を完了したら、デプロむの準備です。 デプロむはAWS Amplifyで行いたした。AWS Amplifyを䜿っお想像以䞊に手軜にデプロむを行えたした。 AWS AmplifyぞはGithub経由でアプリをデプロむできたす。 䜜成したアプリをGithubぞpushしたら以䞋のAWSのマニュアルに埓っお蚭定を行いたす。 https://docs.aws.amazon.com/ja_jp/amplify/latest/userguide/setting-up-GitHub-access.html#setting-up-github-app 蚭定埌にAWS Amplifyにアクセスし、以䞋の流れでAWS Amplify䞊にアプリを䜜成したす。プロバむダヌはGithubを遞択したした。 ここたで進めお、問題がなければすべおのアプリから、デプロむが始たっおいるこずが確認できたす。5分皋床埅぀ず、デプロむ枈みに倉わっおいたした。 この時点でもアプリはデプロむされアクセスするこずができたすが、もう䞀぀必芁な蚭定がありたす。 環境倉数の蚭定です。 すべおのアプリから、デプロむしたアプリをクリックしたす。サむドメニュヌのホスティング、環境倉数を遞択しお、以䞋の画面に遷移したす。 ここで倉数はロヌカル環境で䜿う.envファむルで決めた倉数名です。倀は取埗枈みのAWS BedrockのAPIキヌを入力したす。 ここたで行うずアプリはロヌカルず同じように動䜜したす。デプロむ・リリヌスの完了です。 終わりに この蚘事では私が初めお自身の力でデプロむを行ったアプリの玹介をしたした。 アプリを䜜っおみお考えたこずが倧きく2぀ありたす。 1぀目は゜フトりェアサヌビスの理解床が䞊がったこずです。これたではどうやったらサヌビスずしお動䜜するんだろうずいう挠然ずした疑問を抱えながら開発などを行っおいたした。そこをどうやったらいいか、手段を1぀でも知れたこずはずおも良いこずだず思いたす。 2぀目は別のAWSサヌビスも利甚したいず思ったこずです。私はAI開発に長い間携わっおきたしたが、それらはロヌカル環境のマシンで動䜜させるだけでした。これを機にオリゞナリティを持ったAIを䜿ったアプリをナヌザヌに届けおみたいず思いたした。 私がセヌフィヌに入瀟しお8カ月経ちたしたが、その間新しい技術領域を䜓隓し身に着けながら課題解決に取り組めおいたす。この蚘事を読んでいただいた人にずっお、セヌフィヌで働きながらどのように技術を身に着け成長できるかが䌝わるず幞いです。
この蚘事は Safie Engineers' Blog! Advent Calendar  1日目の蚘事です。 はじめに そもそも「1on1」ずは 定矩の再確認 1on1 のゎヌルありたい姿 人にフォヌカスした察話型1on1のすすめ 具䜓的な質問䟋「最近どう」をより良くする工倫 具䜓的な質問䟋未来志向ぞの誘導 1on1 は組織開発の最前線 最埌に はじめに セヌフィヌの VPoE å…Œ 開発本郚 ゚ンゞニアリングオフィス 宀長の歊田です。 2023幎にセヌフィヌに入瀟し、゚ンゞニア組織の組織開発に取り組む゚ンゞニアリングマネヌゞャヌずしお掻動しおいたす。セヌフィヌでは創業圓初から 1on1 文化 が根付いおおり、私自身2025幎には600件以䞊の1on1を実斜したした。前職を含めた゚ンゞニア組織開発の経隓ず、コヌチングや本質行動孊などの孊びを掻かしたトラむ゚ラヌから埗た、1on1の本質をご玹介したす。 そもそも 「1on1」ずは 定矩の再確認 私が考える1on1の定矩は以䞋の通りです。 💡 1on1ずは 1on1ずは、メンタヌずメンティヌが定期的にマンツヌマンで行うミヌティングのこず。 人事評䟡を目的ずした面談ずは異なり、 人の成長促進ず組織の掻性化 を䞻な目的ずする。䞊叞・郚䞋の関係性に限らず、人ず組織の成長を促すための察話の堎である。 この1on1の定矩には 「これが正解」ずいう型はありたせん。 1on1では「業務の話はすべきではない」ずいう䞀般的な颚朮もありたすが、私はその限りではないず考えたす。 なぜなら、メンティヌが目の前の業務で困っおいるのに、それを解決しおくれるかもしれない人に聞けないのはフラストレヌションがたたるだけ。無理にキャリアの話に誘導するより、 メンティヌが本圓に求めおいる話 をするこずが、結果的に成長に぀ながりたす。 1on1 のゎヌルありたい姿 では、目指すべき1on1のゎヌルありたい姿は䜕でしょうか。 それは 「次も1on1をしたい」 ず思っおもらえる状況を䜜るこずです。 1on1は、䞀床きりのむベントではなく 継続しおこそ意味のあるもの になりたす。 前向きさを維持し、察話を重ねるこずで初めお、人の成長ず組織の掻性化ずいう目的に近づけたす。 メンタヌのスタンス メンティヌの状況に合わせお臚機応倉に察応する 具䜓的な行動 業務の話も、キャリアの話もする。コヌチングもすれば、ティヌチングもする 重芖するこず その瞬間や1on1盎埌に心地よい時間を䜜るこずではない、時にはネガティブなフィヌドバックも必芁 目指す状況  察話埌、時間経過ず共に気づきがあり、行動倉容を促し、結果が䌎うこず。そしお、察話が継続できおいるこず。 人にフォヌカスした察話型1on1のすすめ 「次もやりたい」ず思っおもらうためのコツ、それは 「察話しやすい状況」 を䜜るこずです。 察話しやすさの鍵は、「事コト」ではなく 「人ヒト」にフォヌカス した質問をするこずにありたす。 ✅ 「事」ぞの質問 vs. 「人」ぞの質問 䟋えば、メンティヌが「釣りに行っおきたした」ず話した堎合の質問䟋です。 質問の焊点 具䜓的な質問䟋 メンティヌの受取られ方 事 (コト)  - どこ行きたしたか - 釣れたしたか     事実の深堀り 人 (ヒト)  - 楜しめたしたか - 釣り奜きなんですか 自分に向き合っおくれおいる ず感じ、話しやすくなる 人の 感情楜しい、奜きなどに寄り添う 質問を意識するずより話がしやすくなりたす。 䟋えば仕事で倱敗したずきはなぜ倱敗をしたのかではなく、その時どう思ったどう感じたかなぜそう感じたのかメンタヌの自分はどう思ったか䟋えば悲しかったずかなど、お互いの感情を深堀しシェアするこずでより人に向き合えるようになりたす。 具䜓的な質問䟋「最近どう」をより良くする工倫 1on1 の初めに「最近どう」から始たるこずはよくあるず思いたす。 ただ、この「最近どう」だけでは、少しもったいないです。 最初の導入ずしお、ぜひ メンタヌの所感 を付け加えおほしいです。 そうするずメンティヌはより話しやすくなりたす。これは、 メンタヌの気持ち感情を先に䌝えおいる こずで、共感を生みやすくスムヌズな察話に぀ながる効果がありたす。 より良い質問䟋 ポむント 最近どう 〇〇定䟋での××の発衚良かった。内容もだけど むキむキ話しおいお感動したよ ポゞティブな所感 を䌝え、話すきっかけを䜜る 最近どう 残業時間が倚くなっおいるようなので ちょっず心配 懞念点心配 を䌝え、安党な堎で話すこずを促す ❌ 泚意すべき質問䟋 「最近どう元気がないように思うけど倧䞈倫 䜕かあった 」は良い質問ではありたせん。 なぜなら「䜕かあった」は、 事の深堀り に぀ながるからです。本圓に元気がないずきは、日垞の小さなこずの積み重ねであるこずが倚く、「特別なこずはありたせん」ずいう回答で察話が終わっおしたう可胜性がありたす。   〇 最近どう元気がないように思うけど倧䞈倫 心配です。 心配しおいる気持ちを正盎に䌝えお反応を埅ちたしょう。 補足 ちなみに私は1on1が始たる前にその人のGoodポむントを探すずいう事前準備をよくやりたす。ネガティブな情報は広がりやすいですが、ポゞティブな情報はなかなか衚に出おきたせん。1on1でポゞティブ情報が亀換できれば組織党䜓の雰囲気にも぀ながりたす。ぜひ、EMはポゞティブ情報を垞に拟っお1on1に぀なげおほしいず思いたす。 具䜓的な質問䟋未来志向ぞの誘導 1on1は過去の振り返りふりかえりになりがちで、ワクワクしにくい傟向がありたす。過去の結果は分かりきっおいるからです。 できるだけ 未来の話 に誘導したしょう。 質問䟋 目的 前回から今回たでの 自己満足床、䜕点 ありたすか100点満点で メンティヌの珟状認識を匕き出す 䟋60点ず回答40点足りおいないけど、その 40点を増やすためには䜕が必芁ですか 私も䞀緒に協力できるこずありたすか 次回たでの Next Action をメンティヌ䞻䜓で決め、 未来の話 ぞ誘導する ここでのポむントは、メンティヌ偎だけでなく、 メンタヌ偎のNext Actionも決めるこず 小さなこずでOK。お互いのコミットメントにより、䞀䜓感が生たれたす。 1on1 は組織開発の最前線 䌚瀟や組織は人の集たりであり、 組織人 です。 1on1は、その人のこずを知るための 䞀番の手段 であり、組織開発の最前線です。1on1が機胜するこずで情報が流通し、組織が掻性化するきっかけになりたす。 ぜひEM゚ンゞニアリングマネヌゞャヌの皆さんには、この1on1を䜿いこなしおほしいず思いたす。 正解がないからこそ面癜い この蚘事が、あなたの1on1を楜しむきっかけになれば幞いです。 📝 たずめ人に向き合う1on1の5぀の芁点 1. 基本スタンス  1on1のやり方に正解はない (メンティヌの状況に臚機応倉に察応する) 2. 目的   人ず組織が成長するために、人ず組織に向き合う時間。 3. ゎヌル  「次も1on1をしたい」 ず思っおもらうこず継続による成長ず成果 4. コツ    「事」ではなく 「人」にフォヌカス した質問で、より 共感ず気づき を䞎える 5. 䟡倀    組織開発の最前線ずしお、 情報流通ず組織掻性化 のきっかけずなる 6. 願い   1on1 自䜓を楜しもう 最埌に 本蚘事では、私が取り組んでいる1on1の実践の䞀郚をご玹介したした。 1on1 は奥深く自分自身もただただ足りおいない郚分があり、垞にふりかえりを実斜䞭です。 たた、ポむントはほかにもある䟋えば、1on1 の情報をどう他の人にシェアしお組織倉革に䜿っおいくかず考えおおり日々奮闘䞭です。たたい぀か別の機䌚にご玹介できればず思いたす。 最埌に宣䌝ですセヌフィヌでは 䞀緒に働く仲間を募集䞭 です 少しでもご興味を持っおいただけたら、ぜひ以䞋の 採甚サむト を芗いおみおください。
はじめに こんにちは。セヌフィヌでサヌバヌサむド゚ンゞニアをしおいる金成です。 本蚘事は、ffmpegを初めお䜿う方や、360床カメラのデワヌプ凊理に぀いお孊びたい方を察象にしおいたす。専門的な知識は䞍芁ですので、ぜひお気軜にお読みください。 セヌフィヌでは、半倩球カメラなど、魚県レンズを甚いお広範囲を撮圱する360床カメラの映像も取り扱っおいたす。そのため、このようなカメラの画像や映像をデワヌプ (歪みを補正し、歪みの少ない映像に倉換するこず) するナヌスケヌスが存圚したす。仕事をする過皋で、ffmpegのビデオフィルタヌを䜿った倉換に぀いお調べたのでこちらで共有いたしたす。 はじめに ffmpegずvfオプションに぀いお デワヌプの具䜓的な手順 たずめ ffmpegずvfオプションに぀いお ffmpegは、動画や音声を蚘録・倉換・再生する゜フトりェアで様々な凊理を行うこずができたす。その䞭でも、vfオプション(video filter オプション) は、入力に察し、映像を拡倧する、䞀郚分を切り取る、色を補正するなどの凊理(フィルタヌ) を適甚するこずができる機胜です。 簡略化するず、䞋蚘のようなシンタックスでオプションを指定するこずができたす。 -vf <フィルタ名>=<フィルタヌごずのオプション> (実際にはもっず耇雑な指定が可胜です。詳现は公匏サむトをご参照ください。 https://ffmpeg.org/ffmpeg-filters.html) 䟋えば、cropフィルタヌであれば、䞋蚘のようなコマンドで画面の䞀郚を切り取った映像を䜜るこずができたす。 ffmpeg -i input.mp4 -vf crop=500:500:100:100 output.mp4 vfオプションの䞭には、v360フィルタヌがあり、360床カメラで撮圱された魚県などの映像をデワヌプされた映像に倉換するこずができたす。 デワヌプの具䜓的な手順 360床カメラの映像ず環境の準備 今回は、ffmpegコマンドを䜿った360床カメラの倉換に぀いお説明したす。 利甚するツヌルのバヌゞョンは䞋蚘になりたす。 ffmpegのバヌゞョンは7.1.1です。 デワヌプのためのffmpegコマンドの蚘述 デワヌプのためのffmpegコマンドの蚘述 今回は、v360フィルタヌを䜿っお、半倩球カメラなどで撮圱された「魚県 (fisheye)」圢匏の映像を歪みを補正した映像に倉換したす。 v360フィルタヌは䞋蚘のようなシンタックスで構成されおおり ‘v360=<入力の圢匏>:<出力の圢匏>:<key=valueで指定したオプション> ずいった圢匏で指定できたす。 䟋えば、䞋蚘のコマンドであれば指定したオプションで、魚県 (fisheye) の映像からデワヌプされた通垞の映像に倉換されたす。 ffmpeg -i input.mp4 -vf ‘v360=fisheye:flat:v_fov=50:yaw=50’ output.mp4 v360フィルタヌでは、䞋蚘のような入力/出力先が甚意されおいたす。 e / equirect => Equirectangular projection flat / gnomonic / rectilinear => regular video fisheye => 魚県 pannini => Pannini projection. and etc 入力/出力圢匏ごずに必芁なパラメヌタヌが倉わり、様々な倉換を行うこずができたす。 v360のフィルタヌでは、共通でyaw/pitch/roll などのカメラの芖点をコントロヌルするオプションや、カメラの回転を制埡するオプションがありたす。 今回䜿甚する flatフィルタヌでは、特にデワヌプ埌の調敎を行うため、出力するカメラの画角を以䞋のオプションで制埡できたす。 v_fov (垂盎画角) h_fov (氎平画角) d_fov (察角画角) これらのオプションを利甚するこずで、倉換埌の映像を现かく調敎するこずが可胜です。 コマンドの実行䟋 䟋1: 䞊䞋の振り向け ffmpeg -i input.mp4 -vf v360=fisheye:flat:v_fov=50:pitch=<角床> output.mp4 䟋2: 巊右の振り向け ffmpeg -i input.mp4 -vf v360=fisheye:flat:v_fov=50:yaw=<角床> out.mp4 䟋3: 右に振り向けた映像の巊半分だけを切り取る ffmpeg -i input.mp4 -vf v360=fisheye:flat:v_fov=50:yaw=30,crop=iw/2:ih:0:0 output.mp4 たずめ このように魚県の映像など360床カメラで撮圱した映像は、簡単にデワヌプするこずができたす。画像や動画の倉換に圹立おおいただければ幞いです。 セヌフィヌでは、このような映像解析技術を掻甚し、より高床なサヌビスを提䟛しおいたす。興味をお持ちいただけたしたら、ぜひ採甚情報もご芧ください。
はじめに こんにちは、デヌタドリブン掚進宀でデヌタ゚ンゞニアをやっおいる鶎です みなさん、LightdashのTable calculation機胜っお䜿っおたすか 自分はLightdashを觊っおいお[+Table calculation]ずいう衚蚘を芋かけた際に 「Table calculationっおこずは衚蚈算機胜のこずか〜 Tableauずかにもある出力した結果デヌタの䞭で集蚈したりするや぀かな あるず䟿利だよな そのうち䜿う機䌚くるっしょ〜」 みたいなこず考えおあたり觊らずスルヌしおたした  同じような方もいらっしゃるのではないでしょうか 実はLightdashのTable calculation機胜はちょっず面癜い機胜になっおいるのでここでご玹介したいず思いたす はじめに Table calculationを觊っおみよう テンプレヌト機胜もありたす 実はこれだけじゃなかったTable calculation 最埌に We are hiring! Table calculationを觊っおみよう たずはQuerying from tablesから芋たいテヌブルを遞択し、Resultの右䞊にある[+Table calculation]を抌しおみるず  こんな画面が出おきたす。 ぀たり出力したデヌタを䜿っおSQLを曞いお集蚈する、ずいう感じなんですね。 やはり衚蚈算ずいえばりィンドり関数ずいうこずで曞いおみたす 今回サンプルで甚意したスヌパヌマヌケットデヌタで売䞊前日比を䜜っおみたす。 ※本蚘事に登堎する「さくらマヌト」は、サンプルデヌタ甚に䜜成した架空の名称であり、実圚のいかなる店舗・団䜓ずも䞀切関係ありたせん SQLはこんな感じです。線集画面で文字を入力するずサゞェストしおくれるので䟿利です。 ${sample_supermarket_sales.sum_of_total_price} / LAG(${sample_supermarket_sales.sum_of_total_price} OVER(${sample_supermarket_sales.sale_date_day})) このデヌタは゜ヌトを蚭定しおいるので䞀旊ORDER BYは蚘茉せず進めおみたす。 フォヌマットはパヌセント衚瀺にしたしょう。 保存しお実行するずこんな感じになりたした たたこの䜜った項目を盎接フィルタヌに蚭定するこずができたす 右䞊のボタンを抌すず[Filter by 売䞊前日比]があるので抌しおみるず  フィルタヌ欄に远加されたした これを䜿っお前日売䞊比100%越えの日を出しおみる、なんおこずもできたす。 テンプレヌト機胜もありたす りィンドり関数はSQLに慣れおいない方だず正盎難しい郚分がありたすよね  ですがLightdashにはテンプレヌトが甚意されおたす [Sum of total price]の右䞊のボタンを抌すず、Add quick calculationにテンプレヌトがありたす。 Percent change from previous(前からの倉化率)をクリックしおみたす。 項目が自動で䜜成されたした 䞀応内容を確認するため項目右䞊を抌し、Edit calcultationをクリックしたす。 内容的には先ほど自分が䜜ったク゚リの内容に近いロゞックがあり、それに察しお1を匕いおいる圢になりたす。 なお、泚意しお欲しいのがLAG関数のORDER BYの箇所がDESCになっおいたす。 日付で昇順にしたいためここは消しおおきたしょう。 ここは芋たいものによるず思うので適宜調敎しおください 実行した結果はこうなりたした。正盎こっちの方がわかりやすいですねw このようにテンプレヌトをうたく䜿うずサクッず䜜れたす。 他にもテンプレヌトはあるのでぜひ公匏ドキュメントの 解説ペヌゞ をご確認ください。 たた今の時代はChatGPT先生やGemini先生などに聞けばわかりやすく教えおくれたすし、䜜っおくれたす。有効に掻甚しおいきたしょう 実はこれだけじゃなかったTable calculation さお、ここたで觊っおきたTable calculationですが察しの良い方はこのこずに気づいおいるかもしれたせん   SQLで曞けるっおこずはSQLでやれるこずは割ず䜕でもできるのでは  そうです、䜕でもできたす。 たずえばこのようなCASE文を曞いおバナナフラグを立おるこずもできたす(Result typeはbooleanにしおたす) ストアず商品の文字列を結合するようなテキスト蚈算もできたす(Result typeはstringにしおたす) なんか自分が思っおた衚蚈算ず違う  集蚈した項目をさらに奜きなようにデヌタ加工・蚈算できるので面癜いず思いたす。 たた少し前の Lightdashアップデヌト で䜜成した衚蚈算項目を再利甚できるようになりたした。 ぀たりこうやっお先ほど䜜成したバナナフラグずストアず商品の項目も合わせるこずが可胜です。 䜜成した衚蚈算結果をさらに蚈算しお みたいに広げおいけるので柔軟性が䞊がっおいいですね 最埌に Table calculationは定矩されたメトリックで察応できなかった集蚈やデヌタ加工をカバヌする機胜ずなっおいお利甚される方はこういう機胜があるず認識されおおいた方が良い機胜だず思いたす ただ公匏ドキュメントにも 蚘茉 がありたすがこのTable calculationは䞀時的なニヌズに察応するものずしおは良い機胜ですが、繰り返し再利甚されおいる堎合はdbt偎の定矩に远加しお管理するようにした方が良いので管理者は適宜チェックしおおきたしょう。 We are hiring! 珟圚、デヌタドリブン掚進宀では デヌタ゚ンゞニア/アナリティクス゚ンゞニアを倧募集䞭 です セヌフィヌのデバむスやアプリケヌションからは1日あたり数十億件のログが発生し、デヌタ量は線圢的に増加しおいたす。 このような超ビッグデヌタを効率的に凊理し、ビゞネスの意思決定に繋げるための仕組みを䞀緒に䜜っおみたせんか ご興味のある方は セヌフィヌ採甚サむト を芗いおみお䞋さい よいLightdash Lifeを〜それではたた
こんにちはセヌフィヌでハヌドりェア開発を担圓しおいる持䞞です。 ご存じの通り、「セヌフィヌ」はクラりド録画サヌビスや゜フトりェアを事業の䞭栞ずする䌚瀟です。 そしお圓然のように、クラりドや゜フトりェアの技術をベヌスずした゚ンゞニアの割合が倚い䌚瀟になりたす。 しかし、お客様に最高の䜓隓をお届けするためには、映像の入り口ずなるカメラをはじめずした「ハヌドりェア」の存圚が欠かせたせん。 今日は、普段あたり語られるこずのない、セヌフィヌのハヌドりェアぞの熱い想いず、その品質を支える取り組みに぀いおご玹介したいず思いたす。 すべおは「お客様に寄り添う」ために 「ただ仕入れる」だけでは終わらない、セヌフィヌの補品評䟡 仕組みで支える品質。補品評䟡プロセスの暙準化 䞍具合解析こそ、腕の芋せどころ おわりに すべおは「お客様に寄り添う」ために 私たちハヌドりェア担圓が最も倧切にしおいるのは、 「お客様に寄り添った補品ハヌドりェアを提䟛しおいく」 ずいう、ずおもシンプルな方針です。 お客様がどのようなシヌンで、どのような課題を解決したいのか。 それを深く理解し、機胜や性胜はもちろんのこず、長期にわたっお安心しお䜿える品質、そしお安党性を兌ね備えた補品をお届けするこず。 それが私たちの䜿呜です。 セヌフィヌが提䟛するハヌドりェア補品には、他瀟から賌入した補品䞀郚をセヌフィヌ向けにカスタマむズしたものを含むず、自瀟で開発した補品の2皮類がありたす。 今回は、特に他瀟補品をお客様にお届けする際の、私たちのこだわりに぀いおお話ししたす。 「ただ仕入れる」だけでは終わらない、セヌフィヌの補品評䟡 他瀟補品を遞定する䞊で、私たちは特に以䞋の2぀のプロセスに倚くの時間を費やしおいたす。 お客様の利甚シヌンの把握ず理解 提䟛する補品の蚭蚈思想の読み取り Fig1 なぜなら、この2぀のステップを疎かにするず、「思い蟌み」によっお埌々倧きな問題を匕き起こしかねないからです。 「普通はこうのはずだ」ずいった思い蟌みを排陀し、お客様の本圓のニヌズず補品の特性を正確に結び぀ける。 そしお、関係者党員がその共通理解の䞊に立぀こずが、プロゞェクト成功の鍵を握っおいたす。 この考え方に基づき、私たちは以䞋のようなステップで補品の評䟡を進めおいたす。 お客様の芁求内容を明確にし、文曞化するナヌザヌ情報 遞択する補品の仕様機胜、性胜、品質などがお客様の芁求を満たせおいるかを確認する補品情報 カタログスペックだけでは確認できない項目を掗い出し、評䟡・怜蚌を実斜する远加評䟡 Fig2 仕組みで支える品質。補品評䟡プロセスの暙準化 「蚀うは易し、行うは難し」ですが、これらの補品評䟡プロセスが担圓者のスキルや経隓だけに䟝存しおしたうず、品質にばら぀きが生たれおしたいたす。 そこで私たちは、誰が担圓しおも䞀定の品質を担保できるように、評䟡プロセスを前述のように暙準化し、専甚の入力フォヌム䞋蚘参照や手順曞を敎備しおいたす。 利甚シヌンの把握: 補品蚭眮芁件確認シヌト 補品の蚭蚈・安党思想の把握: 蚭眮ガむドの確認シヌト、補品認蚌の確認シヌト 補品性胜・品質の確認: 補品性胜の確認シヌト、補品品質の確認シヌト Fig3 さらに、゜フトりェア゚ンゞニアが倚く圚籍するセヌフィヌの特性を螏たえ、各シヌトの入力方法や泚意点をたずめた手順曞を準備したした。 これは、普段から蚭眮業務、郚材に觊れおいる担圓であれば甚語にも粟通しおいたすし、どこにどういった情報があるかもすぐわかりたす。 しかし、頻床の䜎い人が䜜業を始めようずするず、思いのほか時間がかかったりもしたす。このような背景に察応するための手順曞を䜜成しおいたす。 Fig4 これらを甚いるこずにより、ハヌドりェアの専門家でなくおも、スムヌズか぀網矅的に怜蚌を進められる環境を敎えおいたす。 加えお、䜿甚䞊の泚意、安党䞊の泚意、認蚌前提ずいった文蚀、甚語、衚珟が各瀟で幅広く単玔な怜玢ではマッチしないものには生成AIを甚いるこずを想定し、察象項目を調査できるようにキヌフレヌズを䜵蚘しおいたす。 倚くの人が実感しおいる通り、生成AIによる調査のメリットは、網矅的な抜出ができるこずにより、調査範囲が䞍十分なこずによる抜け、挏れの発生を防ぐこずができたす。 しかしながら、調査者の経隓・知識が少ない堎合には、生成AIに入力するフレヌズが十分でなく、このメリットが十分に享受できないケヌスの発生がありたす。 これらから、フレヌズ䟋を䜵蚘し、出力結果が限定されすぎないようにしおいたす。 Fig5 䞍具合解析こそ、腕の芋せどころ このように確認を行った補品であっおも販売埌に、残念ながら䜕らかの䞍具合が発生するこずもありたす。そんな時こそ、私たちハヌドりェア担圓の腕の芋せどころです。 解析の進め方で䞀番やりがちなこずは、぀い経隓ず勘に頌っお解析を進めおしたうこずです。 圓たればよいのですが、圓おが倖れるず原因究明が困難になるこずも倚々ありたす。 我々は補造メヌカヌではなく、倧量に䞖の䞭に補品を出荷しおいるわけではないので、解析ができる䞍具合察象機が数台皋床であるこずが垞です。 慎重にこずを進めるこずが重芁になりたす。 このようなこずも螏たえながら、経隓豊富な゚ンゞニアも、そうでないメンバヌも、同じ情報を残しながら解析を進められるよう、䜓系的な䞍具合解析フロヌを構築しおいたす。 䞍具合報告の確認䞍具合報告確認シヌト 䞍具合品の倖芳倖芳確認報告シヌト 䞍具合再珟再珟確認報告シヌト 䞍具合品の分解分解確認報告シヌト 䞍具合品の解析解析報告シヌト 各シヌトには、HW゚ンゞニアの経隓しおきた確認項目がリストされ、その内容を順次チェックしおいく぀くりになっおいたす。 これにより、埌戻りのない、的確な原因究明ず、再発防止に繋げおいたす。 Fig6 おわりに 今回は、セヌフィヌのハヌドりェアぞの取り組み、特に他瀟補品を評䟡する際のプロセス及び䞍具合解析に぀いおご玹介したした。 これは、 HW゚ンゞニアを抱えるセヌフィヌだからこそのアプロヌチです 。 私たちの目暙は、この HW゚ンゞニアの経隓や芋識に裏打ちされた仕組み をさらに進化させ、HW゚ンゞニア以倖のメンバヌを含めた党䜓の底䞊げをするこずでお客様に品質の高いハヌドりェアを届けられるようにするこずです。 次回は、もう䞀぀の柱である「自瀟開発補品」に぀いお、詳しくお話ししたいず思いたすので、お楜しみに
こんにちは。セヌフィヌ株匏䌚瀟゚ンゞニアの䌊藀です。 今回のお話は、動画配信サヌビスを開発・運営されおいる皆さたぞ 「UI/UX」 に぀いおのお願いです。冒頭からかなり察象を絞った内容に感じられるかもしれたせんが、きっず倚くの方にも共感しおいただける郚分があるず思いたす。 どうぞ気軜にお読みいただければ幞いです。 たずは こちら をご芧ください。※音が出たす ※ iOS では䞊手く衚瀺されない䞍具合がありたす。動䜜環境は PC がおススメです。 動画芋ながら寝萜ち問題 シヌクバヌのツラむずころ 理想のシヌクバヌの提案 たずめ おたけシヌクバヌの䜜り方 ステップ 蚭蚈図を曞く ステップ 座暙倉換 ステップ 描画 ステップ 再生䜍眮の移動 & スケヌル倉換 たずめ 動画芋ながら寝萜ち問題 さお、皆さんは「動画配信サヌビス」を利甚しおいたすか YouTube、Netflix、Amazonプラむム・ビデオ、他にも数えきれないほどのサヌビスが乱立しおいたすが、珟代人なら䜕かしら䞀぀は䜿っおいるのではないでしょうか。䞭には、いく぀ものサヌビスに加入しお、毎晩぀い぀い倜曎かししおしたったり、䌑日は朝から晩たで動画挬け、、なんお方もいらっしゃるかもしれたせんね。かく蚀う私も、そんな動画挬けの毎日を送っおいる䞀人です。 そしお今回は、そんな生掻の䞭でどうしおも気になる “あるUI” に぀いお、䞀蚀物申したいず思いたす。 それは 「シヌクバヌ」 です。 私は普段、寝ころびながらスマホで動画を芋るこずが倚いのですが、぀い぀い 寝萜ち しおしたうこずがありたす。気づけば動画は再生し終わっおいお、「あれどこたで芋たんだっけ」ず、埌から芋返そうずするのですが、そこで困るのがシヌクバヌです。動画の総再生時間に察しお、シヌクバヌの衚瀺があたりにも短く、指で正確に寝萜ちした䜍眮たで移動するのがずおも難しいのです。 シヌクバヌのツラむずころ 「いやいや、それっお本圓にそんなに難しいの」ずピンずこない方もいるかもしれたせん。そこで、どれくらい操䜜が難しいのかを定量的に怜蚌しおみたしょう。 たず、シヌクバヌの物理的な長さですが、スマホを暪向きにしたずきの画面幅に䟝存したす。端末によっお違いはあるものの、倧きめのスマホでも画面の暪幅はせいぜい 150mm 皋床です。ちなみに、私が䜿っおいるスマホは 110mm でした ただし、これは画面党䜓の幅。実際のシヌクバヌには巊右にマヌゞン䜙癜があるため、バヌ自䜓の有効な長さはもう少し短くなりたす。ここでは仮に、シヌクバヌの長さを 140mm ずしおみたしょう。この状態で 2時間= 7,200秒の映画を芋おいるずするず、 1mm あたりの時間  7,200秒 ÷ 140mm ≒ 50 秒/mm さらに、指の腹の倪さはだいたい 15mm くらいありたすよね。぀たり、 指先 1 本分に玄 12 分 50秒 × 15mmの映像が圧瞮されおいるわけです。 この状態で「あず5秒戻りたい」ず思っおも、1mm以䞋の繊现な操䜜が求められたす。たるでお米に字を曞くようなものですね。しかも、苊劎しおシヌクバヌを埮調敎したずころで、動画が再生されるたでは、どの堎面から始たるのか分かりたせん。「このシヌンはただ意識があったな」「あっ、ちょっず行きすぎた」そんなこずを考えながら、スクリヌンを䜕床も指でスリスリ。そしお、行きすぎおは戻し、戻しすぎおは進める。こうしお、埮調敎を䜕床も繰り返す矜目になるのです。 理想のシヌクバヌの提案 そこで冒頭の動画の新しいシヌクバヌの提案です。各瀟の動画配信サヌビスでぜひ採甚しおいただきたい、 理想のシヌクバヌ を自分なりに実装しおみたした。 工倫したポむントは、䞻に以䞋の2぀です。 . シヌクバヌのスケヌルを拡倧・瞮小できる 再生䜍眮の指定は、マりスならドラッグ操䜜で、スマホならタッチ操䜜で行いたす。これ自䜓は䞀般的な操䜜ですが、ここに スケヌリング機胜 を加えたした。 マりスホむヌルで拡倧・瞮小スマホの堎合はピンチむン・ピンチアりト スケヌルを倧きくすれば、ざっくり党䜓を早送り・巻き戻し スケヌルを小さくすれば、秒単䜍での埮調敎もストレスフリヌ 「たず倧たかに探し → 现かく調敎する」 ずいう動䜜が、スムヌズに完結できるのです。 . 動画のサムネむルを衚瀺しお芖芚的に怜玢できる シヌクバヌの䞊に 動画のサムネむルを衚瀺する 機胜も加えたした。これは最近のプレむダヌにもよく芋られる機胜ですが、今回の提案ではスケヌル拡倧・瞮小ず組み合わせお䜿えるのがポむントです。 拡倧時には、前埌のフレヌムが芖認できるようにし、シヌンの切り替わりもひず目で把握できる 「どこで寝萜ちしたか」が芖芚的に探しやすくなる この2点を組み合わせるこずで、「あの堎面を探したいのに芋぀からない」ずいう、あのもどかしさから解攟されるのではないかず考えおいたす たずめ 以䞊、珟堎からのお願いでした ちなみに冒頭のデモのサムネむル郚分の描画には、ブラりザにそこそこ負荷がかかっおいるようで、䞊手く動䜜しないこずがありたす。特に iOS ではサムネむルが䞊手く衚瀺されない䞍具合が芋぀かっおいたす。動䜜環境は PC がおススメです。 たた今回䜜ったシヌクバヌをお奜きな動画でお詊しいただけるように、 お手元の動画ファむルを読み蟌めるバヌゞョン を甚意したした。良ければこちらも䜿っおみおください。 動画配信サヌビスを手がける皆さた、どうかこの寝萜ちナヌザヌの声に耳を傟けおいただければ幞いです おたけシヌクバヌの䜜り方 ここからぱンゞニア向けのお話しになりたす。せっかくなので、スケヌルを自由に倉曎できるシヌクバヌの実装方法に぀いお解説したいず思いたす。 冒頭の動画サンプルでは、サムネむル衚瀺などの機胜も含めおいるため、コヌドが少し耇雑になっおいたす。そこで、今回はシヌク機胜に限定したシンプルな デモ を甚意したした。こちらのコヌドをベヌスにしお、具䜓的な実装ポむントや仕組みをわかりやすく説明しおいきたいず思いたす。゜ヌスコヌドは こちら です。 実装方法はいく぀か考えられたすが、今回はWebアプリずしおの開発ずいうこずで、 Canvas API を䜿っお実装したした。Canvas API は暙準的な描画凊理のむンタヌフェむスを提䟛しおおり、モバむルなど他のプラットフォヌムでも䌌たような機胜やラむブラリがあるので、比范的簡単に移怍が可胜だず思いたす。 ステップ 蚭蚈図を曞く たずはデザむンを決めお、その蚭蚈図を描きたしょう。Canvas API では点や線、長方圢ずいった基本的な図圢のほか、テキストや画像も描画できたすが、どんなGUIを䜜るにしおも、たずは 描きたいものを现かな芁玠に分解する こずが倧切です。 サンプルは䞋図のようなデザむンになっおいたすが、よく芋るず線ず長方圢、そしおテキストで構成されおいるこずが分かるず思いたす。 こちらに现かく寞法を蚘入しおいきたす。 寞法の取り方はセンス次第で自由に決めおいただいお構いたせんが、 このようなパラメヌタを倉数ずしおたずめおおく ず、あずからデザむンを調敎するずきにずおも䟿利です。 const SEEKBAR_POS_Y = 60 ; const SEEKBAR_HEIGHT = 15 ; const SCALE_LINE_HEIGHT = 8 ; const SCALE_TIME_TEXT_SIZE = 16 ; const CURRENT_TIME_TEXT_SIZE = 28 ; const HEIGHT = 120 ; ステップ 座暙倉換 続いお、シヌクバヌの描画に必芁な知識をむンプットしおいきたしょう。 シヌクバヌの暪方向は、動画の時間の経過を衚しおいたす。ここで、動画の時間ず画面䞊の描画䜍眮を結び぀けるために、 「座暙倉換」 ずいう考え方が圹立ちたす。聞き慣れない蚀葉かもしれたせんが、実は䞭孊生のずきに習った 䞀次関数 の考え方ずほが同じものです。 今回䜜ったものは、たず図のように動画党䜓から、その䞀郚を切り取った赀枠の郚分を画面䞊に描画しおいたす。このように考えるず、 「動画の時間軞」ず「画面の座暙軞」 ずいう、2぀の異なる座暙軞が存圚しおいるこずになりたす。 ここで、動画の時刻を 、画面の氎平方向の䜍眮を ずしたす。さらに、 画面の巊端の䜍眮に察応する時間 画面1ピクセルあたりの時間幅 ずするず、次のような倉換匏が成り立ちたす。 こちらの匏だけでは、時間軞ず画面座暙軞の倉換を具䜓的にむメヌゞしづらいず思うので、䞋蚘のように倀を定矩しお、その関係を図瀺しおみたす。 画面の幅 珟圚時刻 画面の右端の䜍眮に察応する時間 動画の長さ 図の䞊偎の青色の盎線が時間軞で、䞋偎のオレンゞ色の盎線が画面座暙軞になりたす。グラフにするず次にような盎線䞀次関数です。 この盎線の匏の定数項である を倉化させるず、時間軞䞊で切り取る範囲が倉わりたす。その結果、画面䞊ではシヌクバヌの衚瀺䜍眮が巊右に移動し、たるで時間が動いおいるように芋えるのです。 たた、盎線の傟きを衚す の倀を倉えるず、画面䞊で切り出される時間の範囲が倉わりたす。これにより、シヌクバヌのスケヌルが拡倧・瞮小されたような芋た目になりたす。 ちなみに今回のデザむンでは、画面の䞭倮の䜍眮が珟圚時刻 ( ) をあらわしおいるので、 は珟圚時刻から画面幅の半分 ( )の時間を差し匕いた倀ずなり、次のように衚せたす。 ずいうわけで、動画の切り出し䜍眮を制埡するための倉数ずしお珟圚時刻 ( ) 、スケヌルを制埡するための倉数ずしおピクセル圓たりの時間( ) 、この 2 ぀を保持しおおけば十分です。 // 珟圚の時刻 currentTimeMs = 0 ; // 1ピクセルあたりの時間ミリ秒 timeMsPerPix = 2400 ; 元の倉換匏に を代入しお消すず、珟圚時刻 ( ) ず1 ピクセル圓たり時間幅 ( ) を甚いた匏に敎理できたす。 ここからさらに倉圢しお むコヌルの圢にするず、時間軞䞊の座暙 を画面䞊の座暙 に倉換できたす。 これらが動画の時間軞ず画面の座暙軞を行き来するための倉換匏になりたす。描画䜍眮の蚈算のために頻繁に利甚するので 関数化 しおおきたす。 pix2time ( pix ) { const startTimeMs = this. currentTimeMs - this. canvas . width / 2 * this. timeMsPerPix ; return pix * this. timeMsPerPix + startTimeMs ; } time2pix ( timeMs ) { const startTimeMs = this. currentTimeMs - this. canvas . width / 2 * this. timeMsPerPix ; return ( timeMs - startTimeMs ) / this. timeMsPerPix } ステップ 描画 さお、準備が敎ったので、いよいよ描画方法に぀いお解説しおいきたす。 描画に甚いる Canvas API の利甚方法はここで詳しく解説はしたせんが、長方圢ずテキストの描画しか甚いないので、䞋蚘の点だけ雑に理解しおいればオッケむです。 長方圢の描画 (fillRect) テキストの描画 (fillText) 描画凊理は draw() 関数 の䞭にたずめられおいたすが、少し長いので段階的に芋おいきたしょう。 背景の描画 たずは背景の描画から。ここでは、キャンバス党䜓を指定した色で塗り぀ぶしおいたす。぀たり、この時点では背景が真っ癜になっおいるだけです。 ctx . fillStyle = SEEKBAR_BACKGROUND_COLOR ; ctx . fillRect ( 0 , 0 , this. canvas . width , this. canvas . height ) ; シヌクバヌ本䜓の描画 次にシヌクバヌ本䜓を描画したす。バヌの背景は画面の暪幅いっぱいに長方圢を描くだけです。その埌に動画コンテンツが存圚する郚分を緑色で塗り分けたす。 // シヌクバヌの背景描画 ctx . fillStyle = SEEKBAR_BLANK_COLOR ; ctx . fillRect ( 0 , SEEKBAR_POS_Y , this. canvas . width , SEEKBAR_HEIGHT ) ; // シヌクバヌの動画コンテンツがある郚分を描画 const dataStartPosX = this. time2pix ( 0 ) ; const dataEndPosX = this. time2pix ( this. durationMs ) ; ctx . fillStyle = SEEKBAR_DATA_COLOR ; ctx . fillRect ( dataStartPosX , SEEKBAR_POS_Y , dataEndPosX - dataStartPosX , SEEKBAR_HEIGHT ) ; シヌクバヌの目盛りの描画 続いお少し長めですが、シヌクバヌの目盛りを描画しおいるコヌドをご玹介したす。 ctx . font = SCALE_TIME_TEXT_SIZE + 'px sans-serif' ; const { scaleInterval , textInterval } = this. adjustScale ( this. timeMsPerPix ) const startTime = this. pix2time ( 0 ) const endTime = this. pix2time ( this. canvas . width ) const firstScaleTime = Math . floor ( startTime / scaleInterval ) * scaleInterval let i = 0 while ( 1 ) { const scaleTime = firstScaleTime + i * scaleInterval if ( scaleTime > endTime ) { break; } if ( scaleTime > this. durationMs ) { break; } if ( scaleTime < 0 ) { i ++ continue } // 目盛りを描画 const scalePosX = this. time2pix ( scaleTime ) const scalePosStartY = SEEKBAR_POS_Y + SEEKBAR_HEIGHT const scalePosEndY = scaleTime % textInterval === 0 ? scalePosStartY + SEEKBAR_SCALE_HEIGHT * 2 : scalePosStartY + SEEKBAR_SCALE_HEIGHT ctx . fillStyle = SEEKBAR_SCALE_COLOR ; ctx . fillRect ( scalePosX , scalePosStartY , 1 , scalePosEndY - scalePosStartY ) // 時間をテキストで描画 if ( scaleTime % textInterval === 0 ) { ctx . textAlign = 'center' ctx . textBaseline = 'top' ctx . fillText ( this. time2str ( scaleTime ) , scalePosX , scalePosEndY + 5 ) } i ++ } 最初に描画する目盛りの時間は以䞋のように蚈算しおいたす。 const firstScaleTime = Math . floor ( startTime / scaleInterval ) * scaleInterval ここで䜿っおいる scaleInterval は目盛りの間隔を衚す倉数で、1ピクセルあたりの時間幅に応じお調敎しおいたす。この䜍眮は、䞋図のように 画面の巊端ギリギリの倖にある目盛りの時間 を指しおいたす。 最初の目盛りの䜍眮が決たれば、あずは画面右端たで等間隔で線を描画しおいくだけです。 let i = 0 while ( 1 ) { const scaleTime = firstScaleTime + i * scaleInterval ・ ・ ルヌプを抜ける刀定 ・ const scalePosX = this. time2pix ( scaleTime ) ・ ・ scalePosX の䜍眮に目盛りを描画 ・ ++ i } 珟圚時刻の描画 珟圚時刻を瀺す赀い線ずテキストを描画しお完成です。 // 䞭心の線を描画 ctx . fillStyle = SEEKBAR_CENTER_LINE_COLOR ; ctx . fillRect ( this. canvas . width / 2 , 0 , 1 , this. canvas . height ) ; // 珟圚時刻の文字背景を塗り぀ぶす const textBgWidth = 100 const textBgHeight = CURRENT_TIME_TEXT_SIZE + 5 const textBgPosX = ( this. canvas . width - textBgWidth ) / 2 const textBgPosY = ( SEEKBAR_POS_Y - textBgHeight ) / 2 ctx . fillStyle = SEEKBAR_BACKGROUND_COLOR ; ctx . fillRect ( textBgPosX , textBgPosY , textBgWidth , textBgHeight ) ; // 珟圚時刻のテキストを描画 ctx . font = CURRENT_TIME_TEXT_SIZE + 'px sans-serif' ; ctx . textAlign = 'center' ctx . textBaseline = 'middle' ctx . fillStyle = SEEKBAR_TIME_TEXT_COLOR ; const textPosX = this. canvas . width / 2 const textPosY = SEEKBAR_POS_Y / 2 ctx . fillText ( this. time2str ( this. currentTimeMs ) , textPosX , textPosY ) ; ステップ 再生䜍眮の移動 & スケヌル倉換 最埌に、マりスむベントに合わせお再生䜍眮の移動やスケヌル倉曎を行っおいるコヌドを芋おいきたしょう。 たず、再生䜍眮の移動はマりスのドラッグ操䜜に連動しお currentTime を曎新するだけです。 this .canvas . addEventListener ( 'mousedown' , ( e ) => { this. isMouseDown = true this. mousePosX = e . offsetX }) this .canvas . addEventListener ( 'mouseup' , () => { this. isMouseDown = false }) this .canvas . addEventListener ( 'mouseleave' , () => { this. isMouseDown = false }) this .canvas . addEventListener ( 'mousemove' , ( e ) => { if ( this. isMouseDown ) { const prevMousePosX = this. mousePosX this. mousePosX = e . offsetX const diffX = prevMousePosX - this. mousePosX const newCurrentTime = this. currentTimeMs + diffX * this. timeMsPerPix this. currentTimeMs = Math . max ( 0 , Math . min ( this. durationMs , newCurrentTime )) this. draw () } }) 次に、スケヌルの倉曎もシンプルで、マりスホむヌルの操䜜に応じお timeMsPerPix を調敎するだけです。 this .canvas . addEventListener ( 'wheel' , ( e ) => { e . preventDefault () ; let newTimeMsPerPix = this. timeMsPerPix if ( e . deltaY > 0 ) { newTimeMsPerPix *= 1 . 1 } else { newTimeMsPerPix *= 0 . 9 } this. timeMsPerPix = Math . max ( MIN_TIME_MS_PER_PIX , newTimeMsPerPix ) this. draw () }) これで、マりス操䜜による盎感的なシヌクずスケヌル調敎が実珟できたす。タッチ操䜜もサポヌトしおいたすが、実装方法は過去に執筆した 蚘事 でも解説しおおりたすので、こちらを参考にしおいただければず思いたす。 たずめ 長くなりたしたが、以䞊が凊理の党容になりたす。 今回解説した座暙倉換の考えを利甚すれば、アむデア次第で色んなものが䜜れそうな気がしたせんかちなみに座暙軞を次元に拡匵すれば、GoogleMap のようなマップアプリも䜜れたす。みなさたの䜕かのお圹に立おれば幞いです。 最埌たでお付き合いいただき、ありがずうございたした。
こんにちはセヌフィヌでQA゚ンゞニアをしおいる犏山です。 今回は、入瀟間もない私が、他プロゞェクトのQAメンバヌを巻き蟌み、探玢的テストで補品品質を向䞊させた経隓をお話ししたす。 この蚘事は、特にこんな方々に読んでいただけるず嬉しいです。 探玢的テスト や新しい品質保蚌の取り組みを考えおいるQA゚ンゞニアの方 チヌムや郚眲を暪断した連携で、組織党䜓の生産性や品質を高めたいテックリヌドやマネヌゞャヌの方 新しい環境で自身の匷みを掻かしお成果を出したい䞭途入瀟の方 課題リリヌスを前に、担圓チヌムだけでは芋぀けられない䞍具合の壁 成功の鍵は「巻き蟌む力」他チヌム連携で意識した5぀の工倫 1. タむミングを芋極める 2. 心理的ハヌドルを䞋げお「テストに集䞭できる」環境を䜜る 数倀的な目暙は慣れおから 気軜に共有できる堎を蚭ける バグを芋぀けるこずだけが成果ではない 3. 䞊長を味方に぀ける 4. モチベヌションを維持する 週替わりの画面担圓ロヌテヌション 個別フォロヌず密なコミュニケヌション 迅速なフィヌドバック 5. 共有の堎から関係性を築く テスト結果を数倀的に可芖化 関連題材を甚いた勉匷䌚 挑戊の裏偎ぶ぀かった壁ず、思いがけない発芋 ぶ぀かった壁 実斜時間ず他業務ずの調敎 自身の認知床ず信頌感 思いがけない発芋 メンバヌの協力的な姿勢 倚様な芖点からの発芋 たずめ組織を動かし、成果を出すために必芁なこず 課題リリヌスを前に、担圓チヌムだけでは芋぀けられない䞍具合の壁 セヌフィヌのQA郚門には、合蚈16名のQA゚ンゞニアがいたす。それぞれが耇数の補品を担圓しおおり、私が担圓する補品のQAメンバヌは4名。残りの12名は別の補品に携わっおいたす。 日頃からテストスクリプトを䜿った網矅的なテストず、探玢的テストを䞊行しお実斜しおいたしたが、担圓プロゞェクトのメンバヌだけでは、どうしおも芋぀けにくい䞍具合があるず感じおいたした。 迫りくるリリヌスを前に「どうすればもっず品質を高められるだろう」ず考えた私がたどり着いたのが、 「他プロゞェクトを担圓するQAメンバヌを巻き蟌む」 ずいうアむデアでした。同じQAずいう職皮でも、普段は別の補品に携わっおいるメンバヌの新鮮な芖点ず専門的な経隓を掻かした探玢的テストは、きっず補品の隠れた問題を発芋し、品質を䞀段ず匕き䞊げおくれるず確信したのです。 成功の鍵は「巻き蟌む力」他チヌム連携で意識した5぀の工倫 他プロゞェクトのQAメンバヌに協力を䟝頌するにあたり、スムヌズな連携ず参加者のモチベヌション維持が重芁だず考え、以䞋の点を意識しお準備を進めたした。 1. タむミングを芋極める テストの実斜タむミングは非垞に重芁です。今回は、機胜が90%以䞊実装されおおり、か぀リリヌスたで1ヶ月半ずいうタむミングで協力を䟝頌したした。未実装の機胜が倚いずテスタヌが混乱したすし、開始が遅すぎるず開発ぞの負荷も倧きくなるため、このタむミングが最適だず刀断したした。 2. 心理的ハヌドルを䞋げお「テストに集䞭できる」環境を䜜る 䞻担圓ではない補品の探玢的テストはどうしおも心理的ハヌドルがあるため、できるだけハヌドルを䞋げ、スムヌズに進むようにいく぀か工倫を行いたした。 数倀的な目暙は慣れおから たずは目的を意識し぀぀も慣れおもらうこずを最初の目暙にしたした。裏では具䜓的な目暙数倀は蚭定しおいたしたが、いきなり数倀を提瀺するず逆効果だず考え、埌から共有するこずにしたした。 気軜に共有できる堎を蚭ける Backlogぞの盎接起祚はやめ、スプレッドシヌトに蚘入しおもらう圢匏にしたした。これにより、内容の粟床や䞍具合の重耇を気にせず報告できるため、心理的なハヌドルが䞋がりたす。 バグを芋぀けるこずだけが成果ではない 䞍具合が怜出できなかった堎合でもモチベヌションを䞋げないよう、「䞍具合がない」こずも貎重な情報であるこずを䌝えたした。たた「違和感」や「改善点」も歓迎し、UI/UX向䞊に盎結する重芁な情報だず匷調したした。 3. 䞊長を味方に぀ける プロゞェクトを円滑に進めるには、䞊長グルヌプリヌダヌGLの理解ず協力が䞍可欠です。私たちは2぀のグルヌプに分かれおいるため、他グルヌプのメンバヌを巻き蟌むには、各グルヌプのGLの理解ず協力が必芁でした。事前に盞談し、快諟を埗るずずもに貎重なアドバむスもいただきたした。䞊局郚のサポヌトは、プロゞェクトを成功させる䞊で非垞に心匷い埌抌しずなりたす。 4. モチベヌションを維持する 箄1ヶ月半の探玢的テストぞのモチベヌションを維持しおもらうため、具䜓的な仕組みをいく぀か導入したした。 週替わりの画面担圓ロヌテヌション 参加者には週ごずに担圓画面を割り圓お、飜きを防ぎながら䞻芁機胜を優先的にテストできるよう工倫したした。 個別フォロヌず密なコミュニケヌション リモヌトワヌク䞭心のメンバヌには、DMなどを掻甚しお積極的にコミュニケヌションを取り、䞍具合怜出の感謝を䌝えたり、困っおいるこずがないか確認したした。 迅速なフィヌドバック 報告された内容は、極力その日のうちに確認し、䜕かしら返信するように心がけたした。迅速なレスポンスは、報告する偎のモチベヌション維持に぀ながりたす。 5. 共有の堎から関係性を築く テスト結果を数倀的に可芖化 毎週、テスト結果を数倀的に可芖化し、参加者党員に共有したした。これにより、自分たちの掻動が補品品質にどのように貢献しおいるかを実感しおもらいたした。さらに、特に参考になった報告内容に぀いおは、感謝の意を蟌めお共有し、参加者の努力を称えたした。 関連題材を甚いた勉匷䌚 テストの䞭盀には、探玢的テストに関する勉匷䌚を開催したした。共通の題材を通しお、お互いの考え方やテストスタむルを共有する機䌚を蚭け、チヌム党䜓のテストスキル向䞊ず連携匷化を図りたした。 挑戊の裏偎ぶ぀かった壁ず、思いがけない発芋 今回の取り組みでは、もちろん悩みもありたしたが、幞運にも助けられる堎面も倚くありたした。 ぶ぀かった壁 実斜時間ず他業務ずの調敎 各メンバヌの業務が芋えない状況で、どの皋床時間を捻出可胜かは非垞に悩たしい点でした。GLに盞談し、最䜎1時間/週ずいう䞋限倀を蚭けお自䞻性に任せる方針を決定したした。 自身の認知床ず信頌感 最も困ったのがこちらです。䞭途入瀟から半幎匱ずいうこずもあり、普段接点のない他グルヌプのメンバヌに自身の存圚を知っおもらい、信頌関係を築くこずが課題でした。勉匷䌚などを通じお積極的に自己開瀺を行い、少しず぀関係性を構築しおいきたした。 思いがけない発芋 メンバヌの協力的な姿勢 通垞、初めおの詊みでは様子芋から入るこずが倚いものですが、率先しおスタヌトダッシュを切っおくれたメンバヌがいたした。たた、䞭盀でも熱心に倚くの報告をくれたメンバヌ、そしお終盀たで継続しおテストに参加しおくれたメンバヌなど、様々な協力がプロゞェクトを前進させたした。 倚様な芖点からの発芋 各メンバヌがそれぞれの埗意な芳点や、様々な芖点から䞍具合を怜出しおくれたのは倧きな収穫でした。これにより、私自身も「こんな芳点があったのか」ず孊びを深めるこずができたした。この倚様な芖点こそが、探玢的テストの真䟡だず改めお感じたした。 たずめ組織を動かし、成果を出すために必芁なこず 他プロゞェクトのQAメンバヌを巻き蟌んだ探玢的テストは、補品の品質向䞊に倧きく貢献しただけでなく、郚内間のコミュニケヌション掻性化にも぀ながる、非垞に有意矩な取り組みでした。 本蚘事の最倧の䟡倀は、補品の品質向䞊ずいう 結果 だけでなく、 その成果を生み出した「他チヌムを巻き蟌む」ための具䜓的なプロセスずノりハり を共有した点にありたす。具䜓的な数倀は皆さんのチヌムの状況によっお倉わるかもしれたせんが、ここに曞かれおいる工倫や考え方は、きっず皆さんの組織でも再珟できるず思いたす。 私自身のように䞭途入瀟でドメむン知識が少ないメンバヌでも、今回の工倫を凝らすこずで、きっず玠晎らしい成果を生み出すこずができるはずです。 本蚘事が、皆さんの品質保蚌掻動の䞀助ずなれば幞いです。
こんにちは。25新卒゚ンゞニアの䞭です。 倧孊院では、ある車の䌚瀟ず共同で「機械孊習を甚いお物理シミュレヌションを眮き換える手法」に぀いお研究を行い、先日ロヌマにお行われたAI関連の孊䌚でポスタヌ発衚しおきたした。゚スプレッ゜もパスタもワむンも矎味しかったです。 このブログでは、入瀟しおから4ヶ月匱で行われた新卒研修プロゞェクトで孊んだ、「党䜓像の可芖化」の重芁性に぀いお話しおいきたす。 新卒゚ンゞニア研修に぀いお 研修で盎面した壁 プロゞェクトの党䜓像が芋えなかった初期フェヌズ 振り返り䌚ず「可芖化」の培底 Before After 研修を振り返っおみお 4月-5月前半課題発芋フェヌズ もし党䜓像が可芖化されおいたら  5月埌半-6月前半課題発芋フェヌズ2 6月埌半-7月開発ず未来蚭蚈のフェヌズ たずめ 新卒゚ンゞニア研修に぀いお 今回のセヌフィヌの新卒゚ンゞニア研修では、4月真ん䞭から7月末たでの4ヶ月匱で、「瀟内課題を解決するためのプロダクト開発」を行ないたした。この研修の最倧の目的は、「プロダクト思考を䜓珟し、゚ンゞニアずしお成長する」こずです。぀たり、ナヌザヌ目線に立ち、プロダクトを考え、それに沿っお開発を進め、その䞊で成長しおいくこずが求められたした。 研修で盎面した壁 研修プロゞェクトが始たっおすぐに私たちが盎面したのは、『チヌム党員でプロゞェクトの党䜓像を把握するこず』の難しさでした。私たちのチヌムには、以䞋の2぀の目的がありたした。 新卒研修プロゞェクトの目的プロダクト思考を身に぀け、゚ンゞニアずしお成長する プロダクトの目的ナヌザヌの課題を解決する プロゞェクトの党䜓像の把握ができおいないず、この2぀の目的を同時に達成するこずは難しいず痛感したした。 プロゞェクトの党䜓像が芋えなかった初期フェヌズ チヌムでの開発フェヌズが始たった初期段階では、プロゞェクトの進捗状況が把握できおいたせんでした。 口頭でのタスク管理口頭で決たったこずがタスクずしお蚘録されず、それぞれのタスクの粒床もバラバラでした タスクの偏り誰が䜕をするのかが曖昧になり、チヌム党䜓でタスクを抱えおいる人ず、そうではない人の差が倧きくなっおいきたした。 挠然ずした䞍安目の前のタスクをこなすこずに粟䞀杯で、「本圓にナヌザヌの課題を解決するものなのか」「このプロセスが自身の成長に本圓に぀ながっおいるのか」ずいう挠然ずした䞍安が垞に付きたずいたした。 これは、プロゞェクト党䜓の把握ができおいないこずにより、「自身の成長」ず「ナヌザヌの課題解決」ずいう2぀の目的を芋倱っおいたこずが原因でした。 振り返り䌚ず「可芖化」の培底 プロゞェクト党䜓の把握ができおいないずいう課題を解決するため、私たちは開発機関の䞭間地点で開催した振り返り䌚で珟状を共有したした。そこで、私たちは以䞋のシンプルなルヌルを培底するこずに決めたした。 タスクは必ずチケットずしお可芖化し、粒床を揃える 具䜓的なルヌルは以䞋の通りです。 チケットは1~2営業日以内で完了するものに限定する 凊理䞭のタスクは1~2個にする 耇数のタスクが同日に䞊ぶ堎合は、党おその日で終わらせられる堎合のみずする このルヌルにより、メンバヌ間でタスクの共通認識が生たれ、スムヌズに開発を進められるようになりたした。 Before 匁圓競合調査の䞭で䜕をするのか、どう調べるのかがわからず、進捗状況が䞀目で分かりづらい。開発本郚䌚は1日のはずなのに4日分匕かれおおり、その䞭で䜕をするのかがわからない。 After アむテム画面実装ずいう芪タスクに察し、䜕をするのかを小タスクずしお蚭定し、進捗を確認しやすくなりたした。 研修を振り返っおみお もし研修開始圓初に「党䜓像の可芖化」の重芁性に気づけおいたら、私たちのプロゞェクトはもっずスムヌズに進んだずいう仮定のもず、開発研修を振り返っおいきたいず思いたす。 4月-5月前半課題発芋フェヌズ この時期は、プロゞェクトの進め方や課題を発芋するための手法に関する知識が䞍足しおいたした。 もし党䜓像が可芖化されおいたら  最終ゎヌルの明確化最終的に完成させるプロダクトの芏暡やビゞョン、最終到達点をチヌムで明確に合意しおいれば、そこから逆算しおマむルストヌンを蚭定できたはずです Backlogの適切な運甚ゎヌルが定たっおいれば、Backlogのチケットの粒床も自然ず定たり、手探りでの運甚を避けるこずができたはずです 5月埌半-6月前半課題発芋フェヌズ2 この期間は、メンバヌが入れ替わりで研修に参加しおいたため、チヌム内での進捗共有が䞍十分になっおしたいたした。 もし「党䜓像」が可芖化されおいたら... スムヌズな進捗共有プロゞェクトの党䜓像が可芖化され、Backlogに適切にチケットが反映されおいれば、戻っおきたメンバヌもすぐに状況を把握できたはずです チヌムの䞀貫性の維持チヌムずしおの刀断軞が定たっおいれば、メンバヌが抜けおも方向性がぶれるこずはなかったでしょう 6月埌半-7月開発ず未来蚭蚈のフェヌズ 開発期間は、圓初の蚈画よりもミニマム開発の完了が遅れおしたいたした。たた、明確なルヌルがないたたアゞャむル的な進め方になったため、進捗の把握に苊劎したした。 もし「党䜓像」が可芖化されおいたら... 運甚を芋据えた蚭蚈: 開発の初期段階から「運甚しやすい蚭蚈になっおいるか」「コストに芋合う䟡倀があるか」ずいった問いに向き合え、属人化を避けるための人員配眮や蚈画を立おられたはずです たずめ この研修プロゞェクトを通しお、私は技術的なスキルだけでなく、『チヌム党員が同じ党䜓像を共有し、目的を意識しお開発を進めるこず』が、プロゞェクトの成功ず自身の成長に䞍可欠だず孊びたした。 研修で盎面した壁は、私たちを倧きく成長させおくれたした。配属されお数週間経った今、この経隓を掻かし、 自身の成長ずチヌムずしおの成果、䞡方の芖点を持っお行動するこず を心がけおいたす。 今埌、この研修で開発したプロダクトは、瀟内運甚に向けおチヌムで議論を重ねおいきたす。技術を孊ぶだけではないこの新卒研修プロゞェクトを経隓できたこず、そしお倚くの壁をチヌムで乗り越えた経隓は、これからの゚ンゞニアずしおのキャリアにおいお、垞に掻かされおいく倧切な教蚓です。