
Bot
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
æè¡ããã°
ç®æ¬¡ ã¯ããã« ECR ã€ã¡ãŒãžã¹ãã£ã³ãšã¯ æ§æã®å
šäœå æ€ç¥ã®ç¶²çŸ
æ§ éç¥ã®ãã€ãºäœæž èªç¥ã®ã¹ããŒã ã³ã¹ã 詊ç®ã®èãæ¹ 詊ç®äŸ Terraform ã«ããæ§ç¯ 1. ECR ã¹ãã£ã³èšå® 2. EventBridge ã«ãŒã« 3. SNS ããã㯠4. AWS ChatbotïŒSlack éç¥ïŒ å®éã®éç¥ãšéçš å°å
¥ããŠã¿ãŠ ãŸãšã ã¯ããã« ããã«ã¡ã¯ãéçºæ¬éšéçº1éšãã¢ããã°ã«ãŒãã®ãšã³ãžãã¢ã® ãã³ãã /rymiyamoto ã§ãã 2025幎æ«ã« Next.js ã® React Server Components ã« DoSïŒãµãŒãã¹æåŠïŒãšãœãŒã¹ã³ãŒãé²åºã®è匱æ§ãå
¬é ãããApp Router ã䜿çšãããµãŒãã¹ã§ã®ã¢ããã°ã¬ãŒã察å¿ãæ±ããããŸããã ãã®ããã«ãå©çšããŠãããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã«æ·±å»ãªè匱æ§ãèŠã€ããããšã¯çãããããŸããã ããããè匱æ§ãå
¬éäžã®ãµãŒãã¹ã«åœ±é¿ããŠããªãããçŽ æ©ãææ¡ã§ããäœå¶ãæŽããã¹ããåŒç€Ÿã§ã ECR ã®ã€ã¡ãŒãžã¹ãã£ã³ãå°å
¥ããŸããã æ¬èšäºã§ã¯ããã®åãçµã¿ã®äžã€ãšã㊠ECR ã®ã€ã¡ãŒãžã¹ãã£ã³ãå°å
¥ããéã®èšèšã»æ§ç¯ã»éçšã«ã€ããŠç޹ä»ããŸãã åãããã« ECR ã®ã€ã¡ãŒãžã¹ãã£ã³ãããããå°å
¥ããããšããŠããæ¹ã®åèã«ãªãã°å¹žãã§ãã ECR ã€ã¡ãŒãžã¹ãã£ã³ãšã¯ Amazon ECR ã®ã€ã¡ãŒãžã¹ãã£ã³ã¯ãã³ã³ããã€ã¡ãŒãžã«å«ãŸãããœãããŠã§ã¢ã®è匱æ§ïŒCVEïŒãæ€åºããæ©èœã§ãã ã¹ãã£ã³ã«ã¯ Basic Scanning ãš Enhanced Scanning ã®2çš®é¡ããããŸãã é
ç® Basic Scanning Enhanced Scanning ã¹ãã£ã³ãšã³ãžã³ ClairïŒãªãŒãã³ãœãŒã¹ïŒ Amazon Inspector2 æ€åºå¯Ÿè±¡ OS ããã±ãŒãžã®èåŒ±æ§ OS ããã±ãŒãž + ããã°ã©ãã³ã°èšèªããã±ãŒãžïŒnpm, pip, Maven çïŒ ã¹ãã£ã³ã¿ã€ãã³ã° ããã·ã¥æ / æå ããã·ã¥æ / ç¶ç¶ã¹ãã£ã³ æé ç¡æ ææïŒã¹ãã£ã³ããã€ã¡ãŒãžæ°ã«å¿ããåŸé課éïŒ æ§æã®å
šäœå å°å
¥ããæ§æã¯ä»¥äžã®éãã§ãã ECR Enhanced Scanning (Inspector2) â èåŒ±æ§æ€ç¥ EventBridge Rule (CRITICAL ã®ã¿ãã£ã«ã¿) â SNS Topic â AWS Chatbot â Slack ãã£ã³ãã«ã«éç¥ èšèšã«ããã£ãŠæèããã®ã¯ä»¥äžã§ãã æ€ç¥ã®ç¶²çŸ
æ§ OS ããã±ãŒãžã ãã§ãªãèšèªããã±ãŒãžãã«ããŒãããã£ããããEnhanced Scanning ãæ¡çšããŸããã察å¿èšèªã®è©³çްã¯å
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã docs.aws.amazon.com äžæ¹ã§ãOS ããã±ãŒãžã®èåŒ±æ§æ€ç¥ã ãã§ååãªã±ãŒã¹ãããŸãã¯ç¡æã§å§ãããã±ãŒã¹ã§ã¯ Basic Scanning ãæåãªéžæè¢ã§ããèªç€Ÿã®èŠä»¶ã«åãããŠæ€èšããŠã¿ãŠãã ããã éç¥ã®ãã€ãºäœæž ãã¹ãŠã® severity ãéç¥ãããšå¯Ÿå¿ã远ãã€ããªããªãããããŸã㯠CRITICAL ã«çµã£ãŠéçšãéå§ããŸãããå®éã« HIGH ãŸã§å«ããŠè©ŠããŠã¿ããšãããæ¬åœã«å¯Ÿå¿ãã¹ãéç¥ãåãããããªããšæããã®ã§ããŸã㯠CRITICAL ã§éçšãéå§ããå¿
èŠã«å¿ããŠãã£ã«ã¿ãåºããæ¹éãšããŠããŸãã èªç¥ã®ã¹ããŒã è匱æ§ã®ååšã«æ°ã¥ããªãããšãäžçªã®ãªã¹ã¯ãªã®ã§ãSlack ãžã®å³æéç¥ãçµã¿èŸŒã¿ãŸãããSlack ãžã®éç¥æ¹æ³ãšããŠã¯ EventBridge â Lambda ã§éç¥å
容ãã«ã¹ã¿ãã€ãºããæ¹æ³ããããŸãããä»åã¯ãŸãæ€ç¥ã§ããç¶æ
ãçŽ æ©ãäœãããšãåªå
ããã³ãŒããæžããã«æ§ç¯ã§ãã AWS Chatbot ãæ¡çšããŸããã ã³ã¹ã Enhanced Scanning 㯠Amazon Inspector2 ã®æéäœç³»ã«åºã¥ããŸããæéã¯ä»¥äžã®2ã€ã§æ§æãããŸãïŒ2026幎4ææç¹ïŒã ææ°ã®æéã¯å
¬åŒããã¥ã¡ã³ããã確èªãã ããã aws.amazon.com ååã¹ãã£ã³: ã€ã¡ãŒãžãããã·ã¥ãããæã®ã¹ãã£ã³ã$0.09 / ã€ã¡ãŒãž åã¹ãã£ã³: ç¶ç¶ã¹ãã£ã³ã«ããæ°ãã CVE ãå
¬éãããéã®èªååã¹ãã£ã³ã$0.01 / ã€ã¡ãŒãž 詊ç®ã®èãæ¹ ã¹ãã£ã³é »åºŠã«ãã£ãŠã³ã¹ãã®æ§é ãç°ãªããŸãã ã¹ãã£ã³é »åºŠ çºçããã³ã¹ã èšç®åŒ ããã·ã¥æ ååã¹ãã£ã³ã®ã¿ æéããã·ã¥æ° à $0.09 ç¶ç¶ã¹ãã£ã³ ååã¹ãã£ã³ + åã¹ãã£ã³ äžèš + ä¿æã€ã¡ãŒãžæ° à åã¹ãã£ã³åæ°/æ à $0.01 åŒç€Ÿã§ã¯æ¬çªç°å¢ã¯ç¶ç¶ã¹ãã£ã³ãéçºç°å¢ã¯ããã·ã¥æã¹ãã£ã³ã§éçšããŠããŸããæ¬çªç°å¢ã§ã¯æ°ãã CVE ãå
¬éãããã¿ã€ãã³ã°ã§ãå³åº§ã«æ€ç¥ãããããç¶ç¶ã¹ãã£ã³ãéçºç°å¢ã§ã¯è匱æ§ãå«ãå®è£
ãå
¥ã£ãæç¹ã§çŽ æ©ãæ€ç¥ãã€ã€ã³ã¹ããæãããããããã·ã¥æã¹ãã£ã³ãé©ããŠããŸãã 詊ç®äŸ äŸãã°ã5ã€ã®ãªããžããªã«å¯ŸããŠæé100åããã·ã¥ããæ¬çªã§ã¯åãªããžããªã«2ã€ã¡ãŒãžãä¿æïŒèš10ã€ã¡ãŒãžïŒããã±ãŒã¹ã§è©Šç®ããŸããåã¹ãã£ã³åæ°ã¯æã«ã©ããããã®é »åºŠã§å¯Ÿè±¡ã® CVE ãæ°ãã«å
¬éããããã«äŸåããŸãããããã§ã¯æ15åçšåºŠãèŠèŸŒã¿ãŸããã é
ç® èšç®åŒ ã³ã¹ã ååã¹ãã£ã³ 100 push à $0.09 $9.00 åã¹ãã£ã³ 10 images à 15å à $0.01 $1.50 æé¡åèš $10.50 å®éã®ã³ã¹ãã¯ãªããžããªæ°ã»ããã·ã¥é »åºŠã»ä¿æã€ã¡ãŒãžæ°ã«ãã£ãŠå€ããã®ã§ãèªç€Ÿã®éçšã«åãããŠè©Šç®ããŠã¿ãŠãã ããã Basic ScanningïŒç¡æïŒãšæ¯èŒãããšã³ã¹ãã¯ããããŸãããèšèªããã±ãŒãžã®èåŒ±æ§æ€ç¥ãæ°èŠ CVE ã®èªååã¹ãã£ã³ãåŸãããããšãèãããšãæ€èšãã䟡å€ã¯ãããšæããŸãã Terraform ã«ããæ§ç¯ 1. ECR ã¹ãã£ã³èšå® ãŸã ECR ã¬ãžã¹ããªã«å¯Ÿã㊠Enhanced Scanning ãæå¹åããŸãã resource "aws_ecr_registry_scanning_configuration" "this" { scan_type = "ENHANCED" rule { scan_frequency = "CONTINUOUS_SCAN" repository_filter { filter = "*" filter_type = "WILDCARD" } } } filter = "*" ã§ã¬ãžã¹ããªå
ã®ãã¹ãŠã®ãªããžããªãã¹ãã£ã³å¯Ÿè±¡ã«ããŠããŸãããªããžããªãåå¥ã«æå®ããæ¹æ³ããããŸãããæ°ãããªããžããªã远å ããéã«ã¹ãã£ã³å¯Ÿè±¡ãžã®è¿œå ãå¿ãããªã¹ã¯ããããããã¯ã€ã«ãã«ãŒãã§å
šäœã察象ã«ããŠããŸãã scan_frequency ã¯ç°å¢ã«ãã£ãŠäœ¿ãåããŠããŸããæ¬çªç°å¢ã§ã¯ CONTINUOUS_SCAN ãéçºç°å¢ã§ã¯ SCAN_ON_PUSH ãèšå®ããŠããŸãã 2. EventBridge ã«ãŒã« resource "aws_cloudwatch_event_rule" "ecr_scan_finding" { name = "ecr-scan-finding-notification" event_pattern = jsonencode ( { "source" : [ "aws.inspector2" ] , "detail-type" : [ "Inspector2 Finding" ] , "detail" : { "status" : [ "ACTIVE" ] , "severity" : [ "CRITICAL" ] , "resources" : { "type" : [ "AWS_ECR_CONTAINER_IMAGE" ] } } } ) state = "ENABLED" } resource "aws_cloudwatch_event_target" "ecr_scan_finding_sns" { rule = aws_cloudwatch_event_rule.ecr_scan_finding.name arn = var.ecr_scan_finding_sns_topic_arn } Enhanced Scanning ã§ã¯ Inspector2 ãã¹ãã£ã³ãšã³ãžã³ãšãªããããã€ãã³ããœãŒã¹ã¯ aws.inspector2 ã«ãªããŸãã Basic Scanning ã®å Žå㯠aws.ecr ã«ãªãã®ã§æ³šæãå¿
èŠã§ãã 3. SNS ããã㯠EventBridge ããåãåã£ãã€ãã³ãã AWS Chatbot ã«æž¡ãããã® SNS ãããã¯ãäœæããŸãã resource "aws_sns_topic" "ecr_scan_finding_topic" { name = "ecr-scan-finding-topic" } resource "aws_sns_topic_policy" "ecr_scan_finding_topic_policy" { arn = aws_sns_topic.ecr_scan_finding_topic.arn policy = data.aws_iam_policy_document.sns_ecr_scan_finding_topic_policy.json } data "aws_iam_policy_document" "sns_ecr_scan_finding_topic_policy" { # EventBridge ããã® Publish ãèš±å¯ statement { sid = "AllowEventBridgeToPublishSNS" effect = "Allow" actions = [ "sns:Publish" ] principals { type = "Service" identifiers = [ "events.amazonaws.com" ] } resources = [ aws_sns_topic.ecr_scan_finding_topic.arn ] condition { test = "StringEquals" variable = "AWS:SourceAccount" values = [ data.aws_caller_identity.current.account_id ] } condition { test = "ArnEquals" variable = "aws:SourceArn" values = [ "arn:aws:events:$ { data.aws_region.current.name } :$ { data.aws_caller_identity.current.account_id } :rule/ecr-scan-finding-notification" ] } } # Chatbot ããã® Subscribe ãèš±å¯ statement { sid = "AllowChatbotToSubscribe" effect = "Allow" actions = [ "sns:Subscribe" ] principals { type = "Service" identifiers = [ "chatbot.amazonaws.com" ] } resources = [ aws_sns_topic.ecr_scan_finding_topic.arn ] condition { test = "StringEquals" variable = "AWS:SourceAccount" values = [ data.aws_caller_identity.current.account_id ] } condition { test = "ArnEquals" variable = "aws:SourceArn" values = [ "arn:aws:chatbot::$ { data.aws_caller_identity.current.account_id } :chat-configuration/slack-channel/alert-to-slack" ] } } } SNS ãããã¯ããªã·ãŒã§ã¯ãEventBridge ããã® Publish ãš Chatbot ããã® Subscribe ã®ã¿ãèš±å¯ããŠããŸãã condition ã§çºä¿¡å
ãçµãããšã§ãæå³ããªããªãœãŒã¹ããã®æäœãé²ãã§ããŸãã 4. AWS ChatbotïŒSlack éç¥ïŒ æåŸã«ãSNS ãããã¯ã®ã¡ãã»ãŒãžã Slack ã«è»¢éãã Chatbot ã®èšå®ã§ãã resource "aws_chatbot_slack_channel_configuration" "chatbot_alert_to_slack" { configuration_name = "alert-to-slack" slack_channel_id = "XXXXXXXXX" # éç¥å
ã® Slack ãã£ã³ãã« ID slack_team_id = "XXXXXXXXX" # Slack ã¯ãŒã¯ã¹ããŒã¹ ID iam_role_arn = var.chatbot_role_arn sns_topic_arns = [ var.ecr_scan_finding_topic_arn, # ä»ã®éç¥çš SNS ãããã¯ãããã«è¿œå ã§ãã ] guardrail_policy_arns = [ "arn:aws:iam::aws:policy/ReadOnlyAccess" ] logging_level = "ERROR" } ããã§ CRITICAL ãªè匱æ§ãæ€ç¥ãããéã«ãSlack ãã£ã³ãã«ã«éç¥ãå±ãããã«ãªããŸãã ãªããAWS Chatbot ã§ã¯åã Slack ãã£ã³ãã«ã«å¯ŸããŠè€æ°ã® configuration ãäœæã§ããŸããããã®ãã configuration_name 㯠alert-to-slack ã®ããã«æ±çšçãªååã«ããŠããŸããããããŠããã°ãä»åŸ WAF ã®ã¢ã©ãŒããªã©å¥ã®éç¥ã远å ããããªã£ãŠã sns_topic_arns ã«ãããã¯ãè¶³ãã ãã§æžã¿ãŸãã å®éã®éç¥ãšéçš å®éã«å±ãéç¥ã¯ä»¥äžã®ãããªåœ¢åŒã§ãã æå㯠CVE ã®è©³çްãŸã§ Slack ã§ç¢ºèªã§ãããã®ã ãšæã£ãŠããã®ã§ãããå®éã«å±ãéç¥ã«ã¯ Inspector2 Finding ãšããã€ãã³ãåãšå¯Ÿè±¡ã® ECR ã€ã¡ãŒãžã® ARN ã衚瀺ãããã ãã§ãCVE åãããã±ãŒãžåã衚瀺ãããŸããã§ããã ãã®ãããEventBridge ã® input_transformer ã䜿ããChatbot ã®ã«ã¹ã¿ã éç¥ã§éç¥å
å®¹ãæ¹åããŸããã resource "aws_cloudwatch_event_target" "ecr_scan_finding_sns" { rule = aws_cloudwatch_event_rule.ecr_scan_finding.name target_id = "SendToSNS" arn = var.ecr_scan_finding_sns_topic_arn input_transformer { input_paths = { "severity" = "$.detail.severity" "title" = "$.detail.title" "description" = "$.detail.description" "repository" = "$.detail.resources[0].details.awsEcrContainerImage.repositoryName" } input_template = <<TEMPLATE { "version": "1.0", "source": "custom", "content": { "textType": "client-markdown", "title": ":rotating_light: ECR <severity> èåŒ±æ§æ€åº [ç°å¢å (AWSã¢ã«ãŠã³ãID)]", "description": "*éèŠåºŠ*: <severity>\n*ãªããžããª*: <repository>\n*è匱æ§*: <title>\n*詳现*: <description>" } } TEMPLATE } } ãã€ã³ã㯠input_paths ã§ã€ãã³ãããå¿
èŠãªé
ç®ãæœåºããã«ã¹ã¿ã éç¥ãã©ãŒãããã§æŽåœ¢ããŠããç¹ã§ããæ¹ååŸã®éç¥ã¯ä»¥äžã®ãããªåœ¢åŒã§ãã CVE-ID ãããã±ãŒãžåããªããžããªåã衚瀺ãããããã«ãªããSlack äžã§è匱æ§ã®æŠèŠãææ¡ã§ããããã«ãªããŸããã詳现ãªå¯Ÿå¿å€æãå¿
èŠãªå Žå㯠Inspector2 ã®ããã·ã¥ããŒãã確èªããéçšã§ãããéç¥ãèŠãã ãã§å¯Ÿå¿èŠåŠããããããšãå¢ããŸããã ããã«éç¥å
容ãèªç±ã«ã«ã¹ã¿ãã€ãºãããå Žåã¯ãEventBridge â SNS â Chatbot ã®çµè·¯ã§ã¯ãªããEventBridge â Lambda ã§æŽåœ¢ããæ¹æ³ããããŸãã å°å
¥ããŠã¿ãŠ CRITICAL ã«çµã£ã倿ã¯ããŸããããŸãããæåã®éç¥ãæ¥ããšãããããã¯æ¬åœã«å¯Ÿå¿ãå¿
èŠãªãã®ã ããšèœã¡çããŠå¯ŸåŠã§ããã®ã§ãçãéãã§ããã äžæ¹ã§ãChatbot ã®ããã©ã«ãã®éç¥ã§ã¯ CVE ã®è©³çްãåºããæ£çŽããå°ãæ
å ±ãåºããšæã£ãŠããŸãããå®éã«äœ¿ã£ãŠã¿ãŠåããŠæ°ã¥ããéšåã§ã input_transformer ã䜿ã£ãŠã«ã¹ã¿ãã€ãºã§ããããšãåŸããç¥ããŸããã Terraform ã§ã®è€æ°ç°å¢å±éãã¹ãã£ã³é »åºŠã®äœ¿ãåãã¯ãããªããããŸããã ãŸãšã ä»åã¯ããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã®è匱æ§ã«çŽ æ©ã察å¿ã§ããäœå¶ã¥ããã®äžç°ãšããŠãECR ã® Enhanced Scanning ãå°å
¥ããäºäŸã玹ä»ããŸããã æ§æãšããŠã¯ ECR Enhanced Scanning â EventBridge â SNS â Chatbot â Slack ãšããã·ã³ãã«ãªãã€ãã©ã€ã³ã§ãããTerraform ã§ã³ãŒãåããããšã§åçŸæ§ã®ãã圢ã§è€æ°ç°å¢ã«å±éã§ããŸããã ãŸãæ€ç¥ã§ããç¶æ
ãäœãããšãç¬¬äžæ©ãããããè¶
ããã°éçšããªãã粟床ãäžããŠãããŸããæ¬èšäºããã®äžæ©ãèžã¿åºããã£ããã«ãªãã°å¬ããã§ãã æåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ
ç®æ¬¡ ã¯ããã« èæ¯ãšèª²é¡ é¿é£èšç·Žã®å
šäœå GUIããŒã¹ã®ããŒã«ãéžå®ããçç± AIã«ããã·ããªãª ...
ChatGPTã®ç»å Žä»¥éãå€ãã®WebãµãŒãã¹ãã¢ããªã«ãAIæ©èœããæèŒãããããã«ãªããŸãããçŸåšãçæAIãã¢ããªã±ãŒã·ã§ã³ã®UIã«çµã¿èŸŒãã¢ãããŒãã«ã¯ã次ã®ãããªäŸããããŸãã 察話åïŒChatbotïŒ ããã³ãããã«ããŒåïŒParametric UIïŒ ã€ã³ã©ã€ã³è£å®åïŒGhost TextïŒ ã³ã³ããã¹ãã¡ãã¥ãŒåïŒContextual ActionsïŒ ãã£ã³ãã¹åïŒArtifacts / WorkspaceïŒ ãžã§ãã¬ãŒãã£ãUIåïŒGenerative UIïŒ æ¬èšäºã§ã¯ãããã6ã€ã®UIãã¿ãŒã³ã®ç¹åŸŽãæŽçãããŠãŒã¶ãŒã®äœæ¥ãæèããæ¯æŽããAIã€ã³ã¿ãŒãã§ãŒã¹èšèšã®åæã«ã€ããŠè§£èª¬ããŸãã UIãã¿ãŒã³ 1. 察話åïŒChatbotïŒ ç»é¢ã®å³äžãªã©ã«ã¢ã€ã³ã³ã眮ããã¯ãªãã¯ãããšãã£ãããŠã£ã³ããŠãéããçŸåšæãäžè¬çãªå®è£
圢åŒã§ãã ã¡ãªãã: ãã£ãããããã®è¡šç€ºã»é衚瀺ããŠãŒã¶ãŒãç°¡åã«åãæ¿ãããããããæ¢åã®ã¢ããªã±ãŒã·ã§ã³ã®UIã倧ãã倿Žããã«å°å
¥ã§ããã®ãç¹åŸŽã§ããAIã«ããè£å©ãäžèŠãªãŠãŒã¶ãŒã®äœæ¥ãéªéããªãããããŠãŒã¶ãŒæ°ã®å€ãæ¢åãµãŒãã¹ã§ãæµææãæããã«ãããšãã倧ããªã¡ãªããããããŸãã 察話圢åŒã¯äžèœã§åŒ·åãªã€ã³ã¿ãŒãã§ãŒã¹ã§ãããå¹
åºã質åããŒãããã®ã¢ã€ãã¢åºãã«åããŠããŸãã äŸ: Nulab Backlog AI ã¢ã·ã¹ã¿ã³ã éç: äžæ¹ã§ããŠãŒã¶ãŒã¯ãã¡ãã¡äœæ¥ã®æãæ¢ãããã£ãããéããããããããŠããšããã³ãããå
¥åããåºåãããçµæãã³ããŒããŠå
ã®äœæ¥ç»é¢ã«è²Œãä»ããâŠâŠãšãã ãã³ã³ããã¹ãã¹ã€ããïŒæèã®åãæ¿ãïŒã ãçºçããŸãã ãŸããæå€§ã®èª²é¡ãšãªãã®ã ãèšèªåã®ã³ã¹ãïŒããã³ããã®å£ïŒã ã§ãã äŸãã°ãç»åç·šéãœããã§ãå³äžã®ç»åã®æããã10%äžããŠãèæ¯ãå°ããŒãããŠããšæåã§æç€ºããã®ã¯ãã¹ã©ã€ããŒãçŽæ¥æäœãããããé¥ãã«æéãããããŸãã人éã¯ããããããšå
šãŠãç°¡åã«èšèªåã§ããããã§ã¯ãããŸããããã®ããããããã玹ä»ãããããªãããã¯ãŒã¯ãããŒã«æº¶ã蟌ãã UIãã¿ãŒã³ãšã®äœ¿ãåããéèŠã«ãªããŸãã 2. ããã³ãããã«ããŒåïŒParametric UIïŒ èªç±èšè¿°ã®ãã£ããæ¬ã«ãã¹ãŠãå§ããã®ã§ã¯ãªããããããããŠã³ãã¹ã©ã€ããŒãã¿ã°éžæãšãã£ã åŸæ¥ã®GUIããŒãã䜿ã£ãŠãAIãžã®æç€ºïŒããã³ããïŒãçµã¿ç«ãŠãããUI ã§ãã æç« äœæããŒã«ã§ãããŒã³ïŒäžå¯§ / ã«ãžã¥ã¢ã«ããé·ãïŒçã / é·ããããã¿ã³ã§éžã°ããããç»åçæããŒã«ã§ãã¢ã¹ãã¯ãæ¯ïŒ16:9ããã¹ã¿ã€ã«ïŒæ°Žåœ©ç»ããã¡ãã¥ãŒããéžã°ããããã圢åŒã§ãã ã¡ãªãã: ãŠãŒã¶ãŒã¯ãäžæãªããã³ããã®æžãæ¹ããç¥ããªããŠããæå³ããçµæãåŸãããŸãïŒèšèªåã®ã³ã¹ããäžããïŒã ã·ã¹ãã ã®è£åŽã§ãGUIã®éžæç¶æ
ãè¯è³ªãªããã³ããæååã«å€æããŠAPIã«æž¡ããããåºåã®ç²ŸåºŠãå®å®ããŸãã äŸ: Canvaã®ããžãã¯çæ 3. ã€ã³ã©ã€ã³è£å®åïŒGhost Text / Inline CompletionïŒ çŸåšãããã¹ãå
¥åã«ãããŠæãæåããŠããAIæ¯æŽã®UIã§ãã GitHub Copilot ïŒã³ãŒãè£å®ïŒãªã©ã§æ¡çšãããŠããŸãã ãŠãŒã¶ãŒãæåãå
¥åããŠããæäžã«ãAIãäºæž¬ããç¶ããèãã°ã¬ãŒã®æåïŒãŽãŒã¹ãããã¹ãïŒã§è¡šç€ºããŸãããŠãŒã¶ãŒã¯ Tab ããŒãæŒãã ãã§ãããæ¡çšïŒAcceptïŒã§ããæ°ã«å
¥ããªããã°ãã®ãŸãŸå
¥åãç¶ããŠç¡èŠïŒRejectïŒã§ããŸãã ã¡ãªãã: ãŠãŒã¶ãŒã®æèãäžæãããŸããã ããã³ãããå
¥åããå¿
èŠããããŸããïŒçŸåšã®ã«ãŒãœã«äœçœ®ãŸã§ã®ããã¹ãããã®ãŸãŸæèã«ãªãïŒã æ¡çšã»äžæ¡çšã®å€æã極ããŠé«éã«è¡ããŸãã å®è£
ã®ãã€ã³ã: ã¬ã€ãã³ã·ïŒåå¿é床ïŒãåœã§ãããŠãŒã¶ãŒã®ã¿ã€ãã³ã°é床ã«è¿œãã€ãããã«ã¯ãæ°çŸããªç§ä»¥å
ã®å¿çãæ±ããããŸãã äŸ: Visual Studio Core äžã® GitHub Copilot 4. ã³ã³ããã¹ãã¡ãã¥ãŒåïŒContextual ActionsïŒ ãŠãŒã¶ãŒãéžæãããªããžã§ã¯ãïŒããã¹ããç»åã衚ãªã©ïŒã«å¯ŸããŠãAIãç¹å®ã®åŠçãææ¡ãããã¿ãŒã³ã§ãã Notion AI ãªã©ã®ãšãã£ã¿ã§èŠãããŸãã ããã¹ãããã€ã©ã€ãéžæãããšãéåžžã®ãã³ããŒãã貌ãä»ããã®é£ã«ããèŠçŽãããã翻蚳ããããçãããããšãã£ãAIã¢ã¯ã·ã§ã³ããããã¢ãã衚瀺ãããŸãã ã¡ãªãã: ãããã§AIã«äœãé ŒããããããŠãŒã¶ãŒã«èŠèŠçã«æç€ºã§ããŸãã éžæç¯å²ãšããæç¢ºãªã察象ïŒSubjectïŒãããããããAIãã³ã³ããã¹ãã誀解ããã粟床ãé«ãŸããŸãã äŸ: Notion AI 5. ãã£ã³ãã¹åïŒArtifacts / WorkspaceïŒ ãã£ããç»é¢ãšã¯å¥ã«ããã¬ãã¥ãŒã»ç·šéå°çšã®ç»é¢ïŒãã£ã³ãã¹ïŒãå·Šå³ãäžäžã«åå²ããŠçšæããã ãAIãšã®å¯Ÿè©±ããšãçæç©ã®çŽæ¥ç·šéããã·ãŒã ã¬ã¹ã«è¡ããUI ã§ãã Claudeã®ãArtifactsãããChatGPTãGeminiã®ãCanvasãæ©èœã代衚äŸã§ããAIã«ã³ãŒããé·æãæžããããšãå°çšã®é åã«ãããã¬ã³ããªã³ã°ããã人éããããçŽæ¥æçŽãããããããã«AIã«ãããã ãä¿®æ£ããŠããšæç€ºãåºãã§ããŸãã ã¡ãªãã: 察話åïŒChatbotïŒã®åŒ±ç¹ã ã£ããçµæãã³ããããŠæå
ã«æã£ãŠããæéããå®å
šã«æé€ããŸãã ã³ãŒãã£ã³ã°ãWebãã¶ã€ã³ãäŒç»æžã®äœæãªã©ãäœåºŠãæšæ²ãéãããå埩çãªäœæ¥ïŒã€ãã¬ãŒã·ã§ã³ïŒãã«æé©ã§ãã äŸ: Google Geminiã®Canvas 6. ãžã§ãã¬ãŒãã£ãUIåïŒGenerative UIïŒ AIã®åºåçµæãåãªãããã¹ãïŒMarkdownïŒãšããŠè¡šç€ºããã®ã§ã¯ãªãã ç®çã«å¿ãããæäœå¯èœãªUIã³ã³ããŒãã³ãããã®ãã®ãåçã«çæããŠè¡šç€ºãã ææ³ã§ãã äŸãã°ããæ¥é±ã®æ±äº¬ã®å€©æ°ã¯ïŒããšèãããšãã«ããæŽãã§ãããšããããã¹ããè¿ãã®ã§ã¯ãªãã ã倩æ°ãŠã£ãžã§ããïŒã°ã©ããã¢ã€ã³ã³ïŒã ããã£ããæ¬ã®äžã«ã¬ã³ããªã³ã°ããŸããããã©ã€ããäºçŽãããããšèšãã°ãæ¥ä»éžæã«ã¬ã³ããŒãšäŸ¿ã®ãªã¹ãUIã衚瀺ãããŸãã ã¡ãªãã: ããã¹ããèªããããçŽæçã«æ
å ±ãææ¡ã§ããŸãã 衚瀺ãããUIã䜿ã£ãŠãããã«è©³çŽ°ãªæäœïŒãã¿ã³ãæŒããéžæãããªã©ïŒããã£ããæ¬ããé¢ããããšãªãå¯èœã«ãªããŸãã äŸ: Google Gemini UXèšèšã®èŠïŒHuman-in-the-loop ããã倿§ãªUIãã¿ãŒã³ãåãå
¥ããäžã§ãæãéèŠãªå²åŠããããŸããããã¯ã ãæçµæ±ºå®æš©ã¯åžžã«äººéã«ããïŒHuman-in-the-loopïŒã ãšããããšã§ãã AIã¯ç¢ºççã«æ¬¡ã®èšèãæäœãäºæž¬ããŠããã«éãããå¹³æ°ã§åãã€ãããïŒãã«ã·ããŒã·ã§ã³ïŒãçå€ããªææ¡ããããããŸãããããã£ãŠãAIã®ææ¡ã¯åžžã« ãæ«å®çã ã§ããããŠãŒã¶ãŒãç°¡åã«ä¿®æ£ã»ç Žæ£ã§ããªããã°ãªããŸããã Undo/Redo ã®ä¿èšŒ AIã«ããèªåç·šéãè¡ãããåŸãCtrl + Z (Undo) ã§å³åº§ã«å
ã®ç¶æ
ã«æ»ããããšã¯å¿
é èŠä»¶ã§ãããAIãåæã«æžãæããŠãå
ã«æ»ããªããªã£ãããšããäœéšã¯ãããŒã«ãžã®ä¿¡é ŒãæãªããŸãã å·®åã®å¯èŠå (Diff View) AIãã³ãŒããæç« ãèªåã§ä¿®æ£ããå Žåãã©ããã©ãå€ãã£ãã®ãããã€ã©ã€ã衚瀺ïŒDiff衚瀺ïŒããããšã§ããŠãŒã¶ãŒã¯å®å¿ããŠå€æŽãåãå
¥ããããšãã§ããŸãã ãŸãšãïŒAIã¯ãŠãŒã¶ãŒã®èœåãæ¡åŒµãããéå
·ã æ¥åã¢ããªããããã§ãã·ã§ãã«ããŒã«ã«ãããAIã¯ã人éãšäŒè©±ããã ãã®ååšããããŠãŒã¶ãŒã®èœåãæ¡åŒµããé«åºŠãªãéå
·ïŒã³ãã€ãããïŒããžãšé²åããŠããŸãã AIãéå
·ãšããŠæãããšããããã³ãããå
¥åããã察話åã ãã§ãªããGUIããŒãã§æç€ºãçµã¿ç«ãŠããããã³ãããã«ããŒåãããã«ãŒãœã«ã®å
ã§æèãæ±²ã¿åããã€ã³ã©ã€ã³è£å®åãããããŠå
±åäœæ¥ç©ºéã§ããããã£ã³ãã¹åããªã©ã倿§ãªã¢ãããŒããæå¹ã§ãã ããããã®ç¹æ§ãçè§£ãããŠãŒã¶ãŒã®ã¯ãŒã¯ãããŒã«æãé©ããUIãéžæã»çµã¿åãããããšããããããã®çæAIæä»£ã®æšæºçãªã€ã³ã¿ãŒãã§ãŒã¹èšèšãšãªã£ãŠããã§ãããã Illustration by Google DeepMind on Unsplash ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post çæAIããŒã«ã䟿å©ã«ãã6ã€ã®UIã¢ãããŒã first appeared on SIOS Tech Lab .














