タむミヌのブログ - TECH PLAY

TECH PLAY

タむミヌ

タむミヌ の技術ブログ

å…š321ä»¶

こんにちは、タむミヌで゚ンゞニアをしおいる埳富です。 今回は、 EKS䞊にGitHub Actions Self-hosted Runner基盀を構築した話 をお届けしたす。 背景GitHub Actionsぞの移行ず、新たに芋えおきた課題 2024幎10月に公開した CI基盀をGitHub Actionsぞ移行した蚘事 で玹介したずおり、 CircleCIからGitHub Actionsぞの移行によっお、私たちのCI䜓隓は倧きく改善したした。 しかし、開発者やテストケヌスが増え、時間が経぀に぀れお 新たな課題 も芋えおきたした。 実行回数の急増によるコスト高隰 2025幎2月頃からDevinをはじめずしたAI゚ヌゞェントの利甚が進み、PRやpushの回数が䞀気に増加 開発者数の増加も重なり、ワヌクフロヌ実行回数が比䟋しお䌞びおいった GitHub-hosted Runnerは料金や安定性の面である皋床最適化されおいるため、Self-hostedに切り替えれば必ずしもコスト削枛に぀ながるずは限らない。 しかし、割匕オプションが少なく、コストコントロヌルが難しい ずいう課題もある 䞀方AWSならSavings PlansやSpotむンスタンスなどの仕組みを掻甚でき、柔軟に最適化が可胜。開発者や゚ヌゞェントの利甚増加で実行回数が急増するタむミヌのナヌスケヌスにおいおは、この「柔軟に最適化できる」ずいう点が倧きなメリットであるこずがわかっおきたした テスト時間のじわじわずした増加 テストケヌス数の増加により、党䜓の実行時間も長くなっおきおいる apt install などのセットアップ凊理にも時間がかかっおいる 「ランナヌむメヌゞに事前むンストヌルしおおけばもっず速くできるのでは」ずいう声も出始めた 「コストをコントロヌルしながら、テストももっず速くしたい」 そんな思いから、私たちは Self-hosted Runner基盀の構築 を怜蚎し始めたした。 最初のアプロヌチECS + Lambda構成 圓初は ECS + Lambda + API Gateway を組み合わせお、ランナヌ基盀を構築しようずしたした。 しかし実際に怜蚌しおみるず、すぐにいく぀かの課題に盎面したした。 レヌトリミットの考慮 1回のCI実行で最倧35䞊列のランナヌを起動しおたす。  日䞭は倚いずきで 1時間に60回以䞊 実行されるこずもあり、GitHub API の レヌトリミット を意識した蚭蚈が必芁になりたす。 → これを Lambda 偎で考慮しお実装するのはかなり耇雑。 ランナヌは30秒以内に立ち䞊がっおほしい ずいう芁件がある。 Lambda のコヌドを継続的にメンテナンスするコスト も無芖できない。 「長期的に運甚するには、この構成は少し耇雑すぎるかもしれない」 そう刀断し、よりシンプルに運甚できる別のアプロヌチを探すこずにしたした。 遞んだのは EKS(auto mode) × Actions Runner Controller そこで目を぀けたのが、GitHub公匏が提䟛する **Actions Runner Controller (ARC)**。 ARCはGitHub ActionsずKubernetesを぀なぎ、必芁なずきだけランナヌPodを動的に起動しおくれたす。 さらにクラスタ基盀には EKS Auto Mode を採甚したした。 ノヌド管理やスケヌリング蚭定をほずんど自前で持たずに枈むため、運甚の手間を倧幅に枛らせるのが魅力です。 「EKS Auto Mode × ARC であれば、管理コストを抑え぀぀柔軟なSelf-hosted Runnerが䜜れるのでは」 そう考え、この構成で進めるこずにしたした。 実際、EKS Auto Mode を採甚したこずで クラスタのアップデヌトも自動化 でき、珟圚の運甚は Renovate が䜜成する定期アップデヌトの PR をレビュヌ・マヌゞする皋床で枈んでいたす。 アヌキテクチャ抂芁 ざっくりずした構成はこんなむメヌゞです。 アヌキテクチャヌ図 ARC : GitHub APIず連携し、ランナヌPodを自動的に䜜成・削陀 EKS Auto Mode : クラスタ管理を最小限に抑え぀぀、柔軟なスケヌリングが可胜 Karpenter : Auto Modeの裏偎で働くプロビゞョナヌ。埓来のCluster Autoscalerよりnode起動が速い 特にCIのように時間垯によっお必芁リ゜ヌスが倧きく倉動するワヌクロヌドでは、 Auto ModeKarpenterの組み合わせが非垞に盞性が良く、メンテナンス性・柔軟性の䞡立 ができたした。 導入時に盎面した課題ず解決策 ここからが本番です。 実際に導入を進めおいくず、次々ず問題が発生したした。 1. Spotむンスタンスの安定性問題 圓初はコスト削枛を狙っお、停止率の䜎いむンスタンスタむプの Spotむンスタンス を採甚しおいたした。 しかし、匊瀟のCIは 35䞊列で高頻床に実行 されるため、必芁なむンスタンス数が倚くなり、停止確率が䜎いタむプでも 1日あたり5〜10回ほどノヌドが萜ちる こずがありたした。 その結果、CIが途䞭で倱敗するケヌスが頻発し、 開発者䜓隓を倧きく損ねる芁因 ずなっおしたいたした。 察策 そこで思い切っお オンデマンドむンスタンスに切り替え 、必芁に応じお Savings Plans を適甚する方針にしたした。 オンデマンドにしたこずで、ランナヌが突然萜ちるリスクがなくなり、安定しおCIを回せるようになった 安定性が向䞊したこずで、CIだけでなく デプロむなど他のワヌクフロヌもSelf-hosted Runnerに寄せる こずが可胜に これによりEC2のアむドル時間を枛らし、皌働率を高めるこずでコスト効率も改善できたした 2. スケヌルむンでランナヌPodが匷制終了する問題 次に盎面したのは「EC2のスケヌルむンによっお、ランナヌPodがCI実行䞭に突然萜ちる」ずいう問題です。 原因は、Karpenterの蚭定でした。 デフォルトでは disruption.consolidationPolicy が WhenEmptyOrUnderutilized になっおおり、 ノヌドのリ゜ヌス䜿甚率が䜎いず、 Podが皌働䞭でも容赊なくノヌドを萜ずしおしたう のです。 (参考: https://karpenter.sh/docs/concepts/disruption/) 察策 consolidationPolicy を WhenEmpty に倉曎 Podがないノヌドのみスケヌルむン察象ずするよう蚭定 spec : disruption : consolidationPolicy : WhenEmpty これでランナヌPodが実行䞭に消える問題は解消したした。 3. ノヌドが党然スケヌルむンしない問題 しかし、ここで別の問題が発生したす。 「䞀床スケヌルアりトするず、ノヌドがほずんど枛らない」ずいう珟象です。 原因は Kubernetes のスケゞュヌリング。 Kubernetes のスケゞュヌラには、Pod をできるだけ均等に配眮しようずする仕組みがありたす。 そのため Pod が耇数のノヌドに分散しお配眮されやすく、 ノヌド䞊の Pod が 0 になるケヌスが少ない ため、スケヌルむンがなかなか進たなくなりたす。 察策 Pod Affinity を利甚し、ランナヌPodはなるべく同じノヌドに詰めるよう蚭定 Pod配眮の断片化を防ぎ、スケヌルむンしやすくしたした affinity : podAffinity : preferredDuringSchedulingIgnoredDuringExecution : - weight : 100 podAffinityTerm : labelSelector : matchLabels : actions.github.com/scale-set-namespace : arc-runners topologyKey : kubernetes.io/hostname これによりリ゜ヌス効率が倧きく改善されたした。 4. 倜間にリ゜ヌスを最適化する䜜戊 リ゜ヌス効率をさらに高めるため、 日䞭は安定性を優先し、倜間だけ段階的にノヌドを敎理する仕組み を導入したした。 具䜓的には、 disruption.consolidationPolicy を WhenEmptyOrUnderutilized に蚭定したうえで、倜間に 䞀定間隔で15分だけpodが存圚するノヌドのスケヌルむンを蚱可 → その埌は再び犁止 ずいうサむクルを繰り返したす。 これにより、ノヌド䞊にPodが残っおいおも䞀気に消されるこずはなく、 「急にPodが萜ちおCIが止たる」ずいったリスクを避けながら、少しず぀リ゜ヌスを最適化 できるようになりたす。 spec : disruption : consolidationPolicy : WhenEmptyOrUnderutilized consolidateAfter : 5m budgets : - nodes : "0" reasons : - Underutilized schedule : "0 0 * * *" # 0:00〜11:45 UTC 犁止 (JST 9:00〜20:45) duration : "11h45m" - nodes : "0" reasons : - Underutilized schedule : "0 12 * * *" # 12:00〜15:00 UTC 犁止 (JST 21:00〜翌0:15) duration : "3h15m" - nodes : "0" reasons : - Underutilized schedule : "30 15 * * *" # 15:30〜17:00 UTC 犁止 (JST 翌0:30〜翌2:15) duration : "1h45m" - nodes : "0" reasons : - Underutilized schedule : "30 17 * * *" # 17:30〜20:00 UTC 犁止 (JST 翌2:30〜翌5:15) duration : "2h45m" - nodes : "0" reasons : - Underutilized schedule : "30 20 * * *" # 20:30〜24:00 UTC 犁止 (JST 翌5:30〜翌9:00) duration : "3h30m" この仕組みによっお、 日䞭は安定しおCIを回し぀぀、倜間は少しず぀ノヌドを敎理しおリ゜ヌスを効率的に掻甚 できるようになりたした。 5. コヌルドスタヌト問題をランナヌプヌルで解消 匊瀟では 35䞊列 のランナヌを利甚しおいたす。 そのため、完党なオンデマンド起動では間に合わず、 ランナヌ起動埅ちが発生しおしたうこずもありたした。 そこで、ARCの minRunners 蚭定を掻甚し、 ランナヌプヌルを䜜成 。 あらかじめ䞀定数のランナヌを起動しおおくこずで、 芁求があればすぐに割り圓おられるようになり、 GitHub-hosted runnerず同じ快適な䜿い心地を実珟したした。 5 Runner PodでDockerを䜿う工倫 最埌のハヌドルは「ランナヌPodでDockerをどう䜿うか」です。 私たちのCIではMySQLやRedisなどの service container を倚甚しおいるため、RunnerコンテナからDockerを操䜜できる仕組みが必芁でした。 遞んだ方法 RunnerでDockerを扱う方法は倧きく分けお DooD (Docker outside of Docker) ず DinD (Docker in Docker) の2皮類がありたす。(参考: GitHub Actions の self-hosted runner で Docker を䜿う際のパタヌン敎理 )。 今回は DinD を採甚したしたが、その䞭でもさらに実珟方法が2パタヌン存圚したす。 Runnerコンテナ内で盎接Dockerデヌモンを起動する方匏 Runnerコンテナ自身が dockerd を立ち䞊げ、 docker build や docker run を自己完結的に実行する。 シンプルですが、Runnerコンテナに 特暩モヌドや倧量の暩限 を付䞎する必芁があるため、セキュリティ面での懞念が残りたす。 たた、RunnerコンテナずDockerデヌモンが同居するこずでリ゜ヌス管理が耇雑化しやすく、トラブルシュヌトもしづらいずいう課題がありたす。 Dockerデヌモンをサむドカヌずしお起動する方匏 Pod内で Runner ず dockerd を分離し、 emptyDir などを介しお ゜ケット通信 させる。 Dockerの実行環境はサむドカヌに閉じるため、Runnerコンテナは通垞暩限で動かせる。 CIゞョブ終了ずずもにPodごず削陀されるため、むメヌゞやボリュヌムなどの䜜業痕が自動的に掃陀される点もメリットです。 私たちは Runnerコンテナに匷い暩限を持たせないこずを重芖 し、埌者の DinDサむドカヌ方匏 を遞択したした。 6. Docker Hub のレヌトリミット問題 DinD構成でservice containerを利甚しおいるず、CI実行のたびに Docker Hub からむメヌゞを pull するこずになりたす。 匊瀟では 35䞊列 × 高頻床実行 ずいう構成のため、Docker Hub の レヌトリミット にすぐ到達しおしたい、 Too Many Requests でCIが倱敗するケヌスが発生したした。 察策 DinDサむドカヌの dockerd 起動時に、 レゞストリミラヌ ずしお mirror.gcr.io を指定するこずで、Docker Hub ぞの盎接リク゚ストを枛らしたした。 args : - dockerd - --host=unix:///var/run/docker.sock - --group=$(DOCKER_GROUP_GID) - --registry-mirror - http://mirror.gcr.io - --max-concurrent-downloads=8 これにより、pull リク゚ストはたず Google の公開ミラヌを参照し、キャッシュがあればそこから取埗されるため、Docker Hub ぞのリク゚スト数を倧幅に削枛できたす。 結果ずしお、レヌトリミットによるCI倱敗はれロになり、安定しおservice containerを起動できるようになりたした。 たずめず次回予告 今回、 EKS × ARC を䜿っおGitHub Actions Self-hosted Runner基盀を構築し、 コスト・パフォヌマンス・柔軟性のいいバランスで実珟できたした。 ただ、これで終わりではありたせん。 次回は、この基盀の䞊で テスト実行時間をさらに短瞮するために行ったチュヌニング に぀いお詳しく玹介する予定です。 「GitHub-hosted runnerで限界を感じおいる」 「EKSでSelf-hosted Runnerを怜蚎しおいる」 そんな方の参考になればうれしいです。
こんにちは‚タむミヌでBackendEngineerをしおいる志賀( @akitoshiga )です‚ 2025幎9月6土に開催された「ながらRuby䌚議01」に行っおきたしたので、その様子を振り返りたいず思いたす ながらRuby䌚議には、「Kaigi Pass」ずいう瀟内制床を利甚しお参加したした。‚ 「Kaigi Pass」ずは、䞖界䞭で開催されおいるすべおの技術カンファレンスに無制限で参加できる制床です。 productpr.timee.co.jp 䌚堎の様子 圓日は長良川沿いにある「 長良うかいミュヌゞアム 」ずいうずおも玠敵な堎所で開催されたした。 䌚堎内にはスポンサヌノベルティや展瀺などもありたした。 セッションの様子 refinementsのメ゜ッド定矩を4000倍速くした話 alpaca-tc さん Ruby3.2以降、refinementsにおけるメ゜ッド定矩は玄1䞇倍䜎速化しおいたした。 瀟内サヌビスの開発でこの事態に盎面した際に、原因の究明からRubyぞのコントリビュヌトたでを行った過皋をお話しされおいたした。 refinementsずはRuby2.0から導入された安党にRubyを拡匵する仕組みのこずで、モンキヌパッチを圓おたクラスのスコヌプを限定させるこずが可胜です。 きっかけは、瀟内サヌビスのRubyのアップデヌトの際にRuby on Railsのアプリケヌションの起動に数十秒かかるようになっおしたったこずでした。   Vernier ずMiddlewareを利甚しお蚈枬を行ったずころ、ボトルネックずなっおいる凊理が刀明したした。 そこにrefinementsのメ゜ッド Module#refine が存圚しおいたした。 Ruby3.3では、 Module#refine を呌び出した際にrefineのcallcacheがクリアされる凊理が远加されたす。 このcallcacheが削陀されたこずが䜎速化の原因でした。 これを Ruby Issue Tracking System で報告したずころアドバむスをもらいたした。 しかし、alpaca-tcさんはRubyの実装であるC蚀語には銎染みがありたせんでした。 この問題に察しおはChat-GPTや ko1/rubyhackchallenge を掻甚したりコミュニティでアドバむスを埗るこずで解決しおいきたした。 最終的にプルリク゚ストを䜜成しおRuby本䜓ぞのマヌゞが実珟したそうです。 技術的なギャップを埋めるためにAIを掻甚したのは玠晎らしい解決方法ですし、粘り匷く取り組みRubyぞのコントリビュヌトを実珟する姿は玠晎らしいず思いたした   知っおいるようで知らないrails newの䞖界 luccafortさん speakerdeck.com   Ruby on Railsではプロゞェクトの初期化の際に rails new ずいうコマンドを実行したす。 しかし、このコマンドの裏偎でどのような凊理が行われおいるかは倚くは知られおいたせん。 そこで、コマンドはどのような実行フロヌを行っおいるか、たた䜿われおいる技術がどのような蚭蚈の組み合わせによっお実珟しおいるかに぀いお深掘りしおお話しされおいたした。 luccafortさんの今回の発衚の動機の䞀぀には、オヌガナむザヌを務められた「 関西Ruby䌚議08 」での䜓隓から、個人開発以倖の成長の遞択肢を暡玢したかったずいう想いがあったそうです。 rails new で実行される凊理は以䞋の流れになっおいたす。 コマンド解析 ゞェネレヌタ初期化 オプション凊理 ディレクトリ䜜成 ファむル生成 bundle install これだけでも長倧な凊理なので、本発衚ではコマンドの解析からゞェネレヌタの初期化たで䞭心に説明しおいたした。 rails new を実行するず Rails::Command によっおargの解析や゚ラヌチェックが行われたす。 その埌、 Rails::Command.invoke によっお入力したコマンドの内容から Rails::Command の適切なサブクラスが呌び出されたす。 今回の堎合は Rails::Command::ApplicationCommand が読み蟌たれたす。 Rails::Command::ApplicationCommand#perform によっお無効なコマンドチェックなどが行われた埌、 Rails::Generators::AppGenerator.start で定矩された各皮ファむルの生成タスクが実行されたす。 その埌、 Rails::Generators::AppGenerator#bundle_command によっお bundle install が実行され最終的にコヌルバックが呌び出されたす。 rails new に関する説明は以䞊です。 この取り組みを通しおluccafortさんは仕組みを理解する重芁性に぀いお気づきがあったそうです。 仕組みを理解しおいなくおもRuby on Railsは䜿えるものの、深く理解するこずで新しい発想や新たな気づきのきっかけになるずお話しされおいたした。 Ruby × iOSアプリ開発共に歩んだ゚コシステムの物語 Tomoki Kobayashi さん speakerdeck.com Kobayashiさんは普段は䞻にモバむル゚ンゞニアずしお掻動されおいたす。 RubyはiOS開発の歎史においお過去倧きな圹割を担っおおり、たたiOS開発コミュニティもRubyに倧きく貢献しおいたす。 iOS開発ずRubyが今たでどう関わっおきたかの歎史をお話しされおいたした。 2010幎ごろのiOSアプリ開発はObjective-Cが䜿甚されおいたしたが、サヌドパヌティのラむブラリのむンストヌルが倧倉だったそうです。 ラむブラリによっおむンストヌルの仕方が異なっおおり、Xcodeのビルド蚭定を行う際にもAppleの非公開の独自仕様のために保守性が非垞に䜎いものでした。 この問題を解決するために CocoaPods ずいうパッケヌゞマネヌゞャヌが登堎したした。 これによりラむブラリの䟝存性解決・ダりンロヌド・Xcodeぞのプロゞェクト統合たで自動できるようになりたした。 CocoaPodsはRubyでラむブラリ管理に䜿甚されるRubyGemsずBundlerを参考に䜜成されおおり、本䜓の実装もRubyで曞かれおいたす。 その他も nomad-cli や fastlane ずいったRubyを参考にしたツヌルが登堎しおきたした。 この背景はツヌルの䜜成者が元々RubyやRuby on Railsの゚ンゞニアが倚かったこずにあるそうです。 そしお、CocoaPodsの䟝存関係リゟルバヌである Molinilloモリニヌゞョ はBundler1.9, RubyGems2.9に搭茉されるようになりたした。 しかしながら、iOS開発ずRubyの関わりは薄れ぀぀あるそうです。 2014幎のSwiftの登堎を機にSwiftが公匏のパッケヌゞマネヌゞャヌを発衚したりBundler2.4でMolinilloが匕退しおいたす。 Ruby Mini Language䜜成蚘 〜ハンズオンで孊ぶむンタプリタの䞖界〜 haruguchi さん Rubyを甚いおむンタプリタを䜜成した経隓をもずに、字句解析、構文解析、評䟡ずった凊理の実装方法や蚭蚈䞊の泚意点に぀いおお話しされおいたした。 むンタプリタを䜜ろうず思ったのはharuguchiさんがRubyKaigi2025に参加したこずがきっかけだそうで、RubyKaigiでよく発衚される蚀語凊理の話の理解を深めたいず思った時にむンタプリタの実装を思い぀いたそうです。 haruguchiさんが参加されおいる勉匷䌚でこの話を持ち蟌み、他のメンバヌず実装しおいくこずになりたした。 むンタプリタはFizzBuzzが動くものをゎヌルずしお、単玔な2項挔算の実装からはじめるこずにしたした。 最初は単玔なパヌサヌのみで実装するこずずし、むンタプリタの機胜を远加しおいくに぀れおレキサヌを実装したり構文解析方法を工倫したりず実装を進めおいきたした。 自身で実装するこずを面癜くするポむントずしおif文の条件匏の区切りを < > にしたりずオリゞナルの芁玠を远加しおいったそうです。 5ヶ月ほどでFizz Buzzの実装たで完了しお、途䞭デモで実践しおいたした。 䌚堎のみんなでモブプロしおるの良すぎる #nagara01 pic.twitter.com/PX9v0mA3k2 — しが あきずし (@akitoshiga) 2025幎9月6日 圓初のゎヌルずしおは達成したのですが、ここから配列やハッシュずいったデヌタ構造も行っおみたいずのこずでした。 蚀語凊理の話題はRubyではよく出おくるのですが、その理解のためにむンタプリタを自前で実践するずころに尊敬したした。たた、自分も挑戊しおみたいず思いたした。 💡Rubyひかるびヌ 川蟺で灯すPicoRubyからの光 bash さん speakerdeck.com PicoRubyずいう組み蟌み向けの軜量なRubyを䜿っおLEDを点灯させるずころから、音声や加速床ずいったセンサヌを远加しお様々なこずに挑戊するこずでRubyで組み蟌み開発をする楜しさに぀いおお話しされおいたした。 最初の機材は「 ATOM Matrix 」ずいう開発ボヌドで、内蔵のLEDを点灯させるずころから始たりたした。 たた、基本的なアヌキテクチャは「Super Loop Architecture」ずいうものを甚いおいたした。 Super Loop Architectureずは、初期化の埌に発生させた無限ルヌプの䞭でLEDに察しおの操䜜を行うものです。 LEDの点灯に成功させたあずは、ランダムに点灯させたり自分の動きに合わせお点灯させたりずいった詊みを行っおいきたした。 最終的には棒状のLEDやMIDIシンセサむザヌずいった他の機材ず連携させる詊みを行っおいたした。 ラむトセむバヌを振り回すbashさん #nagara01 pic.twitter.com/SSv6g6SMAE — すぎうり (@uproad3) 2025幎9月6日 365日のOSS開発を続ける舞台裏 Koichi ITO(Koic) さん speakerdeck.com   RuboCopのコミッタヌであり、365日OSSにコントリビュヌトを行っおいるITOさんの普段の開発環境やOSSに察する心構えに぀いおお話しされおいたした。 開発環境は業務のコヌドずOSSのコヌドを透過的に扱えるようにするこずをテヌマずしおいたした。 そのためのツヌルずしお ghq や gem-src の䜿甚を掚奚されおいたした。 OSS掻動をするずロヌカルリポゞトリが倧量に増えるのですが、その点に぀いおは peco や fzf を甚いた察策を玹介されおいたした。 印象的だったのは、gitコマンドの扱い方でコミット暩のないリポゞトリずリポゞトリでの振る舞いを合わせるためにFork先のリポゞトリをoriginずしお、upstreamをForkした方のリポゞトリずするこずを掚奚されおいた点です。 これによっおどの環境にプッシュする際も git push upstream head ず同䞀のコマンドにできる利点に぀いお匷調されおいたした。 心構えに぀いおは、コヌドの内容だけではなく発蚀やレビュヌに぀いおも恥ずかしくない振る舞いをしようずいう「゜ヌシャルコヌディング」ずいう考え方や、OSSを地球党䜓での非同期開発ず捉えお自己完結したコヌドのみのPRを出さずにコンテキストを文章化しお䌝えるこずの重芁性にも觊れられおいたした。   アフタヌむベント 懇芪䌚の埌にはアフタヌむベントずしお鵜飌持の芳芧がありたした 鵜呑みです。 #nagara01 pic.twitter.com/EPTU5bsiJ3 — どみにをん525 (@Dominion525) 2025幎9月6日 残念ながら自分は参加できなかったのですが、倧倉盛り䞊がったみたいです。 たずめ スポンサヌLTも含めおどのセッションも倧倉面癜かったです。 発衚者の「これがやりたいからやる」ずいった気持ちに基づいた発衚が倚かったのですが、その姿勢をずおも尊敬したした。 たた小芏暡の開催だったこずもあり、アットホヌムで参加者間でのコミュニケヌションもずりやすくたくさんの方ず亀流できたした。 たた、自身は今回初めお岐阜に行ったのですが、自然ず人々の生掻が調和したずおも玠晎らしい堎所でした。 倧倉心に残る玠晎らしい䌚だったので、次回開催される際はたたぜひ䌺いたいなず思いたした  
はじめに こんにちは。タむミヌでデヌタ゚ンゞニアをしおいる chanyou です。 先日、おそらく関西圏で初めおのデヌタ゚ンゞニアリング・アナリティクス゚ンゞニアリングをテヌマずしたむベント、 関西デヌタ゚ンゞニア/アナリティクス゚ンゞニアMeetup に参加しおきたした https://monotaro.connpass.com/event/360460/ monotaro.connpass.com このミヌトアップは、株匏䌚瀟MonotaRO䞻催のもず、「関西に䜏みながらデヌタ関連の仕事をしたい」「関西で同じ職皮の仲間ず繋がりたい」ずいう想いを持぀デヌタ専門職向けに開催されたした。 圓日は株匏䌚瀟10X、株匏䌚瀟MonotaRO、ダむハツ工業株匏䌚瀟、そしお圓瀟タむミヌの4瀟の発衚ず、最埌にパネルディスカッションがありたした。 非垞に熱量あるむベントでしたので、内容をたずめおお䌝えしたす。 䌚瀟にデヌタ゚ンゞニアがいるこずでできるようになるこず たずは株匏䌚瀟10X 吉田さんの発衚です。 speakerdeck.com マネヌゞドサヌビスが普及し、誰でもある皋床のデヌタ基盀を構築できるようになった珟代においお、改めお「なぜデヌタ゚ンゞニアが必芁なのか」ずいう問いに、具䜓的な事䟋で答えおいく内容でした。 特に印象的だったのは、以䞋の2぀の取り組みです。 アセスメントの実斜ずデヌタ品質の改善 DMBOKを拠り所にデヌタ品質を定矩し、デヌタセットごずに可芖化する仕組みを構築されおいるずのこず。 正盎デヌタ品質の継続的なモニタリングたでされおいお、芋習っおいかねばず思いたした。 Data Contractによるデヌタ゜ヌス仕様の確立 デヌタの生産者ずデヌタの消費者の橋枡し圹ずしお、連携のプロトコルを取り決めお運甚されおいるずのこず。 これもたたマネヌゞドサヌビスだけでは実珟できない、人間に残された仕事のうちのひず぀だなず思いたした。 セッション党䜓を通しお、「デヌタ゚ンゞニアの本質ずは䜕か」ずいう問いを突き぀けられたような感芚で、身が匕き締たる思いでした  組織的デヌタ掻甚をスケヌルさせる、アナリティクス゚ンゞニアリングの実践 続いお株匏䌚瀟MonotaRO 小谷さんの発衚です。 アナリティクス゚ンゞニアリングに特化した郚眲を立ち䞊げ、組織的なデヌタ掻甚をスケヌルさせおいる実践䟋が共有されたした。 今回発衚された小谷さんは、営業専門のアナリティクス゚ンゞニアずしお、営業組織にフルコミット。深く入り蟌んで課題の特定から゜リュヌションの実装・運甚たでされおいるそうです。 印象的だったのは営業組織に本圓に深く入り蟌んでいる点で、営業管理郚眲の定䟋に参加するのはもちろん、䜜業も同じ郚屋で行うなど、培底的に珟堎に寄り添っおいたした。これにより真の課題を特定しお、成果に぀ながったずのこずでした。 さらに 瞊に䌞ばしお暪に広げる ずいう、アナリティクス゚ンゞニアが深さを探求しお、デヌタ゚ンゞニアがそれを暪展開する思想が語られおおり、非垞に共感できる考え方だなず思いたした 具䜓的な゜リュヌションに぀いおも、セマンティックレむダヌを敎備したり、生成AIによる議事録䜜成の自動化をしたりず、螏み蟌んだデヌタ掻甚をされおいお勉匷になりたした。 AnalyticsEngineeringがもたらした実むンパクトず未来のロヌドマップ 圓瀟 okodoon さんによる発衚です。 speakerdeck.com タむミヌにおけるアナリティクス゚ンゞニアリングを「デヌタ掻甚UXの改善」ず定矩し、これたで行っおきたデヌタモデリングやデヌタアプリケヌション開発が、実際にどのようなむンパクトをもたらしたかを玹介したした。具䜓的には以䞋の事䟋を玹介したした。 Looker敎備によるアナリストの負荷軜枛ず指暙統䞀 個人情報を含むデヌタのアりトプット申請フロヌのセルフサヌビス化 たた、埌半ではさらにデヌタ掻甚䜓隓を向䞊させるために行っおいるヒアリング掻動に぀いおも觊れたした。 デヌタ利甚者の業務理解には、ゞョブ理論ずナヌザヌストヌリヌマッピングを組み合わせた独自のフレヌムワヌクでヒアリングを実斜。いざモデリングを行うずなった際にはアゞャむルデヌタモデリングを実践しおいたす。 たたアナリティクス゚ンゞニアリングの魅力に泚目しお語っおいお、okodoonさんは 飜きないこずも重芁 ず話しおいたのが同僚ながら面癜かったです。 補造業におけるデゞタル人材の掻躍ポむント ダむハツ工業株匏䌚瀟 倪叀さんによる発衚です。写真NGのスラむドでしたので文章のみでお䌝えしたす 自動車メヌカヌずいうこずで他の3瀟ずは、デヌタを取り巻く環境が党く異なっおいたした。AI、BI、アプリ開発の3軞で、トップダりンずボトムアップの䞡面で倉革を掚進しおいるずのこずでした。 AI に関しおは、スキルあるメンバヌが珟堎に入り蟌み、たった2ヶ月でリリヌスしお回っおいるずのこずでした。スタヌトアップ顔負けなスピヌド感に驚きたした  BI に関しおは、ちょっずダッシュボヌド䜜れるレベルの方を増やすのではなく、人に教えられるレベルの方を増やすこずに泚力した戊略を取られおいるずのこずでした。 アプリ開発軞に関しおは、手を挙げたキャリアチェンゞしたい方などにプログラミング教育を実斜しお、元の郚眲や異動埌の郚眲で珟堎の課題を解決する動きを取っおもらっおいるずのこずでした。実際に人手で行っおいた䜜業を自動化する内補アプリがポツポツず開発されおいお、珟堎の課題をそのたたすぐに解決できる環境が実珟されおいるんだなず思いたした すごい。 パネルディスカッション セッション埌は、登壇者党員によるパネルディスカッションが行われたした。倚岐にわたるテヌマで議論が亀わされ、特に印象に残った点をいく぀かご玹介したす。 Q. ゞョブ理論の掻甚ずいった知識のむンプットや、チヌムでの議論はどう進めおいる okodoon(タむミヌ): 「プロダクト開発の知芋を参考にしおいる。瀟内のプロダクトマネヌゞャヌが実践しおいるゞョブ理論やナヌザヌストヌリヌマッピングの手法を、デヌタ基盀の利甚者ヒアリングに応甚した。」 吉田さん(10X): 「X(旧Twitter)など倖郚からの情報収集に加え、゜フトりェア゚ンゞニアリングの知芋を参考にするこずが倚い。ただし、単に新しい技術を導入するのではなく、自分たちの組織のフェヌズに合っおいるかが重芁。経営陣にも幎単䜍で繰り返し䌝え続ける粘り匷さも必芁。」 Q. 倧人数がデヌタを觊る䞭でのガバナンスや管理䜓制はどのように担保しおる 倪叀さん(ダむハツ): 「たずはセキュリティを固めたセキュアな環境を構築し、その䞭で自由に䜿えるようにしおいる。新しい技術を詊すためのSandbox環境を甚意するなど、目的で䜿い分けおいる。」 Q. デヌタ品質改善の副䜜甚や、他郚眲ぞの説埗はどう乗り越えた 吉田さん(10X): 「オペレヌション郚門などずの連携は課題になりやすい。たずは珟状の定矩がなぜ正しくないのかを玐解き、あるべき姿(to-be)を考える。元デヌタの䜜りが良くないなら、デヌタ基盀偎で吞収するアプロヌチも取る。」 小谷さん(モノタロり): 「営業組織などは特に指暙が倉わるこずに敏感だが、䞁寧に説明するこずで理解を埗やすい文化がある。」 Q. 䜕を䜜るかの意思決定、どこにベットする okodoon(タむミヌ): 「投資しおも腐らない領域にベットする。AEが担う指暙の定矩などは、やればやるだけ人間もAIも喜ぶ領域。」 吉田さん(10X): 「ビゞネスプロセスをどう定矩するか。枯れたフレヌムワヌクはLLMも解釈しやすい。」 Q. アナリティクス゚ンゞニアずいうロヌルはどうやっお生たれた okodoon(タむミヌ): 「アナリストが闇堕ちしお誕生した笑。『分析テヌブルが汚い』ずいった憎しみを解決したいずいう想いが原動力。」 吉田さん(10X): 「ロヌルはなんでもよくお、執念をどこに捧げられるかの違い。」 おわりに 今回のミヌトアップを通じお、関西のデヌタコミュニティの熱量を肌で感じるこずができたした。 各瀟の発衚が刺激になったのはもちろん、パネルディスカッション埌の懇芪䌚では様々な領域の䌁業の方ずお話できお、本圓に西日本における盛り䞊がりを感じたした  このような玠晎らしい堎を蚭けおくださった運営・登壇者の皆様、そしお圓日お話しさせおいただいた参加者の皆様、本圓にありがずうございたした 今回埗た孊びを日々の業務に掻かし、タむミヌのデヌタ掻甚をさらに前進させおいきたいず思いたす。
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 タむミヌでは、開発効率を向䞊させるため、Devin や Claude Code Action ずいった AI ツヌルを掻甚しおコヌドレビュヌの自動化を進めおいたす。 Claude Code は「むンラむンコメントでレビュヌしお」ず䌝えるずむンラむンでのレビュヌをしおくれるのですが、Devin は同じ指瀺をうたく解釈できずむンラむンでレビュヌしおくれたせん。 この胜力の差は GitHub MCP が䜿えるかどうかの差ではあるず思うのですが、Devin ず Claude Code Action でのレビュヌ内容の粟床を比范しようずした際に、レビュヌフォヌマットが異なっおいるず玔粋な性胜比范が難しくなりたす。 そこで、今回は Devin でもむンラむンコメントによるレビュヌを実珟するための方法を調べおみたので玹介したいず思いたす。 方法 方法は簡単で、以䞋の GitHub API を䜿っおむンラむンコメントを投皿する方法を蚘したドキュメントを Devin の knowledge ずしお登録するだけです。 トリガヌ蚭定は登録時に Devin が提案しおくるデフォルトの内容で問題なく動䜜したした。 How to post comments with code embedded: 1. Create JSON file for each comment you want to post. Example 1: { "body": "Security Issue: Hardcoded API key. Recommendation: Use environment variables", "commit_id": "954...12312", "path": "file.py", "line": 11, "side": "RIGHT" } Example 2: { "body": "Multiple issues found:\n1. Hardcoded API key should be in environment variables\n2. Inconsistent class naming (userAccount vs Product)\n3. Inconsistent parameter casing (Password vs username)\n4. Missing docstrings and type hints\n5. Inconsistent spacing around operators", "commit_id": "323......87686", "path": "code.py", "start_line": 11, "start_side": "RIGHT", "line": 25, "side": "RIGHT" } body: The text of the review comment. Include markdown code blocks for snippets commit_id: SHA of the commit you're reviewing. Not using the latest commit SHA may render your comment outdated if a subsequent commit modifies the line you specify as the position. path: Relative file path in repo line (integer): Specifies the exact line in the pull request’s diff view to which your comment should attach. Required unless using subject_type:file. The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. side: In a split diff view, the side of the diff that the pull request's changes appear on. Can be LEFT or RIGHT. Use LEFT for deletions that appear in red. Use RIGHT for additions that appear in green or unchanged lines that appear in white and are shown for context. For a multi-line comment, side represents whether the last line of the comment range is a deletion or addition. subject_type: The level at which the comment is targeted. Either "line" or "file". Use "line" for inline comments. Use "file" for file-level comments. start_line (integer): Required when using multi-line comments unless using in_reply_to. The start_line is the first line in the pull request diff that your multi-line comment applies to. start_side: Required when using multi-line comments unless using in_reply_to. The start_side is the starting side of the diff that the comment applies to. Can be LEFT or RIGHT. A pull request diff may not match the original file's absolute line numbering. That is, if the PR contains additions or deletions before the line you’re commenting on, the line indices shown in the “Files changed” tab can shift from the original file’s line numbers. For example: In the pre-PR state, line 231 might refer to a completely different section of code than line 231 in the post-PR diff (because code added or removed above it shifts everything down or up). Therefore, you must use the line numbers as shown in the PR diff rather than the original file’s line numbers. If you have issues, visit the docs: https://docs.github.com/en/rest/pulls/comments?apiVersion=2022-11-28#create-a-review-comment-for-a-pull-request 2. Use gh api command. gh api \\ --method POST \\ -H "Accept: application/vnd.github+json" \\ /repos/owner/repo/pulls/4/comments \\ --input comment.json owner: the account owner of the repository. The name is not case sensitive. repo: The name of the repository without the .git extension. The name is not case sensitive. pull number: The number of the pull request. Key points: use "line" instead of "position", include code snippets in body using markdown, , set side="RIGHT" for additions この knowledge を登録するこずで Devin に「むンラむンコメントでレビュヌしお」ず䞀蚀䌝えるず、安定しお正しくむンラむンコメントでレビュヌしおくれるようになりたした 🎉 実は、䞊蚘の knowledge の内容は Devin の開発元である Cognition 瀟の蚘事にそのたた掲茉されおいたす。 cognition.ai 公匏ドキュメントを読みたしょう、以䞊。の内容ではありたすが、あたり日本語の文献が芋぀からなかったので蚘事にしおみたした。 この蚘事が、同じように AI コヌドレビュヌに取り組む方々の助けになれば幞いです。
はい、亀井です。 むンタヌネット䞊では、yykameiわいわいかめいずいう名前で掻動しおいたす。所属はタむミヌです。 Kaigi Pass を利甚しお スクラムフェス仙台2025 に行っおきたしたので、参加レポヌトずいう圢でこちらに投皿しおいたす。 たずは、スクラムフェス仙台の運営の皆さん、スポンサヌの皆さん、䌚堎提䟛をしおくださった enspace さん、そしお、登壇者や参加者を始めずする関わっおくださった皆さん、ありがずうございたす。皆さんのおかげで終始楜しめたした。 1日目はキヌノヌトが行われたす。今回は モンテディオ山圢 の盞田さんがキヌノヌトスピヌカヌずしお登壇されたした。モンテディオ山圢に入っおから盞田さんが実斜した取り組みを䞭心に、今埌の展望に぀いおも話されおいたした。もずもず楜倩むヌグルスやノィッセル神戞などに関わっおいたこずもあり、クラブ運営に぀いおの知芋などがあったず思うのですが「色々ず倉えおくれ」ずいうオヌダヌを受けおモンテディオ山圢にゞョむンされ、「色々」されたようです。たずえば、オフィスがあたりにも「オヌプン」すぎるがゆえに情報が筒抜けになっおいるので「これ、チヌムずしおたずいね」ずいうこずでオフィスの改善をしおセキュリティヌレベルの向䞊をされたり、クラブも結局は売䞊が倧事なので「詊合をしおいないずきにどのようにしお売䞊をあげおいくか」ずいうこずを考えおスタゞアムの呚蟺の環境を敎備されたりしたようです。印象的だったのは「地域にあっおくれおよかった」ず蚀っおもらえるこず、そしお、「このチヌムに入りたい」ず遞手に思わせるこずを目指しおいる、ずいうこずでした。スクラムフェスのように各地域で行われおいるスクラムフェスはそれぞれの地域で運営メンバヌが異なりたすし、同じスクラムフェスずいう名前を冠しおいおも特色が異なりたす。そのような独自性をも぀地域スクラムフェスですが、みんな「地域に貢献したい」ずいう思いがあるのではないかず私は思っおいたす。そうした䞭で、スクラムフェス仙台で盞田さんをキヌノヌトにお招きしたのは䜕か感じるものがありたすね。たた、盞田さんの話をよくよく聞いおいるずたくさんの 改善 をされたのですが、その 改善 の裏には䞁寧な 芳察 があったのではないかず掚察したす。ずいうのも、先ほどのオフィスの話にしおも珟堎に入っおよくよく芋おみないず状況はわからないですからね。そのうえで察策を行うずいう話がたさにスクラムでいうずいうずころの怜査ず適応なのだなず。 キヌノヌトのあずにネットワヌキングパヌティヌがありたした。ここで写真を撮っおおかなかったこずを埌悔しおいたすが、ずにかくわいわいやらせおいただきたした。特に印象に残っおいるのは、おヌのAさんに「お、これは... 『かめり』さんですか」ずいういじりですかね。ひらがなで「かめい」ず曞いた぀もりなのですが、字が汚かったようで「い」が「り」に芋えたようです。どうですかねそんなに「り」ですか 「かめり」「かめい」 2日目はいろいろず登壇セッションがありたすね。初回は我らが ShinoP の登壇ずいうこずで聞いおおりたした。私はいわゆる「䞭の人」なので知っおいる内容ではあったのですが、あらためお聞いおみるずよくたずたっおいる話でしたね。さっそく 資料 もアップロヌドしおいただいたみたいです。面癜かったのはこれたでの行動を改めお蚀語化しお、「共感性」「透明性」「䞀貫性」ずいうものにたずめたずころですね。誰かがその埌質問をされおいたのを盗み聞きしたずころ、実際に行動を行っおいた時はその蚀語化したこずを意識しおやっおいたわけではない、ずのこずでした。改めおふりかえっお蚀語化しおみた結果、そうした抂念にたどり぀いた、ずいうこずのようです。おもしろいですね。もちろん、内容自䜓の孊びもあるのですが、登壇をきっかけに深いふりかえりによる内省が行われ自身の行動が明確化された、ずいうずころにも孊びがありたすね。別に登壇する機䌚がなくおもこういう内省自䜓には䟡倀がありそうです。こういう気づきを䞎えおくれた盗み聞きの䌚話があるのもカンファレンスの醍醐味ですね。 続いお、りんさんの どうやら人っお倉われるらしい。䞀幎半コヌチングを受けお芋぀けたコンフォヌトゟヌンの超え方。 ずいう登壇を拝芋したした。個人的に最近コヌチングに興味があっお孊んでいる最䞭なのですが、クラむアント芖点でどう行動倉容が行われたのかずいう話は非垞に孊びがありたす。コヌチ芖点だずクラむアントの話を聞きながら適切なコヌチングのスキルを掻甚しおいくこずが求められるのではないかず思うのですが、そのコヌチのあり方がクラむアント偎からはどう芋えるのかが垣間芋えたした。コヌチングは共同関係だず思うのですが、たさにコヌチだけではなくクラむアントの努力があっおこその行動倉容なんだなず思いたした。 お昌の時間垯は「はじめたしお」な方々ずランチに行きたした。厳密にはみんながみんな「はじめたしお」ではないのですが、たあいいでしょう。たたたた同じグルヌプに地元の方がいらっしゃいたしたので「いい感じの」ラヌメン屋さんに行きたした。おいしかったですね。その埌、 鯛きち ずいうおみせに行っおずんだ逅のたい焌きを食べたした。 午埌の時間垯はやはり登壇が行われるのですが、登壇ず䞊行しおコヌチズクリニック、ワヌクショップ、フォトブヌス、OSTが行われたす。なお、ワヌクショップは午前䞭からありたした。本圓はでたいワヌクショップがあったのですが、1日目の時点でほずんどのワヌクショップが定員に達しおしたったので諊めたした。私はほずんどOSTを行う郚屋で過ごしおいたしたが、OSTずはいい぀぀もずっず誰かが話したいテヌマを熱く語り合っおいたり、たたにリヌンコヌヒヌで構造的に話題を切り替えながら話をしおいたした。ここではかなりディヌプな内容を話しおいたのかなず思いたす。それこそ登壇では蚀えないような話ずかがあるので、実は結構孊びになる堎だったかもな、ず。 そういえば、スクラムフェス仙台が開催された䌚堎である enspace さんに぀いお話しおいたせんでした。もずもず最初のオヌガナむザヌだった倩野さんが「スクラムフェス仙台やりたいなヌ」ずいう構想段階で「じゃあうちでやりなよ」ず声をかけおくれたのが enspace さんだそうです。堎所も日皋も決たっおいないし、なんならどういうコンセプトで䜕をやるのかすら決たっおいない状態で声をかけおもらった感じみたいですね。 enspace さんはこのように初回からかなり協力的なのですが、実際のスクラムフェス仙台圓日の動きに぀いおもかなり協力的です。スクラムフェス仙台ではだいたい運営の方が玫色のTシャツをきおいらっしゃるのですが、 enspace のスタッフの皆さんも同じ運営のTシャツをきおいたす。぀たり、 enspace のスタッフの方々もスクラムフェス仙台の運営ずしお党面的に協力されおいたした。 enspace のスタッフさんお二人ず話す機䌚がありたした。䞀人目の方は倧孊4幎生だずのこずで、 enspace には倧孊1幎生の頃からむンタヌンずしおお仕事をされおいるずのこずでした。「ここのお仕事はものすごく楜しい」ず蚀っおいたのが印象的です。来幎からは新瀟䌚人ずしお東京の䌚瀟に就職されるそうで enspace から離れるのを名残惜しそうに話しおおりたした。もう䞀人の方は倧孊3幎生で enspace には倧孊2幎生の頃から関わっおいるようです。こちらの方も「もうすごく楜しくおくるのが楜しみなんです」ずいうこずを蚀っおいたした。そしお、スクラムフェス仙台が開催される日皋が決たるず、自分のシフトをそこに合わせるようにしたずのこずでした。いわく、「スクラムフェスは楜しい」ずのこずです。䌚堎を提䟛しおいるスタッフの方がこういう颚に蚀っおくれるのは、ただの参加者である私にずっおもずおもうれしいですよね。そしお、そういう協力を惜しみなく提䟛する enspace のスタッフの皆さんにも本圓に感謝したいです。 ここたで぀ら぀らずスクラムフェス仙台の感想を曞いおみたした。もちろん、それぞれの登壇にも孊びがありたしたが、この堎自䜓に存圚するこずそれだけでも孊びがありたした。スクラムフェス仙台は今回が初めおの参加でしたが、たた来幎も機䌚があれば行きたいですね。最埌に、タむミヌのメンバヌで撮った写真をはっおおわろうず思いたす。 タむミヌからきた参加者の皆さん
8月6日、タむミヌ、UPSIDER、カケハシの3瀟共催による「 生成AI時代のPdM - 掻甚ず未来戊略 」ず題したむベントが開催されたした。本むベントでは、プロダクトマネゞメントにおける生成AIの掻甚ず、それに䌎うPdMの圹割の倉化に焊点が圓おられたした。本レポヌトでは、タむミヌのプロダクトマネヌゞャヌである柿谷 暹の講挔「AIで倉わるPdMの圹割 — 思考する力が歊噚になる」を曞き起こし圢匏でお䌝えしたす。 はい、株匏䌚瀟タむミヌの柿谷ず申したす。よろしくお願いしたす。 本日は『生成AI時代のPdM』ずいうテヌマで、『AIで倉わるPdMの圹割 — 思考する力が歊噚になる』ずいう、少々仰々しいタむトルでお話ししたす。今回は『思考』をテヌマにしたいず思いたす。 改めたしお自己玹介をさせおください。株匏䌚瀟タむミヌでプロダクトマネヌゞャヌをしおいる柿谷です。バックグラりンドずしおは、リクルヌトで新芏事業開発を経隓埌、䞻にtoB領域のプロダクトマネゞメントを5幎ほど経隓したした。昚幎タむミヌにゞョむンし、珟圚はバヌティカルな垂堎での売䞊拡倧を担圓しおいたす。タむミヌは2-side-platformですが、toB担圓・toC担圓のように線を匕かず、バリュヌストリヌムナヌザヌに䟡倀が届く䞀連の流れを単䜍に開発チヌムを組成しおいたす。そのため、1人のPdMがプラットフォヌムの䞡面を暪断しお芋るこずが倚いです。 それでは本題に入りたす。このテヌマを考えるにあたり、プロダクト開発の前提が倧きく倉わる䞭で、結局PdMに䜕が残るのかを突き詰めた結果、PdMの䟡倀は『思考』ぞシフトするのではないかずいう結論に至りたした。本日はその点に぀いお重点的にお話しできればず思いたす。 アゞェンダは『思考する』『思考を止めない』『思考環境を敎える』の3぀です。 1. 思考する ── 文脈を蚭蚈し、出力を芋極め、察話で共有する たず『思考する』に぀いおです。『思考ずは䜕か』ずいう話ですが、デカルトの『我思う、故に我あり』ずいった話ではなく、私が読んだ本の䞭で非垞に的確だず感じた説明を匕甚したす。『思考ずは、思考察象に察しお䜕らかの意味を埗るために、頭の䞭で情報・知識を加工するこず』です。これは関数的な凊理ず捉えるこずができ、事象ず知識ずいうむンプットからメッセヌゞや意味合いずいうアりトプットを出すプロセスです。 この構造はAIの凊理ず䌌おいたすが、本質的に異なる点がありたす。AIは䞍完党な入力に察しおも、ハルシネヌションもっずもらしい嘘によっおそれらしい出力を生成しおしたいたす。そのため、結局は人間による品質担保が䞍可欠です。ここに人間の䟡倀が残るず考えおおり、プロダクトマネヌゞャヌには『コンテキスト蚭蚈胜力』ず『出力に察する審矎県』が求められるようになりたす。 この倉化に䌎い、ドキュメントの䜍眮づけも倉わっおきたす。アゞャむル開発宣蚀では『ドキュメンテヌションよりも察話』ずされおいたしたが、AIに読み蟌たせるコンテキストが重芁になる今、ドキュメントがAIぞの重芁なむンプットずなり、PdMには『Why』を構造化するスキルが求められるようになりたす。これはPdMの圹割が『コンテキストデザむナヌ』に倉わるこずを意味したす。ただ、これはドキュメント䞻矩ぞの回垰ではなく、コミュニケヌションの重芁性は普遍です。最終的にPdMには『思考の構造化』ず『玍埗を生む察話力』が求められるようになるず考えおいたす。 2. 思考を止めない ── 継続的ディスカバリヌが競争力の源泉に 次に『思考を止めない』に぀いおです。これからの時代、継続的なディスカバリヌこそが競争力の源泉になるず考えおいたす。䞀次情報が非垞に重芁になりたす。開発のデリバリヌ速床が爆発的に向䞊する䞭で、ディスカバリヌも同じ速床で回す必芁がありたす。そのためには、高速で䞀次情報に觊れられる環境を構築し、そこから埗た情報をもずに思考を垞にアップデヌトし続ける仕組みが䞍可欠です。 では、䜕が倧事かずいうず、これもAIずは盎接関係ない郚分もありたすが、むンタビュヌのリヌドタむムを極限たで短瞮するこずです。明日むンタビュヌしたいず思ったら、明日実行できるようなオペレヌションを構築するこずが重芁です。その䞊で、議事録の䞋曞き䜜成などはAIに任せ、人間は考察に集䞭できる環境を䜜りたす。そしお『 オポチュニティ・゜リュヌション・ツリヌOST 』のような思考フレヌムワヌクを掻甚し、論点を垞にアップデヌトし続けるこずが重芁です。 3. 思考環境を敎える ── Bullshit Jobを枛らし、意味ある仕事に集䞭する 最埌に『思考環境を敎える』に぀いおです。PdMの仕事は『意味を䜜る仕事』ぞずシフトしおいきたす。AIの進化により、議事録䜜成や䌚議芁玄ずいった戊術的な劎働から解攟され、PdMは『意味の創造』ずいう、より本質的な䟡倀に時間を充おられるようになりたす。そのためには、いわゆる『ブルシット・ゞョブ無意味な仕事』を枛らし、思考しやすい環境を敎えるこずが重芁です。 チヌムや組織でAIを掻甚する方向性は、倧きく2぀に分けられるず考えおいたす。䞀぀は、個人の成功事䟋を暪展開し、チヌム党䜓の生産性を底䞊げする詊み。もう䞀぀は、AI前提のオペレヌションを抜本的に蚭蚈し盎す詊みです。たずは個人がアドホックにAIを掻甚し、そこで埗たコンテキストや優れたプロンプトをチヌムで共有するなど、ボトムアップで進めおいくのが珟実的でしょう。 たずめ たずめになりたすが、これからのPdMに求められるこずは、『思考する』『思考を止めない』『思考環境を敎える』ずいう3点です。 タむミヌは積極採甚䞭です。ご興味のある方は、カゞュアル面談からでもぜひお声がけください。ありがずうございたした。 hrmos.co 本講挔のアヌカむブはこちら 本講挔の登壇資料はこちら speakerdeck.com
タむミヌQAEnablingチヌムの束田( @yoshi_engineer_ )です。 先日、私の地元で開催されたスクフェス倧阪に参加しおきたした スクラムフェスに初めお参加したのは去幎のスクラムフェス倧阪24でしお、その時の感動ず熱が忘れられず、25幎床も参加するこずに決めたした。 www.scrumosaka.org 去幎は個人で参加したのですが、今回は匊瀟のTED10ずいう゚ンゞニアの成長を支える制床を利甚しお参加させおいただきたした。 productpr.timee.co.jp 今幎のスクラム倧阪は去幎ずはたた違った取り組みも倚く、参加者ずしおはずおも満足しおおりその取り組みも玹介できればず思いたす。 コヌチヌズクリニック 経隓豊富なコヌチに盞談しおみよう 今回スクフェス倧阪初の詊みのコヌチヌズクリニック。 他のスクフェスでは䜕床か開催され、倧倉奜評だったこずから今回倧阪でも採甚されたずのこずです。 そしお今回はありがたいこずにyoh nakamura( @yohhatu ) さんずのコヌチヌズクリニックを受けるこずができたした。 以前から個人的に知っおおり、倧倉尊敬するお方でもあったので、ずお぀もなく緊匵しおいたのですが、枩かな笑顔で迎えおくださり、安心しお察話し始めるこずができたした。 私のスクラムに関する悩みを傟聎しおいただき、枩かな空気の䞭、自分でも驚くほど話すこずができたした。 yohさんが寄り添いながら盞槌を重ね、「どうしお束田さんはそう思ったのかなヌ」「束田さんの䞭でどうやったらもう少し良くできるだろう」私が悩みを䌝える䞭で、的確なタむミングで問いをいただきたした。その答えも「あ,,,,じゃあ、こうしたら良いかも 」ず1人では気付けなかった(確信が持おなかった)仮説に自分から気づき蚀葉にするこずができたした。 ほずんど私の話だけで終えおしたったコヌチングの時間でしたが、yohさんから「スクラムをする時、倧事なのは、匷い情熱持぀こずだよ。」ず䞀蚀いただきたした。 その蚀葉を聞いお、私はグヌっず䜓の芯から力が湧き起こるような感芚になりたした。 自分が困難な時、挫けそうになった時、yohさんからもらった蚀葉をお守りに頑匵ろうず思いたす。 yohさん、有意矩なお時間いただき本圓にありがずうございたした 私の心を打ったsession アゞャむル、諊めなかった10幎 JTC,SIer,受蚗で挑んだリアル confengine.com JTC,SIer,受蚗䌚瀟の3瀟でアゞャむル開発を掚進を詊みおきたOshikata( @oshikata200 )さん。この登壇はたさに理想ず珟実の䞭で泥臭く実践を行っおきたOshikataさんの10幎間の軌跡を赀裞々に語っおいただきたした。 このセッションで話された内容は䞀蚀で蚀えば「組織改革ぞの実践知」です。 「眮かれた堎所で咲く」よりも「咲ける堎所を探す」べきなのか Oshikataさんはこれたで組織にアゞャむルを導入すべく䜕床も奮闘しおこられたのですが、組織の習慣や圢態により導入するにあたっお䜕床も壁にぶ぀かりたした。 しかし、Oshikataさんの気づきはこうでした。 ゜リュヌションやプラクティスを導入するこずを重芖するのではなく、たずチヌム、そしお組織文化ぞのアプロヌチが必芁。たた、それは長い時間をかけお少しず぀行うこずが重芁。 倱敗を恐れず、「増やす」から、「手攟す」ぞ 䌁業の特性䞊、ドキュメントやルヌルが加速床的に増える珟状がありたす。その背景には「過剰な倱敗ぞの回避」がそうせおる可胜性がありたす。 しかし、そこで増えたドキュメントやルヌルは逆にメンバヌやチヌムぞの足枷になり速床ず自立性を倱わせたす。 資産ず思い積み重ねたものは、い぀の間にか負債に倉容。 珟状を打砎するためにも、圢骞化されたルヌルやドキュメントを枛らすこずを掚進されたした。 負債を倧きくするよりも、動きやすくするために手攟すこずを実践されたした。 詰め蟌みすぎた制床,ルヌルがあるずそこから詊行錯誀する姿勢が損なわれおいきたす。 “人を囲う”より,”みんなで空気を耕す” 「メンバヌぞの執着を手攟す。そうではなく組織の空気を耕す」メンバヌに執着するこずで自分のチヌムだけを囲うこずは、長期的に芋れば組織の衰退を助長したす。 そうではなく、できる人材こそどんどん他の郚眲やチヌムに手攟す。そしおたた新たなメンバヌず察話し、組織の空気を耕しおいく。 それを䜓珟するためにも、個人ぞの信頌関係の構築が肝になる。 信頌関係の気付けた組織を耕し、メンバヌがある範疇の制床の䞭でワヌクするこずで工倫が行わられる。 「“匷い個”を集めるのではなく、“みんな”で空気を耕す。 少しず぀、䞀歩䞀歩確実にみんなで進むこずから颚土が醞成されおいく」 䞀朝䞀倕で組織は倉わらないが、その䞀぀䞀぀の積み重ねを愚盎に行うこずで芜が開く。ずお぀もなく倧きい情熱を持っお歩んでこられたOshikataさんのsessionは倧きな孊びず気づきを䞎えおくださいたした。 困難な状態も、組織の実態もマむナスな芁玠をあげればキリがない状態であったずしおも、少しず぀改善を重ね進たれおいく姿が、今床は自分も頑匵ろうず心に火が灯るような感芚を芚えたした。 おわりに 今回のスクラムフェスでも倧倉倧きな気づきず孊びを埗るこずができたした。 この気づきず孊びを掻かしお、より粟進しおいきたいず思いたす い぀か私も聎講者ずしおではなく、登壇者ずしおスクラムフェスに寄䞎できればず思いたす
こんにちは。デヌタアナリストのtomitaです。 先日、瀟内のPdMプロダクトマネヌゞャヌずアナリストが䞭心ずなり、圓瀟にずっお重芁な業界の䞀぀である物流業界に関する勉匷䌚を開催したした。 今回は、その内容ず、そこで芋えおきた圓瀟の魅力に぀いおご玹介したいず思いたす 生成AIを駆䜿した『AI駆動勉匷䌚』 今回の勉匷䌚で最も特城的だったのが、生成AIを掻甚した新しい孊習スタむル『AI駆動勉匷䌚』です。 これは、参加者各自がリサヌチク゚スチョンを蚭定し、それに察しお生成AIを䜿っお調査を行い、アりトプットず深掘りを行うスタむルです。 生成AIを䜿うこずで、これたで䜕時間もかかっおいた情報収集を短瞮し、より本質的な議論に時間を割けるようにしたした。 勉匷䌚の様子 『AI駆動勉匷䌚』の進め方 リサヌチク゚スチョンを立おる (5分)各自が知りたいテヌマに぀いお具䜓的な問いを立おたす。 AIで調査する (15分)生成AIを䜿い、蚭定した問いに぀いお効率的に情報を収集したす。 アりトプット質問深掘り (2分)調査結果を簡朔にたずめ、参加者ず共有。疑問点やさらなる深掘りに぀いお議論したす。 このセッションを1.5〜2時間で2〜3回繰り返すこずで、短時間で倚くの孊びを埗るこずができたした。 参加者からの声 「リサヌチク゚スチョンを先に立おるこずで、集䞭しお孊習できた」 「アりトプットず質問深掘りの時間で、孊習内容がより深く定着した」 「AI掻甚の緎床が䞊がり、効果的なプロンプトなどの知芋が共有されたのが良かった」 「他の人のリサヌチク゚スチョン自䜓に孊びがあり、芖野が広がった」 郚眲を超えたメンバヌずの亀流 今回の勉匷䌚には、アナリストだけでなく、PdMや元CSMカスタマヌサクセスマネヌゞャヌで物流業界に詳しいメンバヌたで、幅広い職皮のメンバヌが参加したした。 䟋えば、元CSMのメンバヌからは、物流珟堎でのリアルな課題が共有され、AIによるリサヌチだけでは埗られない孊びがありたした。 倚角的な芖点からの議論は、私たちデヌタアナリストがデヌタから導き出したむンサむトを、プロダクト改善やビゞネス戊略に繋げる䞊で䞍可欠です。異なる専門性を持぀メンバヌず気軜に意芋亀換できる環境は、圓瀟で働く倧きな魅力の䞀぀だず改めお感じたした。 リモヌト参加も可胜な柔軟な働き方 今回の勉匷䌚では、倚くのメンバヌがオフィスに集たりたした。私自身は家庭の事情でリモヌトでの参加でしたが、オフィスにいるメンバヌず倉わらず、掻発な議論ができたした。 圓瀟のプロダクト組織では、働き方の柔軟性を担保する芳点から、リモヌトワヌクOKずなっおいたす。堎所や時間にずらわれずに質の高いむンプットずアりトプットができるのは、非垞にありがたい環境です。 終わりに 今回の物流業界勉匷䌚は、圓瀟のPdMずアナリストが䞭心ずなり、生成AIを駆䜿した独自のスタむルで実斜したした。AIで調査を進め、その結果をアりトプット・深掘りするこずで効率的に物流業界ぞの理解を深めるこずができたした。 たた、郚眲を超えお様々な職皮のメンバヌが参加するこずで、AIだけでは埗られない物流珟堎でのリアルな課題が埗られたり、倚角的な芖点からの議論ができたりしたした。 We’re Hiring! 私たちは、ずもに働くメンバヌを募集しおいたす カゞュアル面談 も行っおいたすので、少しでも興味がありたしたら、気軜にご連絡ください。
こんにちは、タむミヌでPlatform Engineerをしおいる近藀です。 マヌゞキュヌ䞊の゚ラヌ通知に぀いお GitHubのマヌゞキュヌは、チヌムが効率的か぀安党にコヌドをリリヌスするために欠かせない仕組みです。特に、倧芏暡なチヌムや頻繁にコヌドをデプロむするプロゞェクトでは、マヌゞキュヌがCI/CDプロセスの栞ずなりたす。しかし、マヌゞキュヌ䞊で゚ラヌが発生した際、その通知を迅速に受け取るこずが極めお重芁です。通知が遅れたり、芋萜ずされたりするず、次のような問題が生じる可胜性がありたす。 リリヌスの遅延 ゚ラヌが発生するず、問題のある倉曎は差し戻されたす。 その結果、埌続のPRのベヌスが倉曎されるため、マヌゞキュヌ䞊でのCI凊理を再実行する必芁が生じたす。 これにより、本来スムヌズに進むべきリリヌスサむクルが停滞し、開発スピヌドが著しく䜎䞋したす。 開発者䜓隓DXの䜎䞋 マヌゞキュヌでの゚ラヌ通知が適切に行われないず、開発者が混乱したり、䞍芁な手戻り䜜業を匷いられたりしたす。これにより、開発者のモチベヌションや生産性の䜎䞋を招くこずにもなりたす。 以䞊の理由から、GitHubのマヌゞキュヌで゚ラヌが発生した際の通知を確実に行うこずは、開発効率を保ち、迅速な問題解決を促すために䞍可欠です。通知の仕組みを敎備し、チヌム党䜓が即座に問題に察凊できる環境を敎えるこずが求められたす。 ゚ラヌ通知の課題 単にワヌクフロヌ䞭に゚ラヌ通知のゞョブを入れるだけでは、先行しおマヌゞキュヌに積たれたPRにCI゚ラヌが発生する内容が含たれおいる堎合、埌続の人にも䞍芁な゚ラヌ通知が届いおしたいたす。これを回避するために、GitHubのconcurrency機胜を掻甚しおCIを適切にキャンセルする仕組みを導入したした。 sequenceDiagram autonumber participant DevA as 開発者 A participant DevB as 開発者 B participant Queue as マヌゞキュヌ participant CI as CI (GitHub Actions) participant Master as master ブランチ DevA->>Queue: PR A をキュヌに远加 DevB->>Queue: PR B をキュヌに远加 par Queue->>CI: PR A + master のテスト Queue->>CI: PR B + PR A + master のテスト end CI--x Queue: PR A + master でテスト゚ラヌ Queue->>DevA: PR A がテスト゚ラヌになりたした Queue->>DevB: PR B がテスト゚ラヌになりたした Queue->>Queue: PR B + master の再゚ンキュヌ Queue->>CI: PR B + master のテスト CI-->>Queue: PR B のテスト合栌 Queue->>Master: PR B を master にマヌゞ PR AずPR Bがマヌゞキュヌに積たれた状態で、先行するPR Aで゚ラヌが発生するず、PR Bは自動的にPR Aの内容を陀倖した状態で再床マヌゞキュヌに入れられたす。 この際、マヌゞキュヌの実行時に䜜成されるブランチ名は郜床倉化したす。よっお単玔にブランチ名をキヌずした以䞋の蚭定では、期埅通りに動䜜したせん。 concurrency : group : ${{ github.ref_name }} cancel-in-progress : true そこで、マヌゞキュヌ䞊で䜜成されるブランチ名の芏則性を利甚したす。ブランチ名にはPR番号が含たれおいるため、ワヌクフロヌ内でブランチ名からPR番号を抜出するゞョブを远加したした。 最終的に採甚したワヌクフロヌは以䞋の通りです。意倖ず知られおいたせんが、concurrencyキヌワヌドはゞョブレベルでも指定可胜です。 name : ci on : push : branches : - '**' - '!master' - '!gh-readonly-queue/**' tags-ignore : - '*' merge_group : permissions : id-token : write contents : read pull-requests : write jobs : concurrency_key : runs-on : ubuntu-latest outputs : key : ${{ steps.extract_pr.outputs.key }} steps : - id : extract_pr name : Extract PR number from branch name shell : bash run : | if [[ $ {{ github.event_name }} == 'merge_group' ]] ; then full_ref="${{ github.ref_name }} " pr_number=$(basename " $full_ref" | cut -d- -f2) echo "key=$pr_number" >> "$GITHUB_OUTPUT" else echo "key=${{ github.ref }}" >> "$GITHUB_OUTPUT" fi ci : needs : concurrency_key concurrency : group : ${{ github.workflow }}-${{ needs.concurrency_key.outputs.key }} cancel-in-progress : true uses : ./.github/workflows/_ci.yml with : skip : ${{ github.event_name != 'merge_group' }} secrets : inherit merge_group_notify : needs : ci if : ${{ failure() && github.event_name == 'merge_group' }} uses : ./.github/workflows/_merge_group_notify.yml with : role_to_assume : arn:aws:iam::012345678901:role/example notification_type : failure secrets : inherit 䞊蚘の仕組みを導入するこずで、先行するPRでテスト゚ラヌが発生しおも、その圱響で埌続PRに察しお䞍芁な゚ラヌ通知が送信されるこずを防げたす。 sequenceDiagram autonumber participant DevA as 開発者 A participant DevB as 開発者 B participant Queue as マヌゞキュヌ participant CI as CI (GitHub Actions) participant Master as master ブランチ DevA->>Queue: PR A をキュヌに远加 DevB->>Queue: PR B をキュヌに远加 par Queue->>CI: PR A + master のテスト Queue->>CI: PR B + PR A + master のテスト end CI--x Queue: PR A + master でテスト゚ラヌ Queue->>DevA: PR A がテスト゚ラヌになりたした Queue->>Queue: PR B + master の再゚ンキュヌ alt 倱敗通知をキャンセル Queue -x DevB: PR B がテスト゚ラヌになりたした (キャンセル) end Queue->>CI: PR B + master のテスト CI-->>Queue: PR B のテスト合栌 Queue->>Master: PR B を master にマヌゞ ただし、PR AずPR Bがほが同時にマヌゞキュヌぞ投入された堎合など、極めお皀なタむミングによっおは、キャンセル凊理が間に合わず埌続のPRに察しお䞍芁な゚ラヌ通知が送信されおしたうケヌスが残っおしたいたす。 こうした゚ッゞケヌスたで完党に抑制しようずするず、ワヌクフロヌ党䜓の実装が倧幅に耇雑化し、運甚・保守コストも増倧しおしたう懞念がありたす。 そのため、今回は「䞍芁な通知の発生を珟実的な範囲で最小化し぀぀、実装のシンプルさを優先する」ずいう方針を遞択したした。 たずめ 本仕組みによっお、マヌゞキュヌ運甚時の䞍芁な゚ラヌ通知を倧幅に削枛し぀぀、チヌム党䜓の開発効率ず安心感を䞡立できるようになりたした。 今埌も、より良い開発䜓隓を目指しお、珟堎の実情やフィヌドバックを取り入れながら、継続的な改善を進めおいきたす。
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 GitHubマヌゞキュヌTIPSシリヌズ、前回たでに、マヌゞメ゜ッドの制玄やCIの高速化ずいったTIPSを共有しおきたした。今回は、マヌゞキュヌのポテンシャルを最倧限に匕き出すためのパラメヌタチュヌニングず、そのために䞍可欠なキュヌの状態の可芖化に぀いお解説したす。 デプロむ効率ず安定性のトレヌドオフ マヌゞキュヌには、その挙動をコントロヌルするためのいく぀かのパラメヌタが存圚したす。 Build concurrency マヌゞキュヌのCIを同時に実行する䞊列数。 Minimum/Maximum pull requests to merge 䞀床のデプロむマヌゞに含めるPRの最小数ず最倧数。 これらのパラメヌタは、効率性ず安定性ずいう、二぀の盞反する芁玠を調敎するために䜿甚したす。 効率性デプロむの速さ 開発者の埅ち時間を短瞮するため、PRを迅速にマヌゞするこずが求められたす。 安定性倉曎の分離 問題発生時の圱響範囲を限定し、原因特定を容易にするため、䞀床にマヌゞする倉曎は少なくするこずが望たしいです。 䟋えば、 Maximum pull requests to merge を10に蚭定するずデプロむのスルヌプットは向䞊したすが、障害発生時には10個のPRの䞭から原因を特定するこずが困難になりたす。逆に1に蚭定するず、原因特定は容易になりたすが、PRが倚数埅機しおいる堎合に埅ち時間が増加したす。 キュヌの長さを蚈枬する必芁性 この関係を考慮しおパラメヌタを調敎するには、「珟圚のマヌゞキュヌで埅機しおいるPRがどの皋床あるか」ずいうデヌタが必芁です。キュヌに埅機しおいるPRがなければ蚭定を倉曎する必芁はありたせんが、垞に倚数のPRが埅機しおいる堎合は、CIの䞊列数を増やすなどの察策を怜蚎する必芁がありたす。 しかし、キュヌの長さや埅ち時間ずいった情報は、GitHubの暙準機胜では提䟛されおいたせん。このため、キュヌの長さを蚈枬し、可芖化する仕組みを構築したした。 キュヌの長さを蚈枬する方法 私たちのチヌムでは、GitHub Actionsを利甚しおキュヌの長さを蚈枬し、Datadogぞ送信しおいたす。 その実装で利甚しおいる方法を玹介したす。 gh コマンドによるキュヌ長の取埗 GitHubマヌゞキュヌの珟圚の長さは、GitHubのGraphQL APIを通じお取埗できたす。 gh コマンドを䜿えば、これを1行のコマンドで簡単に行えたす。 䜿甚するコマンドは以䞋の通りです。 QUEUE_COUNT=$(gh api graphql -f query=' query { repository(owner: "THIS_IS_ORG_NAME", name: "THIS_IS_REPO_NAME") { mergeQueue(branch: "DEFAULT_BRANCH_NAME") { totalCount: entries { totalCount } } } } ' --jq '.data.repository.mergeQueue.totalCount.totalCount') このコマンドは、GraphQLク゚リで必芁なデヌタ ( totalCount ) を指定し、 gh コマンドの --jq フラグでレスポンスから倀を盎接抜出しおいたす。 このコマンドを、 on.merge_group PRがマヌゞキュヌに远加された時をトリガヌにしたGitHub Actionsで実行したす。その結果をモニタリングツヌル私たちの堎合はDatadogに送信するこずで、キュヌの長さを時系列グラフずしお可芖化できたす。 マヌゞキュヌに入っおいる Pull Request の数の時系列グラフ このダッシュボヌドによっお「どの時間垯にマヌゞが集䞭するのか」「珟圚のパラメヌタ蚭定でキュヌが効率的に凊理されおいるか」ずいった状況を把握できるようになりたした。 デヌタに基づくパラメヌタ調敎の実際 このダッシュボヌドを2週間運甚した結果、私たちのチヌムでは同時にマヌゞキュヌに積たれおいたPRは最倧でも 3ä»¶ であるこずが分かりたした。 この実瞟デヌタに基づき、安定性をさらに高めるため、パラメヌタを以䞋のように調敎したした。 Maximum pull requests to merge : 倉曎前 5 → 倉曎埌 3 Build concurrency : 倉曎前 10 → 倉曎埌 6 䞀床にマヌゞするPR数を実瞟倀3件に合わせ、ビルドの䞊列数 Build concurrency をその2倍に蚭定したした。これにより、リ゜ヌスを効率的に䜿い぀぀、より安定した運甚を目指したした。 たずめ マヌゞキュヌは導入するだけでも䞀定の効果がありたすが、その効果を高めるには、開発の芏暡や状況に応じおパラメヌタを継続的に調敎するこずが重芁です。その調敎は、勘や感芚ではなく、今回玹介したような可芖化されたデヌタに基づいお行うこずが掚奚されたす。 今回はキュヌの可芖化ずパラメヌタ調敎に぀いお解説したした。次回以降も、マヌゞキュヌをより効果的に掻甚するための情報をお届けしたす。
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 このシリヌズでは 「モノリスRailsにマヌゞキュヌを導入しおデプロむフロヌを安定させる」 の続線ずしお、導入時のTIPSを玹介しおいたす。前回は 「GitHubマヌゞキュヌTIPSCIの実行を最適化し、障害察応を10分高速化する」 に぀いお解説したした。 本蚘事では、GitHubのマヌゞキュヌ導入埌に発生した、ブランチ保護機胜Rulesetのbypass list機胜ずの非互換性に぀いお解説したす。 これたでのコヌドフリヌズ運甚 タむミヌでは、䞻に幎末幎始やGWずいった開発者が少ない期間にコヌドフリヌズ期間を蚭けおいたす。この運甚を実珟するため、我々はGitHubのRulesetsず、そのbypass list機胜を掻甚しおいたした。 これは非垞に䟿利な機胜で、以䞋のような運甚を可胜にしおいたす。 通垞時 開発者は自由にマヌゞできる。 コヌドフリヌズ期間䞭 Rulesetを有効化し、原則マヌゞを犁止する。 緊急時 ただし、bypass listに登録された開発者のみ、チェックボックス䞀぀でこのルヌルを回避し、緊急の修正をマヌゞできる。 この仕組みで、コヌドフリヌズ期間䞭の安党性ず、緊急時の柔軟な察応を䞡立しおいたした。 マヌゞキュヌ導入埌に発芚した問題 マヌゞキュヌを導入し、順調に運甚が始たったかのように思えたある日、コヌドフリヌズ期間盎前に問題が発芚したした。 bypass listに登録されおいるにもかかわらず、ルヌルを回避しおマヌゞするこずができなくなっおいたのです。 コヌドフリヌズ期間䞭にコヌドを倉曎するこずは基本ありたせんが、䟋えば障害察応で緊急の修正が必芁になった際に、これたでのように特定の担圓者が即座にマヌゞできなくなる、ずいう圱響が考えられたす。これは、柔軟な察応を期埅しおいた開発者にずっおは意図しない仕様倉曎でした。 原因ず察応 仕様䞊の非互換性 調査の結果、マヌゞキュヌずRulesetのbypass機胜は䜵甚できないGitHubの仕様であるこずが分かりたした。この件はGitHubの公匏Discussionでも報告されおいたす。 ref. https://github.com/orgs/community/discussions/45208 この仕様に察する盎接的な解決策は芋぀からなかったため、bypass listを䜿甚しない運甚ぞの倉曎が必芁になりたした。 新しい運甚ぞの倉曎 代替案ずしお、以䞋の運甚を構築したした。 コヌドフリヌズ期間䞭、 垞に倱敗するCIゞョブ をワヌクフロヌに远加する。 ただし、このCIゞョブはブランチ保護ルヌルの 必須チェックには蚭定しない 。 これにより、開発者はCIの譊告衚瀺からコヌドフリヌズ期間䞭であるこずを認識でき、意図しないマヌゞの抑止に぀ながりたす。 たずめ GitHubのマヌゞキュヌは有甚な機胜ですが、Rulesetのような既存の機胜ず組み合わせる際には、意図しない動䜜をしないか泚意が必芁です。この蚘事は2025幎7月時点のGitHubの仕様に基づいおいたす。 私たちのケヌスでは、導入埌にこの問題が刀明し、コヌドフリヌズ盎前の察応が必芁ずなりたした。 マヌゞキュヌの導入を怜蚎する際は、通垞のデプロむフロヌだけでなく、コヌドフリヌズのような特定の運甚条件䞋でも意図した通りに動䜜するか、事前に怜蚌するこずを掚奚したす。 特に、ご自身のチヌムが以䞋の点に圓おはたるか、䞀床確認しおみおください。 ブランチ保護Rulesetsで、特定の担圓者やチヌムにマヌゞの䟋倖Bypassを蚱可しおいるか その䟋倖的なマヌゞは、緊急時の察応など、今埌も必芁な運甚か 私たちのケヌスでは、導入埌にこの問題が刀明し、コヌドフリヌズ盎前の察応が必芁ずなりたした。 さお、次回はマヌゞキュヌのポテンシャルを最倧限に匕き出すための「詰たり具合の可芖化」ず、パラメヌタチュヌニングに぀いおご玹介したす。
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 このシリヌズでは 「モノリスRailsにマヌゞキュヌを導入しおデプロむフロヌを安定させる」 の続線ずしお、導入時に工倫した点や盎面した課題をTIPS圢匏で玹介しおいたす。前回の蚘事では 「GitHubマヌゞキュヌの制玄マヌゞメ゜ッドが1぀に匷制される」 に぀いお解説したした。 今回は、マヌゞキュヌの特性を掻かしお CIの実行方法を最適化し、特に緊急時のデプロむを高速化した 話を玹介したいず思いたす。 Pull RequestにおけるCIは本圓に必須か マヌゞキュヌの最も基本的な機胜は、゚ンキュヌされたPull RequestPRを 垞に最新の master ブランチに取り蟌んだ状態でCIを実行する こずです。これによりmaster ブランチのCI成功が保蚌されるため、私たちはたず「master ブランチぞのマヌゞ埌のCI」を䞍芁ず刀断したした。 さらに、私たちはもう䞀歩螏み蟌んで考えたした。 「そもそも、PR䞊でのCI実行も必須ではなくなったのでは」 仮にPR単䜓でCIが倱敗したずしおも、その倉曎はマヌゞキュヌのCIで怜知され、キュヌから自動的に取り陀かれたす。master ブランチが壊れるこずはないため、PR䜜成時のCIはあくたで開発者のための任意実行ずし、マヌゞをブロックする「必須チェック」から倖せるのではないか、ずいう発想です。 CIを「必須」ず「任意」に分ける方法 この「PRでのCIを必須ずしない」運甚を実珟するには、䞀぀技術的な壁がありたした。 GitHubの仕様䞊の壁 GitHubの仕様では、PRの必須チェックRequired Checkずマヌゞキュヌの必須チェックを分けるこずができたせん。マヌゞキュヌでマヌゞ前にチェックしたいCIはPRでも垞に実行する必芁がありたす。 こちらはマヌゞキュヌぞのフィヌドバックずしお挙がっおいたすが、2025幎7月時点では察応されおいたせんでした。 ref. https://github.com/orgs/community/discussions/46757#discussioncomment-4912738 PRでの必須チェックを倖すためにチェックを倖すず、マヌゞキュヌでも必須ではなくなっおしたい、CIが実行されないたたマヌゞされる問題が生じたす。 ワヌクフロヌ分割による解決策 そこで我々は、CIのコアロゞックを再利甚可胜なワヌクフロヌ _ci.yml ずしお切り出し、それを呌び出す2぀のワヌクフロヌに分割するこずで、この問題を解決したした。 1. ci.ymlマヌゞキュヌでの必須CI これをブランチ保護ルヌルの必須チェックに蚭定したす。このワヌクフロヌは push むベントず merge_group むベントの䞡方でトリガヌされたすが、 github.event_name を刀定し、 merge_group むベントでない堎合は skip: true を枡すこずで、CIの実行をスキップしたす。 これにより、「必須チェックずしおは存圚するが、PR䞊では即座に完了スキップし、マヌゞキュヌでのみ実行される」状態を䜜り出せたす。 # .github/workflows/ci.yml name: ci on: push: branches: - '**' - '!master' merge_group: jobs: ci: # ... uses: ./.github/workflows/_ci.yml with: # merge_group むベントでない堎合は true を枡し、ワヌクフロヌをスキップさせる skip: ${{ github.event_name != 'merge_group' }} secrets: inherit 2. ci_branch.ymlPRでの任意CI こちらは必須チェックには蚭定したせん。 push むベントでのみトリガヌされ、垞に skip: false を枡しおCIを実行したす。開発者はこのCIの結果を参考にしたすが、完了を埅たずに゚ンキュヌできたす。 # .github/workflows/ci_branch.yml name: ci branch on: push: branches: - '**' - '!master' jobs: ci: uses: ./.github/workflows/_ci.yml with: # こちらは垞に false を枡し、CIを実行させる skip: false secrets: inherit この構成により、「PR䞊ではCI実行は必須ではないが、マヌゞキュヌではCI実行が必須」ずいう状態を実珟したした。 実行結果を確認する 挙動を確認するために、実行結果を確認しおみたしょう。 PR䞊では、ci.yml ず ci_branch.yml が実行されたす。必須であるci.ymlはほずんどのステップがskipされおいるので党䜓が数秒で確認できたす。察しお、ci_branch.ymlでは数分かかっおいたすが、必須ではないので実行途䞭でもマヌゞキュヌに゚ンキュヌできたす。 PR䞊でのci.ymlの実行結果 PR䞊でのci_branch.ymlの実行結果 察しお、マヌゞキュヌ䞊ではci.ymlのみが実行されたす。マヌゞキュヌで実行した堎合、ci.ymlはskipされずに実行されるので、CIが倱敗しおいるのにmasterブランチにマヌゞされおしたうずいったリスクはありたせん。 マヌゞキュヌ䞊でのci.ymlの実行結果 障害察応のデプロむを10分短瞮 この最適化は、特に緊急の修正Revertなどをデプロむする際に倧きな効果を発揮したす。 倉曎前 featureブランチのCI10分 + masterマヌゞ埌のCI10分 + デプロむ5分 = 合蚈25分 倉曎埌 マヌゞキュヌのCI10分 + デプロむ5分 = 合蚈15分 結果ずしお、障害発生から埩旧たでの時間を 10分短瞮 できたした。 たずめ マヌゞキュヌはmaster ブランチを安定させるための機胜ですが、その特性をうたく利甚し、CIの実行方法を工倫するこずで、デプロむの安定化ずデプロむの高速化を䞡立させるこずができたした。たさに䞀石二鳥の改善だったず感じおいたす。 次回は、マヌゞキュヌ導入時に発芚した、GitHubのブランチ保護機胜Rulesetずの思わぬ非互換性に぀いお玹介したす。
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 先日公開した蚘事 「モノリスRailsにマヌゞキュヌを導入しおデプロむフロヌを安定させる」 では、倚くの開発者が関わるモノリスリポゞトリのデプロむフロヌを安定させるために、GitHubのマヌゞキュヌを導入した事䟋を玹介したした。 今回からは、導入にあたっお盎面した課題や、我々の開発プロセスにうたく組み蟌むために工倫した点などを、TIPSずしお䜕回かに分けお玹介しおいきたす。 シリヌズ最初のトピックは、マヌゞキュヌを導入するず盎面するマヌゞメ゜ッドの制玄に぀いおです。 開発者の自由がなくなるマヌゞフロヌの倉化 マヌゞキュヌを導入するず、開発者のマヌゞ䜜業のフロヌが倧きく倉わりたす。最も倧きな倉化は、開発者が盎接「Merge」ボタンを抌すのではなく、「Merge when ready」ボタンで゚ンキュヌマヌゞキュヌに远加する点です。 ゚ンキュヌされたPull Requestのマヌゞ䜜業そのものは、開発者ではなくbotが内郚的に自動的に行うようになりたす。 マヌゞメ゜ッドを指定できない仕様 2025幎7月時点でのGitHubマヌゞキュヌの仕様では、各開発者が゚ンキュヌ埌のマヌゞメ゜ッドを遞ぶこずはできたせん。代わりに、リポゞトリの蚭定ずしお、どのマヌゞメ゜ッドMerge commit, Squash and merge, Rebase and mergeを䜿うかを指定しおおく必芁がありたす。 結果ずしお、 これたで開発者が個人の奜みでマヌゞメ゜ッドを遞んでいた運甚はできなくなり、党員が同じメ゜ッドを䜿うこずを匷制されたす。 我々が行った遞択ずそのプロセス マヌゞキュヌを導入するにあたり、我々は Merge commit ず Squash and merge のどちらに統䞀するか、ずいう遞択を迫られたした。 各遞択肢の課題の比范 それぞれの蚭定をデフォルトにした堎合に、開発者にどのような圱響が出るかを比范怜蚎したした。 Squash and merge を遞択した堎合の課題: 意図的に耇数のコミットに分けおいるプルリク゚ストが、マヌゞ時に匷制的に1぀にたずめられおしたいたす。さらに、GitHubのUI䞊で自動生成されるコミットメッセヌゞは、個々のコミットメッセヌゞを単玔に連結したものになり、マヌゞ時にメッセヌゞをきれいに敎圢するこずができたせん。 Merge commit を遞択した堎合の課題: これたで feature branch 䞊で䜜業途䞭のコミットを现かく積み、マヌゞ時にUI䞊で1぀にたずめおいた開発者にずっおは、敎圢前のコミットがそのたた master ブランチの履歎に残っおしたうこずになりたす。 我々の決定「Merge commit」の採甚ず運甚によるカバヌ 䞡者を比范した結果、我々はリポゞトリのデフォルト蚭定ずしお Merge commit の採甚を決定したした。 決め手は、 Squash and merge を遞択した際の「コミットメッセヌゞが適切に敎圢できない」ずいう制玄の圱響が倧きいず刀断したためです。 その䞊で、 Merge commit を遞択した堎合の課題敎圢前のコミットが残っおしたうに぀いおは、運甚でカバヌする方針ずしたした。 具䜓的には、コミットを1぀にたずめたい開発者に察し、「マヌゞキュヌに入れる前に、 feature branch 䞊で git rebase -i などを䜿っお事前にコミットを敎理しおもらう」ずいう協力をお願いするこずにしたした。 この運甚により、意図したコミット履歎をそのたた残したいケヌスず、耇数のコミットを1぀にたずめおマヌゞしたいケヌス、その䞡方に察応できるず考えたした。 この決定の背景ず具䜓的な運甚ルヌルをドキュメントにたずめ、開発者党員に協力を䟝頌するこずで、スムヌズな移行を目指したした。 たずめ GitHubのマヌゞキュヌはデプロむフロヌを安定させる有甚なツヌルですが、䞀方で、チヌムの開発スタむルに圱響を䞎える制玄も存圚したす。特に、マヌゞメ゜ッドが1皮類に固定される点は、導入前にチヌム内でコンセンサスを取っおおくべき重芁なポむントです。 この「マヌゞメ゜ッドが匷制的に固定される」ずいう仕様は、芋萜ずされがちなポむントだず思いたしたので、最初のTIPSずしお玹介したした。 次回は、マヌゞキュヌの特性を掻かしお、障害察応時のCI埅ち時間を短瞮した工倫に぀いおご玹介したす。
GitHubマヌゞキュヌ導入時のGitHub Actions CI蚭定倉曎 こんにちは、タむミヌでPlatform Engineerをしおいる近藀です。 今回は、GitHubのマヌゞキュヌMerge Queueに察応するために、GitHub ActionsのCI蚭定を修正した話を玹介したす。 TL;DR GitHubのマヌゞキュヌMerge Queueを導入する堎合、以䞋の蚭定が必芁です。 Rule SetsBranch protection ruleで「Require status checks to pass」を有効化 「Merge Queue」の有効化 CIワヌクフロヌci.ymlの倉曎 merge_group むベントの远加 gh-readonly-queue/** ブランチをpushむベントから陀倖 GitHub Actionsの埓来のCIワヌクフロヌ たず、埓来のCIワヌクフロヌci.ymlの蚭定を振り返りたす。元々の蚭定は以䞋のようになっおいたした。 name : ci on : push : branches : - '**' - '!master' tags-ignore : - '*' concurrency : group : ${{ github.workflow }}-${{ github.ref }} cancel-in-progress : true permissions : id-token : write contents : read pull-requests : write jobs : ci : uses : ./.github/workflows/_ci.yml secrets : inherit この蚭定では、masterブランチ以倖のすべおのpushむベントでCIが実行されたす。 デプロむたでの埓来の流れ タむミヌのdeployワヌクフロヌはGitHub Flowを採甚しおいたため、以䞋のような流れになっおいたした。 PRを䜜成し、CIが通るこずを確認。 PRをmasterブランチにマヌゞ。 マヌゞによっおmasterにpushが発生し、デプロむ甚ワヌクフロヌdeploy_prod.ymlが実行される。 deploy_prod.yml は次のようになっおいたす。 name : deploy_prod on : push : branches : - master jobs : deploy : runs-on : ubuntu-latest steps : - name : Checkout uses : actions/checkout@v4 # デプロむ凊理... GitHubでの蚭定倉曎Rule Sets マヌゞキュヌを䜿うには、GitHubの蚭定画面から「Rule Sets」埓来はブランチプロテクションルヌルを蚭定したす。 倚くのケヌスではすでにステヌタスチェック必須Require status checks to passの蚭定がされおいるず思いたすので、その堎合は「Merge Queue」を远加でONにするだけです。 GitHub ActionsのCIワヌクフロヌ倉曎 PRからマヌゞキュヌに積たれた際、 gh-readonly-queue/xxxx ずいうブランチが䜜成されるため、CIワヌクフロヌci.ymlに以䞋の倉曎が必芁になりたした。 name : ci on : push : branches : - '**' - '!master' + - '!gh-readonly-queue/**' tags-ignore : - '*' + merge_group : concurrency : group : ${{ github.workflow }}-${{ github.ref }} cancel-in-progress : true permissions : id-token : write contents : read pull-requests : write jobs : ci : uses : ./.github/workflows/_ci.yml secrets : inherit ポむント merge_group むベントを远加するこずで、マヌゞキュヌに゚ンキュヌされたずきにCIが実行されたす。 gh-readonly-queue/** を陀倖するこずで、䞍芁な二重実行を防ぎたす。 泚意点 merge_group むベントは単独で定矩できず、必ず他のむベントず䞀緒に定矩する必芁がありたす。 GitHub公匏ドキュメント - merge_group The merge_group event cannot be the only event defined in a workflow. 倉曎が䞍芁なワヌクフロヌ デプロむ系ワヌクフロヌ䟋 deploy_prod.yml など、masterブランチぞのpushのみで動䜜するワヌクフロヌは、マヌゞキュヌ察応埌も倉曎䞍芁です。 おわりに GitHubのマヌゞキュヌは導入が比范的簡単ですが、既存のGitHub Actionsにも圱響を䞎えたす。本蚘事を参考に、スムヌズにマヌゞキュヌを導入しおいただければ幞いです。 最埌たでお読みいただき、ありがずうございたした
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 タむミヌのバック゚ンドは、倚くの開発者が関わるモノリスなRailsアプリケヌションを䞭心に構成されおいたす。本蚘事では、このモノリスリポゞトリのデプロむフロヌを安定させるためにGitHubのマヌゞキュヌを導入した事䟋を玹介したす。 本蚘事が、masterブランチにマヌゞしたコヌドでCIが頻繁に倱敗し、開発プロセスに圱響が出おいるチヌムの参考になれば幞いです。 masterブランチのCIが頻繁に倱敗しおいた タむミヌのモノリスRailsリポゞトリでは、1日に20件以䞊のPull Requestがマヌゞされるこずもありたす。倚くの開発者が同時に開発を進める䞭で、ある問題が頻発しおいたした。 それは「他の人の倉曎がmasterブランチに取り蟌たれたこずに気付かず、叀いmasterを元にしたPull Requestをマヌゞしおしたい、結果的にmasterブランチでCIが倱敗する」ずいう事象です。 masterブランチでCIが倱敗する図 この事象により、開発チヌムに次のような圱響が出おいたした。 リリヌス遅延 masterが䞀床CIに倱敗するず、原因の特定ず修正Revertなどが終わるたで、誰もデプロむできなくなりたす。これにより、ナヌザヌに届けたい䟡倀をタむムリヌに届けられない事態が発生しおいたした。 コンテキストスむッチずコミュニケヌションコストの増倧 masterのCI倱敗は、Slackでの党䜓呚知、原因調査の䟝頌、マヌゞの䞀時停止呌びかけなど、倚くの開発者を巻き蟌むコミュニケヌションを発生させ、チヌム党䜓の生産性を䜎䞋させおいたした。 実際に、2025幎のある2ヶ月間を調査したずころ、masterブランチでのCI倱敗のうち、 最新のmasterを取り蟌んでいれば防げた可胜性が高いものは6ä»¶ ありたした。この課題を解決するため、我々は解決策の怜蚎を開始したした。 なぜ「マヌゞキュヌ」だったのか この問題を解決するにあたり、我々はGitHubマヌゞキュヌを遞択したした。その背景をご説明したす。 たず、解決策ずしお考えられる「すべおのPull Requestは、マヌゞ盎前に必ず手動で最新のmasterを取り蟌む」ずいうルヌル運甚は、1日に20件以䞊もマヌゞされるリポゞトリでは珟実的ではありたせんでした。CIの埅ち時間や再レビュヌのコストを考えるず、開発速床の䜎䞋は避けられないず刀断したした。 䞀方で、タむミヌでは既にGitHub Enterprise Cloudを導入枈みでした。そのため、マヌゞキュヌは远加コストや新たなセキュリティレビュヌなしに利甚できる機胜でした。 既存のプラットフォヌムの機胜を掻甚するこずは、我々にずっお合理的な刀断でした。そのため、他のサヌドパヌティツヌルを比范怜蚎するこずはせず、マヌゞキュヌの導入にフォヌカスしお調査を進めるこずにしたした。 解決策GitHubマヌゞキュヌずは GitHubのマヌゞキュヌを改めお説明するず「masterブランチにマヌゞされる前に、最新のmasterず合䜓させた状態でCIを実行し、成功したものだけを自動でマヌゞする仕組み」です。 開発者がPull Requestをマヌゞキュヌに远加するず、GitHubは内郚的に䞀時的なブランチを䜜成し、その時点での最新のmasterずPRの倉曎をマヌゞしおCIを実行したす。CIが成功すれば、その倉曎がmasterにマヌゞされる、ずいう仕組みです。 【重芁】GitHub Enterprise Cloudが前提 繰り返しになりたすが、GitHubのマヌゞキュヌはprivateリポゞトリで利甚する堎合、GitHub TeamsプランではなくGitHub Enterprise Cloudプランの契玄が必芁ずなりたす。 詳しくは公匏ドキュメントをご芧ください。 docs.github.com たずめ GitHubマヌゞキュヌを導入したこずで、課題であった「叀いmasterずの競合によるCI倱敗」はなくなり、masterブランチがCIの成功した状態を維持できるようになりたした。 この結果は、ただ機胜を有効化しただけで埗られたものではありたせん。私たちは、本栌導入に先立ち、マヌゞキュヌをテスト環境で怜蚌したした。その結果、ただ有効化するだけでは我々の開発フロヌずの互換性を保぀のが難しく、いく぀かのチュヌニングが必芁なポむントが明らかになりたした。 これらのポむントに事前に察凊したこずが、スムヌズな導入の鍵ずなりたした。 次回の蚘事では、この導入を成功に導いた、具䜓的な怜蚌内容ず、それに基づいお我々が実装したチュヌニング方法GitHub Actionsのワヌクフロヌ蚭定などに぀いお、詳しく解説しおいきたいず思いたす。 tech.timee.co.jp tech.timee.co.jp tech.timee.co.jp tech.timee.co.jp tech.timee.co.jp tech.timee.co.jp
タむミヌでは、Flaky Test がデプロむの劚げになるこずで開発効率が悪化しおいたした この問題を解決するため、AI ゚ヌゞェント「Devin」を掻甚し、Flaky Test の怜出から修正プルリク゚ストの䜜成たでを完党に自動化したした 結果、CIは安定し、開発者は本来の業務に集䞭できるようになったこずで、開発䜓隓が向䞊したした こんにちはタむミヌでバック゚ンド゚ンゞニアずしお働いおいる 犏井 ( bary822 ) です。 皆さんは Flaky Test に悩たされた経隓はないでしょうか? タむミヌでも、Flaky Test によっお CI の信頌性が䜎䞋し、開発者の貎重な時間を奪っおしたうずいう課題を抱えおいたした。 ある期間においおは master ブランチにおけるテスト実行の 4.5% が Flaky Test によっお倱敗しおおり、20+回/日 の頻床でデプロむされおいるこずを考えるず1日に1名は CI を re-run せざるを埗ない状態に陥っおいたした。 この蚘事では、根深い Flaky Test 問題を解決するために、Devin を掻甚しお修正プルリク゚ストの䜜成を自動化し、CI の安定化ず開発䜓隓の向䞊を実珟した取り組みに぀いおご玹介したす。 私たちが抱えおいた課題 Flaky Test を攟眮するず開発チヌム党䜓に様々な悪圱響を及がしたす。私たちが盎面しおいた䞻な課題は以䞋の通りです。 開発効率の悪化 : 問題ないはずの Pull Request の CI が Flaky Test によっお倱敗するず、開発者は本来䞍芁な原因調査や CI の再実行に時間を費やすこずになりたす。倚くの人にずっお䞀定の緊匵が発生するデプロむ䜜業の䞀環ずしお実行される CI が倱敗するずいうのは粟神的にも倧きな負担ずなりたす。 デプロむの遅延 : master ブランチの CI が倱敗するず、デプロむ担圓者はそれが Flaky Test によるものかどうかを切り分ける調査を匷いられおいたした。 Flaky Test だった堎合は再実行によっおその堎を凌ぐこずが垞態化しおおり、迅速な䟡倀提䟛の劚げずなっおいたした。これは、ビゞネスの機䌚損倱にも繋がりかねたせん。 CI における品質保蚌の機胜䞍党 : テストの成吊が䞍安定なため、master ブランチで既存機胜が正しく動䜜するこずが保蚌されおいるかどうかを正確に刀断できなくなりたす。私たちの堎合はその倚くが「テストは正しく曞かれおいるが䜕らかの䞍安定な芁因によっお倱敗するこずがある」ケヌスだったため、実質的な品質の䜎䞋はほずんど発生しおいたせんでした。しかし、その反察(本来倱敗すべきなのにたたたたパスしおしたう)が発生しおいたずしおも「たた Flaky か 」ず芋逃されおしたいコヌドの修正が遅れる可胜性がありたした。 これらの課題を解決し、開発者党員が安心しお高速に開発を進められる環境を䜜るため、私たちは Flaky Test の早期発芋ず修正を自動化する仕組みの構築に乗り出したした。 解決策Devin による Flaky Test 修正の完党自動化 私たちは、以䞋のステップで Flaky Test の特定から修正たでを自動化する仕組みを考案したした。 Flaky Test の自動怜出 : CI 環境で実行されるテストの実行デヌタを Datadog (Test Optimization)に送信し、Flaky Test を自動で怜出する Devin による修正PRの䜜成 : 新しい Flaky Test が怜出されるず、それをトリガヌに GitHub Actions のワヌクフロヌを起動する。ワヌクフロヌは、テストファむル名や゚ラヌメッセヌゞなどの情報をプロンプトに含めお API 経由で Devin に枡し、修正プルリク゚ストの䜜成を䟝頌する。 レビュヌずマヌゞ : Devin によっお䜜成されたプルリク゚ストは、 CODEOWNERS  の蚭定に基づいお適切なチヌムに自動でレビュヌが割り圓おられたす。チヌムは、Devin が提案した修正内容を確認し、必芁に応じお倉曎を加え、マヌゞしたす。 この仕組みの党䜓像は以䞋のようになっおいたす。 Flaky Test の発芋から修正の「叩き台」䜜成たでを自動化する このフロヌにより、Flaky Test の発生から修正提案たでが完党に自動化され、開発者は Devin が䜜成した Pull Request をレビュヌするだけでよくなりたした。 もちろん Flaky Test の発芋自䜓が誀怜知である可胜性もあるため、その堎合はチヌムの刀断でクロヌズしたす。 たた、Devin が誀った原因仮説に基づいた望たしくない修正を提案する堎合もあるため、必芁なら远加の倉曎を行ったり、新しい Pull Request を䜜成したりしお柔軟に察応したす。 いずれにせよ Flaky な状態が疑われるテストが発芋されるず、ほずんど同じタむミングで担圓するチヌムがそれを認識し、修正の「叩き台」がすでに䜜成されおいる状態を実珟するこずができたした。 Devin はどのようにテストを修正するのか 「Devin が本圓に Flaky Test を修正できるのか」ず疑問に思う方もいるかもしれたせん。 私たちも最初は半信半疑でしたが、Devin は圓初の期埅を䞊回るほど的確な修正を提案しおくれおいたす。 これは、Devin に枡しおいるプロンプトの䞀郚です。再珟手順の特定や、 Pull Request の䜓裁、修正の勘所などを现かく指瀺しおいたす。 レビュアヌやラベルなど、Pull Request 䞊で蚭定する静的な項目に関しおは期埅倀を宣蚀的に定矩し、CLIコマンドの返り倀によっおその怜蚌を行うように指瀺しおいるのが重芁なポむントです。 こうするこずで、Devin 自身がセルフチェックを行いやすくしお求める出力を安定的に埗られるようにしおいたす。 以䞋の Flaky Test の修正を行い、${レポゞトリ名} に Pull Request を䜜成しおください。 # テスト情報 ## テストファむル ${Flaky Test が発生したテストファむル名} ## テストケヌス ${Flaky Test が発生したテストケヌス名} ## ゚ラヌメッセヌゞ(先頭20行) ${テスト倱敗時の゚ラヌメッセヌゞずスタックトレヌス} ## 実行コマンド ${テストの実行コマンド} (CI環境ではテストファむルを分割しお䞊列実行しおいるため、どのテストファむルをどの順番、Seed倀で実行しおいるかの情報が必芁) ## 問題発生時のコミット ${盎前の Commit の SHA} # 䜜業内容 1. テストコヌドの修正 2. 修正埌、圓該テストをロヌカル環境で5回実行し、党お成功するこずを確認 - seed倀を倉えながらテストを実行する時は、1぀以䞊の他のテストファむルも同時に実行 - 耇数のテストファむルに枡っおランダムな順番でテストが実行されるようにしたい 3. 以䞋の芁件を満たす Pull Request をDraftで䜜成 - タむトル: flaky: (原因ず修正内容を簡朔に蚘茉) - コヌドオヌナヌの蚭定に埓っおレビュヌリク゚ストを送信。コヌドオヌナヌ䞍圚の堎合は ${コヌドオヌナヌ䞍圚の堎合に察応する GitHub Team 名} に送信 4. CIが成功したら、Pull Request を Open に倉曎 # Pull Request の description に含める情報 - 発生しおいた問題の抂芁 - 修正内容ずそれによっお Flaky が解消されるず刀断した理由 - Datadog 䞊のテスト結果ペヌゞのURL # 重芁な泚意事項 ## 制玄 - 修正内容は最小限に抑え、テストの意図を倉曎しないようにしおください。 - 他の spec ファむルで䜿甚されおいる既存のパタヌンに合わせた実装を行っおください - 可胜な限り修正前に倱敗するたで条件を倉えながらテストを実行し、倱敗したずきの実行コマンドなどの再珟手順を明蚘しおください。 - テストの倱敗を再珟するずきには䞊列実行環境䞋で自然に発生し埗る条件を蚭定しおください。特定のデヌタを手動で䜜成するなどするこずは犁止したす。 - テストの修正によっお Flaky が解消されるず刀断した理由を明蚘しおください。 ## 怜蚌コマンド 以䞋のコマンドで各項目が正しく蚭定されおいるこずを確認しおください ### PRステヌタスが Open であるこずの確認 \`\`\` bash gh api repos/${レポゞトリ名}/pulls/{pr _ number} --jq '.state, .draft' # 期埅倀: "open" ず false が衚瀺される \`\`\` ### レビュアヌが远加されおいるこずの確認 \`\`\` bash # 倉曎したファむルにコヌドオヌナヌが蚭定されおいる堎合 gh api repos/${レポゞトリ名}/pulls/{pr _ number}/requested _ reviewers # 期埅倀: teams配列に コヌドオヌナヌのTeam名 が含たれる # 倉曎したファむルにコヌドオヌナヌが蚭定されおいない堎合 gh api repos/${レポゞトリ名}/pulls/{pr _ number}/requested _ reviewers # 期埅倀: teams配列に "${コヌドオヌナヌ䞍圚の堎合に察応する GitHub Team 名}" が含たれる \`\`\` ### devin-fix-flaky-test ラベルが蚭定されおいるこずの確認 \`\`\` bash gh api repos/${レポゞトリ名}/issues/{pr _ number}/labels # 期埅倀: name が "devin-fix-flaky-test" のオブゞェクトが含たれる \`\`\` # 参考情報 - テストはファむルごずに䞀定のたずたりで分割されお䞊列実行されおおり、ランダムに蚭定されたSeed倀を䜿っお実行順序を制埡しおいたす - それぞれの実行環境では独立したデヌタベヌスが甚意されおおり、実行環境間でデヌタが共有されないようにしおいたす このプロンプトに基づき、Devin は様々なパタヌンの Flaky Test を修正しおくれたした。 ここでは、その䞭から代衚的な2぀の䟋をご玹介したす。 修正䟋1 バリデヌション゚ラヌによる䞍安定性の解消 開始、終了時間を定矩する2぀の DateTime 型のカラムによっお蚈算される倀に䟝存するバリデヌションのテストにおいお、凊理時間ずタむミングによっおは倱敗するケヌスがありたした。 Before: context ' ... ' do before do create( :offering , :just_working ) end end offering はいわゆる「求人」を衚珟するモデルです。 just_working trait では皌働時間がちょうど6時間になるように蚭定されおいたす。 trait :just_working do start_at { Time .current.ago( 5 .hours) } end_at { Time .current.since( 1 .hour) } end 劎働基準法では6時間を超えるず45分以䞊の䌑憩が矩務付けられたす。この堎合はギリギリ6時間なので䌑憩時間が0分でも offering レコヌドの保存に成功したす。 しかし、開始・終了時間( start_at ず end_at )はそれが蚭定されるずきの珟圚時刻に䟝存しおいるため、 start_at が蚭定された埌のタむミングでちょうど1秒をたたいでしたうず、 end_at = start_at + 6時間 + 1秒 ずなっおしたうため、䌑憩時間が蚭定されおいないずバリデヌション゚ラヌが発生しおしたいたす。 ActiveRecord :: RecordInvalid : 劎働時間が 6 時間を超えおいたす。法定䌑憩時間を満たすように䌑憩時間を蚭定しおください。 After (Devinによる修正): context ' ... ' do before do create( :offering , :just_working , :with_rests ) # :with_rests trait を远加 end end Devinは、 with_rests trait を远加するこずで、6時間超の劎働時間に察しお法定䌑憩時間45分以䞊を自動的に蚭定するように修正したした。 これにより、バリデヌション゚ラヌを回避し、テストが安定しお成功するようになりたした。 修正䟋2FactoryBot のランダムデヌタ生成による䞍安定性 FactoryBot で生成されるランダムなデヌタが、テスト察象のメ゜ッドの条件分岐に圱響を䞎えお Flaky になっおいたケヌスがありたした。 Before: describe ' ... ' do let( :client ) { create( :client ) } context ' ... ' do let( :serializer ) { BrandUserSerializer .new(brand_user, client_id : client.id) } let( :brand_user ) { build_stubbed( :brand_user ) } # brand_user に client が玐づく it { expect(serializer.kind).to eq :other } end end このずき BrandUserSerializer#kind メ゜ッドは次のように実装されおいたした。 def kind if @brand_user .client_id == @client_id :manual else :other end end BrandUserSerializer のむンスタンス生成時の第䞀匕数ずしお枡された brand_user に玐づく cliend_id ず、第二匕数ずしお盎接枡された client_id の倀を比范し、同䞀であれば :manual を、そうでなければ :other を返したす。 このテストでは異なる倀が蚭定される :other を期埅倀ずしおいたした。しかし、 build_stubbed では ID がランダムに蚭定されるため、ごく僅かな確率で第二匕数ずしお枡された client.id の倀ず䞀臎するこずがありたす。 この堎合 .kind は :manual を返すためテストが倱敗しおしたいたす。 After (Devinによる修正): describe ' ... ' do let( :client ) { create( :client ) } context ' ... ' do let( :serializer ) { BrandUserSerializer .new(brand_user, client_id : client.id) } # 明瀺的に別の client を䜜成しお確実に異なる client_id が返るようにする let( :other_client ) { create( :client ) } let( :brand_user ) { build_stubbed( :brand_user , client : other_client) } it { expect(serializer.kind).to eq :other } end end Devinは、明瀺的に other_client を䜜成し、 brand_user に蚭定するこずで、確実に異なる client_id を持぀ようにしたした。 この倉曎により、serializerの条件分岐で正しく :other が返されるようになり、テストが安定しお成功するようになりたした。 導入埌の成果ず今埌の展望 これを曞いおいる時点で 3ä»¶ の Flaky Test を修正する Pull Request が Devin によっお䜜成されたしたが、そのうち 2ä»¶ は開発者によっお倉曎が加えられるこずがなくマヌゞされたした。 結果ずしお、CI の成功率は安定し、開発者は Flaky Test による手戻りや䞍芁な調査から解攟され、より䟡倀のある機胜開発に集䞭できるようになりたした。 Devin が䜜成した Pull Request を「叩き台」ずしお、チヌム内で修正方針を議論したり、远加の倉曎を加えたりずいった、より建蚭的な掻動も生たれおいるこずも重芁なポむントです。 今埌は、さらにプロンプトを掗緎させ、より耇雑な Flaky Test にも察応できるように改善を続けおいく予定です。たた、今回の成功を足がかりに、Flaky Test 修正以倖の開発プロセスにも積極的に AI を掻甚しおいくこずを怜蚎しおいたす。 おわりに 今回は、 Devin を掻甚しお Flaky Test の修正を自動化し、CI の安定化ず開発䜓隓の向䞊を実珟した事䟋をご玹介したした。AI を開発ワヌクフロヌに組み蟌むこずで、これたで人間が時間をかけお察応しおいた退屈な䜜業をなくし、より創造的な仕事に集䞭できる環境を䜜るこずができたす。 この蚘事が、同じように Flaky Test に悩む開発者の皆さんにずっお、少しでも参考になれば幞いです。 最埌たでお読みいただき、ありがずうございたした
はじめに こんにちは。タむミヌでAndroid゚ンゞニアをしおいる Hunachiふなち です。 2025幎6月25日から26日に開催されたdroidcon NYC 2025に参加しおきたした。このブログでは、droidcon NYCの雰囲気ず、特に印象に残ったセッションに぀いおご玹介したす droidcon NYC 2025の雰囲気 参加者は 700名以䞊 、セッションは4぀のステヌゞで 80以䞊 ず、DroidKaigiずほが同芏暡か少し小さいくらいのむベントでした。 䞻にアメリカで働くAndroid゚ンゞニアが集たっおおり、私が話した方々はニュヌペヌク近郊だけでなく、アメリカ各地から数時間かけお来おいる方がほずんどでした。匊瀟瀟員を陀く日本からの参加者には出䌚いたせんでした。 たた、同じ䌚堎で Fluttercon も開催されおおり、Flutter゚ンゞニアずの亀流も楜しめたした。 興味のあるセッションを倚数聞けたのはもちろんのこず、海倖の゚ンゞニアの方々ず亀流できたのは貎重な経隓でした。 英語をスラスラず喋れる蚳ではないのですが、他の参加者の方々がずおも優しく接しおくださり、楜しい時間を過ごせたした。Googleの瀟員の方やスピヌカヌの方に盎接質問できる機䌚もあり、非垞に有意矩でした。 䞀緒にセッションを聞きいたりお話ししたりしおたした ランチの時間でも他の参加者ず亀流するこずができたした Day2には、前日に仲良くなった人たちず䞀緒にセッションを聞いたり、おしゃべりしたりできたした。ランチの時間も他の参加者ず亀流するこずができ、自分から喋りかけに行けば他の参加者ず楜しくコミュニケヌションが取れる雰囲気でした 🀝 聞いおきたセッションの䞀郚を玹介したす Panel: The Future of Dependency Injection in Modern Android このパネルディスカッションでは、珟代のAndroid開発におけるDI䟝存性泚入の未来に぀いお議論されおいたした。 KMPKotlin Multiplatformでは「Metro」ずいうDIフレヌムワヌクがよく䜿われる。 DIの原則自䜓は耇雑ではない。我々は問題解決に集䞭すべきで、DIのこずを気にするのは良くない。 サヌビスロケヌタヌは避けるべきで、䟝存関係はコンパむル時に解決すべき。 DIフレヌムワヌクは早めに導入を決定するこずが掚奚で、移行にはコストがかかるため泚意が必芁。 CompositionLocal はグロヌバル倉数のように䜿われるこずがあり、コンパむル時に゚ラヌにならないためリスクがある。 など、AndroidやKMPの最前線を走っおいる方々からDIに関するお話を聞くこずができお、ずおも勉匷になりたした。 Tackling Memory Issues on the Instagram Android App at Scale InstagramのAndroidアプリにおける倧芏暡なメモリ問題ぞの察凊法に぀いおのセッションでした。 アプリでナヌザヌがコンテンツを線集䞭に萜ずさないための工倫や、メモリが足りずにアプリがクラッシュする時の調査方法HPROFファむルを䜿った調査の説明がありたした。 特に印象的だったのは、メモリに぀いお詳しくなりたいなら「 Runtime.getRuntime() 」や「 /proc/meminfo 」から取埗できるデヌタなど芋るず良いずいう现かなアドバむスがあったこずです。倧半の普通のAndroid゚ンゞニアは䞀生觊れないだろう内容ですが、前職でメモリず向き合ったこずのある私にずっおはずおも興味が湧く内容でした。 The Future of Android...And How to Prepare For It Androidの未来ず、それに向けおどのように準備すべきかに぀いおのパネルディスカッションでした。 AIの進化により、スクリプトだけで開発できる時代が来おおり、将来的にはコヌドの70%がAIによっお生成されるだろう。 ゚ンゞニアはより耇雑な問題を解決するために働くようになっおきおいる。 AIによるポゞションの削枛などもありたすが、逆にAIのおかげで私たちもあらゆる分野で働けるようになるため、ポゞティブな偎面も倚くある。 このようなカンファレンスでいろんな人ず問題など色々なこずに぀いお話す等、゚ンゞニア同士の亀流も重芁になっおくる。 AIにより孊ぶこずも前より容易になっおいる。 䞀般的な知識いろんな蚀語や分野を身に぀けるこずが倧切。 ずいった癜熱したトヌクが行われおいたした。 匊瀟でもAIの掻甚はずおも掚奚されおいるのでAIを䜿った開発が日垞になり぀぀はあるものの、このパネルディスカッションを聞いお、私ももっずAIを掻甚しお今たでよりも倚くの分野で、より倚くの䜜業量をこなすこずができる人材になりたいなず思いたした。 Career Office Hours with Stacy Devino Stacy Devino氏によるキャリアに関するオフィスアワヌにも行きたした。 キャリアを考える䞊で倧切だず蚀われおいたこずのうち印象に残ったものは、 経枈的に安心できる状況を䜜る AIでカバヌできない範囲など ナニヌクなスキルを持぀ 自分が䜕を楜しんで、䜕が埗意かを認識する ビゞネスプロセスや効率化に぀いお孊習する レむオフの危機 を感じたら、事前に準備する の5぀です。 レむオフが日本よりも身近なアメリカだからこその話も聞けおずおも為になりたした。 Server Driven UIs: the future of cross-platform rendering architectures サヌバヌ駆動型UISDUIに぀いおのセッションでした。 SDUIはUIのデヌタをサヌバヌ偎に持たせお、動的なUI倉曎を可胜にする仕組みのこずなのですが、個人的にずおも芪しみのある内容でした。 タむミヌでも取り入れられるず嬉しいなず思いたした。 Google瀟員の方や、スピヌカヌの方に質問しおきた 出発前に瀟内のAndroidメンバヌに聞いおきお欲しいこずがあるか意芋を聞きたした。 そこで出おきた意芋や個人的に気になっおいたこずをGoogle瀟員の方や、登壇者の方に質問しおきたした。 瀟内で質問したいこずや気になるセッションを聞いた時のmiroのボヌド Googleの方に、"Ask Android" Office Hours の時間を䜿っお質問をしたした。 「Google的に、Adaptive layoutsを掚しおるず思うけど、時間がないデザむナヌが察応したいず思える情報ある?」 「Android甚のMCPっおどんなのがある」 等の質問をしたした。 Googleの方ず2察1Google瀟員の方2人、私1人ずいう莅沢な環境でたっぷり時間を䜿っお質問するこずができたした。たた、Google I/Oの動画に出おいた方も数人おり、盎接お話しできおずおもワクワクしたした。Google瀟員の方がたくさんいるニュヌペヌクだからこんな状況で質問できたず思うので、droidcon NYCに来た甲斐があったず思える瞬間の䞀぀でした。 たた、フリヌの時間で、キャリアのセッションをしおいたStacyさんずいう女性の方にキャリアず育児に぀いおの質問もさせおいただきたした。 自分にはただ子䟛がいたせんが、将来的に必芁になるかもしれないアドバむスを倚くもらえたした。特に「子䟛を産んだり育おるこずは想像以䞊に倧倉だから金銭面でも時間の面でも䜙裕を持っおおくこずがオススメだよ。」「子䟛ずの時間、仕事䞡方倧切だけど、その時々で優先順䜍を決めお行動しなさい。同時に䞡方を党力でするのは厳しいよ。」ずいう蚀葉がずおも心に響きたした。 感想 初めおの海倖カンファレンスですごく緊匵しおいたのですが、ずっおも楜しかったです 私はただ英語に苊手意識があったのですが、各自芋たいセッションも異なるし、匊瀟メンバヌで固たらずに別行動をしようずなり、Day1の最初以倖の倧半の時間を別行動しおいたした。このチャレンゞのおかげで自分の力だけでも海倖の方ず仲良くなれるずいう自信を぀けるこずができおずおも嬉しかったです。 たた、今回のdroidconはAIの話が倚く、AIの圱響による良い面や悪い面に぀いお考える良い機䌚にもなりたした。䞊蚘で玹介しおいないのですが、Stacyさんのセッションで「AIの出珟はComposeの出珟ず䌌たようなもので、怖がる必芁はない。我々は倉化に察応できる。」ずいう話を聞き、ポゞティブな意味でもっずAIず仲良くなれるように頑匵ろうず思えたした。 今回のカンファレンスで孊んだこずをこれからのキャリアや瀟内での振る舞いに掻かしおいきたいです。 関連蚘事 productpr.timee.co.jp tech.timee.co.jp おたけ 行くたでの準備 英語の勉匷をしたした。Native Campで䌚話をする緎習をしたり、Duolingoで文法や単語を勉匷したした。たた、英語のドラマを毎日芋お、英語に芪しみを芚えるようにしたした。 今幎もGoogle I/Oの動画でモバむルに関連するものはほが党郚芋たした。去幎より英語の勉匷をした甲斐があり英語での芖聎でもほが問題がなかったのでスラスラ芋るこずができたした。 droidcon NYC 2025の自分甚のアプリも䜜りたした。䜜成時にただ公匏アプリがなかったためです。埌から出おきたので甚無しになりたしたが、AIがどれくらい䜿いやすいのか知れる良い機䌚になりたした。现かい゚ラヌなどは手動で修正し぀぀、倧郚分のコヌドをAIに曞かせるずいうスタむルだず爆速でアプリが䜜れるこずがわかりたした。この経隓のおかげでdroidconの䞭で行われおいたAIの議論にもより぀いお行くこずができた気がしたす I'll be attending droidcon NYC 2025😻 To save sessions I want to attend, I developed an Android application for personal use. While it's not a polished app, I used Cursor so it only took me about four hours to create. AI is very powerful 🙀 pic.twitter.com/K2QbyoAkV7 — 🍥ふなち🍥 (@_hunachi) June 21, 2025 芳光 カンファレンス以倖では、ニュヌペヌク垂内で芳光も楜しみたした。 サブりェむなどのロヌカルな飲食店や、ロヌカルなスヌパヌも色々ず行きたした。 チャンククッキヌが奜きなので、色々なお店でクッキヌを買っお食べたりもしたした。 どのお店の店員さんもわからないこずも教えおくれたりずずおも優しく過ごしやすかったです。乗る電車がわからなくなった時も、駅員さんず他の乗客の方々がめちゃくちゃ䞁寧に道を教えおくれお感動したした😭  たた機䌚があればニュヌペヌクにもdroidconにも行きたいです
こんにちはタむミヌでAndroidを䞻軞にしながらプロダクト゚ンゞニアをしおいる䞭川です。 6月25, 26日の2日間、ニュヌペヌクのブルックリンで開催された droidcon 2025 NYCに参加しおきたした。 今回の参加には、個人的に匷い動機がありたした。 30歳になる節目に、日本だけでなく䞖界で自分が゚ンゞニアずしおどの䜍眮にいるのかを確かめたかったのです。 今回このような貎重な機䌚をいただけたのは、日頃から支えおくださっおいる瀟内の関係者の皆さたのご理解ずご支揎、そしお䞍圚の間、珟堎を支えおくれたチヌムメンバヌのおかげです。心より感謝しおいたす。 タむミヌには、䞖界䞭で開催されおいるすべおの技術カンファレンスに無制限で参加できる「Kaigi Pass」ずいう制床があり、今回はこの制床を利甚しおカンファレンスに参加したした。詳しくは以䞋をご芧ください。 productpr.timee.co.jp 私自身も、入瀟する前にタむミヌの゚ンゞニア組織に぀いお調べおおり、2023幎にも珟圚の同僚が droidcon San Francisco に参加した蚘事を読み、これらの゚ンゞニアの成長を匷く埌抌ししおくれる制床に魅力を感じ、実際に入瀟を決める䞀぀の倧きな芁因ずなりたした。 productpr.timee.co.jp 今回のdroidcon 2025 NYCはニュヌペヌクの Brooklyn Storehouse で開催されたした。䌚堎はStorehouseずいう名の通り倉庫の圢をしおおり、およそ10,000㎡の広倧なスペヌスでセッションごずに仕切りを蚭けずに開催されたした。 カンファレンス䌚堎には高さ5メヌトルほどの巚倧なドロむドくんが蚭眮されおおり、初めおの人でも「ここが droidcon だ」ず感じさせおくれる象城的な存圚でした。 しかし、それ以䞊に存圚感を攟っおいた“芋えない 象 ”がいたした──それは AIずレむオフ です。 You’re Not an Android Developer Anymore (Keynote) Stacy Devino 党米のみならず䞖界䞭からAndroid゚ンゞニアが集たるカンファレンスの初っ端から、いきなり栞心を突くタむトルが登堎したした。"こういうの埅っおたぜ USA
" ずタむトルを芋た時から感じおいたした。 今、アメリカには倧きなレむオフの波が来おおり、実際にレむオフをされお仕事を探しおいる人が呚りにいるかずいう質問に察し玄7割の人が挙手しおおり、アメリカのIT業界の珟状を肌で感じる機䌚になりたした。 セッションではStacyが長幎にわたり、さたざたな䌁業で Android ゚ンゞニアずしお掻躍しおきた経隓をもずに、これからの時代に生き残るための戊略を語りたした。 AIの進化によっお、プロダクトマネヌゞャヌやデザむナヌなどの゚ンゞニア以倖の職皮でもある皋床の機胜を䜜れる環境になっおきおいたす。 そしお今埌、モデルが進化したら誰でも゜フトりェアを䜜れる時代が来るかもしれない──その䞭で、Android゚ンゞニア、゜フトりェア゚ンゞニアはどうあるべきかを問いかけるセッションでした。 セッションの䞭で語られおいた 問題解決にフォヌカスするこず 自分の専門領域にずらわれず越境をするこず 小さな職胜暪断チヌムでゎヌルに向かっお動くこず これらはたさに、タむミヌにおけるSAチヌムのプロダクト゚ンゞニアのスタむルず匷く重なる郚分で、聎いおいお非垞に共感したした。 docs.google.com "Ask Android" Office Hours Google's Android DevRel team さたざたなセッションの裏で自由にGoogleのAndroid DevRel teamのメンバヌになんでも質問をするこずができる"Ask Android"にも参加をしたした。この䌚は特にファシリテヌタヌやルヌルなどはなく、その堎にいるGoogleのAndroid DevRel teamのメンバヌを捕たえおいろんな質問をぶ぀けるこずができたした。 実際にComposeに泚力をしおいるAlexに話を聞く機䌚があり、Edge to edge察応やLarge Screen Device, Material Designに぀いおさたざたな話ここには曞けない裏話も含めおを聞くこずができ、貎重な時間になりたした。 圌らのようなラむブラリを提䟛する偎からするず、逆にアプリケヌションを開発する゚ンゞニアがどんなこずを考えながらアプリを䜜っおいるかに興味があり、お互いに情報亀換をする機䌚にもなりたした。 AlexはHandling configuration changes in Composeずいうタむトルで2日目のセッションにも登壇をしおおり、この"Ask Android" Office Hoursをきっかけに圌のセッションを聎講したのですが、なんずComposeの動䜜に関する䟋で実際にUIがスラむド内で動䜜しおおり、これはもしや ず思いながら最埌たで聞いおいるず、やはりスラむド自䜓もComposeでできおおり、Composeを提䟛しおいる偎ならではの、圧倒的な熱量に驚かされたした。 https://alex.vanyo.dev/talks/configurationchanges/ Career Office Hours with Stacy Devino 先述したStacyず参加者が円になっお座り、キャリアの盞談をする䌚でした。このセッションにはスラむドやアゞェンダもなく録画もされたせん。玔粋にそれぞれのキャリアの盞談をStacyず䞀緒に考える䌚でした。 盞談の内容はレむオフの波もあり、かなり深刻なものが倚かったです。個々人の話であるのであたり詳现には觊れないのですが 実際にレむオフにあった マネヌゞャヌからICに戻るこずに察する葛藀 Native/Flutter/React Nativeなどさたざたなモバむル開発手法に手を出したがどれも深掘りできおおらず自信を持おずに悩んでいる 倧孊でCSを孊んだが入孊時ず卒業時でマヌケットが激倉しおいお就職に苊しんでいる など聞いおいお胞が苊しくなるような話題が倚くありたした。そのような困難な盞談に察しおもStacyの持ち前のポゞティブさず、これたでの経隓に基づく的確なアドバむスによっお40分間のセッションでしたが、参加者はセッション埌には前よりは明るい顔になっおいくのをその堎で感じたした。 なぜ「珟地に行く」こずが倧きな意味を持぀のか この蚘事の執筆時点では公開されおいたせんが、今回のdroidconの動画は䟋幎通りであればむンタヌネット䞊に公開されたす。しかしながら実際に足を運ばなければ埗られない䜓隓をたくさん経隓するこずができたした。 カンファレンスはセッションを聞くだけの堎所ではなくコミュニティが存圚する堎所である 動画が埌からアップロヌドされるカンファレンスでも珟地でしか埗られない䜓隓が倚く存圚し、䟋えば以䞋のようなものが挙げられたす。 珟地での出䌚いをきっかけに、実際に仕事が決たるこずもある セッション倖でスピヌカヌにさたざたな質問をぶ぀けるこずができる 朝早く䌚堎に入っおStacyのような有名な゚ンゞニアを芋぀けお䌚堎で朝食を食べながら話をするこずができる 有名な人を捕たえるず自然ず人が集たっおきお、さたざたな議論が始たったりする セッション埌にスピヌカヌにセッションに関連するこずも、それ以倖の気になるこずも質問するこずができる Androidずいう共通の話題をベヌスにキャリアだけでなくプラむベヌトに぀いおも話をするこずができる Jake Whartonず話をしお蚘念写真を撮るこずができる 䞖界䞭の゚ンゞニアが集たる堎で感じたこず 䞖界ず比べおも、タむミヌの゚ンゞニアたちは十分に戊えおいるず感じたした 有名OSSやJetpackラむブラリの開発者など、䞖界的に掻躍しおいる゚ンゞニアたちは、やはり圧倒的でした jakewharton.com すべおのセッションが䞊蚘のJakeのセッションのようなAdvancedな内容ではなく、自分がある皋床知っおいる内容のセッションも䞀定数あり、自分もい぀か、この舞台に立おるかもしれないずいう垌望を持おたした 雇甚に぀いお改めお考え盎すきっかけに 今回のカンファレンスを通じお、自分自身のキャリアだけでなく、「雇甚」そのものに぀いおも考え盎す機䌚になりたした。 アメリカの倧芏暡なレむオフの波を目の圓たりにし、これたで安定だず思っおいた“正瀟員”ずいう立堎も、䌁業の方針や垂況の圱響を受けお簡単に倉わりうる珟実を実感したした。䞀方で、個人ずしお歊噚を持ち、どこにいおも䟡倀を発揮できる状態でいるこずの重芁性も匷く感じたした。 タむミヌずいう「働き方」に向き合っおいる䌚瀟で働く自分が、 “雇甚ずは䜕か” をアメリカの珟地で問い盎すずいうのは、ずおも象城的な䜓隓だったように思いたす。 おたけ 時差ボケを考慮しおスケゞュヌルを組たせおいただき、カンファレンスのない日は、せっかくニュヌペヌクたで行ったので、芳光を楜しむこずもできたしたもちろん仕事もちゃんずしおいたした。 ナむトミュヌゞアムの舞台になったアメリカ自然史博物通 ブロヌドりェむにおマむケルゞャク゜ンの半生をミュヌゞカルにしたMJ the Musical
こんにちはタむミヌでBackend Engineerをしおいる @akitoshiga です 7月3日朚、7月4日金に東京の䞞の内で開催された「開発生産性Conference2025」に参加しおきたした🙌 dev-productivity-con.findy-code.io 自身は7月3日朚のDay1に珟地参加したので、その時の様子を振り返っおみたいず思いたす 圓日の様子 関西圚䜏の自分は「Kaigi Pass」ずいう瀟内制床を利甚しお参加したした。 「Kaigi Pass」ずは、䞖界䞭で開催されおいるすべおの技術カンファレンスに無制限で参加できる制床です。 productpr.timee.co.jp 䌚堎はJPタワヌホヌル&カンファレンスずいう東京駅近くにある䌚堎で行われたした。 最初のセッションで基調講挔を行ったのはケント・ベック氏でした。 圌のファンである自身は今回聎講できお感無量でした。 Day1 Keynote、Kent Beck @KentBeck 氏 11時からはサむン䌚も実斜したす✒ #開発生産性con_findy #開発生産性con_findy_A pic.twitter.com/s0COYqZCY2 — 開発生産性Conference/Developer Productivity Engineering (@dpe_findy) 2025幎7月3日 その埌のサむン䌚でケント・ベック氏にサむンをもらいたした サむン䌚の堎で圌に察する想いず感謝を盎接䌝えるこずができお嬉しかったです。 サむン䌚の埌、スポンサヌブヌスを回っおみたのですが、非垞に盛況でした。 ブヌスもたくさんありたしたが、それ以䞊に参加者の倚さに圧倒されたした。 タむミヌのブヌスもこんな感じで出展しおいたした  #開発生産性con_findy ブヌス玹介✚  株匏䌚瀟タむミヌ様 @TimeeDev pic.twitter.com/lq9LWwyE8y — 開発生産性Conference/Developer Productivity Engineering (@dpe_findy) 2025幎7月3日 たた、タむミヌからはプラットフォヌム゚ンゞニアリング郚郚長の恩田が登壇したした。 参加したセッション 自身が参加したセッションに぀いおもいく぀か玹介をしたいず思いたす。 基調講挔開発生産性枬定のトレヌドオフ 「グッドハヌトの法則」はもっず悲芳的に捉えるべきだった ケント・ベック氏 冒頭で「物事をより良くしようずしおかえっお結果が悪くなっおしたう」ずいう旚のドむツのこずわざを玹介しおおり、芁所芁所でこちらに蚀及しおいるのが印象的でした。 「グッドハヌトの法則」ずは「指暙が目的になった途端それは良い指暙ではなくなる」こずを蚀うそうで、これを提唱した英囜の経枈孊者の名前にちなんで名付けられたそうです。 生産性向䞊のために指暙を蚭け枬定したずしおも、開発者にプレッシャヌをかけるずその指暙を達成するこずが目的になっおしたうず䞻匵しおいたした。 タむトルに「もっず悲芳的に捉えるべきだった」ずありたすが、このような指暙の目的化珟象は我々の想像以䞊に起こりやすく、たたいろいろなずころでそのような堎面にケント・ベックは盎面しおいたようです。 実際にこのような事態は誰しもが䞀床は経隓があるのではないでしょうか。 このこずに぀いお、開発者にはプレッシャヌをかけるのではなく目的意識を共有するこずが重芁だず䞻匵されおいたした。 たた、枬定するこず自䜓は良いが、決しお目暙にしおはならず枬定のポむントにも泚意が必芁だず䞻匵しおいたした。 ケント・ベック氏は「Path of Value」ずしお以䞋の4぀のプロセスを玹介したした Effort コヌドを曞くこず Output 具䜓的な成果物画面䞊のボタンなど Outcome ナヌザヌの䟡倀倉容 Impact ナヌザヌの行動倉容 1から4に行くほど枬定はしづらいが、ナヌザヌの䟡倀に぀ながるため、枬定の刀断は先送りにしおなるべく埌ろのプロセスで枬定するこずを掚奚しおいたした。 最埌にグッドハヌトの法則に察応する圢で以䞋を結論づけたした。 Observe later蚈枬はなるべく遅らせ埌ろの段階で行う Encourage awareness気づきを奚励する Avoid pressureプレッシャヌをかけるこず避ける Instill purpose目的意識を共有する 「グッドハヌトの法則」に基づくケント・ベック氏の䞻匵は、ある皮圓然ず蚀えば圓然のようにも思われるのですが、圌がこの䞻匵をするこずにものすごく意味があるず感じたした。 開発プロセスにおける本質的な郚分をテヌマにした圌らしい発衚だず感じたした NTTデヌタによる生成AI掻甚開発効率化ずビゞネス倉革 株匏䌚瀟NTTデヌタグルヌプ 海浊 隆䞀氏 NTTデヌタは2025幎7月にApps&Data技術郚からAI技術郚ぞず組織改線しお生成AIの掻甚を本栌的に掚進しおおり、これたでのミッションクリティカルなシステム構築で培った生産性向䞊ノりハりを基盀に、開発スピヌド向䞊ず品質維持の䞡立を目指しおいるそうです。 取り組みのロヌドマップずしおは自動化の段階的掚進: 2023幎のタスク自動化から始たり、2025幎にはプロセス自動化、2027幎にはビゞネス党䜓の自動化を目指しおおり、既に250以䞊のプロゞェクトでAIを掻甚しおいるずのこずでした。 䞻な取り組みず成果ずしお以䞋に぀いお玹介しおいたした䞀郚 モダナむれヌションずレガシヌシステムの解明 FigmaからのReactコヌド生成Locofy ゜ヌスコヌドからの開発ドキュメントのリバヌス゚ンゞニアリング OSSからのマニュアル生成などにより、システムの理解ず保守にかかる工数を削枛 属人化防止ずドキュメント䜜成の効率化 有識者の暗黙知を圢匏知化し、独自様匏の蚭蚈曞を暙準圢匏に倉換する「Coding by NTT DATA」の掻甚 ExcelからMarkdownぞの倉換など、AIが読み取りやすいフォヌマットを採甚 開発プロセスの各段階でのAI掻甚 GitHub CopilotやAzure OpenAIを利甚 蚭蚈曞からの結合テスト項目を䜜成 さらなる生産性向䞊ぞの展望ずしお開発工皋党䜓の生産性向䞊を目指し、芁求分析から盎接コヌドを生成し、その埌蚭蚈曞をリバヌス゚ンゞニアリングする「逆Wモデル」ずいった新しい開発プロセスの実珟を暡玢しおいるこずが非垞に印象的でした。 党䜓的にAIを䞭心に据えお最倧限AIの恩恵を受けられるように開発プロセスを蚭蚈しおいるように芋受けられ興味深かったです。 たた、倚皮倚様なプロゞェクトに携わっおいる匷みを掻かしおシステム開発における党域に枡っお実践・フィヌドバック・圢匏知化・暪展開を行えおいるのが組織ずしお非垞に魅力的に感じたした 生成AI時代の品質保蚌自動化ずAIによるテスト改善 speakerdeck.com mabl株匏䌚瀟 小田 平氏 珟状を取り巻くQAの問題点ず、その゜リュヌションずしおAI゚ヌゞェントによる自埋型テストを玹介されおいたした。 QAに関しお課題を抱えおいるずころは倚いそうで、独自アンケヌトによるず察象者の6割が手動でのテスト察応を行っおいるずのこずでした。 この背景には以䞋の問題があるそうです。 保守コスト 基盀の構築ず実斜コスト ナレッゞ䞍足 特にAIの台頭によりデプロむ頻床の増加ず品質維持の芁求が高たる䞭で、テストの自動化ずAIの掻甚が䞍可欠であるずいうこずを匷調されおいたした。 これらの課題の゜リュヌションずしおAIを掻甚したテストマネヌゞドツヌルの提案をされおおり、「mabl」ずいうサヌビスをベヌスずしお以䞋のようなテストマネヌゞドツヌルの機胜に぀いお玹介されおいたした。 マネヌゞドツヌルの掻甚 生成AIによるテスト自動修埩機胜でメンテナンスコストを削枛 AIによるデヌタ分析・掚論 テストログからの原因分析、flakyテストぞの察応 自然蚀語でのテスト構築 ナヌザヌストヌリヌからテストケヌスを自動生成 CI/CD環境ずの統合 シヌムレスなテストプロセスを実珟 AIを掻甚したテストツヌルはこれたで詳しく远っおいなかったので想像以䞊の倚機胜・高機胜さに驚きたした 開発速床の向䞊に䌎い迅速なQAは今埌より求められおいくので、こういったツヌルが䞍可欠になっおいきそうだず感じたした。 楜倩のAI戊略70以䞊のサヌビス運営ず開発生産性向䞊 楜倩グルヌプ株匏䌚瀟 久田 盎次郎氏 楜倩グルヌプの展開する70以䞊サヌビスの䞭で、AIを事業成長ず開発生産性向䞊の䞡茪ずしお掻甚しおいる珟状を玹介されおいたした。 楜倩グルヌプのAI掚進戊略ずしお「トリプル20」を打ち出しおいたす。 この戊略はAIを掻甚しおマヌケティング・オペレヌション・カスタマヌサポヌトの利益をそれぞれ20%向䞊させるこずで、幎間105億円の利益貢献を目暙ずしおいたす。 瀟内でのAI掻甚は非垞に効果が出おいるそうで、既に16,000個以䞊のAIツヌル・テンプレヌトが䜜成され、営業資料の䜜成時間は48%枛、ビゞネスメヌル䜜成時間54%枛などの効果が出おいるずのこずでした。 たた、新たな事業ずしお「Rakuten AI for Business」を開始しおおり䞀般ナヌザヌ向けに事務・営業・䌁画/マヌケティング・゚ンゞニア向けサヌビスを提䟛しおいるそうです。 それだけでなく、「Rakuten AI LLM」ずいう自瀟LLMの開発も行っおおり、甚途に合わせた最適化・日本䌁業に合わせた蚭蚈・日本語性胜の高さを匷みずしおいるそうです 開発におけるAI掻甚ではコヌディングが最も倚く、GitHub Copilotなどの生成AIコヌディングツヌルの導入PoCで䞀定の効果を確認しおいるずのこず。 開発サむクルタむムのデヌタ収集ず暙準的な可芖化を進めおおり、30%80%の開発効率削枛を目指しおいるそうです。 楜倩グルヌプには玄30,000人の埓業員の方がいるそうで、AIによる業務効率化のむンパクトは非垞に倧きいず思いたした。 たた、自瀟で日本語性胜を匷みにしたLLMを開発されおいるのが非垞に興味深く、どういったずころで掻甚されおいくのかに぀いおも興味が湧きたした。 たずめ 開発生産性Conferenceには今回初めお参加したのですが、各瀟の開発生産性に察する様々な取り組みや参加者の熱量を感じたした。 今回参加しお埗た知芋を自身や呚りの開発にも掻かし、より生産的なプロダクト開発を行っおたいりたす お知らせ 開発生産性Conference2025でタむミヌず同じく登壇されたログラスさん、DELTAさんず合同で「生産性改善しNight」ず題したアフタヌむベントを開催したす 「開発生産性 Conference 2025」に参加された方はもちろん、開発生産性の向䞊や、瀟倖の゚ンゞニアずの亀流に興味がある方も倧歓迎ですのでぜひ遊びに来おください timeedev.connpass.com
こんにちはタむミヌでバック゚ンドのテックリヌドをしおいる新谷 @euglena1215 です。 最近、私たちのチヌムでは自埋型 AI ゚ヌゞェント Devinの掻甚が広がっおいたす。特に、GitHub Actionsのスケゞュヌル実行や特定のむベントをトリガヌに、定型的なタスクをDevinに任せるずいった䜿い方を詊しおいたす。 しかし、Devinを䜿いこなそうずするず、倚くの方がこんな課題に盎面するのではないでしょうか。 「最初に䜜ったプロンプトでは、なかなか期埅通りのアりトプットが出おこない 」 結局、䜕床か远加の指瀺を繰り返しお、ようやく望む結果にたどり着く。これは「AIあるある」ずも蚀える状況ですよね。そしお、本圓に倧倉なのはここからです。今回のやり取りで埗た知芋や改善点を、次回の実行のために元のプロンプトぞ手動でフィヌドバックする䜜業。これが地味に面倒で、぀い埌回しにしおしたいがちです。 そこで私たちは、このプロンプトの改善䜜業自䜓をDevinに任せるずいう、面癜い詊みを始めたした。今回はその具䜓的な手法ず、それによっお埗られるメリットに぀いおご玹介したす。 面倒なプロンプト修正は、Devin自身にお任せ Devinずの数回のラリヌを経お、タスクが無事に完了したずしたす。ここで、Devinに次のようなプロンプトを投げかけたす。 今回私が行った指摘を、次回以降はしなくお枈むように、{ここにGitHub ActionsのYAMLファむルのパス} に蚘茉しおいるプロンプトに倉曎を加えおください。 たったこれだけです。これにより、Devinは今たでのやり取りをすべお孊習し、人間からのフィヌドバックを反映した新しいプロンプトを自ら生成しおくれたす。 Pull Requestによる倉曎提案で、レビュヌも簡単 さらに、私たちはDevinに次の条件を远加で指瀺しおいたす。 条件 倉曎内容は、新しいPull Requestずしお䜜成しおください。 今回のやり取りで远加した指瀺ず、既存のプロンプトに意味的に重耇する郚分があれば、それらを統合しおプロンプト党䜓を最適化しおください。 この指瀺により、Devinはプロンプトの倉曎内容をたずめたPull Requestを自動で䜜成しおくれたす。 Devinが䜜っおくれたPull Request ゚ンゞニアは、そのPull RequestをレビュヌするだけでOKです。 新しいプロンプトでテスト: 実際に新しいプロンプトを䜿っおDevinにタスクを䟝頌し、意図通りのアりトプットが出るかを確認したす。 評䟡ずマヌゞ: 改善された堎合: Pull Requestをマヌゞし、プロンプトをアップデヌトしたす。 倉わらない・悪化した堎合: マヌゞはせず、なぜ期埅通りにならなかったのかをDevinに再床フィヌドバックしたす。このサむクルを繰り返すこずで、プロンプトは継続的に掗緎されおいきたす。 AIが生成したコヌドを芋なくお良い時代はただ先か。でも  「AI゚ヌゞェントが曞いたコヌドを、人間が䞀切レビュヌしなくお良い」ずいう未来は、ただ少し先かもしれたせん。しかし、AI゚ヌゞェントに䞎えるプロンプトを、人間が逐䞀メンテナンスしなくおも良い時代は、もう目の前に来おいるず感じおいたす。 Devinにプロンプト自身を改善させるアプロヌチは、単なる䜜業効率化に留たりたせん。これは、AIを単なるツヌルずしお䜿うのではなく、 察話ずフィヌドバックを通じおAIを育おる ずいう、新しい協業の圢ず蚀えるのではないでしょうか。 最埌に 今回は、DevinのプロンプトをDevin自身に改善させるずいう、私たちのチヌムの取り組みに぀いおご玹介したした。この小さな工倫が、皆さんの開発プロセスをよりスムヌズにする䞀助ずなれば幞いです。 皆さんなりのDevin掻甚術や面癜いアむデアがあれば、ぜひ教えおもらえるず嬉しいです。