
- TOP
- ã¿ã°äžèЧ
- Android
Android
ã€ãã³ã

ãã¬ãžã³
æè¡ããã°
ã¯ããã« ããã«ã¡ã¯ãZOZOTOWNéçº2éšAndroidãããã¯ã®å°æïŒ @kako_351 ïŒã§ããæ®æ®µã¯ZOZOTOWN Androidã¢ããªã®éçºãæ
åœããŠããŸããZOZOTOWN Androidã§ã¯ãããŒã å
ã®éçšã§ããŸããŸãªäœæ¥ãèªååããŠããŸããæè¿ã¯ãªãªãŒã¹æºåããJira AutomationãšGitHub Actionsã®çµã¿åããã§èªååããŸãããæ¬èšäºã§ã¯ããã®ä»çµã¿ãšå®è£
ã玹ä»ããŸãã ç®æ¬¡ ã¯ããã« ç®æ¬¡ èæ¯ã»èª²é¡ æ¹ååã®éçš ãã©ã³ãéçšã®æŽç æ¹ååŸã®å
šäœæ§æ GitHub Actionsã«ãããªãªãŒã¹PRã®èªåäœæ Jira REST APIã®æºå ãã©ã³ãäœæ ããŒãžã§ã³æŽæ° PRäœæ PRã®èª¬ææ¬ã«èšèŒããæ¬æçæ PRãžã©ãã«ä»äž ããŒãžã®å¯Ÿè±¡æ¡ä»¶ã¡ã³ããŒãžSlackéç¥ Jira Automationããã®GitHub Actionså®è¡ GitHub Actions REST APIã®æºå ããªã¬ãŒèšå® å
¥åå€ã®èšå® ãã©ã³ãåã®èªåçæ REST APIã§GitHub Actionsãèµ·å æ¹ååŸã®å®è¡ã€ã¡ãŒãž ãŸãšã èæ¯ã»èª²é¡ ZOZOTOWN Androidã§ã¯ãQAããŒã ãžãã¹ã察象ã®ã¢ããªãé
åžããåã«ãããŒã å
ã§æ¬¡ã®ãªãªãŒã¹å
容ã確èªããŠããŸããé
åžæ
åœè
ã¯ãããŸã§ã«ãªãªãŒã¹çšãã©ã³ããçšæãã察象æ¡ä»¶ãããŒãžã§ããç¶æ
ã«ããŠããå¿
èŠããããŸãã ãã®éçšé¢ã§ã®èª²é¡ã2ã€ãããŸããã 1ã€ã¯æèŠæéã人ã«ãã£ãŠå€§ããéã£ãããšã§ããé
åžæ
åœã¯ãªãªãŒã¹ããšã«å
¥ãæ¿ãããããæ
åœãåã£ãŠããã®ã¯æ°ã¶æã«äžåºŠãšããããšããããŸããããªãªãŒã¹æºåã¯å·¥çšãå€ããããé
åžãã¿ãŒã³ã«ãã£ãŠäœ¿ããã©ã³ããå€ãããŸããèšæ¶ã ããé Œãã«é²ããã®ãé£ãããšãããããæ¯åããã¥ã¢ã«ã確èªãããšããããäœæ¥ãå§ãŸã£ãŠããŸãããPRãSlackã®ã¿ã€ã ã¹ã¿ã³ããæ¯ãè¿ããšããªãªãŒã¹æºåã«ãããå®äœæ¥æéã¯ãæ
åœè
ã«ãã£ãŠ15åçšåºŠãã1æéçšåºŠãŸã§éãããããŸããããã1ã€ã¯ãæºåãé
ãããšå¯Ÿè±¡æ¡ä»¶ã®ããŒãžãããŒã å
ã§ã®ç¢ºèªã®çŽåã«ãªãããšã§ããããŒãžå
ã®ãã©ã³ããååšããªããããæ
åœè
ã®äœæ¥ã¿ã€ãã³ã°ããã®ãŸãŸãªãŒãã¿ã€ã ã«é¿ããŠããŸããã æ¹ååã®éçš ãŸãã¯æ¹ååã®éçšã説æããŸãããããã以äžã®ãããªãªãªãŒã¹ãããŒã§ãã QAã¯QAããŒã ãè¡ããä»ã®å·¥çšã¯ZOZOTOWN AndroidããŒã ãè¡ã ãªãªãŒã¹æºå ããŒã å
ã§é
åžå確èªïŒæ¬¡ã®ãªãªãŒã¹å
容ãããŒã å
ã§ç¢ºèªããå·¥çšïŒ QAããŒã ãžé
åž QA ãªãªãŒã¹ æ¬èšäºã§ã¯ããã®ãã¡1ã®ãªãªãŒã¹æºåãèªååããå
容ã玹ä»ããŸãããªãªãŒã¹æºåã«ã¯ä»¥äžã®å·¥çšãå«ãŸããŠããããã¹ãŠæåã§è¡ã£ãŠããŸããã ãã¹ãŠæåã§è¡ã£ãŠãããªãªãŒã¹æºåã®å·¥çš ãã©ã³ãäœæ ããŒãžã§ã³æŽæ° ãªãªãŒã¹çšPRäœæ PRã®èª¬ææ¬ã«èšèŒããæ¬æçæ ããŒãžã§ã³ã«å«ããæ¡ä»¶å
容ãåé ã©ãã«ä»äž ããŒãžã®å¯Ÿè±¡æ¡ä»¶ã¡ã³ããŒãžSlackéç¥ ãããã®äœæ¥ã¯é
åžæ
åœè
ãè¡ããŸããæ
åœããã®ã¯ããã®ãªãªãŒã¹ã«å«ãŸããæ¡ä»¶ã®ãã¡éèŠåºŠã®é«ãæ¡ä»¶ã®å®è£
è
ã§ãããã®ããæ
åœã¯æ¯åå
¥ãæ¿ãããäžèšå·¥çšã«ãæéãèŠããŠããŸãããäžæ¹ã§ãã®å·¥çšã¯æšæºåãããŠãããããèªååããããéšåã§ããã ãã©ã³ãéçšã®æŽç èªååããäžã§èæ
®ãã¹ãç¹ã¯ããã©ã³ãéçšã§ããhotfixãè€æ°ããŒãžã§ã³ã®åæ¥é
åžãšãã£ããéåžžãšã¯ç°ãªãé
åžãã¿ãŒã³ã«ã察å¿ããå¿
èŠããã£ãããã§ããåæãšããŠZOZOTOWN Androidã§ã¯Git-flowã«è¿ã圢ã§ãã©ã³ãéçšãããŠããŸãã ã€ã¡ãŒãžãšããŠã¯ãGit-flowã®developãã©ã³ããšreleaseãã©ã³ãã®åœ¹å²ãå
¥ãæ¿ãããããªéçšã§ããé
åžå確èªãŸã§ã«releaseãã©ã³ããžåæ¡ä»¶ã®featureãã©ã³ããããŒãžããQAããŒã ãžã®é
åžæç¹ã§releaseãã©ã³ããdevelopãã©ã³ããžããŒãžããŸãã Git-flowãäžéšã«ã¹ã¿ãã€ãºããéçš é
åžã®ãã¿ãŒã³ãšããŠã¯ä»¥äžã®3ã€ãååšããŸãã éåžž æ¯é±ã®å®äŸãªãªãŒã¹ãã¹ã±ãžã¥ãŒã«ã©ããã«é
åžãããšãã®éçš ããŒã¹ãã©ã³ããdevelopãšãã hotfix ãªãªãŒã¹æžã¿ã®ããŒãžã§ã³ã«ç·æ¥ã®ä¿®æ£ãå
¥ãããšãã®éçš ããŒã¹ãã©ã³ããmasterãšãã è€æ°ããŒãžã§ã³ã忥é
åž èŠæš¡ã®å€§ããæ¹ä¿®ãªã©QAæéãé·ãåããããšããããªãªãŒã¹æ¥ãè¿ãããŒãžã§ã³ãåããããšãã®éçš ããŒã¹ãã©ã³ãã¯ãå
çºé
åžãªãdevelopãåŸçºé
åžãªãå
è¡é
åžãã©ã³ããšãã ããããããã®ãã¿ãŒã³ã§ãå®è¡ã§ããããã«èªååãèšèšããŸããã æ¹ååŸã®å
šäœæ§æ æ¹åããéããªãã¹ãæäœæ¥ã®æéãæžããæ¹åæ§ã§èããŸãããåæãšããŠãZOZOTOWN Androidã§ã¯ã¿ã¹ã¯ç®¡çã«Jiraãå©çšããŠããããªãªãŒã¹ããšã«å°çšã®ã¿ã¹ã¯ãã±ãããäœæããŠããŸãããã®ã¿ã¹ã¯ãã±ãããèµ·ç¹ã«ãªãªãŒã¹æºåãå®äºãããããªæ§æãç®æããŸããã æ¹ååŸã®å
šäœæ§æã¯ä»¥äžã®ãšããã§ãã Jiraãã±ããã§ããªã¬ãŒãå®è¡ããã ãã§ãªãªãŒã¹æºåãå®äºããæ§æ åŠçã®å€§éšåã¯GitHub Actionsã§åãããŠããŸããé
åžæ¥ãããŒãžã§ã³åãšãã£ããªãªãŒã¹æ
å ±ã¯Jiraã«èšèŒããŠãããããå¿
èŠãªæ
å ±ã¯Jira REST APIããååŸã§ããŸãããŸãJiraã«ã¯èªååæ©èœã®Jira Automationããããä»åã¯GitHub Actionsãèµ·åããããªã¬ãŒãšããŠå©çšããŠããŸãã GitHub Actionsã«ãããªãªãŒã¹PRã®èªåäœæ GitHub Actionsã§ã¯ãåè¿°ãããªãªãŒã¹æºåã®å·¥çšãã¹ãŠãå®è¡ããŸãã以éãå·¥çšããšã«å®è£
ã説æããŸãã Jira REST APIã®æºå äºåã«Jira REST APIãå©çšããããã«å¿
èŠãªæºåãããŸããPythonã¹ã¯ãªããå
ã§ jiraã©ã€ãã©ãª ãå©çšãããããpipã§ã€ã³ã¹ããŒã«ããŸãã - name : Install dependencies run : pip install jira requests ã¹ãããããšã«Pythonãã¡ã€ã«ãåãããã®ã§ãå
±éããŠå©çšããJiraã€ã³ã¹ã¿ã³ã¹çæãåå¥ã®ãã¡ã€ã«ãšããŠäœæããŸããJira REST APIã¯ã¡ãŒã«ã¢ãã¬ã¹ãšããŒã¯ã³ã«ããBasicèªèšŒã§è¡ããããäºåã«ããŒã¯ã³ã®çºè¡ãå¿
èŠã§ããJira REST APIã®èªèšŒæ¹æ³ã¯ Basic auth for REST APIs ãåç
§ããŠãã ããã """jira_config.py Jiraã®èšå® """ from jira import JIRA # Jira APIã¯ã¡ãŒã«ã¢ãã¬ã¹ãšããŒã¯ã³ã«ããBasicèªèšŒã§è¡ã jira_email = os.environ.get( 'JIRA_BOT_MAIL' ) jira_api_token = os.environ.get( 'JIRA_CLOUD_TOKEN' ) JIRA_HOST = 'YOUR_ATLASSIAN_DOMAIN' JIRA_URL = f 'https://{JIRA_HOST}' headers = { 'Host' : JIRA_HOST, 'Origin' : JIRA_URL, 'X-Atlassian-Token' : 'no-check' , 'Content-Type' : 'application/json;charset=UTF-8' , } def create_jira (url=JIRA_URL, headers=headers): return JIRA(url, basic_auth=(jira_email, jira_api_token), options={ "headers" : headers}) åPythonã¹ã¯ãªããã§Jiraæ
å ±ãååŸããããšãã«ãã®ãã¡ã€ã«ãimportããŠå©çšããŸãã ãã©ã³ãäœæ ãã©ã³ããäœæããã«ãããããŒã¹ãã©ã³ããäœæãããã©ã³ãåã®2ã€ã®æ
å ±ãå¿
èŠã«ãªããŸãããã®å€ã¯GitHub Actionsã® inputs ãšããŠæž¡ããããã«ããŸãã name : Release Preparation on : workflow_dispatch : inputs : branch_name : required : true description : "ãªãªãŒã¹ãã©ã³ãå" type : string base_branch : required : true description : "ããŒã¹ãã©ã³ã" type : string env : GH_TOKEN : ${{ secrets.GITHUB_TOKEN }} JIRA_BOT_MAIL : ${{ secrets.JIRA_BOT_MAIL }} JIRA_CLOUD_TOKEN : ${{ secrets.JIRA_CLOUD_TOKEN }} jobs : release-preparation : runs-on : ubuntu-latest steps : # ...ä»ã®åŠç - name : Fetch base branch env : BASE_BRANCH : ${{ github.event.inputs.base_branch }} run : | git fetch origin "$BASE_BRANCH" git checkout "$BASE_BRANCH" - name : Create release branch env : BRANCH_NAME : ${{ github.event.inputs.branch_name }} run : | git checkout -b "$BRANCH_NAME" ãã©ã³ãåŠçèªäœã¯åçŽãªGitæäœã§æžããããã¯ãŒã¯ãããŒãã¡ã€ã«ã ãã§å®çµããŸããããŒã¹ãã©ã³ãããã§ãããåãæ¿ããåŸã«ãªãªãŒã¹ãã©ã³ããäœæããŠããŸãããªãäžèšã®ã¯ãŒã¯ãããŒãã¡ã€ã«ã§ã¯æ²èŒãçç¥ããŠããŸãããäºåããªããŒã·ã§ã³ãåããã¡ã€ã«å
ã§å®è¡ããŠããŸããäŸãã°æž¡ãããbranch_nameãšååã®ãã©ã³ããæ¢ã«ååšããªãããããŒã ã®éçšã§å®ãããã©ãŒãããã«ãªã£ãŠãããã確èªããŸãã ããŒãžã§ã³æŽæ° - name : Get Jira ticket info and extract version id : jira run : python .github/script/get_jira_version.py "${{ steps.parse.outputs.jira_ticket }}" - name : Update version in libs.versions.toml id : version run : python .github/script/update_version.py "${{ steps.jira.outputs.version_name }}" versionCode, versionNameãæŽæ°ããŸããZOZOTOWN Androidã®versionCodeã¯æ¢åã®å€ã«1ãè¶³ãã ãã§ããäžæ¹ãversionNameã¯ã²ãšå·¥å€«ããŠããŸãã ZOZOTOWN Androidã§ã¯ãªãªãŒã¹ããŒãžã§ã³ãJiraã§ç®¡çããŠããŸãããªãªãŒã¹çšã®ã¿ã¹ã¯ãã±ããã®ã¿ã€ãã«ã¯ ãAndroidãVer x.y.z(N)察å¿å
容 ãšãããã©ãŒãããã§ãããã®ãããPythonã¹ã¯ãªããå
ã§Jiraãã±ããã®ã¿ã€ãã«ããversionNameãæœåºããŸãã import jira_config def extract_version_name (title: str ) -> str | None : """Jiraãã±ããã¿ã€ãã«ããversionNameãæœåºãã""" match = re.search( r'(\d+\.\d+\.\d+)' , title) return match.group( 1 ) if match else None def main () -> None : if len (sys.argv) < 2 : print ( '::error::Usage: python get_jira_version.py <jira_ticket>' ) sys.exit( 1 ) jira_ticket = sys.argv[ 1 ] try : jira = jira_config.create_jira() issue = jira.issue(jira_ticket) summary = issue.fields.summary version_name = extract_version_name(summary) if not version_name: sys.exit( 1 ) set_output( 'version_name' , version_name) # ãã±ããã¿ã€ãã«ã¯ãªãªãŒã¹çšPRã®ã¿ã€ãã«ã«ãå©çšãã set_output( 'jira_title' , summary) except Exception as e: # äŸå€åŠç sys.exit( 1 ) ãªããèšäºäžã® set_output ã¯å€ã $GITHUB_OUTPUT ãžæžãåºãèªåã®ãã«ããŒã§ããæžãåºããå€ã¯åŸç¶ã®ã¹ããããã steps.<id>.outputs.<name> ã§åç
§ããŸãã versionNameãååŸåŸãversionCodeãšåãããŠããŒãžã§ã³ãæŽæ°ããŸããZOZOTOWN Androidã§ã¯ããŒãžã§ã³ãtomlã§ç®¡çããŠããã®ã§tomlãæŽæ°ããŸãã VERSION_FILE = 'gradle/libs.versions.toml' def read_version_file () -> str : """ããŒãžã§ã³ãã¡ã€ã«ãèªã¿èŸŒã""" path = Path(VERSION_FILE) if not path.exists(): print (f '::error::Version file not found: {VERSION_FILE}' ) sys.exit( 1 ) return path.read_text() def get_current_version_code (content: str ) -> int : """çŸåšã®version_codeãååŸãã""" match = re.search( r'^version_code = "(\d+)"' , content, re.MULTILINE) if not match: print ( '::error::Could not find version_code in libs.versions.toml' ) sys.exit( 1 ) return int (match.group( 1 )) def update_version (content: str , new_version_code: int , new_version_name: str ) -> str : """ããŒãžã§ã³æ
å ±ãæŽæ°ãã""" # version_codeãæŽæ° content = re.sub( r'^version_code = "\d+"' , f 'version_code = "{new_version_code}"' , content, flags=re.MULTILINE ) # version_nameãæŽæ° content = re.sub( r'^version_name = "[0-9.]+"' , f 'version_name = "{new_version_name}"' , content, flags=re.MULTILINE ) return content def main () -> None : if len (sys.argv) < 2 : print ( '::error::Usage: python update_version.py <version_name>' ) sys.exit( 1 ) new_version_name = sys.argv[ 1 ] # ããŒãžã§ã³ãã¡ã€ã«ãèªã¿èŸŒã¿ content = read_version_file() # çŸåšã®version_codeãååŸ current_version_code = get_current_version_code(content) # æ°ããversion_codeãèšç®ïŒã€ã³ã¯ãªã¡ã³ãïŒ new_version_code = current_version_code + 1 # ããŒãžã§ã³æ
å ±ãæŽæ° updated_content = update_version(content, new_version_code, new_version_name) # ãã¡ã€ã«ã«æžã蟌㿠write_version_file(updated_content) # GitHub Actionsã®åºåã«èšå® set_output( 'new_version_code' , str (new_version_code)) set_output( 'new_version_name' , new_version_name) ãã®ããã«Pythonã¹ã¯ãªãããçšããŠãGitHub Actionså
ã§ããŒãžã§ã³ãèªåæŽæ°ããŠããŸããããŒãžã§ã³æŽæ°åŸãGitã®ã³ããããšããã·ã¥ãŸã§è¡ããŸããããŒã¹ãã©ã³ããšã®å·®åããªããšPRãäœæã§ããªãããããã®ããŒãžã§ã³æŽæ°ãã³ãããããŠãããŸãã - name : Commit version update run : | git config --local user.email "xxxxxxxx+github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" git add gradle/libs.versions.toml git commit -m "Bump version" - name : Push release branch env : BRANCH_NAME : ${{ github.event.inputs.branch_name }} run : | git push --set-upstream origin "$BRANCH_NAME" PRäœæ ãããŸã§ãããPRãäœæããŸããZOZOTOWN Androidã§ã¯ãªãªãŒã¹çšPRã«èšèŒããæ
å ±ãæšæºåãããŠãããé
åžæã®ã¡ãã»ãŒãžæãšããŒãžã§ã³ã«å«ããæ¡ä»¶å
容ãèšèŒããŸãã PRã®èª¬ææ¬ã«èšèŒããæ¬æçæ ã¡ãã»ãŒãžã¯å®åæã§ãæ¡ä»¶å
容ã¯JiraããååŸã§ããã®ã§ããããPythonã¹ã¯ãªããäžã§åŠçããŠæŽåœ¢ã§ããŸãã import jira_config def get_epics_by_fix_version (jira, fix_version: str ) -> list [ dict ]: """ä¿®æ£ããŒãžã§ã³ã«çŽã¥ããšããã¯ãååŸãã""" # JQLã§fixVersionã«çŽã¥ããšããã¯ãæ€çŽ¢ jql = f 'fixVersion = "{fix_version}" AND issuetype = Epic ORDER BY key ASC' issues = jira.search_issues(jql, maxResults= 100 ) epics = [] for issue in issues: epics.append({ 'key' : issue.key, 'summary' : issue.fields.summary, }) return epics def generate_epics_markdown (epics: list [ dict ]) -> str : """ãšããã¯äžèЧãMarkdown圢åŒã§çæãã""" if not epics: return '' lines = [] for epic in epics: url = f '{JIRA_BASE_URL}/browse/{epic["key"]}' lines.append(f '### [{epic["summary"]}]({url})' ) return ' \n\n ' .join(lines) def generate_pr_body (jira_ticket: str , version_name: str , version_code: str , epics_markdown: str = '' ) -> str : """PRæ¬æãçæãã""" jira_url = f '{JIRA_BASE_URL}/browse/{jira_ticket}' # ãšããã¯äžèЧã®ã»ã¯ã·ã§ã³ãçæ epics_section = '' if epics_markdown: epics_section = f ' \n\n {epics_markdown}' pr_body = f '''## ä¿®æ£å
容 {{é
åžæã®ã¡ãã»ãŒãžæ}} ## 仿§æž [{jira_ticket}]({jira_url}){epics_section} ...以éãã³ãã¬ã«æ²¿ã£ãå
容 ''' return pr_body def main () -> None : if len (sys.argv) < 4 : print ( '::error::Usage: python generate_pr_body.py <jira_ticket> <version_name> <version_code>' ) sys.exit( 1 ) jira_ticket = sys.argv[ 1 ] version_name = sys.argv[ 2 ] version_code = sys.argv[ 3 ] try : jira = jira_config.create_jira() # ãªãªãŒã¹ãã±ããããä¿®æ£ããŒãžã§ã³ãååŸ fix_version = get_fix_version_from_issue(jira, jira_ticket) # ä¿®æ£ããŒãžã§ã³ã«çŽã¥ããšããã¯(æ¡ä»¶æ
å ±)ãååŸ epics = get_epics_by_fix_version(jira, fix_version) epics_markdown = generate_epics_markdown(epics) # PRæ¬æãçæ pr_body = generate_pr_body(jira_ticket, version_name, version_code, epics_markdown) # äžæãã¡ã€ã«ã«æžãåºã with tempfile.NamedTemporaryFile(mode= 'w' , suffix= '.md' , delete= False ) as f: f.write(pr_body) pr_body_file = f.name set_output( 'pr_body_file' , pr_body_file) except Exception as e: sys.exit( 1 ) ããŒãžã§ã³ã«å«ããæ¡ä»¶æ
å ±ã¯Jiraäžã§ããŒãžã§ã³ã«çŽä»ããããŠããã®ã§ãJira REST APIã§ããŒãžã§ã³ããååŸã§ããŸãããããMarkdown圢åŒã«ããŠPRæ¬æäžã«å«ããããã«æååçæããŠããŸãã æ¬æãã§ãããPRãäœæããŸããPRäœæã¯ghã³ãã³ãã«ããã¯ãŒã¯ãããŒãã¡ã€ã«ã ãã§å®çµã§ããŸãã - name : Generate PR body id : pr_body run : | python .github/script/generate_release_pr_body.py \ "${{ steps.parse.outputs.jira_ticket }}" \ "${{ steps.version.outputs.new_version_name }}" \ "${{ steps.version.outputs.new_version_code }}" - name : Create Pull Request id : create_pr env : JIRA_TITLE : ${{ steps.jira.outputs.jira_title }} BASE_BRANCH : ${{ github.event.inputs.base_branch }} BRANCH_NAME : ${{ github.event.inputs.branch_name }} PR_BODY_FILE : ${{ steps.pr_body.outputs.pr_body_file }} run : | PR_URL=$(gh pr create \ -B "$BASE_BRANCH" \ -H "$BRANCH_NAME" \ -t "$JIRA_TITLE" \ -F "$PR_BODY_FILE" ) echo "pr_url=$PR_URL" >> $GITHUB_OUTPUT PRãžã©ãã«ä»äž ZOZOTOWN Androidã«ã¯ãã©ãã«ä»äžãããªã¬ãŒã«åãå¥ã®GitHub ActionsããããŸãããªãªãŒã¹çšPRã«ã¯ãé
åžå確èªããšããã©ãã«ãä»äžããŸããã©ãã«ä»äžãPRäœæãšåæ§ãghã³ãã³ãã䜿ãã°ã¯ãŒã¯ãããŒãã¡ã€ã«ã ãã§å®çµããŸãã - name : Add labels to PR env : BRANCH_NAME : ${{ github.event.inputs.branch_name }} run : | PR_NUMBER=$(gh pr view "$BRANCH_NAME" --json number -q '.number' ) gh pr edit "$PR_NUMBER" --add-label "é
åžå確èª" ããŒãžã®å¯Ÿè±¡æ¡ä»¶ã¡ã³ããŒãžSlackéç¥ ãªãªãŒã¹ãã©ã³ãã«æ¡ä»¶ã®featureãã©ã³ããããŒãžããŠã»ãããããæåŸã«ãªãªãŒã¹ãã©ã³ããšPRãäœæãããããšãéç¥ããŸããéç¥å
容ã¯ã·ã³ãã«ãªãããSlackå
¬åŒã® slackapi/slack-github-action ã§æžã¿ãŸãã - name : Post Slack notification uses : slackapi/slack-github-action@vX.XX.XX with : payload : | { "text" : ":github: ãªãªãŒã¹ãã©ã³ããäœæãããŸãã: ${{ github.event.inputs.branch_name }}" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : ":github: ãªãªãŒã¹ãã©ã³ããäœæãããŸãã \n *ãã©ã³ã*: `${{ github.event.inputs.branch_name }}` \n *Version*: ${{ steps.version.outputs.new_version_name }} (${{ steps.version.outputs.new_version_code }}) \n *PR*: <${{ steps.create_pr.outputs.pr_url }}|Pull Request>" } } ] } env : SLACK_WEBHOOK_TYPE : INCOMING_WEBHOOK SLACK_WEBHOOK_URL : ${{ secrets.SLACK_WEBHOOK_URL }} 以äžã«ããããªãªãŒã¹æºåã®äžé£ã®æµããGitHub Actionsäžã§èªååã§ããŸããã Jira Automationããã®GitHub Actionså®è¡ GitHub Actionsã« workflow_dispatch ãèšå®ããŠããã®ã§ãå€éšããAPIã§ã¯ãŒã¯ãããŒãèµ·åã§ããŸããZOZOTOWN Androidã§ã¯æ¹ååŸã®å
šäœæ§æã§ã説æããéããã¿ã¹ã¯ç®¡çã«Jiraãå©çšããŠããã®ã§ãJiraãããã®ã¯ãŒã¯ãããŒãèµ·åã§ããªããèããŸããã Jiraã«ã¯Jira AutomationãšããããŸããŸãªèªååãèšå®ã§ããæ©èœããããŸããä»åã¯ãã®Jira AutomationããGitHub Actionsã®ã¯ãŒã¯ãããŒãèµ·åããŸãã Jira AutomationåŽã®å
šäœæ§æã¯ä»¥äžã®ã¹ã¯ãªãŒã³ã·ã§ããã®ãšããã§ããJiraã«è©³ãããªããŠããZapierãªã©ã®èªååããŒã«ãè§Šã£ãããšãããæ¹ãªãè¿ãå°è±¡ãæãŠãã¯ãã§ãã GitHub Actions REST APIã®æºå REST APIã§GitHub Actionsã®æäœãããå Žåãã¢ã¯ã»ã¹ããŒã¯ã³ãå¿
èŠãšãªãããçºè¡ããŠãããŸããæ¬èšäºã§ã¯è©³çްã岿ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®æš©éèšå®ã¯ GitHub Actionsã®æš©éã«é¢ããREST APIãšã³ããã€ã³ã ãåç
§ããŠãã ããã ããªã¬ãŒèšå® ãŸãã©ã®ãããªã¿ã€ãã³ã°ã§Jira Automationãå®è¡ããããèšå®ããŸãããã±ããã®ã¹ããŒã¿ã¹å€æŽæããã±ããäœææãªã©ããŸããŸãªããªã¬ãŒããããŸãããä»åã¯æåã«ããããªã¬ãŒãéžæããŸãããçç±ãšããŠã¯ä»¥äž2ç¹ã§ãã ãªãªãŒã¹æºåã®ã¿ã€ãã³ã°ãåºå®ã§ã¯ãªã é
åžãã¿ãŒã³ããã®æã®ç¶æ³ã«ããå€ãã ZOZOTOWN Androidã§ã¯åºæ¬çã«æ¯é±ãªãªãŒã¹ããããŸãããã ããçã幎æ«å¹Žå§ãªã©ã®é£äŒæããéçºç¶æ³ã«ãã2é±é以äžããå ŽåããããŸãããŸãã ãã©ã³ãéçšã®æŽç ã§èšèŒããããã«hotfixã忥é
åžã®å Žåã«ã¯ä»»æã§ããŒã¹ãã©ã³ãããã©ã³ãåãæå®ããããšãããããŸãã ãããã®éçšé¢ãèããŠãé
åžæ
åœè
ãæåã§Jira Automationãèµ·åããããã«ããŸããã å
¥åå€ã®èšå® ãã©ã³ãäœæã«å¿
èŠãªããŒã¹ãã©ã³ããšãã©ã³ãåã®2ã€ããGitHub Actionsã®ãžã§ããžæž¡ãå
¥åå€ãšããŠèšå®ããŸããJira Automationãæåèµ·åããéã«ãã€ã³ãããããŒã¿ãšããŠä»»æã®å€ãæž¡ããŸãã ãããèšå®ãããšãèµ·åæã®ãã€ã¢ãã°ã«å
¥åãã©ãŒã ã衚瀺ãããããŒã¹ãã©ã³ããšãã©ã³ãåãžä»»æã®å€ãæå®ã§ããŸãã ããã§ã¯å
¥åã®æéãæžãããããããããã«ããã©ã«ãå€ãèšå®ããŠããŸãã ããŒã¹ãã©ã³ãïŒdevelop ãã©ã³ãåïŒJiraãã±ããäžã«ããæ
å ±ããéçšã«æ²¿ã£ããã©ã³ãåãèªåçæ ããã©ã«ãå€ãããããšã§ãéåžžãã¿ãŒã³ã§ããã°æ
åœè
ã¯ãã¿ã³ãã¯ãªãã¯ããã ãã§æžã¿ãŸãã ãã©ã³ãåã®èªåçæ ãã©ã³ãåã¯ãããŒã ã®éçšã§ release/{{JiraIssueKey}}/{{yyyy_mm_dd}} ãšãããã©ãŒããããæ±ºãŸã£ãŠããŸããJiraIssueKeyã«ã¯ãªãªãŒã¹çšã®ãã±ããã®Keyããyyyy_mm_ddã«ã¯é
åžã®æ¥ä»ãå€ãšããŠä»£å
¥ããŸãã é
åžã®æ¥ä»ã¯Jiraäžã§ãªãªãŒã¹ã®èª¬æã«ä»¥äžã®ãããªããã¹ãã§èšèŒãããŠããã®ã§æ£èŠè¡šçŸã䜿ã£ãŠæœåºå¯èœã§ãã ãªãªãŒã¹ã®èª¬ææïŒæç²ïŒ QAé
åžäºå®æ¥:2026-09-03 æ£èŠè¡šçŸã«ããæœåº {{issue.fixVersions.first.description.match(".*QAé
åžäºå®æ¥:(\d{4}-\d{2}-\d{2}).*").toDate.format("yyyy_MM_dd")}} REST APIã§GitHub Actionsãèµ·å æåŸã«REST APIã§äœæããGitHub Actionsã®ã¯ãŒã¯ãããŒãå®è¡ããŸããAPIå®è¡æã«inputsãšããŠããŒã¿ãæž¡ããã®ã§ãããŒã¹ãã©ã³ããšäœæãããã©ã³ãåãæž¡ããŸãã ããã§é
åžæ
åœè
ã¯Jiraããã¯ãŒã¯ãããŒãèµ·åããã ãã§ããªãªãŒã¹æºåãå®äºããŸãããããŸã§æäœæ¥ã§è¡ã£ãŠããè€æ°ã®å·¥çšã«ãããæéãççž®ã§ããŸããã æ¹ååŸã®å®è¡ã€ã¡ãŒãž æ¹ååŸã®å®è¡ã€ã¡ãŒãžã¯ä»¥äžã®ãšããã§ãã Jiraã®ãªãªãŒã¹çšãã±ããã§ãªãªãŒã¹æºåã®èªååããªã¬ãŒãå®è¡ããã©ãŒã ã«æå®ããå
容ããªããã°ãç¶è¡ããã¿ã³ã¯ãªãã¯ã§å®äºãã èªåã§PRãäœæããã PRäœæå®äºåŸSlackã«éç¥ãå±ã ãããŸã§æåã§è¡ã£ãŠããäœæ¥ãããªã¬ãŒå®è¡1ã€ã§å®äºããããã«ãªããŸããããªãªãŒã¹æºåã®ããã¥ã¢ã«ã確èªããå¿
èŠã¯ãªãã以éã®åŠçã¯GitHub Actionsãè¡ãã30ç§çšåºŠã§å®äºããŸãã ãŸãšã æ¬èšäºã§ã¯ãJira AutomationãšGitHub Actionsã«ãããªãªãŒã¹æºåã®èªååã«ã€ããŠç޹ä»ããŸãããæäœæ¥ã ã£ããªãªãŒã¹ãã©ã³ãäœæããSlackéç¥ãŸã§ã®å·¥çšãJiraã®ã¯ãŒã¯ãããŒ1ã€ã§å®äºããããã«ãªããæ
åœè
ã«ããäœæ¥æéãPRå
容ã®ã°ãã€ãããªããªããŸãããæšæºåãããæé ãæäœæ¥ã§é²ããŠããããŒã ãããã°ããã²åèã«ããŠã¿ãŠãã ããã ZOZOã§ã¯ãäžç·ã«ãµãŒãã¹ãäœãäžããŠãããæ¹ãåéäžã§ãããèå³ã®ããæ¹ã¯ã以äžã®ãªã³ã¯ãããã²ãå¿åãã ããã corp.zozo.com
G-gen ã®è¥¿åã§ããåœèšäºã§ã¯ãGoogle Meet ã®æ©èœã§ããèªåã¡ã¢çæïŒTake notes for meïŒã®æŠèŠãšæäœæ¹æ³ã«ã€ããŠè§£èª¬ããŸãã ã¯ããã« èªåã¡ã¢çæïŒTake notes for meïŒãšã¯ æ©èœ ããŒã¿ã®ä¿è· ãŠãŒã¹ã±ãŒã¹ è°äºé²äœæã®èªåå éäžåå æã®ãã£ããã¢ãã 察é¢ããŒãã£ã³ã°ã§ã®äœ¿çš åææ¡ä»¶ãšå¯Ÿå¿èšèª å¿
èŠãªã©ã€ã»ã³ã¹ 察å¿èšèª ã¡ã¢çæã®éå§æé äŒè°åã« Google ã«ã¬ã³ããŒããæå¹åãã äŒè°åå åŸã«çæãéå§ãã PC ã§ã®æäœ ã¢ãã€ã«ç«¯æ«ïŒAndroidãiOSïŒã§ã®æäœ äŒè°äžã®åå è
ã«ããåæ ã¡ã¢ã®æäœãã§ãããŠãŒã¶ãŒ 察é¢äŒè°ã§ã®ã¡ã¢çæ PC ã®ãã©ãŠã¶ã§ã®æäœ ã¢ãã€ã«ç«¯æ«ã§ã®æäœ ã¡ã¢ã®ä¿åå Žæãšå
±æ Google ãã©ã€ããžã®ä¿å Google ã«ã¬ã³ããŒãžã®æ·»ä» ã¢ã¯ã»ã¹æš©éã®ç®¡ç ã¯ããã« èªåã¡ã¢çæïŒTake notes for meïŒãšã¯ Google Meet ã® èªåã¡ã¢çæ ïŒTake notes for meïŒãšã¯ãGoogle Meet äžãããã¯å¯Ÿé¢ã§ã®äŒè°äžã®äŒè©±ã AI ããªã¢ã«ã¿ã€ã ã«èšé²ããäŒè°ã®è©³çްãªã¡ã¢ã Google ããã¥ã¡ã³ããšããŠèªåçã«çæããæ©èœã§ãã ãã®æ©èœã䜿çšãããšãäŒè°ã®åå è
ã¯æåã§è°äºé²ãäœæããå¿
èŠããªããªããŸããAI ãäŒè°ã®äŒè©±ãåæããåãªãæåèµ·ããã ãã§ãªããæ
å ±ãæŽçãããããã¥ã¡ã³ããçæããŸãã èªåã¡ã¢çææ©èœã¯ Google Workspace ã®ç¹å®ã®ãšãã£ã·ã§ã³ïŒåŸè¿°ïŒããŸã㯠Google AI ãã©ã³ã«ç»é²ããŠããç°å¢ã§äœ¿çšã§ããŸãã åè : Google Meet ã®ãèªåã¡ã¢çæã åœæ©èœã®è£åŽã§ã¯ãGoogle ã®çæ AI ã§ãã Gemini ã皌åããŠããŸããGemini ã¯ãããŸããŸãªèšèªãã¢ã¯ã»ã³ããæ¹èšã®é³å£°é²é³ãããªãèšå€§ãªããŒã¿ã»ããã䜿çšããŠãã¬ãŒãã³ã°ãããŠãããããæ£ç¢ºãªç¿»èš³ãšã¡ã¢äœæãå¯èœã§ãã æ©èœ èªåã¡ã¢çæã«ãããåãªãæåèµ·ããã«çãŸãããäŒè©±ã®æå³ãæ±²ã¿åã£ã èŠçŽ ãäŒè°ã®æèã«æ²¿ã£ã 次ã®ã¹ãããã®ææ¡ ãªã©ãå«ãã ãé«åºŠãªã¡ã¢ãäœæãããŸãã ãªã以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã®ããGemini ã§ã¡ã¢ãçæããããåœæ©èœã«ããããŸãããã®äžéšã«è¡šèšãããŠãããäŒè°ãæåèµ·ãããã¯ãã·ã³ãã«ãª æåèµ·ãã ïŒTranscribeïŒæ©èœã®æå¹åãã§ãã¯ããã¯ã¹ã§ãããèªåã¡ã¢çæãšã¯åºå¥ãããŸãã åè : Google Meet ã§æåèµ·ããã䜿çšãã èªåã¡ã¢çæïŒTake notes for meïŒã®æå¹å ããŒã¿ã®ä¿è· Google Workspace ã®ç°å¢äžã§äœ¿çšããã Gemini ã¯ã匷åãªãã©ã€ãã·ãŒä¿è·ã®æ çµã¿ã®ããšã§æäŸãããŠããŸããäŒè°ã®é³å£°ããŒã¿ãçæãããã¡ã¢ã®å
容ããä»ã®é¡§å®¢åãã® AI ã¢ãã«ã®ãã¬ãŒãã³ã°ã«æµçšãããããšã¯ãããŸããã äŒæ¥ã®ããŒã¿ã¯çµç¹å
ã«çãŸããæ©å¯æ
å ±ã¯ä¿è·ãããŸãã åè : Google Workspace ã®çæ AI ã«é¢ãããã©ã€ãã·ãŒ ãã ãŠãŒã¹ã±ãŒã¹ è°äºé²äœæã®èªåå èªåã¡ã¢çæã®æã广çãªãŠãŒã¹ã±ãŒã¹ã¯ãè°äºé²äœææ¥åã®èªååã§ãã åŸæ¥ã¯ãäŒè°äžã«äžäººãæžèšãæ
åœããäŒè°åŸã«èŠçŽããŠäœè£ãæŽããŠããŸãããèªåã¡ã¢çææ©èœã䜿çšãããšãäŒè°äžã®æåèšé²ã®æéããªããªããåå è
å
šå¡ãè°è«ã«éäžã§ããŸãã äŒè°çµäºåŸã«ã¯èªåçã«æŽçãããè°äºé²ã®ãã©ããã宿ããŠãããããå
容ã確èªããŠè»œãç·šéããã ãã§æžã¿ã倧å¹
ã«çååã§ããŸãã éäžåå æã®ãã£ããã¢ãã ãªã³ã©ã€ã³äŒè°ã«é
ããŠåå ããå Žåãèªåã¡ã¢çææ©èœã®ããããŸã§ã®èŠçŽãã䜿çšããããšã§ãé
ããŠåå ãããŠãŒã¶ãŒã¯ããããŸã§ã®äŒè°ã®ãã€ã©ã€ããæ±ºå®äºé
ããªã¢ã«ã¿ã€ã ã«ç¢ºèªã§ããŸãã é²è¡äžã®è°è«ã劚ããããä»ã®åå è
ã«è³ªåãããããããšãªãã¹ã ãŒãºã«äŒè©±ã«åæµã§ããŸãã ãã ã2026幎8æçŸåšãããããŸã§ã®èŠçŽãæ©èœã¯ Android ã iOS çã® Google Meet ã§ã¯äœ¿çšã§ããŸããã 察é¢ããŒãã£ã³ã°ã§ã®äœ¿çš 察é¢äŒè°åãã®æ©èœã䜿çšããããšã§ããªãã©ã€ã³ç°å¢ã§ã®åè«ãã€ã³ã¿ãã¥ãŒãäŒè°å®€ã§ã®ãã¬ã€ã³ã¹ããŒãã³ã°ãªã©ã§ãåœæ©èœã®æ©æµãåããããšãã§ããŸãã äŸãã°å¶æ¥æ
åœè
ã顧客ãšå¯Ÿé¢ã§åè«ãè¡ãå Žé¢ã§ã¯ãçžæã®è¡šæ
ãããŒã³ãèªã¿åããªãã質ã®é«ãã³ãã¥ãã±ãŒã·ã§ã³ããšãããšãæ±ããããŸããã¹ããŒããã©ã³ã® Meet ã¢ããªã§é²é³ãéå§ããŠããã°ãæ
åœè
ã¯ã¡ã¢ãåãããšã«æ°ãåããããäŒè©±ã«éäžã§ããŸãã åææ¡ä»¶ãšå¯Ÿå¿èšèª å¿
èŠãªã©ã€ã»ã³ã¹ åœæ©èœã¯ã以äžã® Google Workspace ãšãã£ã·ã§ã³ã§äœ¿çšå¯èœã§ãã Business Standard Business Plus Enterprise Standard Enterprise Plus Frontline Plus åè : Google Workspace with Gemini ã䜿ã£ãŠã¿ã 察å¿èšèª 2026幎8æçŸåšãèªåã¡ã¢çææ©èœã¯ä»¥äžã®èšèªã§è¡ãããäŒè°ã«å¯Ÿå¿ããŠããŸãã æ¥æ¬èª è±èª ãã©ã³ã¹èª ãã€ãèª ã€ã¿ãªã¢èª éåœèª ãã«ãã¬ã«èª ã¹ãã€ã³èª ãŸããæ³šæãã¹ãç¹ãšããŠãåœæ©èœã¯äžåºŠã«1ã€ã®èšèªã«ã®ã¿å¯Ÿå¿ããŠããŸããäŸãã°ãæ¥æ¬èªãšè±èªãæ··åšãããªã©ãè€æ°ã®èšèªã§é²è¡ããäŒè°ã®ã¡ã¢ãåæã«çæããããšã¯ã§ããŸããããã®ãããäŒè°ã®äž»èŠãªèšèªã«åãããŠèšå®ãè¡ãå¿
èŠããããŸãã åè : Google Meet ã®ãèªåã¡ã¢çæã ã¡ã¢çæã®éå§æé åè : Google Meet ã®ãèªåã¡ã¢çæã - ãèªåã¡ã¢çæãæ©èœã䜿çšãã äŒè°åã« Google ã«ã¬ã³ããŒããæå¹åãã äºåã« PC çã® Google ã«ã¬ã³ããŒããèªåã¡ã¢çæãæå¹åããŠãããšãäŒè°åŸã«èªåçã«èªåã¡ã¢ã®çæãéå§ãããŸããæé ã¯ä»¥äžã®ãšããã§ãããªããã¢ãã€ã«ç«¯æ«ïŒAndroidãiOSïŒã§ã¯äºåã®æå¹åã¯ã§ããŸããã ã«ã¬ã³ããŒã®äºå®äœæç»é¢ã§ãGoogle Meet ã®ãããªäŒè°ã远å ããã¯ãªãã¯ïŒäºå®äœææïŒ äºå®ã®è©³çްç»é¢ã§ãããªäŒè°ãªãã·ã§ã³ïŒæ¯è»ããŒã¯ïŒãã¯ãªã㯠äºå®è©³çްç»é¢ã§æ¯è»ããŒã¯ãæŒäž ãäŒè°ã®èšé²ãã¿ãã§ãGemini ã§ã¡ã¢ãçæããããäŒè°ãæåèµ·ããããããããå¿
èŠã«å¿ããŠæå¹åãã äŒè°ã®èšé²ã¿ãã§èªåã¡ã¢çæãæå¹åãã äŒè°åå åŸã«çæãéå§ãã PC ã§ã®æäœ äºåã«æå¹åããŠããªãå Žåã§ããäŒè°éå§åŸã«ãèªåã¡ã¢çæãéå§ããããšãã§ããŸããPC ã§ã®æé ã¯ä»¥äžã®ãšããã§ãã Google Meet ã®ãããªäŒè°ã«åå ãã ç»é¢å³äžã® Gemini ã¢ã€ã³ã³ãã¯ãªãã¯ãã ãã¡ã¢ã®äœæãéå§ããã¯ãªãã¯ãã Google Meet ã®ç»é¢ã§ãã¡ã¢ã®äœæãéå§ããæŒäž ã¢ãã€ã«ç«¯æ«ïŒAndroidãiOSïŒã§ã®æäœ ã¢ãã€ã«ç«¯æ«ã§ã¯ãäŒè°åå åŸã«ä»¥äžã®æé ã§èªåã¡ã¢çæãéå§ã§ããŸãã 察象ã®ãããªäŒè°ã«åå ãã ç»é¢äžã®ã¡ãã¥ãŒã¢ã€ã³ã³ãã¿ãããã ç»é¢äžã®ã¡ãã¥ãŒã¢ã€ã³ã³ãã¿ãã ãGemini ã§ã¡ã¢ãçæããããã¿ãããã ãGemini ã§ã¡ã¢ãçæããããã¿ãã æ¡å
ã«åŸã£ãŠãã¡ã¢ã®äœæãéå§ããã¿ãããã äŒè°äžã®åå è
ã«ããåæ çµç¹ã®ç®¡çè
ã®èšå®ã«ãã£ãŠã¯ãèªåã¡ã¢çæãé²ç»ãªã©ã®æ©èœã䜿çšããåã«ãåå è
å
šå¡ã«å¯ŸããŠæç€ºçãªåæãæ±ããããã³ããã衚瀺ãããããšããããŸãããã®å Žåãæ©èœããªã³ã«ããŠäŒè°ãç¶ç¶ããã«ã¯ãåå è
ããç¶è¡ããã¯ãªãã¯ããŠåæããå¿
èŠããããŸãã åè : Google Meet ã®ãèªåã¡ã¢çæã - äŒè°æ©èœã®å©çšã«åæãã ã¡ã¢ã®æäœãã§ãããŠãŒã¶ãŒ ã¡ã¢ã®éå§ãšåæ¢ãæäœã§ããã®ã¯ãååãšããŠäŒè°ã®äž»å¬è
ããŸãã¯äž»å¬è
ãšåãçµç¹ã«æå±ããåå è
ã§ãã äž»å¬è
åãã®èšå®ãæå¹ã«ãªã£ãŠããå Žåã¯ãäŒè°ã®äœæè
ãäž»å¬è
ãå
±åäž»å¬è
ã®ã¿ãæäœå¯èœã§ãã管çè
ããã¯ã€ãã¯åæ¢ããæå¹ã«ããŠããå Žåãçµç¹å
ã®ãŠãŒã¶ãŒã®èª°ããã忢ããã¯ãªãã¯ããããšã§ããã¹ãŠã®åå è
ã®èªåã¡ã¢çæãçµäºããŸãã 察é¢äŒè°ã§ã®ã¡ã¢çæ åè : 察é¢äŒè°ã§ãèªåã¡ã¢çæãã䜿çšãã PC ã®ãã©ãŠã¶ã§ã®æäœ Google Meet äžã§è¡ãããäŒè°ã ãã§ãªãã察é¢ã§ã®äŒè°ã§ãèªåã¡ã¢çææ©èœã䜿çšã§ããŸãã å
·äœçã«ã¯ãPC ãŸãã¯ã¢ãã€ã«ç«¯æ«ã§ Google Meet ãéããèªåã¡ã¢çæãæå¹åããããã§ããã€ã¯ã§äŒè°ã®é³å£°ãã€ã³ãããããŸãã PC ã§ã®æé ã¯ä»¥äžã®ãšããã§ãã ãã©ãŠã¶ã§ Google Meet ã®ãããç»é¢ïŒ https://meet.google.com/home ïŒã«ã¢ã¯ã»ã¹ãã ç»é¢å³äžã®ãã¡ã¢ãå
¥åããæŒäžãã ãã¡ã¢ãå
¥åããæŒäž ç»é¢ã®æ¡å
ã«åŸãããã®å Žã®åå è
ã«åšç¥ããäžã§ãã¡ã¢ã®äœæãéå§ããæŒäž ãã¡ã¢ã®äœæãéå§ããæŒäž ã¢ãã€ã«ç«¯æ«ã§ã®æäœ Android ã iOS ã®ã¢ãã€ã«ç«¯æ«ãçšããŠã察é¢ã§ã®äŒè°ã§èªåã¡ã¢çæãéå§ããæé ã¯ä»¥äžã®ãšããã§ãã Google Meet ã¢ããªãéããç»é¢äžéšã®ãã¡ã¢ãäœæããã¿ãã ãã¡ã¢ãäœæããã¿ãã ç»é¢ã®æ¡å
ã«åŸãããã®å Žã®åå è
ã«åšç¥ããäžã§ãã¡ã¢ã®äœæãéå§ããã¿ãã ãã¡ã¢ã®äœæãéå§ããã¿ãã ã¡ã¢ã®ä¿åå Žæãšå
±æ Google ãã©ã€ããžã®ä¿å èªåã¡ã¢çææ©èœã«ãã£ãŠäœæãããäŒè°ã¡ã¢ã®ããã¥ã¡ã³ãã¯ãäŒè°ã®çµäºåŸããã«èªåçæããã äŒè°äž»å¬è
ã®ãã€ãã©ã€ã ã«ä¿åãããŸãã å
·äœçã«ã¯ãäž»å¬è
ã®ãã€ãã©ã€ãå
ã«é
眮ããããGoogle Meetããã©ã«ãå
ã«ãç¹å®ã®äŒè°ããšã®ãµããã©ã«ããèªåäœæããããã®äžã«ã¡ã¢ãä¿åãããŸããããã«ãããéå»ã®äŒè°èšé²ãæŽçãããç¶æ
ã§ç®¡çã§ããŸãã Google ã«ã¬ã³ããŒãžã®æ·»ä» çæãããã¡ã¢ã®ããã¥ã¡ã³ãã¯ãGoogle ãã©ã€ãã«ä¿åãããã ãã§ãªãã察象ãšãªãäŒè°ã® Google ã«ã¬ã³ããŒã®äºå®ã«èªåçã«æ·»ä»ãããŸããããã«ãããã«ã¬ã³ããŒã®äºå®ã«æåŸ
ãããŠããã¡ã³ããŒã¯ãã«ã¬ã³ããŒã®äºå®è©³çްç»é¢ããçŽæ¥ã¡ã¢ãžã¢ã¯ã»ã¹ã§ããŸãã äºå®è©³çްç»é¢ã«ã¡ã¢ã远å ãããŠããæ§å ãŸããäŒè°çµäºçŽåŸã«ã¯ãã€ã©ã€ãã®ãªã³ã¯ãèšèŒãããã¡ãŒã«ãäŒè°äž»å¬è
å®ã«éä»ããããããè°äºé²ã® URL ãæåã§å
±æãçŽãæéãçããŸãã äŒè°ã¡ã¢ã®ã¡ãŒã«ãå±ãæ§å ã¢ã¯ã»ã¹æš©éã®ç®¡ç ã¡ã¢ã®ããã¥ã¡ã³ããžã®ã¢ã¯ã»ã¹æš©éã¯ãäŒè°ã®äž»å¬è
ïŒãŸãã¯å
±åäž»å¬è
ïŒããã¡ã¢ã®äœæãéå§ããéã«éžæããå
±æèšå®ã«äŸåããŸãã éåžžãçµç¹å
ã®æåŸ
è
ã«å¯ŸããŠã¯èªåçã«ããã¥ã¡ã³ãã®ã¢ã¯ã»ã¹æš©éãä»äžãããåå è
ã®ãGoogle Meetããã©ã«ãå
ã«ããã¥ã¡ã³ããžã®ã·ã§ãŒãã«ãããäœæãããŸãã ããããå€éšã²ã¹ãã«å¯ŸããŠã¯ãã«ã¬ã³ããŒã®äºå®ã«ããã¥ã¡ã³ããæ·»ä»ãããŠããããšã確èªã§ããŠããããã¥ã¡ã³ããéãããã®ã¢ã¯ã»ã¹æš©éã¯å¥éä»äžãããŠããªãå ŽåããããŸãã ãŸããã°ã«ãŒãã®ã¡ãŒã«ã¢ãã¬ã¹ã䜿çšããŠäžæ¬ã§ã¡ã³ããŒã远å ããå Žåãã°ã«ãŒãã«èªåçã«æš©éã¯ä»äžãããŸãããã¡ã¢çæåŸã«ãæç€ºçã«ã°ã«ãŒãã«æš©éãä»äžããå¿
èŠããããŸãã åè : Google Meet ã®ãèªåã¡ã¢çæã - äŒè°ã®çµäºåŸ è¥¿å æ£ç (èšäºäžèЧ) äºæ¥éçºéš ã¯ã©ãŠããµããŒã課 倧éªåºåºèº«ãåæµ·éåšäœã2026幎5æããG-genã«ãžã§ã€ã³ã çŸåšã¯ Google Workspace ãäžå¿ã«ãã«ã¹ã¿ããŒãµããŒãã«åŸäºã Google Cloud å
š 14 è³æ Œä¿æã 奜ããªãã®ã¯åçãšæ
è¡ã
ããã«ã¡ã¯ãæ ªåŒäŒç€ŸLuupã§Engineering ManagerãããŠããç§å·ã§ãã 2026幎9æ1æ¥ïŒç«ïŒã3æ¥ïŒæšïŒã«ãã«ãµãŒã«æžè°·ã¬ãŒãã³ã§éå¬ãããDroidKaigi 2026ã«ãAndroidãšã³ãžãã¢ã®ã¡ã³ããŒãšãã£ããã«åå ããŠããŸããïŒ Luupã§ã¯LUUPã¢ããªãiOSã»Androidãšãã«ãã€ãã£ãã§éçºããŠããã®ã§ãAndroidéçºã®ææ°ååãAI掻çšã®äºäŸããã£ããã¢ãããããåå ããŠããŸããã å¹³æ¥éå¬ã®ããç§ã¯æçµæ¥ããåå ã§ããæ®å¿µã§ããããè³æãã»ãã·ã§ã³åç»ã¯åŸæ¥å
¬éãããã¯ããªã®ã§ãèŽããªãã£ãã»ãã·ã§ã³ã¯ãã¡ãã§è¿œããããããšæã£ãŠããŸãã

















