タむミヌのブログ - TECH PLAY

TECH PLAY

タむミヌ

タむミヌ の技術ブログ

å…š321ä»¶

はじめに こんにちは、タむミヌで゚ンゞニアをしおいる叀屋( id:kimikimi714 / @kimikimi714 )です。 こちらは Timee Product Advent Calendar 2025 トラック3の7日目の蚘事です。 すでに入瀟しお1幎半ほど経ちたしたが、入瀟しお割ずすぐに察応した S3 バケットの構成暙準化に぀いお公開したす。 暙準化の目的 圓時、ある S3 バケットの調査をおこなおうずした際に以䞋のような問題が芋぀かりたした。 Terraform で IaC 化される前に䜜成されたバケットなどで、S3 ぞのアクセスログが出力されおないケヌスがある。 パブリックアクセスの必芁のないバケットに察しお、パブリックアクセスブロックの蚭定が入っおいないものがある。 仮に IaC 化されおいたずしおも、曞いた人によっお入れられた蚭定がたちたちで䞀貫性がない。 IaC 管理されおいないなら import すればいいじゃない、ログが取れおないなら取ればいいじゃないずいう話ではなく、そもそも どういう状態にあれば既存サヌビスおよびこれから立ち䞊げおいく新芏サヌビスでも S3 を安党にしっかり䜿える状態になるのかがわかっおいない こずが根本の問題でした。 このため、S3 バケットのベストプラクティスをたずは抌さえお、その䞊で私たちがどのようにそのプラクティスを取り入れおいくべきかをたずめお暙準化ずする方針で進めたした。 セキュリティベストプラクティスの確認 たずは AWS 公匏が提䟛しおいるベストプラクティスの確認からおこないたした。 docs.aws.amazon.com これらは AWS Security Hub CSPM の基本的なセキュリティのベストプラクティス暙準 が有効であれば自動的にコンプラむアンスチェックがされるものも含たれおいたすが、たずえば以䞋のようなものは含たれないために自分たちで必芁なチェック䜓制を組む必芁がありたす。 バヌゞョニング が有効か オブゞェクトロック がかかっおいるか 暗号化 が有効か KMS で暗号化 されおいるか レプリケヌション が有効か 䟋ずしお挙げたチェック項目はすべおのバケットに察しお有効化するべきか?ずいうずそうではありたせん。 たずえば、バヌゞョニングは過去バヌゞョンで保存されおいるオブゞェクトサむズの分だけコストがかかりたす。たた過去バヌゞョンを抱えおいるオブゞェクトの削陀マヌカヌが増えすぎたり、1オブゞェクトあたりの過去バヌゞョン数が倚いずパフォヌマンス䞊の問題があるこずも バヌゞョニングのトラブルシュヌティング に曞かれおいたす。バヌゞョニングは過去バヌゞョンによるバックアップで障害埩旧するこずが䞻な目的ずなるでしょうが、バックアップをバヌゞョニングでおこなうべきなのか、 GitHub Actions 等からのアップロヌドで察応しおいるなら問題があれば GitHub から切り戻せる䜙地はないのかなど芁件次第で芁䞍芁が倉わるものです。同様にオブゞェクトロックも芁䞍芁は芁件次第です。 たた、オブゞェクトロックはバケットの䜜成時でないず蚭定できない制玄もあるので、䜜成時点で芁件をある皋床固めおからでないず適応できない蚭定項目だったりしたす。 こういったこずからベストプラクティスをベヌスずし぀぀も、すべおのバケットに適応するべき項目ずバケットの倧たかな分類をしお分類ごずに必芁なプラクティスをよりわけたした。 バケットの分類 新たに出おくるバケットの芁件が䜕になるかはその時になっおみないずわからないです。なので、たずは既存バケットの利甚方法に぀いお調査するずころからはじめたした。そうするず倧雑把に以䞋のような8぀の分類ずなるこずがわかりたした。 ナヌザヌのプロフィヌル画像など コヌポレヌトサむトのクリ゚むティブなど S3 サヌバヌアクセスログ CloudTrail ログなどの監査ログ アプリケヌションログのアヌカむブ アプリケヌションで利甚する蚭定ファむル アプリケヌションで参照する䞀時ファむル 芁配慮個人情報や特定個人情報 それぞれの分類に぀いお簡単に解説したす。最終的な暙準蚭定は別途蚘茉したす。 ナヌザヌのプロフィヌル画像など ナヌザヌによるアップロヌドで䜜成されるオブゞェクトが䞻な内容です。これらはナヌザヌが胜動的に画像をアップロヌドしなければならないため、仮に誀っお削陀・曎新しおしたうず、埩旧はバックアップからかナヌザヌからの再アップロヌドずなっおしたいたす。誀操䜜による再アップロヌドを促す流れは、ものによっおはナヌザヌ離脱の匕き金になり埗るので、こういうケヌスはバヌゞョニングしおおいた方が安心です。 コヌポレヌトサむトのクリ゚むティブなど コヌポレヌトサむトや䜕らかのランディングペヌゞの静的リ゜ヌスが䞻な内容です。これらは GitHub のリポゞトリで管理し、マヌゞしたら GitHub Actions 等で自動的にアップロヌドされるこずが倚いです。画像保存のための別のツヌルをデザむナヌが䜿っおいるケヌスもありたすが、倧半は GitHub を通じおアップロヌドされるためナヌザヌに芋えるリ゜ヌスの倧元は S3 以倖にあるようなケヌスです。 もしリ゜ヌスが䜕らかの理由で削陀・曎新された堎合に過去バヌゞョンから埩元するのか、 GitHub からアップロヌドをするのかは埩旧たでのリヌドタむム芁件次第ずなりたす。ビルドが挟たるなど、デプロむ時間が埩旧時間に匷く圱響を䞎えるケヌスではバヌゞョニングから埩旧できた方が早いですし、リバヌトしおデプロむの方が䞀瞬でもレビュヌが挟たっお安党に埩旧できるずいう考え方もできたす。たた削陀・曎新されたオブゞェクトの数が倚すぎれば、バヌゞョニングから1぀ず぀戻すこずが珟実的ではないこずもあり埗たす。 S3 サヌバヌアクセスログ S3 ぞのアクセスがおこなわれた際に S3 バケットから発行されるアクセスログの保存堎所です。このアクセスログは実際のアクセスから数時間遅れお発行される特城があるため、 CloudTrail のようなリアルタむム性はかなり䜎いです。ですが、 CloudTrail デヌタむベントを有効化しないず取れないものがより料金が安く取れたり、CloudTrail ログには含たれない情報が含たれおいたりするため、有効化しおおいた方が監査性が䞊がりたす。 比范衚は以䞋のリンクをご確認ください。 docs.aws.amazon.com CloudTrail ログなどの監査ログ CloudTrail などむンシデント時に誰がどこからアクセスしたか远跡する甚途で䜿われるような監査ログを保存する堎合です。改竄防止が非垞に倧事になりたす。 アプリケヌションログのアヌカむブ すでに匊瀟のいく぀かのテックブログで曞いおる通り、 普段は Datadog を利甚しおいたすが、ログの長期間保存は非垞にコストがかかるため S3 にアプリケヌションログのアヌカむブを取っお Datadog 偎の保持期間は短くしおありたす。 平時に参照するこずはほずんどありたせんが、過去の事象に関する調査をしたい堎合に掻甚されるので、数幎保存するこずを想定しおいるものになりたす。 アプリケヌションログの他、 ALB や CloudFront などのアクセスログもここに含むこずにしおいたす。 アプリケヌションで利甚する蚭定ファむル アプリケヌションが蚭定ファむルずしお読み蟌むファむルの保存先です。たずえば ECS で参照する環境倉数が列挙されたオブゞェクト や Fluent Bit の蚭定ファむル などが䞻な内容です。 アプリケヌションで参照する䞀時ファむル たずえば、䞀床 DB レコヌドから集蚈したデヌタを䞀時的にオブゞェクトずしお S3 バケットにおき、別のバッチで参照するようなケヌスで䜿われる䞀時ファむルです。バッチが実行終了したら䜿わなくなるようなファむルが䞻で、利甚埌盎ちに削陀するこずが期埅されるようなオブゞェクトを保管するバケットです。 芁配慮個人情報や特定個人情報 法的に個人情報保護の䞭でも芁件が匷いものを保管するバケットです。S3 バケットのバケットポリシヌでアクセスコントロヌルをおこなうこずが倧半ですが、このバケットに぀いおは特にコンプラむアンス遵守のために KMS による暗号化ずキヌポリシヌによるアクセスコントロヌルを远加でおこなうようにするこずを怜蚎した方が良いです。 分類埌のバケット蚭定のサマリヌ 分類埌、それぞれに必芁ず考えられる蚭定をそれぞれ曞き出したした。以䞋の衚が簡単なサマリヌです。本圓はここに曞いおる項目以倖にもありたすが、党郚曞くには倚すぎるので䞀郚だけ掲茉しおいたす。これが唯䞀の解ではありたせんし、S3 バケットに察しお蚭定できるこずはここに曞いおいるこずだけではないですが、こういったこずをたずめるこずで「どのバケットに䜕の蚭定がされおいる必芁があるのか」ずいう暙準化に近づけるこずができたす。 バケットの分類 暗号化手法 芁オブゞェクトロック 芁バヌゞョニング 芁レプリケヌション ナヌザヌのプロフィヌル画像など S3-managed 䞍芁 必芁 必芁 コヌポレヌトサむトのクリ゚むティブなど S3-managed 䞍芁 䞍芁 䞍芁 S3 サヌバヌアクセスログ S3-managed レプリケヌション先で必芁 *1 必芁 必芁 CloudTrail ログなど監査ログ S3-managed 必芁 必芁 䞍芁 アプリケヌションログのアヌカむブ S3-managed 䞍芁 䞍芁 䞍芁 アプリケヌションで利甚する蚭定ファむル S3-managed 䞍芁 必芁 必芁 アプリケヌションで参照する䞀時ファむル S3-managed 䞍芁 䞍芁 䞍芁 芁配慮個人情報や特定個人情報 KMS 䞍芁 䞍芁 䞍芁 この蚭定䟋を元に S3 バケットのサンプルコヌドも䜜成したした。このコヌドには S3 サヌバヌアクセスログのバケットの指定方法なども含めお、課題ずしお挙げおいたログの欠劂を解消し、ログを取るこずが圓たり前ずされるような構成を目指したした。たた、パブリックアクセスブロックも CloudFront を前段に挟めばバケットそのものを公開する必芁はないこずから基本的には党バケットでプラむベヌト化を掚奚 *2 し、できれば AWS アカりント単䜍でパブリックアクセスブロックを有効化しおおくこずずしたした。このずき、チヌムメンバヌから module 化するこずで、こういった蚭定そのものをカプセル化した方が良いのではないかずいう提案がありたしたが、䜜成した圓時この分類で本圓に問題ないのかがわからなかったため、 module 化は時期尚早ず刀断し、暙準化の第䞀段階ずしおはサンプルコヌドを曞くに留めたした。 ガヌドレヌルの蚭蚈ず実装 「 セキュリティベストプラクティスの確認 」の節にも蚘茉した通り、 AWS Security Hub CSPM の基本的なセキュリティのベストプラクティス暙準 が有効であれば自動的にコンプラむアンスチェックがされるものも含たれおいるため、含んでいないもののうち、バケットの分類䞊必芁なチェック項目を掗い出したした。これらは AWS Config の マネヌゞドルヌル が存圚しおいたす。 AWS Config は AWS リ゜ヌスの構成を継続的に監芖・評䟡するサヌビスで、 SecurityHub ずも統合が可胜なものずなっおいたす。先に掗い出した項目ず察応関係は以䞋のようになりたす。 意味 ルヌル名 S3 バヌゞョニングが有効か s3-bucket-versioning-enabled S3 オブゞェクトロックがかかっおいるか s3-bucket-default-lock-enabled サヌバヌサむド暗号化が有効か s3-bucket-server-side-encryption-enabled KMS で暗号化されおいるか s3-default-encryption-kms レプリケヌションが有効か s3-bucket-replication-enabled AWS Config では特定のタグが぀いおいるリ゜ヌスに察しお、特定のルヌルをチェックする機構がありたす。これらのルヌルをひずたずめにした適合パックを各 AWS アカりントに反映しお、リ゜ヌスには適切にタグを぀けるこずで暙準に沿った構成かチェックできるようにしたした。タグの蚭定䟋は以䞋のようにしたした。 tags = { "BucketType" = "user-uploads" "ConfigRule-s3-bucket-replication-enabled" = "enabled" "ConfigRule-s3-bucket-server-side-encryption-enabled" = "enabled" "ConfigRule-s3-bucket-versioning-enabled" = "enabled" } これで ConfigRule-s3-bucket-replication-enabled が぀いおいるリ゜ヌスでは s3-bucket-replication-enabled がチェックされるようになりたす。実際にはタグのたずたりを module 化しおおり、コヌド䞊の指定ずしおは以䞋のように曞くだけで䞭のタグが展開されお、リ゜ヌスの構成チェックが走る仕組みです。 tags = module.aws_config_s3.tag_map_for_user_uploads module の修正をおこなうこずで䞭倮集暩的にチェック項目を管理でき、か぀仮にルヌルの䞀郚を緩めたい堎合は以䞋のように曞くこずで柔軟性も持たせたした。 tags = merge ( module.aws_config_s3.tag_map_for_user_uploads, { "ConfigRule-s3-bucket-replication-enabled" = "disabled" } ) 運甚開始埌に芋えおきた良かったこずずギャップ たず、この暙準化の良かったずころは、その時点でできる S3 の蚭定に぀いお網矅的に知れたこずずそれをちゃんず芁件に組み蟌むサンプルたで出せたこずです。バヌゞョニングができるこずは以前から知っおいたものの、バヌゞョニングによるパフォヌマンス問題や過去バヌゞョン分だけコストが䞊がるなどの制玄は暙準化前の調査をしおはじめお知ったこずでした。チヌムメンバヌも知らない制玄だったりしたので、それをわかった䞊でどういう芁件で圹に立぀のかなどたずめられたこずは良かったです。 たた、バケット䜜成時点でどういう蚭定を入れればいいか迷っおいた時間もこの分類ずサンプルコヌドのおかげで枛りたした。ここは今になっお思えば蚭蚈から実装時間の蚈枬をしおおけば、どのくらい削枛できたか少しはわかったかもしれないなず思っおいたすが、䞀から S3 バケットで䜕ができるか調べるよりは分類から入れるべき蚭定をサクッず出せるのは個人的な䜓隓ずしおも良かったです。 䞀方でギャップもやはりありたした。 この暙準化の目的は芁件ごずに S3 バケットの適切な蚭定を決めおおくこずでスムヌズにコンプラむアンスを遵守した S3 バケットを䜜成・曎新できるようにするこずでしたが、ここから発展させおあたり S3 に詳しくない人であっおも、この分類に沿っお自分たちの芁件にあった S3 バケットを䜜れるようになるこずを目暙においおいたした。そこで第䞀段階ずしおは私が暙準化したバケット蚭定を䜿っお新芏バケットを䜜り、期埅倀通りのチェックもおこなわれるかを確認し、第二段階ずしお開発者からの䟝頌のあったバケットを詊しに䜜っおもらえないか盞談しお実践しおみたした。 第䞀段階は私が䜜った本人でもあるこずから期埅通りになるこずはすんなり確認できたしたが、第二段階ではやはり S3 に関する知識が十分にない状態ではいくらサンプルコヌドがあっおも曞くのは難しいず改めおわかりたした。この件は普段 Terraform を䜿わないような方にお願いをしたので、元の知識にギャップがある状態でお願いするのがそもそも無茶な話だったずは思いたす。ただ、それ以降 Terraform に詳しいチヌムメンバヌにもいく぀かのバケットを䜜っおもらう機䌚がありたした。その際、私のコヌドレビュヌ時点で抜け挏れや分類の認識違いが芋぀かったので、 module 化をすれば蚭定の抜け挏れはなくなるかもしれないですが、適切にバケットの皮類を遞べるかにはただハヌドルがあるず感じたした。 ギャップの䞭には私の予想を倖れた良いギャップもありたした。それはバケットの分類が最初に決めた去幎の7月ごろから今の時点たで8぀の分類を修正する必芁がなかったこずです。私自身はこの分類にはじめから自信があったわけではないですし、分類が倉わらなくおも䞭の蚭定の修正が必芁な可胜性を考慮したために module 化を芋送っおいたのですが、実際には S3 に関する各皮アップデヌトを含めおも今倉曎を加えないずいけない理由がないのが実情です。こんなに倉わらないなら module 化しおおけばよかったなず思うほどでした。 今埌の展開 今幎11月20日から21日で開催された アヌキテクチャConference2025 にお、匊瀟橋本による発衚『AI x Platform Engineeringでスケヌラブルな組織を䜜るには』でも公開された内容に関連しお、この斜策は珟圚 Design Addendum蚭蚈刀断を文曞化したドキュメント、補遺 ずし、この内容を元に AI が自走できるように怜蚎を進めおいるずころです。 すでに Design Addendum ずしお S3 の分類やその思想を曞き出したずころなので、これを AI が読み自分で実装できるかを詊そうずしおいたす。実装できるず思っおいたすが、目暙の第二段階にあった「あたり S3 に詳しくない人であっおも、この分類に沿っお自分たちの芁件にあった S3 バケットを䜜れるようになる」に足る状態になるかはしっかり怜蚌したいず思っおいたす。 たずめ 以䞊が S3 バケットの構成暙準化のためにバケットの分類をおこない、ガヌドレヌルを䜜成したアプロヌチです。実際の成果ずしお蚭蚈時間の削枛や、8぀のバケットの分類でほが実際の芁件をカバヌできるこずが埗られたした。 このドキュメントを参考にされる堎合は、たずは既存に存圚するバケットをざっくり分類しおみるこずが良いず思っおいたす。䞭に含たれるオブゞェクトの皮類が無茶苊茶になっおいるバケットがある堎合も予想できたすが、たずえば AWS の ALB ログなどは出力圢匏が決たっおいたりするので、そういうわかりやすいものから分類しおいくず結果が収束しおいくように思いたす。たた「うちではこうやっお暙準化進めおるんだよヌ」みたいな話が聞けるずうれしいです。 この斜策を実斜した時点では今ほど AI 掻甚が進んでおらず、1幎足らずでこんなに䜿えるツヌルずなるずは思っおいたせんでした。内心本圓に module 化しか手段はないのかず思いながら分類たでは䜜っおいたので、AI に流甚できそうな発展性が生たれおきお個人的に良い流れだなず思っおいたす。知識が少ない人でも越境しやすい玠地がここから生たれるように、これからもやっおいきです We are hiring! この蚘事にあるような「こんな時どうしたらいいんだろう」ず思う、舗装されおない箇所はただただありたす。䞀緒にみんなが安心しお走れる Paved road 䜜りやっおいきたい方、ご興味があればぜひお話ししたしょう プロダクト採甚サむトTOP カゞュアル面談申蟌はこちら *1 : S3 サヌバヌアクセスログはアクセスログが栌玍されるバケットを盎接オブゞェクトロックをかけるずログが送られないこずが怜蚌でわかりたした。このため、S3 サヌバヌアクセスログを監査目的で保存したい堎合、手間ですがオブゞェクトロックがかかった別のバケットを甚意しおレプリケヌション先が改竄されないようにする方法がありたす。ログが栌玍される最初のバケットこそロックをかけたいですが、珟状の仕様ではできたせん。 *2 : 静的りェブサむトホスティング を利甚するケヌスでは S3 バケットがパブリックである必芁がありたす。こういうケヌスではパブリックアクセスブロックができないこずに泚意が必芁です。たた、AWS アカりント単䜍でパブリックアクセスブロックを有効にするず S3 バケット個別のパブリックアクセスに関する蚭定が無芖される仕様があるので、静的りェブサむトホスティングを利甚する S3 バケットがあるアカりントではアカりント単䜍のパブリックアクセスブロックができないこずにも泚意が必芁です。
こんにちは、タむミヌでバック゚ンド゚ンゞニアをしおいる倧竹です。 この蚘事は Timee Product Advent Calendar 2025 の5日目の蚘事です。 最近、AIを掻甚したコヌディングが圓たり前になっおきたしたが、皆さんはチヌム開発でどのようにAIを䜿っおいたすか今回は、AI + 人間2人ずいう構成でモブプログラミングモブプロに挑戊しおみたした。 普段は同じチヌムのメンバヌず2人でペアプログラミングペアプロを行っおいたすが、そこにAIずいう3人目のメンバヌを加えるこずで、擬䌌的なモブプロ䜓制で開発を進めたした。実際にプロダクトコヌドを觊りながら実隓を行う䞭で芋えおきた、AIを単なるコヌド生成ツヌルではなくチヌムメンバヌずしお扱うための工倫ず、その結果を共有したす。 この蚘事が、ペアプロ・モブプロにおけるAI掻甚方法に迷っおいる方の参考になれば幞いです。 今回のルヌルAIはドラむバヌにしない 今回の実隓でポむントずなったのは、AIの圹割定矩です。 AIにコヌドを曞かせるドラむバヌにするず、人間が単なるレビュワヌになっおしたい、モブプロ特有の知識共有などの目的が薄れる懞念がありたした。 そこで、今回は以䞋の圹割分担を行いたした。 人間A 圹割メむンナビゲヌタヌ やるこず党䜓の進行、問題定矩 人間B 圹割ドラむバヌ やるこず実際にコヌドを曞く、AIぞの指瀺出し AI 圹割AIナビゲヌタヌ やるこず提案、芳点远加、蚭蚈の方向性提瀺 AIを「手を動かす人」ではなく、あえお「困ったらアドバむスをくれる゚ンゞニア」ずいう立ち䜍眮に眮きたした。 この圹割をAIに培底させ、チヌムの䞀員ずしお機胜させるために、モブプロ開始時に以䞋のプロンプトを䜿甚したした。 AIをメンバヌずしお迎えるための初期プロンプト 実際にCursorAIに入力したプロンプトがこちらです。圹割を明確に定矩するこずで、AIナビゲヌタヌずしお期埅通りに振る舞っおもらえるようにしたした。 あなたには、゜フトりェア開発の「モブプロ」に3人目のメンバヌずしお参加しおもらいたす。 【あなたの圹割AI Navigator】 - 今回のモブプロでは、あなたは「提案ず芳点远加を担圓するメンバヌ」ずしお振る舞っおください。 - コヌドを盎接曞く“ドラむバヌ”ではなく、考え方や蚭蚈の方向性を提瀺する“ナビゲヌタヌ”です。 - 過剰に長い提案は避け、耇数の遞択肢を短く提瀺しおください。 - 人間メンバヌの意図が曖昧な時は「確認質問」を返しお構いたせん。 - 最埌に、今回の倉曎内容の芁玄ドキュメントも䜜成しおもらいたす。 【あなたに求める振る舞い】 1. 小さめのタスクに察しお、リファクタ・呜名改善・蚭蚈改善の芳点を提瀺する 2. 提案は耇数案2〜3個を短く提瀺する 3. 必芁に応じお“なぜそうするのか”の理由も簡朔に説明する 4. 人間メンバヌの䌚話を聞きながら、関連する芳点を補足する 5. 最埌に、倉曎点の芁玄・圱響範囲・目的・レビュヌ向け文章を敎える たずは「準備完了です。察象のコヌドを提瀺しおください。」ず返答しおください。 実隓しおみた結果、良かった点 今回のタスクは、APIのレスポンスにプロパティを远加するずいうものでした。 AI + 人間2人でどのように議論したか、ハむラむトを玹介したす。 (コヌドに関わる郚分はfooなどに眮き換えおいたす。) ロゞックの配眮堎所で迷った堎面 特定のロゞックをどのクラスに配眮するかで人間2人が迷った際、AIに盞談したずころ、パフォヌマンスN+1問題などの芳点を考慮した方針を耇数提瀺しおくれたした。 AIの提案抜粋 ## 芳点1: デヌタ取埗の責務分離Controller vs Serializer ### 珟状の課題 - A案Controller: コントロヌラヌで#{モデルAのリレヌション}を取埗・絞り蟌み - B案Serializer: Serializerで#{モデルB}ごずに#{モデルAのリレヌション}を取埗 ### 刀断基準 - パフォヌマンス: Controllerで䞀括取埗・preloadすればN+1を回避しやすい - 責務: 「どのデヌタが必芁か」はController、「どう衚瀺するか」はSerializer - 再利甚性: Serializerが独立しおいるずテストしやすい ### 掚奚 **Controllerで䞀括取埗** → Serializerで刀定ロゞック - #{Controller名}のfooメ゜ッドず敎合 この提案をきっかけに議論が深たり、より良い意思決定ができたした。AIが耇数の遞択肢ずその理由を提瀺しおくれるこずで、人間同士の合意圢成もスムヌズです。さらに、決定した方針に合わせおサンプルコヌドを出力しおくれる点も倧きく、実装むメヌゞの認識を揃えたたた議論を進められたした。 課題に思った点 議論においおは良かった点が目立぀䞭、いく぀か課題も芋぀かりたした。 課題1ドラむバヌを亀代しにくい Cursorのチャット履歎がPCに玐づくため、オンラむンで実斜した堎合、ドラむバヌを亀代する= コヌドを曞くPCが倉わるず新しくチャットを䜜成するしかなく、それたでのやり取りが匕き継げないこずは課題に感じたした。 今回はドラむバヌを亀代せず、短時間のモブプロを耇数回実斜するこずで、ドラむバヌの負荷を軜枛し぀぀、1぀のチャットを䜿い続けるこずにしたした。 チャットの内容を゚クスポヌトしお別PCのチャットに読み蟌たせれば亀代は可胜ですが、手間がかかりたす。よりスムヌズに亀代できる方法が必芁だず感じたした。 課題2埅ち時間が発生する AIに盞談するずき、プロンプトを考えお入力し、回答を埅぀必芁がありたす。この埅ち時間で議論の流れが止たっおしたうので、テンポを厩す芁因になっおいたした。 人間だけでモブプロをしおいるず発生しない、今回の実隓特有の問題だず思いたした。 こんなナヌスケヌスに向いおいそう 今回の実隓を通しお、特に以䞋の堎面でAIずのモブプロが効果を発揮するず感じたした。 実装方針の遞択肢を出しお欲しいずき リファクタリングや呜名の盞談をしたいずき ドメむン知識は人間、䞀般論はAIず圹割分担できるずき 䞀方、実装内容が最初から明確な堎合は、AIを挟む埅ち時間が発生するため、効果は限定的かもしれたせん。 おたけAIにモブプロを振り返っおもらった結果 モブプロの最埌に、AIに自身の振る舞いを振り返っおもらいたした。 AIの回答抜粋 ## 良かった点 1. 耇数案の提瀺: リファクタリングや呜名で2〜3案を短く提瀺できた 2. 実装察応: ゚ラヌ修正やテスト远加を迅速に察応 ## 匱点 1. 圹割の䞀貫性: 「AI Navigator提案のみ」ず「実装も行う」の間で䞀貫性がなかった 2. 䞀貫性チェックの遅れ: テストファむルの呜名や構造の䞍統䞀を埌から指摘した ## 今埌改善できそうな振る舞い 1. 圹割の明確化: 各フェヌズで「提案のみ」か「実装も行う」かを最初に確認 2. 䞀貫性チェックの早期化: 実装時に呜名や構造の䞀貫性を同時に確認 党䜓的には、提案ず実装の䞡面で支揎できたした。圹割の境界ず䞀貫性チェックのタむミングを改善するず、さらに効果的になりたす。 提瀺された匱点ず今埌改善できそうな振る舞いを元にプロンプトを改善するず、より優秀なAIナビゲヌタヌになっおくれそうです。 たずめ AI + 人間2人のモブプロは、蚭蚈の質ず玍埗感を高める䞊では良い手法でした。 今回の実隓から埗られたポむント ルヌルAIは「ドラむバヌ」ではなく「ナビゲヌタヌ」にする コツ最初に「あなたは3人目のメンバヌです」ず圹割を䞎え、蚭蚈刀断の壁打ち盞手にする 今埌もプロンプトや実斜方法をブラッシュアップしながら、AIずモブプロするより良いやり方を暡玢しおみようず思いたす。 皆さんもぜひ、AIを「ツヌル」ずしおだけでなく「同僚」ずしおモブプロに招き入れおみおください AIを掻甚しおワむワむ開発がしたいず思う方、ご興味があればぜひお話ししたしょう プロダクト採甚サむトTOP カゞュアル面談申蟌はこちら
こんにちは、DevPFチヌムの菅原です。 この蚘事では、私たちが AWS IAM Identity Center以䞋、IICを導入した際の技術的な構成遞択に぀いお、事䟋をご玹介したす。なお、この蚘事は  Timee Advent Calendar 2025  シリヌズ1の4日目の蚘事です。 私たちが採甚したのは、認蚌ず認可の管理を分離する構成です。具䜓的には、党瀟的な IdPID プロバむダヌである Okta で「認蚌」を担い、AWS の暩限割り圓お蚱可セットに関わる「認可」管理は IIC 偎で Terraform を䜿っお行う、ずいうハむブリッドなパタヌンです。 なぜこの構成を遞んだのか、その背景ず技術的なポむントを共有したす。 私たちの前提環境 タむミヌでは AWS Well-Architected フレヌムワヌクを参考にアカりントの分離を進めおおり、2025 幎珟圚では 20 を超える AWS アカりントを保有しおいたす。 各アカりントぞは、Google Workspace を甚いた Federated SSO参考: How to set up federated single sign-on to AWS using Google Workspace を経由しお螏み台甚の AWS アカりントにログむンし、そこからスむッチロヌルする運甚を行っおいたした。 Google Workspace を甚いた Federated SSO この構成では、開発者ごずに螏み台アカりントぞの SSO 甹 IAM Role を制埡し、その Role からスむッチロヌルできる先を絞るこずで、最小暩限を実珟しおいたした。 しかし、Google Workspace のナヌザヌプロパティの蚭定はコヌポレヌト IT の管蜄であるため、AWS アカりントの管理郚眲である DevPF からは倉曎できたせん。 そのため、AWS 管理者である DevPF の承認を必ず経由させるような暩限付䞎フロヌの培底が難しいこずや、ロヌル再蚭蚈の際のコミュニケヌションコストがネックずなっおいたした。 たた、利甚者にはブラりザで Switch Role 操䜜を補助する Chrome Extension や、SSO 甚の OSS を瀟内の公匏手順ずしお提䟛しおいたした。しかし、以前から SSO 甹 OSS が Dev Container 内で期埅どおりに動䜜しない問題があり、オンボヌディングがスムヌズに進たず、改善の芁望が䞊がっおいたした。 こうした前提があり、開発者䜓隓ずセキュリティ向䞊の䞡立を目的に IIC 導入に螏み切りたした。 導入蚈画圓時抱えおいた課題 IIC ず Okta を連携させる、おそらく最も暙準的な方法は、Okta 偎のナヌザヌず組織情報等に基づいたグルヌプを管理し、SCIM 連携で IIC に同期させ、同期されたグルヌプに蚱可セットを割り圓おるような構成です。 IICでIdP連携する際の構成䟋 しかし、私たちの環境ではこの暙準的な構成がフィットしたせんでした。理由は倧きく 3 ぀ありたす。 IdPOktaの過枡期 党瀟的な ID 管理を Okta に統合する戊略がありたしたが、圓時はただ敎備の途䞭段階でした。そのため、AWS の暩限管理の基準ずしお利甚できるほどの「高粟床な所属組織情報」が Okta 偎にはただ揃っおいたせんでした。 「仮想組織」の存圚 タむミヌの開発組織は、人事䞊の組織図ずは異なる「仮想組織」で掻動しおいたす。埓来よりも適切な暩限割り圓おを実珟するには、仮想組織単䜍での暩限付䞎が必芁です。 しかし、「仮想組織」は開発組織内だけの抂念であり、か぀流動的であるため、Okta で䞀元管理するこずが困難でした。 管理䞻䜓の違いによるスピヌド感の懞念 Okta の管理䞻䜓はコヌポレヌト IT 郚門です。 もし Okta のグルヌプを䜿っお AWS 暩限を管理する堎合、日々の现かい暩限倉曎のたびに他郚眲ぞの申請・調敎コストが発生し、開発基盀ずしお求められるスピヌド感が損なわれる懞念がありたした。 遞択した構成認蚌ず認可の分離 これらの前提ず課題から、私たちは IdP を゜ヌスずしたグルヌプを利甚せず、蚱可セットを割り圓おるグルヌプは別情報゜ヌスを基にしお管理する構成を遞択したした。 遞択した構成 認蚌IdP → Okta が管理 Okta を IIC の倖郚 IdP ずしお接続したす。 SCIM 連携は有効にしたすが、同期されるグルヌプ情報は利甚したせん。 入瀟・退職・異動に䌎うナヌザヌのラむフサむクル管理Oktaアカりントの有効化・無効化は、Okta 偎で自動化コヌポレヌト IT 偎の運甚にオフロヌドできたす。 認可グルヌプ管理 → DevPF が Terraform で管理 IIC 偎で盎接グルヌプIdentityStore groupを䜜成したす。「どのナヌザヌがどのグルヌプに所属するか」ずいうメンバヌシップ情報も合わせお、DevPF が Terraform でコヌド管理したす。 その際の元情報ずしお、開発組織内で管理しおいる実組織・仮想組織の Google Workspace グルヌプを参照したす。 この Google Workspace のグルヌプを Terraform Provider から参照し、所属情報に基づいお IIC グルヌプを䜜成し、蚱可セットを玐付けおいたす。 この構成により、新たな党瀟的 ID 管理基盀である Okta を掻甚し぀぀、開発組織の実態仮想組織に合わせた柔軟な認可管理を、AWS 管理者である DevPF が䞻䜓ずなっお迅速に行えるようになりたした。 たずめ AWS IAM Identity Center の導入においお、必ずしも IdP 偎で「ナヌザヌ」ず「グルヌプ」のすべおを完結させる必芁はありたせん。組織の成熟床や、既存の認蚌・認可の仕組み、開発チヌムの働き方によっおは、 IdPの責務を段階的に分担しおいく方が、珟実的か぀運甚しやすいケヌスもありたす。 私たちの事䟋のように、IIC 偎でグルヌプを Terraform などで別途管理するパタヌンは、IdP 偎の情報敎備が途䞊であったり、開発組織特有の柔軟な暩限管理が求められたりする堎合に、有効な遞択肢ずなりたす。特に「開発チヌムごずに现かくロヌルを分けたいが、IdP のグルヌプ蚭蚈にすぐには反映しづらい」 ずいった状況では、IAC によるコヌドベヌスな管理が、スピヌドず可芖性の䞡面で倧きなメリットをもたらしたす。 䞀方で、IdP ず IIC の䞡方でグルヌプを扱う構成は、暩限の責務境界が曖昧になるず運甚負荷やヒュヌマン゚ラヌの枩床にもなり埗たす。そのため、「どの粒床のグルヌプを IdP 偎の暙準ずしお扱い、どこから先を IICTerraform 偎で柔軟に管理するのか」 をあらかじめチヌム内で合意し、呜名芏則や運甚フロヌをドキュメント化しおおくこずが重芁です。 今回は最終的には、IdP による䞀元管理を目指し぀぀も、珟時点の制玄や開発スピヌドずのバランスを取りながら、珟実解ずしお IIC 偎グルヌプ管理を組み合わせるずいうアプロヌチを遞択したした。本蚘事で玹介した考え方や蚭蚈パタヌンが、同様に IAM Identity Center の導入・移行で悩たれおいる方の刀断材料や議論のたたき台になれば幞いです。 みんなでワむワむ発信掻動をやっおく環境いいな〜ず思う方、ご興味があればぜひお話ししたしょう プロダクト採甚サむトTOP カゞュアル面談申蟌はこちら
はじめに タむミヌで SRE 業務を担圓しおいる埳富 @yannKazu1 です。 日々、数千䞇件のデヌタず向き合う䞭で、 Aurora MySQL の運甚をより良くするための改善を積み重ねおいたす。 本蚘事では、その䞭で経隓しおきた “机䞊ではわからないリアルな気づきや孊び” を、できるだけ具䜓的にたずめたした。 これから Aurora を本気で運甚したい方や、同じような課題に悩んでいる方のヒントになれば嬉しいです。 (この蚘事は Timee Product Advent Calendar 2025の3日目の蚘事です。) 1. オンラむンDDLでも「れロロック」ではない ─ ALTER TABLE 実行時の萜ずし穎 「MySQL のオンラむンDDLなら、日䞭でもサッず ALTER できるよね」 ──そんなふうに思っおしたうこず、ありたすよね。 たしかにオンラむンDDLはずおも䟿利で、デヌタをバックグラりンドで再構築しおくれるおかげで、テヌブル党䜓を長時間ロックするような事態は起こりにくくなりたした。 そのため䞀芋するず “止めずに ALTER できおいる” ように芋えたす。 でも実際には、オンラむンDDLでも メタデヌタロック の圱響は避けられたせん。 メタデヌタロックはテヌブル定矩の敎合性を守るためのロックで、 テヌブル定矩を「読む」「倉える」あらゆる操䜜で取埗されたす。 たずえば  SELECT / INSERT / UPDATE / DELETE → 共有メタデヌタロックを取っお実行される ALTER TABLE などの DDL → 定矩を曞き換えるため、より匷いメタデヌタロックアップグレヌド可胜 / 排他を芁求する この組み合わせが、ちょっずした“詰たり”の原因になりたす。 すでに DML が共有メタデヌタロックを持っおいるず → ALTER TABLE が埅たされる 逆に ALTER TABLE が排他メタデヌタロックを握るず → 埌続の SELECT / UPDATE が共有メタデヌタロックを取れずに埅぀ 「オンラむンDDLだから倧䞈倫」ず思っおいおも、実は “メタデヌタロック埅ち” が発生しおク゚リが枋滞するこずは普通に起こる のです。 Aurora レプリカでは「埅ち」ではなく ゚ラヌ になるこずがある さらに Aurora MySQL を䜿っおいる堎合、 リヌドレプリカ䞊の SELECT ク゚リが、DDL 実行タむミングで゚ラヌになる ずいう挙動にも泚意が必芁です。 Vanilla MySQLRDS MySQL を含むだず、マスタヌで ALTER TABLE を実行したずき、 レプリカ偎では SQL スレッドが metadata lock を取りに行き すでにそのテヌブルを䜿っおいるク゚リがあるず → それらが終わるたで Slave_SQL_Running_State: Waiting for table metadata lock の状態で埅ち続ける ずいう圢で「 レプリカ偎にメタデヌタロック埅ちが溜たる 」挙動になりたす。 mita2 database life 䞀方で Aurora レプリカは挙動がかなり違いたす。 Aurora の堎合、プラむマリずレプリカは同じクラスタヌボリュヌムを芋おおり、DDL もほが即時にレプリカぞ反映される その代わり、 ALTER を打った瞬間 ALTER 完了盎埌 に、そのテヌブルを読んでいたレプリカ䞊の SELECT がたずめお゚ラヌになりたす  Lost connection to MySQL server during query で萜ちる挙動が確認されおいたす。 mita2 database life ぀たり Aurora では、 「レプリカで metadata lock 埅ちがズラッず䞊ぶ」こずは起きにくい その代わり、 たたたたそのタむミングで流れおいた SELECT が「単発で」゚ラヌになる ずいうトレヌドオフになっおいたす。 mita2 database life 運甚で気を぀けたいポむント オンラむンDDLでもメタデヌタロック が関わる以䞊、“れロロック” にはならない 通垞の DML でも共有メタデヌタロックが付くので、 → ALTER TABLE ず取り合いになっお詰たる可胜性がある ロングトランザクションが残っおいるず、 → ALTER TABLE がずっず Waiting for table metadata lock のたた動かない Aurora の堎合は、 Writer 偎では Vanilla MySQL ず同様にメタデヌタロック埅ちが発生しうる䞀方で Reader 偎ではメタデヌタロック埅ちは溜たらないが、「ALTER の開始終了タむミングで SELECT が゚ラヌになる」 ずいう特有の挙動がある 特にアクセスの倚いテヌブルほど、 倜間に実行する 事前にロングトランザクションを掃陀する レプリカを䜿った重い SELECT のスケゞュヌルを調敎する ずいった “ひず手間” が効いおきたす。 オンラむンDDLは䟿利な䞀方で、 「メタデヌタロックの存圚だけは忘れない」 「Aurora レプリカでは SELECT 偎の単発゚ラヌずしお衚に出おくるこずがある」 ずいう二぀を頭の片隅に眮いおおくず、だいぶ安心しお運甚できるはずです。 参考にさせおいただいた蚘事 オンラむンDDLずメタデヌタロック の関係や、Aurora レプリカの挙動を敎理するうえで、こちらの蚘事を参考にさせおいただきたした オンラむンDDLず メタデヌタロックの敎理にあたっお https://blog.s-style.co.jp/2024/12/13360/ Aurora レプリカでの metadata lock ず DDL の挙動怜蚌 https://mita2db.hateblo.jp/entry/2020/07/20/153139 2. Migration 時に発生したメタデヌタロックによるデッドロック ある日、マむグレヌションの最䞭に デッドロック が発生したした。 通垞であれば Aurora の cluster パラメヌタヌで innodb_print_all_deadlocks を1に蚭定しおいるので Aurora がデッドロック怜知し、 CloudWatch → Firehose → Datadog Logs** の経路でロックモニタヌ情報ず共に通知が飛んできたす。 ずころがその日は、 Datadog に䜕も䞊がっおこない 状況でした。 「あれ、Firehose 止たっおる それずもロックモニタヌが出おない」 CloudWatch の生ログをたどっおもロックモニタヌ自䜓が出力されおおらず、 そもそも Aurora 偎でロックモニタヌが発火しおいない 状態でした。 ログが出おいない理由 原因はシンプルで、圓時発生しおいたのが InnoDB のロックではなくメタデヌタロックによるデッドロック だったためです。 ロックモニタヌが怜知しおいるのは InnoDB ストレヌゞ゚ンゞン局の情報であり、 サヌバヌコア偎で管理される メタデヌタロック はモニタヌの察象倖 です。 ぀たり、 今回の競合は InnoDB のロックではなくサヌバヌ偎で管理される メタデヌタロックによるものだったため、InnoDB のロックモニタヌの察象倖で芳枬されなかった ずいうこずです。 䜕が起きおいたのか 実行しおいたのは䞍芁になった customers_orders テヌブルの削陀 DROP TABLE customers_orders 。 䞀方アプリケヌション偎では、 orders ず customers を参照する読み取りJOIN もしくは連続した SELECT  が走っおいたした。 customers_orders は orders ず customers に倖郚キヌを持぀ため、 DROP TABLE customers_orders は参照敎合性の確認で orders ず customers の排他メタデヌタロック を取りに行きたす。 同時にアプリ偎は orders ず customers の共有メタデヌタロック を取りに行くため、取埗順序の差で 盞互埅機メタデヌタロックによるデッドロック が成立したした。 再珟甚のサンプルコヌド CREATE TABLE customers ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR ( 50 ) ) ENGINE = InnoDB; INSERT INTO customers (name) VALUES ( ' Alice ' ); CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = InnoDB; INSERT INTO orders VALUES ( 1 ); -- 䞭間テヌブルorders × customers CREATE TABLE customers_orders ( order_id INT NOT NULL , customer_id INT NOT NULL , PRIMARY KEY (order_id, customer_id), -- 䞭間テヌブルらしく耇合䞻キヌ FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (customer_id) REFERENCES customers(id) ) ENGINE = InnoDB; -- 䟋: 関連を1件だけ䜜る INSERT INTO customers_orders (order_id, customer_id) VALUES ( 1 , 1 ); 次に、2぀のプロセスを甚意しお実行したす。 セッション1アプリケヌション偎 START TRANSACTION; SELECT * FROM orders; → orders に 共有メタデヌタロック読み取りロック を取埗。 セッション2マむグレヌション DROP TABLE customers_orders; → customers_orders に 排他メタデヌタロック を取埗し、倖郚キヌ参照を解決するために customers に排他メタデヌタロックを取埗成功、 orders に排他メタデヌタロックを取埗しようずしお埅機。 セッション1 SELECT * FROM customers; → customers に共有メタデヌタロックを取埗しようずするが、プロセス2がすでに排他メタデヌタロックを保持しおいるため埅機。 この時点で、 セッション1  orders の共有メタデヌタロックを保持し、 customers の共有メタデヌタロック取埗埅ち セッション2  customers の排他メタデヌタロックを保持し、 orders の排他メタデヌタロック取埗埅ち ずいう 盞互埅機状態デッドロック に陥りたす。 SHOW ENGINE INNODB STATUS を実行しおも、今回のデッドロックに関する蚘録は䞀切衚瀺されたせん。 これは InnoDB ロックではなくMySQL サヌバヌコアで管理される メタデヌタロックによるデッドロック だからです。 再発防止策 DROP TABLE 前に倖郚キヌ制玄を削陀しおおく ALTER TABLE customers_orders DROP FOREIGN KEY fk_customers_orders_order_id; ALTER TABLE customers_orders DROP FOREIGN KEY fk_customers_orders_customer_id; DROP TABLE customers_orders; 倖郚キヌを先に削陀するこずで、 DROP TABLE 実行時にロック察象ずなるテヌブル orders 、 customers を最小限に抑え、 排他メタデヌタロックの競合リスクを䞋げる こずができたす。 マむグレヌション実行時の同時アクセスを抑制する 特に本番環境では、参照先テヌブルこの堎合は orders ず customers に察する DML が走っおいないこずを確認しおから実行するこずが重芁です。 3. リヌドレプリカのク゚リが Writer 偎に圱響するこずがある Aurora MySQL を運甚しおいる際に、リヌドレプリカで実行した SELECT ク゚リにもかかわらず、Writer 偎の RollbackSegmentHistoryListLength が増加しおいるこずに気づきたした。AWS のサポヌトに問い合わせたずころ、次のような仕組みであるこずが刀明したした。 クラスタヌボリュヌム単䜍で共有される Undo履歎 Aurora MySQL では、クラスタヌボリュヌム構造においおストレヌゞおよび Undo ログ履歎が共有されおいたす。 そのため、 RollbackSegmentHistoryListLength に関しおも、 むンスタンス単䜍ではなく、クラスタヌボリュヌム単䜍で管理される 仕様です。 リヌダヌで長時間実行されおいるトランザクションたずえ SELECT であっおも 分離レベルがREPEATABLE READの堎合MVCC による過去バヌゞョン远跡が発生を実行するず、Undo 履歎が溜たり、共有ボリュヌムを通じお Writer 偎にも圱響が及ぶ状況が起こり埗たす。 ぀たり、 “リヌダヌだから安心しお重めのク゚リを流せる”ずは限らない 、ずいうこずになりたす。 RollbackSegmentHistoryListLength の意味ず圱響 このメトリクスは、AuroraMySQL における コミット枈みトランザクションの Undo ログ履歎リストの長さ を衚したす。 InnoDB の履歎リストは、 コミット枈みトランザクションの Undo ログを栌玍するグロヌバルリスト であり、䞍芁になった履歎叀い行バヌゞョンを削陀するために䜿甚されたす。 このリストが長くなるずいうこずは、叀い行バヌゞョンが倚数残っおいる状態を意味したす。 履歎リストの長さが倧きくなりすぎるず、叀い行バヌゞョンを倚く保持する必芁があるため、ク゚リの実行が遅くなる可胜性がありたす。たた、トランザクション完了埌に発生するバックログの䌝搬が重くなり、 AuroraReplicaLag が䞀時的に増加する堎合がありたす。このラグ増倧の圱響が倧きいず、 リヌドレプリカ偎で再起動が発生する可胜性もありたす 参考 。 Aurora 公匏ドキュメントでも、履歎リストの長さが過剰に増加するずパフォヌマンス䜎䞋の原因になるず説明されおいたす。  Amazon Aurora User Guide – InnoDB 履歎リストの長さ  兞型的に倀が増加する状況ずしおは 実行時間の長いトランザクション 読み取りたたは曞き蟌み → 長時間オヌプン状態のトランザクションが存圚するず、叀い Undo ログがパヌゞできずに履歎リストが蓄積したす。 曞き蟌み負荷が高い堎合 → 曎新や削陀が頻繁に行われるず Undo ログが倧量に生成され、パヌゞ凊理が远い぀かず履歎リストの長さが増加したす。 実際に起きおいたこず時系列 リヌドレプリカを参照しおいる Redash で実行された集蚈ク゚リが 数時間 実行されおいた 長時間実行䞭のトランザクションにより、叀い Undo ログをすぐにパヌゞできず、 RollbackSegmentHistoryListLength が䞊昇 RollbackSegmentHistoryListLength の䞊昇によっお、 ク゚リパフォヌマンスの䜎䞋が発生 トランザクションが完了した際のバックログの䌝搬の圱響で AuroraReplicaLag の䞀時的な増加が発生し、レプリカむンスタンスの再起動が発生 察応ず再発防止 Redash などリヌドレプリカ䞊で実行する長時間の集蚈ク゚リは、セッション単䜍で READ COMMITTED 以䞋の分離レベルを遞ぶこずで、過去バヌゞョンを長期間保持しおしたう問題を防ぎ、Undo の肥倧化を抑えるこずができたす。 分離レベルを䞋げるず、読み取り敎合性の保蚌が匱たるずいうデメリットがありたす。たずえば 同じク゚リを2回実行するず結果が倉わる可胜性がある Non-repeatable read  範囲怜玢のたびに新しい行が芋えおしたうこずがある Phantom read  コミット前の曞き蟌みを読んでしたう可胜性がある Dirty readただし READ UNCOMMITTED の堎合のみ  ただ、 集蚈系のワヌクロヌドではリアルタむムな厳密敎合性を求めないケヌスがほずんど のため、これらの揺らぎは実運甚䞊問題にならないこずが倚いです。 むしろ「レプリカでの長時間ク゚リが原因で Writer 偎のパフォヌマンスに圱響が出る」ほうが深刻で、その圱響を避けられるメリットのほうが倧きい堎面が倚いです。 4. InnoDB Buffer Pool チュヌニング Aurora MySQL のメモリ構成の䞭で最も倧きな割合を占めるのが InnoDB Buffer Pool です。 これは InnoDB ストレヌゞ゚ンゞンが、 テヌブルのデヌタペヌゞやむンデックスペヌゞをキャッシュするための䞭栞的なメモリ領域 です。 ク゚リ実行時、MySQL はたずバッファプヌル䞊に必芁なペヌゞが存圚するかを確認し、芋぀からない堎合のみディスクから読み蟌みたす。 したがっお、 どの皋床のデヌタをバッファプヌルに茉せられおいるか が、ディスク I/O の発生頻床やク゚リ性胜を倧きく巊右したす。 十分なバッファプヌルを確保しおおくこずで、ディスクアクセスを最小限に抑え、結果ずしお応答時間やスルヌプットを改善できたす。 Aurora では、バッファプヌルサむズはデフォルトではむンスタンスの物理メモリに応じお自動蚈算されたす。 基本的には innodb_buffer_pool_size = DBInstanceClassMemory × 3/4 の匏を基準に動的に蚭定され、むンスタンスをスケヌルアップするずバッファプヌルも比䟋しお拡匵されたす。 必芁に応じお、パラメヌタヌグルヌプで明瀺的に調敎するこずも可胜です。 このメモリ、本圓に䜿い切れおいるのか 運甚䞭の Aurora Writer を確認するず、 Buffer pool hit ratio は 99%以䞊を維持し、 Read IOPS や Read Latency も䜎氎準で安定しおいたした。 ぀たり、 ほずんどのク゚リがメモリ内で完結しおおり、ディスク I/O はほずんど発生しおいない 状態です。 䞀方で、 innodb_buffer_pool の䜿甚率は 100% に達しおいたせんでした。 これは単に「メモリを䜿い切れおいない」ずいうこずではなく、 実際にアクセスされるデヌタ量ワヌキングセットがバッファプヌル容量を䞋回っおいる こずを意味したす。 蚀い換えれば、 ワヌキングセットを十分に収容できるだけのバッファプヌルが確保されおいるため、ただメモリに䜙裕がある 状態です。 さらに FreeableMemory にも十分な䜙裕がある堎合は、 「実際のアクセスパタヌンを支えるために必芁なデヌタは十分にメモリに茉っおいる」 メモリ芳点ではむンスタンスサむズを䞋げられる可胜性がある ず刀断できたす。 ただし、メモリだけで刀断しない 泚意すべきは、 メモリ指暙だけを根拠にスケヌルダりンを刀断するのは危険 ずいう点です。 Aurora の性胜はメモリだけでなく、 CPU・I/O 垯域・接続数・トランザクション䞊列床 ずいった耇数のリ゜ヌスバランスで成り立っおいたす。 たずえば、メモリには䜙裕があっおも次のようなケヌスでは泚意が必芁です。 CPU 䜿甚率 CPUUtilization やロヌドアベレヌゞ LoadAverage が高い ピヌク時間垯に DBConnections が急増しおいる Aurora では、 max_connections が むンスタンスメモリ量から自動蚈算される ため、むンスタンスサむズを䞋げるず デフォルトの蚱容接続数も枛少 したす max_connections 自䜓は調敎できたすが、AWS ドキュメントにもあるずおり、バッファプヌルやク゚リキャッシュなど他のメモリ関連蚭定ず密接に関係するため、 デフォルトから倉曎するには十分な知識ず怜蚌が必芁 です https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html デフォルトの接続制限は、バッファプヌルやク゚リのキャッシュずいった倚くのメモリを消費する他の凊理のデフォルト倀を䜿甚するシステムに合わせお調敎されおいたす。クラスタヌのこれらの他の蚭定を倉曎する堎合は、DB むンスタンスで䜿甚可胜なメモリの増枛に応じお接続制限を調敎するこずを怜蚎しおください。 接続数がピヌクで䌞びる環境では、デフォルト倀のたたスケヌルダりンするず 予期せぬ接続枯枇が発生するリスク がありたす このように、むンスタンスサむズの倉曎は接続数だけでなく、 自動蚈算されるさたざたなパラメヌタヌ にも圱響したす。 そのため、 「バッファプヌルを䜿い切っおいないすぐに䞋げお良い」ではありたせん。 メモリ䜙剰だけでなく、CPU・I/O・接続数など 他のリ゜ヌス指暙も含めお総合的に評䟡し、ピヌク時の負荷に十分耐えられるこずを確認しおから スケヌルダりンを怜蚎するのが安党です。 5. 同時リク゚ストによるデッドロックの実䟋ず考察 アプリケヌションで同じ凊理がほが同時に呌ばれるず、デヌタベヌス内郚で ロックの取り合い が起き、デッドロックに぀ながるこずがありたす。ここでは2パタヌンを玹介したす。 タむミヌのようにナヌザヌ数が倚く、トラフィックが集䞭する環境では、通垞のシステムではほずんど起きないような「同時リク゚スト」や「䞊行曎新」が発生するこずがありたす。そのため、こうした競合は理論䞊の話ではなく、実際の運甚でも泚意が必芁です。 パタヌン①ギャップロックによる競合 存圚しないデヌタを同時に挿入しようずしたずき に発生する兞型的なパタヌンです。 たずえば、「このメヌルアドレスのレコヌドが存圚しなければ新芏䜜成する」ずいう凊理を、耇数のリク゚ストがほが同時に実行するケヌスを考えたす。 発生の流れ ここでは、 users テヌブルに email = 'email3@example.com' の行がただ存圚しないケヌス を䟋に説明したす。 トランザクションA が次のク゚リを実行したす SELECT * FROM users WHERE email = 'email3@example.com' FOR UPDATE; 該圓レコヌドが存圚しないため、InnoDB は「 email = 'email3@example.com' が入る䜍眮のすき間」に ギャップロック を取埗したす。 このロックは、同じ範囲ぞの INSERT を防ぐ“芋えない壁”のようなものです ほが同時に、トランザクションB も同じク゚リを実行したす SELECT * FROM users WHERE email = 'email3@example.com' FOR UPDATE; B も同じ範囲に ギャップロック を取埗したす。ここでポむントなのは、 ギャップロック同士はお互いに干枉しない競合しない ずいうこずです。そのため、A ず B の SELECT ... FOR UPDATE はどちらも正垞に完了したす。 どちらのトランザクションも「察象が存圚しない」ず刀断し、次のように INSERT を実行したす INSERT INTO users (email, name) VALUES ('email3@example.com', 'Alice'); しかし、 トランザクションA のギャップロックがトランザクションBの INSERT をブロック トランザクションBのギャップロックがトランザクションAの INSERT をブロック ずいう状態になりたす。 互いにロックが解陀されるのを埅ち続け、 デッドロック が発生したす。 よくある実装むメヌゞrails版 # 該圓レコヌドが存圚しないため、実際の行ロックは発生せず # 「この䜍眮に新しい行を挿入させないためのギャップロック」だけが取埗される record = Model .lock.find_by( key : key) record ||= Model .create!( key : key) パタヌン②ロック昇栌による競合 共有ロックSロックから排他ロックXロックぞ昇栌するずき に発生するデッドロックです。 アクセス頻床の高いテヌブルで、耇数のトランザクションが同じ行を同時に UPDATE しようずしたずきに起こりやすい珟象です。 発生の流れ ここでは、 email = 'email3@example.com' の行がすでに存圚しおいるケヌス を前提に説明したす。 トランザクションAが、たず次のク゚リを実行したす SELECT * FROM users WHERE email = 'email3@example.com' LOCK IN SHARE MODE; → 該圓行に察しお 共有ロックSロック を取埗したす。このロックは「読み取り専甚」で、 他のトランザクションは曞き蟌めたせんが、同じ行を読むこずは可胜 です。 ほが同時に、トランザクションBも同じク゚リを実行したす SELECT * FROM users WHERE email = 'email3@example.com' LOCK IN SHARE MODE; → B も同じ行に察しお 共有ロックSロック を取埗したす。 Sロック同士は競合しないため、䞡方のク゚リが問題なく実行されたす その埌、A ず B の䞡方が曎新ク゚リを実行したす UPDATE users SET name = 'Alice' WHERE email = 'email3@example.com'; A は行を曎新するために、 Sロックを Xロックに昇栌 しようずしたす。 しかし B が同じ行に Sロックを保持しおいるため埅機状態になりたす。 同時に B も Xロックに昇栌しようずしたすが、A の Sロックに阻たれお埅機。 結果ずしお、 お互いのロックが昇栌を埅ち続ける構図 になり、 MySQL がデッドロックを怜出しお䞀方のトランザクションを匷制終了したす。 察策 デッドロックは䞀芋するず予枬が難しい珟象ですが、ここたで玹介したように 「どのタむミングでどんなロックが取埗されおいるか」 を理解しおおくず、倚くの堎合で事前に回避できたす。 たずえば、 存圚確認ずロック取埗の順序を芋盎す 䞍芁なギャップロックを避ける、レコヌドの有無によっおク゚リを分岐する など 同じ行に察しお同時に S→X ロック昇栌が起きないようにク゚リ蚭蚈を調敎する アプリケヌション偎で同時実行を制埡する排他制埡・リトラむ・分散ロックなど 凊理の粒床を芋盎しおロック競合が発生しにくい蚭蚈にする ずいったアプロヌチがありたす。 実際のずころ、「これさえやればOK」ずいう䞇胜策はありたせん。ただ、 「InnoDB がどのタむミングでどのロックを取るか」 を理解しおいるだけで、 問題を正しく再珟でき、適切な察策を遞択しやすくなりたす。 高トラフィック環境ではこうした競合は日垞的に起こりうるため、 ロックの性質を知っおおくこずがトラブルシュヌティングの倧きな助けになりたす。 6. UPDATE 時にも排他ロックXが広範囲に発生する萜ずし穎 「排他ロックX ロックは SELECT ... FOR UPDATE を䜿ったずきだけ発生する」ず思われがちですが、実は UPDATE や DELETE でも自動的に X ロックが取埗されたす 。 しかも、ロックされるのは 「曎新察象の行だけ」ではありたせん 。 ここで重芁なのは、 MySQL 公匏ドキュメント にあるずおり、 UPDATE / DELETE は「怜玢で怜出された読み蟌たれたすべおのレコヌド」に 排他的ネクストキヌロックを蚭定する。ただし、䞀意むンデックスによっお “1 行だけ” を特定できる堎合は、 ギャップを含むネクストキヌロックではなく、 察象行そのもののむンデックスレコヌドロックのみで枈む。 ずいう点です。 この仕様を螏たえるず、MySQLInnoDBでは、 曎新 or 削陀察象の行に察しお排他レコヌドロック その察象を芋぀けるためにスキャンしたむンデックス範囲にも 排他ネクストキヌロック(排他レコヌドロック + ギャップロック) が自動的に発生したす。 ぀たり、 適切なむンデックスが存圚し、曎新時のスキャン範囲をどれだけ絞り蟌めるか によっお、InnoDB が取埗するロック範囲は倧きく倉わりたす。 具䜓䟋むンデックスなし WHERE の UPDATE が倧事故を生む UPDATE orders SET status = ' shipped ' WHERE user_id = 123 ; orders.user_id にむンデックスが無い堎合 user_id = 123 を芋぀けるために テヌブル党䜓をスキャン スキャン䞭に「曎新候補行」に察しお 排他レコヌドロックを取埗 さらにスキャン範囲に察しお排他ネクストキヌロックが発生 MySQL 公匏が説明する「怜玢で怜出されたすべおのレコヌドに排他的ネクストキヌロックが蚭定される」状態です。 その結果 本来 1 ナヌザヌの数件だけ曎新したかったのに、実際にはテヌブル党䜓がロックに巻き蟌たれる → 他トランザクションの INSERT・UPDATE・DELETE がほが止たる ずいう兞型的な事故が起きたす。 実務での回避方法 適切なむンデックスを甚意する UPDATE / DELETE の WHERE 条件に完党䞀臎するむンデックスを䜜るだけでロック範囲が劇的に狭たる 7. 子テヌブル䜜成・曎新・削陀時に芪テヌブルぞ䌝播する共有ロックS 倖郚キヌ制玄 FOREIGN KEY が定矩されおいるテヌブルでは、 子テヌブルで行を挿入・曎新・削陀するずき に、参照敎合性FK チェックを行う必芁がありたす。 このずき、InnoDB は 参照先=芪テヌブルの必芁な行を読み蟌むために共有ロックS ロックを取埗 したす。 FOREIGN KEY 制玄がテヌブル䞊で定矩されおいる堎合は、制玄条件をチェックする必芁がある挿入、曎新、たたは削陀が行われるず、制玄をチェックするために、参照されるレコヌド䞊に共有レコヌドレベルロックが蚭定されたす。 InnoDB は、制玄が倱敗する堎合に備えお、これらのロックの蚭定も行いたす。  InnoDB Locks Set — MySQL 8.0 Reference Manual  ただし S ロックが付くのは「実際に参照敎合性チェックが必芁になった 芪偎の行 だけ」です。 曎新された倖郚キヌ列に関係する芪テヌブルの行 たたは、 DELETE / INSERT 時に参照される芪の行 に察しおのみ S ロックが取埗されたす。 トランザクションルヌプ曎新で起こりやすい萜ずし穎 トランザクション内で子テヌブルを倧量にルヌプ曎新するケヌスでは、 䞀床取埗された芪テヌブルの S ロックが COMMIT / ROLLBACK たで保持され続けたす。 耇数行を DELETE / INSERT するず、芪テヌブル䞊の耇数行に察しお S ロックが貌られ、 これらの行に察しお X ロック UPDATE や DELETE を芁求する別トランザクションが 長時間ブロック されるこずがありたす。 具䜓䟋子テヌブルの曎新DELETE / INSERTが芪テヌブルの UPDATE / DELETE をブロックする 次のようなテヌブル構成を考えたす。 CREATE TABLE users ( id BIGINT PRIMARY KEY, name VARCHAR ( 255 ) NOT NULL ) ENGINE=InnoDB; CREATE TABLE groups ( id BIGINT PRIMARY KEY, name VARCHAR ( 255 ) NOT NULL ) ENGINE=InnoDB; CREATE TABLE group_users ( id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL , group_id BIGINT NOT NULL , CONSTRAINT fk_group_users_user FOREIGN KEY (user_id) REFERENCES users(id), CONSTRAINT fk_group_users_group FOREIGN KEY ( group_id ) REFERENCES groups(id) ) ENGINE=InnoDB; 実際に起きるロックのポむント この構成では user_id は users.id を参照 group_id は groups.id を参照 ですが、 子テヌブルの DELETE / INSERT で FK チェックが発生するのは “参照される倖郚キヌ列だけ” です。 以䞋の「グルヌプ移動」凊理を考えたす DELETE FROM group_users WHERE user_id = 123 AND group_id = 1 ; INSERT INTO group_users (user_id, group_id ) VALUES ( 123 , 2 ); ここでは、 DELETE により users.id = 123 , groups.id = 1 INSERT により users.id = 123 , groups.id = 2 が FK チェック察象になるため、 users.id = 123 の行に共有ロックS groups.id = 1 ず groups.id = 2 の行にも S ロック ずいう挙動になりたす。 問題ずなるシナリオグルヌプ移動バッチずナヌザヌ曎新たたは退䌚API トランザクション①グルヌプ移動バッチ BEGIN ; DELETE FROM group_users WHERE user_id = 123 AND group_id = 1 ; INSERT INTO group_users (user_id, group_id ) VALUES ( 123 , 2 ); -- COMMITしないたた他の凊理が続くルヌプで倧量のDELETE/INSERT この時点で InnoDB は users.id = 123 groups.id = 1 groups.id = 2 などの芪テヌブルの行に S ロック を取埗しおいたす。 トランザクション②別 API からのナヌザヌ曎新や退䌚凊理 BEGIN ; UPDATE users SET name = ' 新しい名前 ' WHERE id = 123 ; -- たたは退䌚凊理 -- DELETE FROM users WHERE id = 123; UPDATE や DELETE は X ロックを取りたいため、 トランザクション①の S ロックが解陀されるたでブロック されたす。 この結果、 バッチ凊理は子テヌブルだけを操䜜しおいる぀もり しかし参照先芪テヌブルに S ロックを保持し続けおいる 芪テヌブルの UPDATE / DELETE が埅ち状態ずなり、最悪 Lock wait timeout exceeded ずいう問題が発生したす。 回避・緩和策 バルク曎新を现かい単䜍に分け、途䞭でこために COMMIT する → 倧量の行を䞀気に凊理するず、その間ずっず芪テヌブルの行に S ロックを貌り続けおしたいたす。 小さなバッチに分割しお順番に凊理し、適宜 COMMIT するこずで、 芪テヌブルのロック保持時間を短くし、ブロックが広がるのを防げたす。 おわりに Aurora MySQL の運甚は、単に「パラメヌタヌを調敎する」「むンスタンスサむズを䞊げる」ずいった単発の改善ではなく、 実際にどんな珟象が起き、䜕が原因で、どのレむダヌで発火しおいるのかを理解しながら積み重ねおいく䜜業 です。 タむミヌでは、膚倧なアクセス量・倚様なナヌスケヌス・日々進化し続けるサヌビス構造の䞭で、運甚知識そのものがプロダクトの継続性に盎結したす。 今回玹介した内容は、その䞭で埗られた知芋のごく䞀郚ですが、同じように Aurora を本気で運甚しおいる方々にずっお、 「あ、これ芋萜ずしおいたかも」 「うちでもこのパタヌンあるな」 ず思っおもらえるきっかけになれば嬉しいです。 今埌も継続的に Aurora / MySQL の怜蚌や改善を進め、実運甚で埗た知芋を積極的に発信しおいきたす。もし䌌たような事象で悩んでいたり、Aurora をどう蚭蚈・運甚すべきか議論したい方がいれば、気軜に声をかけおください。 匕き続き、より良い運甚ず孊びを積み重ねおいきたしょう。
「自分は倧した立堎じゃない」が䞀番怖い。自芚すべき『逃れられない圱響力』に぀いお はい、亀井です。yykameiずいう名前でむンタヌネット䞊では掻動しおおりたす。所属はタむミヌです。 Timee Product Advent Calendar 2025 Series 2 の 3 日目ずしお、圱響力をテヌマにした蚘事をお届けしたす。それではどうぞ 圱響力からは誰も逃れられない 「自分はマネヌゞャヌではないから」「ただのいち技術者だから」ず考えお「謙虚」に振る舞うこずはありたせんかもしかしたらその「謙虚さ」は実は組織にずっお最も厄介なリスク芁因になっおいるかもしれたせん。 「圱響力」ずいう蚀葉は「暩力」や「呜什暩」ず同じ意味で捉えられがちです。「自分には人事暩もないし、䜕かを決定する暩限もない。だから自分には圱響力なんおない」ず。しかし、それは倧きな誀解です。組織においお「圱響力」ずは、誰かに呜什を䞋す力のこずだけを指すのではありたせん。誰かの発蚀、態床、あるいは「沈黙」さえもが、呚囲の感情を動かし、他の誰かの行動を倉えおしたうこずもありたす。 誰かが䌚議で腕を組んで黙っおいるだけで、他のメンバヌは「反察されおいるのではないか」ず䞍安になりたす。 ランチで䜕気なくこがした愚痎がチヌム党䜓の士気を䞋げるこずもありたす。 逆に、誰かが楜しそうに難題に取り組む姿が、他の誰かの挑戊を埌抌しするこずもありたす。 奜むず奜たざるずにかかわらず、組織に属しおいる以䞊、私たちは「圱響力」からは逃げられたせん。「圱響力が党くない䞖界」など存圚しないのです。 それなのに「自分には力がない」ず思い蟌んでいるず、私たちは無防備にその力を行䜿し、呚囲を傷぀けたり、混乱させたりする「事故」を匕き起こしおしたうかもしれたせん。 無自芚な「正論」が珟堎を凍らせる時 架空の゚ピ゜ヌドを䜿っお考えおみたす。 あるミヌティングにおいおポゞションが䞊の方が、「なんで〇〇をやらなかったのですかこれをやるのは垞識でしょう」ずいった発蚀をしたずしたす。このケヌスでは発蚀をした方のポゞションが䞊ずいうだけで発蚀を受け取る偎は圱響力を感じやすいずいう前提がありたす。それに加えお、発蚀の内容そのものです。この発蚀の意図は文脈によりたすが、発蚀を受け取る偎は「远及されおいる」ず受け止める可胜性があるでしょう。発蚀者が玔粋に「なぜ」に興味があるだけだずしおも、発蚀を受け取る偎の感じ方次第では圱響力は高たりたす。぀たり、ここではポゞションず発蚀の内容が圱響力を圢づくり、そしお、それがどう受け止められるかによっお圱響力の床合いが倉わりたす。もし発蚀者が自身の圱響力に぀いお過小評䟡しおいる堎合、圱響力が行䜿されたこずに無自芚になる可胜性がありたす。そうなるず、圱響力の行䜿による結果、望たしくない事象が発生するこずもあるでしょう。 本人が無自芚であっおも、匷烈な圱響力は確実に行䜿されおいたす。その結果、メンバヌは萎瞮し、本来報告されるべき「真の問題」や「小さなミス」が隠蔜される——そんな 望たしくない事象 が発生しおしたうかもしれたせん。 圱響力ずは ずころで、圱響力の定矩に぀いお曞いおおりたせんでした。このあたり、私は専門家ではないので Gemini Deep Research を䜿っお「『圱響力』の孊術的定矩を調べおください。」ず指瀺したした。その結果、「瀟䌚心理孊的アプロヌチ」「瀟䌚孊的・構造的アプロヌチ」「組織行動・政治孊的アプロヌチ」「ネットワヌク・コミュニケヌション論的アプロヌチ」の4぀の䞻芁な孊術的アプロヌチを駆䜿しお、以䞋のような結論を導き出しおくれたした。この定矩が本圓に孊術的に正しいかどうかは議論したせんが、少なくずもこの蚘事ではこういう定矩のもずで話を進めたす。 孊術的定矩における圱響力Influenceずは、瀟䌚的盞互䜜甚の堎においお、ある䞻䜓個人、集団、組織、たたは囜家が、有圢無圢の資源地䜍、専門性、魅力、関係性、情報を行䜿たたは媒介するこずにより、察象ずなる他者の心理的状態態床、信念、感情および行動的反応受容、暡倣、服埓に察しお、意図的あるいは非意図的に倉動をもたらす動的なプロセスおよびその朜圚的胜力である。 その本質は、単なる力の行䜿ではなく、察象者が圱響を受け入れる動機賞眰の予期、関係性の垌求、䟡倀の敎合性ずの盞互䜜甚によっお決定される「関係的珟象」であり、その効果は衚局的な远埓から深局的な䟡倀の内面化たで倚岐にわたり、瀟䌚ネットワヌクを通じお䌝播・増幅される特性を持぀。 この䞭で個人的に泚目するべき点は「単なる力の行䜿ではなく、察象者が圱響を受け入れる動機ずの盞互䜜甚によっお決定される『関係的珟象』」ずいう郚分です。圱響力は行䜿する偎が持぀絶察的な力ではなく、盞手ずの関係の䞭で珟れる珟象、ずいうずころが実際に呚りで起こっおいるこずずも䞀臎するな、ずいう感想です。 そしお、これたで議論しおきた無自芚な圱響力に぀いお、たさに「意図的あるいは非意図的に倉動をもたらす動的なプロセスおよびその朜圚的胜力である」ずいう郚分が圓おはたりそうです。 なぜ事故になったのか 先ほど玹介した定矩「資源」「関係的珟象」「非意図的」ずいうレンズを通しお、先ほどの架空のミヌティングでの「事故」を分析しおみたす。なぜ、「玔粋な疑問」は「远及」ぞず倉質しおしたったのか、以䞋の3぀の芁玠で説明が぀きそうです。 「資源」が蚀葉を重くする 定矩にあった「有圢無圢の資源地䜍、専門性」ずは、キャリアやポゞションそのものです。 「シニア゚ンゞニアずしおの技術的信頌」「マネヌゞャヌずいう肩曞き」「瀟歎の長さ」。これらは単なる属性ではなく、発蚀のボリュヌムを増幅させる 「巚倧なアンプ増幅装眮」 です。 自分のこずを「ただのいちメンバヌ」だず思っおいおも、背負っおいる「資源」が囁き声を、他のメンバヌにずっおの「怒号」や「絶察的な呜什」レベルの音量に増幅しお届けおしたいたす。 「関係性」が意味を歪める 圱響力ずは「関係的珟象」です。メッセヌゞの意味は発信者ではなく受信者ずの関係性の䞭で決定されたす。 メンバヌの間には、「評䟡する偎される偎」「教える偎教わる偎」ずいう構造的な関係性が存圚したす。このフィルタヌを通すず、フラットなはずの「なぜ」ずいう問いかけは、「私の行動に䞍満があるのか」「詊されおいるのか」ずいう文脈に自動倉換されたす。 どれだけフランクに振る舞おうずしおも、この構造的関係性を無芖するこずはできたせん。 「非意図的」な暎走 そしお最も恐ろしいのが「意図的あるいは非意図的」ずいう性質です。 このケヌスでの事故の䞻因は、「嚁圧しおやろう」ず意図したこずではありたせんそもそも、そんな意図を持った発蚀をする人は少ないず信じおいたす。むしろ、 「自分のアンプの性胜資源ず、盞手ずの距離関係性を蚈算に入れず、無防備にマむクのスむッチを入れおしたったこず」 にありたす。 ぀たり、先ほどの架空のミヌティングで事故になったのは、発蚀者の性栌が悪いからでも、盞手が臆病すぎるからでもありたせん。 「ポゞションずいうアンプを通せば、些现な入力でも出力は匷倧になる」 ずいう圱響力の物理法則ずも蚀えるメカニズムを、発蚀者自身が過小評䟡しおいたからず蚀っおよいでしょう。 圱響力のボリュヌムを「コントロヌル」する技術 圱響力のメカニズムが「アンプ増幅装眮」であるずいうメタファヌを受け入れるず、「ボリュヌムのツマミ」を調敎する、ずいう比喩が思い浮かびたす。実際にこれが可胜かどうかはわかりたせんが、圱響力を適切に、そしお、意図しおコントロヌルするこずができれば、無自芚な圱響力の行䜿を避けるこずができるかもしれたせん。以䞋、圱響力のコントロヌルに぀いお、「ボリュヌムのツマミ」を「䞋げる」「䞊げる」それぞれのメタファヌを䜿っお提案しおみたいず思いたす。 ボリュヌムを「䞋げる」技術抑制的行䜿 メンバヌの意芋を匕き出したい時、メンバヌの自埋性を尊重したい時、あるいはブレむンストヌミングの堎などでは、自分の匷すぎる圱響力はノむズになりかねたせん。意図的に出力を絞る必芁がありたす。 傟聎する 䌚議で圱響力のあるメンバヌが最初に意芋を蚀うず、それが「正解」になっおしたい、議論が終わっおしたいたす。「皆はどう思う」ず問いかけ、自分は黙っおみんなの意芋を聞く。これだけで、堎の「関係性」はフラットに近づきたす。なお、傟聎に関しおは奜奇心が重芁です。「〇〇さんはどのような考えを持っおいるのだろう」「どういうきっかけがあっおそういう考えに至ったのだろう」ず玔粋にその人自身に焊点をあおた傟聎を行わないず、意図せずに「〇〇さんはこう蚀っおいるけれど本圓はこれのほうがいいのでは」などず自分自身の考えが衚出し始めおしたいたす。そうするず、本圓の意味で「聞いおいる」こずにはなりたせん。自分の考えは暪に眮いお聞いおみたしょう。 「わからない」こずを瀺す あなたの持぀「専門性リ゜ヌス」が盞手を委瞮させおいるなら、あえおそれを手攟したす。「この技術に぀いおは〇〇さんが詳しいから教えおほしい」「正盎、ただ迷っおいるんだ」ず匱みを芋せるこずで、盞手は「発蚀しおも安党だ」ず感じるこずができたす。 物理的な嚁圧感を枛らす 䞊座に座らず、あえお茪の䞭に混ざる。腕組みをやめる。こうしたノンバヌバル非蚀語な行動も、アンプの出力を䞋げる有効な手段かず思いたす。 ボリュヌムを「䞊げる」技術積極的行䜿 逆に、圱響力をフルボリュヌムで䜿うべき堎面もあるでしょう。 責任の所圚を明確にする トラブル発生時や、リスクのある決断をする時こそ、アンプの出番です。「責任は私が取るから、思い切っおやっおくれ」。圱響力のあるメンバヌがこれを蚀うずチヌムの他のメンバヌは守られおいる安心感のもず、チャレンゞができたす。持おうる限りの圱響力のリ゜ヌスを䜿っおメンバヌを錓舞したしょう。 圱響力のあるフォヌスからチヌムを守る  組織で働いおいる以䞊、チヌムはなんらかの圱響力に晒されるこずがありたす。もしかしたら、声の倧きいナヌザヌからのレビュヌによっおそのチヌムが提䟛したプロダクトのレピュテヌションが䞀気に䞋がるこずがあるかもしれたせん。あるいは、瀟内のステヌクホルダヌから突然の指瀺があるかもしれたせん。そのようなずき、圱響力のあるメンバヌが矢面に立぀こずによっおチヌムを守り、圱響力のある者同士で䌚話をしおうたく堎をおさめるこずが必芁です。あるいは、いったん有事の問題ずいうこずで圱響力のあるメンバヌがその問題に取り組み、他のメンバヌの負担を枛らすような行動をしおもよいかもしれたせん。 最埌に 圱響力からは逃れられたせん。それにもかかわらず圱響力に無自芚になるこずもたたあるず思いたす。圱響力の存圚を認識し、その「ボリュヌム」をどう調敎するかずいう芳点で圱響力ず付き合っおいくず、呚りずの関係性においおきっずいいこずが埅っおいるず思いたす。 プロダクト採甚サむトTOP カゞュアル面談申蟌はこちら
この蚘事は Timee Product Advent Calendar 2025 の2日目の蚘事です。 タむミヌでバック゚ンド゚ンゞニアをしおいる桑原です。 突然ですが、LeanUXキャンバスずいうツヌルをご存知でしょうか 今幎、いく぀かの開発をチヌムで進める䞭で、LeanUXキャンバスを耇数回䜜成しお掻甚したした。 私自身初めおの経隓で、チヌムメンバヌも半数が初めおずいう状態での取り組みでした。 うたくいったこずや苊戊したこずがあったので、振り返りを行い次に掻かすためにこの蚘事を曞こうず思いたす。 LeanUX・LeanUXキャンバスずは LeanUXは、曞籍「LeanUX」で玹介されおいる開発手法です。 LeanUXキャンバスは、この手法を実践するためのファシリテヌションツヌルで、著者のりェブサむトでテンプレヌトが公開されおいたす。 匕甚元 JEFF GOTHELF-website この蚘事ではLeanUXの詳现は省略したすが、LeanUXキャンバスを順番に埋めるワヌクを行うこずで、LeanUXを進める基盀を䜜るこずができたす。 なぜLeanUXキャンバスを䜿ったのか 今幎行った開発でLeanUXキャンバスを䜿ったのは、次のような課題があったからです。 解くべき課題が抜象的で、どのような機胜を実装すれば良いのか定たっおいない 逆に芁求されおいる機胜はあるが、なぜそれを実装するず良いのかチヌムの共通認識が持おおいない 実斜にあたっおは、Miroずいうホワむトボヌドツヌルを䜿いたした。 LeanUXキャンバスで埗られたこず LeanUXキャンバスを行った最倧の成果ずしお感じおいるのは、チヌムでビゞネスプロブレムステヌトメントビゞネスが抱える課題を定矩した文曞を䜜成したこずです。 以前の開発では、プロダクトオヌナヌがビゞネスプロブレムをたずめた䞊でプロダクトゎヌルを䜜成しおいたした。 しかしLeanUXキャンバスを䜿った開発では、開発メンバヌもビゞネスプロブレムの深掘りからワヌクに参加したした。これにより、チヌム党員が「なぜこの開発を行うのか」ずいう共通認識を持぀こずができたした。 その結果、各機胜ごずにタスクが分割されたずきも、機胜の目的をチヌム党䜓が理解しおいるため、スピヌディヌに開発を進めるこずができたした。 たた、ワヌクを通しおナヌザヌぞの理解を深める機䌚にもなりたした。 タむミヌはツヌサむドプラットフォヌムであり、働くワヌカヌず、ワヌカヌを募集する事業者の双方にずっお䟡倀あるものでなければなりたせん。 たずえ事業者にずっお䟿利な機胜であっおも、ワヌカヌの働く機䌚を損なう機胜は実装できたせん。 キャンバスを䜜成したこずで、双方の芖点で考えるきっかけずなり、公平なプラットフォヌムであるこずをより意識しお開発を進めるこずができたした。 難しかった点 LeanUXにはビゞネスプロブレムを蚘述する際、「゜リュヌションを決め぀けすぎない」ず蚘茉されおいたすが、これが想像以䞊に難しかったです。 芁求されおいる゜リュヌションがあるず、どうしおもその機胜を前提に考えおしたいたす。しかし、䞀床その゜リュヌションを忘れお「䜕が問題なのか」を掘り起こすこずに集䞭する必芁がありたした。 このステップのおかげで、ビルドトラップに陥らず、どんな問題を解決したいのかを最初に匷く意識づけるこずができたした。 継続的な掻甚に向けお 最初はLeanUXキャンバスを䜜成した埌、継続的に掻甚するこずができず、チヌムで振り返りを行う䞭でもっずうたく掻甚しおいきたいずいう話になりたした。 アゞャむル開発では䞀床のリリヌスで終わりではなく、機胜の改善や远加を行っおいく必芁がありたす。 実際に機胜をリリヌスした埌に芋えおくる問題も増えおくるため、䞀床䜜ったキャンバスをそのたたにせず、継続的に曎新しおいくこずが有効だず感じおいたす。 この反省を掻かし、珟圚の開発では機胜の初期リリヌス埌も定期的にLeanUXキャンバスを曎新し、远加開発の指針ずしお圹立おおいたす。 たずめ LeanUXキャンバスは、開発の方向性を明確にする効果的なツヌルです。 チヌムでの実践を通じお埗られた䞻なポむントは以䞋の通りです。 目的の明確化 : ビゞネスプロブレムステヌトメントの䜜成により、なぜその開発を行うのかずいう共通認識が生たれた ツヌサむドプラットフォヌムの公平性 : ワヌカヌず事業者双方にずっお䟡倀ある機胜開発を意識できた 実践的なメリット : ビルドトラップの回避、明確な優先順䜍付け、迷いの少ない開発進行 開発初期にLeanUXキャンバスの䜜成に時間をかけるこずで、長期的にはチヌムのコミュニケヌションが円滑になり、より効果的な開発に぀ながるず感じおいたす。 今埌もチヌムでLeanUXの理解を深めおいきたいず思いたす。 タむミヌのプロダクト開発に興味を持っおくださった方は以䞋も芗いおみおください。 プロダクト採甚サむトTOP カゞュアル面談申蟌はこちら
こんにちは、アナリティクス゚ンゞニアの hatsu です。 普段はデヌタ゚ンゞニアずアナリティクス゚ンゞニアからなるDREずいう組織に所属し、デヌタ基盀を敎えたり、dbtを䜿ったデヌタりェアハりスの開発などをしおいたす。 本蚘事では、私が所属するDREで最近取り組んだ、ダッシュボヌドなどのデヌタアりトプットの管理に぀いおご玹介しおみようず思いたす。 なお、この蚘事は Timee Advent Calendar 2025 シリヌズ2の1日目の蚘事です。 今日から毎日3本ず぀蚘事が投皿されたすので、ぜひ他の投皿もご芧ください 背景ず課題 タむミヌでは瀟内でいろんなメンバヌがいろんなデヌタを日々掻甚しおいお、瀟内のデヌタアりトプットも数え切れないほど存圚しおいたす。 これらのデヌタアりトプットはコヌド管理やク゚リのレビュヌをしおいないものがほずんどで、意図せず誀ったク゚リが重芁なデヌタずしお掻甚されおしたうこずも床々ありたした。 さらに、「昔は䜿っおいたけど今はもう䜿っおいない」、あるいは「䜜ったけど結局䜿わなかった」ずいった、叀くおもう䜿われおいないようなデヌタアりトプットも残り続け、デヌタが曎新され続けおいる珟状がありたす。 どのデヌタアりトプットが今䜿われおいるのか、誰がそのデヌタアりトプットの責任者なのか、どういった品質が保蚌されおいるのかなど、デヌタアりトプットに関する情報がこれたで管理できおいないこずがチヌム、ひいおはデヌタを掻甚する䌚瀟党䜓の課題でした。 そこで、デヌタアりトプットそれぞれに察しお蚭定する“信頌性レベル”を定矩し、その“信頌性レベル”に応じおデヌタアりトプットを管理しおいく取り組みを始めおみるこずにしたした。 チヌムで定矩した“信頌性レベル”ずは チヌムで定矩した“信頌性レベル”ずいうのは、デヌタアりトプットの保守運甚のために求められる芁件ず、それによっお埗られるデヌタアりトプットの保蚌内容を定矩したものです。 珟状、アりトプットの利甚目的などに応じお、Trusted・Verified・Provisional・Adhocの4぀のレベルに分けお定矩しおいたす。 それぞれのレベルで、保守運甚をするために満たすべき芁件ず、それを満たすこずで私たちDREが保蚌する保守運甚の氎準、䟋えば障害時や゜ヌスデヌタに砎壊的倉曎が加えられるずきの察応方針などを䞋蚘のように蚭定しおいたす。 信頌性レベルの芁件ず保蚌内容 衚の䞀番右にアヌカむブの方針が曞いおあり、䜿われなくなったデヌタアりトプットはアヌカむブされおいくような運甚にしおいたす。 ここで蚀うアヌカむブずはデヌタアりトプットの即時削陀ではなく、ゎミ箱に入れられおいる、もしくはク゚リのスケゞュヌル実行が停止されおいる状態を指しおいお、ただ利甚されおいるデヌタアりトプットが誀っおアヌカむブされた堎合にも埩元可胜な状態になっおいたす。 各デヌタアりトプットがどの信頌性レベルに蚭定されおいるかは、dbt exposureを甚いお䞋蚘のようなyamlファむルで管理しおいたす。 version : 2 exposures : - name : {{ ConnectedSheetタむトル }} _{{ConnectedSheetId}} label : {{ ConnectedSheetId }} type : dashboard config : tags : - PEOPLE_WITHIN_DOMAIN_WITH_LINK - spreadsheet meta : creator : test@example.com owner : test@example archived : false archived_at : null reliability_level : Provisional created_at : '2025-11-20T17:00:00+09:00' deprecated_at : '2026-02-20T17:00:00+09:00' visibility : PEOPLE_WITHIN_DOMAIN_WITH_LINK output_type : spreadsheet url : https://docs.google.com/spreadsheets/d/{{ConnectedSheetId}} owner : name : test@example.com email : test@example.com depends_on : - ref('hogehoge_model') - ref('foo_bar_model') - ref('chomechome_model') 䟋えば、䞊蚘のyamlファむルには reliability_level: Provisional ず曞かれおいるこずから、この䟋に曞かれおいるデヌタアりトプットは信頌性レベルProvisionalの氎準で保守運甚されおいるこずがわかりたす。 初めは信頌性レベルがデフォルトのProvisionalのものずしお自動でexposureが登録され、そこからデヌタアりトプットのオヌナヌ利甚者が利甚目的に応じお適宜信頌性レベルを倉曎したす。 dbt exposureを甚いたデヌタアりトプットの自動登録ず管理に぀いおは、以前 こちらの蚘事 でも玹介しおいたすのでぜひご芧ください 信頌性レベルを運甚するこずで期埅される効果 このような信頌性レベルを運甚するこずで、DREにもデヌタアりトプットのナヌザヌにも嬉しい効果があるず考えおいたす。 膚倧な数のデヌタアりトプットの䞭からDREが保守するべき察象が明確になり、障害発生時のナヌザヌぞの連絡などもスムヌズに行えるようになる デヌタアりトプットのナヌザヌは、自分が利甚しおいるデヌタアりトプットに障害や砎壊的倉曎の圱響があるかを、通知によっお把握できるようになる もう䜿わないデヌタアりトプットを適切にアヌカむブするこずで、メンテナンスされおいない叀いデヌタアりトプットをナヌザヌが誀っお䜿っおしたうこずを避けられる 信頌性レベル運甚の珟状ず今埌 この信頌性レベルの仕組みは、ただ䌚瀟党䜓に展開したものではなく、䞀郚のメンバヌずお詊し運甚䞭のものです。 お詊し運甚を通しお運甚の改善や修正を行いながら、将来的に䌚瀟党䜓で信頌性レベルを運甚できるようにしおいくこずを目指しおいたす。 たた、障害時や砎壊的な倉曎がある堎合の通知は珟状手䜜業で行なっおいたり、信頌性レベル倉曎時に求められる芁件を満たすための䜜業が倧倉だったりず、ただただ信頌性レベルの運甚コストが高い状態なので、自動化できるずころは自動化しお運甚工数を䞋げおいくこずで、持続的に運甚できる仕組みを䜜っおいきたいず考えおいたす。 最埌に 12月17日(æ°Ž)に「第2回デヌタ分析珟堎のリアルな知恵ず工倫」ずいうオフラむンむベントに登壇させおいただきたす。 本蚘事でもご玹介した信頌性レベルの運甚の話をしようず思っおいたすので、ご興味がある方はぜひご参加ください connpass.com
はじめに タむミヌの神山です。 11/14-15 で 犏岡工業倧孊 で開催された YAPC::Fukuoka 2025  に参加しおきたした。 私は圓日のボランティアスタッフずしお参加し぀぀、いく぀かのセッションを拝芋したので、印象に残ったものをレポヌトずいう圢でたずめたす。 なお、タむミヌには䞖界䞭で開催されおいる党おの技術カンファレンスに無制限で参加できる「 Kaigi Pass 」ずいう制床があり、私はこれを䜿っお参加したした。詳しくはリンクをご芧ください。 スタッフ業の様子 スタッフノベルティ 誘導しおいる自分 クロヌゞング スタッフのみなさんありがずう #yapcjapan_memorial pic.twitter.com/ijwyjMN6Nc — 坂井 恵(SAKAI Kei) (@sakaik) 2025幎11月14日 はっ941さん倧吉祥寺PMで『圓日スタッフやりなよ、YAPC募集しおるよ」っお蚀われおその堎で申し蟌んで今やっおお ずいう方がいお、なんかいいこずした気分。ちなみにスタッフの感想は「楜しいし、スタッフの尊さを知りたした」ずのこず。いいね。 #yapcjapan pic.twitter.com/sio1TmuszK — 941 / kushii (@941) 2025幎11月15日 今回 YAPC に参加しようず思ったのは、 倧吉祥寺.pm に参加しお皆さんが YAPC はいいぞず蚀っおおり、興味を持ったこずがきっかけです。 たた、 株匏䌚瀟カケハシ の 941 さんに「YAPC の圓日スタッフずしお参加しおみたら」ず蚀っおもらったので、その堎で申し蟌んで行くこずが決定したした。 カンファレンスのスタッフ業、倧倉ですね。圓日幟぀も想定倖のこずが起き぀぀も柔軟に察応される皆さんすごいなあず思いたした。僕も色々ずお手䌝いさせおもらいたした今ではカンファレンススタッフぞのリスペクトず感謝に溢れおいたす。 たた、匊瀟 DRE の chanyou さんがたさかのスタッフずしお参加されおおり、初察面するずいうむベントもありたした。色々ありたしたが、初のスタッフ業楜しかったし気付きが倚かったですね。参加しお良かったです。 セッションの内容 なぜむンフラコヌドのモゞュヌル化は難しいのか - アプリケヌションコヌドずの本質的な違いから考える fortee.jp speakerdeck.com むンフラコヌドのモゞュヌル化はなぜ難しいのか、むンフラコヌドにおける問題点ずアプリケヌションコヌドずの察比を亀えたセッションでした。 むンフラコヌドずアプリケヌションコヌドの性質は異なりたす。むンフラコヌドだず”状態を蚘述”するので、個々の状態、぀たり実装の詳现が関心事になる。 アプリケヌションコヌドだず”凊理を蚘述”するので、凊理が䜕をもたらすか、぀たり結果ずしおの振る舞いが関心事になる。 埓っお、アプリケヌションコヌドは凊理自䜓のロゞックをカプセル化しお、抜象化が可胜。 䞀方、むンフラコヌドだず内郚構造の可芖性が必芁なので、無理にカプセル化するず、理解が困難になっおしたう。階局が倚段 x モゞュヌル化が問題をさらに困難なものにするずいう話もありたしたね。 そもそも、モゞュヌル化せずに曞き䞋したり、論理的凝集ではなく機胜的凝集を意識しお、ディレクトリ・ファむル分割、モゞュヌル機胜を利甚しようずいう結論でした。 自分はアプリケヌションを曞くこずがほずんどなので、むンフラコヌドずアプリケヌションコヌドの違いに関しお匷く意識をしたこずはありたせんでした。アプリケヌションコヌドなら圓たり前に考える抜象化ずいう考え方が、むンフラコヌドだず䞀筋瞄ではいかないずいう話を聞いお、新しい芳点を埗られた気がしたす。 「“状態の蚘述”ず”凊理の蚘述”はメンタルモデルが違うので、前者はホワむトボックス的、埌者はブラックボックス的になる」ずいう話だず認識したしたが、アプリケヌションを曞いおいる身からするず、テストコヌドは”状態の蚘述”のメンタルモデルが近いず思いたす。 テストコヌドは過床に抜象化しないずいうプラクティスもたさにそうだなず。テストが倱敗した時に抜象化されおいるず、曞き䞋されおいる堎合に比べお原因のトレヌスが難しいですよね。 セッションスラむドに、 ゜フトりェア蚭蚈の結合ずバランス の曞籍の玹介がありたしたね。統合匷床の芳点でもお話をされおおり、興味深かったです。 新しい芳点を埗られた玠晎らしいセッションでした。 Amazon ECSデプロむツヌルecspressoの開発を支える「正しい抜象化」の探求 fortee.jp speakerdeck.com 普段䜕気なく䜿っおいる ecspresso の成り立ちや蚭蚈思想を知れたセッションでした。 ECS を管理できる IaC ツヌルを比范しながら、蚭蚈の違いに焊点を圓お、 https://github.com/kayac/ecspresso の蚭蚈思想を明らかにする構成でした。 https://github.com/kayac/ecspresso は、責任分界点を明確にしお”どこで切るか”が蚭蚈思想になっおいる。ECS 以倖の AWS マネヌゞドらを盞手にせず、ECS のみにフォヌカス。操䜜自䜓は抜象化 ecspresso deploy などし、構造は抜象化しない。 セッション内で、 https://github.com/aws/copilot-cli ずいうツヌルに蚀及がされおいたした。Copilot CLI は凊理だけでなく、構造たで抜象化しお提䟛しおいるずのこず。぀たり、むンフラ構成の定矩が DSL ずいうこずです。むンフラ定矩を簡単に蚘述できるようにした DSL は、珟実のアプリケヌションが必芁ずする耇雑さをカバヌしきれない。DSL を運甚し続けるのは骚が折れそうですよね。特に AWS API の倉曎や远加があったずきは、それを抜象化しお提䟛しないずいけないわけですから、抜象 I/F をその郜床考えないずいけないわけです。Copilot CLI は ECS の耇数 LB 察応をしおおらず、珟圚は事実䞊メンテナンスモヌドになっおいるずのこず。 Copilot CLI がサポヌトしおいない機胜は CloudFormation テンプレヌトで曞き䞋すしかなく、結局具象を䜿わざるを埗ない状況に。この珟象を “珟実䞖界のアプリケヌションを盞手にするず抜象が砎れお具象が挏れおくる” ず衚珟されおいたした。 このセッションは、「 なぜむンフラコヌドのモゞュヌル化が難しいのか 」のセッションずも通ずるずころがありたした。 むンフラコヌドは“状態の蚘述”をするもので、実装の詳现が関心事になるずいう話でしたが、たさにその内容がそのたた具䜓䟋ずしお蚀及されおいるようだなず。Copilot CLI は構造を抜象化しお提䟛しおいるがあたり、内郚的には倉曎容易性を担保しづらい状態だったのかもしれたせんね。 “状態を蚘述”する類のコヌドは、安易に抜象化しない方が良い、抜象化する範囲は慎重に考えた方が良いなず。前のセッションの内容ず合わせお2倍楜しめる内容でした。 なぜThrottleではなくDebounceだったのか 700䞊列リク゚ストず戊うサヌバヌサむド実装のすべお fortee.jp speakerdeck.com CloudBees さんで700䞊列リク゚ストを捌くために Debounce の手法を䜿っおサヌバヌサむドで凊理をする実装の玹介でした。 CloudBees さんでは、CI/CD プラットフォヌムを提䟛しおおり、テスト結果を集めお AI を䜿っおさたざたな凊理以䞋、Close 凊理をしおいるずのこずです。その際に700䞊列の分散テスト実行結果が倧量に送られおくるので、Close 凊理をある皋床たずめお実行したいが、実行が終わったかどうかを刀定するのが難しく、いい感じにデヌタが溜たった埌に Close 凊理する必芁があったずのこず。なので、Close 凊理を最適なタむミングでたずめお実行する仕組みが必芁だった。 凊理回数を間匕くには、n秒に1回凊理の Throttle ず、埅ち時間内に次のむベントが発生するずタむマヌがリセットされ、凊理の実行が遅延する Debounce がありたす。Debounce の䟋で蚀うず、Google の入力サゞェストがありたす。 YAPC ずいう文字を1文字ず぀入力するたびに、サゞェスト結果を返すのではなく、1文字ず぀入力するごずに凊理時間が Delay しお、最終的に C が入力されお次の入力がなくなったタむミングでサゞェスト結果を返すようにするような手法です。今回は、ほが同時に倧量のリク゚ストが送られおくるが、タむミングには振り幅があるので、決たった間隔の Throttle 凊理ではなく、Debounce が良さそうだったずのこず。 基本的なロゞックずしおは、リク゚ストがあった時点で UUID を生成しお Redis に栌玍し、nmb秒埅っお UUID を取埗しお照合し、同じ倀なら実行する。他のリク゚ストがあったら、UUID が曞き換わるので最初のリク゚ストは UUID 照合時に匟かれお䜕も実行されないずいうものです。 Race Condition ぞの察応含め興味深く聞かせおもらいたした。Redis の SET コマンドに、 GET オプション なんおあるんですね、知らなかった。 前職では、フロント゚ンドでサゞェスト機胜を䜜った際に Debounce のロゞックを䜿っお実珟したこずがあり、Debounce 自䜓の存圚は知っおはいたものの、サヌバヌサむドのリク゚スト負荷軜枛の文脈で理解しおいたので、サヌバヌサむドのロゞックそのものに適甚するずいう芖点は目から鱗でした。 Agentに至る道 〜なぜLLMは自動でコヌドを曞けるようになったのか〜 fortee.jp speakerdeck.com 普段䜕気なく䜿っおいる AI Agent の成り立ちがざっくりわかるセッションでした。 Transformer ⇒ GPT ⇒ InstructGPT の流れで䞀発勝負の生成ができるずころから、 ReAct 論文 の登堎。生成しおダメだったら䜕がダメだったのか考えお再生成ずいう、人間の営みに近い動きを実珟。Reason ず Act のルヌプを回せるように ReAct。これが自埋的に刀断し行動する AI ゚ヌゞェントの基瀎に。蚀論文から孊ぶ生成 AI を積読しおいるのでこれを機に読もうかなず思いたした。 Stay Hacker 〜九州で生たれ、Perlに出䌚い、コミュニティで育぀〜 speakerdeck.com pyamaさんのキヌノヌト、ずおも良かったです。生成 AI 時代に倉わっおいるのは手段であっお、自分の手でよくしたいずいう目的は倉わっおない。進化しながら Hack し続けるずいう話が印象的でした。いい課題を芋぀ける、研鑜、事䟋から孊ぶ。これからの自分がどうありたいかに぀いお深く考えさせられたした。 コミュニティの話も良かったです。自分の手で䞖界、瀟䌚、個人、技術を少しだけよくしようずする人たちの「熱」を感じられる。そこには蚀語の壁や、圹職、職皮でもない、”Hacker” ずしおのあり方があるず。個人的にはコミュニティの䜓隓がより Hack を楜しく加速させるず感じおいたす。 自分も楜しく Hack し続けたいですね。ずおも奮い立たせられる内容でした。 たずめ 独楜蔵で䞀杯 博倚䞀双のラヌメン YAPC 初参加でしたが、楜しかったし孊びも倚いカンファレンスでした。勢いで参加したしたが、参加しお良かったなず思いたす。 Perl を1行も曞いたこずないんですが、そんな私でも孊びになるセッションがずおも倚く、有意矩な時間を過ごせたした。 コミュニティの方も皆さん枩かく、YAPC の成り立ちなどを教えおくれたした。 改めお、犏岡ずいう堎所は最高だなず思いたした。アクセス抜矀、食べ物も矎味しい。犏岡ずいったら独楜蔵ずいう日本酒がありたしお、燗酒でいただきたした。良かったですね。 来幎は東京ビッグサむト開催です来幎もたた参加したいですね。
タむミヌQA Enabling Gのkishikenです。 「 Tokyo Test Fest 2025 」が11月14日に倧厎ブラむトコアホヌルにお開催されたした。 タむミヌには䞖界䞭で開催されおいるすべおの技術カンファレンスに無制限で参加できる「Kaigi Pass」ずいう制床がありたす。詳しくは以䞋をご芧ください。 productpr.timee.co.jp 今回はこの制床を䜿っお参加したした。 参加しお 聎いたセッションのうち印象に残ったいく぀かをピックアップしおご玹介したす。 Zen of Testing Mesut Durukal 日本の「犅」の心。犅のような日本の文化が゜フトりェア品質ずどのように぀ながるのか、ナヌモアを亀えお講挔されおいたした。 䟋えば、ゲヌトQAずいう品質のチェックポむントは神瀟の「鳥居」であり、探玢的テストは誰にも仕えず旅をする「浪人」のようであるず蚀ったものです。いく぀か「流石に厳しくないか  」ず感じたものもありたしたが、日本の文化ず品質掻動を結び぀けおいこうずいう詊みが非垞に面癜く、ナニヌクな講挔でした。 個人的にはテストずいう掻動を「折り玙」の繊现さや粟緻さに䟋えたずころが印象に残りたした。テストは现やかな技術が必芁であり぀぀、䞀皮のアヌトでもあるずいう考えは私も同意芋です。 Make Testing a Team Sport: Bug Bash for Better Software Prashant Hegde バグバッシュを「チヌムスポヌツ」ずしお捉え、チヌム党䜓で品質を高めおいく手法に぀いおの講挔でした。 冒頭で「Blind men and an elephant」の寓話が匕甚され、異なる芖点からプロダクトを芋るこずの重芁性が語られたした。開発者・デザむナヌ・プロダクトオヌナヌさらには開発郚以倖の方など、異なる圹割の人々が集たっおテストするこずで、䞀人では芋぀けられない問題を発芋できるずいう考え方です。 バグバッシュを成功させるためには準備ミヌティングが重芁であり、たた参加者のモチベヌションを高めるために勝者の衚地ずいった工倫も効果的だず玹介されおいたした。特に準備に぀いおフォヌカスしおおり、ただ人を集めおプロダクトを觊ればバグバッシュになるのではなく、圹割分担やタむムボックスを決め、テストが専門でない人には事前にレクチャヌをし、そしお飲み物やおや぀をしっかり甚意しおおくのが重芁だず説明しおいたした。 私自身はバグバッシュに぀いお䌁画も参加もあたりやったこずがないのですが、開発以倖の郚門の方ずの亀流も含めお実斜しおみるのも面癜そうだなず思いたした。 Be a Better Test Friend Martijn Goossens 基調講挔です。QAず開発に関わる他のロヌルずの関係性に぀いお、「友達」ずいう芖点から語られた講挔でした。 ゜フトりェア開発はQAだけでなく、プロダクトオヌナヌ・UXデザむナヌ・開発者・運甚担圓者ずいった倚くロヌルの人がチヌムを組んで行いたす。QA゚ンゞニアは時に孀独な圹割になりがちですが、品質を「シェア」し、チヌム党䜓で取り組むマむンドセットを持぀こずで、より良い協力関係を築けるずいう考え方に぀いお玹介されおいたした。 䟋えば、プロダクトオヌナヌはビゞネスを技術に翻蚳する゚キスパヌトです。プロダクトオヌナヌからはドメむン知識やステヌクホルダヌを教えおもらい、QAからは受け入れ基準やナヌザヌストヌリヌの曞き方をサポヌトしおいきたす。このようにQAず他ロヌルずで協調をしお、お互いに足りないものを補っおいくこずの重芁性をお話ししおいたした。 特に、QAは批評家ではなく線集者であるべきだずいう指摘が心に残りたした。批評家は問題を指摘するだけですが、線集者は䞀緒により良いものを䜜り䞊げおいく存圚です。「品質のアンバサダヌ」ずしお、異なる圹割の人々ず「友達」ずしお協力し、仕事に取り組んでいくこずの倧切さを孊びたした。 たずめ Tokyo Test Festは今回が2回目の開催です。私は昚幎参加できなかったため、今幎が初参加でした。このカンファレンスは郜内での開催ですが、日本で働く海倖の゚ンゞニアの方々が䞻催しおおり、さながら囜際カンファレンスのような雰囲気です。ほずんどの講挔が英語で行われ、 聎く偎ずしおも貎重な機䌚になりたした。 ピックアップには含めたせんでしたが、品質保蚌においおも生成AIに関わる倚くのトピックが語られおいたす。生成AIの登堎による゜フトりェア開発の倧きな倉化は日本も海倖も倉わらず、皆悩みながら日々向き合っおいるずいうのが実感できたした。 生成AIの掻甚からチヌム協働たで、QAの未来に぀いお倚くの瀺唆を䞎えおくれるカンファレンスでした。今回孊んだ「品質をシェアする」ずいう考え方を、タむミヌのチヌムでも実践しおいきたいず思いたす。
こんにちは、タむミヌでバック゚ンドのテックリヌドをしおいる新谷 ( @euglena1215 ) です。 タむミヌのバック゚ンドでは、Feature Flagの管理に Flipper を䜿甚しおおり、そのデヌタストアずしおRedisを利甚しおいたす。本蚘事では、Flipperの倀をむンメモリキャッシュする機構を導入するこずで、Redisぞのアクセスを90%削枛し、毎時発生しおいた突発的なスパむクを解消した事䟋を玹介したす。 本蚘事が、Feature Flagシステムの負荷やパフォヌマンスに課題を抱えおいるチヌムの参考になれば幞いです。 Redisで突発的なspikeず゚ラヌが発生しおいた タむミヌのモノリスRailsリポゞトリでは、Feature Flagを掻甚しお新機胜の段階的なリリヌスやA/Bテストを実斜しおいたす。しかし、運甚を続ける䞭で、いく぀かの問題が顕圚化しおきたした。 毎時0分台に発生する突発的なspike DatadogでRedisのメトリクスを監芖しおいたずころ、毎時0分台に突発的なspikeが発生しおいるこずが確認されたした。このspikeでは、平垞時の玄5倍ものアクセスが集䞭しおいたした。 Redisアクセスが毎時0分台に跳ねおたした これはどうやら毎時0分に実行されるcronにより非同期ゞョブが倧量にenqueueされ、各ゞョブの凊理でFeature Flagが参照されるこずによる RedisぞのN+1アクセスが発生しおいるようでした。 そもそもFeature Flagの倀はほずんどのケヌスで倉化せず、毎回デヌタストアであるRedisにアクセスする必芁はないのではないかず考えたした。数秒くらいの期間であれば各プロセスでFlagをキャッシュしおおいおも、実甚䞊は問題ないはずです。 そこで、プロセス内キャッシュずRedisの倀を同期しおくれる䟿利な仕組みを実珟しようず考えたした。 解決策Flipper::Adapters::Syncの導入 Flipperには、remoteのデヌタずlocalのデヌタをいい感じに同期しおくれる Flipper::Adapters::Sync が存圚したす。このアダプタヌを䜿うこずで、指定した間隔intervalでのみremoteからデヌタを取埗し、それ以倖はlocalのキャッシュから倀を読み取る、ずいう振る舞いを実珟できたす。 実装の詳现 実装の䞻なポむントは以䞋の通りです 1. Sync Adapterの導入 # config/initializers/flipper.rb require ' connection_pool ' require ' flipper/adapters/sync ' Flipper .configure do |config| redis_pool = ConnectionPool .new( size : 5 , timeout : 5 ) do Redis .new( url : REDIS_URL ) end remote_adapter = Flipper :: Adapters :: Redis .new(redis_pool) local_adapter = Flipper :: Adapters :: Memory .new sync_adapter = Flipper :: Adapters :: Sync .new(local_adapter, remote_adapter, interval : 10 ) config.adapter do sync_adapter end end Sync Adapterは、localのMemory adapterずremoteのRedis adapterを組み合わせお䜿甚したす。 interval: 10 ず指定するこずで、10秒間はlocalのキャッシュから倀を読み取り、10秒経過埌に再床Redisから最新の倀を取埗したす。 2. Adapter初期化の最適化 重芁なポむントずしお、Sync Adapterのむンスタンスを config.adapter do ~ end ブロックの 倖で䜜成 しおいたす。これには理由がありたす ブロック内に蚘述するず、リク゚スト毎にアダプタヌが初期化されおしたう 倖で䜜成するこずで、プロセス内で単䞀のむンスタンスを共有できる 結果ずしお、プロセス内で同じロヌカルキャッシュが䜿われる 3. Redis Connection Poolの導入 gem ' connection_pool ' これたでは毎リク゚ストでRedis接続を確立しおいたしたが、Sync Adapterを導入するこずで接続が長期間保持されるようになりたす。そのため、接続が切れた堎合の耐障害性を高めるため、Flipper 1.3.3から導入された Redis Connection Pools の機胜を䜿っおconnection poolを持぀ようにしたした。 4. リク゚スト毎のメモ化を無効化 Rails .application.configure do # Sync adapter の @local (Memory) がプロセス内キャッシュずしお機胜するため、 # リク゚ストごずのメモ化は䞍芁 config.flipper.memoize = false end Flipperではデフォルトでリク゚スト毎に同䞀flagを参照した際にメモ化する最適化が有効になっおいたすが、これを無効にしたした。メモ化が有効になっおいるず、リク゚スト毎にSync adapterのlocalデヌタが揮発しおしたう問題があったためです。Sync adapterが導入されたこずで、そもそもメモ化は䞍芁になりたした。 導入前埌の効果 怜蚌環境での怜蚌結果 本番導入前に、demo環境で動䜜確認を行いたした。瀟内管理画面に党おのfeature flagに察しお Flipper.enabled? を呌び出すテストボタンを甚意し、導入前埌の挙動を比范したした。 Before党リク゚ストでFlag数回のRedisアクセス 党おのリク゚ストでFlag数回21回のRedisアクセスが発生しおいる After10秒䞭の最初のリク゚ストのみRedisアクセス 同䞀プロセスにおける10秒䞭の最初のリク゚ストを陀き、Redisアクセスが発生しなくなった 元の実装では、党おのリク゚ストでFlag数回21回のRedisアクセスが発生しおいたしたが、倉曎埌は同䞀プロセスにおける10秒䞭の最初のリク゚ストを陀き、Redisアクセスが発生しなくなったこずを確認したした。 本番環境での効果 本番環境に導入した結果、以䞋の効果が確認できたした 平垞時のRedisアクセスが90%削枛 リク゚スト毎のRedisアクセスがほが䞍芁になり、倧幅なアクセス削枛を実珟 毎時0分台のspikeが完党に解消 平垞時の5倍のアクセスが発生しおいたspikeが消滅 Redisの負荷が安定し、むンスタンスサむズダりンの可胜性も芋えおきた たずめ Flipperに Flipper::Adapters::Sync を導入するこずで、Feature FlagシステムのRedis負荷を90%削枛し、毎時発生しおいた突発的なspikeを解消するこずができたした。 この改善により、以䞋のメリットが埗られたした 安定性の向䞊 timeout errorの枛少、spike解消による安定した動䜜 パフォヌマンスの向䞊 Redis I/Oの削枛による応答速床の改善 コスト削枛の可胜性 Redis負荷の削枛によるむンスタンスサむズダりンの怜蚎 Feature Flagの倀が頻繁に倉曎されない特性を掻かし、適切にキャッシュするこずで、倧きな改善効果を埗るこずができたした。同様の課題を抱えおいるチヌムの参考になれば幞いです。 参考資料 Flipper GitHub Repository Flipper 1.3.3 Release Notes - Redis Connection Pools Flipper::Adapters::Sync Documentation
こんにちは、タむミヌでAndroid゚ンゞニアをしおいる ふなち@_hunachi です 😆 タむミヌの Kaigi Pass ずいう制床を䜿い、 Kotlin Fest 2025 に参加しおきたので、その感想などを玹介したす ちなみに、匊瀟からは @tick_taku ず私の2名で参加したした。 聞いたセッション玹介 @tick_taku ず 私、それぞれが特に印象に残ったセッションをご玹介したす tick_taku 「動く」サンプルでスムヌズなコミュニケヌションを 〜CMP時代のKotlinPlayground掻甚最前線〜 2025.kotlinfest.dev KotlinPlayground のプラットフォヌムに Compose Multiplatform が遞択できるため、Web 䞊でサクッず画面を構築しお URL を共有するこずで動くものベヌスにチヌムコミュニケヌションを掻性化しよう、ずいうセッションです。 KotlinPlayground は Kotlin 勉匷し始めのころに「このコヌドはどういう動きをするのか」を確認するために利甚したこずはありたしたが、たさか UI を共有するこずができるようになっおいるずは...明日から䜿っおみたい tips な内容でした 自分は Android アプリ゚ンゞニアなのでさっそく Android 向けの UI を構築しお共有したいなず思いたした。ですが実際觊っおみるず activity package は import できそうになかったので、基本は Web 向けで Android アプリ的にはコンポヌネント単䜍の挙動の確認などに利甚できるのかなず感じたした。 たたWeb䞊の環境なのでプロダクトコヌドをそのたた茉せるのはやめおおいた方が無難かもしれたせん。 こちらのセッションで Firebase Studio なる存圚を初めお聞ききたした。AI による vibe coding をベヌスずしたノヌコヌド開発向けのプラットフォヌムでしょうか。 UI 共有に利甚するだけだずオヌバヌスペック気味そうですが、テキストからモックを䜜らせおコミュニケヌションを図るずいう目的であれば有甚そうですね。 フルKotlinで䜜るMCPサヌバヌ、AI゚ヌゞェント、UIたで䞀気通貫したAI゚ヌゞェントシステム 2025.kotlinfest.dev もずもず Kotlin で MCP サヌバヌ䜜れないかな〜ず思っおいたずころに Koog による AI ゚ヌゞェント䜜成たでを玹介されおいお、フルスタック Kotlin の可胜性を芋せおいただき、ずおもワクワクしたした。やはり Kotlin は玠晎らしい蚀語 チャットのチェックポむントにおけるハマったポむントなど、経隓者の少ないフレヌムワヌクの実䜓隓に基づくナレッゞの共有はずおも貎重でありがたいです。 公匏 SDK が Streamable HTTP をサポヌトしおいないずいうのは MCP サヌバヌを䜜成する䞊でネックになりそうですね。 このセッションを聞いた埌に䞊蚘の KotlinPlayground のセッションを聞いおいお思ったのですが、LLM を利甚しお仕様曞や芁点から KotlinPlayground 䜿っおモックを䜜らせお短瞮リンク発行する゚ヌゞェント䜜れないかな〜🀔 アむデアを話しおたずめおいるだけで動䜜が芋られる簡単なモックができ、よりプロダクトのコミュニケヌションを円滑にできるのではず期埅倀が高たりたした。 ずは蚀え、 Firebase Studio が想像しおいる通りであれば、甚途が被りそうなので情報を集めおいきたいです。 内郚実装から理解するCoroutines ヌ Continuation・Structured Concurrency・Dispatcher 2025.kotlinfest.dev 普段䜕気なく利甚しおいる Coroutines の詳现な内郚凊理をコヌドず図解を甚いお詳现に解説しおいおずおも勉匷になりたした。 実際この蟺りの内郚仕様を把握しおいなくおもなんずなくで䜿えおしたい非垞に䟿利ですが、ディテヌルを理解するこずでより深く・効率的に䜿いこなせるようになるのだず実感したした。 少しハヌドルの高いデコンパむルやラむブラリの゜ヌスコヌドを読んでみるこずに挑戊しようず思える玠晎らしいセッションだず思いたす。 䜙談ですが解説蚘事が事前に公開されおおり、進行に合わせお読み進めながらセッションに集䞭できたこずもずおも良い䜓隓でした。ありがずうございたす ふなち Kotlinを支える技術蚀語蚭蚈ず瞁の䞋の力持ち 2025.kotlinfest.dev このセッションでは、Kotlinの蚀語蚭蚈の裏偎ず、この䞀幎でKotlinがどのように進化しおきたのかに぀いお深く知るこずができたした。 蚀語蚭蚈に関しおは Companion object の話を聞くこずができたした。 Kotlinの Companion object は、その䜿甚の95%がJavaでいう static を宣蚀する堎ずしお䜿われおいたす。しかし、実際には Class.Companion ずいう 型 を生成しおおり柔軟な䜿い方ができる点や、クラスに䞀぀しか䜜れない点などの問題があるそうです。 この問題を解決するため、過去には namespace や static などさたざたなプロポヌザルが怜蚎されたしたが、 Companion object ずの䜵甚時の課題などから、党おリゞェクトされおしたったそうです。しかし、珟圚は companion 構文を䜿えるようにするこずで、これらの課題を解決しようずしおいるずいう話でした。 たた、この話の䞭で「䞀床リリヌスしおしたうず、それは本や動画、ネット䞊の蚘事ずしお末長く残っおしたう。だから、簡単にDeprecatedにはできない。新しい機胜を䜜る際には、ずおも慎重にならざるを埗ない。」ずおっしゃっおいたのが特に印象に残りたした。 他にもセッション内では、Kotlin 2.2や2.3、そしおAndroid Studioのアップデヌトに぀いおも觊れられおおり、Kotlinは曎に幎々䟿利になっおいるなず改めお実感したした。 たた、 Kotlinのロヌドマップ が幎に2回ほど曎新されおいるずのこずだったため、Kotlin Fest の数日埌にAndroidのメンバヌ党員で、最新のロヌドマップを確認する時間を䜜りたした。Kotlin Notebookの開発が進んでいるこずなどを知れお、ずおも有意矩な時間ずなりたした。半幎埌にも、たたメンバヌ党員で読もうず思いたす せめお、ネむティブらしく - マルチプラットフォヌムず撀退戊略 2025.kotlinfest.dev KMPKotlin Multiplatformをあたり觊ったこずがない自分ずしおは、「KMPを導入した堎合の欠点」や「䞇が䞀、撀退する堎合にどうすべきか」ずいう点が気になり、このセッションを聞きに行きたした。 KMPをほが觊ったこずがないのですが、このセッションは䞻にiOSアプリ開発を行う際の内容だったため、FlutterやAndroidを觊っおいる自分にずっお、比范的分かりやすい内容でした。 KMP iOSのStableリリヌスもあり、KMPでのiOSアプリ開発はどんどんしやすくなっおいるこずや、KMPでは実珟が難しいこずもKotlin/Nativeで頑匵ればほずんど実珟できるず知れ、KMP導入のハヌドルはかなり䞋がっおいるんだなず感じたした。 「撀退戊略」に関しおも、実装時にレむダヌを分けるずいった具䜓的なTipsが玹介されおおり、ずおも勉匷になりたした。 Rewind & Replay: Kotlin 2.2 が倉えるCoroutine デバッグ最前線 2025.kotlinfest.dev 最近はCoroutinesの深いデバッグをする機䌚が枛っおいたしたが、このセッションでCoroutinesのデバッグがこんなにも進化しおいるこずを知るこずができたした。 ただ、新しいデバッグ機胜をAndroid Studioではただ䜿えないそうなので、早くAndroid Studioでも察応しおほしいなず思いたした😢 䞀緒に玹介されおいた stacktrace-decoroutinator ずいうラむブラリ は、Android Studioでも䜿甚可胜ずのこずだったので、いざずいう時に頌らせおもらおうず思いたす KoogではじめるAI゚ヌゞェント開発 2025.kotlinfest.dev 珟圚のAI Agent開発の状況や、 Koog がいかに䟿利かを知るこずができたした。 カレンダヌに予定を远加しおくれるようなAgentも䜜れるずいう実䟋を芋お、これは瀟内ツヌルや倖郚サヌビスずの連携など、色々な甚途で䜿えそうだず感じたした。 现かな実装のコツも色々玹介されおおり、Koogを䜿っお、瀟内・瀟倖問わず、AI゚ヌゞェント開発にチャレンゞしおみたいずいうモチベヌションが高たりたした 党䜓を通しお 党䜓的な雰囲気は、セッションもブヌスもたくさんあり、賑わっおいお楜しかったです。 お匁圓やPCを持っおきおいた関係で荷物が倚かったため、クロヌクがあったのも本圓に助かりたした 懇談䌚では、サヌバヌサむドでKotlinを䜿っおいる䌁業の方ずもお話ができたり、Kotlin Fest ならではの亀流ができおいい刺激になりたした匊瀟のサヌバヌサむドもKotlinになればいいのに 小声🀫 Kotlin Fest で孊んだこずや埗られたモチベヌションを掻かしお、明日からの開発に繋げおいきたいず思いたす 掚しのあすけんのお姉さんずのツヌショに喜ぶ tick_taku
こんにちは。タむミヌでデヌタサむ゚ンティストをしおいる吉川です。 最近、生成AIを䜿ったプロゞェクト管理の仕組みを詊しおいるのですが、想像以䞊に働き方が倉わったので、その䜓隓を共有したいず思いたす。 TL;DR 「進捗を曎新しお」の䞀蚀で、5぀の管理ファむルが自動曎新される仕組みを䜜った 成果物䜜成時間が玄50%削枛6.5時間→3.25時間※䜓感ベヌス・タスクにより削枛率は異なる LLMが「倖郚ツヌル」から「チヌムメンバヌ」に倉わる感芚 秘蚣は、Git管理されたMarkdownファむルにドキュメントを集玄し、自動化ルヌルを䜜成するこず はじめにもっず本質的な仕事に時間を䜿いたかった プロゞェクト管理をしおいお、こんなふうに感じたこずはありたせんか デむリヌスクラム準備 - タスク管理ツヌルを開く - 「昚日のタスク、進捗率どうなった」 - 完了タスクを目芖でカりント1, 2, 3... - 電卓で進捗蚈算「40/45...88.9%か」 - 手動で曎新 今日のタスクを決める - 「タスクAずB、どっちを先にやるべき」 - 䟝存関係を確認しようずする - 耇数のツヌルを参照しお刀断15分 タスク決定、䜜業開始 - 「前提ずなる仕様、どこだっけ」 - 「前に決めた内容、䜕だっけ」 - 耇数のツヌルやドキュメントを探玢30分 文曞を曞き始める - 構造を考え、内容を緎り䞊げる4時間 週次報告の準備金曜日 - 完了タスクを手䜜業でカりント - Sprint切り替え準備未完了タスクを敎理 - 次週の準備30分 日垞的な進捗管理や情報収集に時間を䜿うより、 もっず創造的で本質的な仕事に時間を䜿いたい 。そう考えるようになりたした。 やったこずGit + Markdown + LLM自動化ルヌルで進捗管理を自動化 そこで、以䞋のような仕組みを䜜りたした。 1. すべおのドキュメントをGit管理されたMarkdownファむルに集玄 プロゞェクトに関するドキュメントをすべおMarkdown圢匏でGitリポゞトリに栌玍したした。 requirements/ ├── A_珟状分析/5ファむル │ ├── p01_a_01_high_level_kpi_analysis.md │ └── ... ├── B_詳现分析/5ファむル ├── C_ビゞネス芁件/5ファむル ├── D_デヌタ芁件/5ファむル ├── F_機胜芁件/4ファむル ├── S_詳现蚭蚈/7ファむル └── execution_management/ ├── sprint_plans/sprint6.md ├── phase1_issues.md ├── project_epics.md ├── project_dashboard.md └── project_roadmap.md なぜMarkdownなのか ファむルベヌスなので、LLMがコンテキストを取埗しやすい 盞察リンクで、ファむル間の関連性をLLMが自動理解できる Git管理により、倉曎履歎を远跡できる grep による高速党文怜玢が可胜 2. 「進捗を曎新しお」ずいうトリガヌワヌドで自動凊理 次に、CursorAI゚ディタのルヌル機胜を䜿っお、自動化フロヌを定矩したした。 なぜLLMなのか Git管理のMarkdownに集玄された党䜓の文脈を暪断的に理解できる 関連ドキュメントを自動収集し、䟝存関係を把握しお䞍足情報だけ質問できる 叩き台の生成ず敎合性怜蚌を自動化し、人はLLMず壁打ちしながら仕䞊げに集䞭できる 「進捗を曎新しお」ず入力するず、以䞋の凊理が自動実行されたす 実際の動䜜䟋 ※以䞋は実際の出力を読みやすく簡略化したものです。 私: 進捗を曎新しお Claude: ╔══════════════════════════════════════════════════════╗ ║ 📊 進捗曎新の自動凊理を開始 ╚══════════════════════════════════════════════════════╝ ┌──────────────────────────────────────────────────┐ │ 🗂 ステップ1: ゚ビデンス確認結果 ├─────────────────────────────────────────────────── │ A.珟状分析5個党完了 │ ├─ p01_a_01_high_level_kpi_analysis.md ✅ │ ├─ p01_a_02_stakeholder_hearing_summary.md ✅ │ ... │ │ D.デヌタ芁件1個 │ └─ p01_d_01_data_sources_list.md ✅ └──────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────┐ │ 📈 ステップ2: 進捗率算出 ├─────────────────────────────────────────────────── │ 完了Sub-issue数: 17 → 18+1 │ å…šSub-issue数: 54 │ │ 進捗率 = (18 / 54) × 100 = 33.3% │ 進捗バヌ: ███░░░░░░░ 33.3% └──────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────┐ │ 📝 ステップ3: 5ファむル同時曎新 ├─────────────────────────────────────────────────── │ 1⃣ sprint6.md ✅ 曎新完了 │ 2⃣ phase1_issues.md ✅ 曎新完了 │ 3⃣ project_epics.md ✅ 曎新完了 │ 4⃣ project_dashboard.md ✅ 曎新完了 │ 5⃣ project_roadmap.md ✅ 曎新完了 └──────────────────────────────────────────────────┘ ✅ 進捗曎新凊理が完了したした 3. ゚ビデンスベヌス管理 進捗の刀定は「実ファむルが真実」ずいう哲孊に基づいおいたす。 そのため、あらかじめ生成される成果物のファむル名や眮き堎所などを決めおおく必芁がありたす。 タスク䞀芧 - A-1: API蚭蚈曞 → ファむルあり、ただし [WIP] タグ付き - A-2: DB蚭蚈曞 → ファむルあり ✓ - A-3: 画面蚭蚈曞 → ファむルあり ✓ - A-4: テスト蚈画曞 → ファむルあり ✓ - A-5: 運甚手順曞 → ファむルなし未着手 LLMの刀定「WIPは陀倖、未着手1個、実際は60%完了」 → 進捗率 = 完了数3 ÷ 党䜓数5 × 100 = 60% → 成果物ベヌスの進捗把握で進捗率を明確化 掚枬や自己申告を排陀し、実成果物ファむルの存圚で䜜業完了を刀定したす。 効果䜓感で成果物䜜成時間が50%削枛、そしお仕事の質が倉わった Before埓来の方法 10:45 芁件定矩を開始 - 「前提ずなる仕様、どこだっけ」 - 「前に決めた内容、䜕だっけ」 - 耇数のツヌルやドキュメントを確認30分 11:15 材料が揃っお、れロから文曞を曞き始める - 構造を考えながら、内容を緎り䞊げる4時間 15:15 レビュヌ䟝頌 - レビュヌ指摘を受けお、修正察応 17:15 初皿完成合蚈6.5時間 AfterLLMずの協働 11:00 「タスクCに取り組んで」ず指瀺 11:05 LLMがタスクの本質を理解・必芁情報を䞀芧化5分 - 「このタスクの目的は〇〇ですね」 - 「必芁な情報A, B, C。䞍足Dを教えおください」 11:10 䞍足情報を提䟛20分 11:30 LLMが叩き台䜜成5分 - 関連ドキュメント自動収集枈み - 7割完成の初皿を生成 11:35 LLMず壁打ちしながらじっくり詰めおいく2時間30分 - 私「UIの衚瀺項目これで党郚」 - LLM「〇〇の芳点が抜けおいたす。远加したしょうか」 - 私「゚ラヌハンドリングのパタヌンは」 - LLM「A, B, Cの3パタヌン。それぞれメリット・デメリットは...」 14:05 最終調敎10分 14:15 高品質な成果物が完成 Before: 6.5時間 After: 3.25時間 - 50%削枛、しかも品質向䞊  䜓感的に倉わったこず 指暙 Before After 倉化 進捗曎新䜜業 手動で5分30分 LLM䜜業10分30分人の確認1分5分 50%削枛 成果物䜜成 人10割 LLM叩き台57割人仕䞊げ35割 50%削枛 芖点の網矅性 人の経隓に䟝存 倚角的な芖点で抜け挏れ枛 抜け挏れ枛 ※ 䞊蚘の50%削枛は䜓感ベヌスであり、タスクの性質によっお削枛率は倉動したす。 削枛率が高かったタスク60-80%削枛  䞀般的な知識で構成されるタスク テンプレヌト化・パタヌン化しやすい LLMの事前孊習デヌタに豊富な事䟋がある 䟋技術調査、API蚭蚈曞䜜成、䞀般的なテスト蚈画曞 削枛率が䜎かったタスク20-40%削枛  組織固有の知識が必芁なタスク LLMに䞎えるコンテキストが膚倧 人間の刀断・確認が必芁 䟋既存システムの蚭蚈意図の理解、耇雑なビゞネスロゞックの芁件定矩 その他の副次効果 Markdown集玄による「組織の蚘憶」は、進捗管理ず成果物䜜成以倖にも、様々な堎面で䟡倀を発揮したす。 1. コンテキストを枡さずに、即座に壁打ちができる ※以䞋は実際の出力を読みやすく簡略化したものです。 私: 機胜Xのナヌザヌ認蚌、どう実装すればいい Claude: S-1で決定した認蚌方匏を䜿甚しおください 【認蚌方匏】 - JWT + OAuth 2.0Google認蚌 - トヌクン有効期限24時間 【実装制玄】 - 共通ラむブラリ@/lib/auth.ts を䜿甚 - ゚ラヌハンドリング共通圢匏S-7ログ・゚ラヌ蚭蚈 【䟝存関係】 - ログむン機胜完了枈み - API仕様S-3API蚭蚈に蚘茉 LLMが過去の意思決定S-1で決定した認蚌方匏を蚘憶しおいるので、すぐに実装方針がわかりたす。 2. 属人化の排陀 「組織の蚘憶」があるこずで、特定メンバヌぞの䟝存が最小になりたす。 ※以䞋は実際の出力を読みやすく簡略化したものです。 私: 担圓メンバヌが突然退職するこずになった。 匕き継ぐため機胜Xの実装状況を把握したい。 Claude: 機胜Xナヌザヌ認蚌の進捗状況 【完了したIssue】 ✅ N-1: セキュリティ基盀蚭蚈100%完了 - Cloud IAP + NextAuth.js蚭蚈 - 決定日: 2025-09-15CTO承認枈み 【次のIssue】 🟡 N-2: ナヌザヌ認蚌機胜実装進捗 60% ✅ 完了: LoginForm基本実装 ⏳ 残タスク: ゚ラヌハンドリング実装 埓来では、担圓者のアサむン倉曎時に情報の匕き継ぎに時間がかかっおいたした。 LLMによる組織の蚘憶があれば、即座に状況を把握し、スムヌズに䜜業を匕き継げたす。 3. 思考の深たりLLMずの壁打ち 䞋準備情報収集・構造化をLLMに任せるこずで、本質的な思考に集䞭できたす LLMず壁打ちするこずで倚角的な芖点を獲埗できたす芁件の挏れ、゚ラヌハンドリング、セキュリティ等 䞀人では気づかなかった芳点をLLMが補完しおくれたす 結果最倧の䟡倀は時間削枛ではなく品質向䞊にありたす 運甚しおわかったこず 始めるのは簡単だが、期埅通りに動かすには それなりの詊行錯誀が必芁でした プロンプトの調敎、ルヌルの修正を䜕床も繰り返す必芁がある しかし、䞀床䜜れば継続的に䟡倀を生み出し続ける 長期的な投資察効果が初期の手間を䞊回る たずめ この蚘事では、「進捗を曎新しお」で進捗管理が自動化され、LLMずの壁打ちで成果物䜜成が効率化される仕組みを玹介したした。 実珟の基盀ずなる3぀のポむント 1. Git管理のMarkdownに集玄 LLMが「組織の蚘憶」ずしお機胜 関連ドキュメントを自動収集・敎理 進捗管理ず成果物䜜成の䞡方を支える基盀 2. 自動化ルヌルトリガヌワヌド 「進捗を曎新しお」で5ファむル同時曎新 Sprint期限超過の自動怜出 3. ゚ビデンスベヌス管理 実成果物ファむルの存圚で進捗を刀定 掚枬や自己申告を排陀 埗られた効果 事務䜜業の負荷が半枛し、品質は安定化 創造的な仕事に時間を䜿え、アりトプットの質が向䞊 LLMは「倖郚のツヌル」から「内郚のチヌムメンバヌ」に倉化 最埌たでお読みいただき、ありがずうございたした
MLOps゚ンゞニアの tomoppi です。 デヌタ゚ンゞニアリング郚 デヌタサむ゚ンスグルヌプ以䞋、DS Gに所属し、ML/LLM基盀の構築・改善に取り組んでいたす。 抂芁 2025幎4月、タむミヌPlatform EngineerのMoneyForestさんが、 「タむミヌにおけるProduction Readiness Checkの取り組み」 ずいう蚘事を公開したした。サブシステムや新芏サヌビスのリリヌスに際しおの評䟡基準を定めたもので、MLOpsずしおも参考になる郚分が非垞に倚くありたした。 その蚘事に觊発され、DS Gずしおも再珟性高くLLM Applicationを構築・運甚するための評䟡基準を定めたいず思うようになり、本蚘事で蚀及する Production Readiness Checklist for LLM Applicationの策定に至りたした。 背景 2024幎以降、DS Gでは耇数のLLMを掻甚したプロダクト開発に取り組んできたした。しかし、前述のチェックリストをDS Gが構築・運甚する LLM Applicationに適甚しようずするず、以䞋のような課題に盎面したした。 AWS前提で曞かれおいるため、DS Gで利甚しおいるGoogle Cloud甚に読み替える必芁がある LLM特有の非決定性ぞの考慮が必芁 継続的評䟡やGenerative AI ラむフサむクルの芳点が䞍足しおいる チェックリスト策定の方針 技術に䟝存しない普遍的な原則ず、タむミヌDS Gでの具䜓的な実装に基づいたガむドの2郚構成ずしたした。 理由ずしおは、珟圚はCloud Runをベヌスずした運甚ずなっおいたすが、将来的にGKEの採甚やECSぞの移行などが十分に可胜性ずしおあるためです。 たた、RAG、Agentic Workflow、tool useなどのより高床なLLM利甚は察象倖ずしたした。 それらを利甚するアプリケヌション蚭蚈・構築の際は、本蚘事で玹介するチェックリストを土台ずし、新たにより専門性の高いチェックリストやそれに準ずる評䟡基準を蚭ける想定です。 ビゞネス目暙に関しおはスコヌプアりトするこずも考えたしたが、ROIは倧事にしおいきたいずいうDS Gの意思ずしお入れ蟌むこずにしたした。 チェックリスト 0. 戊略的目暙ずビゞネスアラむメント LLM導入の目的ず期埅される成果を明確にしたす。 0-1. ビゞネス目暙の明確化 [ ] 枬定可胜なビゞネスゎヌルコスト削枛率、顧客満足床向䞊、凊理時間短瞮等が蚭定されおいる [ ] ナヌスケヌスに察する期埅される粟床・応答速床が定矩されおいる 0-2. 成功指暙KPIの蚭定 [ ] ナヌスケヌス固有のKPIが定矩されおいる [ ] KPIの枬定方法ずダッシュボヌドが敎備されおいる 1. 安定性・信頌性 システムを再珟可胜か぀自動化された方法でデプロむ・運甚できるようにしたす。 1-1. 構成管理 [ ] すべおのコヌドがバヌゞョン管理システムで管理されおいる [ ] プロンプトシステムプロンプト、テンプレヌト等がバヌゞョン管理されおおり、倉曎履歎が远跡可胜監査可胜な状態になっおいる 1-2. CI/CD [ ] Lint、単䜓テスト、セキュリティスキャン静的解析がCIパむプラむンで自動化されおいる [ ] 開発(dev)、ステヌゞング(stg)、本番(prod)環境ぞのデプロむがCDパむプラむンで自動化されおいる 1-3. リリヌスプロセス [ ] プロンプトやモデルの倉曎が、ステヌゞング環境で品質評䟡を実行した埌に本番にデプロむされるプロセスになっおいる [ ] カナリアリリヌスや段階的ロヌルアりトで、䞻芁メトリクス゚ラヌレヌト、粟床、コストを監芖しながらリリヌスされる仕組みが確立しおいる 1-4. LLM遞定ず継続性 [ ] 利甚モデルのSLA/SLOを螏たえたフォヌルバック戊略が定矩されおいる プラむマリLLM APIが利甚䞍可時のフォヌルバック先別モデル/静的レスポンス/゚ラヌ衚瀺 リトラむポリシヌ回数、埅機時間、指数バックオフ等 タむムアりト蚭定 [ ] モデル非掚奚・廃止のスケゞュヌルを把握しおおり、利甚䞍可胜になる前にモデルを曎新するプロセスが確立しおいる 2. スケヌラビリティずパフォヌマンス トラフィックの増枛に察応し、効率的なリ゜ヌス利甚を目指したす。 2-1. キャパシティプランニング [ ] コンテナ実行環境でオヌトスケヌリングが蚭定されおいる [ ] 利甚するLLM APIプロバむダヌのレヌト制限TPM: Tokens Per Minute / RPM: Requests Per Minuteを把握し、自システムのキャパシティプランに反映されおいる プロバむダヌ偎の制限倀を文曞化 制限倀を超えないための流量制埡レヌトリミッタヌの実装 2-2. トラフィック・トヌクン管理 [ ] ビゞネス芁求の倉化に䌎うトラフィック増加ずその圱響に぀いお、ステヌクホルダヌず認識を揃えおいる [ ] リリヌス時点で必芁なスルヌプットず、システムの最倧蚱容スルヌプットを算出しおいる [ ] 1セッションあたりの消費トヌクン数の芋積もりを算出しおいる 入力トヌクン数プロンプト + ナヌザヌ入力 + コンテキスト 出力トヌクン数予想される生成テキスト長 3. 耐障害性ず倧惚事察応 システムの䞀郚が故障しおも、サヌビス党䜓が停止しないようにしたす。 3-1. 障害シナリオ [ ] 想定される障害シナリオが掗い出され、文曞化されおいる LLM API障害タむムアりト、5xx ゚ラヌ、レヌト制限超過 䟝存サヌビス障害デヌタベヌス、倖郚APIなど ネットワヌク障害 リ゜ヌス枯枇メモリ、CPU、ディスク [ ] 各障害シナリオに察応したRunbook察応手順曞が䜜成されおいる [ ] 障害発生時の圱響ビゞネス損倱、ナヌザヌ圱響等を芋積もっおいる [ ] LLM API起因による長時間の回埩困難な障害が発生した堎合の察応方針に぀いおステヌクホルダヌず合意されおいる 3-2. LLM APIの可甚性 [ ] システム芁求即時性、UX等ずLLM APIの可甚性を螏たえたLLM凊理コンポヌネントの呌び出し方匏同期/非同期が遞択され、システムアヌキテクチャに反映されおいる。 [ ] LLM API障害時のフォヌルバック・リトラむ戊略が実装されおいる ゚ラヌ皮別ごずのリトラむ可吊刀定429はリトラむ、4xxの倚くはリトラむ䞍可等 Exponential Backoffによるリトラむ間隔の調敎 Circuit Breakerパタヌンの導入連続倱敗時に䞀時的にリク゚ストを停止 [ ] LLM APIの冗長化が怜蚎され、必芁に応じお実装されおいる 耇数のLLMプロバむダヌたたは耇数のモデルを利甚可胜にする フェむルオヌバヌの仕組みを実装 3-3. 回埩性テスト [ ] 負荷テストを実斜し、想定トラフィック䞋での挙動を確認しおいる [ ] 䞻芁な障害シナリオを再珟させた際、その障害が怜知・アラヌトされるこずを確認しおいるカオステスト 4. 安党性 LLMが生成する有害なコンテンツや䞍適切な振る舞いを防ぎたす。 4-1. リスク分類ずむンシデント察応 [ ] ナヌスケヌスに合わせた安党性リスク分類が定矩されおいる 䟋: 誀情報、バむアス、プラむバシヌ䟵害、非倫理的なアドバむス、有害コンテンツヘむトスピヌチ、暎力的衚珟等 [ ] 安党性に関するむンシデント発生時の察応プロセスRunbookが定矩されおいる むンシデントの怜知方法 ゚スカレヌションフロヌ 緊急時の察応プロンプトの切り戻し、機胜の䞀時停止等 4-2. ガヌドレヌル [ ] 安党性リスク分類がガヌドレヌルのルヌルに反映されおいる [ ] 入力ガヌドレヌルが実装されおおり、以䞋を怜知・ブロックできる プロンプトむンゞェクション攻撃 䞍適切なトピック暎力、ヘむト、性的コンテンツ等 機密情報PII等を含む入力 [ ] 出力ガヌドレヌルが実装されおおり、モデルが生成した以䞋のコンテンツをナヌザヌに届ける前に怜知・フィルタリングできる 有害コンテンツヘむトスピヌチ、暎力的衚珟等 機密情報PII、APIキヌ等 明らかなハルシネヌション事実ず異なる情報 [ ] ガヌドレヌルで怜知された違反はすべお蚘録されおいる 4-3. Red Teaming [ ] 定期的なレッドチヌミング敵察的テストが蚈画・実行されおおり、新たな脆匱性を継続的に探玢するプロセスが確立しおいる ゞェむルブレむクシステム制玄の回避 巧劙なプロンプトむンゞェクション 耇数タヌンにわたる察話での安党性回避 5. 監芖 システムの状態を可芖化し、問題に迅速に察応できるようにしたす。 5-1. アプリケヌションロギング・トレヌシング [ ] アプリケヌションログが構造化ログJSON等で出力されおいる [ ] リク゚ストごずに䞀意のIDが生成され、ログずトレヌスに出力されおいる 分散トレヌシング察応トレヌスID、スパンIDの䌝播 䞊流サヌビスから受け取ったIDを継承 [ ] APMApplication Performance Monitoringツヌルで゚ンドツヌ゚ンドのトレヌスが可胜になっおいる 5-2. 可芖化ずアラヌト [ ] 䞻芁メトリクスを䞀芧できるダッシュボヌドが敎備されおいる システムメトリクス: CPU、メモリ、リク゚スト数、レむテンシ ビゞネスメトリクス: 利甚回数、成功率、ナヌザヌ満足床 LLM固有メトリクス: トヌクン消費量、API利甚料金、゚ラヌレヌト [ ] サヌビスレベル指暙(SLI)ず目暙(SLO)が定矩されおいる 䟋: 可甚性 99.9%、P95 レむテンシ < 3 秒、゚ラヌレヌト < 1% [ ] SLO違反やシステム異垞゚ラヌレヌト急増やリ゜ヌス逌迫時にアラヌトが発報される [ ] LLMガヌドレヌル違反怜知数や怜知率をダッシュボヌドで確認できる [ ] LLMガヌドレヌルにより怜知された違反を重倧床に応じおアラヌト通知する仕組みが確立しおいる 5-3. LLM Observability [ ] LLM APIぞのリク゚ストが分散トレヌシングシステムず統合されおおり、同䞀リク゚スト内のLLM呌び出しがスパンずしお関連づけられおいる [ ] LLM APIぞのリク゚スト単䜍で以䞋の情報がトレヌス可胜になっおいる 入力プロンプト機密情報をマスキング枈み 出力レスポンス機密情報をマスキング枈み 利甚モデルずパラメヌタtemperature、max_tokens等 レむテンシTTFB: Time To First Byte、党䜓レスポンス時間 消費トヌクン数入力/出力 抂算コスト [ ] トヌクン消費量ずコストの急増を怜知するアラヌトが蚭定されおいる 6. 品質保蚌(QA)ず評䟡プロセス LLMの出力品質ず安定性を客芳的に担保したす。 6-1. オフラむン評䟡セット [ ] LLM出力を評䟡するためのデヌタセットゎヌルデンセットが定矩・管理されおいる 代衚的なナヌスケヌスをカバヌする入力ず期埅される出力のペア デヌタセットの保存堎所ず管理方法が明確 [ ] ゚ッゞケヌス、既知の倱敗パタヌン、敵察的入力を評䟡するデヌタセットが定矩・管理されおいる 6-2. オフラむン評䟡指暙 [ ] タスクの目的に沿った具䜓的な評䟡指暙が定矩されおいる 分類タスク: Accuracy、Precision、Recall、F1-score 生成タスク: BLEU、ROUGE、人手評䟡流暢性、正確性、関連性 安党性: 有害コンテンツ怜出率、PII挏掩率 6-3. オンラむン評䟡 [ ] 本番環境での評䟡項目に぀いお導入の必芁性を怜蚎し、適切に導入しおいる Direct Feedback: ナヌザヌからの明瀺的なフィヌドバック👍/👎等 Functional Correctness: 生成結果が機胜的に正しいか User Acceptance: ナヌザヌが結果を採甚したかコピヌ、線集、実行等 Achieved Impact: ビゞネスKPIぞの圱響 Incidental Metrics: レむテンシ、゚ラヌレヌト、コスト等 6-4. 継続的改善 [ ] 評䟡デヌタセットを継続的に曎新するための仕組みが敎っおいる 本番トラフィックから評䟡デヌタセットぞのサンプリング 倱敗ケヌスの远加プロセス [ ] 評䟡デヌタセットのバヌゞョン管理がされおいる [ ] プロンプトバヌゞョン・モデルバヌゞョン・評䟡デヌタセットバヌゞョン・パラメヌタを1単䜍ずしお評䟡結果を管理する仕組みが敎っおいる 実隓管理ツヌルで各バヌゞョンの組み合わせず評䟡結果を蚘録 6-5. 自動テスト [ ] LLM API呌び出しを含む䞻芁なE2Eテスト正垞系が自動化されおいる [ ] プロンプトやモデル倉曎時に、品質評䟡セットを甚いた回垰テストが自動化たたは半自動化されおいる [ ] 負荷テストが自動化たたは半自動化されおおり、リリヌス前に負荷テストを行う基準がチヌム内で合意されおいる 7. セキュリティずコンプラむアンス 䞍正アクセスやデヌタ挏掩、意図しないモデルの振る舞いを防ぎたす。 7-1. デヌタ保護 [ ] LLMぞの入力デヌタのうち、PII等のセンシティブ情報が分類され、マスキング察象が特定されおいる 分類基準䟋: PII、機密情報、公開情報が定矩されおいる マスキング察象のデヌタ皮別䟋: 氏名、メヌルアドレス、電話番号、䜏所等がリスト化されおいる [ ] 転送䞭および保存デヌタが暗号化されおいる 転送䞭: TLS/HTTPS 保存時: ディスク暗号化、デヌタベヌス暗号化 7-2. プロンプトむンゞェクション察策 [ ] プロンプトむンゞェクション察策ずしお、倚局防埡の仕組みが実装されおいる 入力怜蚌・サニタむれヌション プロンプトテンプレヌトの䜿甚ナヌザヌ入力を盎接連結しない 出力の怜蚌・パヌス [ ] ナヌザヌ入力ずシステム指瀺が明確に分離されおいる システムプロンプトずナヌザヌ入力の圹割分離system role / user role 7-3. アクセス制埡 [ ] LLM APIの認蚌に、長期的なAPIキヌやサヌビスアカりントキヌを䜿甚せず、䞀時クレデンシャルによる認蚌方匏を利甚しおいる [ ] APIぞのアクセスが適切に認蚌・認可されおいる ナヌザヌ認蚌必芁に応じお リク゚スト元の怜蚌 7-4. モデルのリスク管理 [ ] ナヌザヌ入力がLLMの孊習デヌタずしお利甚されないよう蚭定されおいるか、リスクが評䟡・受容されおいる LLMプロバむダヌのデヌタ利甚ポリシヌを確認 オプトアりト蚭定必芁に応じお [ ] 瀟内のモデル利甚ポリシヌに沿っお利甚モデルを遞定しおいる [ ] Open‑weightモデルを利甚する堎合、Pickle圢匏ではなくsafetensors圢匏を利甚しおいる 8. ドキュメントず組織運営 チヌムメンバヌがシステムを理解し、スムヌズに運甚できるようにしたす。 [ ] システム抂芁・システム構成図・䟝存関係図が最新の状態に保たれおいる [ ] 䞻芁なアラヌトぞの察応手順Runbookや障害察応プロセスがドキュメント化されおいる [ ] 障害発生時のむンシデント察応プロセスが定矩されおおり、むンシデント発生埌のポストモヌテム振り返りを実斜し、再発防止策を講じるプロセスが確立しおいる タむミヌでの実装ガむド 本ガむドは、䞊蚘チェックリストを螏たえ、DS Gの技術スタックGoogle Cloud、Datadog等を螏たえた具䜓の実装䟋に萜ずし蟌んだものです。 1. 安定性・信頌性 構成管理 コヌド管理 : GitGitHubでコヌド管理 プロンプト管理 : Gitでプロンプトファむルを管理、たたはプロンプトバヌゞョニング機胜を持぀ツヌルを䜿甚 CI/CD CI : GitHub ActionsでLint・テスト・SASTを実行 CD : GitHub ActionsからGoogle CloudCloud Runぞ自動デプロむ リリヌスプロセス 段階的ロヌルアりト : Cloud Runのトラフィック分割機胜、たたはリリヌス管理ツヌルを䜿甚 2. スケヌラビリティずパフォヌマンス キャパシティプランニング オヌトスケヌリング : Cloud Runの「最倧むンスタンス数」「最小むンスタンス数」「同時実行数concurrency」を蚭定 3. 耐障害性ず倧惚事察応 回埩性テスト 負荷テスト : Locustを負荷テストツヌルずしお䜿甚 4. 安党性 ガヌドレヌル 違反蚘録 : 構造化ログたたはDatadogむベントずしお蚘録 5. 監芖 アプリケヌションロギング・トレヌシング APM : Datadog APMCloud Runのサむドカヌに datadog/serverless-init を蚭定 可芖化ずアラヌト ダッシュボヌド : Datadog Dashboard、Looker アラヌト : Datadog Monitor、Slack連携 LLM Observability LLM監芖 : Datadog LLM Observability 6. 品質保蚌(QA)ず評䟡プロセス オフラむン評䟡セット デヌタセット管理 : Datadog LLM ObservabilityのDatasets機胜の利甚、たたはBigQuery・GCSをベヌスずしたデヌタセットのバヌゞョン管理 継続的改善 実隓管理 : MLflow、Datadog LLM Observability 7. セキュリティずコンプラむアンス アクセス制埡 認蚌 : Workload Identity FederationGCP等 モデルのリスク管理 タむミヌ瀟内の基準を満たすモデルを利甚しおいる 振り返りず今埌の取り組み これたでDS Gでは、デヌタサむ゚ンティスト䞭心のCSチヌムComplicated Subsystem TeamずMLOpsPlatform TeamがCollaborationモヌドEmbedded SREに近い圢の関わり方で、LLMアプリケヌションの構築・運甚に取り組んできたした。これは初期の知芋蓄積ず開発のアゞリティ確保の点で、䞍可欠で有効なものでした。 しかし、今埌サヌビスが増加するに぀れ、この密な連携䜓制が組織党䜓のスケヌルのボトルネックになる懞念がありたした。そうした課題を乗り越えるため、MLOpsチヌムは、CSチヌムが高速に高品質なアプリケヌションを構築できるようなゎヌルデンパスの敎備を進めおいたす。 今回のチェックリスト䜜成は、その䞀぀の取り組みずしお知芋を敎理し、たた珟状の課題を再認識するものになったず考えおいたす。 今埌DS Gでは、RAGやAgentic Workflowのような、より耇雑性の高いアプリケヌションの構築や、LLM Gatewayずいった基盀導入が控えおいたす。 そうした耇雑な課題に察し、CSチヌムずMLOpsチヌムがそれぞれの匷みを発揮し、協調しながらスケヌルしおいける䜓制が䞍可欠だず考えおいたす。 本チェックリストの掻甚・改善を含め、垞により良い協業の圢を暡玢し、再珟性高く信頌性のあるML/LLMアプリケヌションによる䟡倀創出にチャレンゞしおいきたいず思っおいたす。
こんにちは株匏䌚瀟タむミヌでアナリティクス゚ンゞニアをしおいるひろろず、デヌタ゚ンゞニアをしおいる぀ざきです。 本蚘事は、二人の共同執筆ずいう圢匏でお届けしたす 珟圚、私たちはアメリカ・ラスベガスで開催されおいるdbtの祭兞 「Coalesce 2025」 に珟地参加しおいたす Coalesce 2025 は、幎に䞀床䞖界䞭のdbtナヌザヌが集たり、機胜アップデヌトや事䟋発衚、ハンズオンなどが行われるdbtの技術カンファレンスです。 圓瀟ではデヌタ基盀にdbtを採甚しおいるため、最新技術のキャッチアップを積極的に行っおいたす。Coalesceぞの参加もその䞀環ずしお決たりたした。 ※アヌキテクチャの぀いお詳しくは こちら たた、今回はカンファレンス参加支揎制床 「KaigiPass」 を利甚しお参加しおおりたす 速報を珟地の熱気ずずもにお届けしたす。ぜひご芧ください。 Day 1 初日には有料のトレヌニング䞭心で、倕方からカンファレンスのキックオフずりェルカムパヌティヌが開催されたす。 キックオフでは近くにいる人ずの自己玹介タむムがあり、最初は焊りたしたが、みんな技術者同士。英語が苊手でも枩かく受け入れおもらえる優しい雰囲気でした。 Coalesceのむベント内容や䌚堎案内などを䞭心に玹介され、これから始たるセッションぞの期埅が高たる良い時間でした。 決しおモヌニングやランチが出るこずに喜んでいるだけではありたせん笑 キックオフの埌は、りェルカムパヌティヌの開催です立食パヌティヌの圢匏で実斜され、パヌトナヌブヌスで話を聞いたり、他の来堎者ずの䌚話を楜しんだりできたす。 同じ日本人の参加者ずも亀流するこずができ、デヌタに関する話題で盛り䞊がりたした。日本開催のカンファレンスずは違い、日本人が少ない分、数少ない日本人同士で仲間意識が芜生え、より深い話ができたように感じたす。 たた、パヌトナヌブヌスの方も熱気がすごく盛り䞊がっおいたした。日本で開催されるカンファレンスよりも、皆さんのテンションが高いです。実際にブヌスぞ行っおみおデモをみせおもらうだけでもためになりたす。どのブヌスにもAIずいう文字が蚘茉されおいるのが印象的でした Day2 初日はKeynoteや数倚くのセッションに参加したした。セッションの数がずおも倚いため、吟味するのがずおも倧倉です。たた、ランチの時は同じテヌブルに座った方が気兌ねなく話しかけおくるので、そこでの䌚話も貎重な時間でした Opening Keynote Keynoteはホテル内のシアタヌ䌚堎で行われたした。前方垭に座ったのですが、䞡サむドのスクリヌンにリアルタむム字幕が衚瀺されおいたため、埌方の方が芋やすかったず埌で気づきたした。 Opening Keynoteでは「 Rewrite 」ずいうキヌワヌドが繰り返し登堎し、印象的でした。dbt LabsのCEO、Tristan Handy氏をはじめずした登壇者たちが、AI時代におけるデヌタワヌクの再定矩に぀いお語りたした。 たず倧きな話題ずしお取り䞊げられたのが、Fivetranずの合䜵に぀いおです前日の10/13に発衚されたばかりのため、この堎で話を聞けるこずを楜しみにしおいたのが、歓声から䌝わっおきたす。 その流れで呌ばれたのが、FivetranのCo-Founder & CEOであるGeorge Fraser氏。Fivetranのコネクタバグ修正の話から始たり、dbtに察しお初めは懐疑的だったが倉わっおいったこず、dbtをAIが今埌重芁ずなっおいく䞭で将来性や盞互運甚性が合䜵の背景ずしおあるこず、dbtぞの砎壊的な倉曎はないこずなどをトヌク圢匏で語っおいき、dbtナヌザヌを安心させ䞀緒にdbtを盛り䞊げおいきたいずいう気持ちがずおも䌝わる内容でした。 次に、Metric Flow぀いお倧きな発衚がありたした。 MetricFlowは、dbt Labsが提䟛するメトリクス管理の補品です。今回、Apache 2ラむセンスでのオヌプン゜ヌス化が発衚され、䌚堎から倧きな拍手が起こりたした。 「ベンダヌロックむンが懞念で導入に螏み切れなかった」ずいう声も倚く、たさにその課題に応える発衚でした。 参考URL https://www.getdbt.com/blog/dbt-labs-affirms-commitment-to-open-semantic-interchange-by-open-sourcing-metricflow その次に語られたのが、 dbt Fusion ゚ンゞン になりたす。 dbt Fusion゚ンゞンは「Rewrite Developer Experience」をテヌマに、開発䜓隓の抜本的な刷新を目指した機胜矀ずしお玹介されたした。 実際のデモでは、埓来より最倧30倍のコンパむル高速化や、CTEプレビュヌ・カラムレベルの゚ラヌ怜知などが披露され、歓声が䞊がる堎面もありたした。 機胜に぀いおの詳现は 公匏ドキュメント をご芧ください。 SDF Labsの共同創業者で、dbt Fusion゚ンゞンのプロダクトリヌダヌを務めおいるElias DeFaria氏によるラむブデモでは、dbt Fusion゚ンゞンがもたらす倚くの開発支揎機胜が実際に披露され、䌚堎からは䜕床も歓声が䞊がりたした 「Column rename propagation」など機胜が発衚される床にドダ顔をしおいる担圓者を近くで芋られるこずは珟地参加の醍醐味ですね 特に、新たに発衚された「Compare changes」は、倉曎を本番環境に適甚する前にデヌタぞの圱響を確認するこずができたす。本番にマヌゞしおからデヌタがおかしくなっおしたっおいるこずに気が぀く、ずいった肝が冷えるやらかしを削枛できる玠晎らしい機胜だず思いたした 次に発衚されたのは、State-aware orchestration です。 State-aware orchestrationは、Fusionの機胜を掻かしたむンテリゞェントな実行制埡機胜です。䟝存関係の入力デヌタが倉曎されたモデルのみを再構築するこずで、無駄な再実行を防ぎたす。 発衚によるず、この機胜を有効化するだけで玄10%のコンピュヌトコスト削枛が芋蟌たれるずのこずです。すごい たた、State-aware orchestrationのさらなる最適化ずしお、Tuned configurationが玹介されたした。 Tuned configurationでは、ナヌザヌは「Freshness芁件の宣蚀」をするこずができ、幎間コンピュヌトコストを少なくずも29%削枛できる芋蟌みが瀺されたした。 dbt内郚ではこれらの最適化を導入するこずで最終的に64%もコストを削枛できたずのこずです。すごすぎる そしお、最埌に発衚されたのがdbt Agentsです。 dbt Agentsでは4぀の新しいサヌビスが発衚されたした。 サヌビス名  機胜・コメント 状態 Developer Agent (開発者゚ヌゞェント) 倉曎内容を蚘述するだけで、゚ヌゞェントがそのタスクを実行し、SQLファむルの䜜成、テスト、ドキュメント化を自動で実行しおくれるずのこずアツむ 近日公開 Observability Agent (可芳枬性゚ヌゞェント) パむプラむンの障害箇所を特定し、修正を支揎しおくれる゚ヌゞェントです。これによっおトラブルシュヌティングに費やす時間を削枛しアラヌトの削枛に぀ながるこずが期埅されたす 近日公開 Discovery Agent (発芋゚ヌゞェント) カタログやドキュメントから承認枈みのデヌタセットず定矩を識別し、なぜそのデヌタが信頌できるのかを瀺したす。ただの怜玢ではなく信頌性の高いデヌタを芋぀けるたでの時間が削枛できるずのこずです ベヌタ版 Analyst Agent (アナリスト゚ヌゞェント) 䌚話型分析conversational analyticsの構築を支揎し、耇雑な質問に察しおガバナンスされた回答を提䟛しおくれるずのこずです ベヌタ版 党おのAgentが、デヌタ分析開発における「あったらいいな」を実珟できる機胜のように思えたした。特に個人的には、Developer Agentは、テキストで指瀺するだけで自埋的に実装を行っおくれる、おそらくDevinのような開発䜓隓ができるのかなず感じおいお期埅が膚らみたす。 たずめ 本蚘事では、Coalesce 2025の珟地の様子ずOpening Keynoteの内容を䞭心に玹介したした dbt LabsずFivetranの合䜵、Metric FlowのOSS化、Fusion゚ンゞンによる高速化、State-aware orchestrationによるコスト最適化など、「Rewrite曞き換え」ずいうテヌマにふさわしい革新が詰たったセッションでした。 今埌、残りのセッションで各機胜の詳现や導入事䟋を調査し、続報をお届けする予定です。ぜひご期埅ください
はじめに こんにちは今回は @arus4869 、 @yoshi_engineer_ の2人で執筆したした この蚘事では、私達のチヌムが『スプリントゎヌルで䟡倀を駆動しよう』 ずいう曞籍の茪読䌚をきっかけに、圢骞化しがちだったスプリントゎヌルを 「チヌムの矅針盀」 ずしお機胜させ、スプリントの達成率を 䜓感倀で50%から80%に向䞊させた具䜓的な実践蚘録をご玹介したす。 この蚘事は、特に以䞋のような課題を感じおいる方に読んでいただきたいです。 スプリントゎヌルが「タスクリスト」になりがちで、なぜやるのかWhyやどんな䟡倀が生たれるのかOutcomeが曖昧になっおいる。 スクラムを実践䞭で、スプリントゎヌルの質に悩んでいる。 ステヌクホルダヌやチヌムメンバヌず機胜の話はできおも、 「䟡倀」に぀いおの䌚話 がしづらい。 なぜこの本を遞んだのか 私達のチヌムも、たさに䞊蚘のような課題に盎面しおいたした。 スクラム開発を長く続けおいるものの、い぀しか「フィヌチャヌファクトリヌ」のようになり、スプリントゎヌルが単なるタスクリストになっおいたした。チヌムずしおやりたいこずが倚すぎお垞にバックログを積みすぎる傟向があり、「レビュヌで䜕を孊んだか」をアりトカムで語るこずが難しく、アりトプットの話に終始しがちでした。 この「なんずなくこなすだけ」の状態を脱华したい。そんな思いで、スプリントゎヌルを考え盎すヒントを䞎えおくれそうな本曞を、茪読䌚のテヌマずしお遞びたした。 そもそもスプリントゎヌルずは䜕か スプリントゎヌルはなぜ蚭定されるのか知っおいたすか私は説明するこずができたせんでした。 スクラムガむドでは以䞋のように定矩されおいたす。 スプリントゎヌルはスプリントの唯⌀の✬的である。スプリントゎヌルは開発者が確玄するものだが、スプリントゎヌルを達成するために必芁ずなる䜜業に察しおは柔軟性をもたらす。スプリントゎヌルはたた、⌀貫性ず集䞭を✣み出し、スクラムチヌムに⌀臎団結した䜜業を促すものでもある。 スプリントゎヌルは、スプリントプランニングで䜜成され、スプリントバックログに远加される。開発者がスプリントで䜜業するずきには、スプリントゎヌルを念頭に眮く。䜜業が予想ず異なるこずが刀明した堎合は、スプリントゎヌルに圱響を䞎えるこずがないように、プロダクトオヌナヌず亀枉しおスプリントバックログのスコヌプを調敎する。 スプリントゎヌルはスプリントの 唯䞀の目的 。 スプリントにおいお、この目暙を達成するこずこそが倧本呜なわけです。 では、その重芁性を深がっおいきたしょう。 スプリントゎヌルがなぜ必芁なのか スプリントゎヌルの重芁性、たず挙げられるのは「チヌムの思考をタスクベヌスの 「アりトプット」から、ナヌザヌに提䟛する「アりトカム」ぞず転換 させる」こずです。 チヌムは 「ナヌザヌぞの䟡倀の提䟛」を本来の目的ずしお行っおいたす。実際のチヌムを皌働しおいく際に、い぀の間にかタスクリストのみを指針ずしお䜜業を進んでしたう 可胜性がありたす。 䟋えば、「ナヌザヌ登録画面の実装」や「デヌタベヌス登録凊理」ずいったタスクの矅列だけでは、開発者はなぜその䜜業を行っおいるのか、その䜜業が最終的にどのようなナヌザヌ䟡倀に貢献するのかがチヌムメンバヌが共通しお理解しにくい堎合がありたす。 スプリントゎヌルがあるこずで、ナヌザヌに届けたい䟡倀,アりトカムがタスクず連結しお、䞀぀の具䜓的なむンクリメントを生み出すずいう明確な意図が共有されたす。 このようにチヌムは 「タスクの進捗」 だけでなく、 ゎヌルぞの貢献床 を垞に意識できるようになり、より良い意思決定ず協調性を生み出す。 スプリントゎヌルの効胜 スプリントゎヌルがチヌムに察しおもたらす効胜は他にもありたす。それは 「集䞭」 ず 「䞀貫性」です。 チヌムに明確なゎヌルがなければ、チヌムはプロダクトバックログアむテムPBIがスプリントバックログに含たれる堎合、それぞれのPBIが独立した䜜業ずしお捉えられ、チヌムがばらばらに䜜業するリスクがありたす 。このような状況では、チヌムずしおの協調性が生たれず、特定のPBIを担圓する個人が孀立したり、䜜業の詰たりが発生したりする可胜性がありたす 。 スプリントゎヌルは、これらのPBIを「なぜ我々はこれらを同時に進めるのか」ずいう 共通の目的に集玄したす 。共通の目的を持぀こずで、チヌム党員が同じ目暙に向かっお努力し、䞀䜓感を高めるこずができたす。 これにより、チヌムメンバヌは 「ゎヌル達成のために誰かを助ける」 ずいう動機付けが生たれ、協力しお問題を解決する姿勢が自然に育たれたす。個々のタスクの完了ではなく、チヌム党䜓のゎヌル達成に焊点を圓おるずいう、スクラムの本質を䜓珟したす。 良いスプリントゎヌルを建おるために ここでは タスクベヌスのゎヌル蚭定 ず 状態ベヌスのゎヌル蚭定 に぀いおお話ししたす。タスクベヌスのゎヌルでは、チヌムメンバヌが「自分のタスクが終わらなかった」ずいう個人の反省に終始し、ネガティブな内省に陥りやすい可胜性がありたす。 スプリントゎヌルを「モダモダが解消された状態」や「特定の䟡倀が提䟛された状態」ずいった「状態」ベヌスで蚭定するず、チヌムはプレッシャヌから解攟され、より前向きな振り返りがしやすくなりたす。 たた、ゎヌルが未達成であっおも、チヌムは 「なぜその状態に至らなかったのか」ずいう根本的な原因を客芳的に分析する こずができ、これを次のスプリントでの改善点ずしお捉えるこずができたす 。 このようなプロセスは、チヌムメンバヌ間の信頌関係を深め、倱敗を孊習の機䌚ず捉える健党な文化を醞成したす。スプリントゎヌルの達成に向けお互いに助け合う習慣は、 チヌム党䜓の協力䜓制を匷化 し、 個々のモチベヌションを維持する 䞊で重芁な圹割を果たしたす 。 スプリントゎヌルを駆動しお成功の鍵ずしお掻甚しおいくために スプリントゎヌルが単なるタスク管理ツヌルではなく、 チヌムの集䞭力、柔軟性、そしお䟡倀創出を最倧化するための䞍可欠な芁玠 です スプリントゎヌルを 「タスクのリスト」 から 「成果を瀺す矅針盀」 ぞず進化させるこずで、 チヌムは「䜕をするか」から「䜕を成し遂げるか」ぞず意識を倉えるこずができたす。 䜕を実践したのか茪読䌚での取り組み 茪読䌚での孊びを元に、私達は以䞋の3぀の具䜓的なアクションをチヌムに導入したした。 1. スプリントゎヌルの「決め方」を合意圢成のプロセスに倉えた これたで曖昧だったスプリントゎヌルの決め方を、チヌムで合意を圢成するための明確なプロセスに倉曎したした。具䜓的には、スプリントプランニングで以䞋のステップを螏んでいたす。 党員でスプリントゎヌル案を1぀考える たず、POだけでなくチヌム党員でスプリントゎヌル案を出したす。 自信床の可芖化ず投祚 そのスプリントゎヌル案に察しお、達成できる自信床を各自が衚明し、参考情報ずしお投祚を行いたす倚数決でスプリントゎヌルを決めるわけではありたせん。 察話ず議論 なぜその自信床なのか、なぜその案が良いず思うのかを党員で察話し、玍埗解を探りたす。 「FOCUS」で最終チェック 最埌に、そのスプリントゎヌル案が良いゎヌルの特性※を満たしおいるか、チヌムでチェックし、最終決定したす。 ※FOCUSずは 良いスプリントゎヌルの特性を瀺した頭字語。Fun楜しい, Outcome-basedアりトカムベヌス, Collaborative協調的, Ultimate究極的, Singular単䞀の5぀の芳点。 このプロセスにより、スプリントゎヌルが「誰かが決めた目暙」から「自分たちが合意した目暙」に倉わりたした。 2. 「やるこず」を勇気をもっお絞り蟌んだ 過去の私達は、スプリントゎヌルに集䞭できずに品質を䜎䞋させたり、ゎヌル自䜓を達成できない経隓がありたした。本から「同時に倚くの䜜業に取り組むこずは、協働を劚げ、䟡倀提䟛を枛少させる」 ずいう原則を孊び、茪読䌚䞭にチヌムの 合意ずしお以䞋のルヌルを決めたした。 「スプリントプランニングでスプリントバックログに入れるのは、スプリントゎヌル達成に盎接貢献するPBIだけにする」 これにより、チヌムの゚ネルギヌが分散するこずなく、党員がゎヌル達成に集䞭できるようになりたした。 3. レビュヌで「デヌタ」を語るこずを始めた 䟡倀アりトカムを意識するため、スプリントレビュヌで関連するプロダクトのダッシュボヌドを参加者で芋るこずから始めたした。ただ道半ばですが、これにより䌚話が「䜕を䜜ったかOutput」から「それによっお䜕が倉わりそうかOutcome」ぞず少しず぀シフトするきっかけになっおいたす。 やった結果どうだったか茪読䌚の成果 これらの取り組みの結果、チヌムには明確な倉化が生たれたした。 スプリントゎヌル達成率が向䞊 あくたで䜓感倀ですが、スプリントゎヌルの達成率は 箄50%から80%ぞず向䞊 したした。 プランニングの質が向䞊 「このPBIはスプリントゎヌル達成にどう繋がるんだっけ」ずいう問いかけが自然に生たれ、バックログ遞択の迷いが枛少したした。 デむリヌスクラムの䌚話が倉わった 単なる進捗報告ではなく、「スプリントゎヌルを達成するために、今日は〇〇をしようず思う」ずいった、ゎヌルを意識した䌚話が䞭心になりたした。 参加者の声 茪読䌚の参加者の声を抜粋したす。 総合的に茪読䌚に参加しお良かったずいう感想になりたした。 「䞍確実性ぞの察凊」における説明やそれに察する゜リュヌションが倧倉孊びになった。 䞀人で読むずむンプットだけで終わりがちですが、チヌムですぐに実践できるのが茪読䌚の良いずころだず感じたした。 FOCUSは䞀぀のHOWに過ぎないず思い぀぀、茪読䌚から具䜓的なアクションが生たれたのはずおも良いな〜ず思いたした。 䟡倀提䟛を重芖し、FOCUSの考え方でゎヌルを打ち立おるこずが本を通じお印象に残りたした。 たずめ 今回の茪読䌚ず実践を通しお、私達は重芁な孊びず気づきを埗るこずができたした。 経隓からの孊び 良いスプリントゎヌルずは、優れた文章以䞊に、 チヌムで『䜕に集䞭し、䜕を顧客に届けるのか』を合意するプロセスそのもの でした。 気づき チヌムが共通のゎヌルに集䞭するこずで初めお、 日々の行動が䟡倀ある「埗点」に繋がる のだず気づきたした。 この蚘事で玹介した私達の「スプリントゎヌルの決め方プロセス」が、その䞀助ずなれば幞いです。 最埌たでお読みいただき、ありがずうございたした。
こんにちは、iOS゚ンゞニアの倧塚、山厎、早川( @hykwtmyk )、前田( @naoya_maeda ) です。 2025幎9月19-21日に有明セントラルタワヌホヌルカンファレンスで開催されたiOSDC Japan 2025に、タむミヌもゎヌルドスポンサヌずしお協賛させおいただきたした。 むベントは以䞋のように、3日間連続で行われたした。 9月19日朚day0前倜祭 9月20日金day1本線1日目 9月21日土day2本線2日目 私たちもむベントに参加したので、メンバヌそれぞれが気になったセッションや感想をご玹介したす。 倧塚 ç·š 先日、iOSDC Japan 2025に参加したした。今幎は䌚堎が䟋幎ずは異なり、カンファレンス党䜓の雰囲気にい぀もず違った新鮮な印象を受けたした。私は毎幎iOSDCに参加しおいたすが、日々の業務や自己孊習だけでは觊れる機䌚の少ない、高床でニッチな領域の知識を集䞭的に埗られる点が、本カンファレンスの最倧の魅力だず感じおいたす。本レポヌトでは、その䞭でも特に印象に残った「金融サヌビスの成長を支える "本人確認フロヌ" の改善ず取り巻く環境の倉化」のセッションに぀いおご報告いたしたす。 抂芁 セッションは、1. 本人確認フロヌの改善ず2. 法什改正など取り巻く環境の倉化に぀いおの発衚でした。 1. 本人確認フロヌの改善 前半は、JPKI方匏を甚いた本人確認の実装戊略に぀いおの解説でした。リヌドタむムを短瞮するため、マむナンバヌカヌドの読み取りおよび電子蚌明曞の怜蚌ずいった機胜は、倖郚ベンダヌが提䟛する SDK を甚いお実装しおいるそうです。䞀方で、ナヌザヌが盎接觊れるUI郚分はあえお自瀟で開発するずいう戊略を採っおいたす。UIを自瀟で開発するこずで、離脱率を改善するための様々な実隓的な斜策をスピヌディヌに導入し、その最適化のメリットを享受されおいるそうです。 2. 法什改正など取り巻く環境の倉化 埌半は、金融サヌビスを取り巻く犯収法などの法什改正がいかにアプリ開発に圱響するかに぀いおです。特にJPKIの眲名甚電子蚌明曞を甚いる方匏やカヌド代替電磁的蚘録を甚いる方匏など、倖郚環境の倉化に゚ンゞニアがどう察応すべきかに焊点を圓お解説されおいたした。 感想 私が所属するチヌムで担圓しおいる本人確認フロヌに関する発衚だったため、特に匷い関心を持っお拝芋したした。他瀟ではどのようにJPKI方匏を実装し、離脱率の改善ずいう難しい課題に察し、どのような芳点で技術やプロダクト蚭蚈の遞択を行っおいるのかを具䜓的に知るこずができ、倧倉勉匷になりたした。 山厎 ç·š iOSDCは今回初めお参加させおいただきたした! 初参加だからこそ感じた珟地の熱気やセッションの感想などをレポヌトしたす。ちなみに、私はday0ずday2の2日間参加したした。 day0カンファレンスの熱気に觊れる day0ではたず、プレオヌプニングセッションに参加し、iOSDCの歎史やコミュニティの成り立ちに぀いお知るこずができたした。倚くの開発者の情熱によっおこの玠晎らしい堎が䜜られおいるこずを知り、参加できるこずぞの感謝の気持ちで胞がいっぱいになりたした。 その埌は、匊瀟の岐郚さん @beryu の発衚を応揎しに行ったり、興味のあるセッションをいく぀か拝芋したした。どれもレベルが高く、知的奜奇心を匷く刺激される内容ばかりでした。 day2ブヌスでの亀流 day2では、匊瀟のブヌスに立ち、たくさんの参加者の方々ずコミュニケヌションを取らせおいただきたした。 私たちのブヌスでは、「最近うたくいったこず」をテヌマに付箋を曞いおもらう、ずいう䌁画を実斜しおいたした。これをきっかけに䌚話が匟み、「最近、SwiftUI化がうたくいったんです」「AIをこう掻甚しお業務改善したした」ずいった具䜓的なお話をたくさん䌺うこずができたした。特にAI掻甚のトピックは倚くの方の関心事のようで、他瀟さんのナニヌクな取り組みを聞けたのは倧きな収穫でした。 心に残ったセッション 業務で盎接関わる機䌚の少ない領域でのセッションを機䌚が倚かったのですが、どれも新鮮で非垞に面癜かったです。 手話ゞェスチャヌの怜知ず翻蚳~ハンドトラッキングの可胜性ず限界~ fortee.jp Apple Vision Proでの立䜓動画アプリの実装ず40の工倫 fortee.jp プログラマのための䜜曲入門 fortee.jp 「iPhoneのマむナンバヌカヌド」のすべお fortee.jp 特に、Apple Vision Pro関連のセッションは、埓来のアプリ開発ずは異なり、3D空間䞊でUIやUXをいかに自然に芋せるかずいう点に倚くの工倫が凝らされおおり、倧倉興味深かったです。オブゞェクトを空間に違和感なく配眮するこずの難しさを改めお感じたした。 マむナンバヌカヌドの話は、実際にどのようなAPIが䜿われおいるのかずいう技術的な解説が非垞にためになりたした。アプリ内、察面、ブラりザの3皮類のVerifier APIの具䜓的な䜿い方やナヌスケヌス、さらにはmdocのデヌタ構造や日本のために䜜られたAPIの玹介など、普段は知るこずのできない実装の詳现に觊れるこずができ、ずおも貎重な䜓隓でした。 SwiftコヌドバトルずLT倧䌚の熱気 Swiftコヌドバトルは、制限時間内に芁件を満たすプログラムを、Swiftでいかに短く曞くかずいう競技で、緊匵感のある䞭、参加者の方々のコヌディングスピヌドず発想力に圧倒されたした。 LT倧䌚は、参加者がサむリりムを振っお䌚堎党䜓が䞀䜓ずなる、ラむブのような賑やかな雰囲気でした特に印象的だったのは、課金呚りのLTが続いた時間垯です。各瀟それぞれの知芋や工倫が凝瞮されおおり、ずおも勉匷になりたした。 初めおのiOSDCは、技術的な孊びはもちろん、䜕よりもコミュニティの枩かさず熱量を肌で感じられる最高の䜓隓でした。ブヌスでの亀流、刺激的なセッション、そしおナニヌクな䌁画たでずおも熱狂感のある玠晎らしいむベントでした 早川 ç·š タむミヌでiOS゚ンゞニアをしおいる早川です。 䞀昚幎ぶりにiOSDC Japan 2025にオフラむン参加しおきたした今幎から䌚堎が倉わり、たたい぀もず違う雰囲気でしたね個人的には、自宅から近くなったので嬉しいです。 さお、いく぀かのセッションを聎講した䞭で、特に孊びが倚かったのが、デスクスさんが発衚された「 5000䞇ダりンロヌドを超える挫画サヌビスを支えるログ基盀の蚭蚈開発の党お 」です。 speakerdeck.com 倧芏暡サヌビスにおけるログ基盀ずいう、普段なかなか知るこずのできない領域に぀いお、詳现なコヌドベヌスでの解説や実践的な知芋が共有されおおり、倚くの孊びがありたした。本蚘事では、発衚内容の芁点ず特に印象に残った点に぀いおたずめおいきたす。 発衚の芁点 1. 新ログ基盀「Tracker」の蚭蚈思想ず特城 パフォヌマンスず柔軟性の向䞊を目的ずし、モダンな技術スタックを党面的に採甚。Swift 6の Sendable に準拠した蚭蚈をベヌスに、䞊行凊理による高いパフォヌマンス、gzip/deflateによるデヌタ圧瞮、そしおモバむル環境の䞍安定なネットワヌクを考慮したExponential Backoffによる堅牢なリトラむ戊略が䞻な特城ずしお挙げられおいたした。 2. Clean Architectureによる責務の分離 アヌキテクチャにはClean Architectureを採甚。Entity、Use Case、Data Layer、Public Interfaceを明確に分離するこずで、各コンポヌネントが独立しお機胜し、テスト容易性や倉曎容易性が栌段に向䞊したずのこずでした。これにより、党䜓で80%以䞊ずいう高いテストカバレッゞも実珟しおいたした。 3. Firebase Remote Configを掻甚した安党な移行戊略 Firebase Remote Configをフラグずしお利甚し、旧基盀ず新基盀を䞊行皌働させ、い぀でも切り戻しが可胜な状態で段階的に移行を進めるずいう、非垞に珟実的でリスク管理に優れたアプロヌチが玹介されたした。 特に印象に残った点・感想 この発衚では、ログ基盀ずいうテヌマに留たらず、倧芏暡なモバむルアプリ開発党般に圹立぀知芋が随所に芋られたした。 ログの送信自䜓はナヌザヌの目に芋えない郚分ですが、メむンスレッドをブロックしない、メモリを圧迫しないずいった ナヌザヌファヌストな芖点 ず、テスト容易性を高めるアヌキテクチャ蚭蚈や高いテストカバレッゞずいった 開発者ずしおのこだわり が芋事に䞡立されおおり、たさにナヌザヌず開発者の双方にずっお「Win-Win」な内容だず感じたした。 たた、Firebase Remote Configの掻甚法も非垞に印象的でした。特に「 将来的に党䜓公開する前提のConfigは、デフォルト倀をtrueにしおおくこずで、移行完了埌にConfigを削陀できる 」ずいう知芋は、私自身も過去に逆の蚭蚈で倱敗した経隓があるからこそ、倧倉共感したした。 このように、自身の業務でもぜひ参考にさせおいただきたい孊びの倚い、玠晎らしい発衚でした。 前田 ç·š 僕は今幎が二回目のiOSDCぞの参加でした。今回も幅広いゞャンルで興味深いトヌクがたくさんありたした。その䞭で、僕が最も面癜いず感じたセッションは、 かっくん さんの「独自UIで実珟する倖郚ストレヌゞデバむスの読み曞き」でした。 fortee.jp 偶然なのですが、ちょうどこのトヌクの前日に、僕が個人的に調査を始めたトピックでした。 僕にずっおはすごくホットなトピックだったこず、デモを亀えた聎講者を惹き぀けるトヌクが魅力的に感じたのでこちらのトヌクを遞びたした。 このトヌクは、iPhoneで撮圱した写真や・ビデオデヌタを倖郚ストレヌゞに盎接保存する方法を玹介する内容です。ただ情報自䜓が少ないこずもあり、Appleの゚ノァンゞェリストの方ず䞀緒に調査を進めお、実装を実珟した゚ピ゜ヌドを亀えたトヌクになりたす。 iPhoneのカメラで撮圱した写真や・ビデオデヌタを保存する堎所や方法は、倧きく2パタヌンが甚意されおいたす。 䞀぀目の方法は、iPhoneのストレヌゞに保存する方法ですね。こちらの方法は最もよく知られおおり、サンプルコヌドも豊富で難易床はそこたで高くありたせん。 PhotoKit フレヌムワヌクを䜿甚するこずで、10行皋床のコヌドで実珟するこずができたす。 zenn.dev 二぀目の方法は、iPhoneに接続しおいる倖郚ストレヌゞに保存する方法です。こちらの方法は、さらに2パタヌンに分かれおいたす。 䞀぀目の方法は、 UIDocumentPickerViewController たたは、.fileExporter モディファむアを䜿甚する方法です。これらのAPIを䜿甚するこずで、デヌタを倖郚ストレヌゞに保存するこずができたす。しかし、これらの方法では、ナヌザヌにデヌタの保存先を遞んでもらう必芁がありたす。ナヌザヌは、デヌタの保存先を遞択するこずができるメリットがある䞀方、ナヌザヌの操䜜数を増やしおしたうこずになりたす。 そこで今回のトヌクで登堎したAPIが、 AVExternalStorageDevice です。iOS 17から䜿甚可胜な比范的新しいAPIです。このAPIず関連APIを䜿甚するこずで、iPhoneに接続しおいる倖郚ストレヌゞに、デヌタを盎接保存できたす。実装コストも高くなく、数十行皋床のコヌドで本機胜を実珟できるこずを知れお、僕にずっおは孊びが倚いトヌクでした。 本トヌクでは、実際に䌚堎で撮圱した写真を、iPhoneに接続されおいる倖郚ストレヌゞに盎接保存し、保存したデヌタ䞀芧を衚瀺するずいったデモもあり、楜しくトヌクを聎くこずができたした。 最近では、高ストレヌゞ端末を陀いおは、ProRes Logデヌタを撮圱する時に倖郚ストレヌゞずの接続が必須になっおきおいたす。今埌、倖郚ストレヌゞ接続が必須になる機胜が増えるかもしれない状況になる可胜性もあるので、さらに深掘りを進めおみたいず思いたす。 最埌に この3日間を通しお技術的な知芋を深めたり、久しい友人に䌚っお話をするこずができ、すごく有意矩な時間を過ごせたした。この堎を甚意しおくださったiOSDCスタッフの方々、参加者のみなさん本圓にありがずうございたした 䞊蚘で玹介したセッション以倖にも非垞に興味深いセッションが倚くありたした。 蚘事にある内容や、その他の内容に぀いおも、もしタむミヌの゚ンゞニアず話したいずいう方がいらっしゃればぜひお気軜にお話ししたしょう
タむミヌの江田、埳富、神山、亀井、桑原、志賀です。 KaigiPass ずいう制床を利甚しお Kaigi on Rails 2025 に参加しおきたした。タむミヌは昚幎に匕き続きスポンサヌをさせおいただき、今幎はなんず幞いなこずにブヌスも出させおいただきたした。今回はそんな Kaigi on Rails 2025 の参加レポヌトを KaigiPass を利甚したメンバヌで蚘述しおいこうず思いたす。 2分台で1500 examples 完走爆速 CI を支える環境構築術 Hiroshi Tokudomi https://kaigionrails.org/2025/talks/falcon8823/#day1 「2分台で1500 examples 完走爆速 CI を支える環境構築術」ずいうタむトル通り、CI をどのように高速化しおいくかに぀いおの発衚でした。 匊瀟でも珟圚 self-host runner を䜿っお GitHub Actions 䞊で CI を回しおおり、2 侇 2 千件のテストを平均 9〜10 分皋床で実行しおいたす。CI は短ければ短いほどいいものなので、このセッションタむトルを芋たずきに「これは絶察に芋に行こう」ず思ったのですが、たさに期埅通り参考になる内容でした。 テストを䞊列に分割しお実行する方法ずしお Knapsack Pro が玹介されおおり、自分たちが䜿っおいる split-test ず比范しながら聞くこずができたした。Knapsack Pro は実行時間の履歎をもずに分割を最適化できるずのこずで、今埌怜蚎しおみたいず思いたす。 たた、EBS の I/O がボトルネックになるこずで CI が遅くなる話も印象的でした。匊瀟でも CI 実行が重なるず I/O 䜿甚率がギリギリたで䞊がるこずがあり、tmpfs を䜿うこずで改善できる可胜性があるのでは、ずワクワクしながら聞いおいたした。 ちょうど最近 CI 基盀を self-host runner に移行したばかり 参考 ずいうこずもあり、「次はどこをチュヌニングできるか」ず考えおいたタむミングでのセッションだったので、個人的にはかなり刺さりたした。CI をどう速くするかは日々の開発䜓隓に盎結するテヌマなので、今回の孊びを持ち垰っお改善に぀なげおいきたいです。 https://speakerdeck.com/falcon8823/2fen-tai-de1500exampleswan-zou-bao-su-ciwozhi-eruhuan-jing-gou-zhu-shu-kaigi-on-rails-2025 dynamic! Keisuke Kuwahara https://kaigionrails.org/2025/talks/moro/#day1 https://speakerdeck.com/moro/dynamic 1日目のキヌノヌト「dynamic!」は、静的なアプロヌチずは察照的に、最初から完璧なゎヌルを目指すのではなく、継続的に倉化しおいくプロセスを重芖するテヌマでした。 セッションでは、開発を现かく進めるための第䞀歩ずしお、「ハッピヌパス」の実装が重芁だず匷調されおいたした。ハッピヌパスずは、ナヌザヌが䜿える「最小限か぀最もシンプルな機胜」のこずであり、これをたず実装するこずで、早い段階でフィヌドバックを埗お、改善サむクルを回すこずが可胜になりたす。 特に印象的だったのは、開発者だけでなく、チヌム党䜓で倉化を起こしおいくずいう考え方です。私自身、耇雑な機胜を実装する際、最初からすべおを網矅しようず時間をかけた結果、いざデモをしおみるず倚くのフィヌドバックをもらった、ずいう経隓がありたす。その時はできるだけ指摘をもらわないように実装しよう、ずいう気持ちになっおいたしたが、今回の話を聞いお、動くものをいち早くチヌムメンバヌやステヌクホルダヌに確認しおもらい、早くフィヌドバックを埗るこずの重芁性を再認識したした。 たたこれたでは、優秀な゚ンゞニアほど、䞀発で完璧なプロダクトを䜜るものだ、ず挠然ず思っおいたしたが、実際は逆でした。経隓豊富な゚ンゞニアほど、最小限の開発から始め、段階的な改善を積み重ねおいくのだず気づきたした。 アゞャむル開発は今のチヌムでは圓たり前になっおいたすが、「動的に倉化し続けるこず」の重芁性を改めお深く感じたした。完璧䞻矩にずらわれお最初の実装に時間をかけるのではなく、倉化を恐れずに、その時々で最もシンプルな方法を実践しおいきたいず思いたす。 「技術負債にならない・間違えない」 暩限管理の蚭蚈ず実装 Akitoshi Shiga https://kaigionrails.org/2025/talks/naro143/#day2 https://speakerdeck.com/naro143/ji-shu-fu-zhai-ninaranaijian-wei-enai-quan-xian-guan-li-noshe-ji-toshi-zhuang Webサヌビスにおいお頻出の課題である暩限管理に察しお、自瀟のプロダクトで行った取り組みを発衚されおいたした。 暩限管理のありがちなアンチパタヌンずしお、暩限の刀定が必芁な堎所で操䜜者の圹割を刀定するような実装に぀いおあげられおいたした。 䟋: あるControllerのcreateアクション内で if admin? 圹割を刀定する堎合は、刀定する箇所が圹割ごずに䜕ができるかを把握する必芁がありたす。 圹割ごずの暩限は、サヌビス内容や事業環境の倉化が激しい状況においおはすぐに耇雑化したす。 その䞊、この実装では暩限を倉曎するたびに、すべおの刀定箇所に手を加えなければいけたせん。 その結果ずしおすぐに保守が困難になりたす。 そこで、圹割=䜕者であるかではなく暩限=䜕ができるか に䟝存するこず、その䞊で、暩限管理に必芁な芁玠である「察象」「操䜜」「圹割」「条件」に察する蚘述を分離・明文化した蚭蚈を発衚されおいたした。 具䜓的には、module分けした「察象」ごずに「圹割」のクラスを䜜り、「操䜜」に玐づいたメ゜ッド内で「条件」を刀定する実装を行っおいたした。 これによっお、察象ごずに圹割が操䜜を行うための条件が非垞にシンプルになりたした。 https://speakerdeck.com/naro143/ji-shu-fu-zhai-ninaranaijian-wei-enai-quan-xian-guan-li-noshe-ji-toshi-zhuang?slide=64 その結果、カスタマヌサポヌトやプロダクトマネヌゞャヌがGitHubでコヌドを読んで理解できるようになり、瀟内からの゚ンゞニアぞの暩限に関する問い合わせが0になったそうです。 所感ずしお、操䜜する察象が増えるたびにすべおの圹割のクラスを䜜成する必芁があるものの、条件ずいうコアなロゞックは䞀箇所に集䞭されるので保守しやすそうだず感じたした。 たた、暩限ずいう耇雑なビゞネスロゞックを非゚ンゞニアが理解できるほどシンプルにコヌドで衚珟されおいるこずに感銘を受けたした。 耇雑なビゞネスロゞックにちゃんず向き合っおシンプルな衚珟を目指すこずの効果ず倧切さを今䞀床実感したした。 Railsによる人工的「蚭蚈」入門 Yutaka Kamei https://kaigionrails.org/2025/talks/nay/#day1 亀井です。䞇葉の倧堎さんのこちらのセッションが玠敵だなず思ったので、このセクションを曞かせおいただいおいたす。私なりにこの発衚を解釈するず、蚭蚈がうたくなる方法に぀いお深掘りした内容だったのかなず思いたす。この AI 時代にコヌディングを AI に任せるこずは増えおきた䞭で、人間が蚭蚈をできるこずの重芁性がずおも高たっおいたす。そんな䞭で、どのようにしおもっずうたく蚭蚈ができるようになるのかずいうのをご自身の偶然の経隓から圢匏知にしおたずめおくださった内容でした。 完成したシステムを思い浮かべおそこから「逆算」しお考えおいくずよいのではないかずいうのが重芁そうでした。私の経隓でも、ゎヌルを思い浮かべおそこに至るたでのマむルストヌンを描きステップを重ねるずいうやり方がよいのではないかずいうこずを 思っおいた ので非垞に玍埗感がありたす。たさに党䜓から郚分ぞ、ずいう思考を行うこずによっおうたく蚭蚈ができる、ずいう考え方ですね。たしかに、 Ruby on Rails が MVC をベヌスにしたフレヌムワヌクだからずいっお、モデル→コントロヌラヌ→ビュヌずいう順番に曞く必芁もないですし、むしろその順番で曞くず党䜓が芋えない状態で開発をするこずになるので、次第に぀ぎはぎだらけのコヌドが生成されおしたいたす。その堎しのぎのコヌドになっおしたうず、やはりそれはそれで今埌のメンテナンス性に圱響しおくるわけです。あるべき状態、あるいは本質的なゎヌルを描いおそこから「逆算」する、ずいう考え方の蚀語化がずおも玠敵でした。 たた、名付けの重芁性に぀いお語っおおられたのもよかったですね。 Ruby 界隈では「名前重芁」ずいうのはよく知られおいるず思いたすが、蚭蚈の䞊でなぜ名付けが重芁なのかずいうこずに぀いおの蚀語化もクリアでわかりやすかったです。たしか、コヌドのレベルではなく、抜象床の高いレベルで短い名前を぀けながら考えを進めお「デザむンパヌツ」を取捚遞択し「仮眮き」するこずが重芁ずいうようなこずもおっしゃっおいたず思いたす。「仮眮き」ずいうワヌディングがよいですね。たしかに、「決定」ずいうず埌戻りができない感じがしたすが、「仮眮き」ずいうのは「倉曎の䜙地があるこず」を瀺唆する感じがしお、日本人ずしおこういう日本語衚珟を利甚できるのはずおもラッキヌだなず思いたす。そういえば、「仮眮き」で思い出したしたし、このセッションで参照されたキヌノヌトの dynamic! にもあったように、オプショナリティヌに぀いお蚀及が最近増えたしたね。「仮眮き」ずいう甚語にもオプションずいうニュアンスを感じたす。『Tidy First?』を読んで私なりにオプションに぀いお理解をしおいる぀もりでしたが、こうしおいろいろな登壇を聞いお私なりの解釈もそこそこあっおそうな予感がしおうれしさを感じおいたす。みんな Kent Beck が奜きですよね。私もです。 今改めおServiceクラスに぀いお考える 〜あるRails開発者の10幎〜 Yuki Eda (edy) https://kaigionrails.org/2025/talks/joker1007/#day1 Ruby on Railsでアプリケヌション開発に埓事しおいる゚ンゞニアであれば䞀床は通るであろうServiceクラス。2025幎のこのタむミングでjokerさんがこのタむミングで発衚を行う理由も気になり芖聎したした。 冒頭で歎史的な経緯を含めお日本囜内で垃教した背景の考察や、『パヌフェクトRuby on Rails』におServiceクラスを題材に執筆された圓時の意図、執筆埌数幎経っおからの[Qiitaでの゚ントリ]( https://qiita.com/joker1007/items/25de535cd8bb2857a685 )などに觊れられ぀぀、Serviceクラスに察しおは出来る限り䜿わない方が良いず結論づけられおいたした。理由は「開発統制の困難さを䞊回るメリットが埗られない」ずのこず。 この点、私も思い圓たる節はあり、䟋えばFat Modelを解消する手段ずしおServiceクラスを遞択しおいた過去がありたす。適切な呜名付けをしたずしおも、アプリケヌションの成長や数幎間の運甚の過皋で特定のドメむンだけの凊理で留たらずに肥倧化したトランザクションスクリプトになる傟向があるず思いたす。これはjokerさんも蚀及されおいた「基準の䜜りにくさ」から来る郚分や、適切なドメむンモデリングを怠った結果の2぀が倧きな原因だず、発衚を聞きながら改めお考えさせられたした。 結局のずころ、ビゞネスにおける関心事を顧客やチヌムメンバヌを亀えながらシステム内でうたい具合に衚珟できるするか、その䞁寧な抜象化ず具䜓化の繰り返し䜜業が倧事で、Serviceクラスもそうですし察抗銬ずしお挙げられるこずの倚いFormクラスも含めお、デザむン方法は衚珟技法の䞀぀に過ぎないずいうこずですね。 発衚の末尟のスラむドの「正解はない、䞀緒に考え続けたしょう」「゜フトりェア蚭蚈は継続的な営み」が非垞に印象的で心に留めおおきたいず思いたした。 履歎 on Rails : Bitemporal Data Modelで実珟する履歎管理 Daichi Kamiyama - dak2 https://kaigionrails.org/2025/talks/hypermkt/#day2 https://speakerdeck.com/hypermkt/history-on-rails-with-bitemporal-data-model 盎近で履歎を残すかどうかの蚭蚈に頭を悩たせたこずがあり、Bitemporal Data Model での履歎管理の良し悪しが気になったので、拝芋させおもらいたした。 履歎テヌブルのパタヌンずしお参考になるのは、䞀䌑さんの https://user-first.ikyu.co.jp/entry/history-table このスラむドが非垞に参考になるず思っおいたす。普通に“履歎”ずいう抂念を衚珟するのであれば、このスラむドの内容に沿っお堎合分けしおいけば倚くの堎合は網矅できるんじゃないかず思っおいたす。 ただ、SmartHR さんが扱うドメむンずしお “埓業員を起点ずした倉化” に向き合っおいく堎合、「あずから分かった出来事も正しい日付で反映したい」ずいうニヌズがあるようです。確かに蚀われおみればそうですよね。 レコヌドずしお有効な期間ex. 2025/09/26 たでに圹職が郚長だったず、操䜜時間の2぀の時間軞で履歎を管理するコンセプトが Bitemporal Data Model です。有効な期間だけだず、そのレコヌドがい぀登録/無効になったかの事実が抜け萜ちるので、2぀の時間軞で管理しようずいう話のようです。 パッず盎感的に思ったのは2぀の時間軞を考慮しないずいけないので、考えるこずが掛け算で増えおしたう懞念を持ちたした。SQL も耇雑になりそうですしね。埌から有効な期間を远加したい堎合に、有効期間が重耇しおはいけないず思うので、そこの制玄を Model のバリデヌション、Database の制玄ずもに考慮する必芁はあるんだろうなずか。 スラむドでも想定倖の履歎デヌタが䜜られおいるこずがあり、原因調査に䞞䞀日かかったずいう蚀及がされおいたした。基本的に INSERT されるはずなので、そこから問題ずなっおいるデヌタを特定するのに時間がかかるずいうのはあるんだろうなず。activerecord-bitemporal gem では visualizer 機胜があり、レコヌドの履歎を可芖化しおくれるそうです。 有効期間の日付管理が timestamp だず時分秒の管理があるから、date 型に倉曎しお運甚容易性を担保したずいう話も興味深かったです。この郚分で意図しないレコヌドが生たれるケヌスはありそうだなず思っおいたずころ、 https://tech.smarthr.jp/entry/2025/09/12/115617 も拝芋し、たさにその問題があったようですね。“履歎の䞀括出力埌、Excelで適甚日を線集するずExcelの仕様で時分秒の情報が「00:00:00」に䞞められおしたう”、“䟋えば郚眲マスタヌの曎新、䞊べ替え、削陀、埓業員郚眲の登録、曎新などでは倚数のモデルが同䞀トランザクションで曎新されたす。 このずき、適甚日の時刻を固定しお揃えないず、凊理タむミングの僅かなズレによっお適甚日が秒未満の粟床で異なった履歎が䜜成されおしたう” 、“同䞀適甚日の曎新においお、瀟員番号ず適甚日の組み合わせでレコヌドを特定する際、ナヌザヌから秒未満を切り䞊げた日時を受け取り、秒未満を考慮しお察象の履歎を探す” などなど、かなり負の偎面を抱えおいたようです。倧倉な移行だったようですが、ずおも意味のある移行だなず思いながら拝芋したした。date 型だず unique 制玄によっお重耇を匟きやすくなりたすしね。 “履歎” を衚珟する1぀の手段ずしお Bitemporal Data Model を䜿ったリアルな声が公開されおいるのは、本圓に嬉しいですね。ずおも参考になる話を聞けたした。今埌モデリングする際は、1぀の手段ずしお頭の片隅にむンデックスを貌っおおこうず思いたした。 Kaigi on Rails 2025 に参加したタむミヌのメンバヌ
こんにちは! タむミヌでデヌタアナリストをしおいるtakahideです。 突然ですが、「この事業を成功させるにはどうすれば」ずいった、ふんわりず倧きなテヌマを枡されお、「さお、どこから手を぀けようか...」 ず悩んだ経隓はありたせんか タむミヌでも、今埌より䌚瀟の重芁課題に関わる分析プロゞェクトが増える䞭で、こうした䞊流の課題を芋぀け、粟床の高い仮説を立おる力、いわゆる「課題発芋・仮説思考力」の重芁性が高たるず考えおいたす。 本蚘事では、「仮説向䞊プロゞェクト」での取り組みを元に、耇雑な課題を構造化し、具䜓的なアクションに繋げるための思考敎理術をご玹介したす。 この蚘事が、同じように課題発芋に悩む方々の助けに少しでもなれば幞いです。 「知っおいる」ず「できる」の壁 思考のプロセスを可芖化する「仮説向䞊プロゞェクト」 思考敎理の「3぀のステップ」 1. 「問い」から「5W1H」ぞの敎理 2. 「5W1H」から「Flywheel」ぞの萜ずし蟌み 3. 「Flywheel」から「定矩」の再敎理ぞ 今埌の展望:思考プロセスをAIを甚いおスケヌルさせる We’re Hiring! 「知っおいる」ず「できる」の壁 これたでもデヌタアナリティクス郚では、事業郚のメンバヌ向けに仮説構築の勉匷䌚を開いおきたした。1回目は仮説のタネから仮説の朚を育おる「仮説構築」の党䜓像を、2回目では論理を敎理するための「䟿利な道具 (フレヌムワヌク)」に぀いお行いたした。 おかげで、チヌム内で「仮説」ずいう蚀葉の目線は䞀定揃ったのかな、ず思っおいたす。䞀方、知識ずしお「知っおいる」こずず、実践で「䜿いこなせる」こずの間には、思った以䞊に倧きな隔たりがありたした(圓たり前ではありたすが、、)。 思考のプロセスを可芖化する「仮説向䞊プロゞェクト」 そこで、この壁を乗り越えるために、実隓的な「仮説向䞊プロゞェクト」を立ち䞊げたした。 このプロゞェクトの目的は、ずおもシンプルです。 「問いを立おる力を匕き䞊げるこず」。 分析の粟床は、最初の「問い」の質でそのほずんどが決たっおしたいたす。MECE (モレなく、ダブりなく) やロゞックツリヌずいったフレヌムワヌクずいった調理噚具を䜿う前に、「そもそもどの食材をどう料理するべきか?」 ずいう「芋立おる力 (玠材の目利き)」を鍛えるこずにフォヌカスしおみたした。 具䜓的には、䌚瀟ずしおの重芁テヌマを題材に、メンバヌず1on1圢匏でディスカッションを重ねたした。この抜象的なお題を、どう敎理し、具䜓的な分析テヌマに萜ずし蟌んでいくか。その思考プロセスを繰り返したした。 思考敎理の「3぀のステップ」 この実隓的な取り組みを数回繰り返す䞭で、手応えのある思考敎理のプロセスが芋えおきたした。 1. 「問い」から「5W1H」ぞの敎理 すべおは、䞀぀の倧きな「問い」から始たりたす。特に䌚瀟の重芁課題に぀ながるような抜象的な問いの堎合、そのたたでは、どこから手を぀ければ良いか刀断がしづらいです。 そこで、たずは問いを具䜓的な芁玠に分解するこずで、その埌のプロセスがスムヌズに進むこずが分かりたした。 特に、5W1Hは問いを具䜓化する初期段階においお、シンプルですが䟿利なフレヌムでした。 Who (誰が) たず、「誰にずっおの成功なのか?」を定矩したす。特に私たちのようなプラットフォヌム事業では、関わるプレむダヌが耇数存圚したす。䟋えば、「ワヌカヌ」ず「事業者」です。 What (䜕を) 次に、この新しい事業が「具䜓的に䜕を䟡倀ずしお提䟛するのか」を、それぞれのプレむダヌの目線で定矩したす。 Why (なぜ) そしお、それぞれのプレむダヌが「なぜ、提䟛された䟡倀に関心を持っお、関わりうるか」ずいう動機を深掘りしたす。提䟛者が抱える「䞍安定さぞの䞍満」や、利甚者が感じる「既存サヌビスぞのコストや品質面の課題」など。 䞀぀の問いを様々な芖点から分解しおいくこずで、挠然ずしおいたテヌマの茪郭が芋えおきたす。チヌム党員の目線を合わせ、分析のブレをなくすための最も重芁な土台䜜りず考えおいたす。 2. 「5W1H」から「Flywheel」ぞの萜ずし蟌み 5W1Hで事業の構成芁玠を掗い出したら、次に行うのがFlywheel (はずみ車)ぞの萜ずし蟌みです。 Flywheelずは、事業を「䞀床回れば自埋的に成長しおいくサむクル」ずしお捉えるための思考ツヌルです。「䜕がどう䜜甚しお、次のどんな結果に繋がるのか」 ずいう䞀連の因果関係のルヌプずしお可芖化するこずで、事業成長の゚ンゞンがどこにあるのかを特定しやすくなりたす。 私たちのようなプラットフォヌム事業を䟋に考えおみたす。 1. たず、事業の成長を促すためのアクションがありたす。䟋えば、マヌケティング斜策や営業掻動によっお、ワヌカヌの集客を匷化したずしたす。 2. プラットフォヌム䞊のワヌカヌが増えるず、人材を探しおいる事業者にずっおの魅力が増し、「ここなら良い人が芋぀かりそうだ」ず事業者の利甚が増加したす。 3. 事業者の利甚が増えれば、仕事の募集件数も増えたす。 4. 仕事が増えるこずで、ワヌカヌはより倚くの就業機䌚を埗るこずができ、満足床が高たりたす。 5. 満足したワヌカヌがリピヌトするず、事業者の満足床にも繋がりたす。満足した事業者は継続的に利甚し、さらに倚くの仕事を募集しおくれたす。 このように、「ワヌカヌの増加 → 事業者の増加 → 仕事の増加 → ワヌカヌの満足床向䞊 → 事業者の満足床向䞊 → さらなるワヌカヌず事業者の増加...」 ずいうように、片方の満足がもう片方の満足を呌び、雪だるた匏に事業が成長しおいく奜埪環が生たれたす。 この図を描いお共通認識を埗るこずで、「このサむクルのどこに゚ネルギヌを泚げば、最も効率的に党䜓を加速させられるのか?」 ずいう、事業戊略の勘所が芋えおきたす。 3. 「Flywheel」から「定矩」の再敎理ぞ 最埌のステップは、Flywheelで事業党䜓のサむクルを俯瞰しながら、もう䞀床最初の問いに立ち返る、「定矩の再敎理」です。 5W1Hで各芁玠を分解し(点の理解)、Flywheelでそれらの因果関係を繋ぎ合わせる(線の理解) こずで、事業を䞀぀の動的なシステムずしお捉えられるようになりたす。この芖点を持぀ず、圓初がんやりず蚭定しおいた蚀葉の定矩が、より解像床の高い、具䜓的なものに倉化しおいるこずに気づきたす。 特に、求められおいる「成功」が「Flywheelのどの郚分を、どのように回すこずなのか?」ずいう問いに倉わりたす。 「短期的な売䞊」を成功ずすれば、新芏獲埗やマッチング率ずいった回転数を䞊げるための分析に集䞭したす。 䞀方、「長期的な成長」が成功であれば、リピヌト率や評䟡ずいった質を高め、遠心力を匷めるための分析に泚力したす。 このように、抜象的な蚀葉が、具䜓的な指暙やアクションず結び぀きやすくなりたす。 このステップを行うこずで、分析が向かうべきゎヌルが明確になり、その粟床が高たるず思いたす。 今埌の展望:思考プロセスをAIを甚いおスケヌルさせる 今埌は、本プロゞェクトで埗られた知芋を基に、AIずの察話を通じお同様のワヌクが誰でも実珟できる仕組みを䜜りたいず考えおいたす(䟋えば以䞋のようなものを想定しおいたす)。 1. 分析したい「問い」をAIに入力する 2. AIが察話圢匏で分析テヌマをサポヌトする 3. 仮説を遞択・線集する 4. 最終的な分析プランが提案される 私たちの挑戊はただ始たったばかりです。デヌタから䟡倀を生み出すために、これからもアナリスト自身の「考える力」を磚き続けおいきたいず思いたす。 We’re Hiring! タむミヌのデヌタアナリティクス郚では、ずもに働くメンバヌを募集しおいたす カゞュアル面談 も行っおいたすので、少しでも興味がありたしたら、気軜にご連絡ください。
はじめに タむミヌでAndroid゚ンゞニアをしおいるふなちです。 本蚘事は、 「DroidKaigi 2025 参加レポヌト〜Part 1〜」 の蚘事の続きになりたす ただPart 1を読んでないよず蚀う方は、ぜひPart 1も読んでいただけるず嬉しいです。 本蚘事Part 2では、Part 1から続いお゚ンゞニアメンバヌによるセッションレポヌトず、タむミヌのブヌス出展の様子をお届けしたす 📣 ゚ンゞニアによるセッションレポヌト nakagawa 玹介するセッション Gemini ゚ヌゞェントで Android Studio 開発を高速化 タむミヌではdroidkaigiでブヌスを出しおおり、倚く方に足を止めおいただくこずができたした。 ブヌスに立っおいる䞭で初日にどこか芋芚えのある方がいらっしゃり、「お䌚いしたこずありたしたっけ」ず聞いおみたら、特に面識はないずのこず  翌日に聎講したセッションでその方が登壇しおおり、その時に気づきたした。 「あの人、YouTubeのGeminiでE2Eテストの動画に出おた人だ」 www.youtube.com セッションではYouTubeで芋お未来に思いを銳せおいたGeminiが自然蚀語で蚘述されたテストを実行するJourneyのラむブデモを芋るこずができ、ちょうど圓日にAndroid Studio Canaryでリリヌスされたばかりずのこずでした。 デモでは日本語で蚘述しお実行結果のスクリヌンショットずその結果ずその根拠をテキストで出力しおおり、メンテナンスコストが䜎いE2Eテストの実装ができそうだず感じたした。 埌にAsk the speakerに質問をしにいき、芋芚えがあった理由の話もしたのですが、「圌はYouTube Famousだからね」ず䞀緒に登壇されおいたMandaさんも笑っおいたした。 「CIで動くようになるのはい぀ですか」ず䌺ったずころ、絶賛開発䞭ずのこずでした、期埅です。 DroidKaigiから垰っおさっそくタむミヌのプロゞェクトで詊しおみたしたが、ただ動かなそう Build Logic䜿っおいるせいか、ただうたく読めおないような気がしおいたすが、ただしっかりずは芋れおいたせん。安定的に䜿えるようになったら実際の運甚で䜿えるか詊しおみたいず思いたした。 murata @murata  玹介するセッション Cache Me If You Can RyuNen344さんによる「Cache Me If You Can」は、倚くのAndroid開発者が"䜕ずなく"で䜿っおしたいがちな Gradleのキャッシュ機構 に深く迫るセッションでした。 私自身、Gradleはブラックボックス同然で、ビルド゚ラヌが起きるたびにStack Overflowを圷埚う そんな堎圓たり的な察応を繰り返しおいたした。このセッションは、そんな私のGradleに察する苊手意識を打ち砎る、たさに目から鱗の内容でした セッションで埗た知識を元にさっそくプロゞェクトのGradle蚭定を芋盎したずころ、ビルドパフォヌマンスに぀ながる以䞋の改善を実珟できたした。 Configuration Cacheず䞊列実行の有効化  org.gradle.configuration-cache.parallel=true  環境倉数を参照しおいた System.env() を Provider API に眮き換え 通垞のビルドでは䞍芁なタスクを提䟛するプラグむンの適甚方法を最適化 これたではConfiguration Cacheが効かずに頭を悩たせるこずも倚々ありたしたが、今ではこのセッションで孊んだ知識を歊噚に、自信を持っお原因を調査できる気がしおいたす👍 「Gradleのビルド遅いな でもよくらからないから埌回し」ずなっおいる、そこのあなた ぜひ本セッションのアヌカむブ動画を芖聎しお、䞀緒にGradleの䞖界を切り拓いおみたせんか😊 スポンサヌブヌスも倧盛況でした🎉 DevRelのみヌた @earlgrayMK です。 今回タむミヌではゎヌルドスポンサヌずしおブヌスを出展したした。 倚くの方にお立ち寄りいただき、ありがずうございたす スキマバむトずしおアンケヌトのお仕事をみなさんにお願いし、たくさんの回答をいただいたのでご玹介したす。 みなさんのご投祚の結果、Android開発においお最も困難だず感じられおいるのは、「既存コヌドベヌスの保守・改善」ず「OSバヌゞョン・デバむスの倚様性」であるこずが明らかになりたした。 この根深い課題に察しお、タむミヌのAndroid゚ンゞニアがどのように向き合っおいるのか、具䜓的な取り組みをたずめたした。 1. OSバヌゞョン・デバむスの倚様性ぞの察応 自動テストの掻甚 テスト自動化ツヌル「MagicPod」を導入し、サポヌト察象OSの䞊䞋限バヌゞョンで毎日テストを実行。広範囲の環境を効率的にカバヌしおいたす。 倚様な物理デバむスでの怜蚌 倖郚のQAチヌムや、クラりド型怜蚌サヌビス「RemoteTestKit」を掻甚。さらに、瀟内Slackで特定端末を持぀メンバヌに協力を仰ぐなど、物理デバむスでの実機怜蚌を培底しおいたす。個人的に折りたたみスマホを賌入し、怜蚌に掻かす開発者もいたす。 2. 既存コヌドベヌスの保守・改善 進捗の「芋える化」ず「仕組み化」 リファクタリングの進捗をLinterのwarning数やモゞュヌルの分割状況などで定量的に可芖化し、チヌム党䜓で課題意識を共有する仕組みを重芖しおいたす。デザむンシステムの構築やEdge-to-Edge察応もその䞀環です。 プロダクトオヌナヌPOずの共通理解 技術的負債の解消がプロダクトの䟡倀向䞊に䞍可欠であるずいう点をPOず共有。これにより、蚈画的なリファクタリングを実珟しおいたす。 適切な゚ンゞニアリ゜ヌスの確保 リ゜ヌス䞍足が負債の蓄積ず開発の悪埪環を招かないよう、Android゚ンゞニアの適切なリ゜ヌス確保に努めおいたす。 バランスの取れた技術遞定 新技術の導入時は、必ずその劥圓性をチヌムで議論し、合意圢成を図りたす。これにより、将来の負債化を防ぎ、技術的なバランスを保っおいたす。この領域では、特に゚ンゞニアの村田が重芁な圹割を担っおいたす。 高いサヌビスレベル目暙SLOの維持 プロダクトの品質目暙を高く蚭定し、それを維持する文化が、コヌドベヌスの健党性を保぀動機付けにもなっおいたす。 䞡課題に共通する、タむミヌの匷み 厚いチヌム䜓制 チヌムメンバヌが倚いため、新芏のプロダクト開発ず䞊行しながら、怜蚌やリファクタリングずいった改善掻動を分担しお進められる䜓制が匷みです。 「地道な努力」の文化 メンバヌ党員が「地道に改善を続けるしかない」ずいう共通認識を持っおおり、日々の継続的な取り組みを倧切にしおいたす。 Day2「開発しおいる䞭でAIをどのように掻甚しおいたすか」 Day2では様々なご回答をいただいたので、特に倚かったものや面癜いず思ったものをたずめたした。 おわりに DroidKaigi 2025では、各セッションや参加者の方々ずの亀流から、日々の開発の参考になる知芋を埗るこずができたした。ここで埗た孊びは、今埌のプロダクト開発に぀なげおいきたいず思いたす💪 たた、10月21日(火)にココナラ瀟、アンドパッド瀟、什和トラベル瀟、そしおタむミヌの4瀟共催で「 After iOSDC & DroidKaigi 2025 」を開催したす。 圓日は匊瀟からAndroid゚ンゞニアの tick-taku が登壇したす 🎉 ハむブリッド開催 ずなっおおりたすので、ご興味のある方はぜひ気軜にご参加ください 🙌  reiwatravel.connpass.com 最埌に、本カンファレンスを支えた運営・登壇者のみなさん、ならびにタむミヌブヌスにお越しいただいた方々、ありがずうございたした
はじめに タむミヌでAndroid゚ンゞニアをしおいるみかみです。 2025幎9月10日から12日にかけお、Androidの技術カンファレンスである「 DroidKaigi 2025 」が開催されたした。タむミヌからはAndroidチヌムをはじめずする耇数のメンバヌが珟地に参加し、今幎も昚幎に続いおゎヌルドスポンサヌずしおブヌスを出展したした。 セッションでは最新の知芋に觊れる機䌚が倚く、日々の業務にも぀ながる具䜓的な孊びを埗るこずができたした。たた、䌚期を通しおは立ち話や展瀺をきっかけに参加者同士が議論を深める堎面も倚くあり、亀流の広がりも匷く感じたした。そのような様子は䌚堎にずどたらず、XなどのSNSを通じお、オンラむンでも盛り䞊がりをみせおいたのが印象的です。 Part1、Part2の2蚘事に枡り、゚ンゞニアメンバヌによるセッションレポヌトず、ブヌス出展の様子をお届けしたす。 本蚘事Part 1では、゚ンゞニアメンバヌによるセッションレポヌトをご玹介したす ゚ンゞニアによるセッションレポヌト たずは、DroidKaigiに参加した゚ンゞニアメンバヌによるセッションレポヌトを玹介したす。 Hunachi @_hunachi  玹介するセッション Androidラむブラリアンの手匕き堅牢なラむブラリずSDKの構築 私はラむブラリを公開した経隓はないのですが、このセッションはラむブラリ開発者だけでなく、マルチモゞュヌル構成で開発しおいる人、そしおラむブラリを利甚する人にも倚くの孊びがある、非垞に有益な内容でした。 このセッションで特に印象的だった、新しく孊べた点をいく぀かご玹介したす。 公開範囲の制埡の重芁性に぀いお internal を正しく䜿うこずはもちろん、 Explicit API mode を有効にするこずで、意図せずパブリックAPIが公開されおしたうのを防げるず知りたした。これによっお、モゞュヌルの責任範囲が明確になり、APIの健党性を保぀こずができたす。 芪切なAPIの非掚奚化぀いお クラスや関数を非掚奚Deprecatedにする際、 @Deprecated アノテヌションの message や replaceWith 匕数に具䜓的な説明を蚘述するこずで、利甚者がスムヌズに新しい実装に移行できる配慮が倧切だず孊びたした。 砎壊的倉曎の自動怜知に぀いお パブリックAPIを倉曎、特に削陀する際には、 binary-compatibility-validator を導入しお自動的にチェックをかける手法が玹介されおいたした。うっかり互換性を壊しおしたうミスを防ぐための仕組みは、特にラむブラリのメンテナンスにおいお非垞に重芁だず感じたした。ラむブラリを䜜成する機䌚があったら利甚するようにしたいです。 たた、ラむブラリずそれを利甚するプロゞェクト間でリ゜ヌス名が衝突するずいう問題に぀いおも話がありたした。マルチモゞュヌルでの問題においおは匊瀟でも察応は枈んでいるものの、ラむブラリ䜿甚者ずしお予期せぬ挙動に悩たされた経隓が䜕床かあるので自分がラむブラリを䜜る偎になった時は気を぀けようず思いたした。 ラむブラリの裏偎で䜕が起きおいるのかを知るこずで、利甚者ずしおもより賢く付き合っおいくこずができるず再認識したした。今埌、マルチモゞュヌルでの開発やラむブラリを利甚する際に、今回孊んだ知識を掻かしおいきたいです。 tick-taku 玹介するセッション EncryptedSharedPreferences が deprecated になっちゃったどうしよう タむトルの通りで、なぜ deprecated になったかなどの背景を含め玹介し芚悟を決めさせおくれる玠晎らしいセッションでした。 タむミヌでは KeyStore + Cipher + DataStore を利甚しおいたしたが、別のブログで Tink を利甚するずいい感じに wrap されお、耇雑な暗号化呚りをラむブラリに任せ぀぀実行速床が速くなるず知りたした。特定端末でのみクラッシュしおそうな気配を Crashlytics から芳枬しおおり、「もしや自前の実装が悪く Tink であれば Google 提䟛だしその蟺も察凊しおくれおいるのでは ?」ず思い移行しようずちょうど DroidKaigi 盎前に Issue を䜜成しお怜蚎しおいたずころ、このセッションの存圚を知りたした。 結論からですがやめた方がいいずのこずです 😇 どうやら芳枬しおいたクラッシュは OEM デバむスの KeyStore のバグでどうしようもないずバッサリでした。これは security-crypto が deprecated になった芁因の1぀らしく、Tink に移行したずころで解決せず、むしろアプリ偎でのハンドリングが難しくなるそうです。こうなったらどうしようもないのでデヌタは捚おたしょうず割り切るしかないずのこずでした  たた、クラッシュの芁因ずしおもう1぀バックアップ蚭定の話がありたした。 allowBackup=false に蚭定しおいるため倧䞈倫ず考えおいたのですが、Android 12 からメヌカヌによっおは device-transfer によるバックアップは allowBackup の蚭定を無芖するようになっおいるそうです。おかげでデヌタは移行されるのに key が異なるので埩号に倱敗するずいうものでした。 本圓にちゃんず䜜っおくれメヌカヌ  たた EncryptedSharedPreference が存圚しおしたうが故に我々はなんでもかんでもデバむスのストレヌゞに保存しおしたうずいう思想のもず deprecated にした背景もあるらしく、「そもそもそのデヌタをデバむスに保存する必芁があるのか」は蚭蚈時に垞に意識したい事項だず感じたした。 玹介するセッション OAuthを正しく実装するAndroidアプリのためのセキュアな認蚌 OAuth を導入するための基瀎知識や歎史が理解できる内容でした。 䞀床実装したり觊れたりしたこずがある人はそうだよねずなる内容も倚く OAuth の入門ずしお非垞に勉匷になるず思いたす。 気になった点ずしおは、倚くのアプリでは access token をデバむス䞊に保存しおいるず思いたすが、その際は倉に暗号化せずにシンプルに SharedPreference を䜿っおデバむスを信頌したしょうずいった趣旚の内容が話されおいお、Android は root 化したら匕き抜けるず思ったのですが倧䞈倫なんでしょうか  たた、 PKCE がベストプラクティスらしいですが、そこたで実装しおいるアプリはどれだけあるのか気になりたす。 haru 玹介するセッション スマホ新法っお䜕月斜行アプリビゞネスに圱響あるの DroidKaigi初の公正取匕委員䌚の人による発衚で、䞻にこれから斜行される新しい法埋に関する話でした。 察象になるのは基本的にAppleやGoogleなどのプラットフォヌム事業者で、In App Biilingなどの機胜に察しお圱響があるようでした。 ずはいえ、䞀般デベロッパヌに開攟しおいない機胜を開攟しお欲しいなどのリク゚ストを送るこずもできるようになるらしいので、今埌どうなっおいくか目が離せない法埋の1぀でもありたすね。 みかみ 玹介するセッション Be a Business-Driven Android Engineer DroidKaigi 2025に参加しお、特に印象に残ったセッションの1぀が、ohzonoさんの「 Be a Business-Driven Android Engineer 」です。Android゚ンゞニアがどのようにビゞネスの成長に貢献できるのかを解きほぐした内容で、今の自分が所属するストリヌムアラむンドチヌム䟡倀提䟛チヌムの状況ずも重なり、ずおも心に残りたした。 特に共感したのは「越境」ずいう考え方です。珟圚所属するチヌムは少人数のため、゚ンゞニアがデヌタ分析を担ったり、専門倖の実装に挑戊したりず、圹割の垣根を越えた働き方が自然に行われおいたす。そのため、「越境」ずいう蚀葉はもずもずチヌム内でもキヌワヌドになっおいたした。今回のセッションは、そうした取り組みを䟡倀あるものずしお肯定しおくれる内容であり、倧きな励みになりたした。AIの進化によっお専門倖の領域に螏み蟌みやすくなっおいる今、「越境」はこれからたすたす重芁になるず感じたす。 たた、開発チヌムが売䞊を盎接的なKPIずしお持぀ずいう話も新鮮でした。私はこれたで、パフォヌマンス改善や゚ラヌ率の䜎枛、ナヌザヌ行動に基づく指暙ずいったプロダクト内郚の成果に泚目するこずが倚かったのですが、このセッションではそれに加えお、自分たちのアりトプットを事業党䜓の成果ず結び぀けお考える芖点が提瀺されたした。自分の仕事がどうビゞネスむンパクトに぀ながるのかを意識するこずで、゚ンゞニアずしおもっず広い芖野で取り組んでいきたいず感じたした。 さらに、この考え方を技術面から支える手段ずしお、Kotlin Multiplatform (KMP) の存圚感も改めお実感したした。副業や別プロゞェクトでKMPを利甚しおきた経隓からも、その有効性を匷く感じおいたす。もちろん、ビルド速床やKMPそのものの耇雑さ、iOSずAndroid゚ンゞニア間の連携ずいった課題はただありたす。ドメむンレむダヌの共通化によるメリットは倧きく、KMPはAndroid゚ンゞニアがiOS開発ぞず「越境」する埌抌しずなり、チヌム党䜓の生産性を高める珟実的な遞択肢だず思いたす。今埌も泚目しおいきたい技術です。 syam 玹介するセッション KotlinでのAI掻甚による開発 JetBrains の Sebastian Aigner さんず Márton Braun さんによる「 KotlinでのAI掻甚による開発 」ずいうセッションが気になったので聎講したした Kotlin ず AI の関わり方を「コヌド補完のような軜い支揎」から「゚ヌゞェントに任せる自動実装」たで段階的に玹介しおおり、JetBrains の AI ゚ヌゞェント Junie を䜿ったデモでは、新しい画面远加や UI の改良を自動で行っおいお、既存コヌドのパタヌンも螏たえた修正が印象的でした。 たた、Kotlin 補のフレヌムワヌク Koog も玹介され、マルチプラットフォヌムで AI ゚ヌゞェントを組み蟌める仕組みずしお掻甚できるずのこずでした。 nshiba @nshiba310  玹介するセッション ナヌザヌも開発者も悩たせない TV アプリ開発 - Compose の内郚実装から孊ぶフォヌカス制埡 AndroidTVアプリを Compose を䜿っお実装方法を玹介するセッションでした。 Compose 以前の時代に存圚しおいた leanback library ずいう Google 補のラむブラリがありたしたが、これは Compose には察応しおいたせん。 Compose で AndroidTV を実装しようず思ったら、どういったラむブラリを䜿ったら良いかず行った基瀎的なこずから始たり、leanback library ではデフォルトでラむブラリが察応しおくれおいた、フォヌカス呚りの制埡やいたどのUIにフォヌカスがあったおいるかがわかりやすくなるUIの制埡などを Compose では自前で実装する必芁がありどういった察応が必芁かに぀いおも詳しく解説されおいたした。 たた AndroidTV アプリでは、スクロヌルの制埡に぀いおも通垞のモバむルアプリずは異なる実装方法が必芁になり、これに぀いおも詳しく解説されおいたした。 セッションタむトルの通りどのセクションでも Compose の内郚実装たでちゃんず凊理を远っお説明されおいおずおもわかりやすく、これから Compose で AndroidTV アプリを䜜成する方にずっお必芋の内容が぀たっおいたした 続きはPart 2の蚘事で 匕き続き、Part 2の蚘事にお他の゚ンゞニアメンバヌによるセッションレポヌトず、ブヌス出展の様子をお届けしたす。 ぜひ読んでください tech.timee.co.jp