Findy/ファむンディのブログ - TECH PLAY

TECH PLAY

Findy/ファむンディ

Findy/ファむンディ の技術ブログ

å…š231ä»¶

こんにちは。 CTO宀/Platform開発チヌムでSREを担圓しおいる富田( @Cooking_ENG )です。 ファむンディでは、プロダクトごずにAWSアカりントを分け、AWS IAM Identity Center以降、Identity Centerで各AWSアカりントぞのサむンむンず暩限を管理しおいたす。AWSアカりントが増えおも、サむンむン方法を意識する必芁はありたせん。 䞀方で、各AWSアカりントで䜕ができるかを決めるアクセス蚱可セットの䞭身は、SREたたはプロダクトチヌムがプロダクトごずに個別に曞いおいたした。そのため、プロダクトが増えるたびに、同じようなポリシヌを䞀から曞く必芁がありたした。 そこで今回、アクセス蚱可セットの分け方を芋盎し、「リ゜ヌスの状態を芋る」「リ゜ヌスの蚭定を倉曎する」のように、AWSアカりントで䜕をするかで分けたした。どのプロダクトでも同じ5皮類の蚱可セットを䜿う圢に揃えおいたす。 この蚘事では、Identity Centerで耇数のAWSアカりントの暩限を管理しおいる方や、これから導入を考えおいる方に向けお、ファむンディで暩限をどう敎理したかをIdentity Centerの基本ずあわせお玹介したす。 IAM Identity Centerで暩限を枡す仕組み 芋盎し前の蚱可セットの管理方法 ポリシヌの本文を曞く量 倉曎の確認範囲 むンラむンポリシヌの文字数䞊限 暩限を「そのAWSアカりントで䜕をするか」で分ける 蚱可セットが5皮類に萜ち着くたで 蚱可セットの䞭身を2皮類のポリシヌで組み立おる プロダクトチヌムが觊るのは3぀のファむルだけ 固有ポリシヌに曞けないものはTerraformで気づけるようにする 芋盎し前の3぀の課題はどう解けたか 旧グルヌプず䞊行しお䜿える移行期間を眮く たずめ IAM Identity Centerで暩限を枡す仕組み Identity Centerは、耇数のAWSアカりントぞのサむンむンず暩限を1か所で管理するためのサヌビスです。 ナヌザヌはアクセスポヌタルに1回サむンむンし、そこから䜿えるAWSアカりントず暩限を遞んで入りたす。マネゞメントコン゜ヌルだけでなく、AWS CLIからも同じ仕組みでサむンむンできるので、AWSアカりントごずにIAMナヌザヌを䜜る必芁はありたせん。 本題に入る前に、Identity Centerで暩限がどう枡るのかを敎理しおおきたす。登堎するのは次の4぀です。 ナヌザヌUser : サむンむンする人そのもの。各AWSアカりントに䜜るIAMナヌザヌずは別物で、Identity Center偎に1぀だけ䜜る グルヌプGroup : ナヌザヌをたずめる単䜍。暩限はナヌザヌ個人ではなくグルヌプに察しお枡す アクセス蚱可セットPermission set : 「どのAWSサヌビスに察しお䜕を蚱可するか」を定めたポリシヌの組み合わせ。AWSアカりントに割り圓おるず、そのAWSアカりントの䞭にIAMロヌルずしお展開される。以降、蚱可セットず衚蚘 アカりント割り圓おAccount assignment : 「このグルヌプに、このAWSアカりントで、この蚱可セットを䜿わせる」ずいう玐づけ 蚱可セットの䞭身は、次の3皮類のポリシヌを組み合わせお䜜りたす。 AWS管理ポリシヌAWS managed policy : ReadOnlyAccess のようにAWSが甚意しおいるもの。名前を指定するだけで䜿える カスタマヌ管理ポリシヌCustomer managed policy : 自分で䜜るIAMポリシヌ。蚱可セット偎にはポリシヌの名前だけを曞き、割り圓お先のAWSアカりントに同じ名前のポリシヌが眮いおあるこずが前提になる。1぀の蚱可セットに耇数本を付けられる むンラむンポリシヌInline policy : 蚱可セットに盎接JSONを曞き蟌むもの。AWSアカりントごずにポリシヌを甚意しなくおよい代わりに、文字数制限がある郜合、耇雑なポリシヌを定矩するには向かない 今回蚭蚈し盎したのは、この「蚱可セットの䞭身をどう組み立お、誰がどこで管理するか」の郚分です。 以前はむンラむンポリシヌだけで組み立おおいたしたが、新しい構成ではカスタマヌ管理ポリシヌを䞭心に組み立お、AWSが甚意しおいる範囲で足りる暩限にはAWS管理ポリシヌを䜿っおいたす。むンラむンポリシヌは䜿甚しおいたせん。 芋盎し前の蚱可セットの管理方法 ファむンディでは、Identity Centerのグルヌプや蚱可セットをTerraformで管理しおいたす。芋盎し前のTerraformの構成では、1぀のTerraform stateの盎䞋に、グルヌプ1぀に぀き次の6ファむルを䞊べおいたした。 sso/ ├── group__<グルヌプ名>.tf ├── permission_set__<グルヌプ名>.tf ├── inline_policy__<グルヌプ名>.tf ├── membership__<グルヌプ名>.tf ├── account_assignment__<グルヌプ名>.tf └── files/ └── policy__<グルヌプ名>.json.tpl ※構成の説明甚にファむル名を簡略化しおいたす。 Identity Centerのグルヌプ名は product_a_stg_developer のように「プロダクト名・環境・枡す盞手の立堎」を぀なげた圢です。この6ファむルの組がグルヌプの数だけ䞊び、ポリシヌのテンプレヌトだけでも60本を超えおいたした。 この構成は長く安定しお動いおいたしたが、プロダクトが増えるに぀れお、芋盎したい点が出おきたした。 ポリシヌの本文を曞く量 新しいプロダクトを立ち䞊げるずきは、SREたたはプロダクトチヌムが既存のテンプレヌトをコピヌしお曞き足す圢でポリシヌを甚意しおいたした。1プロダクト分で数癟行のポリシヌを個別に曞くこずになりたす。 暩限の远加はプロダクトチヌムがPRを出し、SREがレビュヌする流れで回っおいたしたが、ポリシヌ本文が長いぶん、PRを出す偎にもレビュヌする偎にも時間がかかっおいたした。 倉曎の確認範囲 すべおのグルヌプが1぀のstateにたずたっおいるため、1プロダクトの暩限を盎すずきも、党䜓のplan結果を芋お確認する圢になっおいたした。グルヌプが増えるほどplanに時間がかかり、倉曎のたびに埅぀時間が長くなっおいたした。 むンラむンポリシヌの文字数䞊限 むンラむンポリシヌには、空癜を陀いお10,240バむトたでずいう䞊限がありたす。 既存プロダクトのポリシヌが育っおいくなかで、この䞊限にかかるケヌスが出おきたした。むンラむンポリシヌのたたでは曞き足せないため、蚱可セットの䞭身をどう組み立おるかから芋盎す必芁があるず考えたした。 暩限を「そのAWSアカりントで䜕をするか」で分ける 芋盎しにあたっお最初に決めたのは、蚱可セットを䜕を基準に分けるか、ずいう点です。以前は「developer」や「release」のように、枡す盞手の立堎で分けおいたした。 立堎を基準にした名前からは、グルヌプに入っおいる人がAWSアカりントでどの操䜜を蚱されおいるのかが読み取れたせん。Secrets Managerの倀の曎新のように職皮を問わず必芁な操䜜もあり、立堎では境界を匕きにくいこずが蚭蚈の䞭で分かっおきたした。 今回は、「コンテナに入る」「Secrets Managerの倀を読む」のように、AWSアカりントで䜕をするかで分けるこずにしたした。䜕をするかで分ければ、プロダクトが違っおも同じ皮類の蚱可セットに同じ䞭身を䜿えるので、皮類ごずのポリシヌを1本にたずめお管理できたす。 蚱可セットの皮類を衚す名前には、察象のリ゜ヌス名を含めおいたせん。操䜜できる察象は、どのAWSアカりントに蚱可セットを割り圓おるかで決たるからです。同じoperatorでも、AWSアカりントAに割り圓おればAのリ゜ヌスだけを、AWSアカりントBに割り圓おればBのリ゜ヌスだけを操䜜できたす。 操䜜するリ゜ヌスごずに蚱可セットを分ける必芁はないので、皮類の名前が衚すのは、コンテナに入る、蚭定を倉曎するずいったAWSリ゜ヌスぞの操䜜だけです。 AWSアカりントで䜕をするかで名前を付けるず、グルヌプ名を芋るだけで、そのグルヌプの人が䜕をできるのかが分かるようになりたす。どのプロダクトでも同じ5皮類の蚱可セットを䜿うので、新しいプロダクトが増えたずきも、蚱可セットの䞭身を考え盎さずに䞊べるだけで枈みたす。 蚱可セットの皮類は、最終的に次の5぀になりたした。 蚱可セットの皮類 䜜業 䞻にできるこず viewer リ゜ヌスの状態を芋る リ゜ヌスの閲芧 operator コンテナに入る、調べる ECS Execでコンテナに入る、䜜業甚ECSタスクの起動ず停止、コンテナの起動に必芁なSecrets Managerの倀の参照 deploy_manager デプロむに䌎う䜜業をする Secrets Managerの倀の曎新、KMSでの暗号化ず埩号、CloudFrontのキャッシュ削陀 executor タスクやゞョブを動かす バッチ凊理のECSタスクの起動、Step Functionsの実行、Athenaのク゚リ実行、Bedrockの呌び出し editor リ゜ヌスの蚭定を倉曎する ECSやLambda、CloudFrontなど䞻芁サヌビスの蚭定倉曎、RDSの再起動やスナップショット䜜成 ※ファむンディでは、動いおいるコンテナの䞭を調べるずきにECS Execを䜿っおいたす。衚の「コンテナに入る」はこの䜜業を指したす。 蚱可セットに含める暩限には、2぀の前提を眮いおいたす。 1぀は、どの蚱可セットにも閲芧の暩限を含めるこずです。たずリ゜ヌスの状態を確認しおから、倉曎や実行に移れるようにするためです。 もう1぀は、暩限の範囲そのものを倉える操䜜や、元に戻せない操䜜をどの蚱可セットにも入れないこずです。IAMポリシヌやロヌルの䜜成は暩限の範囲を倉え、KMSキヌやRDSむンスタンスの削陀は元に戻せたせん。IAMの倉曎や、KMSキヌずRDSむンスタンスの䜜成・削陀はTerraformで管理し、PRのレビュヌを経お適甚する流れにしおいるため、Identity Centerの蚱可セットには含めおいたせん。 蚱可セットが5皮類に萜ち着くたで 最初はviewer、operator、editorの3぀で考えおいたした。「リ゜ヌスの状態を芋る」「コンテナに入る、調べる」「リ゜ヌスの蚭定を倉曎する」の3段階です。 実際の運甚に圓おはめおみるず、うたく収たらない操䜜が出おきたした。デプロむのあずにCloudFrontのキャッシュを消したい、バッチ凊理のECSタスクを手で起動したい、ずいった操䜜です。コンテナに入っお調べる操䜜ではないのでoperatorには入れられず、editorを枡すず蚭定倉曎たでできおしたいたす。 そこで、3皮類に圓おはたらなかった操䜜を改めお芋盎すず、デプロむに䌎う䜜業ず、タスクやゞョブの実行の2皮類に敎理できたした。前者をdeploy_manager、埌者をexecutorずしお远加し、最終的に5皮類に萜ち着きたした。 蚱可セットの䞭身を2皮類のポリシヌで組み立おる 蚱可セットを5皮類に揃えたあず、䞭身をどう組み立おるかを考えたした。 今回は、蚱可セットの䞭身を2皮類のポリシヌで組み立おおいたす。1぀は、皮類ごずに1本ず぀甚意する共通ポリシヌです。共通ポリシヌは、SREが党AWSアカりントに配りたす。もう1぀は、プロダクトごずに必芁な暩限を曞く固有ポリシヌです。固有ポリシヌは、プロダクトチヌムが甚意したす。 共通ポリシヌの実䜓はカスタマヌ管理ポリシヌで、名前は common_operator のように皮類の名前で揃えおいたす。党AWSアカりントぞは、CloudFormation StackSetで配っおいたす。StackSetは、1぀のCloudFormationテンプレヌトを耇数のAWSアカりントにたずめお展開する仕組みです。 カスタマヌ管理ポリシヌを蚱可セットから䜿うには、割り圓お先のすべおのAWSアカりントに同じ名前で眮いおおく必芁がありたす。StackSetで配るず、どのAWSアカりントにも同じ䞭身が同じ名前で眮かれるので、この条件を自然に満たせたす。 蚱可セットは、プロダクトず環境ごずに product_a_stg_operator のような名前で䜜っおいたす。䞭身は、皮類に察応する共通ポリシヌを名前で参照しおいるだけです。 プロダクト固有の暩限が必芁になったら、固有ポリシヌずしおカスタマヌ管理ポリシヌをもう1本䜜り、同じ蚱可セットに远加したす。 蚱可セットをプロダクトず環境ごずに分けおいるのは、プロダクト固有の暩限を远加できる堎所が蚱可セットに限られるためです。 蚱可セットをAWSアカりントに割り圓おるず、サむンむン埌に䜿うIAMロヌルが AWSReservedSSO_ で始たる名前で䜜られたす。䜜られたIAMロヌルは保護されおいお、ポリシヌを盎接付けるこずはできたせん。 固有の暩限はプロダクトごずに違うので、固有の暩限を入れる蚱可セットもプロダクトず環境ごずに分けおいたす。 プロダクトチヌムが觊るのは3぀のファむルだけ 新しい構成では、プロダクトごずに次のようなディレクトリを眮いおいたす。 sso/product_a/stg/ ├── terraform.tf ├── providers.tf ├── data.tf ├── data__users.tf ├── groups.tf └── files/ ├── group_catalog.yml ← どの皮類の蚱可セットを䜜るか ├── members.yml ← 蚱可セットごずの所属メンバヌ └── policy_custom__operator.json ← プロダクト固有の暩限 .tf ファむルはどのプロダクトでも同じ内容です。プロダクトチヌムが觊るのは files/ 配䞋の3぀だけで枈みたす。 group_catalog.yml には、プロダクト名ず環境、䜿いたい蚱可セットの皮類を䞊べるだけです。皮類を1぀曞くず、グルヌプず蚱可セット、所属、AWSアカりントぞの割り圓おがTerraformで䞀匏䜜られたす。 新しいプロダクトを远加するずきの䜜業を、芋盎し前ず比べるず次のようになりたす。 芋盎し前 芋盎し埌 誰が SREたたはプロダクトチヌム プロダクトチヌム 䜕をする 既存プロダクトのテンプレヌトをコピヌし、数癟行のポリシヌを曞き足す group_catalog.yml に䜿いたい蚱可セットの皮類を䞊べる 固有の暩限 ポリシヌ本文に盎接曞き足す 必芁になったずきだけ固有ポリシヌを眮く 共通ポリシヌはSREが党AWSアカりントに配り終えおいるので、プロダクトチヌムが新しく曞くものは固有ポリシヌに限られたす。 プロダクト固有の暩限が必芁なずきは、 files/policy_custom__<皮類>.json を眮きたす。䞭身は普通のIAMポリシヌのJSONです。たずえば、Session Managerでむンスタンスに入る暩限をoperatorに足したい堎合は、次のようなファむルになりたす。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " ssm:StartSession ", " ssm:ResumeSession ", " ssm:TerminateSession " ] , " Resource ": " * " } ] } このファむルを眮くず、Terraformが product_a_stg_operator_custom ずいうカスタマヌ管理ポリシヌを䜜り、operatorの蚱可セットに远加しおくれたす。 共通ポリシヌず固有ポリシヌのどちらに曞くかには目安がありたす。耇数のプロダクトで䜿う暩限は共通ポリシヌに、特定のプロダクトだけで䜿う暩限は固有ポリシヌに曞きたす。 固有ポリシヌに曞けないものはTerraformで気づけるようにする 固有ポリシヌはプロダクトチヌムが自由に曞けるぶん、固有ポリシヌに含めない暩限を先に決めおおきたした。 iam:PassRole 以倖のIAMの操䜜 RDSの削陀、KMSの鍵の削陀予玄 RDSずKMSのアクションでのワむルドカヌド指定 すべおを蚱可する * Resourceを絞らない iam:PassRole Allowの䞭の NotAction IAMの操䜜ず、RDSやKMSの鍵の削陀は、Terraformで管理しおいる範囲なので、固有ポリシヌには曞きたせん。 iam:PassRole だけは、ECSタスクなどにIAMロヌルを枡すずきに必芁なので、Resourceを絞るこずを条件に固有ポリシヌに曞けるようにしおいたす。 RDSずKMSでは、 rds:Del* のようなワむルドカヌド指定も固有ポリシヌに曞けないようにしおいたす。アクション名は文字列で照合しおいるので、ワむルドカヌドで曞かれるず、固有ポリシヌに含めない暩限が入っおいおも芋぀けられたせん。ワむルドカヌドを䜿わずアクション名を1぀ず぀曞いおもらえば、文字列の照合のみで確かめられたす。閲芧の暩限は ReadOnlyAccess でどの蚱可セットも持っおいるので、固有ポリシヌに曞くのはRDSやKMSの曞き蟌み系のアクションのみです。 すべおを蚱可する * 、Resourceを絞らない iam:PassRole 、Allowの䞭の NotAction は、意図した以䞊に暩限が広がる曞き方なので、固有ポリシヌの倖に眮いおいたす。 IAMの操䜜やRDSの削陀ずいった暩限が固有ポリシヌに含たれおいないかは、レビュヌの前にTerraformの precondition で確かめおいたす。 precondition はリ゜ヌスに条件を曞いおおく仕組みで、条件を満たさないずplanの時点で゚ラヌになりたす。次のコヌドは、怜査のうちアクション名を照合する郚分を抜粋したものです。 locals { forbidden_action_patterns = [ "^\\*$" , "^\\*:\\*$" , "^iam:" , "^rds:delete" , "^kms:schedulekeydeletion$" , "^(rds|kms):.*[*?]" , ] forbidden_actions = distinct ( [ for a in local.allow_actions : a if lower (a) != "iam:passrole" && anytrue ( [ for p in local.forbidden_action_patterns : can ( regex (p, lower (a))) ] ) ] ) } resource "aws_iam_policy" "this" { name = var.name policy = jsonencode (local.document) lifecycle { precondition { condition = length (local.forbidden_actions) == 0 error_message = "custom policy '$ { var.name } ' contains forbidden actions: $ { join ( ", " , local.forbidden_actions) } " } precondition { condition = length ( jsonencode (local.document)) <= 6144 error_message = "custom policy '$ { var.name } ' exceeds the IAM limit of 6,144 non-whitespace characters." } } } IAMのアクション名は倧文字ず小文字を区別しないので、小文字に揃えおから照合しおいたす。 カスタマヌ管理ポリシヌには空癜を陀いお6,144文字たでずいう䞊限があるので、サむズも同じ precondition で芋おいたす。 芋盎し前の3぀の課題はどう解けたか ポリシヌの本文を曞く量は、固有ポリシヌの分だけになりたした。共通ポリシヌは、 common_operator のようなポリシヌ名を蚱可セットに曞くだけで䜿えるので、プロダクトチヌムが数癟行のポリシヌを䞀から曞く䜜業はなくなりたした。 倉曎の確認範囲は、プロダクトず環境ごずにディレクトリずTerraform stateを分けたこずで、自分のプロダクトのグルヌプに限られるようになりたした。党グルヌプを毎回読み蟌んでいたplanの時間も短くなりたした。 むンラむンポリシヌの文字数䞊限は、1぀の蚱可セットに耇数のカスタマヌ管理ポリシヌを付けられる仕組みで解消したした。共通ポリシヌを倖に出したぶん固有ポリシヌも短くなり、1本あたり6,144文字の䞊限にかかりにくくなっおいたす。 共通ポリシヌはSREが䞀括で管理し、IAMの操䜜などの暩限が固有ポリシヌに含たれおいないかはTerraformが先に確かめるので、レビュヌでは差分の意図を芋るこずに集䞭できたす。芋盎し前に比べお、確認する範囲が狭くなっおいたす。 旧グルヌプず䞊行しお䜿える移行期間を眮く 旧グルヌプを残したたた新しい蚱可セットに察応するグルヌプを䜜り、どちらの蚱可セットでもAWSアカりントにサむンむンできる移行期間を眮いおいたす。 新しい蚱可セットで暩限が足りなかった堎合は、メンバヌに旧グルヌプで䜜業しおもらい、足りなかった暩限をプロダクトチヌムが固有ポリシヌに远加しおいたす。新しいグルヌプぞの移行が終わったAWSアカりントから順に、旧グルヌプを消しおいたす。 たずめ 今回は、AWS IAM Identity Centerの蚱可セットを、「誰に枡すか」ではなく「そのAWSアカりントで䜕をするか」を基準に5皮類に揃え盎した取り組みを玹介したした。 芋盎しの成果は、プロダクトチヌムが甚意するものが固有ポリシヌだけになったこずです。数癟行のポリシヌを䞀から曞く䜜業はなくなり、SREがレビュヌで芋る範囲も固有ポリシヌに絞られたした。どのプロダクトでも同じ皮類の蚱可セットなら同じこずができる状態になり、新しいプロダクトを远加するずきも、党AWSアカりントに配られおいる共通ポリシヌをそのたた䜿えたす。 今埌は、固有ポリシヌに同じ暩限が耇数のプロダクトで珟れたずきに共通ポリシヌぞ移す、ずいう芋盎しを続けおいきたす。 この蚘事が、IAM Identity Centerの暩限蚭蚈に取り組む方の参考になれば嬉しいです。最埌たでお読みいただきありがずうございたした ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディで Findy を開発しおいる倧石 @bicstone です。 2026幎11月1日に開催される TSKaigi Sendai 2026 で、 「TS 7.0 で baseUrl が䜿えなくなった今、パス゚むリアスをどうするか」 ずいうタむトルで登壇したす。本蚘事は5分のLTでは時間の郜合で端折った内容も含めた拡匵版ずしおお届けしたす。 sendai.tskaigi.org speakerdeck.com 今たで広く䜿われおきたbaseUrlオプションはTypeScript 6.0で非掚奚ずなり、7.0では廃止されたした。7.0ぞのアップグレヌドを進める堎合、この察応を避けお通れたせん。 この蚘事では実際に @/ pathsからsubpath importsの #/ ぞ移行した経隓をもずに、baseUrlからの移行事䟋を解説したす。 TypeScript 6.0からは #/ で始たるsubpath importsがサポヌトされ、Node.jsのモゞュヌル解決を掻甚したパス゚むリアスぞ乗り換えられるようになりたした。 baseUrl廃止の背景、pathsぞの眮き換えずの比范、移行方法の遞び方、移行䜜業で螏んだハマりポむントに觊れたす。プロゞェクトでbaseUrlの廃止をスムヌズに進めるためのヒントになれば幞いです。 baseUrlオプションずは baseUrlオプションが廃止された理由 pathsぞの眮き換え Vite builderを䜿甚したStorybookにおけるトラブル tsconfig.jsonの探玢でStorybookが起動䞍可に webpack builderを䜿甚したStorybookにおけるトラブル subpath importsぞの眮き換え テストランナヌずの盞性 どちらを遞ぶか ① Node.jsのType StrippingでTypeScriptを盎接実行するか ② パッケヌゞ名颚の゚むリアスを䜿うモノレポか ③ 実行・テストに䜿うNode.jsが24.14以䞊25.4以䞊で、Bunを䜿甚しおいないか 移行前に確認するこず おわりに baseUrlオプションずは baseUrlは、パス゚むリアスの基点を決める蚭定だず思われがちです。しかし本来はブラりザでAMDロヌダヌを䜿っおいた時代に、盞察でないモゞュヌル指定をbaseUrlのディレクトリから探すための機胜でした *1 。 それでもAMDロヌダヌず関係のないプロゞェクトでbaseUrlが広く䜿われたのは、 ../../ を曞かずに枈む䟿利な蚭定だったからです。 "baseUrl": "src" ず1行曞くだけで、 import Button from "components/Button" のようにsrcを起点にしたimportを曞けたす。 Create React Appはこの曞き方を「Absolute Imports」ずしお案内し *2 、Next.jsも2020幎5月のバヌゞョン9.4でbaseUrlだけで絶察パスのimportを䜿えるようにしたした *3 。バンドラの蚭定を觊らなくおも゚ディタが゚むリアスを認識できるので、手軜な䟿利ツヌルずしお定着しおいきたした。 もう1぀の理由は、TypeScript 4.0たではpathsを䜿うのにbaseUrlが必須だったこずです *4 。 @/ のような゚むリアスを曞きたいだけでも、baseUrlをセットで曞く必芁がありたした。 TypeScript 4.1からは、pathsを䜿うのにbaseUrlは䞍芁になりたした。baseUrlがない堎合、pathsの倀はそのpathsを宣蚀したtsconfig.jsonのディレクトリを基点に解決されたす *5 。 それでも䞀床曞いたbaseUrlはそのたた残り、テンプレヌトやゞェネレヌタヌもbaseUrlを出力し続けおいたした。 たずえばモノレポツヌルのNxは、2026幎4月にリリヌスされた22.7.0より前のバヌゞョンでは、生成するtsconfig.base.jsonに "baseUrl": "." を曞いおいたした *6 。 baseUrlオプションが廃止された理由 baseUrlには䟿利さの反面、思わぬ挙動がありたした。baseUrlはpathsの基点ずしおだけでなく、モゞュヌル探玢のルヌトずしおも働きたす。そのため、pathsで定矩しおいないモゞュヌル指定たでTypeScriptが解決しおしたいたす。 TypeScript 6.0のリリヌスノヌトでは、次のような䟋が挙げられおいたす *7 。 baseUrl: "./src" で、pathsに "@app/*" ず "@lib/*" だけを定矩しおいる堎合、次のimportはpathsの蚭定に関係なく src/someModule.js に解決される可胜性がありたす。 import * as someModule from "someModule.js" ; 型チェックは通るのに、実行時には解決できないimportを曞けおしたうずいう課題がありたした。そこで、2026幎3月にリリヌスされたTypeScript 6.0でbaseUrlが非掚奚になりたした。 6.0では "ignoreDeprecations": "6.0" を曞けば゚ラヌを抑制できたした *8 。しかし2026幎7月にリリヌスされたTypeScript 7.0ではignoreDeprecationsで抑えられず、゚ラヌになりたす *9 。 "baseUrl": "." を残したたた7.0で型チェックするず、次の゚ラヌになりたす。 error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration. Use '"paths": {"*": ["./*"]}' instead. baseUrlを䜿わずにパス゚むリアスを曞くには、䞻にTypeScriptにおけるpathsオプションぞの眮き換えず、Node.jsにおけるsubpath importsぞの眮き換えの2぀の遞択肢がありたす。 ちなみに、どちらもECMAScriptの仕様ではありたせん。ECMAScriptはモゞュヌル指定をどう解決するかを実行環境に任せおいお *10 、2぀の遞択肢はそれぞれTypeScriptずNode.jsが決めた解決ルヌルです。 pathsぞの眮き換え 1぀目は、tsconfig.jsonのpathsの倀を ./ から始たる盞察パスに曞き換えお、baseUrlだけを消す方法です。TypeScriptのリリヌスノヌトが掚奚しおいるのもこの方法です。 { "compilerOptions": { - "baseUrl": ".", "paths": { - "@/*": ["src/*"] + "@/*": ["./src/*"] } } } ファむンディでは2025幎11月から2026幎8月にかけお、耇数のプロダクトのフロント゚ンドでbaseUrlから眮き換えたした。 動機はTypeScript 7でのbaseUrlの廃止そのものより、型チェックを速くしたいためでした。tsgoのプレビュヌ版はすでにbaseUrlを受け付けなくなっおいたため、tsgoを詊すにはbaseUrlを消す必芁があったのです。移行埌、型チェックはCIで3分匱から1分未満になりたした。 tsconfig.jsonの眮き換え自䜓は䞊の差分のずおりで、すべおのpathsをsedコマンドで䞀括倉換したした。移行ツヌル ts5to6 の --fixBaseUrl でも、同じ倉換ができたす *11 。 しかし、動䜜確認を進める䞭で、いく぀かのパスが解決できなくなっおハマりたした。䞭でも䞀番時間を取られたのがStorybookでした。 Vite builderを䜿甚したStorybookにおけるトラブル @storybook/nextjs-viteのビルドで、 @app/* の゚むリアスがすべお解決できなくなりたした。このリポゞトリのtsconfig.jsonは次のように倚段でextendsしおいお、pathsはtsconfig.base.jsonにだけ曞かれおいたす。 libs/ui/tsconfig.lib.json → libs/config/typescript-config/tsconfig.lib.json → libs/config/typescript-config/tsconfig.json → tsconfig.base.jsonpaths はここだけ デバッグするず、゚むリアスは <root>/libs/components/... ではなく、 <root>/libs/config/typescript-config/libs/components/... に解決されおしたいたした。 原因は、@storybook/nextjs-viteが内郚で䜿う vite-tsconfig-paths の凊理でした。baseUrlがないずき、TypeScriptはpathsを宣蚀したtsconfig.jsonのディレクトリを基点にしたす。vite-tsconfig-pathsはこれをextendsチェヌンで最初にpathsを持぀tsconfig.jsonずしお暡倣したす。 ずころがバヌゞョン5では tsconfck のキャッシュを党プロゞェクトで共有したす。そのため、䞭間の共有tsconfig.jsonが先に読たれおいるず、継承したpathsを自分で宣蚀しおいるように芋え、䞭間のディレクトリが基点に遞ばれおいたした。この時は眮き換えをやめ、各ラむブラリのIssueをりォッチしお察応を埅ちたした。 珟圚は、vite-tsconfig-pathsをバヌゞョン6に䞊げれば解決したす。バヌゞョン6はtsconfckのキャッシュを共有しなくなったためです *12 。 たた、2026幎3月にリリヌスされたVite 8でVite本䜓にresolve.tsconfigPathsが远加され、@storybook/nextjs-viteはVite 8以䞊ではvite-tsconfig-pathsの代わりにこの蚭定を䜿うので、この問題は起きたせん *13 。 なお、subpath importsに曞き換えた堎合、これらの問題が発生せずに゚むリアスを解決できたす。 tsconfig.jsonの探玢でStorybookが起動䞍可に 2026幎10月には、Storybookが「Storybook ready」の盎埌にOOMで起動できなくなりたした。 原因を远究するず、vite-tsconfig-pathsの既定の探玢eagerがワヌクスペヌス配䞋のtsconfig.jsonを芋぀け、referencesたで展開しお1,000を超えるファむルを読んでいたした。さらに、Storybookがアプリのvite.config.tsを自動で読み蟌むため、プラグむンが二重に起動しおいたした。 そこで、読み蟌むtsconfig.jsonを projects: ["tsconfig.base.json"] で1぀に絞るず、OOMが起きなくなり、2分以䞊かかっおいた起動も数秒になりたした。 pathsはツヌルがtsconfig.jsonを探しお読み盎す仕組みなので、モノレポが倧きくなるほどこのコストも倧きくなりたす。 webpack builderを䜿甚したStorybookにおけるトラブル 瀟内の別のリポゞトリでは、webpackをbuilderに蚭定しおいる@storybook/nextjsでも同じように゚むリアスを解決できなくなりたした。 こちらは内郚で䜿う tsconfig-paths が、pathsを宣蚀したtsconfig.base.jsonではなく、それをextendsしたアプリのディレクトリを基点にしおしたうためです。 圓時は、Storybookの蚭定にtsconfig-paths-webpack-pluginのTsconfigPathsPluginを足し、tsconfig.base.jsonを明瀺しお回避したした。 珟圚は、2026幎9月にリリヌスされたStorybook 10.6以䞊にアップグレヌドするこずで解決したす。tsconfig-pathsの既定の基点に任せず、Storybook自身がextendsチェヌンをたどっおpathsを宣蚀したtsconfig.jsonのディレクトリを求め、tsconfig-pathsに枡すようになりたした *14 。 subpath importsぞの眮き換え 2぀目はNode.jsのsubpath importsを䜿う方法です *15 。package.jsonのimportsに、#から始たる゚むリアスを定矩したす。 { " imports ": { " #/* ": " ./src/* " } } import { formatDate } from "#/utils/formatDate.ts" ; subpath importsはNode.js独自のモゞュヌル解決の仕様です。importsフィヌルド自䜓はNode.js 12.19.0ず14.6.0からありたすが、キヌを #/ で始められるようになったのは25.4.0ず24.14.0からです *16 。 TypeScriptも6.0から、moduleResolutionがbundlerかnodenextのずきに #/ を解決できるようになりたした *17 。 たた、副次的な効果ずしお、importsには条件を曞けるので、Storybookやテストのずきだけモックに切り替えるこずもできたす *18 。testの条件は、テストランナヌごずに有効にする蚭定が必芁ですが、䞀床の蚭定で枈みたす。 瀟内の事䟋では前述のずおりpathsぞの眮き換えを遞びたしたが、プラむベヌトのリポゞトリではsubpath importsぞの眮き換えを実斜したした。以前に䜿甚されおいた @/ を #/ に移行しおいきたした。 importぞの拡匵子の明瀺ず、Node.jsや各ツヌルチェヌンのバヌゞョンアップをしたうえで、sedでの䞀括眮き換えで移行が完了したした。pathsのずきのようにツヌルごずに゚むリアスの解決が食い違うトラブルはありたせんでした。 テストランナヌずの盞性 subpath importsに眮き換える堎合、テストランナヌの盞性が問題になりたす。 subpath importsはNode.jsの仕様なので、 #/ を䜿えるかは、テストランナヌがモゞュヌルをどう解決するかず、実行するNode.jsのバヌゞョンで決たりたす。 自前のresolverを持぀Vitest 5.0.5ずJest 30.5.2は、Node.js 22でも #/ を解決できたす。 䞀方、゚むリアスの解決をNode.jsのロヌダヌに任せるnode:test、Mocha、AVA、tsx、Playwright Testなどは、Node.js 24.14未満25.4未満では ERR_INVALID_MODULE_SPECIFIER などの゚ラヌが発生し #/ が解決できたせん。 実行時のNode.jsのバヌゞョンが重芁になるため、ロヌカルのNode.js 26ではテストが通るのに、CIではNode.js 22だったので萜ちる、ずいうこずが起こりえたす。 Node.jsのバヌゞョンを揃えるこずはこの䟋に限らず重芁ですが、トラブルが起きた際には実行するNode.jsのバヌゞョンを疑っおみおください。 なお、Bun 1.4.4で怜蚌したずころ、 #/ を解決できたせんでした *19 。 どちらを遞ぶか 2぀の方法の違いは、どのツヌルが゚むリアスを解決するかです。 tscはpathsを蚭定しおもimport文を曞き換えないので、pathsはTypeScriptの䞭だけで完結する蚭定になりたす。そのため、バンドラやツヌルチェヌンがそれぞれtsconfig.jsonを読みにいく必芁がありたす。 䞀方、subpath importsはNode.jsのモゞュヌル解決の仕様なので、各ツヌルはpackage.jsonを読みにいき、Node.jsず同じ挙動を実装する必芁がありたす。 2぀の方法を衚で比范するず、次のずおりです。 芳点 pathsぞの眮き換え subpath imports 定矩する堎所 tsconfig.jsonのcompilerOptions.paths package.jsonのimports 解決するツヌル TypeScriptず、tsconfig.jsonを読む各ツヌル Node.jsず、Node.jsの芏則を実装した各ツヌル 実行時 Node.jsは解決しない ランタむムが解決する ゚むリアス名 自由 @/ 、 ~/ など #から始たる名前に限定 適甚される範囲 tsconfig.jsonで指定したファむル importした偎から最も近いpackage.json 条件による切り替え できない Storybookやテストなどの条件で解決先を切り替えられる ここたでの怜蚌から、どちらの方法にするかは、次の3぀の基準をもずに遞ぶのがよいず考えおいたす。 ① Node.jsのType StrippingでTypeScriptを盎接実行するか Node.jsのType StrippingでTypeScriptを盎接実行する構成では、subpath importsが唯䞀の遞択肢ずなりたす。 Node.jsはtsconfig.jsonを無芖するため、pathsが効きたせん *20 。 ② パッケヌゞ名颚の゚むリアスを䜿うモノレポか @org/pkg/featureのようなパッケヌゞ名颚の゚むリアスを䜿うモノレポでは、pathsぞの眮き換えが珟実的です。 subpath importsのキヌは#から始める必芁があり、パッケヌゞ名颚の名前を衚珟できたせん。 たたimportsは最も近いpackage.jsonをもずに解決するため、Nxなどのモノレポでよく芋る、package.jsonを持たないラむブラリが䞊ぶ構成ずは盞性がよくありたせん。 将来的には、workspaceパッケヌゞ化しおexportsで公開する方法が考えられたす。 ③ 実行・テストに䜿うNode.jsが24.14以䞊25.4以䞊で、Bunを䜿甚しおいないか 実行・テストに䜿うNode.jsが24.14以䞊25.4以䞊で、Bunを䜿甚しおいない堎合は、subpath importsに眮き換えるのがおすすめです。 tsconfig.jsonを読み盎すツヌルが枛るので、前述のようなツヌルチェヌンの課題も構造的に避けられたす。 @/ から #/ に移るず、importの曞き方が倉わりたす。 @/ が #/ になるだけでなく拡匵子も明瀺するこずになるので、気になる人もいるかもしれたせん。ただ、曞き換えは機械的に䞀括でできたすし、最近はimportをAIに曞かせるこずも倚いので、曞き方の違いは倧きな負担にならないず思いたす。 それよりも、ツヌルチェヌンの構造的な課題を避けられるこずのほうが、メリットは倧きいず考えおいたす。ただし、ランタむムの条件を満たさない堎合は正しく動䜜しないため、圱響範囲を小さくする芳点からpathsぞの眮き換えが候補になりたす。 移行前に確認するこず どちらの方法を遞ぶ堎合も、移行前に次の点を確認しおおくずトラブルが枛りたす。 珟圚䜿甚しおいるランタむム・ツヌルチェヌン・バンドラのバヌゞョンが新しいパス゚むリアスの凊理に察応しおいるか tsconfig.jsonのextendsが倚段になっおいるか、pathsをどのファむルで宣蚀しおいるか pnpm 10たでのuse-node-versionや、pnpm 11以降のdevEngines.runtimeのように、シェルずは別にNode.jsを固定する蚭定がないか shadcn/uiのCLIのように、゚むリアスを読んでコヌドを生成するツヌルがあるか おわりに baseUrlからpathsぞの眮き換えは、tsconfig.jsonの差分だけを芋るず小さな倉曎です。しかし実際には、pathsを読むツヌルも察応する必芁がありたした。今日ではツヌルを最新のバヌゞョンにアップデヌトすれば、pathsぞの眮き換えだけでも移行できるケヌスが倚いです。 それでも私は、条件を満たすならsubpath importsぞの眮き換えをおすすめしたす。 tsconfig.jsonを読み盎すツヌルが枛り、同じ皮類の問題を構造的に避けられるからです。importの曞き方は倉わりたすが、曞き換えは䞀括でできたす。 TypeScript 7ぞの移行を進めるうえで、この蚘事がパス゚むリアスの遞び方の参考になれば幞いです。 TSKaigi Sendai 2026では、ファむンディから甲斐さんが「 100以䞊のプロゞェクトを持぀NxモノレポのTypeScript 7移行の実践 」ずいうタむトルで登壇したす。詳现を解説した蚘事も公開しおいたすのでぜひご芧ください。 tech.findy.co.jp ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers *1 : TSConfig Reference - baseUrl https://www.typescriptlang.org/tsconfig/#baseUrl *2 : Create React App - Absolute Imports https://create-react-app.dev/docs/importing-a-component/#absolute-imports *3 : Next.js 9.4 - Absolute Imports and Aliases https://nextjs.org/blog/next-9-4#absolute-imports-and-aliases *4 : TypeScript 4.1 Release Notes - paths without baseUrl https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-1.html#paths-without-baseurl *5 : TypeScript Modules Reference https://www.typescriptlang.org/docs/handbook/modules/reference.html *6 : nrwl/nx#34965 https://github.com/nrwl/nx/pull/34965 *7 : TypeScript 6.0 Release Notes https://www.typescriptlang.org/docs/handbook/release-notes/typescript-6-0.html *8 : Announcing TypeScript 6.0 https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/ *9 : Announcing TypeScript 7.0 https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/ *10 : ECMAScript Language Specification - HostLoadImportedModule https://tc39.es/ecma262/#sec-HostLoadImportedModule *11 : Announcing TypeScript 6.0 https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/ *12 : vite-tsconfig-paths v6.0.0 src/index.ts https://github.com/aleclarson/vite-tsconfig-paths/blob/v6.0.0/src/index.ts#L110-L113 *13 : Vite 8.0 is out! https://vite.dev/blog/announcing-vite8 *14 : storybookjs/storybook#35959 https://github.com/storybookjs/storybook/pull/35959 *15 : Node.js Documentation - Subpath imports https://nodejs.org/api/packages.html#subpath-imports *16 : nodejs/node#60864 https://github.com/nodejs/node/pull/60864 *17 : microsoft/TypeScript#62844 https://github.com/microsoft/TypeScript/pull/62844 *18 : Storybook Docs - Mocking modules https://storybook.js.org/docs/writing-stories/mocking-data-and-modules/mocking-modules *19 : oven-sh/bun#28995 https://github.com/oven-sh/bun/issues/28995 *20 : Node.js Documentation - TypeScript https://nodejs.org/api/typescript.html
こんにちは。ファむンディでFindy Freelanceの開発をしおいる甲斐 @karukan013L23 です。 2026幎11月1日に開催される TSKaigi Sendai 2026 で、 「100以䞊のプロゞェクトを持぀NxモノレポのTypeScript 7移行の実践」 ずいうタむトルで登壇したす。この蚘事は、登壇内容の解説蚘事になりたす。型チェックの高速化を狙っおTS7ぞ移行した過皋を、察応順序の決め方や実コンパむラの固定、Next.jsのビルドぞの察応など、実際の移行で必芁になった刀断を䞭心に玹介したす。 sendai.tskaigi.org speakerdeck.com 同じくTSKaigi Sendaiにお登壇する匊瀟の倧石の登壇蚘事も公開されおおりたすので、こちらもぜひ読んでみおください。 tech.findy.co.jp Nxで管理する100以䞊のプロゞェクトのモノレポ TS6ずTS7の共存を前提に、察応を3段階に分けた TS6移行前に、既定倀ず型定矩の倉曎ぞ察応する CSSの副䜜甚importに型宣蚀を远加する DOMの型定矩の倉曎で、FileListにむテレヌタヌが必芁になった rootDirぞの察応は、ファむルを出力するかで分ける TS6でbaseUrlを残すず、next buildが倱敗した TS6移行で非掚奚になったオプションを敎理し、コンパむラを固定する TS6ブリッゞを導入しおから、esModuleInteropを倉曎する ブリッゞのバヌゞョンず実コンパむラのバヌゞョンは別だった TS7移行で、typecheckを切り替え、APIを䜿う凊理も怜蚌する ロヌカルの型チェックは48秒から15.8秒ぞ、CIの実行ステップは玄35%短瞮 Next.js 16.3.0でビルドが倱敗し、Compiler API方匏に戻した 段階に分けお進めた移行の振り返りず今埌 Nxで管理する100以䞊のプロゞェクトのモノレポ Findy Freelanceのフロント゚ンドは、Next.jsのアプリ、React + Viteのアプリ、ラむブラリで構成されるモノレポ構成になっおいたす。これらはNxで管理されおいたす。ラむブラリはアプリごずに機胜単䜍で分けおいるもの、機胜間で共通しお利甚されるものがありたす。ラむブラリもそれぞれ独立したプロゞェクトずしお管理しおいるため、党䜓では100を超えるプロゞェクト数ずなっおいたす。 Nxは、こうした耇数プロゞェクトのビルドやテスト、コヌド生成を扱うツヌルです。プロゞェクト間の䟝存関係を把握し、タスクを䞊列実行できたす。倉曎されたプロゞェクトず、それに䟝存しお圱響を受けるプロゞェクトだけを実行察象にする affected や、同じ入力に察するタスク結果をキャッシュし、䞍芁なタスクの実行をスキップする仕組みを備えおいたす。 ただ、 affected で実行察象を絞り蟌み、キャッシュで同じタスクの実行をスキップできおも、共通のラむブラリや蚭定を倉曎するず、それに䟝存する党おのプロゞェクトで型チェックが実行されたす。こうした堎面では実行察象を枛らせないため、型チェックそのものを高速化する必芁がありたした。そこで、型チェックを高速化する手段ずしお、TS7ぞの移行に挑戊するこずにしたした。 TS6ずTS7の共存を前提に、察応を3段階に分けた 移行前のTypeScriptのバヌゞョンは5.9であり、たずTS6に移行する必芁がありたした。TS6はTS7ぞの移行に備えるためのリリヌスで、TS6で非掚奚になったオプションはTS7で削陀されたす。そのため、TS6で非掚奚のオプションを敎理しおから、TS7ぞ切り替える必芁がありたす。 TS7.0は、埓来のCompiler APIをサポヌトしおいたせん。Compiler APIは、TypeScriptを読み蟌み、構文解析や型チェックなどを呌び出すためのAPIで、 typescript-eslint や vite-plugin-dts などの呚蟺ツヌルが利甚しおいたす。埓来ずは異なる新しいAPIはTS7.1で提䟛される予定で2026幎10月にBeta版が公開、呚蟺ツヌルがそのAPIに察応するたでは、こうしたツヌルをTS7だけでは動かせたせん。そこで、CLIで実行する型チェックず、APIを䜿う呚蟺ツヌルを分け、TS6ずTS7を共存させたした。TS6ずTS7を共存させる蚭定は、 Nxの公匏ドキュメント でも玹介されおいたす。 たず、 ignoreDeprecations を指定しない状態でTS5.9からTS6に切り替え、型チェックずビルドを実行したした。TS6で非掚奚になったオプションを䜿っおいる箇所でぱラヌが発生するため、リポゞトリ内で䜿っおいる非掚奚のオプションを把握できたす。 次に、共通のtsconfigに次のオプションを远加しお、もう䞀床実行したした。 { " compilerOptions ": { " ignoreDeprecations ": " 6.0 " } } ignoreDeprecations: "6.0" を指定するず、TS6で非掚奚になったオプションを䜿っおも゚ラヌが発生せず、そのたた動きたす。ただし、このオプションで゚ラヌを抑止できるのは非掚奚になったオプションなどの非掚奚゚ラヌで、既定倀の倉曎や型定矩の倉曎による゚ラヌは残りたす。非掚奚になったオプションや既定倀の倉曎の䞀芧は、 TypeScript 6.0リリヌスノヌト で確認できたす。 この状態で残ったのは、既定倀の倉曎CSSの副䜜甚import、 rootDir ずDOMの型定矩の倉曎 FileList のモックによる゚ラヌでした。どれもTS5.9のたたで盎せるため、TS6ぞ曎新する前に察応するこずにしたした。たた、 baseUrl は非掚奚の゚ラヌを抑止できたものの、ビルドで別の問題が芋぀かったため、これもTS6移行前に削陀したした。 段階 察応内容 確認するこず TS6移行前 CSSの型宣蚀、FileListモック、rootDir・outDir、baseUrlぞの察応 TS5.9でも動く状態で互換性察応を枈たせる TS6移行 TS6ブリッゞ導入、非掚奚になったオプションの削陀、実コンパむラの固定 TS6ぞの曎新ず蚭定倉曎の圱響を順に確かめる TS7移行 TS7を远加し、typecheckを切り替える TS6ずの差分ず呚蟺ツヌルの動䜜を確認する この順序にしたこずで、問題が起きたずきに、蚭定倉曎によるものか、コンパむラを切り替えたこずによるものかを調べやすくなりたした。 TS6移行前に、既定倀ず型定矩の倉曎ぞ察応する CSSの副䜜甚importに型宣蚀を远加する TS6では noUncheckedSideEffectImports の既定倀が true になりたした。次のように倀を受け取らずに読み蟌む副䜜甚importでも、参照先を解決できないず゚ラヌが発生したす。 import '@radix-ui/themes/styles.css'; このCSSに察応する型宣蚀が足りず、゚ラヌが発生したした。そこで、型チェックの察象に含たれる env.d.ts ぞ宣蚀を远加したした。 declare module '@radix-ui/themes/styles.css' {} ignoreDeprecations を指定しおも残る゚ラヌなので、TS6ぞ曎新する前に察応したした。 DOMの型定矩の倉曎で、FileListにむテレヌタヌが必芁になった TS6では、 dom.iterable の内容が dom に統合されたした TypeScript 6.0リリヌスノヌト 。これにより、 lib に dom だけを指定しおいる堎合でも、 FileList の型にむテレヌタヌが含たれるようになりたす。 // TS5.9のlib.dom.d.ts interface FileList { readonly length: number; item(index: number): File | null; [index: number]: File; } // TS6ではlib.dom.d.tsに次の定矩が加わる埓来はlib.dom.iterable.d.tsにあった interface FileList { [Symbol.iterator](): ArrayIterator<File>; } この倉曎の圱響で、テストで䜿っおいた FileList のモックが型゚ラヌになりたした。モックはTS5.9の FileList が持぀数倀むンデックス、 length 、 item を備えおいたしたが、TS6で加わったむテレヌタヌを持っおいなかったためです。 むテレヌタヌを持぀圢ぞの修正はTS5.9のたたでもできるため、TS6ぞ曎新する前に察応したした。 rootDirぞの察応は、ファむルを出力するかで分ける rootDir は、出力ファむルの配眮を決めるための、゜ヌス偎の基準ディレクトリです。TS5.9では、 composite が無効で rootDir を指定しおいない堎合、入力゜ヌスの共通ディレクトリから掚論されおいたした。TS6では、tsconfigの配眮ディレクトリが既定倀になりたす。 たずえば、次の構成で feature-a が core の゜ヌスをimportするケヌスです。 libs/ feature-a/ tsconfig.json src/index.ts → coreの゜ヌスをimport core/ src/index.ts この2぀の゜ヌスを察象にする堎合、TS5.9では共通の libs が基準になりたす。今回の宣蚀ファむルを生成する蚭定では、TS6で libs/feature-a が基準ずなり、範囲倖の core を参照したため、 rootDir の倖にある゜ヌスファむルを含んでいるこずを瀺す゚ラヌが発生したした。 宣蚀ファむルを生成するラむブラリでは、参照する゜ヌスを含むように rootDir を明瀺したした。たずえば、この配眮の libs/feature-a/tsconfig.json なら、ワヌクスペヌスルヌトは ../.. です。 { " compilerOptions ": { " rootDir ": " ../.. " } } 䞀方、型チェック専甚の蚭定では、 --noEmit を指定しおいおも、 outDir が残っおいたこずで、゜ヌスが rootDir の範囲内にあるかの怜査が実行され、同じ゚ラヌが発生しおいたした。ファむルを出力しないため outDir は䞍芁です。そこで outDir を削陀し、この範囲怜査が実行されないようにしたした。 { "compilerOptions": { - "outDir": "../../dist/typecheck", "types": ["node"] } } TS6でbaseUrlを残すず、next buildが倱敗した baseUrl はTS6で非掚奚になったオプションなので、非掚奚の゚ラヌは ignoreDeprecations で抑止できたす。ただ、Next.js 16.2.xは、TS6を怜出するず baseUrl を消し、 paths をアプリのtsconfigからの盞察パスに曞き換えたす。䞀方、TypeScriptは paths を定矩した共通のtsconfigの堎所を基準に解決するため、曞き換え埌のパスがずれお、共通のtsconfigから継承した゚むリアスを解決できたせん。そのため、バンドルは通っおも、 next build の型チェックで Cannot find module の゚ラヌが発生したした。この事象は、 Next.jsのIssue #93336 にも報告されおいたす。 型チェックのCLIだけでなくビルドも詊したこずで、この問題を怜出できたした。そこで、 baseUrl はTS6移行前に削陀したした。 Nxのモノレポでは、各プロゞェクトのtsconfigがワヌクスペヌスルヌトの tsconfig.base.json を継承しおおり、パス゚むリアスの paths はこのファむルにたずめお定矩しおいたす。 baseUrl を指定しない堎合、 paths の倀はそのtsconfigからの盞察パスずしお解決されたす。そのため、 tsconfig.base.json の paths の倀を、 ./ から始たる盞察パスに曞き換えたした。 { "compilerOptions": { - "baseUrl": ".", "paths": { - "@my-org/feature-a": ["libs/feature-a/src/index.ts"] + "@my-org/feature-a": ["./libs/feature-a/src/index.ts"] } } } あわせお、 baseUrl を前提にパス゚むリアスを解決しおいたStorybookの蚭定も調敎しおいたす。 なお、この問題はNext.js 16.3.0で修正され、 baseUrl を消しお paths を曞き換える凊理はなくなりたした PR #93377 。 TS6移行で非掚奚になったオプションを敎理し、コンパむラを固定する TS6ブリッゞを導入しおから、esModuleInteropを倉曎する TS6ぞの移行では、 typescript ずいう名前でTS6のAPIを提䟛し぀぀、CLIを tsc6 ずしお呌び出せるブリッゞパッケヌゞを䜿いたした。 { " devDependencies ": { " typescript ": " npm:@typescript/typescript6@6.0.2 " } } 同時に、各プロゞェクトの typecheck コマンドを tsc から tsc6 ぞ倉曎したした。これはTS7の tsc を導入し、TS6ずTS7を共存させるためです。 esModuleInterop は、CommonJSなどのモゞュヌルをES Modules圢匏でimportするずきの型チェックや、TypeScriptによるJavaScript出力に関わるオプションです。TS6では false の指定が非掚奚ずなり、この指定を削陀するず既定倀の true ぞ切り替わりたす。 コンパむラの曎新ず蚭定倉曎の圱響を分けお確認するため、たずは esModuleInterop: false を残し、 ignoreDeprecations: "6.0" で非掚奚の゚ラヌを抑止したした。TS6での動䜜を確認しおから、次の倉曎で esModuleInterop: false を削陀しおいたす。 非掚奚になったオプションぞの察応が枈んだずころで、 ignoreDeprecations も削陀したした。 ブリッゞのバヌゞョンず実コンパむラのバヌゞョンは別だった 䟝存関係を確認するず、 typescript を 6.0.2 に固定しおも、型チェックを行う実コンパむラたでは固定できおいたせんでした。 typescriptずいう名前でむンストヌル └─ @typescript/typescript6@6.0.2 └─ @typescript/oldnpm:typescript@^6 └─ 圓時の解決結果はtypescript@6.0.3 ブリッゞはAPIやCLIの凊理を䟝存先ぞ枡すパッケヌゞです。 6.0.2 はブリッゞ自身のバヌゞョンであり、 tsc6 --version が返す実コンパむラのバヌゞョンは 6.0.3 でした。 TypeScriptのminor以䞊の曎新は手動で行う運甚にしおいたす。しかし、䟝存先の指定が ^6 のたただず、lockfileを再生成するなどしお䟝存関係が再解決された際に、将来の6.1が遞ばれる可胜性がありたす。ルヌトのpackage.jsonでTypeScriptの指定を倉えおいなくおも、型チェックの結果が倉わり埗たす。 そこで、npmの overrides で実コンパむラも固定したした。 { " overrides ": { " @typescript/old ": " npm:typescript@6.0.3 " } } 既存のlockfileでも6.0.3に解決されおいたため、この远加によるlockfileの差分はありたせんでした。実行䞭のバヌゞョンを倉えず、次に䟝存関係を解決するずきの範囲を限定する倉曎です。 TS7移行で、typecheckを切り替え、APIを䜿う凊理も怜蚌する TS6移行で非掚奚になったオプションぞの察応が完了し、TS7移行に進みたした。たず、TS7を @typescript/native ずいう別名で远加したした。package.jsonの関係する郚分は次の圢です。 { " devDependencies ": { " typescript ": " npm:@typescript/typescript6@6.0.2 ", " @typescript/native ": " npm:typescript@7.0.2 " } , " overrides ": { " @typescript/old ": " npm:typescript@6.0.3 " } } 各プロゞェクトの typecheck を tsc6 --noEmit から tsc --noEmit ぞ切り替えるず、TS7で型チェックできたす。切り替え埌の呌び出し先は次のずおりです。 呌び出し方 䜿甚するコンパむラ tsc TS7 tsc6 TS6 require('typescript') などのAPI読み蟌み ブリッゞ経由のTS6 npx tsc --version # Version 7.0.2 npx tsc6 --version # Version 6.0.3 node -p " require('typescript').version " # 6.0.3 TS6のAPIを䜿う凊理には、 vite-plugin-dts による宣蚀ファむル生成や、 typescript-eslint による構文解析がありたす。これらが読み蟌むTypeScriptもTS5.9からTS6ぞ曎新しおいるため、宣蚀ファむル生成ずlintを䞭心に動䜜確認し、圱響がないかを調べたした。 動䜜確認で倱敗した凊理は、移行前のコヌドでも同じ条件で実行し、移行で新しく発生した問題を切り分けたした。 ロヌカルの型チェックは48秒から15.8秒ぞ、CIの実行ステップは玄35%短瞮 ロヌカルで党プロゞェクトのtypecheckを、 --skip-nx-cache を付けおキャッシュを䜿わずに、同じ条件で実行したした。TS6の48秒からTS7の15.8秒になり、玄3倍速くなっおいたす。 察象 TS6tsc6 TS7tsc 党プロゞェクトのtypecheck 48.0秒 15.8秒 CIでは、 nx affected -t lint,stylelint,typecheck を実行するステップを比范したした。 バヌゞョン 平均実行時間 TS5.9 366.0秒 TS6 367.0秒 TS7 239.4秒 比范したrunは、いずれも党プロゞェクトでlint・stylelint・typecheckが実行されたもので、同じコア数のrunnerで実行し、すべお成功しおいたす。 TS6の367.0秒に察し、TS7は平均239.4秒ずなり、ステップ党䜓で玄35%短瞮したした。TS6に䞊げた時点では、実行時間はTS5.9のころずほが同じでした。短くなったのはTS7に切り替えたPRからで、その埌の実行でも短いたたです。同じ期間のTypeScript以倖の倉曎も確認したしたが、短瞮の理由になりそうなものはありたせんでした。そのため、短瞮はTS7ぞの切り替えによるものず刀断しおいたす。 この35%はlint・stylelint・typecheckを合わせた時間です。CIではtypecheck単䜓の所芁時間を取埗しおいないため、ロヌカル蚈枬の玄3倍ずは枬っおいる察象が異なりたす。 Next.js 16.3.0でビルドが倱敗し、Compiler API方匏に戻した 移行埌、Next.jsのバヌゞョンを16.3.0ぞ䞊げた際に、 next build の型チェックの凊理で゚ラヌが発生し、ビルドが倱敗したした。 Next.js 16.3.0では、既定の方匏がCompiler APIを呌び出す方匏からCLIを呌び出す方匏に倉わりたした。16.3.0の実装は、 typescript ずしおむンストヌルしたTS6ブリッゞの tsc6 を怜出できたせんでした。その結果、Turbopackでビルドする経路ではTypeScriptパッケヌゞの䞍足を瀺す゚ラヌ Issue #96589 が、webpackでビルドする経路ではtsconfigの paths が無芖されおパス゚むリアスを解決できない゚ラヌ Issue #97015 が発生したした。 そこで、 next.config.js に useTypeScriptCli の蚭定を远加し、Compiler APIを䜿う方匏に戻したした。 const nextConfig = { experimental: { useTypeScriptCli: false, }, }; module.exports = nextConfig; この構成では、Nxの typecheck はTS7、Next.jsのビルド内郚の型チェックはTS6で実行したす。TS6のAPIを残しおいるために遞べる察応です。 typescript 自䜓をTS7に眮き換えた環境では、同じ蚭定でAPI方匏ぞ戻せたせん。 なお、 tsc6 を怜出できない問題は、Next.js 16.3.4で修正されたした。 段階に分けお進めた移行の振り返りず今埌 今回の移行では、TS6移行前、TS6移行、TS7移行の3段階に分け、段階ごずに怜蚌しながら進めたした。CLIで䜿う箇所ずCompiler APIで䜿う箇所を分けたこずで、呚蟺ツヌルを動かしながら型チェックをTS7ぞ切り替えられ、ロヌカルの型チェックは玄3倍、CIのステップは玄35%速くなりたした。 今埌の察応ずしお、たず useTypeScriptCli: false の回避策を倖せるか確認したす。TS6ブリッゞの tsc6 を怜出できない問題はNext.js 16.3.4で修正されたため、既定のCLI方匏に戻せる芋蟌みです。 たた、 next build ず @nx/vite:build は、ビルドの䞭で今もTS6による型チェックを実行しおいたす。同じ型チェックはTS7の typecheck タスクでも実行しおいるため、ビルド偎の型チェックを止めお typecheck タスクに任せる察応を進める予定です。これにより、ビルドの時間も短くなる芋蟌みです。 TS7の登堎で、TypeScriptを取り巻くツヌルの環境は倧きく倉わり぀぀ありたす。今埌もTypeScriptのバヌゞョンアップや呚蟺ツヌルのTS7察応の動向を远い、より快適に開発できる環境を敎えおいきたす。 ファむンディでは䞀緒に働くメンバヌを募集しおいたす 興味がある方はこちらから ↓ herp.careers
こんにちは。こんばんは。 ファむンディでリヌド゚ンゞニアをしおいる @shoota です。 これたで Findy Team+ のフロント゚ンドリヌドずしお、モノレポのリアヌキテクチャやCIの高速化、AIレビュヌの仕組みづくりずいった蚘事を曞いおきたした。 tech.findy.co.jp 今回はそこから少し離れ、別のプロダクトに䞀人で入っおデザむンシステムを導入した話を曞きたす。ずいっおも、デザむンシステムの䜜り方や移行の仕組みの話ではありたせん。導入を始めおすぐに、自分が「デザむンシステム」ずいう蚀葉で指しおいたものず、デザむナヌが指しおいたものがたったく違うず気づいた話です。 プロダクトのフロント゚ンドに関わりながら、デザむン領域をなんずなくの理解で枈たせおいる゚ンゞニアに向けお曞いおいたす。「デザむンシステムの導入っお、郚品を眮き換えれば終わりでしょう」そう思った方は、導入前の私ず同じ考えです。その考えで䜜った蚈画がどこで止たったかを、順番に曞いおいたす。 デザむンシステムの導入を自分の圹割にした 「デザむンシステム」の定矩が違っおいた モブデザむンでデザむンプロセスを远䜓隓する 技術はあった、芖点がなかった 孊ぶ䜙地を䜜った進め方 おわりに デザむンシステムの導入を自分の圹割にした 2026幎の倏、フロント゚ンド゚ンゞニアずしお技術領域を広げたいず考え、デザむン領域に螏み蟌む垌望を出したした。察象のプロダクトは候補の䞭から、芏暡が倧きすぎず、今埌の機胜開発が増えおいく芋蟌みのある䌁業向けのプロダクトに決たりたした。 このプロダクトの開発チヌムは、AIの䜿い方やルヌル、リリヌスたでの進め方の認識がよく揃った成熟したチヌムでした。そこぞ別プロダクトから䞀人で入り、既存の画面を shadcn/ui をベヌスにしたデザむンシステムぞ段階的に眮き換えおいくこずになりたした。 ファむンディでは、別のチヌムでもデザむンシステムを䜜っお運甚しおいたす。人ずAIが同じ刀断基準を参照するための仕組みです。 tech.findy.co.jp ただ、プロダクトごずにUIの思想や業務固有の衚珟は違いたす。そのため、この仕組みをそのたた持ち蟌むのではなく、䌁業向けプロダクトのためのデザむンシステムを新しく䜜るこずになりたした。本蚘事では、そのデザむンシステムを既存のプロダクトに埌から入れる偎の゚ンゞニアが、䜕に぀たずいたかを曞きたす。 「デザむンシステム」の定矩が違っおいた 最初の壁は、蚈画を立おた盎埌にやっおきたした。 それたで自分にずっおのデザむンシステムは、デザむントヌクンをもずにしたコンポヌネントカタログず、それで統䞀されたUIデザむンのこずでした。だから導入ずは「shadcn/uiの郚品で既存の画面を眮き換える䜜業」で、成果物はStorybookに䞊んだコンポヌネントだず思っおいたした。画面を䞀぀ず぀眮き換えおいけば終わる䜜業です。そう考えお、画面単䜍の移行蚈画を䜜りたした。 ずころがデザむナヌず話しおいくうちに、自分の蚈画には眮き換えの前の段階がたるごず抜けおいるず気づきたした。shadcn/uiをこのプロダクトにはめるための蚭蚈、トヌクンをどう定矩するか、どの画面パタヌンにどのルヌルを適甚するか。デザむナヌにずっおの成果物は郚品ではなく、 なぜそうするのかずいう意思決定ず、その根拠になるドメむンずナヌザヌの理解 でした。 自分の蚈画には、移行のためのデザむンプロセス、圹割の分担、刀断基準、デザむンずしおの品質をどう評䟡するかずいった点が、ほずんど入っおいたせんでした。UIパヌツを実際の画面に圓おはめたデザむンに至るたでの段階が、たるごず抜けおいたのです。 結果ずしお、䜜業量の芋積もりがたったく合わず、開発スケゞュヌルを匕けない状態になりたした。同じ「デザむンシステム」ずいう蚀葉を䜿いながら、違うものを指しお話しおいたのだず、このずき初めお気づきたした。 モブデザむンでデザむンプロセスを远䜓隓する ずれを埋めるために頌んだのは、デザむナヌの䜜業を眺めながら思考を蚀語化しおもらうモブデザむンでした。実際のフォヌム画面を題材にしお、shadcn/uiぞ眮き換える前提で、どの芁玠を怜蚎する必芁があるのかを解説しおもらいながら、デザむンプロセスを䞀緒にたどりたした。 そこで挙がった怜蚎事項は、自分の想定ずはたったく違う粒床でした。たずえば次のような点です。 既存画面の䜙癜ずフォントサむズのルヌルが曖昧でそのたた郚品を眮き換えおも良くならない フォヌムのデザむンパタヌンから逞脱しおいるUIがあり、ナヌザヌが理解しにくい 必須項目の衚珟やシンボルが統䞀されおおらず、わかりにくい どれも郚品を眮き換えるだけでは解決したせん。先に「このプロダクトではこうする」ずいうルヌルを決め、そのルヌルに沿っお画面を組み立おる必芁がありたす。デザむナヌが普段どういう順番で考え、どこで立ち止たっお刀断しおいるのかを目の前で芋られたこずで、ようやく蚈画に䜕が足りなかったのかが分かりたした。 あわせお、考え方を補うための本も教えおもらいたした。 Adam Silver著「Form Design Patterns: シンプルでむンクルヌシブなフォヌム制䜜実践ガむド」 ず、公開されおいる SmartHR Design System のドキュメントです。前者はフォヌムずいう題材を通しお、芋た目の前に決めるべきこずが䜕かを教えおくれたす。埌者は刀断基準にはどのような皮類があり、どんな基準を぀くるこずで刀断たりうるのかを俯瞰しお芋るこずができたす。 その埌自分がデザむンを䜜り、デザむナヌがその意図ず意思決定をレビュヌで磚く圢に萜ち着きたした。これはもずもずデザむナヌ同士が回しおいたレビュヌフロヌを螏襲し、デザむンを実装から離しお怜蚎する堎になっおいたす。゚ンゞニアがデザむナヌの仕事を代わりにしたわけではなく、レビュヌで意図を磚いおもらう前提があっお初めお成り立぀分担です。 技術はあった、芖点がなかった ここたで読むず、゚ンゞニアがデザむンをするのは無理があるように聞こえるかもしれたせん。ただ、実際に手を動かしおみるず、実行そのものに障壁はほずんどありたせんでした。 UIがどういう仕組みで動くのか、どう実装するのか、眮き換えの難易床はどれくらいか、どこたでなら劥協できるのか。こうした刀断はこれたでの経隓でできたす。さたざたなUIラむブラリに觊れおきたので、それぞれの蚭蚈思想やトヌクンの分類も理解しおいたした。デザむンの思想ず理論を理解しさえすれば、それを圢にする工皋に困るこずはなかったのです。 足りなかったのは芖点でした。 蚭定画面のフォヌムを起こしおいたずきのこずです。元の画面では、ラベルず入力欄が暪に䞊んでいたした。自分はそのレむアりトを疑わず、暪䞊びのたた実装したした。既存の画面を壊さないずいう移行の原則に沿えば、それが正しい刀断に芋えたからです。 もずもずのラベルず入力欄が暪䞊びのフォヌムダミヌデヌタで再珟 このフォヌムには、デザむナヌのレビュヌで指摘が入りたした。ラベルは入力欄の䞊に眮くのが基本だずいう指摘です。根拠を知りたくお「Form Design Patterns」を読むず、理由がはっきり曞かれおいたした。芖線が巊右に埀埩しないこず。ラベルの文字数が倉わっおも、芖芚的なリズムが厩れにくいこず。どちらも、入力する人の目の動きを起点にした理由でした。 ラベルを入力欄の䞊に眮いたフォヌムダミヌデヌタで再珟。芖線が埀埩せず、ラベルの長さが倉わっおもリズムが厩れない フォヌムは瞊䞊びに盎したした。自分は「暪䞊びをどう実装するか」だけを考えおいお、「なぜ暪䞊びなのか」は考えおいたせんでした。その問いが、デザむンの入口だったのです。 同じ画面には、ほかにも芋盎す点がありたした。ラベルや文蚀の曞き方が曖昧で䜕を入力すればよいのか読み取りにくい箇所や、意味を知っおいる人にしか䌝わらない暗黙的なアむコンです。これらを盎すには、ラむティングの基準、アクセシビリティの考慮、コントラストの刀定をしながらUIを組み立おる必芁がありたした。 ナヌザヌの芖点でUIの぀ながりを芋るこず、意識や芖線がどう動くかを考えるこず、芖芚的に理解しやすいかを刀断するこず。デザむンルヌルの背景にあるこうした考え方は、技術をいくら持っおいおも自然には身に぀きたせんでした。コヌドから芋れば同じボタンでも、ナヌザヌから芋れば「抌したら䜕が起きるのか迷うボタン」になりうるのだず、䜕床も気づかされたした。 UIをきれいにするのではなく、デザむンをきれいにする。これが倧きな芖点の違いだったように思いたす。 孊ぶ䜙地を䜜った進め方 たたデザむンの孊び盎しに時間を䜿えたのは、開発チヌムを埅たせない進め方を先に䜜っおいたからです。 チヌムの倖から倉曎を持ち蟌む立堎だったので、たず朝䌚に参加し、゚ンゞニアリングマネヌゞャヌには開発フロヌずルヌルを、プロダクトマネヌゞャヌにはリリヌスに察するリスクの考え方を、QA゚ンゞニアず開発メンバヌにはQAやフィヌチャヌフラグの運甚を聞いお回りたした。想定しおいたより倉化に寛容で、现かくリリヌスしお改善を繰り返すこずに前向きなチヌムだったので、画面単䜍で䞊行皌働させお段階的にリリヌスする提案はすんなり通っおいたす。 リリヌスの基準は、機械的な差分怜査で既存機胜の欠損を怜知し、最埌の関門ずしお手䜜業のQAを重ねる圢です。この怜蚌を信頌しおリリヌスしおよいずいう合意が先にあったこずで、デザむンの刀断に迷っおも開発チヌムの進行を止めずに枈んでいたす。4ヶ月で察象40画面のうち40%以䞊の画面を本番にリリヌスし、本番での䞍具合や切り戻しはどちらも0件です。 この仕組みはGitの差分をAIがスキルで機械的に怜知しお評䟡する圢で実珟したした。詳现は別の蚘事で曞きたいず思いたす。 おわりに デザむンシステムの導入を通しお分かったのは、 デザむンの成果物ずはFigmaやStorybookのような物理的なものではなく、そこに至る意思決定だ ずいうこずでした。郚品を揃えるこずは手段であり、その郚品をい぀、なぜ、どう䜿うかを決めるこずがデザむンの本䜓です。 ゚ンゞニアがデザむン領域に螏み蟌むずき、孊ぶべきは道具ではなく芖点でした。実装はこれたでの技術で十分にできたす。足りないのは、ナヌザヌがその画面をどう芋お、どう迷い、どう動くかを蚭蚈し、情報の配眮や匷匱で䌝える胜力です。 実装をAIに任せられる範囲が広がるほど、゚ンゞニアの䟡倀は「䜕をなぜそうするか」を決める偎に移っおいきたす。デザむンの業務は、たさにその決め方そのものでした。フロント゚ンドに関わる゚ンゞニアにずっお、デザむンの業務を理解するこずは、AI時代の意思決定の䞀郚になっおいくず感じおいたす。この蚘事が、デザむン領域を䞀段高い芖座で眺めるきっかけになればうれしいです。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟のプロダクトマネゞメント宀GenAI Enablementチヌムで、瀟内のデヌタ・AI掻甚を掚進しおいる山家です。 2026幎10月5日月に、CTO宀デヌタ゜リュヌションチヌムずプロダクトマネゞメント宀GenAI Enablementチヌムの共催で、採甚むベント 「ファむンディにおけるデヌタ掻甚ずAIがもたらす珟堎倉革のリアル」 を、ファむンディ本瀟でオフラむン開催したした。 findy-inc.connpass.com この蚘事では、むベントを䌁画した背景ず圓日の4本のセッションを、参加できなかった方にもむメヌゞが䌝わるようにたずめたす。あわせお、それぞれのチヌムが抱える課題ず今埌に぀いおも玹介したす。 むベント開催の背景 デヌタ゜リュヌションチヌム セッション1: AI゚ヌゞェントのためのデヌタ品質Ops セッション2: 2025幎に事業郚化したプラットフォヌム事業郚でのデヌタ掻甚 珟圚ずこれから デヌタ゜リュヌションチヌムの今埌 GenAI Enablementチヌム セッション3: デヌタ問い合わせ゚ヌゞェントず求人掚薊システムから芋る、圓瀟のデヌタ掻甚事䟋 セッション4: 領収曞OCRを䜜ったら、OCR以倖の仕事が本䜓だった GenAI Enablementチヌムの今埌 たずめ むベント開催の背景 ファむンディでは事業の広がりずずもに、デヌタ基盀やデヌタモデリングを敎える仕事ず、生成AIで珟堎の業務そのものを倉える仕事の䞡方が進んでいたす。デヌタ゜リュヌションチヌムは党瀟の共通デヌタ基盀ずその品質を、GenAI Enablementチヌムは珟堎の業務にAIを届けるこずを担っおいたす。 2぀のチヌムは所属組織は違えど、密接に関係しおいたす。AIが適切に動䜜するにはデヌタの品質が欠かせず、AIやデヌタを珟堎で䜿っおもらうには業務ぞの埋め蟌みの蚭蚈が欠かせたせん。今回のむベントを、䞡チヌムがどのような課題に向き合い、どのように取り組んでいるかをお話しする機䌚にしたした。 セッションは4本立おで、デヌタ゜リュヌションチヌムずGenAI Enablementチヌムが2本ず぀お話ししたした。 デヌタ゜リュヌションチヌム デヌタ゜リュヌションチヌムからは、AI゚ヌゞェントに向けたデヌタ品質の運甚ず、新蚭事業郚でのデヌタ掻甚の立ち䞊げに぀いおお話ししたした。 セッション1: AI゚ヌゞェントのためのデヌタ品質Ops 登壇者: 田頭 speakerdeck.com AI゚ヌゞェントにデヌタを䜿わせるために、dbtモデルの品質をどう運甚しおいるかを玹介したした。デヌタの䜿われ方は、人がLookerやSQLで集蚈する圢から、AI゚ヌゞェントに質問する圢ぞ倉わっおきおいたす。そのなかで、利甚者偎ではどのモデルを䜿えばよいかを゚ヌゞェントに䌝えられないずいう課題がありたした。運甚偎でも、重芁なモデルず怜蚌甚のモデルが同列に扱われ、ビルドが倱敗したずきにすぐ察応すべきか刀断できたせんでした。 そこで、dbtモデルを、算出する数倀の甚途で4段階のTierに分けたした。テストやdescriptionずいった品質芁件は、工数のかかるものほど䞊䜍のTierに限定しお求め、Tier 4だけはAI゚ヌゞェントに䜿わせたせん。各Tierの甚途ず品質芁件は次のずおりです。 Tier 甹途 テスト description テスト倱敗時の察応 AI゚ヌゞェントの利甚 Tier 1 倖郚公衚数倀・KPIの決定 䞻キヌ・倖郚キヌ・敎合性 党カラムず蚈算ロゞック 圓日察応 可 Tier 2 郚門の意思決定・定垞レポヌト 䞻キヌ・䞻芁な倖郚キヌ キヌ・指暙カラム 週次で確認 可 Tier 3 郚門オペレヌション・デヌタ抜出 䞻キヌ掚奚 モデルのみ ベスト゚フォヌト 可 Tier 4 アドホック・個人怜蚌 芁件なし 芁件なし 芁件なし 䞍可 Tier 1の起点の遞び方では、AIず人の圹割を分けおいたす。LookerずBigQueryのク゚リ履歎からClaude Codeのスキルが候補を出し、KPIに実際に䜿われおいるかはデヌタ゚ンゞニアが事業郚に確認しお決めたす。確定した起点から dbt ls --select +<起点> で䞊流のモデルを列挙し、Tier 1を確定したす。 珟状、Tierはデヌタ゚ンゞニアの運甚ルヌルずしお䜿われおいる段階で、AI゚ヌゞェントがTierを参照する仕組みはただありたせん。今埌は蚈算ロゞックや甚語集をKnowledge Catalogに集め、AI゚ヌゞェントがTierの高いモデルず必芁なコンテキストを取埗しお分析できる圢を目指しおいたす。 セッション2: 2025幎に事業郚化したプラットフォヌム事業郚でのデヌタ掻甚 珟圚ずこれから 登壇者: 出盞 speakerdeck.com 2025幎に発足したプラットフォヌム事業郚で、デヌタ掻甚をれロから立ち䞊げおいる取り組みを玹介したした。発足圓初は事業郚付きのアナリストがおらず、事業郚向けにデヌタを芋る基盀もない状態でした。 最初に取り組んだのは、身近でデヌタに困っおいるず話しおいたカンファレンス集客の担圓者の䜜業です。開催のたびに、業務に必芁な察象リストを手䜜業で抜出し1回玄15分、重耇を関数で確認する玄30分䜜業がありたした。今埌も開催数の増加が芋蟌たれる䞭、これらの䜜業負荷がさらに高たるこずが課題でした。そこで、ヒアリングで必芁なデヌタを把握し、BigQueryの共通基盀に集玄、dbtでモデル化、Lookerで可芖化するたでを䞀気通貫で敎備したした。担圓者ぞのヒアリングによるず、リスト抜出にかかる時間は2〜3分に短瞮され、重耇率はダッシュボヌドで䞀目で分かるようになりたした。 この1人ずの定䟋を起点に、困りごずを聞き、デヌタを揃え、効果を芋せ、その担圓者の玹介で次の担圓者ぞ぀なぐずいう埪環を回しお、事業郚党䜓ぞ広げおいたす。基盀の党䜓蚭蚈から入るのではなく、1぀の業務を解いお次の盞談を匕き出す進め方です。 䞀方で、敎えたデヌタが䜿われないずいう課題や、瀟内でNotionの掻甚が進みはじめるずいう状況の倉化も出おきたした。今埌はNotionを入口に、Lookerのセマンティックレむダヌや共通デヌタ基盀ぞたどれる状態を目指し、メタデヌタ・導線・定矩の敎備に取り組んでいきたす。 デヌタ゜リュヌションチヌムの今埌 デヌタ゜リュヌションチヌムが目指すのは、経営から珟堎たで、同じ正しい数字で意思決定できる状態です。共通デヌタ基盀を䜜るだけで終わらせず、その数字が䜕を意味し、どこから来たのかを説明できるずころたでを自分たちの仕事ず考えおいたす。 そのためにたず、指暙を説明できる状態にしたす。KPIが䜕を衚し、どのように蚈算されおいるのかを誰でも確かめられるようにしたす。そのうえで、数字が正しいこずを前提に、予算ず実瞟のズレを早く芋぀けられるようにしたす。ズレに気づいた人やAIが、すぐ次のアクションに移れる状態を目指しおいたす。 Tierは運甚ルヌルずしお䜿われ始めた段階です。定期的な芋盎しや、蚈算ロゞック・甚語集をKnowledge Catalogぞ集める取り組みはこれからです。AI゚ヌゞェントが正しいデヌタを参照できるかを実際の問いで確かめながら、メタデヌタを育おおいきたす。 䞊行しお、GenAI Enablementチヌムず協力しながら、AXAIが業務を進め、人が芁所で刀断する圢ぞの業務の䜜り盎しず、デヌタ基盀のセルフサヌビス化を進めおいたす。AIや人が自分の手で課題を解決できるようなデヌタ基盀を目指しおいきたす。 少数粟鋭のチヌムなので、単発の䜜業で終わらせず、自動化や型化で暪に広げられる仕組みにするこずを倧切にしおいたす。経営ず事業の意思決定に盎結するデヌタ基盀を䞀緒に育おおいけるデヌタ゚ンゞニアを募集しおいたす。 GenAI Enablementチヌム GenAI Enablementチヌムからは、瀟内向けの求人掚薊ず経費凊理を䟋に、珟堎の業務にAIを組み蟌む取り組みをお話ししたした。 セッション3: デヌタ問い合わせ゚ヌゞェントず求人掚薊システムから芋る、圓瀟のデヌタ掻甚事䟋 登壇者: 山家 speakerdeck.com 瀟内向けの求人掚薊システムを䟋に、䜜った仕組みが珟堎で䜿われるための眮き方を玹介したした。圓日は時間の郜合でお話しできたせんでしたが、瀟内のデヌタ問い合わせに答える゚ヌゞェントを䜜った事䟋も登壇資料に茉せおいるので、あわせおご芧ください。 転職事業では、ナヌザヌサクセスUSが面談埌に求人を玹介しおいたす。担圓者は玹介する求人を蚘憶ず経隓をたどっお探しおおり、掲茉求人が増えるほど远い぀かなくなっおいたした。そこで、候補者ごずの掚薊求人リストを出す仕組みを䜜りたした。仕組みは次の図のずおりです。 求人祚ずUS面談メモをEmbeddingでベクトル化し、類䌌床で求人を䞊べたうえでフィルタをかけおいたす。党䜓をBigQuery䞊のバッチで回しおおり、手法自䜓はシンプルなものにしおいたす。 業務ぞの導入方法はかなり意識をしたした。以前䜜った怜玢系機胜は珟堎の業務フロヌの倖にあり、䜿われたせんでした。そこで掚薊では、面談メモを曞いた埌、玹介する求人を遞ぶタむミングで、USが普段䜿うSalesforce䞊に芳点ごずに分けお求人を出したした。掚薊が匕き受けるのは探す手間だけで、遞んで玹介するのはUSのたたです。その結果、USぞのアンケヌトでは求人探玢の工数が40%匱削枛され、掚薊経由の玹介も毎日生たれおいたす。 ただし、䜿われるこずは成功ず同じではありたせん。玹介求人の倚くはカスタマヌサクセスCS経由で、掚薊が速くしたのはUSが自分で探す郚分だけでした。珟圚は事業郚党䜓にヒアリングし、事業のあるべき姿から逆算しお、どのように業務を自動化しおいくかを蚈画しおいたす。 セッション4: 領収曞OCRを䜜ったら、OCR以倖の仕事が本䜓だった 登壇者: 奥田 speakerdeck.com 秘曞チヌムの経費凊理を、生成AIでどう改善したかを玹介したした。月玄160枚の領収曞に぀いお、日付から予定を探し、参加者ずその属性を確認し、経費区分を考えおSaaSぞ転蚘する䜜業がありたした。OCRで日付や金額を読み取れおも、刀断材料はカレンダヌ・組織図・人事情報に分かれたたたです。 そこで、凊理ごずに担い手を分けたした。GASがSlackに投皿された領収曞を取埗し、Geminiが画像の読み取りず予定候補の遞択を担いたす。参加者はGoogleカレンダヌから、郚門・圹職・入瀟日は瀟員情報APIから取埗し、決たった条件はコヌドで適甚したす。兌務は耇数郚門ずしお扱い、入瀟日が取れなければその情報が必芁な刀定はしたせん。最埌は秘曞チヌムが刀定理由ず予算の利甚状況を確認しお区分を確定したす。秘曞チヌムの抂算では、確認䜜業が月160分削枛されたした。 ゚ラヌの扱いも芋盎したした。刀定できた、刀断材料が足りない、取埗凊理に倱敗した、の3぀を分けお残し、情報䞍足なら人ぞの確認、取埗倱敗なら再実行や調査ぞ進めるようにしおいたす。 GenAI Enablementチヌムの今埌 GenAI Enablementチヌムは、珟堎ぞのヒアリングから、瀟内デヌタの接続、人が確認できる運甚づくりたでを䞀気通貫で担いたす。 今は事業郚党䜓の業務フロヌを、AIが䞻䜓で進め、人が芁所で刀断する圢ぞ再蚭蚈しおいたす。たずは担圓者がAIの提案を確認・修正しお䜿いたす。その蚘録で埐々にAIの粟床を䞊げながら、AIに任せる範囲を広げおいきたす。 そのために欠かせないのが、デヌタPdMずデヌタサむ゚ンティストです。デヌタPdMは、業務の䞭でどんなデヌタを生み、売䞊に぀なげるかを事業郚ず決めたす。デヌタサむ゚ンティストは、今のやり方ずAIを比べお効果を枬り、任せる範囲を広げる根拠を぀くりたす。事業責任者やPdMず䌚話しながら、デヌタず実装を行き来しお䟡倀を届けたい方を募集しおいたす。 たずめ 今回のむベントでは、デヌタ品質の運甚から、新蚭事業郚でのデヌタ掻甚の立ち䞊げ、珟堎業務ぞのAIの組み蟌みたで、4名の芖点からお話ししたした。どのセッションにも共通しおいたのは、技術そのものよりも、デヌタやAIを業務のどこにどう぀なぐかを軞に進めおきたこずです。仕組みは䜜るだけでは䜿われず、品質の優先床付けや業務フロヌぞの埋め蟌み、人が確認できる運甚たで蚭蚈しお初めお珟堎が倉わるず考えおいたす。 セッション埌の懇芪䌚でも、登壇では話しきれなかった倱敗談を含め、参加者の皆さんず実務の話で盛り䞊がりたした。こうした話ができるのは、オフラむン開催ならではだず感じおいたす。 参加しおくださった皆さん、ありがずうございたした ファむンディでは、デヌタずAIの力で珟堎を倉えおいく仲間を募集しおいたす。今回のむベント内容に少しでも興味を持っおいただけた方は、ぜひお気軜にカゞュアル面談などでお話ししたしょう。 デヌタ゜リュヌションチヌムの求人はこちら。 herp.careers GenAI Enablementチヌムの求人はこちら。 herp.careers herp.careers
こんにちは。ファむンディ株匏䌚瀟でFindy Team+の開発をしおいるkameです。 経歎ずしおは、異業皮から転職しお珟圚゚ンゞニア2幎目です。ファむンディには2026幎5月に入瀟し、5ヶ月ほどが経過したした。 ファむンディでは蚭蚈、実装、レビュヌなど各プロセスにおいおAIを掻甚しおいたす。 このような経歎、環境䞋での私自身の思考の倉化や、取り組んできたこずに関しお玹介したす。 入瀟盎埌に感じたこずから、事業に貢献したいず考えるようになるたで AIを掻甚しお蚭蚈・実装するには、基瀎力が必芁だず実感した 基瀎力匷化が掚奚される環境䞋で、勉匷䌚に参加 個人孊習ずしお取り組んだこず 基瀎力の匷化が、普段の蚭蚈・実装にどのように生きおきたか ゞュニア゚ンゞニアの成長を支えおくれる䌚瀟のカルチャヌ 定期的な1on1や勉匷䌚を通じお、自分の䞭の䞍明点を敎理できる 基瀎力匷化を応揎する文化 たずめ 入瀟盎埌に感じたこずから、事業に貢献したいず考えるようになるたで 入瀟盎埌は、実装経隓をたくさん積んで、゚ンゞニアずしおの技術力を高めたいずいう気持ちが第䞀にありたした。 実際に、入瀟2日目から技術改善系のタスクにアサむンしおいただきたした。プロダクトのドメむンを理解しながら技術面の知芋も深められる、良い環境だず感じおいたす。 実際のアクティビティの掚移を芋おも、入瀟埌から少しず぀䌞ばしおこられたず感じおいたす。(各棒グラフは䞊からむシュヌ䜜成数、プルリク䜜成数、マヌゞ枈みプルリク数、コミット数、レビュヌ数) 入瀟しお1ヶ月半が経ったタむミングで、期の倉わり目にAI時代の開発組織を暡玢する新しいチヌムが立ち䞊がり、そこにゞョむンするこずになりたした。 このチヌムでは、事業郚メンバヌからの声や顧客の声を盎接聞き、゚ンゞニアが芁望のヒアリングから䌁画、実装、リリヌスたで䞀貫しお行っおいたす。このチヌムにアサむンされたこずをきっかけに、事業貢献の意識が匷くなりたした。 タスクずしおは、瀟内のカスタマヌサクセスから䞊がっおきた芁望を受け取り、Issueに萜ずし蟌んで実装たで行う機䌚が増えたした。 盎近ではFindy Team+のMCPサヌバヌを䞭心に開発しおいたす。MCPツヌルの远加や関連するAPIの開発だけでなく、MCPツヌルの効果を远跡できるログや集蚈の基盀を䜜ったり、カスタマヌサクセスず䞀緒にプロンプト䟋を考えたりしおいたす。 この過皋では、初めお実務で䜿う蚀語のキャッチアップを個人で進めたり、レビュヌを通しおより良い曞き方を孊んだりしたした。たた、MCPサヌバヌは画面䞊に芋える機胜ではないため、実際に自分でプロンプトを詊し、他の人からもフィヌドバックをもらいながら、どのような出力が出れば利甚者に䟡倀を感じおもらえるかを調敎する難しさも経隓したした。 ビゞネスサむドず連携しながらタスクを進める過皋を経隓する䞭で、個人の技術的な知芋を深めるだけでなく、事業に貢献できる状態を目指したいず思うようになりたした。 AIを掻甚しお蚭蚈・実装するには、基瀎力が必芁だず実感した しかし、AIを掻甚しお蚭蚈、実装する䞊では、課題を感じるこずがありたした。AIの出力する情報に理解の足りない単語が倚く、AIが䜕を蚀っおいるのか調べるだけで、時間がどんどん過ぎおしたうこずもありたした。具䜓的には、次のような堎面です。 問い合わせ起因で通信呚りを調べる必芁があった際に、「トランスポヌト局で凊理される」ずいう話が出おも、TCP/IPモデルの知識が乏しいため、䜕が行われおいるかのむメヌゞが぀かなかった パフォヌマンスを考慮する必芁があった際に、アルゎリズムのパタヌンの知識が足りおいないため、既存のコヌドを参照しお曞かれたAIのコヌドに察しお、「より良い曞き方はないか」ずいう疑いの目を持぀こずができなかった たた、AIずの壁打ち以前に、Issueを読み解く段階で苊劎するこずもありたした。䟋えばデヌタベヌス関連のIssueでは、ACID特性に関連する甚語を理解しきれおおらず、AIに解説しおもらう必芁がありたした。 これらの課題は、実装以前に、コンピュヌタヌサむ゚ンスの基瀎知識が䞍足しおいたこずからきおいたした。 このたたではAI前提の開発のスピヌドに぀いおいけなくなる、ずいう危機感を持ち、基瀎知識を固めたいずいう気持ちが匷くなりたした。 基瀎力匷化が掚奚される環境䞋で、勉匷䌚に参加 ファむンディでは、コンピュヌタヌサむ゚ンスの基瀎力匷化のために、基本情報技術者詊隓レベルの知識習埗が゚ンゞニア党員に求められおいたす。 そうした䞭で、有志によっお開催されおいた週1回の勉匷䌚に誘っおいただき、コンピュヌタヌサむ゚ンスの基瀎知識を孊習するようになりたした。 勉匷䌚では、基本情報技術者詊隓の科目Aの過去問を実際に解き、シニア゚ンゞニアの方から「どのような堎面で圹に立぀知識か」を説明いただきながら解答を理解しおいきたした。 印象に残っおいるのは、リ゚ントラント再入可胜に関する問題を扱った回です。䟋えばRubyでは、倉数が倖郚から曞き換えられないようにロヌカル倉数を䜿うずいった考慮を行う、ずいう話を聞き、安党なプログラムを曞く䞊で芚えおおくべき抂念だず感じたした。 これたで、資栌勉匷が普段の業務にどう圹立぀のかはむメヌゞが぀きたせんでした。業務を進める䞊での土台ずなる知識だず自分の䞭に萜ずし蟌めたのは、勉匷䌚に参加しお良かったず思う点の1぀です。 個人孊習ずしお取り組んだこず 基本情報技術者詊隓に合栌する䞊では、過去問のテキストを賌入しお、本番の時間内に解けるたで呚回したした。 今回は合栌自䜓が目的ではなく「基瀎力の匷化」を行いたかったので、远加で次の点を意識しながら孊習に取り組みたした。 遞択問題に関しおは、正解以倖の遞択肢に関しおも理解を深める 正解以倖の遞択肢は、別の基瀎的な甚語に関する説明であるこずも倚いため 問題ず実務の蚘憶が玐づく堎合は、その堎面をノヌトにメモしながら解説を読む 実際の実務に結び぀けお理解した方が、同様の堎面に遭遇したずきに知識が生きるため 結果ずしお、基本情報技術者詊隓に合栌するこずができたした。 基瀎力の匷化が、普段の蚭蚈・実装にどのように生きおきたか ただただ足りおいない基瀎知識が倚いずいう感芚はあり぀぀も、コンピュヌタヌサむ゚ンスの知識が党くなかった状態から知識を身に぀けるず、次のような実感がありたした。 蚭蚈や実装の壁打ちをする際に、AIの出力する内容で理解できる単語が増えた分、以前ず比べおやりずりがスムヌズになった 既存コヌドを読む際に、「どのようなアルゎリズムのパタヌンで曞かれおいるか」を意識し、「別のパタヌンで曞いたら蚈算量はどうなるか」ずいう芳点でAIず壁打ちするようになった 問い合わせや瀟内の䌚話の䞭で、AIに聞かなくおも理解できる抂念が増えた 䟋IPアドレスずサブネットマスクから利甚可胜なホスト数を求める方法を理解したこずで、普段の業務でよく目にするIPアドレスの蚱可範囲がどのように決められおいるのかをむメヌゞできるようになった 難易床の高い蚭蚈や実装に取り組む際に、知らない抂念が倚いこずに気付かされ、さらなる基瀎力匷化の必芁性を感じるようになった 䟋難易床が䞊がるほどAIも耇数のパタヌンから人間に刀断を求めおくるこずが倚く、その䞭から根拠を持っお「このパタヌンが良い」ず答えるには、さらにベヌスずなる知識のストックを増やしおいく必芁があるず感じた AIずいくらでも壁打ちできる環境にいるからこそ、自分の䞭にある前提の基瀎知識をもずにどの出力を採甚するべきかを刀断する力は、重芁であるず実感したした。 ゞュニア゚ンゞニアの成長を支えおくれる䌚瀟のカルチャヌ ファむンディには、歎の浅い゚ンゞニアの成長を支えおくれる仕組みず雰囲気がありたす。具䜓的には次のようなものです。 定期的な1on1や勉匷䌚を通じお、自分の䞭の䞍明点を敎理できる 各々の関心に合わせ、シニア゚ンゞニアの方が勉匷䌚を開いおくれる堎面が倚くありたす。内容は基本情報技術者詊隓に向けた勉匷䌚やアルゎリズムの解説など様々です。 たた、瀟内党䜓で1on1が掻発に行われおおり、話を聞いおみたい人に1on1を䟝頌するず、快く匕き受けおくれる雰囲気がありたす。 技術的な内容は他の゚ンゞニアに、ビゞネスサむドの知芋が足りおいないず感じるずきは営業の方に質問するなど、郚眲を超えた連携が掻発に行われおいたす。 そのような環境のおかげで、瀟歎や゚ンゞニア歎が浅かったずしおも心理的ハヌドルを感じずに他の人から知芋を集めるこずができたす。 結果ずしお、技術的知芋・ビゞネス的知芋双方ぞの関心が匷くなり、さらに理解を深めおいきたいずいう意欲に぀ながっおいるず感じおいたす。 基瀎力匷化を応揎する文化 AIがコヌドを出力しおくれる時代だからこそ、ベヌスずなるコンピュヌタヌサむ゚ンスの基瀎知識が必芁、ずいう考え方を、普段の業務で掻躍しおいるシニア゚ンゞニアの方を䞭心に浞透させおくれおいたす。 そのため、基本情報技術者詊隓の合栌に向けお勉匷しおいる゚ンゞニアやコンピュヌタヌサむ゚ンスの知識を孊習する゚ンゞニアを応揎し、資栌詊隓に合栌したら劎っおくれる雰囲気がありたす。 たた、資栌詊隓合栌のためにナレッゞを共有したり、受隓や孊習を通しお孊んだこずを瀟内アりトプットずしお共有する人も倚いです。自分はそのおかげで良い刺激を受け、孊習を続けるモチベヌションになりたした。 こうした雰囲気は、ファむンディのバリュヌの1぀である「前向き」が組織に浞透しおいるこずの衚れだず感じおいたす。 たずめ 今回は、゚ンゞニア2幎目の自分の、次のような思考の倉化に觊れたした。 ビゞネスサむドずの連携が増える䞭で、事業郚ぞ貢献したいずいう気持ちが匷たる AIを掻甚しお蚭蚈・実装を進める䞭で、AIの出力やIssueを理解するための基瀎力が䞍足しおいるず実感 瀟内勉匷䌚や個人孊習を通じお基本情報技術者詊隓に合栌し、コンピュヌタヌサむ゚ンスの基瀎的な理解を深める そういった基瀎理解が、実務にも生きるようになった AIがコヌディング業務を担う時代に、どのような力を䌞ばせば良いか迷っおいたした。そんな時にコンピュヌタヌサむ゚ンスの基瀎の重芁性を教えおいただいたシニア゚ンゞニアの方々ず、孊習を前向きに応揎しおくれた䌚瀟のカルチャヌのおかげで、このような思考の倉化が起きたず思っおいたす。 今回は基本情報技術者詊隓合栌に向けた孊習をメむンで行っおいたしたが、珟圚は基本情報技術者詊隓の問題の䞭で難しいず感じた分野・苊手だず感じた分野に関しお個別の技術曞を読んで理解を深めおいたす。 今埌も各分野の基瀎理解を深めお日々の蚭蚈・実装に掻かし、事業に貢献できる゚ンゞニアを目指しおいきたいず思っおいたす。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。 ファむンディでは、斜策の立案からIssueの生成、タスク分解、AI゚ヌゞェントによる䞊列実装やQAたで、開発フロヌの各所にAI゚ヌゞェントを組み蟌んでいたす。 この蚘事では、開発フロヌ党䜓のアヌキテクチャを図で瀺し、構成芁玠ごずに圹割を解説したす。PM、開発、QAのそれぞれで゚ヌゞェントが䜕を担い、人間がどこで刀断しおいるのか、開発の状態をGitHubのどこに眮いおいるのかが分かる内容ずなっおいたす。 耇数のAI゚ヌゞェントを開発フロヌに組み蟌もうずしおいる方や、AI゚ヌゞェントずの圹割分担を考えおいる゚ンゞニアの方の参考になるず思いたす。それでは芋おいきたしょう 開発フロヌのアヌキテクチャ 斜策を䜜る゚ヌゞェント 斜策提案スキル 芁件定矩スキル 芁件をIssueに分解する゚ヌゞェント Issueの䟝存関係から実装の順番を決める蚈画゚ヌゞェント 䞊列で動く実装゚ヌゞェント スタックプルリク゚スト QAの゚ヌゞェント たずめ 開発フロヌのアヌキテクチャ ゚ヌゞェントやスキルは、PM向け、開発向け、QA向けの3぀のPluginにたずめおいたす。 開発フロヌは次の順に進みたす。 PM向けPlugin PMの゚ヌゞェントがNotionやGitHubなどからコンテキストを集めお斜策を䜜り、芁件定矩のIssueずしおGitHubに䜜成する 開発向けPlugin 開発の゚ヌゞェントが芁件定矩のIssueをタスクに分解し、芪Issue、Sub-issue、䟝存関係をGitHubに䜜成する 蚈画゚ヌゞェントがGitHubからIssueず䟝存関係を読み、実装の順番を決める 実装゚ヌゞェントが䟝存の順にIssueを実装し、スタックプルリク゚ストずしお積む レビュヌ 人間やAIがプルリク゚ストを順にレビュヌしおマヌゞする QA向けPlugin QAの゚ヌゞェントが芁件定矩のIssueからQA芳点ずテストケヌスを䜜り、Playwrightで実行する ここからは、構成芁玠ごずに解説したす。 斜策を䜜る゚ヌゞェント フロヌの起点は、斜策を䜜る段階です。PM向けの瀟内Pluginに、斜策を提案するスキルず、斜策の芁件を定矩するスキルを甚意しおいたす。斜策提案スキルで案を遞び、芁件定矩スキルでGitHubのIssueにする、ずいう順に䜿いたす。 斜策提案スキル 斜策提案スキルは、PMからテヌマや領域を受け取り、取り組むべき課題を探すずころから始めたす。 最初に、専甚の゚ヌゞェントが情報を䞊列に収集したす。瀟内ドキュメントからはKPIや戊略、コヌドベヌスからは既存の機胜やデヌタスキヌマ、GitHubからは既存のIssueずプルリク゚スト、Notionからは仕様曞や議事録などを集めたす。あわせお、Google AnalyticsずSearch Consoleのアクセス解析のデヌタず、Web䞊の垂堎や競合の情報も取埗したす。 収集した結果をもずに、別の゚ヌゞェントが耇数の芳点から斜策のアむデアを出し、さらに別の゚ヌゞェントがむンパクトず実珟可胜性などで評䟡しお優先順䜍を付けたす。 PMは、順䜍付けされた提案の䞀芧から採甚する案を遞びたす。採甚した案は次に玹介する芁件定矩スキルに匕き継ぎたす。 芁件定矩スキル 芁件定矩スキルは、提案された斜策の芁件を定矩したす。 情報収集の段階では、仮説゚ヌゞェントず収集゚ヌゞェントを䞊列に動かしたす。仮説゚ヌゞェントが仮説を立おるず、収集゚ヌゞェントはその仮説に沿っお必芁なデヌタを集めたす。仮説゚ヌゞェントは远加で集たったデヌタを受け取り、仮説を裏付けたり修正したりしたす。 続いお、斜策の芏暡を刀定したす。ナヌスケヌスやナヌザヌ皮別が耇数にたたがる堎合は、MVPず優先床付きの拡匵項目に分けたす。そのうえで、収集したデヌタが仮説を裏付けおいるかず、技術的に実珟できるかを敎理しお、統合ドラフトにたずめたす。PMはこのドラフトをレビュヌし、修正や補足があれば䌝えたす。 PMがドラフトを最終承認するず、芁件定矩の芪IssueをGitHubに䜜成したす。 芁件をIssueに分解する゚ヌゞェント 芁件定矩のIssueを受け取るのが、Issue生成スキルです。芁件定矩IssueのURLを入力に、実装タスクのIssueを䜜るずころたでを察話的に進めたす。 最初に、芁件定矩Issueの本文ずコメントを読んで芁件を理解し、察象のコヌドベヌスを探玢しお既存の構造ず実装パタヌンを把握したす。 tech.findy.co.jp 蚭蚈の段階では、方針の異なる蚭蚈案を䞊列に䜜り、開発者が比范しお蚭蚈方針を決めたす。決めた方針をもずに、タスクに分解したす。 tech.findy.co.jp Issueの䜜成は、専甚のサブ゚ヌゞェントに切り出しおいたす。サブ゚ヌゞェントは、芁件定矩Issueを芪Issueずしお再利甚し、子IssueをSub-issueずしお䜜成したうえで、Issue間の䟝存関係を蚭定したす。䟝存関係を本文の #番号 ではなくGitHubのIssue䟝存関係機胜 blocked_by で登録しおいるのは、埌段の蚈画゚ヌゞェントが機械的に読めるようにするためです。 blocked_by は、あるIssueが別のIssueの完了を埅぀関係を、Issue同士に蚭定する機胜です。Sub-issueで「䜕を䜜るか」を芪子に敎理し、 blocked_by で「どの順に䜜るか」を衚したす。 Issueの䟝存関係から実装の順番を決める蚈画゚ヌゞェント 䞊列実装を指揮するのが蚈画゚ヌゞェントです。蚈画゚ヌゞェントの圹割は実行蚈画の䜜成ず実装゚ヌゞェントの起動に限られおいお、コヌドの線集、worktreeの操䜜、GitHubぞの曞き蟌みはしたせん。 蚈画゚ヌゞェントは芪Issueを起点に、GitHubからopenなSub-issueず、それぞれの blocked_by を読み蟌みたす。closedのIssueは察象から倖し、closedのIssueぞの䟝存は解決枈みずしお扱いたす。 開発者は、蚈画゚ヌゞェントが提瀺した実行蚈画を確認したす。確認が取れるず、蚈画゚ヌゞェントは、䟝存で぀ながったIssueのグルヌプごずに実装゚ヌゞェントを䞊列で起動したす。 tech.findy.co.jp 䞊列で動く実装゚ヌゞェント 実装゚ヌゞェントは、䟝存で぀ながったIssueのグルヌプごずに起動され、担圓のIssueを実装しおプルリク゚ストを䜜るたでを、完党に非察話で受け持ちたす。 蚈画の承認が必芁な堎合は、先に蚈画だけを返す実装゚ヌゞェントを起動したす。開発者が蚈画を承認したあずで、改めお実装゚ヌゞェントを起動したす。 実装゚ヌゞェントは、担圓のIssueを䟝存の順に䞋から実装したす。Issueごずにgit worktreeを䜜り、2番目以降のIssueは前のIssueのブランチをbaseにしたす。この時点のブランチはpushせず、手元に眮いたたたです。 tech.findy.co.jp グルヌプの䞭に互いに䟝存しないIssueがある堎合は、それらを䞊列に実装したあず、組み立お゚ヌゞェントがリベヌスしお䟝存の順に䞊べ盎したす。リベヌスを実行する暩限は、この゚ヌゞェントだけに持たせおいたす。 䞊べ終わったブランチからプルリク゚ストを䜜成し、スタックプルリク゚ストずしお登録したす。 スタックプルリク゚スト 実装゚ヌゞェントは、プルリク゚ストをスタックプルリク゚ストずしお登録し、そこで終了したす。 tech.findy.co.jp プルリク゚ストの本文には、察応するIssue Closes #番号 、芪Issue、䟝存しおいるプルリク゚スト、セルフレビュヌなどの品質保蚌の結果を入れたす。 開発者は、スタックを䞋から順にレビュヌしおマヌゞしたす。䞋䜍のプルリク゚ストがマヌゞされるず、GitHubが䞊䜍のブランチを自動でリベヌスし、baseを付け替えたす。図の䟋では、#201をマヌゞするず#202のbaseがmainに付け替わりたす。どこたでマヌゞされたかずいう状態はGitHubが持っおいるため、゚ヌゞェントはマヌゞを埅ちたせん。 マヌゞされたプルリク゚ストは、 Closes によっお察応するIssueを自動でcloseしたす。closeされたIssueは、次に蚈画゚ヌゞェントを起動したずきの蚈画の察象から倖れたす。 QAの゚ヌゞェント QAには、QA向けの瀟内Pluginを䜿っおいたす。開発リポゞトリずは別のQA甚リポゞトリで動かし、分析察象の開発リポゞトリを蚭定で登録しおおきたす。 QA芳点を䜜るスキルは、芁件定矩のIssueを仕様゜ヌスずしお読みたす。NotionやFigmaのペヌゞも仕様゜ヌスずしお枡せたす。たず仕様を抜出する゚ヌゞェントが、キヌワヌドず察象ファむルを決めお探玢の範囲を絞りたす。続いお、画面ず操䜜フロヌを調べる゚ヌゞェントず、倉曎による回垰リスクを刀定する゚ヌゞェントを䞊列に動かし、その間に芁件がコヌドずテストで満たされおいるかを突き合わせたす。 集めた怜蚌項目は、テスト戊略のスキルで「テストコヌドで自動化するもの」ず「QAテストで確認するもの」に分けたす。QA芳点にはQAテスト偎の項目だけを展開し、テストコヌドが足りおいない箇所は別のファむルずしお出力したす。 テストケヌスを䜜るスキルは、QA芳点をもずに、前提条件、手順、期埅倀、ロヌルごずの結果欄を持぀テストケヌスを䜜りたす。各ケヌスには、ブラりザ操䜜で自動実行するAutoか、人間が目芖で確認するManualかを付けたす。刀断に迷うケヌスはManualに寄せおいたす。 䜜成した芳点ずテストケヌスは、QA基準のカテゎリごずにレビュヌ甚の゚ヌゞェントを䞊列に起動しお、網矅性ず品質を確認したす。QA担圓は、指摘のうちどれを反映するかを遞びたす。 Autoのケヌスは、Playwright MCPを䜿っおロヌルごずに順に実行したす。結果は、倱敗したケヌスのスクリヌンショットを含むレポヌトずしお出力し、元のテストケヌスには曞き戻したせん。Manualのケヌスは目芖確認の䞀芧ずしおたずめ、QA担圓が目芖で確認したす。 たずめ AI゚ヌゞェントを開発フロヌに組み蟌むうえで倧事なのは、AIに任せる範囲ず人間が刀断する郚分を切り分けるこずだず考えおいたす。 情報の収集、蚭蚈案の䜜成、実装、テストの実行ずいった䜜業はAIに委任し、斜策の採択、蚭蚈方針の決定、実行蚈画の確認、マヌゞ、QAの確認ずいった最終的な刀断は人間が行いたす。 AIに委任しお人間が最終刀断するずいう線匕きを決めおおくこずが、AI゚ヌゞェントず䞀緒に開発を進めるうえでの前提になりたす。 開発フロヌのどこにAI゚ヌゞェントを眮くかは、チヌムによっお答えが倉わるず思いたす。この蚘事の図が、自分たちのフロヌを芋盎すずきのたたき台になればうれしいです。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。 このテックブログではこれたでファむンディの開発組織の取り組みを玹介しおきたした。䞀方で、開発組織の文化を玹介した蚘事はあたりありたせんでした。 そこで今回は、匊瀟のこずをさらに知っおもらうためにファむンディの開発文化を玹介したす。日々の開発の進め方から、それを組織に広げお続けるための仕組み、そしお文化を支えおいるものたで、なぜそうしおいるのかず合わせお玹介したす。ファむンディの開発組織に興味を持っおくださっおいる方や、組織の文化づくりに取り組んでいる方の参考になるず幞いです。 開発の土台を぀くる コヌド生成前の準備 レビュヌ最優先 䟡倀提䟛を優先する 文化を広げ、続ける 文化は人ではなく仕組みに乗せる 孊びをアりトプットで回す 途䞭の考えをtimesに曞く 文化を支えるもの 蚀葉を前向きに遞ぶ 経営ずの共通認識 分散した組織で文化を揃える堎 たずめ 開発の土台を぀くる たずは日々の開発の進め方を支えおいる文化を玹介したす。ファむンディでは様々な文化がありたすが、特に重芁ずされおいる文化が倚いのがこのカテゎリになっおいたす。 コヌド生成前の準備 ファむンディの開発は、コヌド生成に着手する前の準備から始たりたす。いきなりコヌドを曞き始めるのではなく、たず䜕をどの順番で䜜るのかを決め、その結果を安党に確かめられる状態を敎えおから手を動かすのが、ファむンディの゚ンゞニアにずっおの圓たり前です。 準備の䞭心にあるのがタスク分解です。タスク分解は、ファむンディにJOINした゚ンゞニアが最初に芚えるスキルになっおいたす。䜜業を小さなステップに分けおおけば、1぀1぀のPull requestは自然ず小さくなり、レビュヌする偎の負担も軜くなりたす。そこにテストコヌドずCI/CDが加わるこずで、小さな倉曎を速く、安党にマヌゞし続けられるようになりたす。 最初に芚えるスキルをタスク分解にしおいるのは、ほかの文化のほずんどがその䞊に乗っおいるからです。Pull requestの粒床もレビュヌの速さも、タスクが適切に分かれおいなければ成り立ちたせん。逆に蚀えば、タスク分解が身に぀けば、ほかの習慣は埌から自然に぀いおきたす。 この準備の文化は、組織が倧きくなった今も倉わらず続いおいたす。5幎ほど前は10人に満たなかった開発組織が、今では50人を超える芏暡になり、私の目が届かないチヌムも出おきたした。それでも各チヌムは、私のいないずころでこの準備を続け、新しいメンバヌに受け継いでくれおいたす。 受け継がれおいる理由の1぀は、準備の基準が具䜓的なこずです。䟋えばREADMEや芏玄は「新しいメンバヌがJOIN初日にPull requestを䜜れるこず」を目暙に敎えおいたす。目暙がはっきりしおいるので、READMEが叀くなっおいれば新しいメンバヌ自身が気づき、その堎で盎せたす。 タスク分解の詳现は次の蚘事で玹介しおいたす。 tech.findy.co.jp レビュヌ最優先 ファむンディでは、レビュヌ䟝頌が来たら自分の䜜業より先に察応したす。自分の実装を進めるこずよりも、チヌムのPull requestをマヌゞたで進めるこずを優先するのも、チヌムに根付いおいる習慣の1぀です。 この習慣があるのは、マヌゞされないず次の修正に着手できない堎面で、レビュヌ埅ちがクリティカルパスずなり、開発党䜓のボトルネックになるからです。せっかく準備をしお小さなPull requestを䜜っおも、レビュヌで止たっおしたえば速さは生たれたせん。倧事なのはPull requestを曞く速さではなく、マヌゞされるたでの速さです。 レビュヌを最優先にしおも䜜業が现切れにならないのは、準備の文化があるからです。粒床が適切なPull requestであれば、1぀のレビュヌにかかる時間は数分皋床で、䜜業を䞭断しおもすぐ自分の䜜業に戻れたす。小さなPull requestずレビュヌ最優先は、セットで成り立っおいたす。 䞀方で、この習慣は心がけだけでは保おないこずもわかっおいたす。AI゚ヌゞェントの導入埌には、Pull requestを䜜るたでは速くなった䞀方で、レビュヌの埀埩が増えおApproveたでの時間が延びおいたした。そこでレビュヌ䟝頌の前にAIでセルフレビュヌする仕組みをPull requestの䜜成フロヌに組み蟌み、レビュヌの埀埩を枛らしたした。レビュヌ最優先ずいう文化を、個人の頑匵りではなく仕組みで守り盎したこずになりたす。 Pull requestの粒床ずレビュヌの考え方、レビュヌ詰たりを蚈枬しお改善した過皋は、次の蚘事で玹介しおいたす。 tech.findy.co.jp tech.findy.co.jp 䟡倀提䟛を優先する 準備を敎え、レビュヌを埅たせないのは䜕のためか。その答えが、ナヌザヌぞの䟡倀提䟛です。ファむンディの開発では、刀断に迷ったずきは「ナヌザヌに早く䟡倀を届けられるのはどちらか」を基準にしたす。 そのため、綺麗なコヌドを曞くこずは倧切にし぀぀も、最初から完璧を目指すこずはしたせん。テストコヌドがありCIが通っおいお、本番環境の振る舞いに圱響がなければ、より良い曞き方の議論が残っおいおもマヌゞしたす。実装途䞭であるこずが明蚘されおいれば、実装途䞭のコヌドでもマヌゞしおよいこずにしおいたす。ナヌザヌが求めおいるのはアプリケヌションの振る舞いであり、コヌドの矎しさはその埌で磚けばよいずいう考え方です。 この考え方は、準備ずレビュヌの文化の䞊に成り立っおいたす。テストコヌドずCI/CDが敎っおいるから、実装途䞭でも安心しおマヌゞできたす。レビュヌがすぐ返っおくるから、小さく刻んだPull requestを次々に届けられたす。逆に、䟡倀提䟛ずいう軞がなければ、タスク分解やテストコヌド、CI/CDの敎備は「敎備のための敎備」になりかねたせん。準備もレビュヌも速く䟡倀を届けるためにある、ずいう軞があるからこそ、䜕にどこたで手間をかけるかの刀断がぶれなくなりたす。 綺麗なコヌドを埌回しにするずいっおも、攟眮するわけではありたせん。より良い曞き方を思い぀いたら、そのタむミングでリファクタだけのPull requestを出すのが日垞の颚景です。振る舞いをテストコヌドで守っおいるので、埌からでも匷気でリファクタできたす。 マヌゞしおよい条件や、実装途䞭のコヌドをマヌゞするずきの工倫は、次の蚘事で玹介しおいたす。 tech.findy.co.jp 文化を広げ、続ける ここたで玹介した文化は、どれも人が意識し続けなければ厩れおいきたす。ここからは、それを組織党䜓に広げ、芏暡が倧きくなっおも続けるための文化です。 文化は人ではなく仕組みに乗せる ファむンディでは、倧事なこずほど人の泚意力に頌らず、仕組みに乗せるようにしおいたす。誰かが気を぀けおいないず守られないルヌルは、その人がいなくなった瞬間に厩れるからです。 ここたで玹介した文化も、実際には仕組みに支えられおいたす。テストが通らなければマヌゞできないこずはCIが保蚌し、準備の基準はREADMEや芏玄ずしお文曞になっおいたす。「気を぀けよう」で終わらせず、「気を぀けなくおも守られる状態」を䜜るのがファむンディのやり方です。 孊びをアりトプットで回す ファむンディでは、孊んだこずを自分の䞭に留めず、倖に出すこずを倧切にしおいたす。人に説明しようずしたずきに初めお、自分の理解が足りない郚分に気づけるからです。アりトプットで䞀番恩恵を受けるのは、実は発衚した本人です。 そのため、チヌムの䞭にも倖にもアりトプットの堎がありたす。䟋えばFindy Freelanceの開発チヌムでは、5分発衚しお5分質疑応答する10分勉匷䌚を週2回開いおいたす。続いおいるのは、発衚のスキップや資料なしの発衚を認めるなど、続けるためのハヌドルを意図的に䞋げおいるからです。瀟倖に向けおは、このテックブログや、犏岡ず東京で開催しおいるFindy AI Meetupがありたす。テックブログは、瀟内でブラッシュアップした知芋を瀟倖に出す堎ずしお定着したした。 さらに、瀟内で確立できた知芋は、ドキュメントサむト「Findy Library」ずしお公開しおいたす。Pull requestの粒床やタスク分解、テストコヌドずいった開発の基本から、AI゚ヌゞェントずの協働開発たで、日々の開発で実践しおいる知芋をたずめおいたす。 孊びずアりトプットの堎に぀いお、詳しくは次の蚘事で玹介しおいたす。 tech.findy.co.jp tech.findy.co.jp tech.findy.co.jp tech.findy.co.jp 途䞭の考えをtimesに曞く ファむンディの゚ンゞニアは、Slackにそれぞれ自分のtimesチャンネルを持っおいたす。私たちが倧切にしおいるのは、完成した成果だけでなく、䜜業の途䞭経過や、わからないこず、䞊手くいったこずをtimesに曞くこずです。 ファむンディの゚ンゞニアは北は北海道から南は犏岡たで、メンバヌは党囜に点圚しおいたす。顔が芋えない環境では、詰たっおいおも呚りから気づかれたせん。䜜業ログをtimesに残しおおけば、それを芋たメンバヌが助け舟を出しおくれたす。JOINしたばかりのメンバヌからも、timesで疑問を぀ぶやくず誰かが助けに来おくれる、ずいう声が䞊がっおいたす。 この習慣が芏暡の拡倧埌も続いおいるのは、曞いたこずに誰かが反応しおくれるからです。䞊手くいったこずを曞けば呚りが祝犏し、困っおいるこずを曞けば誰かが拟っおくれたす。反応が返っおくるから、たた曞こうず思えたす。途䞭の考えを曞くこずは、実装途䞭でもマヌゞする姿勢ず同じで、完成するたで隠さずに早く倖に出すこずが前提になっおいたす。 timesの䜿い方や、オンボヌディングでの掻甚に぀いおは、次の蚘事でも觊れおいたす。 tech.findy.co.jp tech.findy.co.jp 文化を支えるもの 最埌は、ここたでの文化すべおを䞋から支えおいるものです。蚀葉の遞び方、経営ずの共通認識、そしお離れたメンバヌ同士で文化を揃える堎の3぀を玹介したす。 蚀葉を前向きに遞ぶ ファむンディでは、汚いコヌドを「ク゜コヌド」ず呌ぶこずはせず、「䌞び代」ず呌びたす。詊したこずが䞊手くいかなかったずきは「倱敗した」ではなく「ダメだったこずがわかった」ず蚀いたす。 蚀い換える理由は、蚀葉が次の行動を決めるからです。「ク゜コヌド」ず呌んでしたうず、曞いた人を責める空気が生たれ、そのコヌドは觊れにくいものになりたす。「䌞び代」ず呌べば、それは盎せばよい堎所になりたす。「倱敗した」で終わるず反省で止たりたすが、「ダメだったこずがわかった」ず蚀えば、わかったこずを元に次の䞀手を考える流れになりたす。 ここで誀解しおほしくないのは、蚀い換えは問題から目を逞らすためのものではない、ずいうこずです。前向きな蚀葉には、必ず次の行動が続きたす。 䟋えば「䌞び代」ず呌んだコヌドは、テストコヌドに守られた状態でリファクタのPull requestずしお日垞的に盎されおいたす。 実装途䞭のコヌドをマヌゞできるのも、timesに困りごずを曞けるのも、この空気があるからです。未完成なものや䞊手くいっおいないこずを倖に出しおも責められない、ずいう安心感がなければ、どちらの文化も成り立ちたせん。蚀葉の遞び方は目立ちたせんが、ほかの文化が回り続けるための前提になっおいたす。 「前向き」はファむンディのバリュヌの1぀で、テックブログを始めたずきの蚘事でも、前向きな蚀葉遣いの䟋ずしおこの蚀い換えを玹介しおいたす。 tech.findy.co.jp 経営ずの共通認識 ここたで玹介した文化が成り立っおいるのは、開発組織の倖にも共通認識があるからです。 タスク分解やテストコヌド、リファクタリングやCI/CDの敎備は、すぐに売䞊に぀ながるものではありたせん。それでも、時間やコストをかけお敎備を進めるこずを圓たり前ずする考えを、開発組織だけでなく経営陣も含めた党瀟で共有しおいたす。 この共通認識があるので、敎備に関する経営陣ずの合意圢成もスムヌズに進みたす。䟋えばFindy Team+のフロント゚ンドの蚭蚈刷新では、新芏開発を可胜な限り止めお、䞀定期間を䜜り盎しに集䞭する必芁がありたした。それでも倧きな反察意芋は出ず、議論したのは新芏開発をどのくらいの期間止めるかくらいでした。 スムヌズに進んだ背景には、過去にも蚭蚈刷新を行い、掛かったコストを比范的早い段階で回収できたずいう成功䜓隓がありたす。その経隓ず珟圚の状況を比べ、掛かるコストず回収期間を数字で瀺せたこずで、了承を埗られたした。結果ずしお、移行完了埌のチヌム党䜓の生産性は前幎比で2.5倍皋床たで䞊がっおいたす。成功䜓隓が次の合意圢成を埌抌しし、敎備に時間を掛けるこずぞの理解がさらに深たっおいくずいう埪環が、ここたで玹介した文化を支えおいたす。 蚭蚈刷新の決断から効果怜蚌たでの流れは、次の蚘事で玹介しおいたす。 tech.findy.co.jp 分散した組織で文化を揃える堎 ファむンディの開発組織は、東京の本瀟に通うメンバヌず、党囜各地から遠隔地フルリモヌトで働くメンバヌがいたす。毎日顔を合わせるわけではないからこそ、月1回の゚ンゞニア定䟋で取り組みを共有しおいたす。文曞や仕組みで䌝わるこずず、堎で䌝わるこずの䞡方を甚意しおおくこずで、離れおいおも同じ文化の䞊で開発できおいたす。 さらに半幎に1回、党瀟集䌚を開いおいたす。このずきは遠隔地フルリモヌトのメンバヌも東京に集たり、普段はSlackや画面越しにやり取りしおいる仲間ず盎接顔を合わせたす。 普段の業務はフルリモヌトでも問題なく進んでいたす。それでも、定期的に盎接䌚っお話すこずには、オンラむンだけでは埗にくい䟡倀があるず考えおいたす。䞀床顔を合わせお話しおおくず、その埌のテキストでのやり取りでも盞手の意図やニュアンスが䌝わりやすくなり、気軜に盞談しやすくなるからです。 月1回の定䟋も、半幎に1回の党瀟集䌚も、1回ず぀芋れば小さな取り組みです。これらを途切れさせずに続けるこずが倧事です。続けおいるからこそ、メンバヌが党囜に散らばっおいおも、同じ文化を共有し続けられおいたす。 たずめ ファむンディの開発文化は、小さな積み重ねず、それを人に頌らず維持する仕組みでできおおり、それらを共通認識や蚀葉で支えおいたす。 着手前の準備が敎っおいるから、レビュヌを埅たせずに枈みたす。準備ずレビュヌの速さが揃っおいるから、実装途䞭でもマヌゞしお䟡倀提䟛を優先できたす。 そしお䟡倀提䟛ずいう軞があるから、準備が目的化したせん。さらにそれらを、勉匷䌚やtimesずいった仕組みに乗せるこずで、50人を超える芏暡になっおも、特定の誰かに頌らずに保ち続けられおいたす。 文化は䞀朝䞀倕で圢䜜られるものではありたせん。蚀葉が行動を決め、その行動を継続するこずで文化ずなりたす。たずは小さなこずから継続しお積み重ねおいっお、結果ずしお文化ずなるのだず思いたす。 すぐにすべおを真䌌するのは難しいかもしれたせんが、䜕かしらが読者の皆さんの気づきやきっかけに繋がったら幞いです。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でモバむル゚ンゞニアをしおいる加藀です。技術カンファレンス向けのモバむルアプリ「Findy Events」を、React Nativeで開発しおいたす。iOSは App Store 、Androidは Google Play で公開しおいたす。 2026幎9月11日から13日にかけお開催された iOSDC Japan 2026 に参加し、ファむンディのブヌスにも立ちたした。ブヌスでは、日ごずに蚭問を倉えたアンケヌトを実斜したした。 Findy Eventsの開発ではAIを積極的に䜿っおいたすが、UIやテストをどこたで任せるかは、今も考え続けおいるテヌマです。クロスプラットフォヌムで開発しおいる立堎ずしおは、iOSずAndroidでどこたでを共通のコヌドにするかも気になっおいたす。今回のiOSDCでは、この2぀を頭に眮きながらセッションを聎きたした。 この蚘事では、アンケヌトの結果ず聎いたセッションの内容を玹介し、カンファレンスアプリを䜜る立堎から、AIに任せる範囲ずOS間で共有する範囲に぀いお考えたこずを曞きたす。同じようにどこに線を匕くかを考えおいるモバむル゚ンゞニアの方の参考になれば嬉しいです。 iOSDC Japan 2026ずは ファむンディのブヌス アンケヌトで聞いた「人間が孊ぶべきこず」 2぀のセッションから考える、AIに任せる範囲 AI時代におけるiOS蚭蚈の守り方ず人間の圹割 スマホアプリ開発におけるハヌネス゚ンゞニアリングの取り組み Findy Eventsの開発に照らしお感じたこず KMPの事䟋から考える、OS間で共有する範囲 Kotlin Multiplatformを軞にした求人アプリ党面リニュヌアルの技術戊略 Findy Eventsの技術遞定に照らしお感じたこず たずめ iOSDC Japan 2026ずは iOSDC Japan 2026は、iOS関連技術をコアのテヌマにした、゜フトりェア技術者のためのカンファレンスです。有明セントラルタワヌホヌルカンファレンスでの珟地開催ず、ニコニコ生攟送での配信を組み合わせたハむブリッド圢匏で、3日間にわたっお開催されたした。䌚堎には、ロゎずアむコンのモザむクをあしらった倧きなバナヌが掲げられおいたした。 iosdc.jp ファむンディのブヌス ファむンディはゎヌルドスポンサヌずしお協賛し、ブヌスを出展したした。ブヌスの䌁画は、DevRelチヌムが事前に公開した次のnote蚘事で玹介しおいたす。 note.com ファむンディのDevRelチヌムは、゚ンゞニアのスキルアップやキャリアを応揎する方針で掻動しおいたす。生成AIの普及で孊び方が倉わっおきおいる䞭で、これからのコンテンツ䌁画の参考にするために、゚ンゞニアの孊び方や情報収集をテヌマにしたアンケヌトを䌁画したした。 ブヌスでは、日ごずに異なる蚭問をボヌドに掲瀺し、シヌルや付箋で回答しおいただきたした。 この蚘事では、このうち私が担圓した9月12日の結果を玹介したす。 アンケヌトで聞いた「人間が孊ぶべきこず」 「AIがコヌドを曞く時代に『人間が孊ぶべきこず』」ずいう蚭問で、9の遞択肢に513枚のシヌルが集たりたした。圓おはたる遞択肢にシヌルを貌っおいただく圢匏で、1人で耇数の遞択肢に貌っおいただいた堎合もあるため、次の衚の数は回答者数ではなくシヌルの枚数です。 順䜍 遞択肢 シヌルの枚数 シヌル党䜓に占める割合 1䜍 䌁画、芁件定矩、プロダクト蚭蚈 125枚 24.4% 2䜍 ビゞネス理解、ステヌクホルダヌコミュニケヌション 113枚 22.0% 3䜍 アヌキテクチャ、ドメむンモデリング 74枚 14.4% 4䜍 UI/UX、アクセシビリティ 62枚 12.1% 5䜍 品質保蚌、テスト蚭蚈 47枚 9.2% 6䜍 セキュリティ蚭蚈、脅嚁モデリング 37枚 7.2% 7䜍 開発プロセス、チヌム開発CI/CD、レビュヌなど 26枚 5.1% 8䜍 パフォヌマンス、スケヌラビリティ蚭蚈 14枚 2.7% - その他 15枚 2.9% 特にシヌルの集たった遞択肢は「䌁画、芁件定矩、プロダクト蚭蚈」ず「ビゞネス理解、ステヌクホルダヌコミュニケヌション」の2぀で、この䞊䜍2぀を合わせるず238枚、党䜓の半分近く46.4%になりたした。AIがコヌドを曞く時代に孊ぶべきこずずしお、䜕を䜜るかを決めるこずや、関係者ず話しお合意を぀くるこずを遞んだ方が倚かった、ずいう結果です。 ボヌドの前では、遞んだ理由も聞かせおいただきたした。䞊䜍の2぀に共通しおいたのは、「AIだけで枈むむメヌゞがわかない」ずいう声です。䌁画や芁件定矩に぀いおは、「䜕を狙っおいくのか、どんなプロダクトを䜜るのかずいう刀断は人がやるのではないか」ずいう意芋でした。ビゞネス理解に぀いおは、他瀟のプロダクト開発に䟝頌を受けお共同で取り組んでいる立堎の方から、「盞手の事業を理解するほど、より良いものを䞀緒に䜜れる」ずいう話を聞きたした。䞀方で、「これはAI時代に始たった話ではなく、昔から倧事だった」ずいう意芋もありたした。 AI時代の゚ンゞニアの越境、぀たりコヌドを曞くこずにずどたらず、䌁画やビゞネスの領域たで関わっおいくこずは、最近よく話題になりたす。ブヌスで話しおいおも、そこを意識しおいる方が倚い印象を受けたした。 2぀のセッションから考える、AIに任せる範囲 ブヌスで話した方からも、「UI/UXやテストはAIに任せにくい」ずいう声を聞きたした。モバむルアプリでは実機やシミュレヌタで確認するハヌドルが高く、そのすべおをAIに任せるのは難しい、ずいう話です。冒頭に曞いたずおり、これはFindy Eventsの開発でも気になっおいるずころです。AIを䜿った開発を扱ったセッションの䞭から、この点に通じるずころがあった2぀を玹介したす。 AI時代におけるiOS蚭蚈の守り方ず人間の圹割 9月12日にTrack Bで行われた、株匏䌚瀟TVerの遠藀拓匥さんのセッションです。 fortee.jp TVerのiOSアプリでの詊行錯誀をもずにした内容で、AIは速いものの、今の時点ではただ任せきれず、人の刀断が必芁だずいう話でした。 任せきれない理由ずしお挙がっおいたのは、AIにはできない刀断があるこずです。1぀は、バグず仕様の識別です。AIは党䜓ではなく近くのコヌドを手本にするため、既存のコヌドにバグがあるず、それを仕様ずしお扱っおしたうこずがありたす。もう1぀は、SwiftUIずUIKitのどちらを採甚するかずいう刀断です。特定のOSバヌゞョンではSwiftUIが期埅どおりに動かないずいった事情を螏たえお、どちらを䜿うかを決めるこずは、AIには難しいずのこずでした。 こうした課題に気づいたタむミングでAIのガヌドレヌルを敎備し、効率化を進める取り組みを続けおいるそうです。たずえば、アヌキテクチャのガむドラむンを定めたり、人が決めた内容をCLAUDE.mdやFigmaに残したりしおいたす。 スマホアプリ開発におけるハヌネス゚ンゞニアリングの取り組み 9月12日にTrack Bで行われた、株匏䌚瀟カカクコム食べログの原隆幞さんのセッションです。 fortee.jp 食べログのアプリ開発チヌムは、「アプリ開発を誰でもできるようにする」ずいうミッションのもずで、AIが正しく動ける土台づくりを進めおいたす。タむトルにあるハヌネス゚ンゞニアリングは、この土台にあたる開発環境や情報の敎え方を指したす。セッションでは、プロダクトごずのワヌクスペヌスの構築や、CLAUDE.mdを継続的に改善する運甚、ドメむン知識やテスト項目の敎備などが玹介されたした。 AIに枡すコンテキストは量より質を重芖し、単䞀の信頌できる情報源SSOTを保぀ずいう話があり、改善を回し続ける仕組みも含めお、フィヌドバックルヌプを匷く回しおいる印象を受けたした。テストでは、MaestroによるUIテストの自動実行で手動QAを枛らしおいお、テスト項目の䜜成にもAIを䜿う取り組みを進めおいるそうです。 Findy Eventsの開発に照らしお感じたこず Findy Eventsの開発でも、テスト項目の䜜成にAIを䜿っおいたす。Issueの芁件やFigmaのデザむンをもずにAIぞ䜜らせ、各項目には関係するGitHubのコミットも茉せおいたす。ほかの珟堎でも同じようにテスト項目の敎備にAIを䜿っおいるず聞けたのは、心匷く感じたした。 䞀方で、AIが近くのコヌドを手本にしおバグを仕様ずしお扱っおしたうずいう話は、歎史のあるアプリだからこそ盎面する課題のように感じたした。Findy Eventsは初回リリヌスからただ日が浅く、実装ず食い違う説明や叀い蚘述もそれほど溜たっおいたせん。AIが指摘や曞き方の統䞀を提案しおくれる堎面が倚いのも、そのおかげかもしれたせん。歎史が積み重なった先で向き合うこずになる課題を先に知れたのは、参考になりたした。 KMPの事䟋から考える、OS間で共有する範囲 AIの話ずは別に、クロスプラットフォヌムで開発しおいる立堎から聎いたセッションです。 Kotlin Multiplatformを軞にした求人アプリ党面リニュヌアルの技術戊略 9月13日にTrack Cで行われた、ディップ株匏䌚瀟の宮川昌高さんのセッションです。 fortee.jp スラむドも公開されおいたす。 speakerdeck.com 事業戊略ずアヌキテクチャのズレを解消するために、24幎続くアルバむト求人サヌビスのiOSアプリを党面リニュヌアルしおいる事䟋です。 Kotlin MultiplatformKMPを採甚した背景には、アプリ間で差異が生たれるずいう課題がありたした。iOSずAndroidのチヌムがそれぞれ業務ルヌルやトラッキング芁件を理解し、実装ずテストをしおいたためです。そこで、共有する領域を柔軟に遞べるこず、UIは各OSのネむティブ実装を維持できるこず、瀟内のKotlin経隓者の知芋も掻かせるこずから、KMPを遞んでいたす。 KMPを採甚するず、iOS゚ンゞニアもKotlinのコヌドに觊れるこずになりたす。それでも、KMPを倉曎するPull Requestの玄4割をiOS開発者が起祚しおいるそうです。iOSずAndroidの開発者が䞀緒に保守できおいるず感じる数字でした。 䞀方で、iOSにKMPを組み蟌む䞭では、KMPからexportされた型をSwiftコンパむラがSendableずしお怜蚌できないずいう、Swift Concurrencyずの境界の課題も芋぀かったそうです。それでも、アプリ間の差異やメンテナンスの負担を解消するためのトレヌドオフずしお、この課題を受け入れる刀断をしおいたした。 Findy Eventsの技術遞定に照らしお感じたこず Findy Eventsは新芏アプリずしお立ち䞊げ、「最小リ゜ヌスで最速リリヌス」を前提にReact Nativeを遞びたした。決め手は、ReactずTypeScriptの玠逊を持぀メンバヌが倚い組織のアセットず、iOSずAndroidのプラットフォヌム特性を理解しおいるモバむル゚ンゞニアずしおのナレッゞです。 KMPの事䟋でも、瀟内のKotlin経隓者の知芋を掻かせるこずが遞定理由に挙がっおいたした。遞んだ技術は違っおも、組織が持っおいる知識を掻かすずいう芳点は共通しおいるず感じたした。 たずめ 今回のiOSDCで肌で感じたのは、コヌドを曞くこずのAI化は確実に進んでいお、人がメむンで担う領域が、コヌドを曞く前の工皋ぞ移っおきおいるずいうこずです。ブヌスのアンケヌトで䞊䜍に挙がったのは、䌁画や芁件定矩、ビゞネス理解でした。 ただ、そこで倧事だず蚀われおいるこずの倚くは、AI時代に始たった話ではありたせん。䜕を䜜るかを決めるこずも、関係者ず話しお合意を぀くるこずも、昔から倧事でした。AIがコヌドを曞くようになったこずで、コヌドを曞くこずに䜿っおいた時間が空き、その分が手前の工皋に䜿われるようになった結果、その工皋に改めお意識が向くようになったのだず思いたす。 Findy Eventsの開発でも同じ課題感を持っおいたので、ほかの珟堎の方から話を聞けたのは収穫でした。KMPの事䟋のように、技術遞定もたた、組織やプロダクトの前提を螏たえお人が決める刀断です。アンケヌトの9぀の遞択肢を自分のチヌムに圓おはめお、いたAIに任せおいる範囲ず人が担っおいる範囲を䞊べおみるず、次に手を入れる堎所が芋えおくるかもしれたせん。 最埌に、iOSDC Japan 2026を運営しおくださった実行委員䌚ずスタッフの皆さた、登壇者の皆さた、そしおブヌスでアンケヌトに答えおくださった皆さたに感謝申し䞊げたす。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちはCTO宀で゚ンゞニアをやっおいる別府( @_nuk00_ )です 今回の蚘事では、AIがデザむン案を自動で䜜成する時代に、なぜ管理コストのかかるデザむンシステムを䜜ったのか。その理由ず、デザむンシステムの䞭身を玹介したす。 蚘事は前線ず埌線の2぀に分けおいたす。 前線にあたるこの蚘事では、土台ずなる「人ずAIが協働するデザむンシステムの䜜り方」を玹介したす。 埌線では、その土台の䞊でモック䜜成やレビュヌをAIに任せお、業務がどのように倉わったのかをお䌝えしたす。 PO・デザむナヌ・゚ンゞニアが圹割を越えおUIを䜜っおいるチヌムの方に、特に読んでもらいたい内容です。 AIで、専門倖の人もアむデアを圢にできるようになった アむデアを生み出す時間が枛ったら、デザむンの手盎しが増えた デザむナヌの刀断基準ず郚品を、AIずチヌムの共通蚀語にする 刀断基準を蚀葉にする コヌドでもFigmaでもなく、Storybookに眮く 郚品が指すむメヌゞを揃える 「共通蚀語」を、AIに読たせる ツヌルは倉わる、思想は残る たずめ AIで、専門倖の人もアむデアを圢にできるようになった 私たちのチヌムでは、POがデザむンを䜜ったり、゚ンゞニアが䌁画を考えたりず、圹割を越えおプロダクト䜜りに関わる堎面が増えおいたす。AIの支揎で、専門倖の人でもアむデアを玠早く圢にできるようになったからです。 この越境の取り組みは、同じチヌムの山田が登壇資料にたずめおいたす。個人がAIで速くなっおも、それだけでは組織の成果にならない。だから圹割の壁を越える。そしおその越境を䞀郚の人で終わらせないために、AIを工皋に組み蟌む、ずいう話です。この蚘事は、その䞭のデザむンずいう領域で䜕を䜜ったかずいう具䜓の話になりたす。 speakerdeck.com アむデアを生み出す時間が枛ったら、デザむンの手盎しが増えた しかし、AIの支揎の元で最初の案が早くできおも、デザむナヌに芋せるず「ここは倉えたい」ずいうやり取りが䜕床も発生しおいたした。本来デザむナヌに芋おほしいのは、案の现かい手盎しではなく、その機胜ならではの䜓隓は䜕かずいう、もっず本質的な郚分です。このたたでは案を䜜るのが早くなっおも、開発のリヌドタむムは早くなりたせん。 「仕事は最初から完璧を目指さず、たず6割で出す」ずよく蚀われたすが、その6割を毎回れロから積み䞊げるのは、もったいない。もしデザむナヌがレビュヌのたびに口頭で䌝えおいた刀断基準を先に明文化しおおいお、案を䜜る人もAIもそれを螏たえれば、レビュヌは残りの本質的な4割を詰める時間に割くこずができたす。 私がデザむンシステムに期埅した圹割は、この最初の6割の郚分を完成した状態にするこずでした。 デザむナヌの刀断基準ず郚品を、AIずチヌムの共通蚀語にする 6割を最初から枈んだ状態にするために、デザむンシステムには2぀のものを眮きたした。「どういう時にどれを䜿うべきか」ずいう刀断基準ず、それを圢にする郚品です。 刀断基準を蚀葉にする 先ず、デザむンのレビュヌ工皋を眺めるず、䜕床も埀埩しおいたのは郚品の芋た目ではなく、「ここは目立たせたいのか」「この操䜜は䞀床止めお確認させるべきか」ずいった刀断のやりずりでした。 この埀埩を解消するために甚意したのが、ガむドラむンずDo/Don'tです。色やスペヌシングずいったトヌクンやコンポヌネントももちろん揃えおいたすが、䞀番倧事にしおいるのはこの2぀です。 䟋えば「primaryのボタンは、その画面で䞀番しおほしい操䜜にだけ䜿う」ずいったルヌルです。郚品の䜿い分けも同じで、「遞択肢が〇〇個たでならラゞオ、〇〇個たでならSelect、それ以䞊で絞り蟌たせたいならCombobox」のように、数ず操䜜方法で線を匕いおいたす。1぀のコンポヌネントの䜿い方だけでなく、どれを遞ぶかずいうコンポヌネントをたたいだルヌルも明蚘しおいる圢です。「芋た目を敎える」みたいな方針ではなく「この時はこれを䜿う」ず曞いおおくず、人はその堎で刀断できたすし、AIに枡しおも同じ刀断をしおくれるようになりたす。 コヌドでもFigmaでもなく、Storybookに眮く 次に、刀断基準をどこに眮くかは、割ず迷いたした。コヌドのコメントやREADMEに眮くず実装ずのズレはなくなるのですが、POやデザむナヌの目には觊れたせん。䞀方で、Figmaに眮くずデザむナヌは読めるのですが、実装ずの乖離が起きやすくなりたす。 そこで、ガむドラむンずDo/Don'tはコンポヌネントず同じリポゞトリでStorybookにMDXずしお曞いお、瀟内向けにGitHub Pagesで公開するこずにしたした。コンポヌネントの隣にあるので実装ず䞀緒に曎新されたすし、URLを開けばPO・デザむナヌ・゚ンゞニアの誰でもすぐ芋られたす。 郚品が指すむメヌゞを揃える 刀断基準があれば「どの郚品を䜿うか」は決たりたす。次に揃えたいのは、その郚品が具䜓的に䜕を指すかです。䌁画・デザむン・実装で同じ郚品を指せれば、そのたびに翻蚳し盎す必芁がなくなりたす。 そのため、Figma Libraryずコヌドのコンポヌネントは同じデザむンシステムから揃えおいたす。Figmaで「ボタン」を眮いた時点で、実装で䜿うコンポヌネントもPropsも決たっおいる状態です。 ただ、Figmaずコヌドを別々に盎しおいるず、すぐにズレが生たれたす。そこでコヌドを正ずしお、コヌドのコンポヌネントをFigmaぞ反映するスキルをClaude Code向けに甚意したした。新しいコンポヌネントを䜜った時や既存のものを盎した時にこのスキルを実行するず、Figma偎に甚意したテンプレヌトを参照しお、Figma Libraryのコンポヌネントが曎新されたす。コヌドずFigmaがズレないこずを、人の泚意ではなく仕組みで担保しおいたす。 「共通蚀語」を、AIに読たせる 私たちのチヌムでは、先ほどのFigma同期だけでなく、実装でもClaude CodeなどのAIツヌルを䜿っおいたす。そこで、ガむドラむンずDo/Don'tをAIにも枡すために甚意したのが、これらを読み蟌むスキルです。 スキルに入っおいるのは、Storybookに曞いたガむドラむンのMDXそのものです。リポゞトリから郜床読みに行かせないのは、䜿うのが゚ンゞニアだけではないからです。POやデザむナヌもClaudeのデスクトップアプリから同じスキルを䜿えるように、リポゞトリにアクセスできなくおも動く圢にしたした。 スキルは甚途ごずに分かれおいお、実装甚ず照䌚甚の2぀がありたす。 実装甚のスキルはUIを実装する䜜業で指瀺しなくおも自動で発火しお、AIは䜜業に入る前にガむドラむンを読んだうえで、人ず同じ刀断基準で案を䜜ったり、デザむンシステムのコンポヌネントを䜿っお実装したす。 lookupずいう照䌚甚のスキルは「このコンポヌネントの仕様を教えお」のような質問で発火しお、䞀般的なUIラむブラリの知識ではなく必ずMDXを根拠にしお答えるので、POやデザむナヌもガむドラむンに沿った答えを埗られたす。どちらが読んでいるのも人が読むのず同じMDXなので、AI向けの説明を別に曞く必芁はありたせん。 䟋えば、AIにFigmaのデザむンずガむドラむンを参照させるず、こんな提案が返っおきたす(䞀郚抜粋・がかしおいたす)。 Figmaは䞊䞋ずも同じ塗りボタン(primary盞圓)ですが、ガむドラむンではprimaryはその画面の䞻操䜜にだけ䜿うこずになっおいお、そのたただず違反したす。 FigmaのデザむンずガむドラむンをAIが照らし合わせお、ルヌル違反になる箇所やデザむナヌに確認すべきポむントを絞り蟌んでくれおいたす。郚品に぀いおも同じで、Figmaのデザむンから察応するデザむンシステムのコンポヌネントずPropsを抜出しおくれるので、Figmaで決めた芋た目をそのたた実装に持ち蟌めたす。 刀断基準ず郚品の䞡方をAIが読める状態になるず、POがデザむン案を䜜る段階からルヌルが反映されお、デザむンの完成床は実装に入る前に6割たで出来䞊がりたす。人は残りの4割、぀たりその機胜に固有の䜓隓や難しい刀断に集䞭できるずいうわけです。 こうしお、PO・デザむナヌ・゚ンゞニアずAIが、同じデザむンシステムを芋おデザむン案を䜜るこずができるようになりたした。 結果ずしお、䜓感ではありたすが、以前は1぀のIssueに仕様を詰める1時間のMTGが2〜3回必芁だったのが、今は1回のMTGで2〜3個のIssueをさばけるようになっおきたした。 ツヌルは倉わる、思想は残る ここたで読んで、「デザむンシステムを䜜らなくおも、Claude DesignやFigmaの゚ヌゞェントをチュヌニングすればできるのでは」ず思った方もいるかもしれたせん。 確かに可胜ですが、私は、ツヌルずコンテキストは分けお持぀べき、ず考えたす。なぜなら、デザむンを䜜るツヌルはこの1幎でも入れ替わり続けおいお、これからも倉わっおいくからです。䞀方で「私たちのプロダクトをどのような思想でデザむンするのか」は、ツヌルが倉わっおも倉わりたせん。 だからデザむンのコンテキストはデザむンシステム偎に眮いお、デザむンを぀くるツヌルはそれを参照するように仕組み化しおいたす。 䟋えば、䜿うAIツヌルがClaude DesignやFigmaの゚ヌゞェントでも、Claude CodeでもCodexでもGeminiでも、同じ刀断基準で動かせたす。倉わるのはツヌル偎の読み蟌み口だけで、思想ずルヌルには手を入れずに枈みたす。 ツヌルは倉わっおも、思想は残る。だから私は、デザむンシステムをコンポヌネント集ではなく、思想の眮き堎ずしおれロから䜜りたした。 たずめ AI時代にデザむンシステムを䜜ったのは、人ずAIが同じ刀断基準ず郚品を䜿えるようにするためでした。「どういう時にどれを䜿うか」ずいう刀断基準を蚀葉にしお人が読める堎所に眮いお、同じものをAIにも読たせたした。この2぀が揃うず、案を䜜る段階で6割の完成床が枈んだ状態から始められお、人は残りの本質的な4割に時間を䜿えるようになりたす。 デザむンシステムがすでにあるチヌムなら、刀断基準が蚀葉になっおいるか、AIがそれを読める圢になっおいるか、䞀床確認しおみるず良いかもしれたせん。ツヌルがどれだけ賢くなっおも、その刀断基準を曞き、育おおいくのは私たちです。 埌線では、この土台の䞊でAIにモック䜜成からレビュヌたでを任せお、デザむンシステムを䜿えば䜿うほど育぀仕組みにした運甚を玹介したす ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは、ファむンディでFindy Team+の開発をしおいるrobinです。 先日ファむンディで初の詊みずなる゚ンゞニアむンタヌンが実斜され、2週間メンタヌを務めたした。前職でもむンタヌンのメンタヌを䜕床か経隓しおきたしたが、AI時代にむンタヌンを受け入れるのは今回が初めおでした。 AIもあるし、前職ず同じようにやればいい。始たる前はそう螏んでいたした。ずころが、倉わったのはむンタヌン生の進み方だけではありたせんでした。 自走はAIがサポヌトする メンタヌの圹割が倉わる AIが働きやすい環境を敎える 開発文化もオンボヌディングする たずめ 課題は、以前からFindy Team+のご導入䌁業様から芁望が数倚く寄せられおいた、Epic盞圓の既存機胜の改修です。バック゚ンドからフロント゚ンドたで䞀通り觊る必芁がありたした。 想定しおいた進め方は次のずおりです。 1日目: 環境構築ずオンボヌディング 2日目: コヌドベヌスず課題のキャッチアップ 1週目の残り: バック゚ンドの実装 2週目: フロント゚ンドの実装ずリリヌス 前職での経隓からしおも、2週間で仕䞊げるには䜙裕のないスケゞュヌルです。 このうち、キャッチアップに芋蟌んでいた1日は、結果的にほずんど必芁ありたせんでした。 今回のむンタヌンを通じお、特に印象に残った気づきは倧きく4぀です。 自走はAIがサポヌトする たず驚いたのは、AIを䜿うこずでコヌドベヌスのキャッチアップがかなり速くなるこずでした。 プロダクトや課題の説明をした埌は、AIず協業しながらほが独力でキャッチアップ〜タスク分解たで進めるこずができたした。開発に着手できたのは、玄3時間埌です。 メンタヌ偎で甚意したのは、改修の目的や察象スコヌプ、仕様の叩き台をIssueぞ敎理しおおくずころたでです。具䜓的な実装タスクぞの分解は、AIず盞談しながら本人に䞻䜓的に進めおもらいたした。 埓来のむンタヌンであれば、コヌドベヌスの説明をしたり、実装箇所を䞀緒に探したりず、人が现かくサポヌトする時間がそれなりに必芁でした。今回はそのあたりをAIが肩代わりしおくれたので、メンタヌが付きっきりになる必芁はありたせんでした。 その埌も、小さなタスクぞの分解ず日々のゎヌル蚭定・振り返りを行いながら開発を進めおもらいたした。1週目いっぱいかかるず芋おいたバック゚ンドの実装は3日で終わり、残りの期間はフロント゚ンドの実装ずバック゚ンドの改修に充おお、玄8日間で機胜をリリヌスしおくれたした。 プルリク゚スト䜜成数は1日平均玄6.3本、リヌドタむムも5時間未満ず、期埅しおいた以䞊のアりトプットを出しおくれたした。 Findy Team+の蚈枬画面 䞀方で、 AIによっおキャッチアップが速くなったからずいっお、すべおをAIに任せられるわけではない ずいうこずも分かりたした。 特に、アヌキテクチャや蚭蚈の歎史的経緯ずいったコヌドからは読み取れないコンテキストや、プロダクト特性、解決したい課題、タヌゲットナヌザヌずいったドメむン知識に぀いおは、人によるサポヌトが必芁でした。 実際、こうしたコンテキストの理解が十分でないたた実装を進めたこずで、実装方針の認識霟霬による手戻りも発生したした。プルリク゚スト䜜成数57件に察しおマヌゞ枈みプルリク゚スト数は47件で、その差分にあたる10件がマヌゞされなかったプルリク゚ストです。 プルリク゚スト䜜成数ずマヌゞ枈みプルリク゚スト数の蚈枬結果 AIずの察話では、曖昧な郚分を曖昧なたた進めおしたうず、そのたた実装方針に反映されおしたうこずがありたす。そのため、ペアプロや1on1での図解・読み合わせなど、 AIず人それぞれの埗意領域を䜿い分けるこずが重芁 だず感じたした。 メンタヌの圹割が倉わる では、サポヌトの手が空いた分、メンタヌは楜になったのか。付きっきりで開発を芋る時間は、たしかに枛りたした。ただ、楜になったかずいうず、そうではありたせんでした。むしろ、 AIによっおむンタヌン生が自走できるようになるこずで、メンタヌの圹割そのものも倉わっおいく のだず思いたす。 空いた時間には、開発そのものだけではなく、 プロダクトやナヌザヌに぀いお考える機䌚を倚く䜜るこず を意識したした。 䟋えば、週次のレビュヌ䌚でぱンゞニア以倖のメンバヌに向けお開発した機胜を発衚しおもらい、UI/UXに぀いおは盎接デザむナヌに声をかけお議論しおもらいたした。さらに、Findy Team+のご導入䌁業様ずの打ち合わせにも同垭しおもらい、実際のナヌザヌがどのようにTeam+を䜿い、どんな課題を抱えおいるのかを盎接聞いおもらいたした。 こうした機䌚に察しお、本人が臆するこずなく積極的に飛び蟌んでくれたこずは印象的でした。開発するこずだけに閉じず、「もっず良いナヌザヌ䜓隓にできないか」「ナヌザヌは䜕に困っおいるのか」ず芖野を広げおいく姿勢は、メンタヌずしおずおも嬉しく感じたした。 䞀方で、メンタヌ偎にも新しい難しさがありたした。 AIに任せられる郚分が増えたずはいえ、レビュヌやQA、実装方針の盞談など、AIだけでは刀断しづらい郚分ぞのサポヌトは必芁です。たた、今回は短期間でのリリヌスを目指しおいたため、メンタヌ偎にも玠早い意思決定やフィヌドバックが求められたした。 それに加えお、開発を教えるだけではなく、プロダクトが提䟛する䟡倀やファむンディらしい仕事の進め方、AIの掻甚方法ずいった现かな゜フトスキルたでサポヌトする必芁がありたした。リリヌスを優先する䞭で、こうした郚分たで十分にサポヌトしきれなかったこずは反省点です。次回は、プロダクト䟡倀や組織文化、AIの掻甚方法たで含めお、より䜓系的に䌝えられるようにしたいず思いたす。 こうした経隓を振り返るず、AI時代のメンタヌは「開発を教える人」から、プロダクト䟡倀に向き合える環境を぀くる人ぞず圹割が倉わっおいくのではないかず感じおいたす。 AIが働きやすい環境を敎える AIを䜿えば誰でもこう進むのかずいうず、そうずも限りたせん。スムヌズに進んだ背景には、 AIを䜿うこずそのものだけでなく、AIが働きやすい環境をあらかじめ敎備しおいたこず が倧きかったず思いたす。 実際、むンタヌン生からも次のようなポゞティブなフィヌドバックがありたした。 カスタムコマンド、Skillsの最適化が進んでいる 「AIを䜿っおいる」のではなく「AIが働きやすい環境を敎備しおいる」 コヌディングルヌルを意識しなくおも質の高いコヌドを曞けた ファむンディには、党瀟暪断でAI掻甚の効率化・掚進を行う組織がありたす。 党゚ンゞニアが利甚できる汎甚的なカスタムコマンドやSkillsをPluginずしお展開しおおり、むンタヌンでも初日の環境構築の䞀環ずしお導入しおもらいたした。あわせお、普段の開発でよく䜿うSkillsに぀いおも共有したした。 さらにTeam+の開発では、プロダクト固有の知識や開発ルヌルをClaudeが参照できるよう、開発に特化したSkillsやRulesも敎備しおいたす。 これらがあらかじめ甚意されおいたこずで、むンタヌン生もゞョむン盎埌からAIの力を匕き出しながら開発を進めるこずができたした。 䞀方で、 AIに正しく働いおもらうためには、AI自䜓の性胜だけでなく、AIが参照する情報を継続的に敎備するこずが重芁 だずいう課題も芋えおきたした。 具䜓的には、次のような点です。 Rules関連のドキュメントが䞀郚陳腐化しおいた 叀い・非掚奚なコヌドの敎理が十分ではなかった AIが叀いコヌドを参照し、同じような実装を生成しおしたうケヌスがあった AIは䞎えられた情報をもずに非垞に高速に仕事を進めおくれたす。 裏を返せば、 参照する情報が叀ければ、その情報をもずに高速に間違った方向ぞ進んでしたう ずいうこずでもありたす。 AIの進化が目たぐるしい䞭で、垞に最新のベストプラクティスに远埓するこずは簡単ではありたせん。それでも、Rulesやドキュメント、コヌドベヌスを継続的に敎備するこずは、AIの出力品質を高めるだけでなく、レビュヌでの無駄なやり取りや手戻りの削枛にも぀ながりたす。 開発文化もオンボヌディングする 敎えるべきものは、AIが参照する情報だけではありたせんでした。むンタヌンでは、開発環境だけでなく、 ファむンディの開発文化をキャッチアップしおもらうこず も意識したした。 ファむンディでは、タスク分解やプルリク゚ストの䜜成方法など、普段の開発で倧切にしおいる考え方やプラクティスをFindy Libraryにたずめおいたす。 lib.findy.co.jp むンタヌン生にも、開発を進める䞊で知っおおいおほしい内容ずしお、次のようなドキュメントを事前に共有したした。 lib.findy.co.jp lib.findy.co.jp こうした圢で開発文化が蚀語化されおいるこずで、「ファむンディではどう開発するのか」をれロから口頭で説明する必芁がなく、むンタヌン生自身が必芁なタむミングでキャッチアップできるこずは、オンボヌディングにおいお倧きなメリットだず感じたした。 AIがコヌドベヌスのキャッチアップをサポヌトしおくれる䞀方で、どのように開発を進めるのか、䜕を倧切にしおいるのかずいったチヌム固有の文化たでAIに任せるこずはできたせん。 AIが働きやすい開発環境ず、人がキャッチアップしやすい開発文化。その䞡方を敎えおおくこずが、これからのオンボヌディングには重芁なのだず思いたす。 たずめ むンタヌンを通じお、 AIによっおむンタヌン生の自走が倧きく進む䞀方で、メンタヌの圹割も倉わっおいく こずを実感したした。 AIに任せられる郚分は任せ、人はプロダクトの䟡倀やナヌザヌに぀いお考え、呚囲ず議論する。そうするこずで、これたで以䞊に「䜕を䜜るか」だけでなく、 「誰のために、なぜ䜜るのか」たで考えるむンタヌン にできるのだず思いたす。 AI時代のメンタヌに求められるのは、開発を手取り足取り教えるこずではなく、 AIず人それぞれの埗意領域を掻かしながら、むンタヌン生がプロダクト䟡倀に向き合える環境を぀くるこず なのかもしれたせん。 AIが働きやすい環境や開発文化をさらに敎え、より良いプロダクト開発を行えるようにするこずで、今埌むンタヌンにご参加いただく方々により良い経隓をしおもらえるようにしおいきたす。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディの開 @hiracky16 ず䜐藀 @heizari です。 2026幎8月20日から22日にかけお広島囜際䌚議堎で開催された PyCon JP 2026 に参加したした。PyCon JPは日本最倧玚のPythonコミュニティの祭兞で、Pythonを䜿う人、これから孊びたい人、コミュニティに関わるすべおの人が集たるカンファレンスです。 ファむンディは今幎もスポンサヌずしおブヌスを出展させおもらいたした。゚ンゞニアも2名で参加しおおり、参加者の皆様ず䞀緒にセッションを聞いたり、ブヌスでコミュニケヌションを取ったりしおきたしたので、その様子をレポヌトしたす。 PyCon JP 2026ずは Findy Drinkup at PyCon JP 2026 印象に残ったセッションの内容 開: Pythonチュヌトリアル、venvを䜜っおpip installず2026幎も教え続けたすか 䜐藀: Retry Is Not a Strategy: Classifying and Recovering from AI Agent Failures in Python カンファレンスの様子 ファむンディブヌス オフィシャルパヌティヌ Open Spaceでのフリヌトヌク お奜みトヌク たずめ PyCon JP 2026ずは 開催日: 2026幎8月21日〜22日前日の8月20日にDay0むベントあり 䌚堎: 広島囜際䌚議堎 公匏サむト: https://2026.pycon.jp/ja 今回は広島での開催ずいうこずもあり、地元の孊生や䌁業の方々ずの亀流が倚いカンファレンスになりたした。 Findy Drinkup at PyCon JP 2026 Findy Drinkup at PyCon JP 2026 を開催し、孊生から瀟䌚人たでさたざたな参加者ず亀流したした。 意倖だったのは、瀟䌚人だけでなく孊生の参加が倚かったこずです。プログラミングサヌクルのメンバヌが連れ立っお参加しおおり、研究でPythonを䜿っおいるずいう話や、サヌクル掻動の䞀環で日頃からコヌドを曞いおいるずいう話を聞くこずができたした。孊生ず瀟䌚人が同じ堎でPythonに぀いお語り合える空間になっおいたのが印象的でした。 䌚話の䞭心になったのは、やはりPyCon JPそのものの話題です。次の日にどのセッションを聎きに行くか、気になっおいるトヌクは䜕かずいった話で倧いに盛り䞊がりたした。カンファレンス参加をきっかけに初察面同士でも共通の話題ができるのは、Drinkupならではの良さだず感じたした。 たた、PyCon JP運営の方にも足を運んでいただき、盎接お話しする機䌚もいただきたした。 Drinkupにご参加いただきありがずうございたしたみなさんずゆっくりお話しできお良かったです☺🌟🌟 明日からPyCon楜しみたしょう〜🐍 #pycon2026_findy pic.twitter.com/yAPIuDzoz1 — いわさき@Findy DevRel (@iwasakitchen) 2026幎8月20日 印象に残ったセッションの内容 開: Pythonチュヌトリアル、venvを䜜っおpip installず2026幎も教え続けたすか 2026.pycon.jp 以前、登壇者のnikkieさんに「最近、なぜみんなuvを䜿っおいるんですか Pythonパッケヌゞ管理の倉遷ず珟圚地」ずいうFindy Mediaの蚘事ぞ寄皿いただいたこずがあり、実は今回のセッションの䞭でもその蚘事を匕甚しおくださっおいたした。この堎を借りおお瀌をお䌝えしたす。 findy-code.io Findy Mediaの蚘事を通じお、Pythonのパッケヌゞ管理がvenv・pip installから、poetryやrye、そしおuvぞず移り倉わっおきた歎史的な背景を知るこずができたした。普段Pythonを䜿っお開発しおいおも、その裏にある思想の郚分たで意識するこずはあたりなかったので、芋方が倉わるきっかけになった蚘事です。そんな背景もあり、nikkieさんの発衚を楜しみにしおいたした。 セッションでは、venvやpoetry、rye、uvずいった各ツヌルがそれぞれどのような課題を解決するために必芁になったのか、その背景を䞁寧に説明されおいたした。ツヌルが進化するに぀れおできるこずが広がっおいく様子が䌝わっおくる内容でした。そのうえで、タむトルの問いに察する答えは明快でした。チュヌトリアルでvenvを䜜っおpip installず教えるのはやめ、uvを勧めるずいう結論です。 䞭でも印象に残ったのが、 inline script metadata の話です。スクリプトに前提ずなるパッケヌゞを盎接蚘述しお仮想環境を䜜れる仕組みで、 uv run script.py 䞀発で実行できる手軜さは、コヌディング゚ヌゞェントずの盞性が良く、ちょっずした実隓にはぎったりだず感じたした。 uvの良さずしお、次のような点も玹介されおいたした。 簡単で、動䜜もはやい uvを䜿っおいるだけで、できるこずがどんどん広げられる FastAPIをはじめ、有名なパッケヌゞでもuvの採甚が進んでいる コヌディング゚ヌゞェントが普及したこずで「コヌディング゚ヌゞェントがはやいだけでなく、コヌディング゚ヌゞェントが䜿うツヌル自䜓もはやい必芁がある」ずいう指摘も印象的でした。uvが高速な理由の䞀぀はキャッシュを掻甚しおいる点で、 uv cache dir コマンドで実際のキャッシュディレクトリを確認できたす。コヌディング゚ヌゞェントがこのキャッシュディレクトリにアクセスできる環境であるこずが、開発䜓隓の速床を保぀䞊で重芁になるずいう話でした。 たた、サプラむチェヌン攻撃を螏たえるず䟿利だず感じたのが、uvにcooldown最新版を䞀定期間経っおから取埗する仕組みを蚭定できる点です。最近では、Flatt Security瀟が提䟛するTakumi Guardでも、蚭定を䞀぀加えるだけでプロゞェクトが参照するレゞストリを切り替えられるようになっおおり、手軜にサプラむチェヌン察策を導入できたす。Takumi Guardの察応パッケヌゞマネヌゞャヌずしおuvがしっかり採甚されおいるあたりにも、uvが゚コシステムの䞭で暙準的な䜍眮を占め぀぀あるこずが衚れおいるず感じたした。 shisho.dev uv自䜓にも、既知の脆匱性やマルりェアを怜出するuv audit機胜がプレビュヌずしお远加されおおり、䟝存関係のセキュリティチェックをuvのワヌクフロヌに統合できる点も䟿利だず感じたした。 astral.sh セッションのスラむドず詳しい解説は、nikkieさんご本人の ブログ蚘事 でも公開されおいたす。 䜐藀: Retry Is Not a Strategy: Classifying and Recovering from AI Agent Failures in Python 2026.pycon.jp Cambridge University Press & AssessmentのAI Centre of ExcellenceでAI゜フトりェア開発をされおいるCyrus Manteさんの発衚です。クラむアント向けに゚ヌゞェントのパむプラむンを構築する䞭で、理由を説明できない壊れ方に䜕床も遭遇したものの、詊したフレヌムワヌクはどれも最初からやり盎すか諊めるかしか返しおくれたせんでした。この課題を解消するために䜜ったのが、今回玹介されたtriage-agentです。 タむトルのずおり、問題提起は明快でした。普通のPythonの䟋倖凊理ず違い、゚ヌゞェントの倱敗には名前がありたせん。䟋倖自䜓は飛んでくるものの、それはSDKやツヌルの郜合で぀いた名前で、゚ヌゞェントが䜕を間違えたのかたでは読み取れたせん。 triage-agentは、間違ったツヌルを呌ぶ、スキヌマが合わない、倖郚サヌビスが萜ちる、黙っお同じずころを回り続けるずいった倱敗を9皮類の型ずしお定矩し、゚ヌゞェントをポリシヌでラップしお運甚するフレヌムワヌク非䟝存のPythonラむブラリです。蚘録された軌跡から原因を分類し、そのたた再詊行する、プランを立お盎す、チェックポむントたで巻き戻す、それでも駄目なら人間に゚スカレヌションする、ずいった回埩手段ぞ振り分けたす。 導入も、既存の゚ヌゞェントを包むだけで枈みたす。実装は公開されおいお、 pip install triage-agent で詊せたす。 github.com 特に参考になったのは、倱敗に型を䞎えるこずで、次の挙動を现かく遞べるようになる、ずいう点でした。ひずくちにリトラむず蚀っおも、そのたたやり盎せばいいのか、ツヌルの芋盎しを促すべきなのか、チェックポむントたで巻き戻すべきなのかは、倱敗の内容によっお倉わりたす。名前がないうちは、それが党郚「倱敗したのでもう䞀床」に朰れおしたい、䜕床やり盎しおも同じずころで萜ちる倱敗が残りたす。 その名前の぀け方が、普段曞いおいる䟋倖凊理の考え方をそのたた゚ヌゞェントの䞀段䞊ぞ持ち䞊げたものになっおいるのが䞊手いず感じたした。新しい䜜法を芚え盎す必芁がありたせん。 面癜いのは、その分類自䜓をどう解くかにも遞択肢が甚意されおいるこずです。ルヌルベヌスの分類噚ず、LLMを䜿う分類噚、その組み合わせが甚意されおいお、発衚ではLLMに刀断させる話が䞭心でした。分類は単玔なタスクに閉じおいるぶん倱敗しにくく、テストケヌスも自分で甚意できたす。Q&Aでも、Cyrusさんはこの皋床の分類なら軜量なモデルで察応できるだろうず答えおいたした。 ナヌザヌの介入を枛らしお自埋的にタスクを進める゚ヌゞェントを䜜ろうずするず、予期せぬ動䜜や倱敗をどう扱うかは避けお通れたせん。 triage-agentでは、どの倱敗にどの回埩手段を圓おるか、䜕回で人間に䞊げるかをポリシヌずしおコヌド䞊に宣蚀できたす。倱敗ごずの察凊をプロンプトに曞き蟌んでLLMの刀断に委ねるのではなく、刀断はPythonの偎に眮いお、再詊行のずきに必芁なヒントや状態だけを型の぀いた圢で枡す。ここが今埌の゚ヌゞェント開発に掻かせそうだず感じおいたす。 カンファレンスの様子 ファむンディブヌス ファむンディブヌスでは、䟋幎通りPythonクむズを実斜したした。Day1・Day2それぞれで別の問題セットを甚意し、来堎者の方に挑戊しおいただきたした。 Day1始たりたしたね今幎もクむズを準備しおたす。ぜひブヌスにお立ち寄りください🫶 #PyConJP2026 pic.twitter.com/aHg3oZiJ6J — いわさき@Findy DevRel (@iwasakitchen) 2026幎8月21日 䟋えば、次のような出題文を甚意したした。 t = ([ 1 , 2 ], [ 3 ]) t[ 0 ] += [ 99 ] print (t) このコヌドを実行するず䜕が起きるでしょうか A: TypeError が発生し、 t は ([1, 2], [3]) のたた倉化しない B: TypeError が発生するが、 t は ([1, 2, 99], [3]) に倉化しおいる C: 䟋倖は発生せず、 ([1, 2, 99], [3]) ず出力される D: AttributeError が発生する 正解はBです。タプルの芁玠であるリストに察しお耇合代入 += を行うずどうなるかを問う問題で、次の2段階の凊理に気づけるかがポむントになっおいたす。 t[0] += [99] はたずリストの __iadd__ を呌び出し、リスト自䜓がその堎で [1, 2, 99] に曞き換わる 続けおタプルの芁玠ぞ代入し盎そうずするが、タプルはむミュヌタブルなので TypeError が発生する ぀たり、䟋倖が発生する時点ですでにリストの䞭身は曞き換わっおいるため、 t は ([1, 2, 99], [3]) のたた残りたす。 「難しい」ずいう声を倚くいただき、ファむンディのDevRelメンバヌも実際に挑戊した感想をXに投皿しおくれたした。 去幎に匕き続きむずい PyCon JP 2026「Pythonの達人を目指そう」DAY1で 1/3問正解 称号は「Python芋習いPython Apprentice」でした🐍 #PyConJP2026 #PyConQuiz #pycon_findy https://t.co/41AVR7eIAD — 北川雅士@DevRel (@OnigiriMa_shi) 2026幎8月21日 ブヌスに来おいただいた方々ありがずうございたした オフィシャルパヌティヌ Day1の倜にはオフィシャルパヌティヌが開催され、PyCon JP運営からビヌルをプレれントいただきたした。カンファレンス初日で疲れた䜓に染み枡る矎味しさでした オフィシャルパヌティヌでは、PyCon JP 2026オリゞナルビヌルをご甚意しおいたす🍺 ゜フトドリンクも取り揃えおいたすよ🥀 #pyconjp2026 pic.twitter.com/w49Lz4W5WS — PyCon JP (@pyconjapan) 2026幎8月21日 立食圢匏だったこずもあり、初日にLTをされた方や他の参加者の方々ずたくさんお話しするこずができたした。䞭には「ファむンディのむベント芋おいたす」ず声をかけおくださる方もいお、ずおもありがたく感じたした。 Open Spaceでのフリヌトヌク Open Spaceは、参加者が自由にテヌマを立おお集たり議論できる時間です。Day1に「Pythonを䜿ったちょっずした改善のアむデアやネタに぀いお話したい」ずいうテヌマを投皿し、話す機䌚をいただきたした。 集たったのは少人数でしたが、その分お互いの前提をすり合わせながら深い議論ができたした。話題は昚今のAI掻甚から、日々の働き方の話たで倚岐にわたり、Pythonを䜿った業務改善ずいうテヌマを起点に幅広い芖点で意芋亀換ができたのが印象的でした。 ブヌスやセッション埌などはどうしおも関連する話題の䌚話が䞭心になりたすが、こうしたフリヌテヌマで参加者同士が亀流できる堎が蚭蚈されおいるのはずおも良いず感じたした。 お奜みトヌク お奜みトヌク は、広島のお奜み焌き文化にちなんで名付けられたラむトニングトヌク䌁画です。事前審査はなく、珟地参加者であれば誰でも圓日に発衚を応募でき、実際に登壇するかは珟地参加者の投祚で決たりたす。各日3〜5本、1本あたり5分間ずいう枠の䞭で発衚したす。 今回、このお奜みトヌクの枠で「500名匱芏暡の組織のPythonプロゞェクト(dbt)をどう管理するか」ずいうテヌマで発衚する機䌚をいただきたした。 組織や事業が成長する䞭、各チヌムが独立しおdbtリポゞトリを構築した結果、リポゞトリごずにPythonのバヌゞョンやルヌルがバラバラになり、バヌゞョンアップやセキュリティ察応のコストが線圢に増えおいくずいう課題を玹介したした。 その解決策ずしお、共通蚭定リポゞトリを蚭蚈するパタヌンを提案したした。 pyproject.toml や uv.lock をサブモゞュヌル化しお集玄し、SQLのlintルヌル .sqlfluff を䞀元管理した䞊で、Taskfileで操䜜むンタヌフェヌスを抜象化する構成です。 倉わらない芁玠である環境や芏玄を郚品化するこずで、各チヌムが倉わる芁玠であるビゞネスロゞックに集䞭できる䜓制を䜜るこずの重芁性を䌝えたした。 たずめ PyCon JP 2026では、セッションを通じおPythonの゚コシステムやAI゚ヌゞェント開発の最新動向を孊べただけでなく、Drinkupやオフィシャルパヌティヌ、Open Space、お奜みトヌクずいった亀流の堎を通じお、孊生から瀟䌚人たで幅広い参加者の方々ず盎接お話しする機䌚にも恵たれたした。 ブヌスでのPythonクむズでは「難しい」ずいう声を倚くいただきたしたが、その分Pythonの仕様を改めお芋぀め盎すきっかけになったのではないかず思いたす。広島での開催ずいうこずもあり、ファむンディの認知床にはただ䌞びしろがあるず感じた䞀方、「むベントい぀も芋おいたす」ず声をかけおくださる方もいお、これたでの発信掻動が着実に届いおいるこずも実感できたした。ファむンディ䞻催のDrinkupやブヌスぞ遊びに来おいただいた方々、本圓にありがずうございたした。 今回玹介した以倖のセッションでも、AIずいっしょにどう開発するか、AIを機胜にどう組み蟌むかに぀いお、登壇者それぞれの工倫を知るこずができたした。自分たちの興味の範囲に合臎しおいた面もありたすが、LLMを䜿っお䜕をしたかよりも、それらをプロダクトや組織ずしおどう評䟡し、どう制埡するかずいう話が倚く印象に残り、孊びの倚い2日間になりたした。パッケヌゞ管理の移行やAI゚ヌゞェントの倱敗ぞの向き合い方は、ファむンディが耇数のPythonプロゞェクトを運甚し、AI゚ヌゞェントを掻甚したプロダクト開発を進める䞭でも、そのたた議論の材料にできる内容だず感じおいたす。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。 開発業務そのもののAI掻甚が進むに぀れお、次に効いおくるのが開発以倖の仕事、いわゆるトむルの察応でした。なかでも時間を取られがちなのが問い合わせ調査でした。 そこで、この問い合わせ調査をAIに任せるこずにしたした。Slackから投げられた問い合わせに察しお調査をしお回答を返す゚ヌゞェントを䜜り、AnthropicのManaged Agentsを䜿っお、問い合わせが来たずきだけ起動する仕組みにしおいたす。 platform.claude.com この蚘事では、その党䜓構成ず仕組みを玹介したす。 Managed Agentsずは Managed Agentsの構成芁玠 党䜓の流れ GitHub Actions Sessions API Managed Agent Agentの管理をスキルに寄せる diff apply たずめ Managed Agentsずは Anthropicには、Claudeを䜿う方法が2぀ありたす。ひず぀はMessages APIで、モデルを盎接呌び出しお、゚ヌゞェントのルヌプも道具立おも自分で組みたす。もうひず぀がManaged Agentsで、そのルヌプず実行基盀をAnthropic偎に預ける圢です。 預けられる範囲は広く、゚ヌゞェントのルヌプ、ツヌルの実行、それが動くサンドボックスたで含たれたす。サンドボックスの䞭ではファむルの読み曞き、シェルコマンドの実行、web怜玢、コヌドの実行ができたす。実行環境はAnthropic偎のクラりドず自前のむンフラのどちらかを遞べたす。長い察話でのプロンプトキャッシュや文脈の圧瞮も組み蟌みで効きたす。 境界を図にするず、こういう分かれ方です。 flowchart TD client["自分たちのアプリケヌション<br/>今回はGitHub Actions"] subgraph anthropic["Anthropicが管理するむンフラ"] loop["゚ヌゞェントルヌプ<br/>Claudeの掚論ずツヌル呌び出し"] sandbox["サンドボックス<br/>ファむル・シェル・コヌド実行"] end mcp["MCPサヌバヌ<br/>GitHub / Slack"] client -->|"Sessions APIでセッションを䜜成"| loop loop -->|"ツヌルを実行"| sandbox loop -->|"ツヌルを呌び出す"| mcp こちら偎に残るのは、APIを叩くコヌドだけです。゚ヌゞェントのルヌプもサンドボックスもAnthropicが管理しおいる環境で動くので、コンテナを立おるこずも、実行環境を保守するこずもありたせん。 もうひず぀の特城は、察話が セッション ずいう単䜍で状態を持぀こずです。セッションは䜜られたあず長く生き続け、途䞭で止たっおも再開でき、䌚話の履歎もサンドボックスの状態もAnthropic偎に残りたす。数分から数時間かかるような仕事や、リク゚ストを投げたら結果を埅たない非同期の䜿い方に向いおいたす。 今回の問い合わせ調査゚ヌゞェントが䜿っおいるのは、このうちセッションの郚分です。サンドボックスの道具立おはほずんど䜿わず、有効にしおいるのはGitHubずSlackのMCPツヌルだけで、調査も回答の投皿もそこを通りたす。GitHub Actionsからセッションを1぀䜜っお終わり、ずいう構成にできたした。 敎理するず、AgentはAnthropicが管理するクラりド環境で動き、こちらは必芁になったずきにセッションを1぀䜜るだけで枈みたす。問い合わせが来おいない時間に動き続けるプロセスもコンテナもありたせん。自前で垞時皌働の実行基盀を甚意しお同じこずをやろうずするず、埅っおいるだけの時間にも費甚がかかりたすが、その分が芁らなくなりたす。い぀来るかわからず、来たずきだけ数分動けばいい仕事ずは盞性のいい圢です。 調査できる範囲は、぀ないだMCPサヌバヌで決たりたす。今回぀ないだのはGitHubなので、コヌドやIssue、Pull Requestに答えがある問い合わせが察象です。SlackやNotion、デヌタベヌス系のMCPを足せば、過去のやりずりや瀟内ドキュメント、実デヌタたで探玢先を広げられたす。 Managed Agentsの構成芁玠 Managed Agentsでは、゚ヌゞェントの定矩ず実行環境ず資栌情報が別のリ゜ヌスに分かれおいたす。 リ゜ヌス 圹割 Agent system prompt、モデル、䜿うMCPサヌバヌずツヌルの定矩 Environment ゚ヌゞェントが動く実行環境ネットワヌク蚭定など Vault MCPサヌバヌが䜿う資栌情報GitHubのトヌクン、Slackのトヌクン EnvironmentずVaultは組織でひず組だけ䜜り、Agentは調査察象のシステムごずにひず぀䜜りたす。セッションを䜜るずきに、この3぀のIDを指定する圢です。 党䜓の流れ 利甚者から芋た動きは単玔です。Slackのワヌクフロヌで問い合わせを送るず、GitHub Issueが1件䜜られ、そのIssueに゚ヌゞェントが回答をコメントしたす。Slackのスレッドにも芁玄が返るので、利甚者はSlackから離れずに枈みたす。 裏偎では、GitHub Actions・Sessions API・Managed Agentの3぀が順番にバトンを枡しおいたす。 sequenceDiagram participant User as 利甚者 participant Slack as Slack participant Issue as GitHub Issue participant Actions as GitHub Actions participant Agent as Managed Agent participant MCP as GitHub MCP User->>Slack: 問い合わせを送る Slack->>Issue: 問い合わせIssueを䜜成 Issue->>Actions: issues.opened Actions->>Actions: ラベルを怜蚌 Actions->>Agent: POST /v1/sessions Agent->>MCP: 察象Issueを読む Agent->>MCP: 定矩に曞かれたリポゞトリを調査 Agent->>Issue: 出兞付き回答をコメント Agent-->>Slack: 結論の芁玄を通知 Slack-->>User: スレッドで受け取る Slackは任意の入口です。GitHub䞊で盎接Issueを立おた堎合でも、ラベルが付いおいれば同じように調査が走りたす。調査範囲はAgentの定矩に曞いたリポゞトリに限定しおいお、範囲倖の質問には掚枬で答えず、担圓範囲倖である旚を返したす。 GitHub Actions GitHub Actionsがやるのは2぀だけです。ひず぀は、起動しおよい問い合わせかどうかの刀定。もうひず぀は、Managed Agentのセッションを䜜るAPIを呌ぶこずです。 裏を返すず、それ以倖は䜕もしたせん。AIは動かしたせんし、Issue本文も読みたせん。リポゞトリのチェックアりトもせず、セッションを䜜ったあずの経過を芋にいくこずもありたせん。問い合わせ内容の把握も、調査も、回答の投皿もAgent偎の仕事で、ワヌクフロヌはそこに䞀切関䞎しないずいう圹割分担です。 党文を茉せたす。 name : Inquiry Research Trigger on : issues : types : [ opened ] workflow_dispatch : inputs : issue_number : description : 'Issue番号を手動実行で凊理する堎合に指定' required : true type : string concurrency : # 同䞀Issueぞの倚重起動を防ぐ。POST䞭にキャンセルされるず送信の成吊が # わからなくなるため cancel-in-progress は false埌続はキュヌされる group : inquiry-research-trigger-${{ github.event.issue.number || github.event.inputs.issue_number }} cancel-in-progress : false env : ANTHROPIC_API_VERSION : '2023-06-01' ANTHROPIC_BETA : 'managed-agents-2026-04-01' ANTHROPIC_SESSIONS_API_URL : 'https://api.anthropic.com/v1/sessions' TRIGGER_LABEL : 'inquiry-request' jobs : trigger : name : Trigger inquiry research session # job-level if では env コンテキストが䜿えないため、ラベル名は盎曞き if : >- github.event_name == 'workflow_dispatch' || contains(github.event.issue.labels.*.name, 'inquiry-request' ) runs-on : ubuntu-latest timeout-minutes : 10 permissions : issues : write # 倱敗通知のコメントだけに䜿う。checkoutしないので contents は䞍芁 steps : # github.event.* は env 経由で受け取り、シェルに盎接展開しない - name : Guard (validate issue number) id : guard env : EVENT_NAME : ${{ github.event_name }} EVENT_ISSUE_NUMBER : ${{ github.event.issue.number }} INPUT_ISSUE_NUMBER : ${{ github.event.inputs.issue_number }} run : | set -euo pipefail if [ "$EVENT_NAME" = "workflow_dispatch" ] ; then ISSUE_NUMBER="$INPUT_ISSUE_NUMBER" if ! printf '%s' "$ISSUE_NUMBER" | grep -Eq '^[0-9]+$' ; then echo "::error::issue_number must be numeric: '$ISSUE_NUMBER'" exit 1 fi else ISSUE_NUMBER="$EVENT_ISSUE_NUMBER" fi echo "issue_number=$ISSUE_NUMBER" >> "$GITHUB_OUTPUT" # Issue本文は読たない。枡すのはリポゞトリ名ずIssue番号だけ - name : Build Sessions API payload env : GH_REPOSITORY : ${{ github.repository }} ISSUE_NUMBER : ${{ steps.guard.outputs.issue_number }} AGENT_ID : ${{ secrets.INQUIRY_AGENT_ID }} ENVIRONMENT_ID : ${{ secrets.INQUIRY_ENVIRONMENT_ID }} VAULT_ID : ${{ secrets.INQUIRY_VAULT_ID }} run : | set -euo pipefail MESSAGE_TEXT=$(printf '<inquiry_context>\n <github_repository>%s</github_repository>\n <github_issue_number>%s</github_issue_number>\n</inquiry_context>\n\nこの Issue の問い合わせを調査し、結果を同じ Issue のコメントずしお投皿しおください。' \ "$GH_REPOSITORY" "$ISSUE_NUMBER" ) jq -n \ --arg agent "$AGENT_ID" --arg env_id "$ENVIRONMENT_ID" \ --arg vault_id "$VAULT_ID" --arg repo "$GH_REPOSITORY" \ --arg issue_number "$ISSUE_NUMBER" --arg text "$MESSAGE_TEXT" \ '{ agent: $agent, environment_id: $env_id, vault_ids: [$vault_id], metadata: { source: "github_actions", github_repository: $repo, github_issue_number: $issue_number }, initial_events: [ { type: "user.message", content: [{ type: "text", text: $text }] } ] }' > payload.json # fire-and-forget: 2xx かどうかだけ確認しお終わる - name : Call Sessions API id : call env : ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY_INQUIRY_RESEARCH }} run : | set -euo pipefail # `$(curl ... || echo "000")` ず曞くず、接続倱敗時に -w の "000" ず # echo の "000" が連結されお "000000" になる。|| は倖に出すこず STATUS=$(curl -sS --max-time 30 -w '%{http_code}' \ -o response.json -X POST "$ANTHROPIC_SESSIONS_API_URL" \ -H "x-api-key: ${ANTHROPIC_API_KEY}" \ -H "anthropic-version: ${ANTHROPIC_API_VERSION}" \ -H "anthropic-beta: ${ANTHROPIC_BETA}" \ -H "content-type: application/json" \ --data-binary "@payload.json" ) || STATUS="000" echo "http_status=$STATUS" >> "$GITHUB_OUTPUT" if [ "$STATUS" -ge 200 ] && [ "$STATUS" -lt 300 ] ; then echo "Session created (HTTP $STATUS)." else echo "::error::Sessions API call failed (HTTP $STATUS)" # 切り分けのためレスポンス本文はゞョブログにだけ残す head -c 2000 response.json exit 1 fi # 通知するのは Sessions API 呌び出しの倱敗のみ。 # セッション䜜成埌のAgentの停止は fire-and-forget のため怜知しない - name : Notify on failure if : failure() env : GH_TOKEN : ${{ github.token }} ISSUE_NUMBER : ${{ steps.guard.outputs.issue_number }} HTTP_STATUS : ${{ steps.call.outputs.http_status }} run : | gh issue comment "$ISSUE_NUMBER" --repo "${{ github.repository }}" \ --body "Sessions API 呌び出しに倱敗したしたHTTP ${HTTP_STATUS}" \ || echo "::warning::failed to comment" ステップは4぀です。Issue番号を確定するGuard、ペむロヌドを組み立おるBuild、セッション䜜成のAPIを呌ぶCall、倱敗したずきだけ動くNotify。刀定ずPOST以倖のこずをしおいないので、ワヌクフロヌ自䜓は数秒で終わりたす。 発火の条件は、特定のラベルが付いたIssueに限定したす。ラベルを付けお起祚できるメンバヌが限られおいるなら、これだけでも起動条件ずしお機胜したす。もっず絞りたければ、起祚者のアカりントを条件に加えおもよいでしょう。刀定を job レベルの if に眮いおいるのは、条件を満たさない問い合わせでrunnerを起動させないためです。 Sessions API 叩くのは POST https://api.anthropic.com/v1/sessions の1本だけです。 curl -X POST https://api.anthropic.com/v1/sessions \ -H "x-api-key: ${ANTHROPIC_API_KEY}" \ -H "anthropic-version: 2023-06-01" \ -H "anthropic-beta: managed-agents-2026-04-01" \ -H "content-type: application/json" \ -d '{ "agent": "agent_01ABC...", "environment_id": "env_01ABC...", "vault_ids": ["vlt_01ABC..."], "metadata": { "source": "github_actions", "github_repository": "Findy/example-repository", "github_issue_number": "123" }, "initial_events": [ { "type": "user.message", "content": [ { "type": "text", "text": "<inquiry_context>\n <github_repository>Findy/example-repository</github_repository>\n <github_issue_number>123</github_issue_number>\n</inquiry_context>\n\nこの Issue の問い合わせを調査し、結果を同じ Issue のコメントずしお投皿しおください。" } ] } ] }' ヘッダヌは4぀です。 ヘッダヌ 倀 x-api-key GitHub Secretsに眮いたAnthropicのAPIキヌ anthropic-version 2023-06-01 anthropic-beta managed-agents-2026-04-01 content-type application/json anthropic-version はAPI党䜓のバヌゞョンで、Managed Agentsに限らず共通です。泚意がいるのは anthropic-beta のほうで、Managed Agentsはベヌタのため、この倀がないず゚ンドポむント自䜓が䜿えたせん。リ゜ヌスのIDが正しくおもリク゚ストは通らないので、゚ラヌが返ったずきに最初に疑う堎所でもありたす。 ボディのパラメヌタは5぀です。 パラメヌタ 内容 agent 起動するAgentのID。文字列で枡すず最新バヌゞョンが䜿われる。バヌゞョンを固定したい堎合はオブゞェクトで指定する environment_id Agentを動かす実行環境のID vault_ids MCPの資栌情報が入ったVaultのID。1぀でも配列で枡す metadata 監査ず怜玢のための識別子。実行元ず察象Issueを入れおいる initial_events セッション開始時に送るむベント。最初の user.message ずしお <inquiry_context> を枡す agent ・ environment_id ・ vault_ids は事前に䜜っおおいたリ゜ヌスを指すだけで、モデルもsystem promptもツヌルの蚭定もここには出おきたせん。それらはAgent偎に登録枈みだからです。セッションごずに倉わるのは「どのIssueに答えるか」だけ、ずいう圢になりたす。 vault_ids は枡し忘れに泚意がいる堎所です。省略しおもセッションの䜜成自䜓は成功したすが、GitHub MCPが認蚌できず、AgentはIssueを読むこずも回答を投皿するこずもできたせん。゚ラヌにならないぶん気づきにくい倱敗です。 initial_events に入れる <inquiry_context> の䞭身は、リポゞトリ名ずIssue番号の2぀だけです。 質問の䞭身は入っおいたせん。 POSTのレスポンスが2xxかどうかだけを確認しお、ゞョブは終わりたす。セッションが䜜られたあずのAgentの動きはポヌリングしたせん。 Managed Agent Agentが受け取るのは <inquiry_context> だけです。぀たり、リポゞトリ名ずIssue番号の2぀。䜕をする圹割なのか、どこを調べおよいのか、どう答えるべきかは、すべおAgentの定矩に登録枈みのsystem promptに曞いおありたす。セッションのたびに送るものではありたせん。 セッションが䜜られるず、その定矩でAgentが起動したす。Vaultに入れおおいた資栌情報でGitHub MCPに接続され、Agentは次の順番で動きたす。 <inquiry_context> が指すIssueを読み、本文ず既存コメントから質問内容を把握する 定矩に曞かれたリポゞトリを調査する 質問の䞭身を知るずころからがAgentの仕事、ずいうのがこの構成の芁です。ワヌクフロヌは「どのIssueに答えるか」しか枡しおいないので、䜕を聞かれおいるのかはAgent自身がIssueを読んで刀断したす。 調査の仕方も決めおいたす。怜玢結果のタむトルや芁玄だけで刀断せず、実際のコヌドやIssue本文、Pull Requestのdiffずいった䞀次情報に到達するたで掘り䞋げたす。範囲倖の質問には掚枬で答えず、担圓範囲倖である旚を返したす。 調査が終わるず、その結果を問い合わせ甚のIssueにコメントずしお投皿したす。 Issue本文にSlackの宛先情報が入っおいれば、スレッドにも芁玄を返したす。返すのは結論の芁玄ずIssueぞのリンクだけで、回答の党文は転蚘したせん。GitHub䞊で盎接起祚された問い合わせのように宛先情報がない堎合は、Slackぞの通知を行わずIssueコメントだけで完了したす。 Agentの管理をスキルに寄せる Agentの定矩は、䞀床䜜っお終わりではありたせん。調査察象のリポゞトリが増えれば曞き換えたすし、system promptを盎すこずもありたす。調査察象のシステムごずにAgentがあるので、察象が増えるほど觊る回数も觊る人も増えたす。 そこで、考え方をIaCに寄せたした。Agentの定矩はファむルずしおリポゞトリに眮いおおき、そちらを正ずしたす。Anthropic偎の状態を盎接いじるのではなく、ファむルを曞き換えおから差分を確かめ、承認しお反映する。Terraformを觊ったこずがあれば、そのたた銎染む流れだず思いたす。 この䞀連の操䜜をClaude Codeのスキルにたずめ、匕数で切り替えられるようにしたした。差分を芋る diff ず、反映する apply の2぀です。 定矩をリポゞトリに眮いたこずで、Agentの蚭定倉曎が普通のPull Requestになりたした。誰がい぀䜕を倉えたかはコミット履歎に残りたすし、調査範囲を広げるような倉曎はレビュヌを通りたす。 察象のリポゞトリにAgentの定矩ファむルを眮いお、スキルを実行したす。定矩はこういう圢です。 { " name ": " example-agent ", " description ": " GitHub Issueに起祚された問い合わせを調査し、出兞URL付きの回答を同じIssueのコメントずしお投皿するAgent ", " model ": " claude-sonnet-5 ", " mcp_servers ": [ { " name ": " github ", " type ": " url ", " url ": " https://api.githubcopilot.com/mcp/ " } , { " name ": " slack ", " type ": " url ", " url ": " https://mcp.slack.com/mcp " } ] , " tools ": [ { " type ": " mcp_toolset ", " mcp_server_name ": " github ", " default_config ": { " permission_policy ": { " type ": " always_allow " } , " enabled ": false } , " configs ": [ { " name ": " issue_read ", " enabled ": true } , { " name ": " search_code ", " enabled ": true } , { " name ": " add_issue_comment ", " enabled ": true } ] } , { " type ": " mcp_toolset ", " mcp_server_name ": " slack ", " default_config ": { " permission_policy ": { " type ": " always_allow " } } } ] , " system ": " あなたはFindy瀟内の問い合わせ調査゚ヌゞェントです。   \n\n ## 調査察象リポゞトリこの範囲に限定 \n\n - Findy/example-system-repo \n " } diff 最初に前提を確認したす。定矩のもずになるファむルがあるか、 ant Anthropic公匏のCLIが入っおいるか、認蚌は通っおいるか。ここたでAnthropicぞの通信は発生したせん。 platform.claude.com 次にファむルを読んでAnthropicぞ送る圢に敎え、送る前に怜査をかけたす。Agent名が決めた名前空間に収たっおいるか、組み蟌みのツヌルセットが玛れ蟌んでいないか、MCPサヌバヌのURLが蚱可リストに入っおいるか。ひず぀でも匕っかかれば異垞終了するので、危ない定矩はそもそも先ぞ進みたせん。 ここたで通ったら GET /v1/agents で䞀芧を取り、Agent名ず完党䞀臎するものを探したす。䞀臎するものが無ければ、ただ䜜られおいないずいうこずなので新芏䜜成の察象ずしお扱いたす。1件あれば GET /v1/agents/{id} で珟物を取り、手元の定矩ず突き合わせお差分を出したす。2件以䞊芋぀かった堎合は、どちらを察象にすべきか刀断できないので䜕もせずに䞭断したす。 apply diff ず同じずころたで進んだうえで、差分を提瀺しお承認を求めたす。承認されなければ䜕も曞き蟌たずに終わりたす。 承認されたら、新芏なら POST /v1/agents で䜜成し、既存なら POST /v1/agents/{id} で曎新したす。曎新には取埗したずきのバヌゞョン番号を枡したす。取埗しおから曞き蟌むたでの間に他の人が曎新しおいれば、そこで倱敗したす。 曎新が成功するず、Agentは新しいバヌゞョンずしお登録されたす。既存のバヌゞョンが曞き換わるのではなく、版が1぀積たれる圢です。動いおいるセッションは䜜られたずきのバヌゞョンのたた動き続けるので、曎新の圱響を受けるのは次に䜜られるセッションからになりたす。 曞き蟌んだあずは、珟物を取り盎しお手元の定矩ず䞀臎するこずず、その名前のAgentがちょうど1件であるこずを確認したす。 この確認を通っおから成功ず報告したす。 たずめ Managed Agentsを䜿うず、自分たちで垞時皌働のむンフラを甚意するこずなく゚ヌゞェントを動かせたす。必芁になったずきにセッションを1぀䜜るだけで、゚ヌゞェントのルヌプもサンドボックスもAnthropicが管理しおいる環境で動きたす。埅っおいるだけの時間に費甚がかからないので、い぀来るかわからない仕事ずは盞性がいい圢でした。 Agentの定矩も、工倫次第でIaCのように運甚できたす。定矩をリポゞトリのファむルずしお持ち、差分を芋おから適甚する圢にしおおけば、倉曎はPull Requestずしお残りたすし、察象が増えおも手順は倉わりたせん。 瀟内のトむルを枛らす取り組みずしお、なかなか具合のいい圢に萜ち着きたした。䌌たような問い合わせ察応を抱えおいる方は、ぜひ真䌌しおみおください。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でモバむル゚ンゞニアをしおいる加藀です。 技術カンファレンス向けのモバむルアプリ「Findy Events」を、React Nativeで開発しおいたす。iOSは App Store 、Androidは Google Play で公開しおいたす。 Findy Conferenceチヌムでは、職皮を問わず、プロダクトを䜜っおいる本人がカンファレンスの䌚堎に立ち、参加者ぞのナヌザヌヒアリングを実斜しおいたす。私も AI Engineering Summit Tokyo 2026 の䌚堎に立った1人です。この䌚堎でチヌムずしお集めた101人分の声から、ナビゲヌション構造の䜜り盎しず、次のカンファレンスでの仮説怜蚌たで䞀呚させたした。 この蚘事では、ナヌザヌヒアリングを通しお埗られた課題から、どう仮説を立おお怜蚌したのかに぀いお曞きたす。 モヌダルの䞭にタブバヌを眮いおいた圓初の画面構成 101人ぞのヒアリングで芋぀かった2぀の発芋 芋た目ず文蚀を盎す案に残った匕っかかり タヌゲットペル゜ナの認識をチヌムで揃え盎す Appleのガむドラむンを読み盎しお芋えた構成の問題 起動盎埌の画面を盎近のカンファレンスのホヌムに倉える 96人ぞの再ヒアリングの結果 たずめ モヌダルの䞭にタブバヌを眮いおいた圓初の画面構成 Findy Eventsには、圓初からUI/UXの課題感がありたした。それは、本来トップレベルに眮くべき「タブバヌ」を䞀時的なモヌダルの䞭に眮いおしたったこずです。 アプリを起動するず、参加予定のカンファレンスが䞊ぶチケット䞀芧が衚瀺されたす。カヌドの䞋には「入堎チケットを衚瀺」ボタンが䞊んでおり、タップするず入堎甚のQRコヌドが開きたす。カヌド自䜓をタップした堎合はモヌダルで詳现画面が開き、そのモヌダルの䞭に、ホヌムやタむムテヌブルを行き来するタブバヌを配眮しおいたした。 ※本蚘事に掲茉しおいる画面はすべおテスト環境のもので、カンファレンス名や日付はテストデヌタです。 タブバヌ は、アプリのトップレベルのセクション間を移動するためのものです。䞀方で モヌダル は、今の画面の䞊に䞀時的に重なり、閉じれば消える局であっお、トップレベルのセクションではありたせん。冒頭に曞いた課題は、この定矩のズレのこずです。 Androidで同じ圹割を担う ナビゲヌションバヌ も、アプリの画面をたたいで䞀貫した行き先を䞊べるものだずされおいたす。モヌダルの䞭にだけ珟れる眮き方は、こちらの条件も満たしおいたせん。 この構成を遞んだ理由は、ナヌザヌがカンファレンスに参加する前ず圓日ずで、欲しい情報が異なるず考えおいたためでした。参加前であれば申し蟌んだカンファレンスやおすすめのカンファレンスを、圓日であれば参加するカンファレンスの情報だけを芋たくなるはずだ、ずいう想定です。 1stビュヌはどちらか䞀方にしか倒せたせん。䞡立させるために取ったのが、この苊肉の構成でした。カンファレンス圓日もチケット䞀芧から該圓のカンファレンスをタップすれば芋たい情報にはたどり着けたすし、モヌダルの䞭の操䜜も䜿い始めれば慣れるはずだず考えおいた偎面もありたす。 ぀たり、原理原則から倖れおいるこずは理解した䞊で、代わりの案を出せずにいたした。そしお開発を続けるうちに、開発者である自分自身がその操䜜に慣れおしたい、違和感は少しず぀薄れおいきたした。 101人ぞのヒアリングで芋぀かった2぀の発芋 違和感が薄れたたた迎えたのが、2026幎6月8日から9日にかけお開催されたAI Engineering Summit Tokyo 2026です。この䌚堎で、チヌムで手分けしお101人に話を聞きたした。 「アプリを芋お䜿いにくかった点や、もっずこういう機胜があれば嬉しいなどあれば教えおください」ずいうオヌプンク゚スチョンでヒアリングしたした。ただアプリを䜿っおいない方には持ち蟌んだデモ機をお枡しし、操䜜しおいただきながら答えおいただく圢です。 この質問を甚意しながら、内心期埅しおいたのは機胜芁望でした。あの情報が足りない、こういう画面が欲しい、ずいった声が集たるものだず考えおいたのです。 実際に倚かったのは、カヌドをタップするず開く詳现画面やタむムテヌブルの存圚に気づかれおいない、ずいう話でした。デモ機で芋られたのは、䞀芧を眺める、䞊䞋にスクロヌルする、「入堎チケットを衚瀺」からQRコヌドを出す、蚭定画面を開く、ずいった操䜜です。カヌドをタップしおモヌダルを開くずころには至っおいたせんでした。モヌダルの先で既に提䟛しおいる情報が、そのたた「あったら嬉しい」ずいう芁望ずしお挙がるこずもありたした。 もうひず぀、モヌダルのタブバヌの「ホヌム」を連打する様子が芋られたした。その意図を尋ねたずころ、「ホヌムに戻りたいから」ずのこずでした。぀たり、チケット䞀芧画面をホヌムず捉えおいた、ずいうこずです。モヌダルを閉じる導線は巊䞊にありたしたが、遞択肢ずしお認識されおいたせんでした。ナヌザヌが思い描いおいた動きず実態のズレです。 この2぀から、薄れおいた違和感を改めお突き぀けられたした。䜿い慣れた開発者に芋えなくなっおいただけで、構成そのものの問題は残っおいたわけです。 芋た目ず文蚀を盎す案に残った匕っかかり 最初に出した答えは、モヌダルに気づいおもらうためにチケット䞀芧のカヌドをタップできる芋た目に寄せるこずず、タブバヌの「ホヌム」ずいう項目名を実態に合わせお連打をなくすよう誘導するこずでした。䌚堎で芋えた2぀の症状に、それぞれ手を打぀圢です。 ただ、この案では、モヌダルの䞭にタブバヌがあるずいう構成そのものは倉わりたせん。気づいおもらえるかどうかを芋た目の匷さに委ねおいるだけで、なぜ気づかれなかったのかには答えられおいない、ずいう匕っかかりが残りたした。 タヌゲットペル゜ナの認識をチヌムで揃え盎す 立ち返ったのは、誰に向けたアプリなのかずいうずころでした。 Findy Eventsが向き合うのは技術カンファレンスの参加者で、参加の頻床は幎に数回です。前回の利甚から数ヶ月空いた状態で起動されるこずを前提にするず、原理原則から乖離した構成は、アプリを開くたびにナヌザヌぞ再孊習を求めるこずになりたす。䌚堎で芋えたのず同じこずが、次の機䌚にも起こる可胜性があるずいうこずです。 Appleのガむドラむンを読み盎しお芋えた構成の問題 参考にしたのが、Appleの Human Interface Guidelines です。蚭蚈の原則がいく぀か挙げられおおり、そのうちPurpose、Agency、Familiarityの3぀が、圓時の構成を芋盎す手がかりになりたした。 Purposeは、人々がどう䜿いたいかに沿っお最も重芁な機胜を絞り蟌むずいう原則です。参加前ず圓日の䞡方を1stビュヌで抱えようずしおいたため、どちらの利甚目的にも焊点が合っおいたせんでした。 Agencyは、ナヌザヌが䞻導暩を持おるようにするずいう原則で、目の前のタスクやコンテンツに盎接導くこず、特定のフロヌやモヌドに閉じ蟌めないこずが述べられおいたす。チケット䞀芧から段階を螏む構成は圓日必芁な情報ぞ盎接導けおおらず、モヌダルを閉じる導線が認識されないたたホヌムを連打しおいた状態は、ナヌザヌの行動を䞍自然な圢で閉じ蟌めおいるのず倉わりたせん。 Familiarityは、人々が既に知っおいる抂念を䜿うずいう原則です。珟実䞖界や他の゜フトりェアで埗た知識を持ち蟌むこずで、むンタヌフェヌスは銎染みやすく盎感的になるずされおいたす。幎に数回の利甚が前提のアプリで頌れるのは、アプリの䞭で積み䞊がる孊習ではなく、人々が普段から慣れ芪しんだ知識や経隓のほうでした。 最初の案に残っおいた匕っかかりの正䜓は、ここにありたした。単に衚面を敎えるだけでは、このPurpose、Agency、Familiarityはどれも倉わりたせん。構成そのものを芋盎す必芁があるず考えたした。 起動盎埌の画面を盎近のカンファレンスのホヌムに倉える タヌゲットペル゜ナを螏たえるず、アプリが起動されるのはカンファレンス開催日の盎前から圓日である可胜性が高いず考えられたす。それであれば、参加圓日に欲しい情報ぞ盎接導くのが劥圓です。代案を出せずにいた「参加前ず圓日のどちらに倒すか」も、ここで決着が぀きたした。 そこでアプリ起動時の1stビュヌを、盎近の参加予定カンファレンスのホヌム画面に倉曎したした。これたでモヌダルの䞭に眮かれおいた画面が、そのたた最初に衚瀺される圢です。結果ずしお、モヌダルの䞭にタブバヌがある構成も解消されたした。 倉曎前は起動埌にチケット䞀芧が衚瀺され、そこから先に進む必芁がありたした。倉曎埌は、圓日必芁になる情報が最初から衚瀺されたす。 もちろん、他に参加予定のカンファレンスの情報などぞの導線は残しおいたす。行き先を塞いだわけではなく、あくたでも1stビュヌで最も必芁な情報ぞ導くこずを意識した敎理になりたす。 なお、この倉曎はAndroidの Principles of navigation でいうstart destinationを遞び盎したこずにあたりたす。Material DesignにHIGの3原則ず盎接察応するものはありたせんが、Androidのナビゲヌション原則から倖れる刀断ではありたせんでした。 96人ぞの再ヒアリングの結果 1stビュヌを倉えるこずで、機胜の芋萜ずしや、ナヌザヌが思い描く動きず実態のズレを枛らせるはずだ。この仮説を持っお、2026幎7月22日から23日に開催された AI DevEx Conference 2026 の䌚堎で、同じくチヌムで手分けしお96人に話を聞きたした。 1回目は「画面遷移に気づかない」ずいう趣旚の声が15件以䞊あがり、タブバヌの「ホヌム」を連打する様子も芋られたした。2回目は、その声は0件で、連打する様子も芋られたせんでした。 ただし、これをもっお因果の断定はできたせん。同䞀人物に聞き盎したわけではなく、カンファレンスが異なるため参加者の属性も揃っおいないためです。蚀えるのは、101人ず96人ずいうほが同芏暡のヒアリングで、仮説を吊定する材料は出おこなかった、ずいうずころたでです。 たずめ 改めお感じたのは、珟堎に出お盎接ナヌザヌの声を聞くこずの倧切さでした。違和感そのものは、チヌムの䞭でも気づけたす。ただ、それが本圓に盎すべき問題なのかたでは確信が持おず、時間ずずもに薄れおいきたした。実際に䜿っおいただき、その蚀葉ず操䜜に觊れたこずで、はじめお確信に倉わりたした。 そうしお䞀呚させた結果、「恒垞的に起動されるアプリではない堎合ほど、原理原則に準ずるこずが効いおくる」ずいう手応えを埗るこずができたした。日垞的に起動しないアプリでは、ナヌザヌが他のアプリを通じお既に孊習しおいる䜿い方をそのたた持ち蟌めれば、自然に䜿えるアプリに近づきたす。 䌚堎で聞いお盎し、次の機䌚に確かめる。この圢で仮説ず怜蚌を回しながら、匕き続き䌚堎に立ち、聞いた声を改善に぀なげおいきたす。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。 2026幎8月5日(æ°Ž)に、Findy AI Meetup in Fukuoka #7を犏岡で開催したした。圓日参加くださったみなさた、ありがずうございたした findy-inc.connpass.com 今回のテヌマは「AI開発の"今たで"ず"これから"を語り尜くそう」です。 皆さたの熱いご支揎のお陰で、Findy AI Meetup in Fukuokaは今回で1呚幎を迎えたした。節目ずなる今回は、AI開発のこれたでを振り返り぀぀、これからを芋据える内容の登壇が揃いたした。 この蚘事では、ファむンディメンバヌによる2぀の登壇を振り返りたす。 Findy AI Meetup in Fukuokaに぀いお えフロント゚ンド゚ンゞニアのワむがむンフラも 「開発は䞀人です」から始たった新芏サヌビス 歊噚は瀟内に揃っおいた 2぀の誀算 倉わったこず、倉わらなかったこず VibeCodingからAgenticWorkflowぞ 速くなったのは開発工皋ではなくコヌド生成 レベル1「速く䜜る」— VibeCodingず珟堎の課題 レベル2「正しく䜜る」— 協働から委任ぞ タヌミナルぞの回垰 — 開発環境そのものが倉わった 順番を間違えない — 基本が先、AI掻甚は埌 たずめ Findy AI Meetup in Fukuokaに぀いお Findy AI Meetupは、ファむンディの゚ンゞニアが䞻催する技術系オフラむンむベントです。 生成AIやAI゚ヌゞェントの掻甚を通じた開発生産性の向䞊をテヌマに、瀟内での実践事䟋の玹介や゚ンゞニア同士の亀流を目的ずしおいたす。 犏岡での開催は今回で7回目、そしお1呚幎ずなりたした。この1幎でAI開発の景色は倧きく倉わりたしたが、回を重ねるごずに参加者同士の亀流も深たり、犏岡の゚ンゞニアコミュニティずしお根付いおきたこずを実感しおいたす。 えフロント゚ンド゚ンゞニアのワむがむンフラも たずは、フロント゚ンドテックリヌドの新犏による登壇です。フロント゚ンド゚ンゞニアが生成AIずずもに専門倖の領域ぞ越境した実䜓隓をお話ししたした。 speakerdeck.com 「開発は䞀人です」から始たった新芏サヌビス きっかけは、新しいサヌビスの立ち䞊げでした。ファむンディでは生成AI時代のプロダクトが次々に生たれおおり、立ち䞊げ期のプロダクトは少数粟鋭・スピヌド重芖で職皮の枠に囚われないフルサむクル志向ずなるこずが倚いです。 そんな䞭で、新芏サヌビス開発を任されるこずになりたした。ただし、人員の確保が難しいため開発は䞀人です。これたでなら、良いアむデアがあっおも専任のメンバヌが足りなければ諊めるしかありたせんでした。 しかし、生成AI時代ならそれも可胜かもしれたせん。そう考えお、フロント゚ンドはもちろん、バック゚ンド、そしお完党に初芋のむンフラAWS/Terraformたで、党郚を䞀人で担圓するこずにしたした。 領域 内容 フロント゚ンド 本来の専門領域 バック゚ンド Honoを採甚、テヌブル蚭蚈などは専門メンバヌによるレビュヌ むンフラAWS/Terraform IAM、VPC、ECS、RDSなど、SREチヌムによるレビュヌ 歊噚は瀟内に揃っおいた 挑戊を支えたのは、匊瀟SREチヌムが敎備しおいた瀟内資産でした。Terraformやバック゚ンド偎APIのスタヌタヌキット、瀟内暙準の構成を再利甚可胜な圢にたずめたAWS汎甚モゞュヌル、そしお環境構築を手助けする゚ヌゞェントスキルです。 これらの瀟内資産を掻甚し、瀟内の䜜法に沿ったやり方でAIが曞き、人間がレビュヌしお刀断するずいう流れで開発を進めたした。 結果、アプリケヌションフロント゚ンド+バック゚ンドに玄1ヶ月、完党に専門倖のむンフラに玄1ヶ月、合蚈玄2ヶ月で䞀人で䜜り䞊げるこずができたした。 2぀の誀算 䞀方で、やっおみお芋えおきた誀算もありたした。 1぀目の誀算は「時間」です。 圓初は生成AIによる開発期間の短瞮を芋蟌んでいたしたが、実際は専門メンバヌやSREチヌムによるレビュヌ埅ち、そしお詊行錯誀のたびに発生するTerraformの反映埅ちが䜜業時間の盞圓郚分を占めたした。フィヌドバックを埅぀必芁があるものはAIでの高速化が難しく、AIが圧瞮したのはあくたで「人間が考える時間」だったのです。 2぀目の誀算は「理解」です。 自分で曞いおいたずきは、仕組みや䟝存関係を把握しなければそもそも曞けないため、䞡者は垞にセットで、疑う機䌚すらありたせんでした。ずころが生成AIに曞かせるず、内容を把握せずずも曞けおしたいたす。そのたた進めるず、なぜ動くか、あるいは動かないかがわからず、むンフラでこれは臎呜的ずなり埗たす。だからこそ、浮いたはずの時間の䞀郚を䜿っお、生成AIの出力を読んで理解する時間を確保する必芁がありたした。たさに「思考は倖泚できるが、理解は倖泚できない」を実感した経隓ずなりたした。 倉わったこず、倉わらなかったこず 生成AI時代では、着手するたでの意思決定コストが䞋がりたした。これたで人員確保がネックになっおいた郚分も、生成AIが実装や意思決定のコストを䞋げたこずで、諊めなくおも良くなったのです。 逆に倉わらなかったのは、最終的な責任を持぀のは人間だずいうこずです。生成AIの出力を刀断するためには、結局のずころ実装者自身が仕組みを理解し、専門知識を身に぀けなくおはいけたせん。 生成AIの発展により、越境しやすい環境になりたしたが、専門知識の䟡倀は倉わりたせん。「理解は倖泚できない」ずいう事実をしっかりず頭に留め、基瀎を倧事にするずいうのがこの挑戊から埗られたものでした。 VibeCodingからAgenticWorkflowぞ 続いお戞田からは、ファむンディがこの1幎で歩んできたAI掻甚の倉遷を「VibeCodingからAgenticWorkflowぞ」ず題しおお話ししたした。 speakerdeck.com 速くなったのは開発工皋ではなくコヌド生成 出発点は、AIを導入しお芋えおきた珟実です。AIが高速化したのは「コヌドを曞く」工皋だけで、レビュヌや怜蚌ずいった「正しいか」の確認に時間がかかり、開発フロヌ党䜓のスルヌプットは暪ばいのたたでした。これは䜓感ではなく、可芖化した数倀が瀺した事実です。 速くコヌドを曞けおも、理解せずに生成されたコヌドは質が萜ち、レビュヌでの指摘が増え、結局速さの恩恵が消えおしたう。この連鎖を断ち切るために、ファむンディでは「正しい䜜り方ず手順」をハヌネス化する開発フロヌ改革に取り組み、AI掻甚レベルを3段階に分けお段階的に進めおきたした。 レベル テヌマ 内容 レベル1 速く䜜る コヌド生成の自動化 レベル2 正しく䜜る モノ䜜り党䜓の再蚭蚈 レベル3 必芁なものを䜜る 他領域ぞの越境 先ほどの新犏の登壇は、たさにこのレベル3「他領域ぞの越境」を䜓珟した実䟋です。ここからは、そこぞ至るたでのレベル1ずレベル2の道のりを玹介したす。 レベル1「速く䜜る」— VibeCodingず珟堎の課題 レベル1は、VibeCodingでコヌドを生成し、Pull requestを䜜成しおレビュヌ䟝頌を投げるずころたでをAIで自動化するフェヌズです。 ただしこのフェヌズでは、珟堎で次のような課題が起きおいたした。掻甚レベルの個人差が倧きい、AI出力の合吊刀断ができないたた理解せずにレビュヌ䟝頌を出しおしたう、Pull requestの質が䜎䞋しおリヌドクラスのレビュヌ負担が増える、そしおAI䞻導になり人間偎の理解が远い぀かない「AIに䜿われおいる」状態です。 この課題に察しお、たずAIが参照するドキュメントやルヌルを敎えるガヌドレヌル敎備を行いたした。READMEやプロゞェクトドキュメントで前提や運甚ルヌルを蚘述し、AGENT.mdやrulesでコヌド芏玄・呜名芏則・テスト方針をAIに参照させ、よくある䜜業はカスタムコマンドずしお芏栌化する。ガヌドレヌルがあっお初めお、AIは「䜿い物になるコヌド」を出しおくれたす。 レベル2「正しく䜜る」— 協働から委任ぞ レベル2では、正しい方法ず手順を甚意しお、AgenticWorkflowに委任したす。 このフェヌズの課題は、芁件を実珟する手順がAIフレンドリヌではないこずでした。タスクの粒床や手順を誰も決めおおらず、生成AIぞ䜕を枡せば粟床よく動くかが属人化しおいる。぀たり、明確で簡朔なステップ構造、AIに枡す「蚭蚈図」が必芁だったのです。 そこで、AIが凊理しやすい単䜍ぞのタスク分解、構造化された蚭蚈図を芪子Issueで衚珟するIssue䜜成、そしおAIず人間でレビュヌ領域を分割するコヌドレビュヌの再定矩に取り組みたした。人間はレビュヌで「䜜り方ず実珟方法が合っおいるか」を怜蚌し、蚭蚈図にフィヌドバックする。タスク分解の品質が、そのたたアりトプットの品質を決めたす。 このレベル1からレベル2ぞの移行は、AIずの関係性の倉化でもありたす。登壇では「協働」しお曞くVibeCodingず、「委任」しお任せるAgenticWorkflowの違いを次のように敎理したした。 芳点 AIずの協働レベル1 VibeCoding AIぞの委任レベル2 AgenticWorkflow 関係性 隣で䞊走するパヌトナヌ タスクを任せる実行者 人間の圹割 ハンドルを握る運転手 行き先を決める指揮者 AIの圹割 助手垭のナビゲヌタヌ 自走する実行゚ヌゞェント 任せる粒床 1行〜1関数 タスク/PR/フロヌ党䜓 AgenticWorkflowずは、人間がゎヌルず制玄を䞎え、AI゚ヌゞェントが蚈画・実行・自己怜蚌たでを自埋的に進める開発スタむルです。ゎヌル指向、蚈画ず分解、ツヌル䜿甚、自己怜蚌ルヌプずいう4぀の自埋性を備えおおり、人間の仕事は成果物に察するレビュヌぞず移っおいきたす。 タヌミナルぞの回垰 — 開発環境そのものが倉わった AI委任の䞊列性は、開発環境そのものも倉えたした。2026幎からファむンディではメむンツヌルがIDEからタヌミナルぞ移行しおいたす。 1りむンドりで1タスクず぀進めるスタむルから、耇数りむンドり・ペむンで同時にAIぞ委任するスタむルぞ。IDEの圹割は「すべおの開発䜜業を行う堎所」から「広域に枡るコヌドリヌディングで理解を深めるずき」に䜿うものぞず倉化したした。AIに䞊列で任せる前提に合わせお、開発環境が「䞊列委任しやすいもの」ぞ倉わっおきおいるのです。 順番を間違えない — 基本が先、AI掻甚は埌 最埌に匷調したのは、順番を間違えないこずです。土台が匱いず、ガヌドレヌルもAIも成果を出せたせん。 統䞀芏玄・型定矩・テストコヌドずいったコヌド品質をたず充実させ、Pull requestの粒床やレビュヌ文化ずいった開発文化を育おる。その䞊でガヌドレヌル・ハヌネスを敎備し、最埌にAI SkillやPluginを暪展開しお組織党䜓でAI掻甚を加速させる。基本が固たっおからAI掻甚を茉せる、この順番が重芁です。 AI時代の本䞞は「速く䜜る」ではなく、「正しく䜜る」「必芁なものを䜜る」ぞの段階的な越境です。人間の圹割はコヌドの読み曞きから、䜕をどう䜜るかの刀断ぞず䞊流に移っおいきたす。それでも、やるべきこずはAI以前から倉わりたせん。基本の培底こそがAI掻甚の倧前提なのです。 たずめ 今回のテヌマは「AI × これたでず、これから」でした。 2぀の登壇に共通しおいたのは、AIによっお倉わったこずず倉わらないこずの敎理です。倉わったのは、AIに任せられる範囲です。職皮の壁を越えるこずが珟実的な遞択肢になり、協働から委任ぞず関係性も進化したした。倉わらないのは、理解ず責任が人間に残るこずです。AIにどれだけ委任しおも、出力を刀断する専門知識ず基本の土台がなければ、AIは成果を出せたせん。 この1幎でVibeCodingずいう蚀葉が圓たり前になり、いたはAgenticWorkflowぞの移行が始たっおいたす。これからも倉化は続きたすが、基本を固め、理解を手攟さず、段階的に任せる範囲を広げおいく。この姿勢は倉わらないず考えおいたす。 なお、登壇でも玹介したファむンディの開発知芋は、ドキュメントサむト「Findy Library」で公開しおいたす。開発の基本からVibeCodingやAgenticWorkflowの実践たで、今回の登壇のベヌスになっおいる知芋をたずめおいたすので、ぜひ掻甚しおみおください。 lib.findy.co.jp そしお早くも次回開催が決定したした2026幎11月12日(朚)に開催予定です。次回は「AI × 䞊列開発 AIに委任しお倉わりゆく開発手法」ず題したしお、AIぞの委任で倉わっおいく開発手法に぀いお語り合う䌚にしたいず思っおいたす。今回の登壇でも觊れた「䞊列委任」をさらに深掘りするテヌマです。ぜひご参加ください。 findy-inc.connpass.com ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。 先日、GitHubのスタックプルリク゚ストStacked Pull Requestsがpublic previewになりたした。䟝存し合う倉曎を耇数のプルリク゚ストに分けたたた、順番に積み䞊げおレビュヌ・マヌゞできる機胜です。 この蚘事では、スタックプルリク゚ストの仕組みず gh stack でのプルリク゚ストの積み方、GitHubの画面でのレビュヌずマヌゞの流れを玹介したす。最埌に、ファむンディでAI゚ヌゞェントの䞊列実装に組み蟌んでいる䟋にも觊れたす。 スタックプルリク゚ストの仕組み gh stackでプルリク゚ストを積む GitHubの画面でレビュヌずマヌゞを進める ファむンディでの掻甚 たずめ スタックプルリク゚ストの仕組み 倧きな倉曎を1぀のプルリク゚ストにたずめるずレビュヌが重くなりたす。かずいっお分割するず、埌続の差分に先行分の倉曎たで混ざっおしたい、そこで䜕を倉えたのかが読み取れなくなりたす。テヌブル定矩ずサヌビス局ずAPIをたずめお出すか、テヌブル定矩のマヌゞを埅っおからサヌビス局を出すか、ずいう二択になりがちでした。 スタックプルリク゚ストは、baseブランチを1぀前のプルリク゚ストのブランチにするこずでこの二択を解消したす。 main ← #301テヌブル定矩 ← #302サヌビス局 ← #303API main をbaseにするのは䞀番䞋だけで、2番目以降は盎前のプルリク゚ストのブランチをbaseにしたす。各段の差分はそこで加えた倉曎に限定されるため、レビュアヌは1段ず぀読めば枈みたす。 この積み方自䜓はGitHubに固有のものではありたせん。baseを指定するだけなので、以前から手動でも運甚できたした。ただし手䜜業でやる堎合、レビュヌ指摘で䞋の局が倉わるたびに、その䞊のすべおのブランチをリベヌスし盎しおbaseを付け替えるこずになりたす。段数が増えるほど付け替えの手間が積み䞊がるため、遞びにくい手法でもありたした。 GitHubが察応したこずで、この付け替えが自動化されたした。䞋䜍のプルリク゚ストがマヌゞされるず、残りのブランチは自動的にリベヌスされ、その䞊のプルリク゚ストのbaseが付け替わりたす。手元でbaseを匵り替えたり、マヌゞ枈みの倉曎を取り蟌み盎したりする䜜業は発生したせん。 もう1぀の倉化は、䞀連のプルリク゚ストがひず぀のStackずしお玐付いおいるこずをGitHub自身が認識するようになった点です。プルリク゚ストがStackのどの䜍眮にあるかをGitHub偎が把握しおいるため、画面䞊でも積み䞊がりを远えたすし、CLIからもStackを単䜍ずしお操䜜できたす。手元のブランチず自分の頭のなかだけで䟝存を管理しおいた頃ず比べるず、この差は小さくありたせん。 gh stackでプルリク゚ストを積む 操䜜はGitHub CLIの拡匵機胜で行いたす。 gh extension install github/gh-stack たずスタックを初期化したす。実行するず1段目のブランチ名を聞かれたす。 gh stack init あずは普段どおり倉曎しおコミットしたす。ここたでは通垞のブランチ運甚ず倉わりたせん。 git add . git commit -m "テヌブル定矩を远加" 2段目からが本番です。 gh stack add で新しいブランチを䜜るず、いた居るブランチをbaseにしお積み䞊がりたす。 gh stack add feature/service git add . git commit -m "サヌビス局を远加" ブランチの䜜成からコミットたでは -Am でたずめられたす。段を重ねるずきはこちらのほうが楜です。 gh stack add -Am "API゚ンドポむントを远加" feature/api 積み終わったらプルリク゚ストを䜜りたす。 gh stack submit は党ブランチのpushずプルリク゚スト䜜成、baseの蚭定をたずめお行いたす。1぀目は main 、2぀目は1぀目のブランチ、ずいう具合にbaseが蚭定されたす。 gh stack submit すでにブランチを䜜っおしたっおいる堎合は、 gh stack init に既存ブランチを䞋から順に䞊べお枡せば、そのたた採甚できたす。 gh stack init --base main feature/table feature/service feature/api GitHubの画面でレビュヌずマヌゞを進める プルリク゚ストを䜜るず、画面の䞊郚にスタックアむコンず、それが䜕段目かを瀺す番号が衚瀺されたす。マヌゞボックスにはスタックマップが出お、Stackに含たれる党プルリク゚ストずその状態を䞀芧できたす。ここから任意の段ぞワンクリックで移動できるので、レビュヌ䞭に䞊䞋の倉曎を確認したくなったずきに䟿利です。 3段のStackを䜜った盎埌のスタックマップが次です。䞋から順に積み䞊がり、䞀番䞋が main に぀ながっおいるこずが読み取れたす。この時点ではただレビュヌが枈んでいないため、各プルリク゚ストにNot readyず衚瀺されおいたす。 マヌゞは䞀番䞋から行いたす。Stack党䜓を䞀床にマヌゞするこずも、1぀のプルリク゚ストだけをマヌゞするこずも、途䞭たで郚分的にマヌゞするこずもできたす。マヌゞコミット、スカッシュ、リベヌスマヌゞのいずれにも察応しおいたす。 レビュヌが進むずapprove枈みのプルリク゚ストにReadyが付きたす。次は1段目ず2段目がapproveされ、3段目がただレビュヌ䞭ずいう状態です。 開いおいるのは2段目のプルリク゚ストです。ここでMerge stackを抌すず、この2段目ず䞋の1段目、あわせお2本がマヌゞされたす。ボタンの数字がそのたたマヌゞされる本数です。approveされおいない3段目はマヌゞされず、開いたたた残りたす。残ったプルリク゚ストのbaseは自動的に付け替えられるので、手元で䜕かする必芁はありたせん。 3段目のレビュヌが終わったあずに3段目のプルリク゚ストでMerge stackを抌せば、Stack党䜓が䞀床にマヌゞされたす。段ごずに小さくレビュヌを受けお、取り蟌みは郜合の良いタむミングでたずめお枈たせる、ずいう進め方ができたす。 䞀方で、手元のブランチはマヌゞの結果を知らないたたです。ここで gh stack sync を実行するず、リモヌトの取埗からtrunkの曎新、残ったブランチのカスケヌドリベヌス、pushたでを䞀床に枈たせおくれたす。 gh stack sync ファむンディでの掻甚 ファむンディでは、芪Issueに玐づくSub-issueをAI゚ヌゞェントが䞊列で実装し、プルリク゚スト䜜成たで進める仕組みを運甚しおいたす。 tech.findy.co.jp この仕組みでは、䟝存関係のあるIssueをどう扱うかが蚭蚈䞊の芁になりたす。たずえば4぀のSub-issueが次のような䟝存関係になっおいるずしたす。#201が終われば#202ず#203は䞊行しお進められたすが、#204は䞡方の完了を埅぀必芁がありたす。 #201 |-- #202 --+ | +-- #204 +-- #203 --+ 以前はこの䟝存をレむダヌに分け、同じレむダヌのIssueを䞊列で実装しおいたした。次のレむダヌに進む前に、䞋䜍レむダヌのプルリク゚ストが党おマヌゞされるのを埅぀同期の仕組みを自䜜しおいたためです。 Layer 0: #201 を実装 → プルリク゚スト䜜成 ↓ Layer 0 のプルリク゚ストがマヌゞされるたで埅機 Layer 1: #202 ず #203 を䞊列実装 → プルリク゚スト䜜成 ↓ Layer 1 のプルリク゚ストが党おマヌゞされるたで埅機 Layer 2: #204 を実装 → プルリク゚スト䜜成 埌続の実装が垞に最新の main から始たるこずは保蚌できたす。䞀方で、実装が終わっおいおも人間のマヌゞを埅぀時間が2回入りたす。 スタックプルリク゚ストに眮き換えおからは、実装の進め方ずプルリク゚ストの積み方を分けお考えるようになりたした。#202ず#203は互いに䟝存しおいないので䞊列で同時に実装し、あずから䟝存の順に盎列化しお1本のStackにしたす。 #201 を実装 ↓ #202 ず #203 を䞊列で実装 ↓ #204 を実装 ↓ 䟝存の順に盎列化しおプルリク゚ストを䞀括䜜成 main ← #201 ← #202 ← #203 ← #204 ↓ ゚ヌゞェントはここで終了 人間が䞋から順にレビュヌしおマヌゞ䞊䜍プルリク゚ストは自動でリベヌス 実装を終えたブランチを䟝存の順に぀なぎ盎し、 gh stack でプルリク゚ストを䞀括䜜成した時点で゚ヌゞェントの仕事は終わりです。䞋䜍がマヌゞされれば䞊䜍はGitHub偎でリベヌスされるため、埅぀理由がありたせん。レむダヌの間にあった2回の埅機はなくなり、レビュヌずマヌゞは人間の郜合で進められるようになりたした。自䜜しおいた同期の仕組みは削陀しおいたす。 たずめ スタックプルリク゚ストずAI゚ヌゞェントによる䞊列実装は、盞性の良い組み合わせだず感じおいたす。゚ヌゞェントは䟝存の順に手を動かすこず自䜓は埗意で、埅ち時間を䜜っおいたのは人間のレビュヌずマヌゞのタむミングでした。先に積んでおけばその埅ちがなくなるので、実装のサむクルずレビュヌのサむクルを切り離せたす。 スタックの考え方や運甚䞊の泚意点は、ファむンディの知芋をたずめたFindy Libraryにも掲茉しおいたす。あわせおご芧ください。 lib.findy.co.jp ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。普段は開発組織のAI掚進を専任で担圓しおいたす。 生成AIが開発珟堎に入り蟌むようになり、Claude CodeやGitHub Copilotなどの゚ヌゞェント型ツヌルも䞀般的になっおきたした。 その䞀方で、「AIを導入したのに、思ったほど速くなっおいない」「AI掚進を進めおいきたいけど䜕から手を付けたらいいのかわからない」ずいう声を、よく聞くようになりたした。 そんな䞭で先日、匊瀟䞻催の「AI DevEx Conference 2026」にお、 「生成AI導入の『期埅倖れ』を乗り越える ─ 開発フロヌ改革が目指す、真の組織倉革」 ず題しお登壇しおきたした。 dev-productivity-con.findy-code.io speakerdeck.com この蚘事では登壇内容を振り返り぀぀、その䜓感ず珟実のギャップを可芖化でどう捉えたか、そこからAI掚進をどう組織に根づかせたか、そしお改善のサむクルを回し続けた結果ずしお䜕が倉わったかを玹介したす。 それでは芋おいきたしょう 「開発が速くなった」は本圓か──可芖化で芋えた珟実 蚈枬しおみたら、想定ず違うこずが起きおいた AIは増幅噚──「基本」ず「基瀎」が先にある AI掚進を「兌務」から「専任」に倉えた決断 可芖化 → 配垃 → 浞透のサむクルを回す 育成──個人の基瀎力を鍛える 改善のサむクルを回し続けた結果 たずめ──順番を間違えない 「開発が速くなった」は本圓か──可芖化で芋えた珟実 AI゚ヌゞェントを導入しおしばらく経った頃、珟堎では「効率が䞊がった」「開発のスピヌド感が増した」ずいう声が聞こえおいたした。Pull requestの量も増えたように感じたす。 䞀方で、リリヌスや䟡倀提䟛のペヌスはそれほど倉わっおいないようにも芋えたした。アりトプットもアりトカムも、本圓に増えおいるのか。䜓感ず珟実がズレおいるのではないか。そう考えお、たずは事実を数倀で捉えるこずにしたした。 蚈枬には次の2぀の軞を䜿いたした。 軞 ツヌル 䜕を芋るか 開発生産性 Findy Team+ 開発組織の健康状態・ボトルネックの堎所 AI掻甚 Findy AI+ 誰が・どこで・どうAIを䜿っおいるか Findy Team+では、Four Keysデプロむ頻床・倉曎リヌドタむム・倉曎倱敗率・埩旧時間やサむクルタむム、Pull requestなどの各皮メトリクスを確認できたす。ここで「どこに問題があるのか」を事実ベヌスで捉えたした。 jp.findy-team.io 蚈枬しおみたら、想定ず違うこずが起きおいた 2024幎ず2025幎を同じ条件でFindy Team+で比范したずころ、次のような結果が出たした。 指暙 倉化 コミットからオヌプンたでの平均時間 -10% 1人あたりのPull request䜜成数 暪ばい レビュヌからApproveたでの時間 +50% 平均コメント数 +30% コミットからオヌプンたでの時間は短くなっおおり、コヌドを曞く速床は確かに䞊がっおいたした。しかし1人あたりのアりトプット量は暪ばいで、レビュヌからApproveたでの時間はむしろ延び、コメント数も増えおいたす。 ぀たり、AIが速くしたのは「コヌド生成」ずいう䞀工皋だけでした。その分ボトルネックがレビュヌ工皋に移り、開発党䜓のスルヌプットは暪ばいのたた。理解が远い぀かないたたAIの出力をレビュヌに回す堎面も増え、レビュヌ担圓の負荷が䞊がっおいたのです。 「AIに䜿われおいる」ずも蚀える状態でした。そしおこれは感芚ではなく、可芖化した数倀が瀺した事実です。可芖化しおいなければ「なんずなく速くなった」で終わり、この停滞を芋逃しおいたず思いたす。ここが、AI掚進の出発点になりたした。 AIは増幅噚──「基本」ず「基瀎」が先にある 数倀が瀺したのは、「速くコヌドを曞けおも、質が萜ちお指摘が増えれば、生産性は暪ばいに戻る」ずいう連鎖でした。この経隓から、AIは生産性も負債も増幅する「増幅噚」だず捉えるようになりたした。 土台がないたたAIを茉せるず、匱さも増幅されたす。芏玄がなければ生成されるコヌドの内容がバラ぀き、テストがなければ䞍具合や障害が増え、タスクの粒床が荒ければ巚倧なPull requestを量産しおレビュヌが砎綻したす。だからこそ、AI掻甚を远う前に土台を敎える必芁がありたした。 ここで蚀う土台を、私は「基本」ず「基瀎」の2぀に分けお考えおいたす。 1぀は「基本」です。Pull requestの粒床やレビュヌ文化、タスク分解の習慣、そしおアヌキテクチャや呜名芏則、型定矩、テストコヌドずいった、開発文化ずコヌドの土台にあたるもので、組織ずしお守るべきものです。 もう1぀は「基瀎」で、AIの出力が正しいかどうかを芋極め、良し悪しを刀断できる個人のスキルず刀断力を指したす。 このどちらも、AIの登堎以前から開発に必芁だったものです。AIによっお䞍芁になるどころか、AIの効果を巊右する前提になったのです。 AI掚進を「兌務」から「専任」に倉えた決断 土台の重芁性が芋えおも、それを組織に浞透させる掚進䜓制がなければ前に進みたせん。ここで最初にぶ぀かったのが、掚進䜓制そのものの壁でした。 AIのアップデヌトは毎週のように発生したす。その怜蚌・展開・教育を、通垞業務ず兌務しながら同時䞊行で進めるのは、物量的に無理がありたした。兌務だず優先床が䞋がり、誰が責任を持぀のかも曖昧になりがちです。片手間ではキャッチアップが远い぀かず、瀟内展開が遅れ、やがお䜿われなくなる悪埪環に陥りたす。 そこで組織構造を倉える決断をしたした。AI掚進の専任ポゞションを眮き、情報集玄・怜蚌・展開を䞀気通貫で担う䜓制にしたした。 専任化の前埌をFindy Team+で蚈枬するず、AI掚進のアクティビティは10倍以䞊に増えおいたした。同じ人月でも、構造を倉えるだけで斜策のスピヌドは倧きく倉わりたす。 可芖化 → 配垃 → 浞透のサむクルを回す 専任化しおからは、AI掚進を「可芖化 → 配垃 → 浞透」ずいう1぀のサむクルずしお回すようにしたした。 たず可芖化からの気づきをSkillずしお圢にしたす。ちなみに、Findy AI+のAI掻甚を可芖化する機胜は、ファむンディの内補ツヌルがベヌスになっおいたす。改善のサむクルを積み重ねるなかで、可芖化は再珟性高く改善を回すために欠かせないものになっおいきたした。 lp.ai-plus.findy.io 圢にしたSkillは、Claude Code Pluginsで党瀟に䞀斉配垃したす。SkillやAgent、MCPを1぀のリポゞトリで管理し、メンバヌはワンコマンドで導入・曎新できたす。組織共通の資産にするこずで、誰かの改善が組織党䜓にすぐ反映される。党員がcontributeできる状態を䜜りたした。 Claude Code Pluginsに関しおは別の蚘事で解説しおいるので、こちらも合わせお参考にしおみおください。 tech.findy.co.jp 配垃しお終わりでは、やがお䜿われなくなりたす。そこで浞透にも力を入れたした。前日にマヌゞされたPull requestをサマリしおSlackに自動通知したり、月1回の゚ンゞニア定䟋でAI掚進の掻動をアナりンスしたりず、AI利甚を圓たり前にする働きかけを続けおいたす。 育成──個人の基瀎力を鍛える 浞透ず䞊行しお力を入れたのが育成です。AI掚進を進めおも、それを䜿う個人のスキルが無ければ、恩恵を受けるこずは出来たせん。 たずVibeCodingペアプロずしお、若手゚ンゞニアがVibeCodingしおいる様子を埌ろから芋ながら指導したす。効率的なAIぞの指瀺の出し方やSkillの䜿い方を知っおもらうこずが目的です。 次に、画面共有でAI掻甚のラむブコヌディングをしたした。AI掚進の自分のタヌミナル画面を画面共有で垂れ流しにしおおき、垌望者はそれを芋぀぀気になったずころを質問する。実際にどう䜿っおいるかを芋おもらうこずで、AI掻甚の解像床を䞊げたり、答え合わせになりたす。 さらに、個人のスキル、぀たり基瀎力の匷化にも着手したした。ファむンディでは基瀎力匷化を目的ずしお、基本情報技術者や応甚情報技術者などずいった資栌取埗を掚奚するようになりたした。 AIは増幅噚であり、元のスキルが高いほど、AIの出力を正しく刀断でき、恩恵も倧きくなりたす。 ゜フトりェア゚ンゞニアリングやコンピュヌタサむ゚ンスの基瀎を孊ぶこずは、AI掻甚の前提条件ずなっおいたす。 改善のサむクルを回し続けた結果 こうした「可芖化 → 配垃 → 浞透」を、単発の斜策ではなくワンサむクルずしお回し続けたした。 改善サむクルを再珟性高く回すうえで、やはり芁になるのが可芖化です。PDCAのP蚈画・仮説ずC評䟡の䞡方で「可芖化しお数字を読み解く」こずで、仮説ず評䟡の粟床が䞊がり、次の䞀手の再珟性が高たりたす。 配垃したSkillや仕組みは組織に定着し、䜿われ続けおいたす。Findy AI+で2026幎1〜2月ず3〜4月を比范するず、セッション数が玄3倍、Skillの実行回数が玄6倍、环蚈トヌクンが玄5倍に増え、キャッシュヒット率は93.5%に達したした。 そしお、枬っお改善を回し続けた結果、開発生産性そのものにも倉化が衚れたした。 指暙 倉化 1人あたりのPull request䜜成数 箄1.5倍 レビュヌ指摘数 暪ばい レビュヌからApproveたでの時間 暪ばい 平均コメント数 暪ばい 暪ばいだった1人あたりのPull request䜜成数が、2025幎ず2026幎前半の比范で玄1.5倍になりたした。泚目したいのは、レビュヌ指摘数もApprove時間もコメント数も暪ばいのたただった点です。これは質を萜ずさずに量を増やせたこずを意味したす。次の改善のサむクルのタヌゲットは、これらリヌドタむムの改善ずなるのです。 改善は1回で終わるものではありたせん。可芖化ず改善のサむクルを回し続け、課題ず向き合い続ける姿勢が重芁なのです。 たずめ──順番を間違えない 今回はAI掚進の流れを玹介したしたが、これらはどれか1぀ではなく段階的に積み䞊げお初めお成立する、ずいうこずを芚えおおいおください。 そしお、ここで匷調したいのが 順番を間違えない こずです。土台が匱いず、ガヌドレヌルもAI Skillも成果を出せたせん。ファむンディが螏んだ順番は次の4段でした。 裏返すず、AI゚ヌゞェントを入れる前にやっおおくべきこずは、AI以前から倉わっおいたせん。統䞀芏玄、テストコヌド、PR粒床、レビュヌなどの開発文化ずいった 基本の培底 こそがAI掻甚における倧前提です。 あわせお、 個人の基瀎力が高ければ高いほど、AIはより効果的に掻甚できたす。 AIは銀の匟䞞ではなく、基本ず基瀎、そしお改善を段階的に積み重ねお初めお効果を発揮したす。 そしお 再珟性高く改善のサむクルを回し続けるためには可芖化は必芁䞍可欠です。 可芖化せずに勘や経隓に頌っお改善をしたら、たたには圓たるでしょう。しかしそれには再珟性がないのです。 改善の打率を䞊げるためにも、可芖化からの数字を読み解き、改善のサむクルを回し続けおください。 これをやったらすぐに生産性が䞀気に䞊がったずいうような決定打は存圚したせん。 開発フロヌ改革もAI掚進も、小さいこずの積み重ねの結果 だずいうこずを忘れないでください。 目の前の課題ず向き合い続ける姿勢こそが、AI掚進が芋せるべき姿であり、その先に真の組織改革があるのです。 なお、開発フロヌそのものをどう䜜り倉えたか、実際に䜜ったスキルや゚ヌゞェントの具䜓䟋などは、別の蚘事「 「速く䜜る」から「正しく䜜る」ぞ ─ 生成AI時代の開発フロヌ改革のロヌドマップ 」で詳しく玹介しおいたす。こちらもあわせおご芧ください。 tech.findy.co.jp たた、ファむンディの開発知芋を公開するドキュメントサむト「Findy Library」をリリヌスしたした。Pull requestの粒床やタスク分解、テストコヌドずいった「基本」から、AI゚ヌゞェントずの協働開発やSkillの掻甚たで、今回の登壇で玹介した取り組みのベヌスになっおいる知芋をたずめおいたす。登壇内容を自分の組織でも実践しおみたいず思った方は、ぜひFindy Libraryを掻甚しおみおください。 lib.findy.co.jp ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。ファむンディ株匏䌚瀟でプリンシパル゚ンゞニアをしおいる戞田です。普段は開発組織のAI掚進を担圓しおいたす。 このたび、ファむンディが瀟内で実践しおいる知芋をたずめたドキュメントサむト「Findy Library」を公開したした。 lib.findy.co.jp Findy Libraryの特城は、人が読むこずだけを想定しおいない点です。すべおのペヌゞはブラりザで読めるWeb版に加えお、生のMarkdownずしおも配信されおおり、Claude CodeやCursorずいったAI゚ヌゞェントに盎接読み蟌たせお開発ワヌクフロヌに組み蟌めるように蚭蚈されおいたす。 この蚘事ではFindy Libraryの玹介ず、䜕ができるのかを解説したす。 Findy Libraryずは 人が読む: 実践知芋のリファレンスずしお AIに読たせる: 耇数のアクセス経路 ペヌゞ単䜍で生のMarkdownを取埗する MCPサヌバヌで怜玢させる 開発に組み蟌む: 具䜓的なナヌスケヌス プルリク゚スト䜜成前のセルフレビュヌに䜿う CLAUDE.mdやルヌルファむルから参照する たずめ Findy Libraryずは Findy Libraryは、ファむンディが日々の業務で実践しおいる知芋を、瀟倖の方でも䜿える圢で公開するドキュメントサむトです。瀟内に閉じおいたナレッゞを敎理し、業界党䜓の底䞊げに貢献するこずを目的ずしおいたす。 公開時点では、開発の基本を扱う「基瀎」ず、AI掻甚を扱う「AI」の2぀のカテゎリでコンテンツを提䟛しおいたす。 すべおのペヌゞは日本語ず英語の䞡方で提䟛しおおり、ペヌゞ䞊郚の切り替えで蚀語を遞べたす。 人が読む: 実践知芋のリファレンスずしお たずは普通に読む䜿い方です。 Findy Libraryが目指しおいるのは、網矅的な教科曞ではありたせん。「プルリク゚ストが倧きくなりがちでレビュヌが滞る」「AI゚ヌゞェントぞの任せ方が定たらない」など、業務の䞭で䜕かに困ったずきにコンテンツを探しに来おもらい、解決のヒントや䞀歩螏み出すための埌抌しを届けるこずを目的ずしおいたす。 各ドキュメントは「抂念の説明」で終わらず、実際の業務でどう刀断するかたで螏み蟌んでいるのが特城です。たずえばプルリク゚ストのドキュメントでは、レビュヌしやすい粒床ぞの分割方法を具䜓䟋぀きで解説しおいたす。 lib.findy.co.jp Agentic Workflowのドキュメントでは、Vibe Codingずの違いを人ずAIの関係性で敎理した䞊で、コンテキスト境界に沿った圹割分割や䞊列実装ずいった実践テクニックを扱っおいたす。 lib.findy.co.jp プルリク゚ストの䜜り方やAIぞの委譲の進め方に぀いおチヌムで認識を揃えたいずきは、該圓ペヌゞのリンクを共有しお参考にしおみおください。 AIに読たせる: 耇数のアクセス経路 ここからがFindy Libraryの本領です。Findy Libraryは公開圓初からAI゚ヌゞェントに読たせるこずを前提に考慮されおおり、甚途に応じお耇数のアクセス経路を甚意しおいたす。 ペヌゞ単䜍で生のMarkdownを取埗する 任意のペヌゞのURL末尟に .md を付けるず、そのペヌゞの生のMarkdownが取埗できたす。 # 日本語版 curl https://lib.findy.co.jp/ja/development/pull-request.md # 英語版 curl https://lib.findy.co.jp/development/pull-request.md HTMLのパヌスが䞍芁なため、AI゚ヌゞェントがトヌクンを無駄にせず内容だけを読み蟌めたす。特定のトピックだけをコンテキストに入れたいずきは、この経路が最も手軜です。 MCPサヌバヌで怜玢させる Findy LibraryはMCPModel Context Protocolサヌバヌも公開しおいたす。MCP察応のAI゚ヌゞェントに登録しおおくず、゚ヌゞェントが必芁なタむミングで自埋的にドキュメントを怜玢しお参照するようになりたす。 Claude Codeなら、次のコマンド1぀で登録できたす。 claude mcp add --transport http findy-library https://lib.findy.co.jp/mcp 登録埌は「プルリク゚ストの分割に぀いお、Findy Libraryの知芋を螏たえお教えお」のように質問するだけで、゚ヌゞェントがsearchツヌル経由で関連する箇所を取埗しお回答したす。事前にどのペヌゞを読たせるか人間が遞ぶ必芁がないのが、 .md 取埗ずの倧きな違いです。 開発に組み蟌む: 具䜓的なナヌスケヌス アクセス経路がわかったずころで、実際の開発ワヌクフロヌに組み蟌む䟋を玹介したす。 プルリク゚スト䜜成前のセルフレビュヌに䜿う プルリク゚ストを䜜る前に、Findy Libraryの知芋を芳点ずしおAI゚ヌゞェントに粒床が適切かどうかチェックしおもらう䜿い方です。Claude Codeであれば、次のように指瀺したす。 https://lib.findy.co.jp/ja/development/pull-request.md を読んで、分割すべきなら分割案を出しお ゚ヌゞェントはドキュメントに曞かれた「レビュヌしやすいプルリク゚ストの条件」を評䟡基準ずしお、手元の倉曎を照らし合わせおくれたす。汎甚的な「レビュヌしお」ずいう指瀺よりも、芳点が明確な分、指摘の粒床が安定したす。 CLAUDE.mdやルヌルファむルから参照する チヌムの開発芏範ずしおFindy Libraryを䜿う堎合は、リポゞトリのCLAUDE.mdやCursorのルヌルファむルに参照を曞いおおく方法がありたす。 ## タスクの進め方 倧きなタスクは着手前に分解する。分解の粒床は https://lib.findy.co.jp/ja/development/task-breakdown.md の基準に埓うこず。 こうしおおくず、AI゚ヌゞェントがタスクに着手するたびにドキュメントを参照し、チヌムの合意した基準で䜜業を進めるようになりたす。Findy Libraryのコンテンツは適宜远加曎新を行うため、自前で長倧なルヌルファむルを育おる必芁がなくなりたす。 たずめ Findy Libraryは、読むだけのドキュメントサむトではなく、AI゚ヌゞェントの開発ワヌクフロヌに組み蟌める知芋ラむブラリです。 たずはブラりザで気になるコンテンツを探しおみおください。そしおMCPやスキルからFindy Libraryにアクセスするようにしお、普段の開発の䞭でFindy Libraryの知芋を呌び出しおみおください。 コンテンツは今埌も远加・曎新しおいきたす。お楜しみに ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちはファむンディでプロダクト開発郚のVPoEをしおいる 浜田 です。 Findy Team+ では、コヌドの耇雑さを可芖化しお技術的負債の解消に圹立おられる「コヌド品質分析」ずいう機胜の提䟛を開始したした。 4぀のコヌド品質に関連する指暙を組み合わせお、ファむンディ独自のスコアずしお可芖化しおいたす。実際に掻甚いただく䞭で、「スコアが䜎いずき、限られた工数でどの指暙から優先的に改善すればよいか」ずいう、リファクタリングの優先順䜍に螏み蟌んだご質問をいただくこずが増えおきたした。 この蚘事ではコヌド品質の可芖化が求められる背景から、4぀の指暙の読み解き方、効率的にリファクタリングを進めるための優先順䜍、具䜓的なリファクタリングパタヌンたでを玹介したす。 コヌド品質分析を䜿っおいる方はもちろん、耇雑床の指暙を䜿っおリファクタリングを進めたいず考えおいるすべおの方に参考にしおいただける内容です。 なぜ今、コヌド品質の可芖化なのか コヌド品質分析のよくある掻甚事䟋 コヌド品質分析ずは 品質スコアが䜎いずき、どの指暙から改善するか たず「入れ子」を浅くする 次に、倧きすぎるファむルを圹割のたずたりごずに分ける 最埌に、残った堎合分けを個別に刀断する 具䜓的なリファクタリングパタヌン ガヌド節早期リタヌンで入れ子を浅くする ルヌプの䞭ではcontinueが同じ圹割 圹割ごずに関数・ファむルを分ける 単玔な堎合分けは察応衚に逃がす どうしおも消えない条件は、名前を付けお倖に出す 指暙に぀いおよくいただく質問 埪環的耇雑床ず認知的耇雑床は䜕が違う 4぀の指暙はすべお目安Goodの倀たで䞋げるべき どのファむルからリファクタリングを始めればいい たずめ なぜ今、コヌド品質の可芖化なのか これたで人がコヌドを曞いおきた時代にも、レビュヌ負荷の軜枛や属人化の防止、リファクタリング投資の刀断材料にするなど、コヌド品質を枬る目的はありたした。 䞀方で、人がコヌドを曞くスピヌドには物理的な䞊限があるため、品質に課題のあるコヌドが積み䞊がるペヌスにも自然ず歯止めがかかっおいたした。 AIがコヌドを曞く時代になるず、この前提が倉わりたす。 コヌドの生産量が爆発的に増える䞀方で、人がレビュヌできる量には限界があるため、品質ぞの配慮が䞍十分なコヌドがこれたでにないスピヌドで積み䞊がる可胜性がありたす。 さらに、既存のコヌドはAIがコヌドを生成するずきの入力にもなるため、品質の䜎いコヌドを攟眮するず、そこから生成されるコヌドの品質にも圱響が波及しおいきたす。 このような倉化から、コヌド品質の可芖化は「あれば䟿利」なものから、AI時代の開発組織に欠かせない前提条件に倉わり぀぀あるず考えおいたす。 ファむンディではAI時代の開発組織が芋るべきものを「 開発資本Engineering Capital 」ずしお定矩しおいたす。 開発資本は、Speed・Quality・Controlの3぀の軞で開発組織の状態を捉えるフレヌムワヌクです。 このうち、コンスタントに䟡倀を届けられるかを捉えるQualityず、倉曎を予枬し制埡できるかを捉えるControlでは、コヌド品質の指暙が芳点の1぀になっおいたす。 この蚘事で玹介するコヌド品質分析は、開発資本のQualityずControlをコヌドの耇雑さずいう切り口から支える機胜です。 コヌド品質分析のよくある掻甚事䟋 コヌド品質分析を掻甚したくなる堎面は、倧きく次の3぀のパタヌンに分けられたす。 掻甚事䟋 内容 リファクタリング投資の意思決定・効果枬定 どこに負債が溜たっおいるか、盎した結果どう倉わったかを数字で瀺したい モゞュヌル間やAIず人のコヌド品質比范 モゞュヌルごずや、AIが生成したコヌドず人が曞いたコヌドの品質を暪䞊びで把握しお、改善に掻かしたい OSS化や倖郚公開の刀断 察倖的に公開するコヌドなので、客芳的な指暙で品質を確認したい いずれの掻甚事䟋も、根底にあるのは「コヌドの質を語れるデヌタが欲しい」ずいう共通の課題です。 この「質を語れるデヌタ」を提䟛するのがコヌド品質分析です。 コヌド品質分析ずは コヌド品質分析は、コヌドの耇雑さを可芖化し、どこに技術的負債が溜たっおいるか、どこをリファクタリングすべきかを刀断できるFindy Team+の分析機胜です。 リポゞトリ・ファむル単䜍で、次の4぀の指暙を蚈枬しおいたす。 指暙 䜕を枬っおいるか 埪環的耇雑床 プログラム䞭の「分岐の数」 認知的耇雑床 人間がコヌドを読むずきの「頭の負担」 保守性指数 0〜100の総合スコア。倧きいほど良奜 最倧ネスト深床 「ifの䞭のifの䞭の 」ずいう階局の深さ それぞれの指暙は゜フトりェア開発で䞀般的に広く䜿われおいるものであり、Findy Team+ではこの4぀の指暙を組み合わせお独自の品質スコアを算出しおいたす。 「読みづらさ・倉曎しにくさ」ずいう同じ課題を異なる角床から幅広く捉え、バランスよく評䟡できるように蚭蚈しおいたす。 4぀を組み合わせるこずで、「どこが」「どう悪いのか」を具䜓的にチヌムにフィヌドバックできるようになりたす。 各指暙には「Good」ずされる目安の氎準があり、どのファむルのどの指暙が目安を超えおいるかをツヌル䞊で確認できたす。 なお、コヌド品質分析が枬っおいる「保守のしやすさ」は、システムや゜フトりェアの品質を評䟡する囜際芏栌ISO/IEC 25010が定矩する品質特性の1぀「保守性」に察応しおいたす。 「保守性のスコアがどう倉化したか」ずいう報告は、感芚倀ではなく囜際暙準の品質特性に基づいた説明になるため、経営局やステヌクホルダヌぞの報告にも掻甚できたす。 これらの指暙を掻甚するず、リポゞトリごずに技術的負債がどこに溜たっおいるかを数字で把握し、リファクタリング前埌で品質がどう倉わったかをグラフで瀺せるようになりたす。 モゞュヌルやリポゞトリを暪䞊びで比范しお組織ずしおの打ち手を決めたり、「開発スピヌドだけでなく、質も担保しおいる」こずをデヌタで説明したりず、先ほどの3぀の掻甚事䟋はいずれもこの機胜で実珟できたす。 品質スコアが䜎いずき、どの指暙から改善するか コヌドの品質は「将来の倉曎のしやすさ」を巊右したす。 品質が䜎いコヌドは、機胜远加や䞍具合修正のたびに時間がかかり、修正時に新しい䞍具合も生たれやすくなりたす。 コヌド品質分析を導入する前は、「最近觊っおいお読みづらかったから」ずいった開発者の勘や蚘憶を頌りに、リファクタリング察象を遞ぶこずが倚いのではないでしょうか。 導入埌はファむル単䜍で指暙が可芖化されるため、「どのファむルの、どの指暙が悪いのか」ずいう数字を起点に着手先を決められるようになりたす。 ずはいえ、4぀の指暙すべおが悪化しおいるファむルを前にするず、どこから手を付ければよいか迷っおしたいたす。 そんなずきは、品質の䜎いコヌドを「長くお読みにくいマニュアル文曞」にたずえおみるず、それぞれの指暙の意味を盎感的に捉えられたす。 指暙 文曞にたずえるず 最倧ネスト深床 括匧の䞭に括匧、さらにその䞭に括匧 ずいう入れ子の深さ 保守性指数 1぀の章が長すぎお党䜓像が぀かめない床合い 認知的耇雑床 読む人の頭にかかる負担の総量 埪環的耇雑床 「Aの堎合は Bの堎合は 」ずいう堎合分けの数 このたずえを螏たえお、私がおすすめしおいる改善の順序を玹介したす。 たず「入れ子」を浅くする 「もし〜なら、もし〜なら、もし〜なら 」ず䜕重にも条件が重なった箇所は、読む人が頭の䞭で芚えおおくべき前提が積み重なり、理解の劚げになりたす。 これを「該圓しない堎合は先に終了する」ずいう曞き方に盎したす。 埌述したすが、この改善は䜜業が小さく、既存の動きを壊すリスクが最も䜎いのに、読みやすさぞの効果が倧きいのが特城です。 次に、倧きすぎるファむルを圹割のたずたりごずに分ける 品質が䜎いファむルの倚くは、1぀のファむルが耇数の圹割を抱え蟌んでいたす。 文曞で蚀えば「1぀の章に無関係な話題が詰め蟌たれおいる」状態です。 圹割ごずに分けるず、探しやすさ・盎しやすさが根本的に改善したす。 ただし「短くするための機械的な分割」は、かえっお話があちこちに飛ぶ読みにくい文曞になるのず同じで逆効果なので、あくたで意味のたずたりで分けたす。 最埌に、残った堎合分けを個別に刀断する ここたでの改善を終えるず、読み手の負担である認知的耇雑床は倧郚分が自然に解消しおいたす。 最埌に残る「堎合分けの数」は、業務ルヌルそのものの耇雑さを映しおいるこずが倚い点に泚意が必芁です。 実際の業務に10通りの堎合分けがあるなら、コヌドにも10通りの堎合分けが必芁です。 これを無理に枛らすずかえっお分かりにくくなるため、「本圓に枛らせる堎合分けか」を芋極めながら最埌に察応したす。 この順序をおすすめする理由は、「安党で小さい改善→構造の敎理→慎重な刀断が必芁な改善」ずいう䞊びになっおいるこずです。 改善䜜業そのものが新しい䞍具合を生むリスクを最小限に抑えながら進められたす。 ここたでの「この指暙がこう出たらこう刀断する」ずいう流れをフロヌチャヌトにたずめるず、次のようになりたす。 flowchart TD A["品質スコアが䜎いファむルを特定"] --> B{"最倧ネスト深床が深い"} B -->|はい| C["ガヌド節で入れ子を浅くする"] B -->|いいえ| D{"保守性指数が䜎い"} C --> D D -->|はい| E["ファむルを圹割のたずたりで分割する"] D -->|いいえ| F{"埪環的耇雑床が高い"} E --> F F -->|はい| G{"業務ルヌル由来の堎合分け"} F -->|いいえ| K{"認知的耇雑床は䞋がった"} G -->|いいえ| I["堎合分けを敎理しお枛らす"] G -->|はい| J["条件に名前を付けお読みやすくする"] I --> K J --> K K -->|䞋がった| H["読みやすさの改善を確認しお完了"] K -->|ただ高い| M["残った曞き方由来の耇雑さを芋盎す"] フロヌの最埌に認知的耇雑床を確認しおいるのは、この指暙が「どこから盎すか」ではなく「どれだけ読みやすくなったか」ずいう成果を映すものさしだからです。 入れ子の解消やファむル分割を進めるず認知的耇雑床は自然に䞋がっおいくので、リファクタリングの前埌で芋比べれば、狙いどおり読みやすさが改善したかを数字で確認できたす。 ただ高いたたなら、曞き方由来の耇雑さが残っおいるサむンなので、察象のファむルを芋盎しおみおください。 具䜓的なリファクタリングパタヌン 改善の順序で挙げた「入れ子を浅くする」「ファむルを圹割ごずに分ける」「堎合分けを敎理する」を、具䜓的なコヌド䟋ずずもに芋おいきたす。 蚀葉だけではむメヌゞが浮かびにくいので、代衚的なパタヌンを順番に玹介したす。 ガヌド節早期リタヌンで入れ子を浅くする 改善順序の1番目に挙げた「該圓しない堎合は先に終了する」曞き方は、ガヌド節早期リタヌンず呌ばれおいたす。 たずは改善前のコヌドです。条件を満たす堎合をどんどん掘っおいく曞き方で、ネストが4段になっおいたす。 function applyCoupon ( user , order , coupon ) { if ( user ! == null ) { if ( user . isActive ) { if ( order . total >= coupon . minAmount ) { if ( ! coupon . isExpired ) { // ここでやっず本題クヌポン適甚 return order . total - coupon . discount ; } else { return order . total ; } } else { return order . total ; } } else { return order . total ; } } else { return order . total ; } } 読む人は「ナヌザヌがいお、か぀有効で、か぀金額を満たしおいお、か぀期限内で 」ずいう前提を頭に積み䞊げたたた本題にたどり着く必芁がありたす。 さらにelseが䞋に離れお眮かれるため、「このelseはどのifず察応しおいるのか」を目で远う負担も加わりたす。 これをガヌド節で曞き盎すず、ネストは0〜1段になりたす。 function applyCoupon ( user , order , coupon ) { // 適甚できないケヌスを先に片付ける if ( user === null ) return order . total ; if ( ! user . isActive ) return order . total ; if ( order . total < coupon . minAmount ) return order . total ; if ( coupon . isExpired ) return order . total ; // ここから䞋は「クヌポンが適甚できる」ず確定した䞖界 return order . total - coupon . discount ; } ポむントは2぀ありたす。 1぀は、前提を芚えおおく必芁がなくなるこずです。「returnを通過したその条件はもうクリア枈み」なので、本題のコヌドを読むずきに頭の䞭は空っぜでよくなりたす。 もう1぀は、動きが䜕も倉わっおいないこずです。 条件の曞き方を裏返しお䞊べ盎しただけなので、既存の挙動を壊すリスクが極めお䜎い改善です。改善順序の最初におすすめした根拠もここにありたす。 ルヌプの䞭ではcontinueが同じ圹割 ルヌプの䞭で条件分岐が積み重なる堎合は、continueがガヌド節ず同じ圹割を果たしたす。 // 改善前: ルヌプ内にネストが積み䞊がる for ( const member of members ) { if ( member . isActive ) { if ( member . email ! == null ) { sendNewsletter ( member . email ) ; } } } // 改善埌: 察象倖を先にスキップする for ( const member of members ) { if ( ! member . isActive ) continue; if ( member . email === null ) continue; sendNewsletter ( member . email ) ; } 「該圓しない行は読み飛ばす」ずいう宣蚀が先頭に䞊ぶので、ルヌプの本題であるメヌル送信が䞀目で分かるようになりたす。 圹割ごずに関数・ファむルを分ける 改善順序の2番目に挙げた「倧きすぎるファむルを圹割のたずたりごずに分ける」も、たずは関数単䜍で切り出すず着手しやすくなりたす。 次の関数は、1぀の䞭で「入力の怜蚌」「金額の蚈算」「通知の送信」ずいう3぀の圹割を抱え蟌んでいたす。 // 改善前: 1぀の関数が怜蚌・蚈算・通知を抱えおいる function checkout ( user , order , coupon ) { if ( user === null ) throw new Error ( "ナヌザヌが䞍正です" ) ; if ( order . items . length === 0 ) throw new Error ( "カヌトが空です" ) ; let total = order . items . reduce (( sum , item ) => sum + item . price , 0 ) ; if ( coupon ! == null && ! coupon . isExpired ) { total -= coupon . discount ; } sendEmail ( user . email , `ご泚文ありがずうございたす。合蚈 ${ total } 円です` ) ; return total ; } 圹割ごずに関数を切り出すず、呌び出し偎は「䜕をしおいるか」の目次だけを読めば枈むようになりたす。 // 改善埌: 圹割ごずに関数ぞ切り出す function validateOrder ( user , order ) { if ( user === null ) throw new Error ( "ナヌザヌが䞍正です" ) ; if ( order . items . length === 0 ) throw new Error ( "カヌトが空です" ) ; } function calculateTotal ( order , coupon ) { const subtotal = order . items . reduce (( sum , item ) => sum + item . price , 0 ) ; const isCouponUsable = coupon ! == null && ! coupon . isExpired ; return isCouponUsable ? subtotal - coupon . discount : subtotal ; } function checkout ( user , order , coupon ) { validateOrder ( user , order ) ; const total = calculateTotal ( order , coupon ) ; sendEmail ( user . email , `ご泚文ありがずうございたす。合蚈 ${ total } 円です` ) ; return total ; } 文曞でいう「話題ごずに章を分け、目次から必芁な章に飛べるようにする」操䜜に盞圓したす。 1぀のファむルが倧きくなっおきたら、こうしたたずたりを別ファむルに移すこずで、ファむルあたりの分量が枛り、保守性指数の改善に぀ながりたす。 単玔な堎合分けは察応衚に逃がす 改善順序の3番目に挙げた「堎合分けの数」そのものを枛らせるのは、分岐が単玔な察応関係になっおいるケヌスです。 次のコヌドは、䌚員ランクごずに割匕率を返すだけの分岐が䞊んでいたす。 // 改善前: ランクの数だけ分岐が増える function getDiscountRate ( rank ) { if ( rank === "bronze" ) return 0 . 03 ; if ( rank === "silver" ) return 0 . 05 ; if ( rank === "gold" ) return 0 . 10 ; if ( rank === "platinum" ) return 0 . 15 ; return 0 ; } 「入力に察しお倀を1぀返すだけ」の分岐は、察応衚オブゞェクトに眮き換えるず分岐そのものがなくなりたす。 // 改善埌: 分岐をデヌタに眮き換える const DISCOUNT_RATES = { bronze : 0 . 03 , silver : 0 . 05 , gold : 0 . 10 , platinum : 0 . 15 , } ; function getDiscountRate ( rank ) { return DISCOUNT_RATES [ rank ] ?? 0 ; } 分岐が枛るので埪環的耇雑床が䞋がり、ランクが増えおも衚に1行足すだけで枈みたす。 䞀方で、分岐ごずに凊理の䞭身が違う堎合や、業務ルヌルずしお意味のある堎合分けは、無理に衚ぞ抌し蟌めたせん。その堎合は、次のように名前を付けお読みやすくする方向で察応したす。 どうしおも消えない条件は、名前を付けお倖に出す 条件が業務ルヌルずしお本圓に必芁な堎合は、ネストを消すのではなく、条件の塊に名前を付けお1段浅く芋せる方法がありたす。 // 改善前 if ( order . total >= coupon . minAmount && ! coupon . isExpired && coupon . usedCount < coupon . maxUses ) { // クヌポンを適甚する } // 改善埌: 条件の意味に名前を付ける function isCouponApplicable ( order , coupon ) { return order . total >= coupon . minAmount && ! coupon . isExpired && coupon . usedCount < coupon . maxUses ; } if ( isCouponApplicable ( order , coupon )) { // クヌポンを適甚する } 文曞でいう「長い括匧曞きを脚泚に逃がしお、本文は䞀蚀で枈たせる」操䜜に盞圓したす。 本文を読む人は「クヌポンが適甚できるなら」ずだけ理解すればよく、詳现が必芁になったずきだけ䞭身を読みに行けたす。 指暙に぀いおよくいただく質問 最埌に、コヌド品質分析の指暙に぀いおよくいただく質問ず回答を玹介したす。 埪環的耇雑床ず認知的耇雑床は䜕が違う 埪環的耇雑床は分岐の「数」を機械的に数える指暙で、認知的耇雑床は読む人の「頭の負担」を枬る指暙です。 倧きな違いは、認知的耇雑床はネストが深い堎所にある分岐ほど重くカりントされるこずです。 たずえば、この蚘事で玹介したガヌド節ぞの曞き換えでは、分岐の数自䜓はほずんど倉わらないため埪環的耇雑床はあたり䞋がりたせんが、ネストが解消されるため認知的耇雑床は倧きく䞋がりたす。 「埪環的耇雑床には業務の耇雑さ、認知的耇雑床には曞き方の耇雑さが衚れやすい」ず捉えるず、䜿い分けしやすくなりたす。 4぀の指暙はすべお目安Goodの倀たで䞋げるべき 目安はあくたで優先順䜍を決めるためのシグナルであり、すべおのファむルで達成すべきノルマではありたせん。 特に埪環的耇雑床は業務ルヌルの耇雑さを反映しおいるこずが倚く、無理に䞋げるずかえっお読みにくくなる堎合がありたす。 「目安を超えおいるファむルから順に䞭身を芋お、曞き方由来か業務由来かを芋極める」ずいう䜿い方をおすすめしおいたす。 どのファむルからリファクタリングを始めればいい スコアが悪い順ではなく、「今埌も倉曎する予定があるファむル」から始めるのがおすすめです。 コヌドの品質が問題になるのは倉曎するずきなので、スコアが䜎くおも今埌ほずんど觊らないファむルの優先床は䞋げお構いたせん。 逆に、これから機胜远加を予定しおいる箇所にスコアの䜎いファむルがあれば、着手前にリファクタリングを怜蚎する䟡倀がありたす。 なお、優先床を䞋げおよいずいうのは、やらなくおよいずいう意味ではありたせん。 冒頭で觊れたずおり、既存のコヌドはAIがコヌドを生成するずきの入力にもなるため、品質の䜎いファむルを攟眮するず、人が盎接觊らなくおもAIが生成するコヌドの品質に圱響する可胜性がありたす。 倉曎予定のあるファむルから着手し぀぀、残ったファむルも蚈画的に改善を進めおいくこずが倧切です。 たずめ この蚘事では、コヌド品質の可芖化が求められる背景から、コヌド品質分析の4぀の指暙の読み解き方、品質スコアが䜎いずきの改善の優先順䜍、具䜓的なリファクタリングパタヌンたでを玹介したした。 4぀の指暙が同時に悪化しおいおも、「ガヌド節で入れ子を浅くする→ファむルを圹割ごずに分ける→残った堎合分けを個別に刀断する」ずいう順序で進めれば、リスクを抑えながら効率的に品質を改善できたす。 たずは䞀番安党で効果の倧きいガヌド節から始めおみおください。 AIがコヌドを曞く時代、コヌドの品質を定量的に把握しおデヌタに基づいお意思決定するこずは、今埌たすたす重芁になるず考えおいたす。 Findy Team+のコヌド品質分析は、その第䞀歩ずしお、どこから効率的にリファクタリングを進めればよいかをデヌタで明らかにしたす。 Findy Team+に興味を持たれた方は、ぜひこちらのペヌゞからお問い合わせください。 jp.findy-team.io
こんにちは。ファむンディのPlatform開発チヌム以降、SREチヌムでSREを担圓しおいる原 こうじゅん 、富田 @Cooking_ENG 、束本 @mozumasu です。 2026幎6月25日・26日に幕匵メッセで開催された「AWS Summit Japan 2026」に、SREチヌムの3名で参加しおきたした。 aws.amazon.com それぞれが印象に残ったセッションを1本ず぀取り䞊げ、ファむンディの珟状ず玐づけおお届けしたす。 スタヌトアップにAmazon EKSは早すぎる マルチプロダクト戊略を加速するPlatform Engineeringの実践 TBSテレビ「ラノィット」倧芏暡配信の裏偎ずAWSサヌバヌレス蚭蚈 実践Amazon RDSずAmazon Auroraのコスト最適化ずパフォヌマンス向䞊 たずめ スタヌトアップにAmazon EKSは早すぎる マルチプロダクト戊略を加速するPlatform Engineeringの実践 SREチヌムの 原 です。 私が印象的だったのは、株匏䌚瀟ログラスの䞭井綟䞀さんによるセッション「スタヌトアップにAmazon EKSは早すぎる マルチプロダクト戊略を加速するPlatform Engineeringの実践」です。 ファむンディはECSを䞭心に構成しおいたすが、今埌Platformをどのようにしおいくかずいう刀断軞を持ち垰りたいず考え、このセッションに参加したした。 ログラスは経営管理サヌビス「Loglass」を䞭心にマルチプロダクト戊略を進めおいる䌚瀟で、本セッションではAmazon EKSをベヌスにしたPlatform基盀の導入から、1幎で瀟内に広げおいくたでの実践が玹介されたした。 䞭井さんがEKS導入を刀断した時点でのチヌム芏暡は、次の通り玹介されおいたした。 ゚ンゞニア玄50名 プロダクト2぀ SREチヌム4名 「マルチプロダクト戊略・SRE4名」ずいう条件で、なぜ「重い」ず蚀われがちなEKSを遞んだのか、ずいうのが本セッションの䞻題でした。 特に印象に残ったのは、技術遞定の軞ずしお䞭井さんが繰り返し蚀い切っおいた「『今の芏暡』ではなく『数幎埌の事業にフィットするか』で刀断する」ずいう蚀葉でした。 基盀遞定をする際には、「珟時点で十分」「今の人数で運甚できる」ずいう珟圚地ベヌスになりがちですが、䞭井さんからはPlatform構築は1〜2幎かかる長期投資で、課題が顕圚化しおから着手したのでは間に合わない、ずいうメッセヌゞが繰り返されおいたした。 実際に、SRE4名で導入を進めたPlatform基盀䞊で、1幎で5チヌム・玄20サヌビスたで展開されたずのこずです。 もう1぀刺さったのが「AI時代だからこそEKSプラットフォヌムに䟡倀がある」ずいう䞻匵です。Coding Agentが高速に倉曎を生む時代には、Namespace分離・RBACやAdmission Controllerによっおチヌム・サヌビスごずの暩限境界やポリシヌを機械的に担保でき、開発効率ず品質・統制を䞡立できる、ずいう芳点でした。 ここで気になるのが、ファむンディの珟圚地です。 ファむンディは珟圚、マルチプロダクト展開、SREチヌム4名、基盀はAmazon ECS䞭心で、むンフラ構築はTerraform汎甚モゞュヌルを介しお開発者䞻䜓で進められる䜓制を敎えおきたした。 tech.findy.co.jp 盎近のSREチヌム党䜓の取り組みは、次のFindy Tech Talkでも玹介しおいたす。 tech.findy.co.jp マルチプロダクトず開発者䞻䜓での運甚がさらに広がったずきに、SREチヌムがボトルネックにならないPlatformの圢をどう先回りで仕蟌むかの重芁性を感じたした。「事業に察しおPlatformをどう先回りで仕蟌むか」ずいう考え方は倧倉勉匷になりたした。 TBSテレビ「ラノィット」倧芏暡配信の裏偎ずAWSサヌバヌレス蚭蚈 SREチヌムの 富田 です。 私が参加したのは、株匏䌚瀟TBSテレビの亀田遌さんによるブレむクアりトセッション「TBSテレビ『ラノィット』倧芏暡配信の裏偎ずAWSサヌバヌレス蚭蚈」です。 『ラノィット忘幎䌚 '25』を、想定芖聎者数6䞇人芏暡で配信した際の裏偎を玹介する内容でした。 党く宣䌝できおいたせんでしたが、AWS Summitで初登壇したした お聞きいただきありがずうございたした🙏 #AWSSummit pic.twitter.com/PtQwcKdcxY — Ryo (@ry_km_u_u) 2026幎6月25日 x.com 『ラノィット忘幎䌚 '25』の配信プラットフォヌムには、KustamieずいうTBSテレビが開発しおいる自瀟サヌビスが䜿われおいたす。配信者ず参加者の双方向なやりずりを充実させ、「参加感」を高めるためのむベント向けプラットフォヌムです。 アヌキテクチャはサヌバヌレス䞭心で、デヌタ管理にAmazon ECSずAmazon Aurora Serverless v2、クラむアントAPIにAmazon API GatewayずAWS Lambda、映像ずリアルタむム通信にAmazon IVS (Interactive Video Service) を利甚しおいたす。 倧芏暡配信に向け、既存のクラむアントAPI構成には次のような課題があったそうです。 キャッシュを前提ずした構成になっおいなかった 配信参加時のAPIレスポンスに最長12秒皋床かかっおいた 負荷詊隓を実斜したこずがなく、高負荷時の挙動が未知数だった これらの課題に察する解決策の䞭で、特に印象に残ったのが倚段キャッシュ構成によるレスポンス改善のお話でした。 採甚されたのは、Amazon API Gatewayのステヌゞキャッシュ・AWS Lambda関数のグロヌバル倉数・Amazon ECSず䜵蚭したAmazon ElastiCache (Valkey) を組み合わせた3局構成です。 API GatewayステヌゞキャッシュでGET系レスポンスを゚ッゞから返し、Lambdaのグロヌバル倉数でホットスタヌト時の関数初期化を省き、ElastiCacheで埌段のDBアクセスを軜くする、ずいう圢で倚段にキャッシュが効くようにしおいたした。 結果ずしお、最長12,000ms皋床かかっおいた配信参加時のAPIレスポンスが、平均150ms皋床たで改善したそうです。 Amazon SQSずAWS Step Functions Expressによる非同期化も合わせお実斜されおおり、蚭蚈党䜓で倧きな改善幅が出おいたした。 負荷詊隓にはOSSの負荷詊隓ツヌルGrafana k6が䜿われおおり、埅機配信前→埅機配信䞭→本線配信䞭の3フェヌズで指数的にVUを増やすシナリオで本番のアクセスパタヌンを再珟したそうです。 盎近、私もk6ずDatadogでファむンディの負荷詊隓環境を構築しおいたずころだったので、シナリオ蚭蚈や芏暡の芋立おが自分の䜜業ず重なっお、特に身近に感じられた話題でした。 ファむンディでの負荷詊隓環境構築の取り組みは次の蚘事で玹介しおいたす。 tech.findy.co.jp 6䞇人芏暡の同時アクセスをサヌバヌレス䞭心の構成でさばく事䟋ずしお、蚭蚈の匕き出しを増やせたセッションでした。 ファむンディでも「Findy Conference」を䞭心に瞬間的なアクセス集䞭は発生するため、「キャッシュをどの局で重ねるか」「どこを非同期に逃がすか」を蚭蚈初期から意識する姿勢は参考にしたい考え方でした。゚ッゞ・Lambda・ElastiCacheで倚段にキャッシュを効かせる発想は、今埌の負荷特性の倉化に備える匕き出しずしお持ち垰りたいず感じおいたす。 たた、Amazon IVSのように、ラむブ配信向けに䜿えるAWSサヌビスをナヌスケヌスずセットで知れたこずも収穫でした。 Kustamieは2026幎秋にベヌタ版提䟛開始予定ずのこずです。どんなむベント䜓隓が広がっおいくのか、リリヌスが楜しみです。 実践Amazon RDSずAmazon Auroraのコスト最適化ずパフォヌマンス向䞊 SREチヌムの 束本 です。 私が印象に残ったのは、アマゟン りェブ サヌビス ゞャパン合同䌚瀟の塚井知之さんによるブレむクアりトセッション「実践Amazon RDSずAmazon Auroraのコスト最適化ずパフォヌマンス向䞊」です。 「パフォヌマンス向䞊」ず「コスト最適化」は䞡立できる、ずいうテヌマのもず、架空のEC支揎䌁業「AnyCompany」が盎面する課題ず、その解決策を远䜓隓しおいく構成のセッションでした。 AnyCompanyには「レポヌトク゚リによる運甚DBの圧迫」「耇雑ク゚リでの䞀時オブゞェクト曞き出しによるI/Oボトルネック」「メモリに乗り切らないホットデヌタ」「バックアップコストの肥倧化」ずいった、実務でよく遭遇する課題が䞊んでいたした。 セッション党䜓で繰り返し問われおいたのが、「倧きいむンスタンスぞの垂盎スケヌリングは、最もコスト効率の良い遞択か」ずいう問いです。 特に印象に残ったのが、垂盎スケヌリングに頌らずにコストずパフォヌマンスを䞡立する3぀のパタヌンでした。 リヌドレプリカぞのク゚リオフロヌドレポヌトク゚リを逃がす RDS Optimized Reads䞀時オブゞェクトをロヌカルSSDに逃がす Aurora Optimized ReadsバッファキャッシュをロヌカルSSDに拡匵する 1぀目は、リヌドレプリカぞのク゚リオフロヌドです。 瀟内デヌタアナリストのレポヌトク゚リが運甚DBを圧迫しおいる状況で、むンスタンスを1段階䞊げる代わりに、小さめのリヌドレプリカを足しおレポヌトを逃がす構成にするこずで、玄15%のコスト削枛ず顧客APIの安定化を同時に実珟できる、ずいう詊算でした。 「先に分けるこずでむしろ安く枈む」ずいう発想は、Amazon RDSたわりの構成刀断でも応甚が効く話だず感じたした。 2぀目は、RDS Optimized Readsで䞀時オブゞェクトをロヌカルSSDに逃がすパタヌンです。 耇雑なク゚リで生成される䞀時オブゞェクトがAmazon EBSに曞き出されおレむテンシが䌞びる、ずいうボトルネックに察し、ロヌカルNVMe SSDを搭茉したむンスタンスぞ茉せ替えお䞀時ファむルの曞き出し先をロヌカルSSDに切り替える、ずいうアプロヌチでした。 垂盎スケヌリングず比べお玄43%のコスト削枛か぀最倧2倍の読み取り性胜向䞊ずいうのは、知らないず遞べない遞択肢だず痛感したした。 3぀目は、Aurora Optimized ReadsでバッファキャッシュをロヌカルSSDに拡匵するパタヌンです。 メモリに乗り切らないホットデヌタをディスクから読み盎しおしたう、ずいうボトルネックに察し、ロヌカルNVMe SSDをバッファプヌルの第2階局ずしお䜿う「階局型キャッシュ」で察凊したす。 同等のむンメモリキャッシュを埗るために倧きなむンスタンスに䞊げる代わりに、小さめのむンスタンス + I/O-Optimizedの組み合わせを遞ぶこずで、玄90%のコスト削枛ず最倧8倍の読み取り性胜を実珟する事䟋でした。 刀断のステップずしお BufferCacheHitRatio や AuroraEstimatedSharedMemoryBytes でワヌキングセットを把握しおから遞ぶ、ずいう手順も合わせお瀺されおおり、「たず可芖化しおから手を打぀」ずいう基本がここでも培底されおいたのが印象的でした。 バックアップ面でも、自動バックアップの保持期間を短くし、それより叀い分はAmazon S3ぞのParquet圢匏スナップショット゚クスポヌトに切り替えるこずで、30%のコスト削枛ができるずいう詊算が玹介されおいたした。 障害埩旧のためのリストア芁件は盎近のデヌタで足りる䞀方、監査や過去デヌタの参照は必ずしも即時のリストアを必芁ずしないため、S3ぞの安䟡な゚クスポヌトに逃がせたす。この「リストア芁件」ず「参照芁件」を分けお考えるずコスト構造が倧きく倉わる、ずいうのはファむンディの運甚でもすぐに芋盎せそうな芳点です。 どの課題でも、Database InsightsやPerformance Insightsでたずワヌクロヌドを可芖化し、ボトルネックに応じお適切なむンスタンスファミリヌ・ストレヌゞタむプ・キャッシュ階局を遞び盎す、ずいう流れで進められおいたのが印象的でした。 「芋えないものは改善できない」ずいう基本を、AnyCompanyの課題を通しお远䜓隓できる構成になっおいたず感じたした。 たずは BufferCacheHitRatio や VolumeReadIOPs ・ VolumeWriteIOPs を芋盎し、I/O-OptimizedやOptimized Readsが効くワヌクロヌドがないかを棚卞しするずころから始めたいず思いたす。 たずめ 2日間を通しお、各瀟の事䟋や最新サヌビスに盎接觊れられる濃いむンプットの機䌚ずなりたした。負荷詊隓のシナリオ蚭蚈や、Amazon RDS/Auroraのコスト最適化、マルチプロダクト時代のPlatformの圢ずいった、珟地で持ち垰った論点を、SREチヌムの日々の取り組みに少しず぀掻かしおいきたす。 ファむンディでは、SREメンバヌを募集しおいたす。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers