ãã®èšäºã¯ äžäŒ.com Advent Calendar 2024 ã®1æ¥ç®ã®èšäºã§ãã kymmt ã§ãã åœããã°ãäžäŒ.com Developers Blogãã¯ã以åããã¯ãŠãªããã°ã§éçšããŠããŸãããããŠãä»å¹Žããã¯å·çç°å¢ãå°ãæ¹åããŸãããå
·äœçã«ã¯ãGitHubãçšããŠèšäºã®äœæãå
¬éãã§ããããã«ããŸããã ãã®èšäºã§ã¯ãåœããã°ã®å·çç°å¢ãã©ã®ããã«æ¹åãããµã ãéçšããŠãããã«ã€ããŠç޹ä»ããŸãã HatenaBlog Workflows Boilerplateã®å°å
¥ åŸæ¥ã¯ãå·çè
ãèšäºãããŒã«ã«ãããã°ç®¡çç»é¢ã®ãšãã£ã¿äžã§æžãããªãããã®æ¹æ³ã§ã¬ãã¥ãŒãåããå
¬éãããšãããããŒã§ããããã®ãããŒã§äžçªããã¯ã«ãªããããã®ã¯ã¬ãã¥ãŒã§ãSlackäžã§ã¬ãã¥ãŒãå±éãããã¡ã«ãªããè°è«ã远ãã¥ãããšããåé¡ããããŸããã ããã§ãå·çç°å¢ã®æ¹åã®ããã«ãã¯ãŠãªãããβçãšããŠå
¬éããŠããHatenaBlog Workflows Boilerplateãå©çšããŠãèšäºå·ççšã®ãªããžããªãæŽåããŸããã github.com ããã¯ãGitHub Actionsã®ã¯ãŠãªããã°çšreusable workflowéã§ãã hatenablog-workflows ãçšãããã¯ãŠãªããã°èšäºå·ççšã®ãªããžããªãã³ãã¬ãŒãã§ãã ãªããžããªãæŽåããçµæãGitHubäžã§ã¯ãŠãªããã°ã®èšäºãMarkdownãã¡ã€ã«ãšããŠç®¡çããããGitHub Actionsã§åçš¿ã®åæãå
¬éãªã©ã®æäœãå®è¡ã§ããããã«ãªããŸããã çŸåšã¯ãèšäºå·çã®ãããŒã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã äžæžãçšpull request (PR)äœæactionãå®è¡ æå
ã«ãã©ã³ããæã£ãŠããŠå·ç ãšãã©ãã³ããããpushããŠã¯ãŠãªããã°ã«åæãããã¬ãã¥ãŒç»é¢ã§ç¢ºèª PRäžã§ã¬ãã¥ãŒ å
¬éã§ããç¶æ
ã«ããŠPRãmainã«ããŒãžããèªåã§èšäºå
¬é æ®æ®µéçºã«æºãã£ãŠããã¡ã³ããŒã¯GitHubã«æ
£ããŠããŸãããã®ãããªã¡ã³ããŒãPRäžã§ããã°èšäºå·çãã¬ãã¥ãŒãã§ããããã«ããããšã§ã®å·çäœéšåäžãå³ããŸããããšãã«ãã¬ãã¥ãŒãPRã§å®æœããããšã§ãããã³ã¡ã³ããã©ã®æç« ã«å¯Ÿãããã®ãªã®ãåããããããªãç¹ã¯äŸ¿å©ã ãšæããŠããŸãã瀟å
ã®ã¡ã³ããŒãããã ããã°ã GitHub ã§ç®¡çã§ããããã«ãªã£ãã®ã¯ãã¬ãã¥ãŒã®èгç¹ã§ãã³ãããããã ãšããææ³ãããã£ãŠããŸãã èšäºã®ãã¿ç®¡ç èšäºã®ãã¿ã¯GitHubã®issueãšããŠç®¡çããŠããŸããã©ã®å·çPRã§ãã¿ãèšäºã«ãªã£ãã®ããããã¿ã«é¢ãã现ããã¡ã¢ãèšé²ããŠããŸããæ
å ±ã®äžå
åã®èгç¹ã§ã¯ãã¹ãã¬ããã·ãŒããªã©ã§å¥ç®¡çããããã¯å¥œãŸãããšæããŸãã æ ¡æ£ æ ¡æ£ã¯ textlint ãå©çšããŠããŸãã pull_request ããªã¬ãŒã§textlintã«ããæ ¡æ£ãå®è¡ããGitHub Actionsã®ã¯ãŒã¯ãããŒãèšå®ããŠããŸããã¯ãŒã¯ãããŒã¯.github/workflows/textlint.yamlã«æ¬¡ã®ãããªãã®ã眮ããŠããŸãã name : textlint on : pull_request : paths : - "draft_entries/*.md" - "entries/*.md" jobs : run : runs-on : ubuntu-latest steps : - uses : actions/checkout@v4 with : fetch-depth : 0 - uses : actions/setup-node@v4 - run : npm ci - name : Add textlint problem matcher run : echo "::add-matcher::.github/textlint-unix.json" - name : Lint files added/modified in the PR run : | git diff --diff-filter=AM origin/main...HEAD --name-only -- '*.md' | xargs npx textlint --format unix .github/textlint-unix.jsonã¯æ¬¡ã®ãšããã§ãã { " problemMatcher ": [ { " owner ": " textlint-unix ", " pattern ": [ { " regexp ": " ^(.+):( \\ d+):( \\ d+): \\ s(.*)$ ", " file ": 1 , " line ": 2 , " column ": 3 , " message ": 4 } ] } ] } ããã§PRç»é¢äžã«textlintã«ããæ ¡æ£çµæã衚瀺ãããããã«ãªããŸãã textlintã§çŸåšäœ¿ã£ãŠããã«ãŒã«ã¯æ¬¡ã®ãšããæäœéã®ãã®ã§ããæè¡èšäºããã¯ãã«ã«ã©ã€ãã£ã³ã°ã®äžçš®ã§ãããšã¯æããŸãããWebäžã§æ°è»œã«èªãã§ãããé¡ã®ãã®ã§ããããããæäœã«ããçšåºŠåæ§ãåºãã®ã¯åé¡ãªããšèãããããŸã§å³ããã«ãŒã«ã«ã¯ããŠããŸããã ja-no-abusage: æ¥æ¬èªã®èª€çšãã§ã㯠ja-unnatural-alphabet: äžèªç¶ãªã¢ã«ãã¡ãããæ€ç¥ preset-japanese: æ¥æ¬èªææžåãã®ããªã»ãã èªç¹ã®æ°ããŠã«ãã¯ãæã®é·ããªã© ã¬ãã¥ã¢ãŒ èšäºãã¡ã€ã«ãé
眮ããããã£ã¬ã¯ããªã®ã³ãŒããªãŒããŒã«æè¡åºå ±æ
åœè
ãèšå®ããŠãæ
åœè
ã®ã¬ãã¥ãŒãéãã°èšäºãå
¬éããŠOKããšãããããŒã«ããŸãããçŸåšã¯2åã®æ
åœè
ã§åããŠããŸãã HatenaBlog Workflows Boilerplateãå©çšããŠãããšããåæã§ã.github/CODEOWNERSãæ¬¡ã®ããã«èšå®ããŠããŸããããã§ @org ã«ã¯GitHub orgã®ååãã team ã«ã¯æè¡åºå ±æ
åœè
ãããªãteamã®ååãå
¥ããŸãã /draft_entries/ @org/team /entries/ @org/team ãã®èšå®ã«å ããŠããªããžããªã®branch protection rulesãšããŠmainãã©ã³ãã§ã³ãŒããªãŒããŒã®ã¬ãã¥ãŒãå¿
é ã«ããããšã§ãå¿
ãæè¡åºå ±æ
åœè
ãç®ãéããä»çµã¿ãšããŠããŸãã ãšã¯ãããåèšäºã®å
容ã«ã€ããŠã¯å·çè
ã®ããŒã ã¡ã³ããŒã®ã»ããæ·±ãçè§£ããŠããããšãå€ãã§ããã§ãã®ã§ãå
å®¹ã®æ£ç¢ºæ§ãšãã芳ç¹ã§ã¯ããŒã ã¡ã³ããŒã©ããã§ã¬ãã¥ãŒããŠããããæè¡åºå ±æ
åœè
ã¯äŒç€Ÿã®ååã§ç€Ÿå€ã«å
¬éããèšäºãšããŠãµããããããšãã芳ç¹ã§ã®ãã§ãã¯ãããããšãå€ãã§ãã äœè«: HatenaBlog Workflows Boilerplateãžã®ãã£ãŒãã£ãŒãªã¯ãšã¹ã äžèšã®BoilerplateãçšããŠãªããžããªãéçšããŠãããã¡ã«ãã»ããæ©èœã1ã€çãŸããã®ã§ã該åœãªããžããªã®issueãéããŠæ©èœããªã¯ãšã¹ãããŸããã github.com å
·äœçã«ã¯ãäžæžãPRãäœæãããšãããã®PRã¯draftç¶æ
ã«ãªã£ãŠããŠã»ãããšãããã®ã§ããGitHubã®ä»æ§äžãPRãdraftããready for reviewã«ãªããšããã³ãŒããªãŒããŒãžã¬ãã¥ãŒäŸé Œã®éç¥ãéãããããã«ãªã£ãŠããŸããã§ãã®ã§ãèšäºãæžãå§ãããšãã®PRãšããŠã¯draftãšããã®ãèªç¶ãšèããããšãããã®ã§ãã çµæãæ©èœãšããŠç¡äºåã蟌ãã§ããã ããŸãããããããšãããããŸãã 1 ã staff.hatenablog.com ãããã« ãã®èšäºã§ã¯2024幎ã®åœããã°ã®å·çç°å¢ã«ã€ããŠç޹ä»ããŸãããGitHubãèµ·ç¹ãšããå·çç°å¢ãèªååãåãå
¥ããããšã§ãå·çäœéšãåäžã§ããŸããããã®èšäºã玹ä»ããä»çµã¿ã§æžããŸãããåŒãç¶ãããã®ããã°ã§äžäŒã§ã®éçºã«ãããè峿·±ããããã¯ããå±ãããŠãããã°ãšæããŸãïŒ æ©èœãªãªãŒã¹åŸã«ãdraftæ©èœãGitHubã®ææãã©ã³ã®æ©èœã§ããããšã«äŒŽããã©ããŒã¢ãããããŠããã ããŸãããããããšãããããŸãã ↩
kymmt ã§ãã 11/30ã«éå¬ãããRust.Tokyo 2024ã«äžäŒã¯ãŽãŒã«ãã¹ãã³ãµãŒãšããŠåè³ããŸãã rust.tokyo äžäŒã§ã®Rustã®æŽ»çš äžäŒã§ã¯äžäŒ.comã¬ã¹ãã©ã³ã«ãããŠRustã®æŽ»çšãé²ããŠããŸããæšå¹Žã«åœããã°ã§æŽ»çšã®æ§åã玹ä»ããéã¯ãåœæéçºãé²ãã§ããã¬ã¹ãã©ã³äºçŽãµãŒãã¹Web UIã®ããã¯ãšã³ãã«ããããŠãŒã¹ã±ãŒã¹ã ãã«è§ŠããŠããŸããã user-first.ikyu.co.jp ãããã1幎匱çµéããçŸåšã§ã¯ãRust掻çšã®å Žã¯ããã«åºãã£ãŠãããRustãæžããŠããã¡ã³ããŒãå¢ããŠããŠããŸãã Rust.Tokyoã®ãŽãŒã«ãã¹ãã³ãµãŒ 2024幎ã¯Rustã§WebãµãŒãã¹ãéçºããã®ããŸããŸãçŸå®çãªéžæè¢ãšããŠæããããã«ãªã£ã幎ã ã£ãã®ã§ã¯ãªãããšæããŸããããšãã°ãRustã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããããã®æ¬ãè€æ°çºå£²ããããªã© 1 ãåŠç¿ãªãœãŒã¹ã¯çå®ã«æã£ãŠããŠããŸãããã®ãããªç°å¢ã®ãªãã§ãäžäŒãRustæ¡çšäŒæ¥ãšããŠæŽ»çšäºäŸã®å
±æãªã©ãéããŠã³ãã¥ããã£ã掻æ§åãããããšãéèŠã ãšèããŠããŸãã 以äžã®ãããªç¶æ³ã«åºã¥ããŠãäžäŒã¯ãã®ãã³Rust.Tokyo 2024ã«ãŽãŒã«ãã¹ãã³ãµãŒãšããŠåè³ãããŠããã ãããšã«ãªããŸãããåœæ¥ã¯äŒå Žã§ ã¹ãã³ãµãŒã»ãã·ã§ã³ç»å£ ããŒã¹ã®åºå± ããããŸãã ã¹ãã³ãµãŒã»ãã·ã§ã³ã§ã¯ããã©ãã¯Aã§15:25ãã ãç·äŒå¡æ°1,500äžäººã®ã¬ã¹ãã©ã³WebäºçŽãµãŒãã¹ã«ãããRustã®æŽ»çšã ãšé¡ããŠkymmtãçºè¡šããŸãã2024幎çŸåšã®äžäŒ.comã¬ã¹ãã©ã³ã«ãããRust掻çšã®æ§åã®ã¹ãããã·ã§ãããšããŠãã·ã¹ãã ã®èšèšãæè¡çãªãããã¯ã«ã€ããŠç޹ä»ããäºå®ã§ãã ãŸããäŒå Žã§ã¯ããŒã¹ãåºå±ããäºå®ã§ããæè¡åºå ±ããŒã ãäžå¿ã«ãäžäŒ.comã¬ã¹ãã©ã³ã®ãšã³ãžãã¢ãšããŠkymmtããã»ãã«ã宿æ³äºçŽãµãŒãã¹ã®äžäŒ.comã®ãšã³ãžãã¢ãšEMãããŒã¹ã«åå ããäºå®ã§ããäžäŒã®ãµãŒãã¹éçºã®æ§åã«ã€ããŠèå³ãããããã¯ãã²ãè¶ããã ããã ãããã« 11/30ã«äžäŒã¯Rust.Tokyo 2024ã«ãŽãŒã«ãã¹ãã³ãµãŒãšããŠåè³ããŸããåå è
ã®ããã¯åœæ¥äŒå Žã§ãäŒãããŸãããïŒ https://bookclub.kodansha.co.jp/product?item=0000398182 ã https://www.shoeisha.co.jp/book/detail/9784798186016 ãªã© ↩
kymmt ã§ãã ä»æã¯ 11æ16æ¥ã«äº¬éœã§éå¬ããã TSKaigi Kansai 2024 11æ23æ¥ã«æ±äº¬ã§éå¬ããã JSConf JP 2024 ãšãJavaScript/TypeScriptã«é¢ããã«ã³ãã¡ã¬ã³ã¹ã2ã€éå¬ãããŸããä»å¹Žã¯ãäžäŒ.comã¬ã¹ãã©ã³ã®ããã³ããšã³ãã¢ãŒããã¯ããåãããšã³ãžãã¢æ©ç° ( @takashi_onda )ããããã®ã«ã³ãã¡ã¬ã³ã¹äž¡æ¹ã«ç»å£ããŸãã 1é±éãã§éå¬ãããããããã®ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ãäžäŒ.comã¬ã¹ãã©ã³ã®ããã³ããšã³ãéçºããã£ãããšããå
容ã®ããŒã¯ããŒããæºããŠç»å£ããŸãããã®èšäºã§ã¯ãçŸåšçµ¶è³çºè¡šæºåäžã®æ¬äººããã®ã³ã¡ã³ãã亀ãã€ã€ãçºè¡šå
容ã«ã€ããŠç޹ä»ããŸãïŒ TSKaigi Kansai 2024: æ§é çåä»ããšserializeå¢ç kansai.tskaigi.org TSKaigi Kansai 2024ã¯ãTypeScriptãããŒããšããŠ2024幎5æã«æ±äº¬ã§éå¬ãããTSKaigi 2024ããæŽŸçããå°ååã«ã³ãã¡ã¬ã³ã¹ã§ãã æ¬ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ã16:00-16:30ã«ãã«ããã·å ãäŒå Žã§ãæ§é çåä»ããšserializeå¢çããšããã¿ã€ãã«ã§æ©ç°ãçºè¡šããŸãã 以äžãæ©ç°ããã®ã³ã¡ã³ãã§ãã 京éœåšäœãªã®ã§ãå°å
ã§ã話ãã§ããã®ã楜ãã¿ã§ããäžäŒã§ã¯åã®ããã«é¢è¥¿ããã®ä»ã®å°åã«åšäœããŠãããšã³ãžãã¢ãè€æ°ããŸããçºè¡šãèããŠããã ãèå³ãæãããæ¹ã¯ããæ°è»œã«ã声ãããã ããã JSConf JP 2024: Reactãžã®äŸåãæå°ã«ããããã³ããšã³ãã®èšèš jsconf.jp JSConf JP 2024ã¯ãJapan Node.js Associationæ§ã«ããéå¶ãããŠãããJavaScriptãããŒããšããå€§èŠæš¡ã«ã³ãã¡ã¬ã³ã¹ã§ãã æ¬ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ã11:10-11:40ã«ãã©ãã¯Bã§ãReactãžã®äŸåãæå°ã«ããããã³ããšã³ãã®èšèšããšããã¿ã€ãã«ã§çºè¡šããŸãããã®çºè¡šã¯ãæ¬ããã°ã§ä»¥åå
¬éããèšäºãReact / Remixãžã®äŸåãæå°ã«ããããã³ããšã³ãèšèšããããšã«ãä»åãããããŠJSConfã§ã話ããããã®ã§ãã user-first.ikyu.co.jp 以äžãæ©ç°ããã®ã³ã¡ã³ãã§ãã äžäŒã¬ã¹ãã©ã³ã®ããã³ããšã³ãéçºã§ã¯ãççµåãªèšèšãå¿ãããŠããŠãã»ãšãã©ã®ããžãã¯ã¯ Vanilla JS ã ãã§å®çµããŠããŸãããã®ãããªæžãæ¹ãå¯èœãšãããããã¯ãšã³ãéçºã§å¹ãããç¥èŠãããã³ããšã³ãã«é©çšããææ³ã«ã€ããŠã話ãããããšæããŸãã ãããã« ãã®èšäºã§ã¯ãTSKaigi Kansai 2024ãšJSConf JP 2024ã§ã®ãšã³ãžãã¢æ©ç° (@takashi_onda)ã®çºè¡šå
容ã«ã€ããŠç޹ä»ããŸããã åå è
ã®æ¹ã¯ãããããã®äŒå Žã§ãã²çºè¡šãèãã«æ¥ãŠããã ããã°ãšæããŸãïŒ
CTO宀ãã©ãããã©ãŒã éçºããŒã ã®ããã«ãããšå±±å£( @igayamaguchi )ã§ãã å
æ¥ãVue Fes Japan 2024ãéå¬ãããäžäŒã¯ç»å£ãšã¹ãã³ãµãŒãããŸããããã®ç޹ä»ãããŸãã Vue Fes Japan 2024ãéå¬ 10æ19æ¥(å)ã«æ¥æ¬æå€§çŽã® Vue.js ã«ã³ãã¡ã¬ã³ã¹ã Vue Fes Japan 2024 ãéå¬ãããŸãããäžäŒã¯åœã«ã³ãã¡ã¬ã³ã¹ã§ããããŒã¶ã«æ¡æã«ããçºè¡šãšãã©ã³ãã¹ãã³ãµãŒãšããŠã©ã³ãã»ãã·ã§ã³ã§ã®çºè¡šãè¡ããŸããããã®èšäºã§ã¯ãã®çºè¡šã®æŠèŠã玹ä»ããŸãã äžäŒã§è¡ã£ãçºè¡šã¯2ã€ã§ãã Vue.jsãNuxtã®æ©èœã䜿ãã 倧éã®ã³ããã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ãã NuxtããŒã¹ã®ãWXTãã§Chromeæ¡åŒµãäœæãã Vue.jsãNuxtã®æ©èœã䜿ãã 倧éã®ã³ããã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ãã 1ã€ç®ã®çºè¡šã¯èªåãããããŒã¶ã«ãéãæ¡æãããçºè¡šã§ããäžäŒ.comãYahoo!ãã©ãã«ã§çºçããã³ããåé¡ã®åå ãšè§£æ±ºçã®è©±ã§ãã speakerdeck.com äžäŒ.comãYahoo!ãã©ãã«ã§ã¯å€§éã®ã³ããã³ãŒããçºçããŠããŸãããããã«ããäœãã倿Žãããšãã«äœæ¥ãNåã«ãªã£ãŠããŸããéçºã¹ããŒããèœã¡ãŠããŸããã ä»åã®çºè¡šã§ã¯ãã®åé¡ã®åå ãçŽè§£ã解決ããŠãã£ã話ãããŸããã ã³ããåé¡ãšãã£ãŠãåå ã¯æ§ã
ã§ããã¯ãŒã¯ãããŒã«åé¡ããã£ãããã³ãããçºçããããåŸãªãæè¡çèæ¯ããã£ãããããããã«å¯Ÿå¿ããŠããŸãã å
容ããã£ããæãåºããšã以äžã®ããã«ãªããŸãã éçºã¯ãŒã¯ãããŒã«åé¡ãããUIã®ã³ãããæšªè¡ããŠããã®ã§ãã¯ãŒã¯ãããŒã®èŠçŽããUIã³ã³ããŒãã³ãã®äœæ ãã¶ã€ã³å·®åãå°ããããŠã³ãŒãã®çµ±äž Option APIã§ããžãã¯ãå
±éåã§ããŠããªãã£ãã®ã§ãComposition APIãå°å
¥ããŠå
±éåãããã«ã¯è²¬åããã®ããã®ã³ã³ããŒãã³ãåå² è©³çŽ°ã¯çºè¡šè³æãã芧ãã ããã NuxtããŒã¹ã®ãWXTãã§Chromeæ¡åŒµãäœæãã 2ã€ç®ã¯æ°èŠãããã¯ãéçºéšã®æéã«ããã©ã³ãã»ãã·ã§ã³ã§ã®çºè¡šã§ãããWXTããšããOSSã䜿çšããChromeæ¡åŒµãäœæããŠã¿ã話ã§ãã speakerdeck.com äœãã䟿å©ã«ããããšChromeæ¡åŒµã䜿ãããšæã£ãæãèªåã®æ±ããChromeæ¡åŒµãååšããªãã£ãããä¿¡çšã§ããªãéçºè
ã®Chromeæ¡åŒµã䜿çšããããªããšããããšããããŸãããã®åé¡ã解決ããããã«ãWXTããšããOSSã䜿çšããŠChromeæ¡åŒµãéçºãã話ãããŸããã WXTã¯NuxtããŒã¹ã§éçºã§ããæ¡åŒµæ©èœéçºãã¬ãŒã ã¯ãŒã¯ã§ããChromeæ¡åŒµãéçºããã«ã¯ããã€ãèšå®ãã¡ã€ã«ãäœæãããChromeæ¡åŒµç¹æã®äœæ¥ãå¿
èŠã§ãšãŠãé¢åãªã®ã§ãããWXTã䜿çšããããšã§ãã®äœæ¥ããšãŠãç°¡åã«ãªããŸãããããNuxtã䜿çšããŠãã人ã«ã¯åãããããã€ã³ã¿ãŒãã§ãŒã¹ã«ãªã£ãŠãããVue.js/Nuxtãè§Šã£ãŠããéçºè
ã«ã¯ãšãŠãéçºãããããã®ã«ãªã£ãŠããŸããããã«ã¯Vue.jsã ãã§ãªãReactãªã©ä»ã®UIãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠéçºããããšãã§ããŸãã èªåã§Chromeæ¡åŒµãäœããããšããæ¹ã¯ãã®çºè¡šãåèã«WXTã詊ããŠã¿ãŠãã ããã ãããã« Vue Fes Japan 2024ã§ã®äžäŒã®çºè¡šã玹ä»ãããŠããã ããŸããã Vue Fesã§ãããçºè¡šè
ããã€äžèŠèŽè
ãšããŠåå ããŠã¿ãŠããããç±ãããã«ã³ãã¡ã¬ã³ã¹ã§ãããåå è
ãå€ããVue.jsã ãã§ãªãViteã®è©±ãèããŠãããã«Rolldownãoxcã®è©±ãéçºè
ããèãããšããå Žã¯åœå
ã§ã¯ãªããªããªããšæããŸãããã®ãããªå Žã§çºè¡šã§ããããšãã¹ãã³ãµãŒãã§ããããšã¯ãšãŠããããããã£ãã§ãã 2025幎ãéå¬ããããšã®ããšãªã®ã§ãŸã楜ãã¿ã§ãã äžäŒã§ã¯ããšãã«è¯ããµãŒãã¹ãã€ãã£ãŠãã仲éãåéäžã§ãã hrmos.co ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããã®ã§ããæ°è»œã«ãå¿åãã ããã www.ikyu.co.jp
ã¯ããã« kymmt ã§ãã å
æ¥2024幎9æ18æ¥ã«ããäºæ¥äŒç€Ÿã®ãµãŒãã¹ãæ¯ããåºç€éçºããŒã¯ããšé¡ããŠã€ãªã³ã¹ããŒããã¯ãããžãŒïŒä»¥äžASTïŒãããšååã§æè¡ã€ãã³ãã宿œããŸããã ikyu.connpass.com ã€ãã³ãã§ã¯ãåäŒç€Ÿã®äºæ¥ãæ¯ããåºç€ãããã¯ãã®éçºãéçšã«ãããèŠåŽã工倫ã«ã€ããŠç»å£è
ã®æ¹ã
ã«ã話ãããã ããŸããã ãã®èšäºã§ã¯ããã®ã€ãã³ãã®æ§åãçºè¡šã®å
容ã玹ä»ããŸãããªããXïŒæ§TwitterïŒã§ã #ikyu_aeon ãšããããã·ã¥ã¿ã°ã§åœæ¥ã®æ§åãã芧ã«ãªããŸãã äŒå Ž äŒå Žã¯ãäžäŒã®ãªãã£ã¹ãå
¥ã£ãŠããæ±äº¬ã¬ãŒãã³ãã©ã¹çŽå°Ÿäºçºå
ã® LODGE ã§ããã åœæ¥ã¯ãäžäŒïŒASTã®ã¡ã³ããŒãåãããŠèš30人çšåºŠã®æ¹ã«ãæ¥å Žããã ããŸããããŸããã€ãã³ãéå§åã«ãASTã®ããã¯ããããããããããªã¥è£œåãã€ãªã³ã§è²©å£²äžã®ãèåãæ¥å Žè
åãã«æäŸããŠããã ããŸããã #ikyu_aeon ããããïŒïŒãããããªã¥ãŒãšã€ãªã³ã§è²·ã£ãŠãããèåããããã€ããŸããïŒïŒ pic.twitter.com/p3qZmhdD2K — ããã¯ã (@morihaya55) September 18, 2024 çºè¡š ãæŽå²ãããããã¯ãã«ãã€ã¯ããµãŒãã¹ãå°å
¥ããããã»ã¹ã 1ã€ç®ã®çºè¡šã¯ãäžäŒã®èå°ããã«ãããæŽå²ãããããã¯ãã«ãã€ã¯ããµãŒãã¹ãå°å
¥ããããã»ã¹ãã§ããã äžäŒã®ãããã¯ããæšªæããŠå©çšããããã€ã¯ããµãŒãã¹çŸ€ïŒç€Ÿå
ã§ã¯äžäŒãã©ãããã©ãŒã ãšåŒãã§ããŸãïŒãéçºããããŒã ã§ã¯ãåå¥ã®ãããã¯ããžã®ãã€ã¯ããµãŒãã¹å°å
¥ãé²ããŠããŸããé·ãæŽå²ãæã¡ã³ãŒãããŒã¹ãè€éãªãããã¯ãã«ãã€ã¯ããµãŒãã¹ãå°å
¥ããã«ã¯ãæè¡èª²é¡ã®è§£æ±ºã«ãšã©ãŸãããç©ã¿éãªã£ã仿§ãè§£ãã»ãããŠé¢ä¿è
ãšèª¿æŽãé²ããå¿
èŠããããŸãã ãã®çºè¡šã§ã¯ããã®ãããªèª²é¡ã«çŽé¢ããäžäŒ.comã¬ã¹ãã©ã³ãžã®ãã€ã³ã管çãã€ã¯ããµãŒãã¹å°å
¥ã®äºäŸã玹ä»ããã ããŸãããçºè¡šã®ãªãã§ããããã³ãŒãåé€ã仿§ã®èª¿æŽã®ãããªå°éãªåãçµã¿ããããããã¯ããšãã€ã¯ããµãŒãã¹ãççµåã«ä¿ã¡ã€ã€é£æºããä»çµã¿ã解説ããŠããã ããŸããã ã1000äžDLãè¶
ããiAEONã¢ããªïŒå®å
šåæ¢ãé²ãèé害æ§ãšä¿¡é Œæ§ã®èšèšã 2ã€ç®ã®çºè¡šã¯ãASTã®èããã«ããã1000äžDLãè¶
ããiAEONã¢ããªïŒå®å
šåæ¢ãé²ãèé害æ§ãšä¿¡é Œæ§ã®èšèšãã§ããã iAEONã¢ããªã¯å®åºèã®ã¬ãžåã§äŒå¡ããŒã³ãŒãã衚瀺ãããããªãŠãŒã¹ã±ãŒã¹ãæ³å®ããŠãããé害ãçºçããŠå©çšäžå¯ã«ãªãããšãå¯èœãªéãé¿ããããšããèŠä»¶ããããŸããäžæ¹ã§ãè€éãªããã¯ãšã³ãåŽã®äžéšã§çºçããé害ãã¢ããªã«äŒæããããšã§ãã¢ããªãå©çšäžå¯ã«ãªãããšãéå»ãã£ããšã®ããšã§ããã ãã®çºè¡šã§ã¯ãäžè¿°ãããããªç¹æ§ãæã€iAEONã¢ããªã®èé害æ§ãé«ããããã®åãçµã¿ã«ã€ããŠã話ãããã ããŸããããšãã«ãããã€ã¹äžã®ãã£ãã·ã¥ãªã©ã掻çšããŠããã³ããšã³ãã§ããiAEONã¢ããªäžã®ãšã©ãŒãã§ããã ã屿åããææ³ã«ã€ããŠè©³ãã解説ããã ããŸãããApp StoreãGoogle Play Storeã«ãããiAEONã¢ããªã®è©äŸ¡ãçµæçã«åäžãããšã®ããšã§çŽ æŽããããšæããŸããã ã宿æ³äºçŽãµã€ãã«ãããæ€çŽ¢ãšæéèšç®ã®äž¡ç«ã 3ã€ç®ã®çºè¡šã¯ãäžäŒã®éæ²»ããããã宿æ³äºçŽãµã€ãã«ãããæ€çŽ¢ãšæéèšç®ã®äž¡ç«ãã§ããã 宿æ³äºçŽãµã€ãã§ããäžäŒ.comãYahoo!ãã©ãã«ã§ã®æéã«é¢ããæ¥åã«ãŒã«ã¯è€éã§ãããŸãããŠãŒã¶ãŒã宿æ³ãããéšå±ãããŸããŸãªæ¡ä»¶ã«åºã¥ããŠæ€çŽ¢ãããšãã«ããã®è€éãªæ¥åã«ãŒã«ã§ç®åºãããæéã®æ€çŽ¢ãµãŒãã§ããSolrã§èšç®ããå¿
èŠããããŸãã ãã®çºè¡šã§ã¯ããã®ãããªäžäŒ.comã®æ€çŽ¢èŠä»¶ã®è€éãã®è§£èª¬ããèŠä»¶ãæºããããã«Solrã®ãã©ã°ã€ã³æ©æ§ã掻çšããŠããããšã«ã€ããŠè§£èª¬ããã ããŸãããSolrã®ãã©ã°ã€ã³ã¯Javaã§éçºããããšãã§ããJavaã®æ©èœã掻çšã§ããã®ã§ãSolrã¯ãšãªãã¡ã³ãããã«ã«ä¿ã¡ã€ã€ãè€éãªæéèšç®ãæ€çŽ¢æã«å®è¡ã§ããŠãããšã®ããšã§ããã ãSREæ¹åãµã€ã¯ã«ã¯ããŒã ãè¶
ã㊠- ããã·ã¥ããŒããçºããäŒã®åãçµã¿ã 4ã€ç®ã®çºè¡šã¯ãASTã®ããã¯ããããããSREæ¹åãµã€ã¯ã«ã¯ããŒã ãè¶
ã㊠- ããã·ã¥ããŒããçºããäŒã®åãçµã¿ãã§ããã New Relicãªã©ã掻çšããã·ã¹ãã ã¡ããªã¯ã¹ãæŠèгã§ããããã·ã¥ããŒãã¯ãéåžžæã«é害ã®åå ãæ¢ãããã®ãã®ãšããŠéåžžã«äŸ¿å©ã§ããäžæ¹ã§ãå®ç¹èŠ³æž¬ããããšã§ãæ¥ã
ã®ã·ã¹ãã ã®ç¶æ
ããé害ã«ãªãåŸãå€åãèŠã€ããããšãã§ããŸãã ãã®çºè¡šã§ã¯ãASTã®SREããŒã ãäžå¿ã«ããã·ã¥ããŒãã宿çã«çºããäŒãèšããããšã§ãã¡ããªã¯ã¹ã®å€åãæ¹åãã€ã³ããçºèŠããŠæ·±æãããæ©äŒãæå³çã«äœãåºãåãçµã¿ã«ã€ããŠã話ãããã ããŸãããã·ã¹ãã ã®ä¿¡é Œæ§ãé«ããæ©äŒãäœãåºãã®ã¯ãã¡ãããäŒãéããŠãã¶ã€ãªã³ã¹å¹æïŒåçŽæ¥è§Šå¹æïŒãã§ããŒã ãã«ãã£ã³ã°ã«ãå¯äžããŠããç¹ãçŽ æŽããããšæããŸããã ãããã« ãäºæ¥äŒç€Ÿã®ãµãŒãã¹ãæ¯ããåºç€éçºããŒã¯ãã®æ§åã«ã€ããŠç޹ä»ããŸããã å瀟ã®ãµãŒãã¹ã®åºç€ãããã¯ãéçºã«ã€ããŠç€Ÿå
å€ã®ãšã³ãžãã¢ã®å·¥å€«ãç¥èŠãèããããšãŠããããããã€ãã³ãã«ãªããŸããããæ¥å Žããã ããã¿ãªããŸãããããšãããããŸããïŒ äžäŒã§ã¯ããšãã«è¯ããµãŒãã¹ãã€ãã£ãŠãã仲éãåéäžã§ãã hrmos.co ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããã®ã§ããæ°è»œã«ãå¿åãã ããã www.ikyu.co.jp
ã³ãŒãã¬ãŒãæ¬éš 瀟å
æ
å ±ã·ã¹ãã éš å
Œ CISO宀 id:rotom ã§ãã 10/12(å) ã«ãã€ããªãã圢åŒã§æ
ã·ã¹åãã®ããã¯ã«ã³ãã¡ã¬ã³ã¹ ãBusiness Technology Conference Japan 2024ïŒBTCONJP 2024ïŒã ãéå¬ãããŸãã btcon.jp btajp.connpass.com æšå¹Žãªã³ã©ã€ã³éå¬ããã BTCONJP 2023 ã§ã¯ç§ãç»å£è
ãšã㊠æ¬ç€Ÿãæ±äº¬ã¬ãŒãã³ãã©ã¹çŽå°Ÿäºçºãžç§»è»¢ãããªãã£ã¹ãã¡ã·ãªãã£ã»ã³ãŒãã¬ãŒãIT ãå·æ°ãã話 ãšããããŒãã§çºè¡šãããŠããã ããŸããããä»å¹Žã¯ core staff ãšããŠéå¶ã«åç»ããŠãããæå±äŒæ¥ã§ããäžäŒã¯ããã³ãºã¹ãã³ãµãŒãšããŠåè³ããŠãããŸãã Identity, DX & AI, Device Management, Zero Trust, Cyber Security, Business Technology ã®6ã€ã®ããŒãã«æ²¿ã£ã12ã®ã»ãã·ã§ã³ããã€ãªã³ / ã€ãªã³ã¹ããŒããã¯ãããžãŒ CTO ã® å±±ïš è³¢æ°ã«ããåºèª¿è¬æŒãçšæããŠããŸãã 詳现ã¯ä»¥äžã®ãã¬ã¹ãªãªãŒã¹ãã芧ãã ããã prtimes.jp ãªãã©ã€ã³äŒå Žã¯äžäŒ æ¬ç€Ÿãå
¥å±
ãããæ±äº¬ã¬ãŒãã³ãã©ã¹çŽå°Ÿäºçº çŽå°Ÿäºã¿ã¯ãŒã®LINEã€ããŒæ ªåŒäŒç€Ÿ æ¬ç€Ÿã§ãã map.yahoo.co.jp LODGE ã§ã®æèŠªäŒãäºå®ããŠãããŸãã®ã§ããã²çŸå°ã§ãåå ãã ããïŒ
ã¯ããã« ããã«ã¡ã¯ã宿æ³ãããã¯ãéçºéšã®å®®åŽã§ãã ã¿ãªãããçæ AI 䜿ã£ãŠãŸããïŒ è¿å¹ŽãAI ã®é²æ©ã¯ãããŸãããæç« çæãç»åçæã¯ãã¡ãããåç»çæãå®çšçãªã¬ãã«ã§åºæ¥ãããã«ãªã£ãŠããŸãã ChatGPT ã話é¡ã«ãªã£ãã®ã 2022 幎㮠11 æãªã®ã§ããã£ã 2 幎足ããã§ãããŸã§æ¥ãŠãããšããäºå®ã«å°ãæãããããããŸãããAGI(æ±çšäººå·¥ç¥èœ)ã®å®çŸãããé ããªãã®ãããããŸããã äžäŒã§ã AI æè¡ã¯æ³šç®ããŠããŠä»å¹Žã® 6 æã«ããŸãã«çæ AI ã䜿ã£ãŠããã«æ€çŽ¢ã·ã¹ãã ã®æ¹åãè¡ããŸããã ãã®èšäºã§ã¯ããã®æã«åŠãã ããã³ãããšã³ãžãã¢ãªã³ã°ã®éèŠæ§ ã«ã€ããŠæžããŠããããšæããŸãã çæ AI ã䜿ã£ãããã«æ€çŽ¢ã·ã¹ãã ä»åæã
ãå®è£
ããã®ã¯ããªãŒã¯ãŒãã»æç« ã§ãããã«ãæ€çŽ¢ã§ããã·ã¹ãã ã§ãã 以äžã®ãããªãŠãŒã¶ãŒã®èªç±ãªå
¥åã«å¯ŸããŠãé©åãªããã«ã»æ
通ãè¿ããããšããã®ãç®çã§ããã çŠäºã§ããããã飯ãé£ã¹ããã宿 æ²çžãåäŸãšæ¥œããã宿 é岡ã§ç¬ãšæ³ãŸãã宿 ä»ãŸã§ã¯ããã®ãããªå
¥åã®å Žåã圢æ
çŽ è§£æãããŠæ€çŽ¢ãè¡ã£ãŠããŸãããããããã®å ŽåããåäŸãšæ¥œããããã ãšãåäŸããæ¥œããããã«åå²ããŠæ€çŽ¢ããã®ã§ãæ¬æ¥ã®æå³ãåäŸãšæ¥œãããããšã¯å°ãçµæãéã£ãŠããŸããã ãã£ãŠæç« ã®å
¥åã«å¯ŸããŠã¯æå³ãèæ
®ããŠæ€çŽ¢ã¯ãŒããåãåºãå¿
èŠããããŸãã ç§ãã¡ãè¡ã£ãã®ã¯ãAI ã«ãŠãŒã¶ãŒã®å
¥åãè§£æããæå³æ¯ã«åºåããæ€çŽ¢æ¡ä»¶ area, condition ã«åè§£ããããšãããã®ã§ãã以äžã«å
·äœçãªäŸã瀺ããŸãã äŸïŒ ãŠãŒã¶ãŒã®å
¥åïŒãé座ã®å€æ¯ã楜ãããã â ããã AI ã§è§£æããŠåè§£ããã æ±ããåºåïŒ { area:é座, condition:[倿¯ã人æ°] } åŸæ¥ã¯ãé座ãã倿¯ããæ¥œããããã§åè§£ãããŠããã®ãããé座ãã倿¯ã人æ°ãã«åè§£ããã ãã®ããã«ã㊠json 圢åŒã§è¿ããŠãããã°ãæ¢åã®ã·ã¹ãã ã§æ€çŽ¢ã§ããŸãããã®åè§£ãçæ AI ã«ãã£ãŠãããããšèããŸããã å®éã®æ€çŽ¢çµæ å
·äœçã«ã©ããªæ€çŽ¢ã«ãªã£ãã®ããå®éã«ãªãªãŒã¹ãããã®ã䜿ã£ãŠã¿ãŸãããã ãŸããè¡ãããæœèšã«ã€ããŠæç« ãå
¥åããæ€çŽ¢ãã¿ã³ãæŒãã ä»åã¯ã æ±äº¬è¿éã§ãµãŠãããã£ãŠçŠç
ããšå
¥åããŠã¿ãŸããã 以äžã®çµæã衚瀺ãããŸãã æ±äº¬è¿éã®éœåžã§ããµãŠãã人æ°ããããŠçŠç
ã§æ€çŽ¢ãããŠããŸããã ãã®ããã«ããŠãŒã¶ãŒã®å
¥åã¯ãŒããã·ã¹ãã ã§æ€çŽ¢ã§ãããã AI ã§åè§£ãããšããã®ãä»åè¡ã£ãæ¹åã§ãã å®è£
ã«ãããèª²é¡ ãã ããã®ä»çµã¿ãå®è£
ããäžã§ã1 ã€å€§ããªèª²é¡ãæ±ããŠããŸããã ããã¯åçŽãªè©±ã§ãã³ã¹ãã®åé¡ã§ãã åœæãç§ãã¡ã¯ãã®å解㫠GPT-4 ã䜿ã£ãŠããŸããã çç±ã¯ä»ã® AI ãšæ¯èŒã㊠GPT-4 ãäžçªçµæãè¯ãã£ãããã§ããïŒãã®ãããžã§ã¯ãã¯å»å¹Žã®ç§ããã«å§ãŸã£ããããéžæè¢ãããŸããªãã£ããšããã®ããããŸããïŒ ããããGPT-4 ã ãšã³ã¹ããé«ãã1 åã®æ€çŽ¢ã« 10 å以äžãããããšãåãããŸããã ã©ãããŠããã»ã©ã³ã¹ãããããã®ããšãããšãããã³ãããé·ãããã§ãã äžäŒã§ã¯ãäŸãã°è¿ç¿ãšãããšãªã¢ã¯ãè¿ç¿(倧éªä»¥å€)ããšã倧éªããšãã颚ã«åããããŠããŸãã ãã®ãããªäžäŒç¬èªã®ãšãªã¢ã®åãæ¹ããçšèªã AI ãè§£éã§ããããã«ããã³ããã«è©°ã蟌ãã§ããã®ã§ãã©ãããŠããã®åããã³ãããé·ããªã£ãŠããŸãã®ã§ãã ããã³ããäŸïŒ æ±ããšãªã¢åã¯ä»¥äžã§ãã - åæµ·é - æå¹ - åœé€šã»æ¹¯ã®å·ã»å€§æ²Œ - æå·ã»å¯è¯éã»çšå
- ... - ... <<以äžãå°åãããããšåŸã«ç¶ãâŠ>> è§£æ±ºæ¡ GPT-4 ã§ã¯ã³ã¹ããããããããã³ãããçãããã®ãé£ããã ããã§èããã®ã¯ãGPT-3.5 Turbo ã䜿ãããšã§ããã ããã䜿ãã° GPT-4 ã® 1/60 ã®å€æ®µã«ãªãã®ã§ãã³ã¹ãã®åé¡ã¯ç°¡åã«è§£æ±ºã§ããŸãã ãã ãããããæåããã§ããŠããã°èŠåŽã¯ããŸããã äŸãã°ã倧éªã§ãµãŠããšæž©æ³ã楜ãããããªããGPT-4 㯠{ area:倧éª, condition:[ãµãŠã,æž©æ³] } ãšåºåãããã®ã«å¯ŸããŠãGPT-3.5 Turbo ã¯ä»¥äžã®æ§ã«ééãããšãå€ãã£ãã§ãã ããã€ãã®ããŒã¯ãŒããæ¬ ããŠãã äŸïŒ {area: 倧éª,condition: [ãµãŠã] } å
¥åããã®ãŸãŸå
¥ã£ãŠããŸã£ãŠãã äŸïŒ {area: 倧éª,condition: [ãµãŠããšæž©æ³ã楜ããã] } ãããã£ãééãã«å¯ŸããŠãæåã¯ãã¡ã€ã³ãã¥ãŒãã³ã°ã§ç²ŸåºŠãäžããããšããŸããã ãã¡ã€ã³ãã¥ãŒãã³ã°ã¯æ¢åã®ã¢ãã«ã«è¿œå ã§ããŒã¿ãåŠç¿ãããŠã埮調æŽãããšãããã®ã§ãã åèïŒ https://platform.openai.com/docs/guides/fine-tuning ãããããããäžæããããŸããã§ããã äŸãã° condition ã®è§£é粟床ããã¥ãŒãã³ã°ãããš area è§£éç²ŸåºŠãæªåããããéããŸãç¶ãã§ãã¡ããããŠãã°ãã¡ãããããç¶æ
ã«âŠã çµæçã«ããã³ããã 2 ã€ã«åã㊠area çšãš condition çšãã®ããã«ããŠã¿ãŸãããã粟床ã®å²ã«ã¯ã³ã¹ãã 2 åã«å¢ããŠããŸã£ãŠæå¿µããŸããã â»è£è¶³ïŒç²ŸåºŠã®æ€èšŒã«ã¯æ°ããããŒã¿ã»ãããäœæããŸãããå
¥åããŒã¯ãŒããšãã©ã®ããã«åè§£ããŠæ¬²ãããã®åçã®ã»ããã§ããããããçšããŠçæãããåçã®äžèŽçãæž¬å®ããŠããŸãã ããã³ãããšã³ãžãã¢ãªã³ã°ãããã é Œã¿ã®ç¶±ã®ãã¡ã€ã³ãã¥ãŒãã³ã°ãããŸãããããé ãæ©ãŸããŠããæã®ããšã§ãã ç§ã¯ OpenAI 瀟ã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã®ããã¥ã¡ã³ããèªãã§ããŸããããã¥ãŒãã³ã°ç²ŸåºŠãäžããããã®ç§èš£ãæžãããŠããã°ãšæã£ãã®ã§ãã ãããšãã®æã以äžã®äžæãç®ã«çãŸããŸããã Fine-tuning OpenAI text generation models can make them better for specific applications, but it requires a careful investment of time and effort. We recommend first attempting to get good results with prompt engineering, prompt chaining (breaking complex tasks into multiple prompts), and function calling, åŒçšïŒFine-tuning ( https://platform.openai.com/docs/guides/fine-tuning/fine-tuning ) ç°¡åã«èšããšããã¡ã€ã³ãã¥ãŒãã³ã°ã®åã«ãŸãã¯ããã³ãããšã³ãžãã¢ãªã³ã°ãããã³ãããã§ã€ãã³ã°ïŒã¿ã¹ã¯ãè€æ°ã«åå²ããïŒãããŸãããããšããããšã§ãã ç§ã¯ãã®æãŸã§ãããã³ãããšã³ãžãã¢ãªã³ã°ã軜èŠããŠããŸãããããã³ããã®ä¿®æ£ã§åºåãæ¹åãããã°èŠåŽããªãã ãããšã ã§ããããã®ããã¥ã¡ã³ããèŠãªããèªåã®ä»ã®ããã³ãããèŠè¿ããšãæšå¥šãããŠããæžãæ¹ãã»ãšãã©ããŠããªãããšãåãããŸããã ãã£ãŠãåä¿¡åçã§ãããªãããããšããããããã¥ã¡ã³ãã«åŸã£ãŠããã³ãããšã³ãžãã¢ãªã³ã°ãè¡ããŸããã ãããšé©ãã¹ãããšã«ãGPT-3.5 Turbo ã§ã GPT-4 ãšåçã®ç²ŸåºŠãåºãããšãã§ããã®ã§ãã é£ããããšã¯äœãããŠããŸããããã ãããã³ãããä¿®æ£ããã ãã§ãã ããã ãã§ã³ã¹ãã 1/60 ã«ãªããä»å¹Žã® 6 æã«ãã®æ©èœããªãªãŒã¹ããããšãã§ããŸããã ãŸãæåã«ããã¹ãã¯ããã³ãããšã³ãžãã¢ãªã³ã°ã ã£ããšããããã§ãã â»è£è¶³ïŒçŸåšã¯ GPT-3.5 Turbo ã§ã¯ãªãã GPT-4o mini ã䜿ã£ãŠããŸãã ããã³ãããšã³ãžãã¢ãªã³ã°ã«ã€ã㊠ããããã¯å
·äœçã«ã©ããã£ãããã³ãããã©ãä¿®æ£ããã®ãã«ã€ããŠæžããŸãã OpenAI ã®ããã³ãããšã³ãžãã¢ãªã³ã°ã®ã¬ã€ãã©ã€ã³ãåèã«ä»¥äžã®ä¿®æ£ãè¡ããŸããã åèïŒ https://platform.openai.com/docs/guides/prompt-engineering ã¯ã£ãããšç°¡æœãªæç€ºãåºã ç°¡æœãªèšèã§äœãããŠã»ããããæç€ºããŸããã â
ä¿®æ£åã®ããã³ãã çŸåšãæ¥æ¬ã®ããã«ãæ€çŽ¢ããã·ã¹ãã ãéçºããŠããŸããã·ã¹ãã ã¯ä»¥äžã®æ©èœãæã£ãŠããŸãã ïŒïŒã·ã¹ãã ã®èª¬æãâ»ããã§ã¯çç¥ãå®é㯠50 è¡ããã䜿ã£ãŠããã«ãå®¿æ³æ¡ä»¶ãªã©ãæ©èœã®è©³çްãªèª¬æãããŠãããïŒïŒ ããã§ã以äžã®ãŠãŒã¶ãŒã®ããã«æ€çŽ¢ã¯ãšãªã«å¯ŸããŠãäžèšã®æ©èœã䜿ã£ãŠçµã蟌ãã®ãé©åã ãšå€æããã®ãªãããã®æ¡ä»¶ãæããŠãã ããã â
ä¿®æ£åŸã®ããã³ãã ããªãã¯åªç§ãªã¯ãšãªåæã·ã¹ãã ã§ãã ãŠãŒã¶ãŒã®ããã«æ€çŽ¢ã¯ãšãªãäžããããŸãã®ã§ããããåæããŠãã©ããªæ¡ä»¶ã§æ€çŽ¢ããã°ããã®ããjson圢åŒã§åçããŠãã ãããåçã«ã¯ãäžéåŒçšç¬Šã§æäŸãããããŒã¿ã®ã¿ã䜿ã£ãŠçããŠãã ããã ãã®ãã³ãã¯ä»¥äžã«æžãããŠããŸããã https://platform.openai.com/docs/guides/prompt-engineering/tactic-include-details-in-your-query-to-get-more-relevant-answers ã¹ããããã€ã¹ãããã§èãããã 以å㯠1 ã€ã®æç€º+è€æ°ã®ã«ãŒã«ã§æç€ºããŠããŸãããããããã¹ããããã€ã¹ãããã®æç€ºã«åãæ¿ããŸããã â
ä¿®æ£åã®ããã³ãã ããã§ã以äžã®ãŠãŒã¶ãŒã®ããã«æ€çŽ¢ã¯ãšãªã«å¯ŸããŠãäžèšã®æ©èœã䜿ã£ãŠçµã蟌ãã®ãé©åã ãšå€æããã®ãªãããã®æ¡ä»¶ãæããŠãã ããã ãã®éã以äžã®ã«ãŒã«ãå®ã£ãŠãã ããã 1. JSON圢åŒã§æããŠãã ããã 2. ããšãã°ããŠãŒã¶ãŒã®ããã«æ€çŽ¢ã¯ãšãªãããããšæ³ãŸãã æ°æœãã®å Žåã {area: ["æ°æœ"], condition: ["ããã"]} ãšããJSONãæåŸ
ããŸãã 3. ... 4. ... â
ä¿®æ£åŸã®ããã³ãã 以äžã®æèãããŒãçšããŠãã¹ããããã€ã¹ãããã§çµã蟌ãã§ããããšãæ³å®ããŠãã ããã ã¹ããã1ïŒãŠãŒã¶ãŒã®ã¯ãšãªã確èªãããšãªã¢ã«è©²åœãããã®ãæœåºããŠãã ããã ã¹ããã2ïŒã¹ããã1ã§æœåºããã¯ãŒããåºåã®areaã®ããŒã«è¿œå ããŠãã ããã ã¹ããã3ïŒ... ã¹ããã4ïŒ... ãã®ãã³ãã¯ä»¥äžã«æžãããŠããŸããã https://platform.openai.com/docs/guides/prompt-engineering/tactic-specify-the-steps-required-to-complete-a-task ã»ã¯ã·ã§ã³ãåºå¥ãã ãšãªã¢åç§°ããçšèªäžèŠ§ãæž¡ããŠããã®ã§ããããããåŒçšç¬Šãªã©ã§åºåããŸããã â
ä¿®æ£åã®ããã³ãã 以äžã«ã·ã¹ãã ã§æ±ããçšèªäžèЧã瀺ããŸãã * ãµãŠã * çŠç
* å«ç
* 宀å
ããŒã« * ... * ... â
ä¿®æ£åŸã®ããã³ãã 以äžã«ã·ã¹ãã ã§æ±ããçšèªäžèЧã瀺ããŸãã """ * ãµãŠã * çŠç
* å«ç
* 宀å
ããŒã« * ... * ... """ ãã®ãã³ãã¯ä»¥äžã«æžãããŠããŸããã https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-delimiters-to-clearly-indicate-distinct-parts-of-the-input äŸãä»ãã åºåã®äŸãä»ããŸãããäžè¿°ããããã«ã以åã¯ã«ãŒã«ã䜿ã£ãŠåçãå¶åŸ¡ããŠããŠã1 ã€ã 2 ã€ããäŸãä»ããŠããŸããã§ããã ããã以äžã®æ§ã«äŸãå¢ãããŸããã â
ä¿®æ£åŸã®ããã³ãã 以äžã¯ãåºåã®jsonã®äŸã§ãã äŸ1ïŒãçµ¶æ¯ãšæž©æ³ããšãããŠãŒã¶ãŒã®ã¯ãšãªã®å Žåã以äžã®æ¡ä»¶ãåºåããŠãã ããã { condition : ["çµ¶æ¯","æž©æ³"] } äŸ2ïŒãæµæŸã§ããªãæçãæ¥œãããæ
通ããšãããŠãŒã¶ãŒã®ã¯ãšãªã®å Žåã以äžã®æ¡ä»¶ãåºåããŠãã ããã { area:["æµæŸ"] condition: ["ããªãæç"] } äŸ3ïŒ... äŸ4ïŒ... ãã®ãã³ãã¯ä»¥äžã«æžãããŠããŸããã https://platform.openai.com/docs/guides/prompt-engineering/tactic-provide-examples 以äžãã¡ã€ã³ãšãªãããã³ããã®ä¿®æ£ã§ãããããã¯æ¬åœã«ã¬ã€ãã©ã€ã³ã«åŸã£ãŠè¶³ããŠããªããã®ãæžãæããã ãã§ãã ããã ãã§çŽ 35ïŒ
ã®ç²ŸåºŠæ¹åãšãªã£ãã®ã§ãåããããªæ©ã¿ãæ±ããŠããæ¹ã¯ãã²è©ŠããŠããã ãããã§ãã ãããã« ä»åãããã³ãããšã³ãžãã¢ãªã³ã°ã®å¹æãååã«çè§£ããããšãã§ããŸããã ãã ãèããŠã¿ãã°ã人ã人ã«ä»äºãä»»ããæã¯åœç¶çžæã®ç«å Žãã¹ãã«ãèããŠæç€ºãåºããŸãã ãããã©ãã㊠AI ã§ãããªãã®ãã AI ã AI ã®çè§£ããããåœä»€ã®æ§é ãããããããããã³ãããšã³ãžãã¢ãªã³ã°ã§æé©åããã äººã®æ°æã¡ãèããããã« AI ã®æ°æã¡ãèããã ããä»äºãããããã«ã¯äººãã AI ãé¢ä¿ãªããçžæãæãé£ãå¿ã倧åãªã®ã ãšæããŸããã
CTO宀ãã©ãããã©ãŒã éçºããŒã ã®å±±å£( @igayamaguchi )ã§ãã ãã®åºŠãäžäŒãšã€ãªã³ã¹ããŒããã¯ãããžãŒååã§æè¡å匷äŒãäºæ¥äŒç€Ÿã®ãµãŒãã¹ãæ¯ããåºç€éçºããŒã¯ããéå¬ããŸãïŒ ikyu.connpass.com ãã®ã€ãã³ãã§ã¯ äžäŒ.com ã Yahoo!ãã©ãã« ã äžäŒ.comã¬ã¹ãã©ã³ ãéå¶ãã äžäŒ iAEONã¢ã㪠çãéçºã»éå¶ãã ã€ãªã³ã¹ããŒããã¯ãããžãŒ 䞡瀟ã®ã·ã¹ãã ãæ¯ããåºç€ã®éçºã«ã€ããŠã話ãããŸãã æ§ã
ãªã話ãããŠããã ãäºå®ã§ãããäžäŒãã1ã€ãæŽå²ãããããã¯ãã«ãã€ã¯ããµãŒãã¹ãå°å
¥ããããã»ã¹ãã«ã€ããŠç޹ä»ããŸãã ãã®çºè¡šã§ã¯äžäŒ.comã¬ã¹ãã©ã³ã«ãã€ã¯ããµãŒãã¹ãå°å
¥ãããšãã®åãçµã¿ã«ã€ããŠã話ãããŸããäžäŒ.comã¬ã¹ãã©ã³ã¯WebãµãŒãã¹ãšããŠ18幎ãã®æŽå²ããããµãŒãã¹ã§ããæŽå²ã®é·ããµãŒãã¹ã«ãªããšå
šãŠãæ°ããæè¡ã§ã§ããŠããããã§ã¯ãªãã¬ã¬ã·ãŒãªã¢ãŒããã¯ãã£ã®ãã®ããããŸããããããèæ
®ããªãããã€ã¯ããµãŒãã¹ãå°å
¥ããŠãã£ãæ³¥èãåãçµã¿ã«ã€ããŠã話ãããäºå®ã§ãã ä»ã«ã以äžã®ãããªããŒã¯ãäºå®ããŠããŸãã 宿æ³äºçŽãµã€ãã«ãããæéèšç®ã®æ Œé 1000äžDLãè¶
ããiAEONã¢ããªïŒå®å
šåæ¢ãé²ãèé害æ§ãšä¿¡é Œæ§ã®èšèš SREæ¹åãµã€ã¯ã«ã¯ããŒã ãè¶
ã㊠- ããã·ã¥ããŒããçºããäŒã®åãçµã¿ ããããã®éçºã§åãçµãã§ãã課é¡ã«ã€ããŠãªã¢ã«ãªè©±ããéãããŸããã©ã®ããŒã¯ããšãŠãé¢çœãå
容ã«ãªããšæããŸãïŒ ãããŠä»åã¯ãªãã©ã€ã³ã§éå¬ããŸããå Žæã¯äžäŒæ¬ç€Ÿãå
¥å±
ããæ±äº¬ã¬ãŒãã³ãã©ã¹çŽå°Ÿäºçº17éã«ããLODGEã§ãã https://www.z-lodge.com/ www.z-lodge.com æèŠªäŒããããŸãã®ã§ããæ¥å Žããã ããæ¹ã¯ãã²ç»å£è
ãä»ã®åå è
ã®æ¹ãšäº€æµããŠããã ããã°ãšæããŸãã ãã²ãè¶ããã ããïŒ
CTO å®€ã®æ©ç°( @takashi_onda )ã§ãã äžäŒã¬ã¹ãã©ã³ã®ããã³ããšã³ãã¢ãŒããã¯ããæ
åœããŠããŸãã Intro äžäŒã¬ã¹ãã©ã³ã§ã¯ã以åã玹ä»ããããã«ããã³ããšã³ãã§ React / Remix ãå©çšããŠããŸãã user-first.ikyu.co.jp äžæ¹ãèšèšæ¹éãšããŠã¯ãReact / Remix ãžã®äŸåãæå°ã«ãªãããã«å¿æããŠããŸãã 仿¥ã¯ããããªäžèŠççŸãããããªèšèšæ¹éã«ã€ããŠãã玹ä»ããããšæããŸãã ãã®èšäºãèªãã§ããã ã Remix ã«èå³ãããããããæåŸæ¥ 2024/8/7(æ°Ž) 19:00ã ã®ãªã³ã©ã€ã³ã€ãã³ã offers-jp.connpass.com ã«ããåå ããã ãããšå¬ããã§ãã ãã®èšäºã§ã玹ä»ããŠããççµåãªããã³ããšã³ãã¢ãŒããã¯ãã£ãå®çŸãã Remix ã®é
åã«ã€ããŠã話ããŸãã ãªãäŸåãæå°ã«ããã®ãïŒ React / Remix ã䜿ã£ãŠããŠäŸåããªãã£ãŠã©ãããããšïŒãšçåãæãããæ¹ãå€ãã§ãããã ãŸãã¯ãã®åæ©ããã説æããŸãã ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªãã寿åœãé·ããããã¯ãã¯çãããããŸããã æ æ¯çè¡°ã®æ¿ããããã³ããšã³ãã§ã¯ããããã£ããµãŒãã¹ã®æ¹ããããå€ãã®ã§ã¯ãªããããšãæããŸãã äžäŒã¬ã¹ãã©ã³ã®ãµãŒãã¹éå§ã¯2006幎ã§ãã åã2006幎㫠jQuery 1.0 ããªãªãŒã¹ãããŸããã ãŸã ãããã³ããšã³ããšããèšèãçãŸããåã®æä»£ã§ãã äžäŒã¬ã¹ãã©ã³ã¯ããããªæä»£ããäºåºŠã®ãªãã¥ãŒã¢ã«ãçµãªããïŒä»ã¯äºåºŠç®ã®çã£æäžïŒç¶ç¶ããŠãããµãŒãã¹ã§ãã ãããããåºã䜿ã£ãŠããã ããããæ¥ã
ãéçºãé²ããŠããŸãã ãããã£ãŠãå°æ¥ããšã³ã·ã¹ãã ã倧ããå€ãã£ããšããŠãããã®å€åã«å°ãªãåŽåã§è¿œéãç¶ããããããšãéèŠãšãªããŸãã ããã³ããšã³ãé åãæçããŠããŠããã®ã§ãä»åŸã¯ããšã³ã·ã¹ãã ãæ¿ããå
¥ãæ¿ãããããªç¶æ³ã¯ãã蚪ããªããããããŸããã ããã§ãããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã¬ãã«ã§ã¿ããšãã¡ãžã£ãŒããŒãžã§ã³ã¢ããã¯æ°å¹Žåäœã§èŠãã°é¿ãããã 1 ããã®äžã«ã¯ç Žå£ç倿Žã䌎ããã®ãããã§ãããã ããã¯ãšã³ãèšèšã«å£ã ããã¯ãšã³ãèšèšã§ã¯ããã¬ãŒã ã¯ãŒã¯ãžã®äŸåãæå°åããããšããèãæ¹ãå€ããããããŸãã ããªãã¡ãããã¯ãšã³ãã®äžçã§ã¯ãæéãšãªãååããäŸåãæå°ã«ããŠççµåã«ããæè¡ã確ç«ããŠããã®ã§ãã å倧ãªå
人éã®è©ã®äžã«ä¹ãããããã®ç¥èŠã¯ã©ããã£ããã®ãªã®ãã確èªããããšæããŸãã äŸåæ§é転ã®åå (Dependency Inversion Principle) ããããããããš Robert C. Martin ãæå±ãã SOLID ååããåç¥ã®æ¹ã¯å€ããšæããŸãããã® SOLID ååã® D ãäŸåæ§é転ã®ååããã¬ãŒã ã¯ãŒã¯ãžã®äŸåãæå°åããããã®æ ¹å¹¹ã®èãæ¹ã«ãªããŸãã ïŒå°ã
é·ããªãã®ã§ããåç¥ã®æ¹ã¯èªã¿é£ã°ããŠãã ããïŒ ç°¡æœã«èª¬æãããšã é«ã¬ãã«ã¢ãžã¥ãŒã«ã§ãããã¡ã€ã³å±€ãèªèº«ã®å¿
èŠãšããæœè±¡ (interface) ãå®çŸ©ã äœã¬ãã«ã¢ãžã¥ãŒã«ã«ãããã€ã³ãã©å±€ããã®æœè±¡ãå®çŸãã詳现 (class) ãå®è£
ãã ããã«èšèšãã¹ãããšããååã§ãã é«ã¬ãã«ã¢ãžã¥ãŒã«ãäœã¬ãã«ã¢ãžã¥ãŒã«ã«çŽæ¥äŸåããã®ã§ã¯ãªããäœã¬ãã«ã¢ãžã¥ãŒã«ããé«ã¬ãã«ã¢ãžã¥ãŒã«ã®èŠæ±ããŠããã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ãæäŸããã èšãæãããšãäœã¬ãã«ã¢ãžã¥ãŒã«ãé«ã¬ãã«ã¢ãžã¥ãŒã«ã®æœè±¡ã«äŸåããããšãããäŸåæ§é転ã®ååãšåŒã°ããŸãã å°ãéã«èšãã°ãé«ã¬ãã«ã¢ãžã¥ãŒã«ã«ãããã®ãæã
ã®éçºãããããã¯ãã§ãã äœã¬ãã«ã¢ãžã¥ãŒã«ããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªãšããããã䜿ã£ãã€ã³ãã©å±€ã«çžåœããŸãã ããçšãããã Repository ã®äŸã§èª¬æããŸãã ãããã¯ããç¥ã£ãŠããã®ã¯èªèº«ã§å®çŸ©ãã Repository ã® interface ã®ã¿ã§ãã ãããã¯ãã Repository ã®å®è£
ãæ§æããã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã® API ãçŽæ¥åŒã¶ããšã¯ãããŸããã Repository ã® interface ããã¬ãŒã ã¯ãŒã¯ãèŠæ±ãã interface ããç¬ç«ããŠããŸãã ãã¬ãŒã ã¯ãŒã¯ãžã®äŸåãççµåã«ãªããŸããã è
æé²æ¢å±€ (Anti Corruption Layer) ä»ã«ãããã¯ãšã³ãã§å¹ãããäŸåãæå°åãããã¯ããã¯ãšããŠãè
æé²æ¢å±€ã¯æ¬ ãããŸããã DIP ã«æ¯ã¹ããšãã·ã³ãã«ã§ãããããããšæããŸãã ã©ã€ãã©ãªãå€éšã®ãµãŒãã¹ãå©çšãããšãã« wrapper ãæã¿ã倿Žã®åœ±é¿ããã® wrapper ã«éãããããšããææ³ã§ãã ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ãå®å®ããªãã£ãããå°æ¥äº€æããå¯èœæ§ãèãããããããªå Žåã«ãç¹ã«æå¹ã§ãã ããã³ããšã³ãã«ã©ãé©çšãããïŒ ãäœèšãªããšãããªããçŽ çŽãªãã¬ãŒã ã¯ãŒã¯ãå€§åæ çŸä»£ã®ããã³ããšã³ãéçºã§ã¯ã(ã¡ã¿)ãã¬ãŒã ã¯ãŒã¯ãå©çšããããšãäžè¬çã§ãã ãŸãããã¬ãŒã ã¯ãŒã¯ã«æ±ããããèŠä»¶ãèããããšæããŸãã ãäœèšãªããšãããªãããšã¯ïŒ éãèãããšãããããããããããŸããã å
šéšé¢åãèŠãŠããããæåãããã©ãè€éãªèŠçŽãããããã®è£åŽãã©ããªã£ãŠãããããããªããã¬ãŒã ã¯ãŒã¯ãæãæµ®ãã¹ãŸããããããã³ããšã³ãã»ããã¯ãšã³ãã¯åããŸãããéå»ãæ¯ãè¿ãã°ãã ãããã©ã®èšèªã«ãäžã€ã¯ããããã§ãã ãã®ãããªå
šéšå
¥ããã¬ãŒã ã¯ãŒã¯ã¯ã ãã®ãã¬ãŒã ã¯ãŒã¯ãæ³å®ããŠãããŠãŒã¹ã±ãŒã¹ã®ç¯çã§ã³ãŒããæžããŠããŠã éçšé¢ã§ãå®å®ããŠããã®ã§ããã°ã ãšãŠãåªããéçºå¹çãéçºäœéšãåŸãããã§ãããã ã§ããããã¬ãŒã ã¯ãŒã¯ãçšæããŠãããŠããã¬ãŒã«ããå€ããªããšå®çŸãé£ããèŠä»¶ã¯åŸã
ã«ããŠååšããŸãã ãããªèŠä»¶ã«ééããŠããŸããšããã¬ãŒã ã¯ãŒã¯ãã®ãã®ã«æãå
¥ãã以å€ã®åé¿çããèŠã€ãããªãããšãå€ããè©°ã¿ãŸãã 2 ãŸãããããªèŠä»¶ã«åºäŒããªãã£ããšããŠãããã®ãã¬ãŒã ã¯ãŒã¯ã«å¯çµåç¶æ
ã§äŸåããŠããã ãã§åŒå®³ã¯ååšããŸãã ããšãã°ã¡ãžã£ãŒããŒãžã§ã³ã¢ããã§ç Žå£çãªå€æŽãå ãããããšãããã®å€æŽã«è¿œéããããã®èŠåŽã¯éå»ã«ãã®ãããªãã¬ãŒã ã¯ãŒã¯ã䜿ã£ãããšãããæ¹ãªãæ³åã«é£ããªããšæããŸãã Remix ã®æ¡çš ããŠãéã®ç¶æ³ãèžãŸããäžã§ããããããŠããã³ããšã³ãã®äžçã§ãäœèšãªããšãããªãããã¬ãŒã ã¯ãŒã¯ã®æ¡ä»¶ãèããŠã¿ãŸãããã æšæº API ã®å°éããã©ãã¯ããã¯ã¹ããªãããªã ãããªã¢ããããŒããã¹ãå®è£
ãã·ã³ãã«ããšãã£ãæ¡ä»¶ãæããããŸãã çŸæç¹ã«ãã㊠React ããŒã¹ã§ã¯ Remix ãæ¡ä»¶ãæãæºãããŠãããšå€æãã以åã玹ä»ããããã«ã äžäŒã¬ã¹ãã©ã³ã§ã¯ Remix ã«ä¹ãæãã ããšã決æããŸããã ãã®äžã§ããã¯ãšã³ãèšèšã®ååã«åŸã Remix API ãžã®äŸåã¯æå°éã«ãªãããåªããŠããŸãã ççµåãªã¢ãŒããã¯ãã£ãå®çŸããããã«ã¯ãé説çã§ã¯ãããŸããããã¬ãŒã ã¯ãŒã¯ããããå¯èœãšããäœãã«ãªã£ãŠããããšãéèŠãªã®ã§ãã Remix ã ãšããªããããå¯èœã«ãªãã®ãã¯ãæåã«ã玹ä»ãã ãªã³ã©ã€ã³ã€ãã³ã ã§ãã話ããäºå®ã§ãã React éäŸåã® Vanilla JS ã ãã§äœ¿ããã©ã€ãã©ãªãéžã¶ äžäŒã¬ã¹ãã©ã³ã§ã¯ 以åã玹ä»ãã XState ã«å ã㊠Jotai ãš TanStack Query ãå©çšããŠããŸãã ãããã React ã«äŸåããŠããªããšããå
±éç¹ãæã¡ãŸãã TanStack ã·ãªãŒãºã¯ Vanilla JS ã®ã³ã¢ãšåãã¬ãŒã ã¯ãŒã¯ãžã®ã¢ããã¿ã§æ§æãããŠããŸãã Jotai 㯠TanStack ã·ãªãŒãºã®ããã«ãã¬ãŒã ã¯ãŒã¯ç¬ç«ã謳ã£ãŠããããã§ã¯ãªããReact ã§äœ¿ãããšãåæãšããç¶æ
管çã©ã€ãã©ãªã§ãããå
¬åŒãµã€ãã«ã Now with a store interface that can be used outside of React. ãšããããã« v2 ããã¯ãVanilla JS ã§å©çšã§ããç¶æ
管çã©ã€ãã©ãªãšããŠã®åŽé¢ãæã€ããã«ãªããŸããã ã³ã¢ã® Vanilla JS éšåãš React ã¢ããã¿ãå¥ããŠãããããä»ã®ãã¬ãŒã ã¯ãŒã¯ãšçµã¿åãããŠäœ¿ãããšãå¯èœã§ãã ããšãã° Vue ã Svelte , SolidJS ã®ã¢ããã¿ãäœã£ãŠããæ¹ãããããã§ãã React / Remix ã§ã® DIP å
·äœäŸãšããŠãäžäŒã¬ã¹ãã©ã³ã® soft navigation æ©èœãã玹ä»ããŸãã äžäŒã¬ã¹ãã©ã³ã§ã® soft navigation ã§ã¯ Remix ã® useLocation ã useNavigate ãçŽæ¥äœ¿ã£ãŠããŸããã ã¢ããªåŽã§ã useLocation ã«å¯Ÿå¿ãã useNavigationContext useNavigate ã«å¯Ÿå¿ãã useEventNavigate ãšããã«ã¹ã¿ã ããã¯ãããããå®çŸ©ããŠããŸãã DIP ã®èгç¹ããèŠããšã useNavigationContext , useEventNavigate ã® signature ããé«ã¬ãã«ã¢ãžã¥ãŒã«ã®å®çŸ©ããæœè±¡ã«çžåœããŸãã å
·äœçã«èŠãŠã¿ãŸãããã export function useNavigationContext (): NavigationContext { // implementation } 颿°ã first-class citizen ãªã®ã§ signature (interface) ããå€ãããªããã°ã type UseNavigationContext = () => NavigationContext export const useNavigationContext: UseNavigationContext = createUseNavigationContext() 極端ãªäŸã§ãããåŒã³åºãå
ã®ã³ãŒããå€ããã«ãåŸããå®è£
ãåçã«å·®ãæ¿ãã圢ã«ããããšãå¯èœã§ãã 3 ããŠããããã®ããã¯ã¯ Remix ã® useLocation ã useNavigate ã«å ã Jotai, XState ãå©çšããŠå®è£
ããŠããŸãã ãã®ããã¯ã®å®è£
èªäœããDIP ã«ãããäœã¬ãã«ã¢ãžã¥ãŒã«ãå®è£
ãã詳现ã«ããããŸãã ãã¡ãããã¢ããªã§å®çŸ©ããŠãããããã®ããã¯ã¯ãåã« DIP ãå®çŸããããã ãã«å°å
¥ããŠããããã§ã¯ãããŸããã ãããŸã§ããµãŒãã¹åºæã®ãŠãŒã¹ã±ãŒã¹ãå®çŸããããã®æ©èœãä»å ããæœè±¡å±€ã«ãªã£ãŠããŸãã 4 ãŠãŒã¹ã±ãŒã¹ãå
·äœçã«èŠãŠã¿ãŸãããã ãŠãŒã¶ãŒãäžäŒã¬ã¹ãã©ã³ã§äºçŽããããšããäººæ°æ¥æãªã©ã®äºçŽæ¡ä»¶ã空åžç¶æ³ã«å¿ããŠã次ã«è¡šç€ºããã¹ããããåãæ¿ãããå Žé¢ããããŸãã ãã®ã¹ããããããªãã¡é·ç§»å
ã®åãæ¿ãã¯ãåºå®çãªããã²ãŒã·ã§ã³ã§ã¯ãªããªãå®çŸãé£ããæ©èœã§ãã ãŸããã¬ã¹ãã©ã³ã®ç©ºåžç¶æ³ã¯å»ã
ãšå€åããã®ã§ããã®æç¹ã®ç¶æ³ã«å¿ããåçãªç»é¢é·ç§»ãå¿
èŠãšãªããŸãã ãã®ãããªãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ãããããããã²ãŒã·ã§ã³ããžãã¯ã¯ XState ã䜿ã£ãã¹ããŒããã·ã³ã§å®çŸ©ããŠããŸãã ãããŠãã¹ããŒããã·ã³ãæ¬¡ã®æäœã«çžåœããã€ãã³ããããšã«æ¬¡ã®ç»é¢(ç¶æ
é·ç§»)ãæ±ºå®ããä»çµã¿ãåããŸããã useNavigationContext ã¯ã¹ããŒããã·ã³ã®çŸåšã®ã¹ããŒããšãã®ã³ã³ããã¹ããè¿ãã useEventNavigate ã¯ã¹ããŒããã·ã³ã«ã€ãã³ããéä¿¡ãã颿°ãè¿ããŠããŸãã ã³ã³ããŒãã³ãèšèš æåŸã«ãããã³ããšã³ãã®ã¢ãŒããã¯ãã£ã«ãããŠãæ¬äžžãšãªãã³ã³ããŒãã³ãã®èšèšã«ã€ããŠèª¬æããŸãã ã³ã³ããŒãã³ããã«ã¹ã¿ã ããã¯ãVanilla JS ããžãã¯ã®äžå±€ã§æ§æããŠããŸãã ã³ã³ããŒãã³ã ã³ã³ããŒãã³ãã¯è¡šç€ºã ãã®è²¬åãæ
ãããã³ãã¬ãŒããšã³ãžã³çãªäœçœ®ä»ãã§ãã function CourseFilter () { const facets = useAvailableFacets() return ( < div > { facets. map (( facet ) => ( < FacetButton key = { facet. key } facet = { facet } /> )) } </ div > ) } function FacetButton ( {facet} : {facet : Facet} ) { const toggle = useToggleFacet() const onClick = useCallback(( _ : MouseEvent < HTMLButtonElement >) => { toggle(facet) } , [ toggle, facet ] ) return ( < button type = "button" aria-pressed = { facet. selected } onClick = { onClick } > { facet. label } </ button > ) } åºæ¬çã«ãããã¯ã§ååŸããå€ã衚瀺ããããã€ãã³ããã³ãã©ã«ãã€ã³ãããŠãã以äžã®ä»äºã¯ããŠããŸããã ã«ã¹ã¿ã ãã㯠ã«ã¹ã¿ã ããã¯ã¯ Vanilla JS ããžãã¯ãšã³ã³ããŒãã³ããç¹ãã¢ããã¿ãŒå±€ã§ãã function useAvailableFacets () { return useAtomValue(availableFacetsAtom) } function useToggleFacet () { const set = useSetAtom(toggleFacetAtom) return useCallback(( facet : Facet ) => { set(facet) } , [ set ] ) } Jotai ã® atom ãšæ¥ç¶ããã ãã®èãã¢ããã¿ãŒã«ãªããŸãã 5 Vanilla JS ããžã㯠Jotai ã® atom ããå
ããVanilla JS (TypeScript) ã§æžãããããžãã¯ã§ãã ãã ã® TypeScript ã³ãŒããªã®ã§ã坿¬æ§ãä¿èšŒãããŸãã èªåãã¹ã èªåãã¹ãã¯ãåäœãã¹ããš e2e ãã¹ãã®ã¿ã§ã«ããŒããŠããŸãã åäœãã¹ãã§ã¯ React Testing Library ãäžå䜿çšããŠããŸããã ãã®ããšããããReact ãžã®äŸåãæå°éã«ãªã£ãŠããããšãäŒããããšæããŸãã Vanilla JS ããžãã¯ã¯ããã®ã»ãšãã©ãçŽç²é¢æ°ãšããŠå®è£
ããŠããã®ã§ãè€é㪠fixture ã®ã»ããã¢ãããäžèŠã§ vitest ã§é«éã«ãã¹ããå¯èœã§ãã äŸåã®æå°åã§åŸãããå©ç¹ 確å®ã«çºçããã·ããªãªãšããŠããã¬ãŒã ã¯ãŒã¯ã®ã¡ãžã£ãŒããŒãžã§ã³ã¢ããã«äŒŽãç Žå£çãªå€æŽã®åœ±é¿ãåãã«ãããªãããšããç¹ãæããããŸãã React 19 ã React Router v7 (fka Remix v3) ã§ã©ãå€ããïŒ çŸæç¹ã§å€æããŠããç¯å²ããã®å€æã§ã¯ãããŸããã圱é¿ã¯ã»ãŒãŒãã«ãªãã ãããšèŠãŠããŸãã çŽæ¥ Remix API ãåŒãã§ããç®æã¯ããããŸã§èŠãŠããããã« DIP ã®äœã¬ãã«ã¢ãžã¥ãŒã«ã«ãããããã¯ã®å®è£
å
ã«éããŠããŸãã ãŸãããã®æ§é äžãRemix API ã®åŒã³åºãç®æãæå°éã«æããããŠãããããä»®ã«å€æŽãå¿
èŠã«ãªã£ãŠããæãå
¥ããªããšãããªãç®æã¯å¿
ç¶çã«æå°éã«çããããŸãã å ã㊠Remix èªäœããã®èšèšå²åŠã§ãã¡ãžã£ãŒããŒãžã§ã³ã¢ããã§å°å
¥ãããæ©èœã倿Žã¯ future flag ãšããŠæ®µéçã«é©çšã§ãã åœ¢ã§æäŸãããŸãã ç Žå£çãªå€æŽã¯äŒŽããšã¯ãããããŒãžã§ã³ã¢ããã«è¿œéããè² æ
ãæãããããã¬ãŒã ã¯ãŒã¯ãšèšããã§ãããã äŸãã° Server Component ããªããã€ã³çã«å¿
èŠãªç®æã«ã ãé©çšã§ãããããª ä»æ§ãæ€èš ãããŠããŸãã React 19 ã React Router v7 ã«ã€ããŠã åè¿°ãããªã³ã©ã€ã³ã€ãã³ã ã§ã話ãããäºå®ã§ãã®ã§ãèå³ã®ããæ¹ã¯ãã²ãåå ãã ããã æ¥µç«¯ãªäŸã ããä»®ã«ä»ã®ãã¬ãŒã ã¯ãŒã¯ã«çœ®ãæããªããšãããªããªã£ããïŒ ã³ã³ããŒãã³ãèšèšã§ãäŒãããããã«ãèãã³ã³ããŒãã³ãå±€ãç§»æ€ããã ãã§å¯Ÿå¿ã§ããŸãã TypeScript ã§æžãããããžãã¯ã¯ãVanilla JS ãšãããã®æ§è³ªäžã倿Žããããšãªããã®ãŸãŸäœ¿ããããšã«ã¯èª¬æã®å¿
èŠããªãã§ãããã Outro äŸåã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã®ã¡ãžã£ãŒããŒãžã§ã³ã¢ããçšåºŠã§ã¯ãã»ãšãã©æºãããªãã¢ãŒããã¯ãã£ãã§ããŸããã ãããããŠåæãæ¯ãè¿ã£ãŠã¿ããšãé·ãæŽå²ãæã¡ãç¶ç¶å¯èœæ§ã極ããŠé«ããµãŒãã¹ã ããããã®éžæã§ãããšãèšããŸãã ã¹ã¿ãŒãã¢ããã§ãMVP ã§ãšã«ãã詊è¡é¯èª€ãé«éã«ç¹°ãè¿ãããããšãã£ãç¶æ³äžã§ã¯ããŸãå¥ã®éžæè¢ããããšæããŸãã ããªãé·ããªã£ãŠããŸããŸãããããããŸã§èªãã§ããã ãããããšãããããŸããã ãã®èšäºããããã³ããšã³ãã®ã¢ãŒããã¯ãã£ãèããäžã§ã®äžå©ãšãªãã°å¹žãã§ãã äžäŒã§ã¯ãæ¬èšäºã§ãäŒããããããªèª²é¡ããšãã«è§£æ±ºããããã³ããšã³ããšã³ãžãã¢ãåéããŠããŸãã www.ikyu.co.jp ãŸãã¯ã«ãžã¥ã¢ã«é¢è«ãããæ°è»œã«ãå¿åãã ãã! hrmos.co React 19 ã React Router v7 ã®ãªãªãŒã¹ãè¿ã¥ããŠããŸãã ↩ Remix ãžã®ç§»è¡ã決ããçç±ã®äžã€ã§ã ↩ å®éã«ã¯çŽ çŽã«é¢æ°ãšããŠå®è£
ããŠããŸããäºåã«å®çŸ©ããªããŠã颿°ã® signature ã interface ãšããŠæ©èœããããšã瀺ãããã®äŸã§ãã ↩ å®ãèšããšãæåããçŸåšã®èšèšã«èŸ¿ãã€ããŠããããã§ã¯ãããŸãããåœå㯠Remix ã® nested routes ãé§äœ¿ããæ¡ãæ€èšããŠããŸããããã®éçšã§ããŒã ã¡ã³ããŒãã瀺åãããããã¹ããŒããã·ã³ã䜿ã£ãã¢ãããŒãã«åãæ¿ããŸããããããåœåæ¡ã®ãŸãŸã§ããã° DIP ãšæ£å察ã®ç¶æ
ã«ãªã£ãŠãããšæããŸãã ↩ Jotai ã®ãããªã©ã€ãã©ãªãå©çšããªãå Žå㯠useSyncExternalStore ã䜿ã£ãŠãããžãã¯ã React ãšççµåã«ã§ããŸãã ↩
ã¬ã¹ãã©ã³ãããã¯ãéçºéšã®ç¢æŸ€ã§ãã äžäŒã§ã¯ã RESZAIKO ããšãããããã¯ãã®éçºãè¡ã£ãŠããŸãã ãã®éçºãé²ããã«ããããUI/UX ã«é¢ããããã€ãã®èª²é¡ãããããšã³ãžãã¢äž»å°ã§ãã¶ã€ã³ã·ã¹ãã ãæ§ç¯ããããšã«ããŸããã æ¬èšäºã§ã¯ããšã³ãžãã¢äž»å°ã§ãã¶ã€ã³ã·ã¹ãã ãæ§ç¯ããããšã«ãªã£ãèæ¯ããå®éã«åãçµãã å
容ã«ã€ããŠèµ€è£žã
ã«ã話ãããŸãã ãã¶ã€ã³ã·ã¹ãã ã®å°å
¥ãæ€èšããŠãããã®ã®ãæåã®äžæ©ãèžã¿åºããã«ããã»ãããã¯äœããå§ããã°ãããããããªãããŒã ã«ãšã£ãŠåèã«ãªãã°å¹žãã§ãã ãããã RESZAIKO ãšã¯ RESZAIKO ã¯é£²é£åºã®äºçŽç®¡çã DX ãã SaaS äºæ¥ã§ãçŸåš3ã€ã®ãããã¯ããæäŸããŠããŸãã è€æ°äºçŽãµã€ãã®åšåº«ãäžæ¬ç®¡çããããµã€ãã³ã³ãããŒã©ãŒã äºçŽã顧客æ
å ±ã管çãããäºçŽå°åž³ã åºèç¬èªã®äºçŽããŒãžãæäŸãããWebäºçŽã çŸåšã¯3ã€ã®ãããã¯ãããããŸãããå
ã
ã¯ãµã€ãã³ã³ãããŒã©ãŒã ããæäŸããŠãããäºçŽå°åž³ãšWebäºçŽã¯åŸçºã®ãããã¯ããšããŠãªãªãŒã¹ããŸããã ãã¶ã€ã³ã·ã¹ãã äœæã®èæ¯ åŸçºãããã¯ãã®éçºãé²ããŠããäžã§ã®èª²é¡ ç§ãã¡ã¯ãµã€ãã³ã³ãããŒã©ãŒãããç¶æ
ã§ããäºçŽå°åž³ããšãWebäºçŽãã®éçºã«çæããŸããã åæé²è¡ã§éçºããããšã«ãªã£ããã®2ã€ã®åŸçºãããã¯ãã¯ãæ¢åãããã¯ãã§ãããµã€ãã³ã³ãããŒã©ãŒã® UI/UX ãåèã«ããŠèšèšã»éçºãé²ããŠããŸããããããŸããŸãªèª²é¡ã«çŽé¢ããŸããã 課é¡â ã¹ããŒãæãæã£ãŠãã¶ã€ã³ãåºããŠããããšãé£ãã RESZAIKO ã«ã¯ãµã€ãã³ã³ãããŒã©ãŒã®éçºæãã瀟å
ã«å°ä»»ã®ãã¶ã€ããŒãããªãã£ãããã瀟å€ã®ãã¶ã€ããŒãšé±äžåã®ããŒãã£ã³ã°ã§ãã¶ã€ã³ãé²ããŠããŸãã éãããæéã§å€ãã®ç»é¢ã®ãã¶ã€ã³èª¿æŽãè¡ãããšã¯é£ãããç°¡åãªç»é¢ã¯ãšã³ãžãã¢ããã¶ã€ã³ããããšããããŸããããããããã¶ã€ããŒä»¥å€ãã¶ã€ã³ã«ãŒã«ã®ææ¡ãã§ããŠããªãç¶æ³ã§ãã£ãããéœåºŠèªèãåãããå¿
èŠããããã¹ããŒãæãæã£ãŠé²ããŠããããšãã§ããŸããã§ããã 課é¡â¡ ãããã¯ãéã§ UI/UX ã®çµ±äžæãçã¿åºãã¥ãã RESZAIKO ã¯é£²é£åºã®ã¹ã¿ããã3ã€ã®ãããã¯ããæšªæããŠäœ¿çšããããšãæ³å®ããŠããŸããæšªæããŠäœ¿çšããŠãéåæã®ãªãæäœãæäŸããããã« UI/UX ãåãããå¿
èŠããããŸãããããã¶ã€ã³ãæäœæã«é¢ããç¥èŠãéçºããŒã éã§ããŸãå
±æã§ãããå·®ç°ãçããŠããŸãããšããããŸããã ãããé²ãããã«ã瀟å€ã®ãã¶ã€ããŒã« Figma äžã§ã³ã³ããŒãã³ãã®çœ®ãå ŽãäœæããŠããããŸããã ããããåãããã¯ãã§äœ¿çšããããã®ä»çµã¿åãã§ãããæäœæã®çµ±äžã Figma äžã§ååã«è¡šçŸãããŠããªãã£ããããããŸãéçšããããšãã§ããŠããŸããã§ããã 課é¡â¢ ãã¶ã€ã³ã®ã¯ãªãªãã£ã®æ
ä¿ãé£ãã åäžãããã¯ãå
ã§åãã³ã³ããŒãã³ãã䜿çšããŠããŠããäœçœã®åãæ¹ãã³ã³ããŒãã³ãã®çµã¿åããæ¹ãªã©çްããéšåãŸã§çµ±äžããããšã¯é£ããã§ããå®éã«ãæ¢åç®æãåèã«ããŠã§ããç»é¢ã¯ã倧æ ã¯åãã§ãå®ç§ã«ã¯æããããŠããããç»é¢ããšã«å°ããã€éããåºãŠããŸããŸããã ãŸãããã¶ã€ã³ã«é¢ãããã§ãã¯åºæºããªããããããŒã å
ã§ã®ã¬ãã¥ãŒãããçšåºŠãŸã§ãã確èªã§ããããã¶ã€ããŒã®ã¬ãã¥ãŒãæ¯å现éšãŸã§ãã§ãã¯ããããšãã§ããªãç¶æ
ã§ããã ãã®ãããªèª²é¡ãæããªããåœåã¯éçºãé²ããŠããŸãããããªãªãŒã¹ãè¿ã¥ãã«ã€ãããã¶ã€ã³ã®ã¹ããŒãæãããã«ããã¯ã«ãªãå§ããŸããã ããã§ããšã³ãžãã¢ã®äžããæ¯èŒç UI/UX ã«ãã ããããã€3人ãéãŸããRESZAIKO ãã¶ã€ã³ã·ã¹ãã ãäœæããããšã«ãªããŸããã ãã¶ã€ã³ã·ã¹ãã æ§ç¯ã®æµã ãã®ããã«ããŠãã¶ã€ã³ã·ã¹ãã ãäœãããšãã話ã«ãªã£ããã®ã®ãã¡ã³ããŒããšã³ãžãã¢ã ãã ã£ãããããã¶ã€ã³ã·ã¹ãã ã«é¢ããç¥èŠãäžè¶³ããŠããŸããã ããã§ãç¥èŠãåŸãããã«ãã¡ãããã¯ããããã¶ã€ã³ã·ã¹ãã ããšããæ¬ãèªãããšã«ããŸããã ちいさくはじめるデザインシステム bnn.co.jp ãã®æ¬ã¯ãSmartHR 瀟ã®ãã¶ã€ã³ã·ã¹ãã ã®åãçµã¿ãäŸã«ãã¶ã€ã³ã·ã¹ãã ã®æ§ç¯ã»éçšã®æ¹æ³ã«ã€ããŠæžãããŠããŸãã ç§ãã¡ã¯ãã®æ¬ãåèã«ä»¥äžã®æµãã§é²ããŠãããŸããã ã³ã³ã»ããèšå® ãã¶ã€ã³ã·ã¹ãã ã¯ãæµè¡ã£ãŠãããããããªããšãªããã¶ã€ã³ã®èª²é¡ã解決ããããšããçç±ã§äœæããã¡ã§ãã ãããããã¡ãããã¯ããããã¶ã€ã³ã·ã¹ãã ãã«ã¯åæãšããŠç®çãå¿
èŠã§ãããšèšèŒãããŠããããããŸããã¶ã€ã³ã·ã¹ãã ãäœæããç®çãæ¹ããŠå®ãããšããããå§ããããšã«ããŸããã ãã¶ã€ã³ã·ã¹ãã ã«ã¯æ£è§£ããªããããã¶ã€ã³ããšããäœããã®ç®çãæ©èœãããããã®ãã·ã¹ãã ãã§ãããã·ã¹ãã ãšããŠæç«ãããããã«äœããã®ç®çãå¿
èŠ éãŸã£ããšã³ãžãã¢å士ã§çŸåšæããŠãã課é¡ç¹ãæãããããã®è§£æ±ºã«ã¯äœãå¿
èŠãªã®ããã©ã®ãããªç¶æ
ãçæ³ãªã®ãã話ãåããŸããã ãã®çµæã以äžã®ãããªãã¶ã€ã³ã·ã¹ãã ã®ã³ã³ã»ãããšããŠææåããŸããã ãã¶ã€ã³ã·ã¹ãã ã³ã³ã»ãã ãã¶ã€ã³ãšéçºãå¹çåãã課é¡è§£æ±ºã«éäžã§ããç°å¢ãäœãããªãªãŒã¹ãæ¹åãµã€ã¯ã«ãæ©ããã ãã¶ã€ã³ã«äžè²«æ§ããããããŠãŒã¶ãŒããªãã£ãšã¢ã¯ã»ã·ããªãã£ãåäžãããïŒãµãŒãã¹åäœïŒ 3ã€ã®ãããã¯ããéåæã®ãªããŠãŒã¶ãŒäœéšãæäŸãã éãã¶ã€ããŒãšãã¶ã€ããŒãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãšããŠäœ¿çšããå
±éèªèãäœãææ®µãšãã éãã¶ã€ããŒãèªèµ°ããŠç°¡æçãªãã¶ã€ã³ãè¡ããããã«ããïŒãã¶ã€ã³ã®ããã©ããã«ããïŒ æ§ææ±ºã ã³ã³ã»ãããæ±ºãããšããã§ã次ã«ãã¶ã€ã³ã·ã¹ãã ãã©ã®ãããªæ§æã§å®éã«äœæããŠããã®ããæ€èšããŸããã æ§æã決ããã«ããã£ãŠããŸãã¯ä»ç€Ÿã®ãã¶ã€ã³ã·ã¹ãã ã§ã¯ã©ã®ãããªé
ç®ãæ¡çšããŠããã®ã調ã¹ãŸããã ãã¡ãããã¯ããããã¶ã€ã³ã·ã¹ãã ãã«ãããšãããå
šãŠãç¶²çŸ
ããå¿
èŠã¯ãªãããã調ã¹ããã¹ãŠã®é
ç®ãæ¡çšããã®ã§ã¯ãªããå¿
èŠãªãã®ãåæšéžæãããç¬èªã§é
ç®ã远å ãããããŸããã ã¹ã¿ã€ã«ã¬ã€ãã«ã¯æ§ã
ãªçš®é¡ããããŸããããã¹ãŠãç¶²çŸ
ããŠããå¿
èŠã¯ãããŸãããå¿
èŠãç®çã»çµç¹ãªã©ã«å¿ããŠæè»ã«éžã¶ããšãã§ããŸãã ç§ãã¡ãç¹ã«åèã«ãããã¶ã€ã³ã·ã¹ãã ã¯ãã SmartHR Design System ãã Spindle ãã ããžã¿ã«åº ãã¶ã€ã³ã·ã¹ãã ãã®3ã€ã§ãã ãSmartHR Design Systemãã¯ããŒã¯ã³ãã³ã³ããŒãã³ããªã©åºæ¬èŠçŽ ãç¶²çŸ
ãããŠãããããã¢ãŠãã©ã€ã³äœæã®åèã«ããŸããã ãSpindleãã¯å®çŸ©ããã³ã³ããŒãã³ãã®äœ¿çšã«ãŒã«ããããããããŸãšããããŠããããããã¶ã€ã³ã«ãŒã«äœæã®åèã«ããŸããã ãŸããä»åäœæãããã¶ã€ã³ã·ã¹ãã ã¯å
ã
ã³ã³ããŒãã³ã眮ãå ŽãšããŠäœ¿çšããŠãã Figma ã«å®çŸ©ããããšèããŠããããããããžã¿ã«åº ãã¶ã€ã³ã·ã¹ãã ãã®ãŸãšãæ¹ãåèã«ããŠäœæããããšã«ããŸããã ã¬ãã¥ãŒ ãã¶ã€ã³ã·ã¹ãã ã®ã³ã³ã»ãããšæ§æã決ãŸã£ããšããã§ãä»ã®ãããã¯ãã®ãã¶ã€ã³ã·ã¹ãã ãäœæããŠããæ¹ã«ã¬ãã¥ãŒãäŸé Œããããšããããšã«ãªããŸããã äžäŒ.com ã§ã¯ãã§ã«ãã¶ã€ã³ã·ã¹ãã ãæ§ç¯ãããŠããããããã®äœæã«æºãã£ããã¶ã€ããŒããšã³ãžãã¢ã«ã¬ãã¥ãŒãäŸé ŒããŸããã user-first.ikyu.co.jp ã¬ãã¥ãŒäŒã§ã¯ãå®çŸ©ããã³ã³ããŒãã³ãã«å¯ŸããŠã©ã®ããã«äœ¿ãã®ãã«ãŒã«ãèšèŒããæ¹ãè¯ããšããã¢ããã€ã¹ãããã ããŸããã ãããåããããšããšã«ãŒã«ã¯ããã¶ã€ã³ãã¿ãŒã³ããšããåç®ã§ã¬ã€ã¢ãŠãã«é¢ããããšãå®çŸ©ããäºå®ã§ãããããããããã¶ã€ã³ã«ãŒã«ããšããåç§°ã«å€æŽããã³ã³ããŒãã³ãã®äœ¿ãæ¹ãŸã§å®çŸ©ããããšã«ããŸããã ãŸãåœå㯠Figma äžã§ã¬ã€ãã©ã€ã³ã®å®çŸ©ã®ã¿ãè¡ãäºå®ã§ãããããã£ãããšã³ãžãã¢ãäœæããŠããã®ã ããã©ã€ãã©ãªãŸã§äœæãããã©ãããšææ¡ãããã ããã©ã€ãã©ãªã®äœæã詊ã¿ãããšã«ããŸããã ãããŠãæçµçã«æ±ºå®ããæ§æããã¡ãã§ãã å©çšã®æåŒã: ãã¶ã€ã³ã·ã¹ãã æ§ç¯ã®ç®çã»å©ç𿹿³ ãã¶ã€ã³ãã£ããœãã£ãŒ: RESZAIKOãããã¯ãã倧åã«ããŠããããš ãã¶ã€ã³ããŒã¯ã³: ãã¶ã€ã³ã·ã¹ãã ã«ãããæå°åäœã®ã¹ã¿ã€ã«å®çŸ© ã³ã³ããŒãã³ã: UIãæ§æããããã®æå°åäœã®ããŒããã¢ã€ã³ã³ ãã¶ã€ã³ã«ãŒã«: ãã¶ã€ã³ããŒã¯ã³ãã³ã³ããŒãã³ãã䜿çšããéã®ã«ãŒã« ã©ã€ãã£ã³ã°ã¬ã€ã: ã§ã/ãŸã調ãå¥èªç¹ã®æã¡æ¹ ãã§ãã¯ãªã¹ã: ãã¶ã€ã³ã·ã¹ãã ã«åã£ãŠããã倿ããããã®ç¢ºèªé
ç® ãã®äžã§ãããŸãã¯æå°éã§ãªãªãŒã¹ããŠã¿ãããšããããšã«ãªããäž»èŠéšåãšãªãããã¶ã€ã³ããŒã¯ã³ããã³ã³ããŒãã³ããããã¶ã€ã³ã«ãŒã«ãã®çå®ãååãªãªãŒã¹ã®ç®æšãšããŠé²ããŠããããšã«ããŸããã äœæ ã¬ãã¥ãŒã®ãã£ãŒãããã¯ãåãããšããã§ããã¶ã€ã³ã·ã¹ãã ã®äœæã«çæããŸããã æ¬æ¥ã®å®è£
ã䞊è¡ã§è¡ã£ãŠããŠãããŸãæéã確ä¿ã§ããªãäžãFigma ã«åèªãããŒã¯ã³ãã³ã³ããŒãã³ãã远å ããé±ã«1å3人ã§éãŸã£ãŠãäºããäœæãããã®ã«ãã£ãŒãããã¯ãè¡ããšããæµãã§é²ããŸããã ãŸãã3人ã®äžã§åæãåãããã®ã¯ã瀟å€ã®ãã¶ã€ããŒã«ç¢ºèªããŠãããããšã³ãžãã¢ãšãã¶ã€ããŒã®åæ¹ãåé¡ãªã䜿çšã§ããããã«æŽããŠãããŸããã å®éã«ã§ãããã¶ã€ã³ã·ã¹ãã ã®äžéšããèŠãããŸãã ãã¶ã€ã³ããŒã¯ã³ ã³ã³ããŒãã³ã ãã¶ã€ã³ã«ãŒã« βçãªãªãŒã¹ïŒ ååãªãªãŒã¹ãšããŠæ²ããŠããããã¶ã€ã³ããŒã¯ã³ããã³ã³ããŒãã³ããããã¶ã€ã³ã«ãŒã«ãã®äœæãããçšåºŠå®äºãããšããã§ãβçã®ãã¶ã€ã³ã·ã¹ãã ãšããŠããŒã ã«å±éããŸããã çŸåšã¯ãå®éã«ç€Ÿå€ã®ãã¶ã€ããŒãéçºã¡ã³ããŒã«å©çšããŠããããå
ã
ã®å®çŸ©ã§äžååã ã£ãå
å®¹ãæ¡å
ããããæ°ããªUIã«ã€ããŠã¯éœåºŠå®çŸ©ã远å ãããããŠããŸãã ãã¶ã€ã³ã·ã¹ãã ãéããŠããã¶ã€ããŒãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãåæ»ã«ãªã£ãã ãã§ãªãããšã³ãžãã¢å士ã§ããã¶ã€ã³ã«é¢ããäŒè©±ãã§ããããã«ãªããã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠãæ©èœãã¯ãããŠããŸãã ãŸãšã æ¬èšäºã§ã¯ãRESZAIKO ãã¶ã€ã³ã·ã¹ãã ã®å°å
¥èæ¯ããβçãªãªãŒã¹ãŸã§ã®æµããã玹ä»ããŠããŸããã ãšã³ãžãã¢äž»å°ã§ãã¶ã€ã³ã·ã¹ãã ãæ§ç¯ããŠã¿ããšãåæç¥èãäžè¶³ããŠããããšãã調æ»ããªããã°ãªããªãäºæãå€ããæåã®æ®µéã§ã¯ãªãªãŒã¹ãŸã§ãã©ãçããã®ãäžå®ã«æããããšããããŸããã ããããå®è£
ã§å¿
èŠã«ãªãã³ã³ããŒãã³ãããã¶ã€ã³ã«ãŒã«ãæãããªã®ã§ãFigma ãžã®å®çŸ©ã®ãã§ãŒãºã«ç§»ã£ãŠããã¯ç¹ã«è¿·ãããšãªãé²ããããšãã§ããŸããã èªåãã¡ãå®è£
æã«å¿
èŠãšããŠãããã®ããã€ã¬ã¯ãã«åæ ããããšãã§ããããšã¯ããšã³ãžãã¢äž»å°ã§äœæããã¡ãªããã ãšæããŸãã ä»åãã¶ã€ã³ã·ã¹ãã ãå°å
¥ããããšã«ãããåœåæããŠãã3ã€ã®èª²é¡ã¯è§£æ±ºã§ããã®ããšããç¹ã«ã€ããŠã§ããã解決ã§ããéšåãããã°ããå°ãæãå ããå¿
èŠãããéšåããããšæããŠããŸãã 課é¡â ã¹ããŒãæãæã£ãŠãã¶ã€ã³ãåºããŠããããšãé£ãã ãã¶ã€ããŒãšãšã³ãžãã¢ã®å
±éèšèªãã§ããããšã«ããããã¶ã€ã³ã«å¯Ÿãã質åã®ç²ŸåºŠãäžãããã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ãããããããŸã§ããã¹ããŒãæãæã£ãŠéçºãé²ããããããã«ãªã£ãŠããŸããã ä»åŸã¯ãããã«ãã¶ã€ã³ã«ãŒã«ãªã©ãã¢ããããŒããããã¶ã€ã³ã«ã€ããŠèããããç°å¢ãæŽããŠãããã°ãšæããŸãã 課é¡â¡ ãããã¯ãéã§ UI/UX ã®çµ±äžæãçã¿åºãã¥ãã åãããã¯ãéã§ã³ã³ããŒãã³ããæ€èšããã¶ã€ã³ã«åæ ããããšããªããªã£ããããå°å
¥åãããçµ±äžæãåºãããšãã§ããããã«ãªããŸããã ããããå®è£
ã¬ãã«ã§ã®çµ±äžããŸã ååã§ã¯ãããŸãããããã解決ããããã«ãUI ã©ã€ãã©ãªãšããŠããã±ãŒãžåããRESZAIKO ã®åãµãŒãã¹ã«åæ ããŠãããã°ãããã«èª²é¡ã®è§£æ±ºã«ã€ãªãããšèããŠããŸãã 課é¡â¢ ãã¶ã€ã³ã®ã¯ãªãªãã£ã®æ
ä¿ãé£ãã ã«ãŒã«ãå®ãŸã£ãããšã§ã誰ãäœæããŠãå·®ç°ãåºãªãããã«ããåºç€ã¯æŽããããŸãããããã§ãã¯æã®å¹çã¯ãŸã æ¹åã®äœå°ããããŸãã ããå¹ççã«ç¢ºèªã§ããããã«ããããããã§ãã¯ãªã¹ãã®äœæãªã©ããã¶ã€ã³ã·ã¹ãã ã®æ¡åŒµãé²ããŠãããããšèããŠããŸãã éçšãå§ããã°ããã®çŸæ®µéã§ã¯ããŸã å
šäœçã«æ¹åã®äœå°ãå€ãæ®ã£ãŠããŸãã ããããããã«ãã¶ã€ã³ã·ã¹ãã ãã¢ããããŒãããå©äŸ¿æ§ãé«ããŠãããããšèããŠããŸãã ãããã« å
šãç¥èŠããªãäžã§å§ãããã¶ã€ã³ã·ã¹ãã ã®äœæã§ãããããããããããšã«ãã¶ã€ã³ã·ã¹ãã ããªãŒãã³ã«éçšããŠããäŒæ¥ãå€ããåèã«ã§ãããã®ãè±å¯ã«ãããŸããããã®ãããã§èªåãã¡ãªãã«ã¢ã¬ã³ãžããŠãªããšã圢ã«ãããããã¿ã€ããŸã§æã£ãŠããããšãã§ããŸããã ç¥èŠããªãäžã§ããŸããšã³ãžãã¢äž»å°ã§ãã¶ã€ã³ã·ã¹ãã ãå°å
¥ããããšããŠããæ¹ã
ã«ãšã£ãŠããã®çµéšãäžã€ã®æãããã«ãªãã°å¬ããã§ãã RESZAIKO ãã¶ã€ã³ã·ã¹ãã ã¯ãããããã£ãšã¢ããããŒããããŠããã®ã§ãä»åŸãããã°ã§çºä¿¡ããŠãããŸãïŒ äžäŒã§ã¯ãšãã«è¯ããµãŒãã¹ãã€ãã£ãŠããã仲éãåéããŠããŸãã®ã§ãèå³ãæã£ãŠããã ãããããã²äžäŒã® æ¡çšãµã€ã ãã芧ãã ããã
Go Conference 2024ã«ã¹ãã³ãµãŒããŸãã CTO宀ãã©ãããã©ãŒã éçºããŒã ã®å±±å£( @igayamaguchi )ã§ãã å
æ¥6/8(å)ã«äžäŒã§Go Conference 2024ã«ã¹ãã³ãµãŒããããŠããã ããã¹ãã³ãµãŒããŒã¹ãåºå±ããŸããã gocon.jp æ¥ãŠããã ããæ¹ã¯ããããšãããããŸãïŒ æ¥ãŠããã ããæ¹ãšè©±ããŠããäžã§ãäžäŒãGoã䜿ã£ãŠããããšãç¥ããªãæ¹ãããããããããšã«æ°ã¥ããŸãããéã«ãæè¿äœ¿ãå§ããã°ããã®Rustã®äºäŸã«ã€ããŠãåç¥ã®æ¹ã®ã»ããå€ãã£ãã®ã§ããããã¯ã次ã®Rustã«ã€ããŠã®èšäºãå€ãã®æ¹ã«èªãŸããããšã«ãã圱é¿ã ãšæããŸãã user-first.ikyu.co.jp å®éã«ã¯äžäŒã¯Goã䜿ã£ãŠãããµãŒãã¹ããããããããŸãããã®ç¹ãã¢ããŒã«ããããããã®èšäºã§ã¯äžäŒã®ã©ã®ãµãŒãã¹ã§GoãæŽ»çšãããŠãããã玹ä»ããŸãã äžäŒãã©ã®ãµãŒãã¹ã§Goã䜿ã£ãŠããã ãŸããäžäŒã§ã¯ããã€ãã®ãµãŒãã¹ãæäŸããŠããŸãã äŒç€Ÿç޹ä»è³æ ããæç² ãã®äžã§Goã䜿ãããŠãããµãŒãã¹ã¯ä»¥äžã®èµ€æ ã§å²ããããµãŒãã¹ã§ãã ã芧ã®éããGoã䜿ãããŠãããµãŒãã¹ã¯å€ãã§ãã ãŸãããŠãŒã¶ãŒåãã®ãµãŒãã¹ãšã¯å¥ã®ç€Ÿå
ãã©ãããã©ãŒã ã§ãGoã䜿ãããŠãããå®éã¯äžã®å³ã§è¡šãããŠããç®æä»¥äžã«GoãæŽ»çšãããŠããŸãã ããããã¯ãåãµãŒãã¹ã§ã®Goå©çšäºäŸãåå¥ã«ç޹ä»ããŠãããŸãã åœå
宿æ³äºçŽãµãŒãã¹ã§ã®æŽ»çš ãŸããäžäŒã®äžã§æã倧ããªãµãŒãã¹ã§ããåœå
宿æ³äºçŽã«ãããŠGoã¯æŽ»çšãããŠããŸãã äžäŒã§ã¯åœå
宿æ³äºçŽãµãŒãã¹ãšããŠäžäŒ.comãšYahoo!ãã©ãã«(LINEã€ããŒæ ªåŒäŒç€Ÿããéå¶ãå§èš)ãéå¶ããŠããŸãã https://www.ikyu.com https://travel.yahoo.co.jp å®¿æ³æœèšãæ¢ãããã®æ€çŽ¢ãå®è¡ããããã¯ãšã³ããGoã§æžãããŠããŸããããã¯ãšã³ãã¯gqlgenãçšããGraphQLãµãŒããŒã«ãªã£ãŠãããããã«ããã©ã³ã®æ€çŽ¢ãæéãåšåº«æ€çŽ¢ãšãã£ãããžãã¯ãå®è£
ãããŠããŸããä»ã«ããå
šææ€çŽ¢ãšã³ãžã³ã§ããSolrã®ã€ã³ãã¯ã·ã³ã°ããæœèšç®¡çç»é¢ã®äžéšAPIãªã©ãGoã§æžãããŠããŸãã ããã«ã®äºçŽãè¡ãåŠçãäºçŽæ
å ±ã®é²èЧããŒãžã¯VB.NETã§ããããã¡ããåŸã
Goã«çœ®ãæããŠããäºå®ã§ãã ãµãããšçŽçšãæµ·å€å®¿æ³äºçŽ åœå
宿æ³äºçŽãµãŒãã¹ä»¥å€ã«ãããã€ãã®ãµãŒãã¹ã§Goã¯æŽ»çšãããŠããŸãã äŸãã°å®¿æ³äºçŽæã«å²åŒã¯ãŒãã³ãåãåãããµãããšçŽçšãµãŒãã¹ããæµ·å€å®¿æ³äºçŽã§ãã https://furusato.ikyu.com/ https://www.ikyu.com/global/ ãããã®ãµãŒãã¹ã¯ã瀟å
ã§ã¯æ°ãããšããããšããããããã¯ãšã³ãã¯æ€çŽ¢ããäºçŽãŸã§ãã¹ãŠGoã§å®è£
ãããŠããŸãã äžäŒãã©ãããã©ãŒã ãŠãŒã¶ãŒåããµãŒãã¹ä»¥å€ã«ã瀟å
åããã©ãããã©ãŒã ã§ãGoã¯äœ¿ãããŠããŸããäžäŒã§ã¯ããã€ãã®ãµãŒãã¹ãéå¶ããŠããããµãŒãã¹éã§å
±éã®ã¢ã«ãŠã³ããå©çšãã貯ãããã€ã³ãããµãŒãã¹æšªæã§äœ¿çšããããåãæ±ºæžã®ä»çµã¿ã䜿ã£ããã§ããŸãã ãããã£ãæ©èœãåãµãŒãã¹ã§åå®è£
ããããšãªãæäŸããããã«ãäžäŒãã©ãããã©ãŒã ãšããŠè€æ°ã®ãã€ã¯ããµãŒãã¹ãå®è£
ããéçšããŠããŸããå
·äœçãªãµãŒãã¹ãšããŠãçŸåšã¯äŒå¡ãµãŒãã¹ããã€ã³ããµãŒãã¹ã決æžãµãŒãã¹ãããããããã¯ãã¹ãŠGoã§å®è£
ããŠããŸãã çŸåšç§»è¡äžã®äžäŒãã©ãããã©ãŒã ã®å³ äžäŒãã©ãããã©ãŒã éçºã®å®äŸã«ã€ããŠã¯ã2023幎ã®ã€ãã³ãã§ã®è³æãåç
§ããŠãã ããã speakerdeck.com Goãéžå®ããŠããã£ãããš å®éã«åœå
宿æ³äºçŽãäžäŒãã©ãããã©ãŒã ã®éçºã«æºãã£ãŠããã¡ã³ããŒãããGoãéžãã§ã¿ãŠããã£ãããšãèããŠã¿ãŸããã 䞊è¡åŠçãèšèªçµã¿èŸŒã¿ã§å
¥ã£ãŠããããããããã䜿ãããã èšèªä»æ§ãã·ã³ãã«ã§ãå
¥éãã䜿ããããã«ãªããŸã§ã®æéãçã æ¥åããžãã¯ã倧äºãªã®ã§ãã·ã³ãã«ãã€å
ãæžããã®ããã äžæ¬åŠçãäŒèšç®¡çã§å€§ããã®ããŒã¿ãæ±ããšãã¯éåæåŠçãæžãã ç·ããŠãGoã¯ãã·ã³ãã«ããã€ãã°ãããããã§ããŠå
ç¢ã«äœãããããšãéèŠããäžäŒã®æè¡éžå®æ¹éã«åèŽãããšæããŠããŸãã ãããã« ãã®èšäºã§ã¯ãäžäŒãGo Conference 2024ã«ã¹ãã³ãµãŒãããŠããã ããããšãäžäŒã§ã¯å¹
åºãGoã䜿ãããŠããããšã玹ä»ããŸãããäžäŒã§ã¯ããããããçç£çãã€é«å¹çã«ãµãŒãã¹ãéçºïŒéçšã§ããGoãæŽ»çšããŠããµãŒãã¹ãæé·ãããŠãããŸãïŒ äžäŒã§ã¯ããšãã«è¯ããµãŒãã¹ãã€ãã£ãŠãã仲éãåéäžã§ãã hrmos.co ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããã®ã§ããæ°è»œã«ãå¿åãã ããã www.ikyu.co.jp
ããã«ã¡ã¯ã宿æ³ãã©ãããã©ãŒã éçºããŒã ã®èå°ã§ãã äžäŒã§ã¯æã«äžåºŠã瀟å
ãšã³ãžãã¢åãã«Ikyu Tech Talkãéå¬ããŠããŸãã2022幎ããå§ãŸãããããããããšã«2024幎3æã§äžž2幎ãè¿ããããšãã§ããŸããã ãã®èšäºã§ã¯ã Ikyu Tech Talkã®2幎éã®ãµãããã ãããŠãããŸãã ãŸããç§ã¯ç€Ÿå
ã€ãã³ãã®äž»å¬ãåææŠã ã£ãã®ã§ãã©ããã£ããã€ãã³ããçãäžããããã®ããšæ©ãã ãšãããããŸããã ããã§ãåãããã« èªåã®äŒç€Ÿã§Tech Talkãéå¬ããŠã¿ãã人ã«åããŠã€ãã³ãéå¶ã®ç¥èŠ ããäŒãããããšæããŸãã éå¬ã®ãã£ãã ããšããšå®æçãªãããžã§ã¯ãã®ææå ±åäŒã¯ãããã®ã®ãæ¥åã§åŸããšã³ãžãã¢ãªã³ã°ã®ç¥èŠã®å
±æãããå Žã¯èšããããŠããŸããã§ããã ãããšããæè¡ã«ã€ããŠãã£ãã°ããã«è©±ãå Žã宿çã«ãããšæ¥œããããäžç·ã«ãããªãïŒããšå£°ããããŠããããé¢çœããã ã£ãã®ã§ãã£ãŠã¿ãããšã«ããŸããã Ikyu Tech Talkãšã¯? ãæè¡ã®ããšãªããªãã§ãOKããšé¡ããŠç€Ÿå
ãšã³ãžãã¢ã«çºè¡šè
ããã£ãŠããã60åã®ç€Ÿå
ã€ãã³ãã§ãã æã«1åããŒã¹ã§Zooméå¬ããŠããŸãã ã«ããŽãªå¥ã«éå»ã®çºè¡šãæç²ããŠã玹ä»ããŸãã èªå·±åŠç¿ã®çºè¡š åã
äººã®æè¡ç éœã®çºè¡šåã§ããæ¥åã§ã¯ç¥ãããšãã§ããªãèå³é¢å¿åéãç¥ãããšãã§ããŸããã GitHub Copilot㧠次äžä»£ã®ã³ãŒãã£ã³ã°äœé𠿣åŒãªãªãŒã¹çŽåŸã®2022幎6æã«GitHub Copilotã«ã€ããŠçºè¡šããŠããããŸãããããããã£ããã«Copilotã®æ¥åå©çšãè¡ãããšã«ãªããŸããïŒ TypeScript ã«ããåã¬ãã«ããã°ã©ãã³ã°ã«å
¥éãã話 åå®çŸ©ã®è¡šçŸåã®é«ããæŽ»çšããŠãtscã«ã¢ã«ãŽãªãºã ãå®è¡ããããã¢ãé®®çã§ãã ãããžã§ã¯ãã®ãµãããã æ¡ä»¶ãçµãã£ãã¿ã€ãã³ã°ã§ãããŒã ã®çããã«æ¯ãè¿ãããããŠçºè¡šãããŠããããŸãããæ°ãããã¬ãŒã ã¯ãŒã¯ã»ããŒã«ãç©æ¥µçã«æ¡çšããã¹ã¿ã³ã¹ãªããšããããåææŠã®æè¡ã®ãã£ãŒãããã¯ãå€ãã£ãå°è±¡ã§ãããã£ããæ¬ããããã«çãäžãããŸããïŒ å®¿ç¹ååSNS YADOLINKã§ã®ã¢ãŒããã¯ãã£éžå® äžäŒã§åããŠReactãçšããäºäŸã§ãããåœæããGraphQLã¯ã©ã€ã¢ã³ããšããŠéžå®ãããŠããApollo Clientã«å¯ŸããŠã®é©äžé©ã®èå¯ãè峿·±ãå
容ã§ãããApollo Clientã«ã€ããŠã¯ä»¥äžã®èšäºãã芧ãã ãã https://user-first.ikyu.co.jp/entry/2022/07/01/121325 宿æ³äºçŽãµã€ãã®æ€çŽ¢åŠçãã¥ãŒãã³ã° åœå
宿æ³ãµã€ãã®æ€çŽ¢åŠçã«ã¯è€æ°ã®ã·ã¹ãã ãé¢ãã£ãŠããŸããããããè€åçã«ããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ããŠã¬ã€ãã³ã·ãåæžãããå®è·µçãªãã¯ããã¯ç޹ä»ã§ãã ã¬ã¹ãã©ã³äºçŽãµã€ãããã³ããšã³ãã®ä»ãšãããã YADOLINKã«ç¶ãã¬ã¹ãã©ã³äºçŽãµã€ããReact/Next.jsã§æ§ç¯ããŠããŸãããNext.jsã«ããç¶æ
管çã®èœã穎ãä»åŸã®å±æã«ã€ããŠã®çºè¡šã§ããã詳现ã¯ä»ã®æè¡ããã°ã§è©³ããæžããŠããããããèå³ã®ããæ¹ã¯ä»¥äžã®èšäºãã芧ãã ãã https://user-first.ikyu.co.jp/entry/2023/12/15/093427 https://user-first.ikyu.co.jp/entry/2023/12/22/190342 å°éæ§ã®é«ãéšçœ²ã®ç¥èŠãåºãã äžäŒã«ã¯ãããŒã¿ãµã€ãšã³ã¹éšã»ã¢ãŒããã¯ãããŒã ã»SEO察çããŒã ãšãã£ãå°éæ§ã®é«ãéšçœ²ããããŸãããªãã«ã¯ããã£ãšæ©ãç¥ãããã£ãããå
¥ç€Ÿæã®è³æã«ããŠã»ããããšãã声ãããã ãçºè¡šããããŸããã ç«ã§ããããäžäŒã®ããŒã¿åæåºç€(åå å) äžäŒã®ããŒã¿ãµã€ãšã³ã¹éšã¯ãåãããã¯ãã®ããŒã¿ãããšã«åæåºç€ãæäŸããŠããŸããåæåºç€ã®å
šäœåããã£ããã¢ããã§ããã ãã§ã¯ãªããããŒã¿åºç€ãå®å®ãããããã®å®è·µçãªãã¯ããã¯ãéåžžã«é¢çœãçºè¡šã§ãã äžäŒã®ãµãŒãã¹ãæ¯ãã ã€ã³ãã©ã®ã¯ãªã ãããã¯ãã®ãããã¯ãŒã¯æ§æããããã€ãããŒã«ã€ããŠãSREããŒã ã解説ããŸãããç¹ã«å
¥ç€ŸãããŠã®äººã«ãšã£ãŠã¯åæ¶ã®è³æã§ãã Tech Talkã®ææ Ikyu Tech Talkã¯å®å
šä»»æåå ã®ã€ãã³ããšããŠéå¶ããŠããŸããããéçºçµç¹ã¡ã³ããŒã®åæ°ä»¥äžãåå ãç¶ããŠãããŠããŸãïŒ ãããŸã§ç¶ããããŠããã®ã¯ããšã³ãžãã¢ãªã³ã°ã®è©±ãããã®ã楜ããããããšããã®ã«å°œãããšæããŸãããã®äžæ¹ãäŒç€ŸãšããŠTech Talkãéå¬ããããšã§ä»¥äžã®ãããªææãåŸãããŸããã ããŒã ãè¶
ããŠãã¬ããžãå
±æã§ãã ãããŸã§ã¯ãææå ±åäŒãªã©ã®ããžãã¹çãªææãç¥ãå Žã¯ãã£ããã®ã®ãäºãã®ãã¬ããžãç¥ãæ©äŒã¯ãªããªããããŸããã§ãããTech Talkã¯ãšã³ãžãã¢ãªã³ã°ã®è©±ãèãå ŽãšããŠè²Žéãªæ©äŒã«ãªããŸããã å®éã«Slackãæ¢ããŠã¿ããšãããTech Talkã®çºè¡šãåããŠä»ã®ããŒã ã®ãœãªã¥ãŒã·ã§ã³ãåã蟌ãã§ãããããšãããããŸããïŒ çºè¡šæã®Zoomã®ãã£ããæ¬ã§ã¯ãããŠãã§ã¯ââã䜿ã£ãŠãŸãããšããããã«åå è
ããã®ç¥èŠãå€ãå¯ããããåæ¹åã§ã®ç¥èŠäº€æµãçãŸããã®ãææã ãšæããŸãã çºè¡šã®æ©äŒãããããšã§ãåã
人ã®ç¥èããããã©ãã·ã¥ã¢ããããã ãããžã§ã¯ãã«æ²¡é ããŠããéã¯ãç¥èã衚é¢çãªãŸãŸã«ãªã£ãŠããããšããããŸããTech Talkãç®æšã«ãç¥èã®ç²Ÿæ»ãææ°æ
å ±ã®ç¢ºèªãããããšã§ãããããèªåã®ç¥èŠãšããŠæè¯ãããã£ããã«ã§ããŸãã ããšãã°ããããããã¯ãã®æ°èŠãªãªãŒã¹ãè¡ã£ãããŒã ã«çºè¡šããé¡ããããšãããåæéçºæã®æè¡éžå®ã®æ¯éãæ¯ãè¿ã£ãçºè¡šãããŠãããŸããã éžå®ãããœãªã¥ãŒã·ã§ã³ã®éžå®åºæºã ãã§ã¯ãªããäžæ¡çšã«ããä»ã®æ¡ã®çç±ã仿¯ãè¿ããšãã®éžæã¯åŠ¥åœã ã£ãã®ãã®æŽå¯ãè¿°ã¹ãŠããŠãä»åŸã®æè¡éžå®ã«ãšã£ãŠäŸ¡å€ã®ããè³æã«ãªã£ããšæããŸãã ã«ãžã¥ã¢ã«ã«èªå·±çºä¿¡ã®çµéšãç©ãå ŽãæäŸã§ãã èªå·±çºä¿¡ã®æ©äŒã¯è²Žéã§ãããããå€éšã®å匷äŒã§çºè¡šããããšãããšåå¿è
ã«ã¯è¶³ãéãããšããããŸãã Tech Talkã§ã¯é¡èŠç¥ããåå è
ãªã®ã§ãã«ãžã¥ã¢ã«ã«çºè¡šã®çµéšãç©ãããšãã§ããŸãã æ¡çšæŽ»åãããŠããäŒç€Ÿã«ãšã£ãŠç€Ÿå€ã§çºè¡šããŠããããšã³ãžãã¢ã¯è²Žéã§ãããTech Talkãç·Žç¿å ŽãšããŠæäŸããããšãã§ããŸãã 瀟å
ã€ãã³ãã®éå¶ãããŠããã£ãããš ãã®èšäºãèªãã§ããæ¹ã®ãªãã«ã¯ã以äžã®ãããªæ©ã¿ãæã£ã人ãããããšæããŸãã èªåã®äŒç€Ÿã§ã瀟å
ã€ãã³ããéå¬ããŠã¿ãããã©ãã©ããã£ããçãäžããã ããããã©ãå§ãããããã ããã? 瀟å
ã€ãã³ããéå¬ããŠããã©äººããªããªãéãŸããªããéãŸã£ãŠãçãäžãããªã ç»å£ããé¡ãããŠãæããããã€ãã ããããã¯ã瀟å
ã€ãã³ããéå¬ãããæ¹ã«åããŠãIkyu Tech Talkã§åŸãéå¶ã®ããŠããŠããäŒãããŸãã ã€ãã³ããã³ã³ã¹ã¿ã³ãã«ç¶ããããä»çµã¿ã«ãã Tech Talkã®éå¶æ¹éãšããŠã ãšãã«ã®ãŒãå¿
èŠãããŠç¶ããããªããªããããããããšãã«ã®ãŒå°ãªãé·ãéå¶ã§ããã€ãã³ãã«ãã ããšã決ããŠããŸããã Zooméå¬ãšããã®ããã€ãã³ãèšå¶ãšé客ã«ç²åŒããããªãã£ãããã§ããéå¬é »åºŠãæ1åãããã§ãããŸã«ããã°ããããšããæ°æã¡ã§å§ããŸããã çºè¡šãäŸé Œãããã€ãã³ãåç¥çã®äœæ¥ãªã©ãã€ãã³ãã®éå¶ã¯ãã ã§ããè² æ
ã倧ããã§ãããã®ãããéå¬ã³ã¹ããã§ããã ãäžããã®ã¯éåžžã«æçšã ã£ããšæããŸããã ãŸãäžäŒã§ã¯ãªã¢ãŒãã¯ãŒã¯ãå°å
¥ãããŠãããªãã©ã€ã³ã€ãã³ãã«ãããšåå åŽã®æ·å±
ãé«ããªã£ãŠããŸããããåæ¹ã«ãšã£ãŠãªã³ã©ã€ã³éå¬ãæé©ã§ããã çºè¡šè
ã«å¯Ÿãããªã¿ãŒã³ãèšå®ãã çºè¡šæºåãåœæ¥ã®ç²Ÿç¥çãªè² æ
ã倧ããã®ã§ãã¢ãããŒã·ã§ã³ãé«ããããã«ãªã¿ãŒã³ãèšããŸããã å
·äœçã«ã¯ãTech Talkè³ã®éå¬ããšãçºè¡šããšã«ææ³ã»ã¡ãã»ãŒãžã®åä»ããè¡ã£ãŠããŸãã ã Tech Talkè³ãšã¯ãåæã«äžåºŠãæãé¢çœãçºè¡šãããŠããã人ãæç¥šã§æ±ºã衚地ããã€ãã³ãã§ããäžäŒåãµãŒãã¹ã§äœ¿çšã§ãããã€ã³ããèŽã£ãŠããŸãã ãŸããæ¯åºŠã®çºè¡šåŸã«ã¯ãåå è
ã«çºè¡šã®ææ³ã»ã¡ãã»ãŒãžãæžããŠããã£ãŠããããŸãšããŠãæž¡ãããŠããŸããçºè¡šäžã¯ã©ãããŠãåå è
ã®ãªã¢ã¯ã·ã§ã³ãããããªãã£ãããé¢çœãçºè¡šã ã£ãããªã©äžå®ãæãã人ãå€ãã§ããå®éã«çºè¡šè
ã®æ¹ããããçºè¡šã®ãã£ãŒãããã¯ãããããŠããã£ãããšãã声ãããã ããŸããã äžæ¹ã§ãã¡ãã»ãŒãžã®ååçã20%çšåºŠã«ãšã©ãŸã£ãŠããã®ãä»åŸã®èª²é¡ã§ãã察çãšããŠã€ãã³ãäžã«ã¡ãã»ãŒãžã®èšå
¥æéãèšãããã©ãããšæ€èšäžã§ãã Zoomã®ã³ã¡ã³ãæ©èœã掻çšããŠç©æ¥µçãªåå ãä¿ã å€ãã®åå è
ã«ãªã¢ã¯ã·ã§ã³ããŠãããã€ãã³ããçãäžãããããZoomã®ã³ã¡ã³ãæ©èœã掻çšããŸããã 質åãææ³ããã®å Žã§è©±ãã«ã¯ç·åŒµããŠããŸã人ããããããããã¹ãããŒã¹ã§ã³ã¡ã³ãæ¬ã«æžã蟌ãã§ããã圢åŒã«ããŸãããæžããã質åã¯ãçºè¡šã®åºåãã®è¯ãã¿ã€ãã³ã°ã§åžäŒãæŸããã®å Žã§çºè¡šè
ã«åçããŠããããŸããã ãŸããåžäŒä»¥å€ã®éå¶ã¯ã¡ãã£ãšããææ³ãæèçã«æžã蟌ãããã«ããã³ã¡ã³ãæ¬ãçãäžããããšãå¿ãããŸãããä»ã§ã¯ã³ã¡ã³ãæ¬ããã©ã³ã¯ãªææ³ãèšããå ŽæãšããŠå®çããããããšãŠããã詊ã¿ã ã£ããšæããŸãã ãŸãšã 以äžã瀟å
ã€ãã³ãéå¶ã®ããŠããŠã§ãã 瀟å
ã€ãã³ãã§ã¯ã éå¶ã»çºè¡šè
ã»åå è
ãããããç¶ç¶ã§ããä»çµã¿ãäœã ããšãæãéèŠã ãšæããŸããïŒ ãããã« ãããŸã§èªãã§ãã ããããããšãããããŸãïŒ ä»åã¯ç€Ÿå
ã€ãã³ã Ikyu Tech Talkã®ç޹ä»ãšã瀟å
ã€ãã³ãã®éå¶ãããŠã¿ãŠåŸãåŠã³ããŸãšããŸãããæ¬èšäºãèªç€Ÿã®ãšã³ãžãã¢çµç¹ãçãäžãããæ¹ã®åã«ãªããã幞ãã§ãã ãŸãããã€ãIkyu Tech Talkã«åå ïŒç»å£ããŠãã ãã£ãŠããäžäŒã®ãšã³ãžãã¢ã®çãããžã ãã®å ŽãåããŠæè¬ã®æ°æã¡ãäŒããããŠãã ãããçãããããžãã£ãã«åå ããŠããããããã§ãIkyu Tech Talkãæ¥œããã€ãã³ããšããŠç¶ç¶ã§ããŠããŸãããã€ãåå ããã ãæ¬åœã«ããããšãããããŸãã ãããã«ãªããŸãããäžäŒã§ã¯ç€Ÿå
ã€ãã³ãã«ç©æ¥µçã«åå ããŠããããã¢ãŠãããããåŸæãªãšã³ãžãã¢ãåéããŠããŸãã èå³ããããæ¹ã¯ã以äžã®ãªã³ã¯ãã颿¥å¿ååã³ã«ãžã¥ã¢ã«é¢è«ãžã®ãåå ããã²ãã²ãé¡ãããããŸãïŒïŒïŒ https://www.ikyu.co.jp/recruit/engineer/ https://hrmos.co/pages/ikyu/jobs/1745000651779629061
kymmt ã§ãã äžäŒã§ã¯ãæè¡åã®åºäžããç®çãšããŠãããŸããŸãªç€Ÿå
å匷äŒãéå¬ããŠããŸãããã®èšäºã§ã¯ãä»å¹Ž2024幎ã«å
¥ã£ãŠç€Ÿå
ã§å®æœããŠããå匷äŒã«ã€ããŠç޹ä»ããäžäŒã§ã®å匷äŒã®é°å²æ°ãäŒããããã°ãšæããŸãã äžäŒã®ç€Ÿå
ååŒ·äŒ 2024幎ã«ãããŸã§å®æœããååŒ·äŒ ãA Philosophy of Software Designã茪èªäŒ ãWebããã³ããšã³ã ãã€ããã©ãŒãã³ã¹ ãã¥ãŒãã³ã°ã茪èªäŒ ããã³ããšã³ãã¯ãŒã¯ã·ã§ãã: Reactãã³ãºãªã³ 2024幎ã®ä»åŸã®ååŒ·äŒ äžäŒã®ç€Ÿå
ååŒ·äŒ ç€Ÿå
å匷äŒã¯èŒªèªäŒã®åœ¢åŒã§å®æœããããšãå€ãã§ããåå ææ¬²ã®é«ã人ãã§ããã ãå€ãåå ã§ããææ¥ãšæéãæ±ºããŠã鱿¬¡ã§éå¬ãã圢åŒããšã£ãŠããŸãã èªãæ¬ã®æ±ºãæ¹ã«ã€ããŠã¯ãããã ã¢ããã§æ±ºããããšãå€ãã§ããå
æ¥ã¯ã次ã«èªã¿ããæ¬ãSlackäžã§Pollyã䜿ã£ãæç¥šåœ¢åŒã§åããããªã£ãšãïŒé¢æ°åããã°ã©ãã³ã°ããèªãããšã«ãªã£ããããŸããã é²ãæ¹ã«ã€ããŠã¯åæ¥ãŸã§ã®æºåãšåœæ¥ã§åãããŠããŸãã 忥ãŸã§: ç« ããšã«æ
åœã決ããå Žåã¯æ
åœè
ããæ±ºããªãå Žåã¯åå è
å
šå¡ããã®åã§èªãç¯å²ã«åºã¥ããŠæŠèŠãçåç¹ãã³ã¡ã³ããConfluenceã®ããŒãžãšããŠãŸãšãã åœæ¥: æ
åœè
ïŒãã¡ã·ãªããŒã¿ãäŒãé²è¡ãã€ã€ãè³æã«åºã¥ããŠåå è
ãè°è«ãã€ã€æžç±ãèªã¿é²ãã Confluenceã«ãå匷äŒããšããã¹ããŒã¹ããããããã«å匷äŒã®è³æãéç©ãããŠããŸãã ãŸããã®ã¡ã»ã©èª¬æãããšããã茪èªäŒä»¥å€ã«ãã³ãºãªã³åœ¢åŒã§ã®ã€ãã³ããéå¬ããããšããããŸãã 2024幎ã«ãããŸã§å®æœããååŒ·äŒ ãA Philosophy of Software Designã茪èªäŒ ãœãããŠã§ã¢ã®è€éæ§ã«çç®ããè€éæ§ãããã«å¶åŸ¡ããããšãã芳ç¹ã§ãœãããŠã§ã¢èšèšãå®è£
ã®æ¹æ³è«ãè°è«ãããŠããæžç±ã§ãã A Philosophy of Software Design, 2nd Edition: Ousterhout, John: 9781732102217: Amazon.com: Books ãã®æ¬ã¯ãããŸã§ã®é説ãšã¯ç°ãªãèè
ç¬èªã®èгç¹ããã®äž»åŒµãå«ãŸããããšããç¹åŸŽããããŸãããã®äž»åŒµãé©åã«ååŒãã€ã€ïŒããæå³ã§ïŒæ¹å€çã«èªã¿é²ããæ
åºŠãæ±ããããããããã茪èªäŒã«ãªã£ããšæããŸãã ãŸããåºæ¬çã«ã¯åèããéžæè¢ããªãæ¬ãªã®ã§ãæŽæžãèªãç·Žç¿ã«ããªããŸãããè±èªèªäœã¯å¹³æã§ãæžè©èšäºãªã©ãWebäžã«å€ãååšããããšããã調ã¹ãªãããªãé£ããæ¬ã§ã¯ãããŸããããšã¯ãããå¹³æãªæã§ãã£ãŠãæå³ãåãéããŠããŸãã±ãŒã¹ãããã®ã§ããã®ããããæ³šæããŠèªãã§ããã®ã¯å€ãã®åå è
ã«ãšã£ãŠå匷ã«ãªããŸããã ãWebããã³ããšã³ã ãã€ããã©ãŒãã³ã¹ ãã¥ãŒãã³ã°ã茪èªäŒ ã¿ã€ãã«ããåããå°è±¡ãšã¯ç°ãªããå®éã¯ãã©ãŠã¶ã®ä»çµã¿ã«ã€ããŠè©³ããæžãããŠããæžç±ãèªãäŒã§ãã gihyo.jp ããã³ããšã³ããããããåŠç¿ããŠããããã¡ã³ããŒã«ããŸããã©ãŠã¶ã®ä»çµã¿ãç¥ã£ãŠãããã®ãããã®ã§ã¯ãšããããšã§éå¬ãããŸããã ãã®å匷äŒã«ã€ããŠã¯ãå¥ã®èšäºã§è©³ãã玹ä»ããäºå®ã§ãã ããã³ããšã³ãã¯ãŒã¯ã·ã§ãã: Reactãã³ãºãªã³ 瀟å
ãšã³ãžãã¢ã®ããã³ããšã³ãã«é¢ããæè¡åãåºäžãããããã®ãããã³ããšã³ãæè¡ååäžå§å¡äŒãã¡ã³ããŒãäž»å¬ããŠããã®ãããã³ããšã³ãã¯ãŒã¯ã·ã§ããã§ãã第1åã®ã¯ãŒã¯ã·ã§ããã§ã¯ãããã³ããšã³ãã®çµéšãèã人ãããããŸã§Reactãè§Šã£ãããšããªã人åãã«ãReactã§ç°¡åãªToDoã¢ããªãäœããã³ãºãªã³ã宿œããŸããã ãã³ãºãªã³ã§ã¯ https://github.com/tak-onda/frontend-workshop-react/ ã®ãªããžããªãå©çšããŸããã 茪èªäŒã¯åºæ¬çã«ãªã³ã©ã€ã³ã§å®æœããŠããŸããããã®ãã³ãºãªã³ã¯ç€Ÿå
ã®ã©ãŠã³ãžãšåŒã°ããã¹ããŒã¹ã䜿ã£ãŠãã¿ããªã§ã¯ã€ã¯ã€åãçµãããã«ãªãã©ã€ã³éå¬ããŸããã ãµã ããµãŒããµã€ãããã©ãããã©ãŒã äžå¿ã«éçºããŠãããšã³ãžãã¢ãæè¿ã®ããã³ããšã³ãã«ã€ããŠãã£ããã¢ããã§ããã€ãã³ãã«ãªããŸããã 2024幎ã®ä»åŸã®ååŒ·äŒ 2024幎5æããã¯æç¥šå€æ°ã§éžã°ããããªã£ãšãïŒé¢æ°åããã°ã©ãã³ã°ãã®èŒªèªäŒãéå¬ããŠããŸãã www.shoeisha.co.jp è¿å¹Žã¯ã颿°åããã°ã©ãã³ã°ã®ãšãã»ã³ã¹ãå«ãã èšèªãã©ã€ãã©ãªãåºã䜿ãããããã«ãªã£ãŠããŸããæ¢åã®ã³ãŒãããŒã¹ã颿°åã§ã¯ãªããšããŠããå
ç¢ãªãœãããŠã§ã¢ãäœãããã«ã¯ã颿°åã®èãã«èŠªããããšã§åŸããããã®ãå€ãã ãããšèããŠããŸãã ããªã£ãšãïŒé¢æ°åããã°ã©ãã³ã°ããèªã¿çµããããæ¬¡ã¯ãDomain Modeling Made Functionalããèªãã®ãããã®ã§ã¯ãªãããšãã話ããã§ã«åºãŠããŸãã pragprog.com ãŸããããã³ããšã³ãã¯ãŒã¯ã·ã§ããã®ç¬¬2匟ãšããŠãReactã§äœã£ãToDoã¢ããªã«Jotaiã§ç¶æ
管çããVitestã§ãã¹ããçµã¿èŸŒãã¯ãŒã¯ã·ã§ãããéå¬äºå®ã§ãã äžäŒã§ã¯ä»åŸãç¶ç¶çã«å匷äŒãéå¬ããŠããäºå®ã§ãïŒ äžäŒã§ã¯ããšãã«è¯ããµãŒãã¹ãã€ãã£ãŠãã仲éãåéäžã§ãã hrmos.co ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããã®ã§ããæ°è»œã«ãå¿åãã ããã www.ikyu.co.jp
CTO å®€ã®æ©ç°ã§ãã ä»å㯠GitHub Copilot Enterprise ãè©äŸ¡ããŠã¿ãŠãçŸæç¹ã§ã¯ãŸã æ¡çšããªãããšã決ããããšããã話ãã玹ä»ããããšæããŸãã ãã£ãã ãšãããšã³ãžãã¢ã Slack ã§èªèº«ã® times ãã£ãã«ã«æéšå ããã® GitHub Copilot Enterprise ã®ã¹ã¹ã¡ ãšããèšäºãæçš¿ããããšãçºç«¯ã§ãããç¹ã«ææ³ã¯ãªã URL ã« ð ã ããæ·»ããããŠããã®ã§ãåŸã§èŠããããã®ã¡ã¢ã ã£ããã ãšæããŸãã ãããèŠãããå¥ã®ãšã³ãžãã¢ãæè¡éè«ãã£ãã«ã«ãã®æçš¿ãå
±æããŠãããã¯åãããšè©±é¡ãåãããšãããCTO ã®ãè©äŸ¡ããŠã¿ãïŒãã®äžèšã§ãæå¿ãéã£ãŠè©äŸ¡ãããžã§ã¯ããå§ãŸããŸããã éè«ãã£ãã«ã§ãã£ãããšãªãæçš¿ãå
±æãããŠããã30åè¶³ããã®åºæ¥äºã§ããïŒç¬ïŒã ãã®è©±é¡ãåºãã®ã¯éææ¥ã§ããããé±æãæ©ã
ã«çšè°ãçµããç«ææ¥ã®æã«ã¢ããã°ã¬ãŒããå®äºããŸããã GitHub Team ãã GitHub Enterprise Cloud ã«ãCopilot Business ãã Copilot Enterprise ãžã®å€æŽã§ãã ããããŠè©äŸ¡ãããžã§ã¯ããåãã¯ãããŸããã è©äŸ¡ã«ããã£ãŠ Copilot Enterprise ãæå¹ã«ãªã£ãããšã確èªããããšãéã£ãæå¿ãã©ãè©äŸ¡ãé²ãããã話ãã¯ããããšããã§ãCTO ããã¬ãã¥ãŒããŠã¡ãããšæææ±ºå®ããããããšã®è£è¶³ãããããŸããã ãã®èŠæšã¯æ¬¡ã®äºç¹ã§ãã äŒç€Ÿã§æ¯æãã©ã€ã»ã³ã¹ç®¡çã¯ãã»ãšãã©äœ¿ã£ãŠãªãã®ã«ãšããããããã£ãŠãããªã©ããªããªãã«ãªããã¡ è©äŸ¡ã¯å®æ§çã§ãããã€ã³ãã¯ãã®ãããŠãŒã¹ã±ãŒã¹ãã©ãã ãèŠã€ããããéèŠ å人çã«ã¯ãã³ã¹ãã«èŠåã䟡å€ãã©ãå®éåããããšãã芳ç¹ã§ã°ããèããŠããã®ã§ãåŸè
ã®ææã«ã¯æ°é®®ãªèŠç¹ãããããããã«æããŸãã å®éåãåæã«ãããšè©äŸ¡ããã»ã¹ãéããåºå®çã«ãªã£ãŠããŸããæ§ã
ãªèŠç¹ããã®çŽ æ©ãæææ±ºå®ã«ã¯ç¹ãããªãã£ãããšã§ãããã çµæããããžã§ã¯ãã«éãŸã£ãã¡ã³ããŒãåèªã®èå³ã®ãã芳ç¹ã§åæ
ããŠãã©ããããŠãŒã¹ã±ãŒã¹ãå®çŸã§ãããšéçºäœéšã«ã€ã³ãã¯ããäžããããããã§è©äŸ¡ããããšã«ãªããŸããã ããã€ãæç²ãããšã ããã¥ã¡ã³ããéçŽããå Žãšã㊠knowledge bases 㯠Confluence ããã®ç§»è¡ã«å€ãããïŒ ã¬ã¬ã·ãŒã³ãŒãã®çè§£ã«ãããèªç¥è² è·ãã©ãããã軜æžããŠããããïŒ PR ãµããªãŒã®èªåçæã§éçºããã»ã¹ãã©ã®çšåºŠæ¹åããããïŒ ãšãã£ã芳ç¹ã«ãªããŸãã è©äŸ¡ åé ã§ãäŒãããŠããéãã2024幎4æçŸåšãäžäŒã®ã³ãŒãããŒã¹ãããã¥ã¡ã³ããåŠç¿ãããéãã«ãããŠã¯ãGitHub Copilot Enterprise ã¯ææå°æ©ãšããçµè«ã«ãªããŸããã ããã§ã¯è©äŸ¡ããŠããäžã§ãå
·äœçã«ã©ããªããšãããã£ãã®ããã玹ä»ããããšæããŸãã knowledge bases ã¯äœ¿ãããïŒ ããšããšãã©ãããã©ãŒã ãšã³ãžãã¢ãªã³ã°ã®æèã§ãéçºè
ã®èªç¥è² è·ã軜æžãããããã«ãããã¥ã¡ã³ããã©ãããŠããããšããè°è«ãå°ãåãããããŸããã knowledge bases ã¯2024幎4æçŸåš GitHub ãªããžããªå
ã® markdown ãã¡ã€ã«ã®ã¿ãåŠç¿ããŸãã Copilot Enterprise ãå°å
¥ããããšã«ãªããšãããã¥ã¡ã³ããä»åŸã¯ GitHub ãªããžããªã§ç®¡çããŠããå¿
èŠããããŸãã äžäŒã§ã¯çŸåšãå€ãã®ããŒã ã Confluence ã䜿ã£ãŠããã¥ã¡ã³ãã管çããŠããŸãã éãšã³ãžãã¢ã«ãšã£ãŠãæ±ãããããéå±€çã«æ
å ±ãæŽçããããšãã§ããäžççã«åºãå©çšãããŠãããã¬ããžãããžã¡ã³ããµãŒãã¹ã§ãã ç¹ã«ããã¥ã¡ã³ããåæç·šéãããããªã¢ã«ã¿ã€ã ã§ã€ã³ã©ã€ã³ã³ã¡ã³ããå
¥ããæ©èœã¯ãäžäŒã§ãããŒãã£ã³ã°ã®å Žã§æŽ»çšãããŠããŸãã ãããã£ãçŸåšäº«åããŠãã Confluence ã®è¯ãç¹ã倱ã£ãŠã§ãããªãäœããã䟡å€ã Copilot Enterprise ããããããŠãããã®ããçŠç¹ã§ããã äžè¿°ã®éããknowledge bases ã«ã€ã³ããã¯ã¹ãããããŒã¿ã¯ markdown ãã¡ã€ã«ã§æ§æããã GitHub ãªããžããªãšããŠçšæããå¿
èŠããããŸããããã§ãã¹ããŒã¹ãäžæ¬ã㊠markdown ã«åºåãã Confluence ãã©ã°ã€ã³ãå°å
¥ããããã䜿ã£ãŠ knowledge bases çšã®ãªããžããªãããã€ãäœæããŸããã ãã®äžã§ãæ§ã
ãªè³ªåã§è©äŸ¡ããŠã¿ãŸããããæŠå¿µã®åŠç¿ããŸã ãŸã éå®çã§ããããã«æããããŸããã ã²ãšã€å
·äœäŸã玹ä»ããããšæããŸãã äžäŒã¬ã¹ãã©ã³ã¯çŸåšïŒããŒãžã§ã³ååšããŸãã ãªãªãžãã«ã®äžäŒã¬ã¹ãã©ã³ã¯ restaurant ãšãããªããžããªã§äœãããŸããã ãªãã¥ãŒã¢ã«æã« restaurant2 ãäœããããã以åŸããªãªãžãã«ã¯ restaurant1 ãç¥ã㊠res1 ãšåŒã°ããããã«ãªããŸããã ä»å knowledge bases ã«åã蟌ãã ããã¥ã¡ã³ãã«ã restaurant1 ã res1 ãšããèšè¿°ã倿°ãããŸãã ã«ãé¢ããããres1 ãªã©ã®ããŒã¯ãŒããå«ããæ€çŽ¢ã§ã¯ããªãªãžãã«ã®ãªããžããªã§ãã restaurant ã«é¢ããåçãè¿ãããããšã¯ã»ãŒãããŸããã§ããã æ°åã®æç¡ã圱é¿ããŠããã®ããrestaurant2 ã«é¢ããæ
å ±ã°ãããèŠçŽãããŠè¿ã£ãŠããããšãå€ãã£ãã§ãã ä»ã«ã LLM ã§ããèšãããŠããããã«ãknowledge bases ã«ãããŠããæ¥æ¬èªã§åŠç¿ãããã«ãé¢ããããè±èªã§è³ªåããæ¹ãããåªããåçã«ãªãåŸåãèŠãããŸããã ã¬ã¬ã·ãŒã³ãŒãã®çè§£ã«ãããèªç¥è² è·ãã©ãããã軜æžããŠããããïŒ äžäŒã¯20幎以äžã®æŽå²ãæã€ãµãŒãã¹ã§ãã ç¶ç¶çã«ã¢ããã€ãŒãŒã·ã§ã³ãé²ããŠã¯ãããã®ã®ããŸã ãŸã ã¬ã¬ã·ãŒã³ãŒããæ®ã£ãŠããŸãã ãã®ãããªã¬ã¬ã·ãŒã³ãŒããèªãã§çè§£ããããšã¯ãçŸç¶ã®æ¯èããä»çµã¿ãããã«è³ã£ãçµç·¯ãææ¡ããããã«ãé¿ããŠéããªãäœæ¥ã§ãã ã¬ã¬ã·ãŒã³ãŒãäžã§ããããªãããšã GitHub Copilot Chat ãé©åã«èŠçŽããŠåçããŠããããšããã¡ãã¡è¡ã£ããæ¥ããããããšãªããçç®ãã¹ãã³ãŒãã«éäžããŠèªãããšãå¯èœã«ãªããŸãã ã²ããŠã¯éçºçç£æ§ã®åäžã«ãå¯äžããŠãããã®ã§ã¯ãªããããšæåŸ
ããŠããŸããã æ°ããå
¥ç€Ÿããéçºè
ãã¬ã¬ã·ãŒãªãªããžããªãèŠããšããã©ããèªãã°ãããã瀺ããŠãããã å¶æ¥ã¹ã¿ãããã«ã¹ã¿ããŒãµãŒãã¹ããåãåããããã£ããšããçŸç¶ãçµç·¯ã«ã€ããŠã®ãã³ãã€ã³ããªè³ªåã«çããããã ãªããžããªã®å
šäœæãã©ãã ããšããããã質åã«çããããã ãã£ãšèžã¿èŸŒãã§ãæ€çŽ¢ã«ãšã©ãŸããæ¹åçãªã©ç€ºåã«ãããæ
å ±ãæç€ºããŠãããã å
·äœçã«ã¯äžèšã®ãããªãŠãŒã¹ã±ãŒã¹ã§ãã ãã®ãããªã·ããªãªãè©äŸ¡ããããã«ãè©äŸ¡è
ãååã«çè§£ããŠãããããªå
容ã«ã€ããŠãé©åãªãŸãšããè¿ãããããšãããã¹ããè¡ããŸããã ãã®ãããã¯æ¥åã«æ·±ãé¢ãã£ãŠããå
容ãªã®ã§ãå
·äœäŸã玹ä»ããããšã¯é£ããã®ã§ãããããšãã°ã è€æ°ã®ãªããžããªã暪æããŠå
容ããŸãšããå¿
èŠãããã®ã§ããããªããžããªéã§ã³ãŒããã³ã¡ã³ãã®è³ªã«å·®ã倧ããããã質ã®é«ããªããžããªã«åçã®å
容ãåŒã£åŒµãããŠããŸã£ãŠããïŒããã«èŠããïŒ ç¡é¢ä¿ã®æ
å ±ãåçã«å«ãŸããªãããã«ãããã³ããã®æžãæ¹ããknowledge bases ã«ã€ã³ããã¯ã¹ãããæ
å ±ã工倫ããå¿
èŠããã XXX ã® API ãåŒã³ã ããŠãããšãããæ¢ããŠããšãã質åã§ãé¢ä¿ã®ãªããã¬ãŒã³ããŒã·ã§ã³å±€ã®ã³ãŒããè¿ããŠãããããªããžããªã®ã³ãŒããããŸãåŠç¿ããŠããããã«æããããªãã£ã ãšãã£ãæèŠããããæåŸ
ããçµæãåŸãã«ã¯ããŒãã«ãé«ããªãšããå°è±¡ã§ããã ãã¡ãããåœåãã³ã¡ã³ããå«ããŠã¬ã¬ã·ãŒã³ãŒãèªäœã®å質ã«åé¡ãããããšã¯åŠå®ã§ããŸããã ã§ããããã®ãããªã³ãŒãããŒã¹ã§ãã£ãŠãé©åã«æ
å ±ãæœåºã§ããªããã°ãã¬ã¬ã·ãŒã³ãŒããæ±ãäžã§ã®å©ãã«ã¯ãªããªãã®ã宿
ãªã®ã§ãã PR ã¡ãã»ãŒãžèªåçæ Pull Requests ã®ã¡ãã»ãŒãžãèªåã§çæããæ©èœã¯çŸç¶è±èªãããµããŒããããŠããŸããã ãœãããŠã§ã¢ãšã³ãžãã¢ãšããŠè±èªããã¥ã¡ã³ãã«è§Šããæ©äŒã¯å€ããšãã£ãŠãã瀟å
ã³ãã¥ãã±ãŒã·ã§ã³ã¯ãã¡ããã®ããšæ¥æ¬èªã§ãã 人ã«èªãã§ãããããã® PR ã¡ãã»ãŒãžãæ¯èªã§ãªããã°ãåœç¶ããã®å¹çã¯èããäžãã£ãŠããŸããŸãã ãã³ããŒãã«ãªæ
å ±ãåŸãããªãæç« ã«ããã³ãã¥ãã±ãŒã·ã§ã³ã«ãããŠãéèŠãšãªã现ããªãã¥ã¢ã³ã¹ãäŒããããšãé£ãããªããŸãã ãŸããè±èªã§ããããšãå·®ãåŒãããšããŠããçæãããå
容ãçŸç¶ã§ã¯ãããŸã§æçšãšã¯èšããŸããã§ããã ããšãã°ãã©ã®ãããªãã¡ã€ã«ã«ã©ã®ãããªå€æŽããããªã£ãããšãã what ã®æ
å ±ã¯ããŸãèŠçŽããŠãããŸãã ãããããã® PR ã®å€æŽãå¿
èŠãšãªã£ãèæ¯ã倿Žã®æå³ãšãã£ã why ã®æ
å ±ã¯æåŸ
ããã»ã©ã«ã¯çã蟌ãŸããŸããã ã¬ãã¥ãŒã«ããã£ãŠ what ã¯å·®åãèŠãã°ããããŸãã ã§ããããã®å€æŽãé©åãã©ããã倿ããããã«æ¬²ããæ
å ±ã¯ why ãªã®ã§ãã ãã¡ãã why ãã³ãŒãã®ã¿ããèªã¿åãã®ã¯äººéã§ãé£ããã®ã§ãã³ã¡ã³ãã®åœ¢ã§è£è¶³ããå¿
èŠããããŸãã ããããã³ã¡ã³ããæžãããšããŠããã³ãŒãã®å€æŽç®æã«é¢ããéå®çãªå
容ãšãªã£ãŠããŸããã¡ã§ãããããã®èæ¯ãç®çãç¶²çŸ
ããã®ã¯çŸå®çã«é£ãããšããããããŸãã çµæãPR ã®èª¬æãšããŠæåŸ
ããã»ã©ã®å
容ã«ã¯ãªããŸããã§ããã å°æ¥çã«ã¯ Issue ã git ã®å±¥æŽãå©çšããŠãèæ¯æ
å ±ãè£ã£ãŠãããããã«ãªãããšãæåŸ
ããŠããŸãã ç·ã㊠PR ã¡ãã»ãŒãžèªåçæã¯æ©èœèªäœãçºå±éäžã§ãããçŸæç¹ã§å°å
¥ãããšããŠããããŸã§å€§ããªæ©æµãåããããããã§ã¯ãªãããã ãšããçµè«ã«è³ã£ãŠããŸãã åŠç¿ã®å¯Ÿè±¡ãéå®ç ä»ã«ãè©äŸ¡ã®éçšã§ä»¥äžã®ãããªå£°ãæãããŸããã DB å®çŸ©æžãéãã®ãæéãªã®ã§èããã䟿å©ã ãšæã£ãããExcel ãã¡ã€ã«ãèªã¿åãããšã¯ã§ããªãã£ãã åé¿çãšã㊠Excel ã® DB å®çŸ©ãã¡ã€ã«ãã markdown ã«å€æã㊠knowledge bases ãªããžããªã«ç»é²ããŠã¿ãŸããã èªåçæããã markdown ãšããå¶éä»ãã§ã¯ãããã®ã®ãããŒãã«éã®é¢ä¿ãåŠç¿ã§ããŠããªãããã«æããŸãã ããšãã°ãããæ©èœã«é¢é£ããããŒãã«å®çŸ©ã®å
šäœåã説æããŠããšãã£ã質åã«ã¯é©åãªåçãåŸãããŸããã§ããã ADRã®ãªããžããªãããã®ã§ããããã€ã³ããã¯ã¹ããŠä»æ§ãèããã䟿å©ã ãšããã£ãããissueã¯å¯Ÿè±¡å€ã ã£ãã®ã§ããŸããããããã GitHub ã«èããããæ
å ±ã¯ git ãªããžããªä»¥å€ã«ã Issues ã Pull Requests, Wiki ãååšããŸãã LLM ã«ãšã£ãŠããã£ãšãåŠç¿ãããã察象ã§ããããã¹ãæ
å ±ã®äžãéå»ã®çµç·¯ã远ãäžã§ãéèŠãªæ
å ±ãå«ãŸããŠããŸãã ã«ãé¢ããããCopilot ã®åŠç¿å¯Ÿè±¡å€ã§ããããããããŸã§èç©ããŠããæ
å ±ã«ããšã¥ãç¥èŠãæœåºããããšã¯ã§ããŸããã§ããã è¿ãå°æ¥ã®å°å
¥ã«åã㊠äžè¿°ããéããæ®å¿µãªãããçŸæç¹ã§ã¯ããã«å¹æãåŸããããããªãŠãŒã¹ã±ãŒã¹ã¯èŠã€ãããŸããã§ããã ã§ãããæ¥é²ææ©ãæåéãäœçŸããŠãã LLM ã®çºå±ãèŠãéã GitHub Copilot Enterprise ãå°å
¥ããæªæ¥ã¯è¿ããšã¯èããŠããŸãã ãããã£ãŠãããå°å
¥ãããšãªã£ããšããããã«æå¹æŽ»çšã§ããããæºåã¯é²ããŠããã®ãããããã§ãã ä»åã¯æ¡çšãèŠéã£ããã®ã®ãè©äŸ¡å
容ãèžãŸããŠã³ãŒããšããã¥ã¡ã³ãã®äºã€ã®èгç¹ã§ãã©ããã£ãæºåãããŠããã¹ããã®èªèãå
±æããŠè©äŸ¡ãããžã§ã¯ããçµäºããŸããã ãšãã£ãŠãé 匵ã£ãŠæºåããé¡ã®æŽ»åã§ã¯ãªããé ã®çé
ã«ãããŠãããããšããçšåºŠã®å¯Ÿçã§ãã æåŸã«ãã®å¯Ÿçãã玹ä»ããŠæ¬èšäºãçµããããšæããŸãã ã³ãŒãã«æå³ãäŒããã³ã¡ã³ããæ®ã èªåçæããã Pull Requests ã®ã¡ãã»ãŒãžã¯ä¿®æ£ããå
容ã®èŠçŽãšãã what ã§ãã£ãŠããã®ä¿®æ£ãã©ãããæå³ã§ãªãããããã¬ãã¥ãŒã«ããã£ãŠç¹ã«éèŠãª why ã¯å«ãŸããŠããŸããã ãã¡ãããããã¯ã³ãŒãã«æå³ãçç±ã«ãããæ
å ±ããªãããã§ãã£ãŠãCopilot ã why ã説æããã¡ãã»ãŒãžãçæã§ããªãã®ãåœç¶ã§ãã GitHub ã® Blog ã§ããCopilot ã䜿ãäžã§ã®ãã¹ããã©ã¯ãã£ã¹ãšã㊠LLM ã« context ãæäŸããããšã®éèŠæ§ã説ããŠããèšäº ãå
¬éãããŠããŸãã ãšããããšã§ãããåœããåã®çµè«ã§ã¯ãããŸãããã³ãŒãèªäœã« why ã why not ããããã³ã¡ã³ãããã£ããæ®ãããã«æèããŠãããããšãªããŸããã å¥ãããåææã«è¡ã£ãŠãã A Philosophy of Software Design ã®èŒªèªäŒã§ã³ã¡ã³ãã®éèŠæ§ã«ã€ããŠã®è°è«ãããŠããã®ãåãå¥ããŸããã ã³ãŒãã«æå³ãäŒããã³ã¡ã³ããèšè¿°ããããšãããã©ã¯ãã£ã¹ãåããŒã ã«æµžéããŠããŠãããä»åŸ LLM ã«äžãããã context ãå¢ããŠãããšèŠèŸŒãã§ããŸãã ãŸãã坿¬¡çãªå¹æãšããŠããããŒæ
å ±ã«ãªã£ãŠããŸããã¡ãª PR ãšç°ãªããã¹ããã¯æ
å ±ãšèšããã³ãŒãäžã®ã³ã¡ã³ãã¯èªç¥è² è·ã軜æžããŠãããŠããŸãã æ®æ®µããè§Šããã³ãŒãã ãã§æå³ãäŒããç¶æ
ãšæ¯ã¹ããšãããªã«ãããåé¡ãèµ·ããŠãã git ã®å±¥æŽãé¢é£ãã PR ã远ãäœæ¥ã¯ãäžèŠãªèª²é¡å€åšæ§è² è·ã§ãããããŸããã ãªããåæ®µã§ PR ã¡ãã»ãŒãžçæã®è©äŸ¡ã®äžã§ã³ã¡ã³ãã远å ããŠã why ãå«ãã å
容ã¯çæãããªãã£ãããšããè©äŸ¡çµæãã玹ä»ããŸããã ããã¯ããããŸã§çŸæç¹ã§æªæçãªã ãã§ãã£ãŠãå°æ¥ã«åããŠã®åžç³ãšããŠã¯ãã³ã¡ã³ããå
å®ãããŠããããšã«ã¯æå³ããããšæããŠããŸãã ä»åŸã¯ã³ã¡ã³ãã«å ããŠãã©ãããã° LLM ãã¬ã³ããªãŒãªã³ãŒãã«ãªããããšãã芳ç¹ã§ã®æ°ããã³ãŒãã®æžãæ¹ã確ç«ããŠããã§ããããåŒãç¶ãååã远ããªãããæ°ããçš®é¡ã®ã³ãŒãã®å質åäžã«åªããŠãããããšæããŸãã ãã ããã®ãããªæ°ãããã©ã¯ãã£ã¹ã浞éããã®ã«ã¯æéãããããŸãã Copilot ã®ä»åŸã®é²åã§ããã©ã³ããšçŽä»ãã Issue ã PR ã«ä»£è¡šããããã³ãŒãã«é¢ããæ¢åã® context ãããŸãå©çšããŠãããã®ã§ã¯ããšå人çã«ã¯æåŸ
ããŠããŸãã ããã¥ã¡ã³ãã®æºåã¯ãããŠäœãããªã è¿ãå°æ¥ã®å°å
¥ã«åããŠãä»ããããã¥ã¡ã³ãã GitHub ã«ç§»è¡ããŠããããšãæ€èšããŸããã ããããçŸæç¹ã§ã¯ããããŠäœãããªãããšãéžæããŸããã GitHub Copilot Enterprise ããã¬ããžãããžã¡ã³ãã®åéã«ãããŠããLLM æä»£ã®ã¹ã¿ã³ããŒãã«ãªããã©ããã¯ãŸã 倿ããããªãã£ãããã§ãã ãã¡ãããã³ãŒããã®ãã®ã«å ã㊠Issue ã PR ã®æ
å ±ãæã£ãŠãããšãã匷ã¿ãããã®ã§ãéåžžã«æåãªåè£ã§ããããšã«ã¯çãäœå°ã¯ãªãã§ãããã ã§ãããä»ã¯ã©ã®äŒç€Ÿã LLM ãèªç€Ÿè£œåã«ã©ãçµã¿èŸŒããæåªå
ã§è©Šè¡é¯èª€ããŠããã®ã¯ééããªããã©ã®è£œåãæçµçã«åè
ãšãªããã¯æªç¥æ°ã§ãã Google ãåŸçºã®æ€çŽ¢ãšã³ãžã³ã§ãã£ãããšãå¿ããŠã¯ãªããŸããã äžäŒã§ã¯ãåè¿°ããããã«å€ãã®ããŒã ã§ããã¥ã¡ã³ããŒã·ã§ã³ã« Confluence ãå©çšããŠããŸãã Atlassian ã§ã Atlassian Intelligence ãšãã AI æ¡åŒµæ©èœãæäŸããã¯ãããŠããŸãã Confluence ã«ã¯ AI ãå©çšãã èŠçŽ ã æ€çŽ¢ ã 瀟å
çšèªããããžã§ã¯ãçšèªã®èªåå®çŸ© ãªã©ã®é
åçãªæ©èœãè¿æ¥äžã«æäŸãããããã§ãã GitHub ããŸããknowledge bases ãåã«ãªããžããªäžã®ææžãåŠç¿ããã ãã«çãããCopilot ã®äžæ žãšãªãæ©èœãšããŠçºå±ãããæœçãé²ããŠããã®ã§ã¯ãªãããšäºæ³ããŠããŸãã ããšãã° Issues ã Discussions, Pull Requests ãªã© GitHub ã«èããããä»ã®æ
å ±ãšã®çµ±åã¯å®¹æã«æ³åã§ãããšããã§ãã å ããŠãå¿ããŠã¯ãããªã芳ç¹ãšããŠããã¬ããžãããžã¡ã³ããµãŒãã¹ã«ãšã£ãŠãæ¢åæ©èœã®éèŠæ§ã«ã¯å€åããªãããšã«ã¯è§ŠããŠãããããšæããŸãã LLM ã«ããæ°ããæ€çŽ¢äœéšã¯éåžžã«åŒ·åã§é
åçãªãã£ãŒãã£ãŒã§ããããšã¯ç¢ºãã§ãã ããããæ
å ±ã®æ§é åãããŒã ã§ã®åæç·šéã®ãããããä»ãµãŒãã¹ãšã®é£æºãšãã£ããããšããšã®äŸ¡å€ãèŠå€±ãããšããªãããçæããŠããã€ããã§ãã å°æ¥ãä»ã®ãã¬ããžãããžã¡ã³ããµãŒãã¹ãæ¡çšããããšã«ãªã£ããšããŠããknowledge bases ãªããžããªã®æºåã§ã玹ä»ããããã«ããŒã¿ç§»è¡ã¯ãã»ã©é£ããã¯ãããŸãããå ããŠããã®åéã§é«ãã·ã§ã¢ãæã€ Confluence ããã®ç§»è¡æ©èœãæäŸãããããšãæåŸ
ã§ããŸãã åŒãç¶ãååãæ³šèŠããªããããããããŠå€æããããšã«ãªãããã§ãã ãããã« äžäŒã§ã¯ããããã䟡å€ãçŽ æ©ããŠãŒã¶ãŒã«æäŸã§ãããããéçºçç£æ§ã®åäžã«ããã£ã¬ã³ãžããŠããã ãã仲éãåéããŠããŸãã èå³ãæã£ãŠããã ãããããã²äžäŒã® æ¡çšãµã€ã ãã芧ãã ããã
ããã«ã¡ã¯ã äžäŒ.comã¹ã (以äžããã¹ãã)ã®éçºãæ
åœããŠããshibataiãšç³ããŸãð ä»åã¯ã¹ãã®ããŒã¿ããŒã¹ã®åšåº«ã®æã¡æ¹ã§è©Šè¡é¯èª€ãã話ããããŠããã ããŸãã èæ¯ 2024-03-29远èš: äžäŒ.comã¹ãã«ãããåšåº«ã®ç¹åŸŽã«ã€ã㊠äžäŒ.comã¹ããæ±ããåšåº«ãã¯ããããæ¥ä»ã®ç¹å®ã®æéã«å¯Ÿããç©ºãæ ãã§ãã以éã®èª¬æã§ã¯ãã¹ãæœèšããšãæ¥ä»ããšããŸãæéããšã«å¢ããŠãããåšåº«ããããã«å¹çããæ±ããã«ã€ããŠèª¬æããŠããŸãã 詳现ã«ã€ããŠã¯æ¬¡ã®ã¹ã¬ãããåç
§ããŠãã ããïŒ https://t.co/Y0SPmDE4yZ ãã®èšäºã®ã³ã¡ã³ãã¿ãŠããšãå°ãæã
ã®ã·ã¹ãã ã®èŠä»¶ãäŒãã£ãŠãªããšãããããã®èª¬æãèšäºã«äžè¶³ããŠããããã«æã£ããã®ã§ä»¥äžãã®è£è¶³ — naoya (@naoya_ito) March 29, 2024 çŸåšã®å®è£
ã¹ãã¯äºçŽãåãä»ããããã«åšåº«ã®ç®¡çãããŠãŸãð ããŒã¿ããŒã¹ã§åšåº«ããŒãã«ãæã£ãŠããŸããããã¿ãªç®¡çãããŠããŸãã ç¹å®ã®æœèšã»æ¥ã»åšåº«ã®æ°ã00:00ãt0000ãšã¿ãªããŠ15åããã«t0000ã»t0015..t2345ãŸã§æ ŒçŽããŠãŸãð€ åšåº«ããŒãã«ã®ã€ã¡ãŒãžã¯ä»¥äžã§ãã shop_id inventory_id inventory_date t0000 t0015 (çç¥) t1300 t1315 (çç¥) t2345 1 1 2024-01-01 0 0 ... 1 0 ... 0 1 2 2024-01-01 0 0 ... 0 1 ... 0 ãã®èšèšã¯åšåº«ã®èª¿æ»æã«åšåº«æ°ã確èªããããã®ã§ãããã¬ã³ãŒãæ¿å
¥æã«txxxã®åœ¢ã«ããããæç»æã«txxxãtimeã«å€æããå¿
èŠããã£ãããšãå®éã«åšåº«ãå«ããæç»ãè¡ãåŠçã«é£ããã§ããð ããŒã å
ã§çžè«ããçµæãæ€çŽ¢ã§æç»ããéã¯æéã®é
å(äŸ: ['10:00', '11:15', '12:45'] )ãå§çž®ãããããã䜿ãããã«ããŸããã shop_id inventory_id inventory_date timeBits1 timeBits2 1 1 2024-01-01 1 0 1 2 2024-01-01 64 2 å
·äœçãªå®è£
ã¯åŸè¿°ããŸãããã«ã©ã ããããã§ç®¡çããå Žåã®ã¡ãªããã»ãã¡ãªããã¯ä»¥äžã§ãã ãã¡ãªããã ããã¹ãã³ããšã®ã«ã©ã ã倧éã«æããã«ãããã®è¡šçŸã§å§çž®ã§ããã®ã§ããŒã¿å®¹éãæããããšãã§ãã åçã«ã«ã©ã ãæ±ºããããã«äžè¬çã«ãªãŒããŒãããã®å€§ãããšèšããããªãã¬ã¯ã·ã§ã³ã䜿ããªããŠããããããããå€ãçšãããšæ¯èŒçé«éã«æ€çŽ¢å¯èœ æœèšåäœããã©ã³åäœãªã©ã§åšåº«æç¡ããµãã©ã€ãºãããæãANDãORæ€çŽ¢ã§æè»ãªæ¡ä»¶æå®ãå¯èœ ããã¡ãªããã ããŒãã«ãSELECTã§æ€çŽ¢ããã ãã§ã¯ç¶æ
ãããããªã(å€ã倿ããªããã°ãªããªã)ããããããã°ãã¯ãšãªæ§ç¯ã®é£æåºŠãäžãã ãããå€ãšæéã®é
åã®éãçžäºå€æããã©ã€ãã©ãªã®çšæãå¿
èŠ ãããå€ã¯BIGINTåã§ãæ¡æº¢ãããå Žåãããã®ã§ãBit1ãšBit2ãšãã£ãããã«ããéšåã§åå²ããæ€èšãå¿
èŠ ä»¥äžããã¯ãããæŒç®ã®ä»çµã¿ãšãå®éã«ã©ãããã€ã¡ãŒãžã§æ€çŽ¢ãããã説æããŸãð ãããæŒç®ãšã¯ïŒ ããŒã¿ããããå(0 or 1ã§æ§æããã)ãšã¿ãªããŠæŒç®ããŸãã ã¡ãªããã¯ãå€ã«å¯ŸããŠANDãORæ€çŽ¢ãã§ããããšã§ãã äŸãã°1/2/3ããããåã§è¡šããå Žåã 00000001 / 00000010 / 00000011 ã§ãã 1ãš2ã§ãããORæŒç®ãè¡ããšã 00000001 OR 00000010 ------------- 00000011 åãããã瞊ã«èŠãŠãå°ãªããšãäžæ¹ã«1ãããå Žåãçµæã®ãã®ãããäœçœ®ã¯1ã«ãªãã®ã§ãæŒç®çµæã¯10鲿°ã®3ã§ãã å®éã«SQLServerã§æ€çŽ¢ããéã«ANDæŒç®ã䜿ãäŸãåºããšã CREATE TABLE Example ( Bits INT ); INSERT INTO Example(Bits) VALUES ( 3 ); SELECT * FROM Exampleã WHERE Bits & 1 = 1 ; // Bitsåã®å€ãš 1 ã®ãããANDã 1 ã«çããè¡ãéžæããã®ã§ããããã SELECT * FROM Exampleã WHERE Bits & 2 = 2 ; // Bitsåã®å€ãš 2 ã®ãããANDã 2 ã«çããè¡ãéžæããã®ã§ããããã SELECT * FROM Exampleã WHERE Bits & 4 = 4 ; // 3 ïŒ 00000011 ïŒãš 4 ïŒ 00000100 ïŒã¯ããããã« 1 ãç«ã£ãŠããäœçœ®ãéãã®ã§ãããããªã Pythonã®ä»£è¡šçãªORMã§ããSQLAlchemyã䜿ãå Žåã¯ä»¥äžã®ããã«æžããŸãã query.filter(Example.Bits.op( "&" )(bits1) == bits1) å®è£
äŸ ãããæŒç®ã§åšåº«ç®¡çããã«ã¯ãããšãã°æ¬¡ã®ããã«å®è£
ããŸãã INSERT INTO Example(Bits) VALUES (n); ã® nã«çžåœããå€ãåšåº«ãããæé垯ããããããžå€æããŠæ ŒçŽ æ€çŽ¢æã«æéã query.filter(Example.Bits.op("&")(bits1) == bits1) ãšããŠæ€çŽ¢ããååŸã§ããBitsã«ã©ã ãæé垯ã«å€æ ãªã®ã§ããã¡ãªããã§ããäŒãããŸãããšããããããå€ãšæéã®é
åã®éãçžäºå€æããã©ã€ãã©ãªã®çšæãå¿
èŠã§ãã ä»åã¯å
人éãå®è£
ããŠãããŠããã©ã€ãã©ãªã瀟å
ã«ãã£ããããããããã䜿ãããŠããã ããŸããã 倿ã®èãæ¹ äŸãã°00:00-23:45ã§15åã¹ãã³ãšãããšãã1æ¥ã¯96åºåãã§ãã 10:00 ~ 19:00ã«åšåº«ãååšãã ã衚çŸãããšä»¥äžã®ããã«ãªãã96bitsã§æéãæå¹ã§ããã°1ãç«ã€ãšèããããšãã§ããŸãðŒ èŠä»¶ã«ãã£ãŠã¯00:00ã§çµããã§ã¯ãªãã24æä»¥éã®è¡šçŸããããå Žåãããã®ã§ã1æ¥ã®åºåãæ°ãã¹ãã³ãã©ããããã¯ãããžã§ã¯ãã®å®çŸ©ã«ãã£ãŠæ±ºããŠäžããã |0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | || | | | | | | | | | | | | | | | | | | | | | | | | <000000000000000000000000000000000000000011111111111111111111111111111111111100000000000000000000> 1ã«é¢ããŠã96bits(12bytes)ã®ãŸãŸã§ã¯ãã€ããªãŒããŒã®éœåäžæ±ãã¥ããã®ã§16bytesã«å€æãããšã b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xf0\x00\x00' ã§ãå
é ~8bytesãŸã§ãš9~16bytesãŸã§ã®å€ãååŸã§ããŸãããããbits1ãšbits2ã«ã©ã ãšããŠæ ŒçŽããŸãã 倿ã®äžéšãPythonã§ã®å®è£
ããŠã¿ããšä»¥äžã§ãã å®éã®ç€Ÿå
ã§ã¯è€æ°ã®ãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ã§ããããã«ãããè€éãªããšãããŠãŸããã瀟å
ã®ãœãŒã¹ã³ãŒãããã®ãŸãŸèŒããããªãã®ã§ãµã³ãã«ã³ãŒãã®ã¿ã§ãð bits = '000000000000000000000000000000000000000011111111111111111111111111111111111100000000000000000000' bytes_array = int (bits, 2 ).to_bytes( 16 , byteorder= 'big' ) bits_int1 = int .from_bytes(bytes_array[ 0 : 8 ], byteorder= "big" , signed= True ) bits_int2 = int .from_bytes(bytes_array[ 8 : 16 ], byteorder= "big" , signed= True ) print (bits_int1) # 0 print (bits_int2) # 72057594036879360 2.ã«é¢ããŠãéã®åŠçãè¡ãã°è¯ããæ€çŽ¢ãããæéããããã«å€æããããŒã¿ããŒã¹ããæé垯ãANDæŒç®ã§ååŸãååŸã§ããbits1/bitsãbytesã«å€æãã€ãªããŠã96bitsã埩å
ããŸãã ããšã¯0ãš1ã®ç¶æ
ã«ãã£ãŠã00:00ãã15åããã«ç¹°ãè¿ãã§å€å®ããããšã§æé垯ã埩å
ã§ããŸãð¿ 倿ã®äžéšãPythonã§ã®å®è£
ããŠã¿ããšä»¥äžã§ãã bits_pair = ( 0 , 72057594036879360 ) bytes_int1 = bits_pair[ 0 ].to_bytes( 8 , byteorder= "big" , signed= True ) bytes_int2 = bits_pair[ 1 ].to_bytes( 8 , byteorder= "big" , signed= True ) reconstructed_bits = format ( int .from_bytes(bytes_int1 + bytes_int2, byteorder= "big" ), '096b' ) print (reconstructed_bits) # 000000000000000000000000000000000000000011111111111111111111111111111111111100000000000000000000ã埩å
ããã 以äžãçžäºå€æããã€ã¡ãŒãžã§ããããŸãã æåŸã« æéããããã§æã€å®è£
ã®ä»ã«ããã¥ãŒãã³ã°ãããããåäœã§ã®è©äŸ¡ã¯ã§ããŠããŸããããä»åã®åãçµã¿ãéããŠã¹ãã®æ€çŽ¢ç»é¢ã®æç»ã¯åŸæ¥ãã1/3~1/5çšåºŠæéççž®ããããšãã§ããŸããã ãã£ãŠããããã§ã®ç®¡çã¯ä»åã¹ãã®èª²é¡ã®è§£æ±ºææ®µãšããŠã¯ãšãŠãæå¹ã ã£ããšèããŸãã åè¿°ã®éããã¡ãªããããããŸããã課é¡ã®è§£æ±ºææ®µã®äžã€ãšããŠåèã«ãªãã°å¹žãã§ãïŒ äžäŒã§ã¯ããšãã«è©Šè¡é¯èª€ããªãããããµãŒãã¹ãäœã£ãŠããã仲éãåéããŠããŸãïŒ hrmos.co ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããŸãã®ã§ããã²ãæ°è»œã«ãé£çµ¡ãã ããïŒ www.ikyu.co.jp
äžäŒ.comã¬ã¹ãã©ã³ã®ãšã³ãžãã¢ã® kymmt ã§ãã 2023幎床ã®äžåæãäžäŒ.comã¬ã¹ãã©ã³ã®éçºããŒã ã§ã¯éçºããã»ã¹æ¹åã«åãçµã¿ãŸãããæ¹åã¯å°ããåäœã§åŸã
ã«é²ããããã¯ãã°ã®äœããããã«ã³ãã³ã®éçšæ¹æ³ãæ¹åããããšã§ããããŒå¹çã®åäžãéçºããŒã¹ã®ææ¡ãããŒã å
å€ããã®é²æã®èŠããåãã§ããããã«ãªããŸããã ãã®èšäºã§ã¯ããã®ãããªã€ã³ã¯ãªã¡ã³ã¿ã«ãªéçºããã»ã¹æ¹åã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã åŸæ¥ã®éçºããã»ã¹ äž»ã«2023幎床ååã®éçºããã»ã¹ã¯æ¬¡ã®ãããªåœ¢ã§ãã 1 ã ãããã¯ãã®ãªãªãŒã¹ã«å¿
èŠãªã¿ã¹ã¯ãé·ãããã¯ãã°ãšããŠååšããã²ãããã¿ã¹ã¯ãæ¶å ãã®ç¶æ³ã«èª²é¡ãæããåºåããå
¥ããããã«2é±éã®ã¹ããªã³ããå°å
¥ ãã®æç¹ã§ã¯ãã¹ããªã³ãã¯2é±éããšã«ç¶æ³ã確èªããããã®ãã®ã§ãç®æšã«å¯Ÿãããµããããããæ¬¡ã®ã¹ããªã³ãã®èšç»ãäœãããã®ãã®ãšããŠã¯æŽ»çšããŠããŸããã§ããã ãã®éçºããã»ã¹ã«èµ·å ããŠãããŒã ã¡ã³ããŒã¯æ¬¡ã®ãããªèª²é¡ãæããŠããŸããã ã©ã®æ©èœã«çŽã¥ãããäžèŠããŠãããã«ããæè¡çã¿ã¹ã¯ããããããšãææ§ãªé
ç®ãããã¯ãã°ã«ãã ã¿ã¹ã¯ã¯é²ãã§ããããã²ãšãŸãšãŸãã®æ©èœãã§ããã®ã«æéãããã éçºããŒã¹ãèŠéãã«ãããä»åŸã®äºå®ã«ã€ããŠããŒã å
å€ã«èª¬æè²¬ä»»ãæããã«ãã ã¹ããªã³ããå°å
¥ãããã®ã®ãã¹ããªã³ãçµäºæã®æ®é
ç®ãå®äºããªãã£ãçç±ãªã©ãéçºã®ããã«ããã¯ãæ·±æãã§ããŠããªã æ¹åã®æ¹é å
è¿°ãã課é¡ãåããŠãéçºããã»ã¹ãã§ããã ãæ©ãæ¹åããããšããæ©éãçãŸããŸãããããããã¹ã¯ã©ã ãªã©å€§ããã®æ¹æ³è«ãããŒã ã«å°å
¥ããã®ã¯ãããŸã§äŸããªããããçš®ã®çæ³çãªéçºããã»ã¹ã«ã¯è¿ã¥ããŸããã广ãåºããŸã§ã«æéããããããã§ããããŸããèè
(kymmt)ã¯å
¥ç€ŸçŽåŸã ã£ãã®ã§ãæè¡çãªãã£ããã¢ãããšäžŠè¡ããŠããã»ã¹æ¹åããµããŒãããããšããç¶æ³ã§ããã ããã§ãã¢ãžã£ã€ã«éçºã®ãã©ã¯ãã£ã¹ãã€ã³ã¯ãªã¡ã³ã¿ã«ã«å°å
¥ããŠããã»ã¹ãæ¹åããããšã«ããŸããã ããã§ããããã®ãã©ã¯ãã£ã¹ã®çãŸããçç±ãé¿ããã¹ãçœ ã¯çè§£ããããã§ã課é¡ã®è§£æ±ºã«å¿
èŠãªãã®ãéžæçã«å°å
¥ãããšããç¹ã«æ°ãé
ããŸãããæè¿åºãæ¬ã ãš ãã¢ãžã£ã€ã«ãã©ã¯ãã£ã¹ã¬ã€ãããã¯ã ã¯åèã«ãªããŸããã 2023幎床åŸåããã®éçºããã»ã¹ äžèšã®æ¹éã«åºã¥ããŠã2023幎床äžåæããã¯ãããŒã ã§æ¬¡ã®ãããªæ¹å掻åã«åãçµã¿ãŸããã 顧客䟡å€ã«çŽçµããéçºã¯ãŠãŒã¶ãŒã¹ããŒãªãŒãšããŠé
ç®ãæŽçãããã®äžã§æè¡çã¿ã¹ã¯ãåè§£ïŒæŽçãã ã«ã³ãã³äžã§ãŠãŒã¶ãŒã¹ããŒãªãŒãå·Šããå³ã«æµãããã«ããŠã顧客䟡å€ãã©ã®çšåºŠçã¿åºããŠããããããã«ããã¯ã¯ã©ãããèŠããåãã ãŠãŒã¶ãŒã¹ããŒãªãŒã«å¯ŸããèŠæš¡ã®èŠç©ãããšããã·ãã£ã®èšæž¬ãç¹°ãè¿ããéçºã®èŠéããç«ãŠãããããã«ãã ãããã®æŽ»åã¯ããå°èŠæš¡ãªãããžã§ã¯ãããå§ããŠã次ã«ãã1ã€ã®äžèŠæš¡ãªãããžã§ã¯ãã«æšªå±éããããšã§ãåŸã
ã«ããŒã å
šäœã«æŽ»åç¯å²ãåºããŸããã å°å
¥ã®æ§å å°èŠæš¡ã®éçºãããžã§ã¯ããžã®å°å
¥ ãã§ã«è¿°ã¹ããšããã2é±éããšã«æéãåºåããšããæ çµã¿ã ãå°å
¥ãããŠããŸãããä»åã¯ãããè¶³ãããã«ããŸãã¯å°ããèŠæš¡ã®éçºãããžã§ã¯ãïŒåŒ·ããŠãããªããšããã¯ïŒã«å¯ŸããŠãã©ã¯ãã£ã¹ãå°å
¥ããŠãããŸããã ãŸããäºåã«ãŠãŒã¶ãŒã¹ããŒãªãŒãšããŠéçºé
ç®ãæ¹ããŠæããã«ãã€ã€æŽçãçŽããŸããããããŠããããã«åªå
床ãã€ããŠããã¯ãã°äžã§äžŠã³æ¿ããŸããããããŸã§ãäŸã§ãããæ¬¡ã®ãããªã€ã¡ãŒãžã§ãã åå åªå
床 ãŠãŒã¶ãŒãé¢é£ããã¬ã¹ãã©ã³ã®äžèЧãé²èЧã§ãã é« ãŠãŒã¶ãŒã人æ°ã®ã¬ã¹ãã©ã³ã®äžèЧãé²èЧã§ãã äž ãŠãŒã¶ãŒãè¿é£ã®ã¹ãããã«åºã¥ãã¬ã¹ãã©ã³ã®äžèЧãé²èЧã§ãã äœ ïŒããã§ã¯äžäŒ.comã¬ã¹ãã©ã³ã®å©çšè
ã®ããšãããŠãŒã¶ãŒããšåŒãã§ããŸãïŒ ãã®ããã§ãé
ç®ã®èŠæš¡ãçžå¯ŸèŠç©ããããŸãããã¹ããŒãªãŒã«å¿
èŠãªæè¡çã¿ã¹ã¯ã«ã€ããŠèªèãåãããªãããããããã®é
ç®ã®çžå¯ŸçãªèŠæš¡ãæ¯èŒããŸããçŸåšã«è³ããŸã§ããã£ããããæ°åã«åºã¥ãã¹ããŒãªãŒãã€ã³ã(1, 2, 3, 5, 8)ã䜿ã£ãŠããŸããããã§ã¯ããããžã§ã¯ãã«æºãã3人ã»ã©ã§ãèŠæš¡ã®æèŠãæããŠèŠç©ãããããŸãããå€å
žã§ãã ãã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ããã ããããããŠåèã«ããŸããã ãããã®é
ç®ãå·Šããå³ã«ãTo DoãããIn ProgressãããIn ReviewãããDoneãã®ã¬ãŒã³ãæã€ã«ã³ãã³ã§ç®¡çããŸãããããŸã§ããã·ãã£ãèšæž¬ããããšããªãã£ãã®ã§ãèŠç©ãã宿œåŸã®ååã¹ããªã³ãã§ã¯ãåªå
床ã«åºã¥ããŠããã¯ãã°ã®é
ç®ããTo Doãã«äžŠã¹ãåªå
床ãé«ããã®ããåãçµã¿ãŸããããŸããã§ããã ãè€æ°ã¹ããŒãªãŒãåããªãïŒãã«ãã¿ã¹ã¯ã«ãªããªãïŒããã«é²ããŸãã 2 ã ãã®æç¹ã§ããã¯ãã°ã®é
ç®ãæŽçãããç¶æ
ã§ã«ã³ãã³äžã«çŸããé¢ä¿è
ããèŠãŠé²æããããããããªããŸããããŸããã¹ããªã³ããç¹°ãè¿ããªãã§ãã«ã³ãã³äžã«ããã¹ããŒãªãŒãå·Šããå³ã«æµãããã«è€æ°äººã§æåããããããªåããã§ããããã«ãªããŸããããã®ç¹ãå¹ããŠãç®æšææ¥ããã€ãã«ãšã£ãŠããŸããããããžã§ã¯ãã®äœæ¥ãå®äºã§ããŸããã äžæ¹ã§ãäžéšã®éçºãããžã§ã¯ãã ãã«æ¹åãé©çšããŠããã®ã§ãããŒã å
šäœã®éçºããŒã¹ã®èšæž¬ãã§ããŠããŸããã§ãããããã«ã€ããŠã¯ã次ã®äžèŠæš¡ã®éçºãããžã§ã¯ãã§ãããããŠé²ããŸããã ããŒã«ã®é©åãªéçš ã«ã³ãã³å°å
¥ãšååŸããŠãã³ãŒãããŒã¹ãšãããžã§ã¯ã管çã®è·é¢ãè¿ãã»ããããŒã ã®å¥œã¿ã«åã£ãŠããã®ã§ãåŸæ¥Jiraã䜿ã£ãŠãããšãããGitHub Projectsã«ç§»è¡ãããããŸã§è¿°ã¹ãéçšã«æ²¿ãããã«ã«ã³ãã³ãé
ç®ã®ã¡ã¿ããŒã¿ãæŽåããŸããããŸããããŒã ã§åæããéçšæ¹æ³ã¯ããã¥ã¡ã³ããšããŠææåããŸããã GitHub Projectsã®å¹æçãªå©ç𿹿³ã«ã€ããŠã¯ã以åãã®ããã°ã§itinaoã玹ä»ããŠããã®ã§ãã²ã芧ãã ããã user-first.ikyu.co.jp ã§ããã ãæ¥åã«æ¯éããªãããã«ãJiraã«ãã£ãããŒã¿ãç§»è¡ããŸãããããããç§»è¡ã¯ããåãã®ã倧äºãªã®ã§ãGitHub APIãå©çšããŠå¿
èŠãªããŒã¿ã極åèªåã§GitHubåŽã«ã€ã³ããŒãããŸããã äžäŒ.comã¬ã¹ãã©ã³éçºããŒã ã®ã«ã³ãã³ é
ç®éã®äŸåé¢ä¿ã瀺ãã¥ãããªã©ã®èª²é¡æããããŸãããçŸåšã¯ããããçŸç¶ãææ¡ããããã«ã³ãã³ãéçšã§ããŠããŸãã äžèŠæš¡ã®éçºãããžã§ã¯ããžã®å°å
¥ åè¿°ã®ãšãããããçšåºŠãã©ã¯ãã£ã¹ã®å°å
¥ã«ãã广ãåºãŠããã®ã§ãèè
(kymmt)ãçŽæ¥æ
åœããŠããããã§ã¯ãªãå¥ã®äžèŠæš¡ãããžã§ã¯ãã«ã€ããŠãå°å
¥ããŠã¿ãŸããã ãã®ãã§ã€ãºã§ã¯ãã¡ã³ããŒå
šå¡ããã©ã¯ãã£ã¹ãå®è·µã§ããããã«ããããžã§ã¯ããé²ããã¡ã³ããŒãšäžç·ã«ã¹ããŒãªãŒã®åäœã§é
ç®ãæŽçãçŽããæ¹æ³ã®ã³ããªã©ãå
±æããŸãããããã«ããããã®çžå¯ŸèŠæš¡ã®èŠç©ãããäžç·ã«ããããšã§ãèŠæš¡ã«å¯ŸããæèŠãããŒã å
šäœã§æããŠãããŸããã ããšã¯ãç¶æ
管ç远å ãããUIå®è£
ãã®ãããªæè¡çã¿ã¹ã¯ã®åäœã§é
ç®ã䞊ã¹ãããŠããŸããããé
ç®éã®äŸåé¢ä¿ããŸãšãŸãã顧客䟡å€ãšããŠæŽçããããšã§ãäœãå®çŸã§ãããæç¢ºã«ãªããŸããããŸããã«ã³ãã³äžã§ãŠãŒã¶ãŒã¹ããŒãªãŒã®ç²åºŠã§å·Šããå³ã«1ã€ãã€éçºé
ç®ãæµããããã«ãªããŸãããããŒã ã¡ã³ããŒãããäœæ¥ãé²ãããããªãã1ã€1ã€ã®ãŠãŒã¶ãŒã¹ããŒãªãŒã®ãªãŒãã¿ã€ã ãåäžãããšãã声ãããããŸããã å ããŠãèŠç©ãããããããã¯ãã°é
ç®ã«åãçµãäžã§ãããŒã å
šäœã®ããã·ãã£ãå®å®ããŠèŠããããã«ãªã£ãŠããã®ã§ãä»åŸã®éçºã®èŠéããç«ãŠããããªããŸããã äžäŒ.comã¬ã¹ãã©ã³éçºããŒã ã®ããã·ã㣠ã¹ããªã³ãéå§æã«ããŒã ã§èšç»ã¥ãã 以åã¯åã®ã¹ããªã³ãã®æ®é
ç®ããã®ãŸãŸæ¬¡ã¹ããªã³ãã«ç§»ã 3 ãšããããã»ã¹ã§ããããçŸåšã¯ããžãã¹ã®ç¶æ³ããã¹ãããšã®åªå
床ããŸãããŒã ã®ããã·ãã£ãéœåºŠç¢ºèªããŠãç®æšã決ããŠããã¯ãã°ãäœã£ãŠããŸãã çµæçã«åã¹ããªã³ãã§æ®ã£ãåãæ¬¡ã®ã¹ããªã³ãã§ãããŸãããã«ãªãããšã¯ããã®ã§ããããªã«ãèããã«ç§»ãã®ã§ã¯ãªãè°è«ãããããã§å¿
èŠãªãç§»ããšããããã»ã¹ãçµãããã«ããŠããŸãã çµæ 2023幎床äžåæã«æ¬¡ã®ãããªéçºããã»ã¹æ¹å掻åããããªããŸããã 顧客䟡å€ã«çŽçµããéçºããŠãŒã¶ãŒã¹ããŒãªãŒãšããŠé
ç®ãæŽç ã«ã³ãã³äžã§é¡§å®¢äŸ¡å€ã«ã€ãªããéçºã®é²æãããã«ããã¯ãèŠããå ãŠãŒã¶ãŒã¹ããŒãªãŒã«å¯ŸããèŠæš¡ã®èŠç©ãããšããã·ãã£ã®èšæž¬ã§éçºããŒã¹ãèŠããå ã¹ããªã³ãã®èšç»ã¥ããã§ç®æšãå®ãããã®ããã«å¿
èŠãªããã¯ãã°ãäœã ããšããšæè¡çã«ãã£ããããããŒã ã ã£ãã®ã§ããããã®æ¹å掻åã®çµæã§ãããŒå¹çãããããããšã§ã以åãããªãŒãã¿ã€ã ã®åäžãå®å®ãèŠãããããã«ãªããŸããã ãŸããã¹ããŒãªãŒã«åºã¥ããéçºé
ç®ã®èŠããåã«ãã£ãŠé²æãããŒã å
å€ãããããããããªãããã¢ãã¬ããŒãã£ã³ã°ãªã©çµç¹éå¶ã«å¿
èŠãªæ¥åãé²ãããããªããŸãããå
ã®èšç»ãç«ãŠããããäºå®å€æŽã«ãæè»ã«å¯Ÿå¿ã§ããããã«ãªã£ãŠããŠããŸãã ä»ã«ã¯ãèšç»ã¥ããã«æèçã«åãçµãããã«ãªã£ãã®ã§ããããããšéçºããŠããŸãããšãæžããŸãããããžãã¹ã®æšé²ã«å¿
èŠãªããšããªã«ããéœåºŠç¢ºèªããªããéçºãé²ããããŠããŸãã ãããã ãã§ã«å§ããŠããåãçµã¿ãšããŠãç¶ç¶çã«åããŒã ã¡ã³ããŒãããã»ã¹æ¹åã§ããããã«ãéçºããã»ã¹ã«é¢ããç¥èãã€ã³ãããããèªæžäŒã鱿¬¡ã§éå¬ããŠããŸããå
æ¥ ãã«ã³ãã³ä»äºè¡ã ãèªã¿çµãããšããã§ãã 課é¡ãšããŠã¯ãæè¡çã«å°éæ§ã®ããã¡ã³ããŒã«äžåšãã®æŽåã®ãããªã¿ã¹ã¯ãéäžããããç·æ¥ã®å·®ã蟌ã¿ã¿ã¹ã¯ãã·ã¹ãã ã«è©³ããã¡ã³ããŒãå€ãã«åããã¡ã ã£ãããšãã¡ã³ããŒéã®ã¹ãã«ã®å·®ã«ãã£ãŠWIPãå€ããªã£ããããããšããããŸãããããããšãã«ã¿ã¹ã¯ãåæšéžæããããã¡ã³ããŒéã§ç¥èãå
±æããŠããæ¹æ³ã«ã€ããŠã¯ãæ¢åã®ãã©ã¯ãã£ã¹ãåç
§ããªããç¶ç¶çã«ããŒã ã§èããŠããã€ããã§ãã äžäŒã§ã¯ããšãã«è¯ããµãŒãã¹ãã€ãã£ãŠãã仲éãåéäžã§ãã hrmos.co ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããã®ã§ããæ°è»œã«ãå¿åãã ããã www.ikyu.co.jp èè
(kymmt)ã¯å
¥ç€Ÿåãå
¥ç€ŸçŽåŸãªã®ã§èãã話ãå«ã¿ãŸã ↩ WIPå¶éã«åºã¥ãæ¹éã§ããããã®ãšãæ°å€ã¯ãšãã«æå®ããŠããŸããã§ãã ↩ Jiraã®æ©èœã§ãããªã£ãŠãããšããã®ããããŸã ↩
ãã®èšäºã¯ äžäŒ.com Advent Calendar 2023 25æ¥ç®ã®èšäºã§ãã äžäŒã¬ã¹ãã©ã³ã§ã¯ãããã¹ã ãŒãºãªäºçŽäœéšã®æäŸãç®çãšããã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãé²ããŠããŸãããã®äžç°ãšããŠã2023幎10æãããã¬ã¹ãã©ã³åå¥ããŒãžã®è¡šç€ºããäºçŽãŸã§ã®ã¹ããŒããã©ã³ãã¥ãŒã«ãããŠãããã¯ãšã³ãã®ãµãŒããRustã§æžããããã®ã«çœ®ãæããŸããã äžäŒã¬ã¹ãã©ã³ã® Rust ããã¯ãšã³ããæ£åŒãªãªãŒã¹ãããŸããã https://t.co/7N4VGv5ej9 ãã®ããŒãžã®ã¹ããŒããã©ã³ãã¥ãŒã¯ããã¯ãšã³ãã Rust ã§æžããã GraphQL ã«ãªã£ãŠãŸã — naoya (@naoya_ito) October 4, 2023 æ¬çªéçšãå§ãŸã£ãŠ3ãæè¿ãçµã¡ãŸãããããããŸã§å®å®ããŠç¶ç¶çãªéçºãšéçšãã§ããŠããŸããããã¯Rustã ãããšæ§ããããšãªããããµã€ããã®ããã¯ãšã³ãéçºãå¿ãããŠããããã ãšèããŠããŸãã Advent Calendar 2023æçµæ¥ã¯ãäžäŒã¬ã¹ãã©ã³ã®éçºããŒã äžåãããäžäŒã¬ã¹ãã©ã³ã®Rustããã¯ãšã³ãéçºã®æ§åããå±ãããŸãã Rustãéžå®ããçç± çŸåšã®ããã¯ãšã³ãã®ãŠãŒã¹ã±ãŒã¹ ã¬ã¹ãã©ã³æ
å ±ã®ååŸ äºçŽã®ç¢ºä¿ çŸåšã®ã¢ãŒããã¯ã㣠åã¢ãžã¥ãŒã«ã®çŽ¹ä» ãã¡ã€ã³ã¢ãã« ããŒã¿ã¢ã¯ã»ã¹å±€ GraphQLãšHTTPãµãŒã ã©ã€ãã©ãª Rustã«ããéçºã®ãµãããã ããã£ãããš Rustã¯ããžãã¹ããžãã¯ãæžãã®ã«ãäŸ¿å© ã¢ããªã±ãŒã·ã§ã³ã®åå±€ã§åå®å
šã«ããŒã¿ã倿 Cargo workspaceãæŽ»çšããéçº ããã©ãŒãã³ã¹ã®åäž ãã£ãšãããªããšå¬ããããš ãšã³ã·ã¹ãã ã®ãããªãæç ãŸãšã Rustãéžå®ããçç± äžäŒã¬ã¹ãã©ã³ã®ãªãã¥ãŒã¢ã«èšç»ãå§ãŸã£ããããäžäŒã§ã¯å®¿æ³äºçŽãµãŒãã¹ã瀟å
ã®åºç€ãµãŒãã¹ãäžå¿ãšããŠGoãæšæºçãªããã¯ãšã³ãã®æè¡ã¹ã¿ãã¯ã§ããã äžäŒã¬ã¹ãã©ã³ã®éçºã§ãã宿æ³äºçŽãµãŒãã¹ã§ã®çµéšãããã¡ã³ããŒã®ã¹ãã«ã»ããã«åºã¥ããŠGoã䜿ãããšãã§ããŸããããã®äžæ¹ã§ããã®æ¹éã ãšç€Ÿå
ã®æè¡ããŒããã©ãªãªãGoã«åã£ãŠããŸããšããæžå¿µããããŸããã äžäŒã§ã¯ã瀟å
ã§èç©ããæè¡çç¥èŠã«å€æ§æ§ãæãããçµæãšããŠç¶æ³ã«å¿ããŠæé©ãªæè¡éžå®ãã§ããããã«ãè€æ°ã®ããã°ã©ãã³ã°èšèªã䜿ãããšãæå³çã«éžæããŠããŸãã 株式会社一休 会社紹介資料 / introduce-ikyu - Speaker Deck ããäžäŒã®æè¡éžå®ã®æ¹éã«ã€ã㊠ããã§ãããŒã ã¡ã³ããŒã®äžã«Rustã«è©³ãããšã³ãžãã¢ãããããšãå©ãã«ãªããRustãããã¯ãšã³ãã®èšèªãšããŠæ¡çšãããã©ãããæ€èšããŸããã Rustã®æ¡çšã«ããçãã¯æ¬¡ã®ãšããã§ãã ãŸã眮ãæãããåç
§ç³»åŠçã®CPUå©çšå¹çãäžããŠãé«éãªããã¯ãšã³ããµãŒããšãã ä»åŸã®ãããªãéçºãèŠæ®ããã¡ã¢ãªå®å
šãåå®å
šãªéçºäœéšãå®çŸãã æè¡çç¥èŠã®å€æ§æ§ãšããç¹ã§ã颿°åã®ã¡ã³ã¿ã«ã¢ãã«ã§ããã°ã©ãã³ã°ã§ãããšã³ãžãã¢ãå¢ãã åæã«ãRustã®æ¡çšã«å¯Ÿããæ¬¡ã®ãããªæžå¿µãäžãããŸããã åããŠäœ¿ããšã³ãžãã¢ã«ãšã£ãŠã¯åŠç¿ã«æéãããã ã©ã€ãã©ãªã®èªäœãå¿
èŠãšãªãã±ãŒã¹ããããã Rust㯠å
¬åŒããã¥ã¡ã³ã ã docs.rs ã®ãªãã¡ã¬ã³ã¹ãªã©ã§ããã¥ã¡ã³ããå
å®ããŠããã®ã§ãåŠç¿æ²ç·ã¯æ¥ã§ã¯ãããã®ã®ãåŠç¿èªäœã¯é²ãããããšå€æããŸããã ã©ã€ãã©ãªã«ã€ããŠã¯ãRustããäžäŒã®åºå¹¹DBã§ããSQL Serverã«ã©ããã£ãŠæ¥ç¶ããããšããæè¡çãªæ€èšŒãå¿
èŠã§ãããæçµçã«ã¯ãPrismaãå
¬éããŠãã Tiberius ãšããSQL Serverçšã®DBãã©ã€ããããŒã¹ãšããŠãããçšåºŠã¢ããªã±ãŒã·ã§ã³ãã䜿ããããã€ã³ã¿ãã§ãŒã¹ã®ã©ã€ãã©ãªãæŽåããããšã§éçºãé²ãããããšå€æã§ããŸããã ãããã®è°è«ã調æ»ã«åºã¥ããŠãäžäŒã¬ã¹ãã©ã³ã®ããã¯ãšã³ãã§Rustãæ¡çšããããšã«ãªããŸããã çŸåšãäžäŒã¬ã¹ãã©ã³ã®ããã¯ãšã³ããéçºãããšã³ãžãã¢ã¯3人ããŸãããã®ãã¡2人ã¯ãäžäŒã¬ã¹ãã©ã³ã®éçºããã£ããã«ãã¯ãããŠRustãæ¬æ Œçã«å©çšãå§ããŸãããè±å¯ãªåŠç¿ãªãœãŒã¹ãRustã«è©³ããã¡ã³ããŒã®ãã«ããéããŠããããžã§ã¯ãéå§åã®åŠç¿ã§ã¯ String ãš &str ã®éããçè§£ãããšããããå§ããã¡ã³ããŒãããããžã§ã¯ãéå§åŸã¯ã¹ã ãŒãºã«éçºã§ããããã«ãªããŸããã çŸåšã®ããã¯ãšã³ãã®ãŠãŒã¹ã±ãŒã¹ ããããã¯Rustã§ããã¯ãšã³ããããµã€ããã«éçºããããã®ãèšèšãå®è£
ã«ãããé¢çœããã€ã³ãã玹ä»ããŠãããŸãã çŸåšã¯äž»ã«æ¬¡ã®ãŠãŒã¹ã±ãŒã¹ã§ããã¯ãšã³ããå©çšããŠããŸãã ã¬ã¹ãã©ã³æ
å ±ã®ååŸ åºèæ
å ±ãäºçŽå¯èœæéãªã©ãã¬ã¹ãã©ã³ã®æ
å ±ãã客æ§ã«æäŸããããã®æ
å ±ãååŸããŸããæ©èœã¯GraphQLã®ã¯ãšãªãšããŠæäŸããŠããŸãã ä»åã¯ã¬ã¹ãã©ã³åå¥ã®ããŒãžã®è¡šç€ºããäºçŽãŸã§ã®ãããŒã®çœ®ãæããéçºã¹ã³ãŒããšããã®ã§ãçŸåšã¯ãã®ãŠãŒã¹ã±ãŒã¹ã倧åãå ããŠããŸããåŸè¿°ã®ãšããã³ãŒãããŒã¹äžãããŒã¿ã®èªã¿åºãã«é¢ããã³ãŒããå€ãã§ãã äºçŽã®ç¢ºä¿ ã客æ§ããå
¥åããã ããæ
å ±ãããšã«äºçŽã確ä¿ãããšã³ããã€ã³ããGraphQLã®ãã¥ãŒããŒã·ã§ã³ãšããŠæäŸããŠããŸãããŸããå®éã®äºçŽåŠçã¯ãäºçŽåŠçã¢ãžã¥ãŒã«ãæã€æ¢åã®ç€Ÿå
å¥ãµãŒãã¹ã«å§è²ããŠããŸãã çŸåšã®ã¢ãŒããã¯ã㣠çŸåšãã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãšããŠã³ãã³ãã¯ãšãªè²¬ååé¢(CQRS)ã«åºã¥ããæ§é ãæ¡çšããŠããŸããã€ãŸããããŒã¿ãèªã¿åºãã ãã®ã¯ãšãªãšãããŒã¿ã®äœæãæŽæ°ãããã³ãã³ãã§ãå©çšããã¢ãã«ãåé¢ããæ¹åŒããšã£ãŠããŸãã ãŸããããšãã°ã¯ãšãªã®å ŽåãDBãšSolrããããã«ã€ããŠããŒã¿ã¢ã¯ã»ã¹å±€ãèšããGraphQLã®ããŒã¿ããŒããŒã®ãããªã·ã¹ãã ã®çé¢ã«è¿ãå±€ããã¯ãããŒã¿ã¢ã¯ã»ã¹å±€ãéããŠã¯ãšãªã¢ãã«ã®åœ¢åŒã§ããŒã¿ãååŸããŸãã ã¢ãžã¥ãŒã«ãšãã®äŸåé¢ä¿ ãããã®ã¢ãžã¥ãŒã«ã¯Cargo workspaceãçšããŠç®¡çããŠããŸãããã®ç¹ã«ã€ããŠã¯ããšã§è©³ãã説æããŸãã åã¢ãžã¥ãŒã«ã®çŽ¹ä» äžè¿°ããå³ã«ãããåå±€ãæ§æããã¢ãžã¥ãŒã«ã«ã€ããŠç޹ä»ããŸãã ãã¡ã€ã³ã¢ãã« CQRSã«ãããã¯ãšãªãšã³ãã³ãã§å©çšããã¢ãã«ãå®è£
ããŠããå±€ã§ãããã¡ã€ã³ã¢ãã«ã¯ä»ã®ã©ã®ã¢ãžã¥ãŒã«ã«ãäŸåããŸããããŸããã¯ãšãªãšã³ãã³ãã¯å¥ã¢ãžã¥ãŒã«ãšããããã«crateãåããŠããŸãã ã¯ãšãªã¢ãã«ã®äŸãšããŠã¯ãã¬ã¹ãã©ã³è©³çްç»é¢ã§è¡šç€ºããåºèæ
å ±ããããŸãããããã®ããŒã¿ã¯å®éã¯è€æ°ã®ããŒãã«ã«ååšããŸãããã¯ãšãªã¢ãã«ã¯ãã®ãããªå®è£
詳现ã«ã¯äŸåãããã¯ãšãªã®çµæãšããŠã»ããæ§é ãå®çŸ©ããŠããŸããå®éã«ã¯ãSQL Serverãããã¯SolrããåŸãããŒã¿ãã¯ãšãªã¢ãã«ã«å€æããŠå©çšããŸãã #[derive( Debug , Clone )] pub struct Restaurant { pub id: RestaurantId, pub name: String , pub description: Option < String > , // ... } ã³ãã³ãã¢ãã«ã®äŸãšããŠã¯ãæ°ã«å
¥ãåºèç»é²çšã®ã³ãã³ãã¢ãã«ãªã©ãååšããŸãããã¡ãã¯ãŸã æ°ãå°ãªãã®ã§å²æããŸãã ããŒã¿ã¢ã¯ã»ã¹å±€ å®éã®ããŒã¿ãååŸããããã®ããžãã¯ãå®è£
ããŠããå±€ã§ããçŸåšã¯ãäžäŒã®åºå¹¹DBã§ããSQL Serverããæ€çŽ¢ãµãŒãã§ããSolrããããŒã¿ãååŸããŠããŸãããã®ããŒã¿ã¢ã¯ã»ã¹å±€ã®å©çšè
ã«å¯ŸããŠãååŸããããŒã¿ãããšã«ã¢ãã«ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸããã€ãŸãããã¡ã€ã³ã¢ãã«ã«äŸåããŸãã ã¯ãšãªãå®è¡ãããšãã¯ã Serde ã serde_with ãå©çšããŠãããŒã¿ã¹ãã¢ããååŸããçããŒã¿ãDTOã«ãã·ãªã¢ã©ã€ãºããŸãã mod dto { // ... #[serde_with::serde_as] #[derive( Debug , serde::Deserialize)] pub struct Restaurant { #[serde(rename = "restaurant_id" )] #[serde_as(as = "serde_with::TryFromInto<i32>" )] id: RestaurantId, #[serde(rename = "restaurant_name" )] name: String , // ... } } ããã«ããã®DTOããã¯ãšãªã¢ãã«ã«å€æããããã« std::convert ã® From ãã¬ã€ãã TryFrom ãã¬ã€ããæŽ»çšããŠããŸãã詳ããã¯åŸè¿°ããŸãã GraphQLãšHTTPãµãŒã ããã¯ãšã³ãã¯GraphQLãéããŠããã³ããšã³ãã«ã¯ãšãªãšãã¥ãŒããŒã·ã§ã³ãæäŸããŠããŸãããã®GraphQL APIã®å®è£
ã«ã¯async-graphqlãå©çšããŠããŸããasync-graphqlã¯ã³ãŒããã¡ãŒã¹ãã§GraphQLã¹ããŒããå®çŸ©ã§ããcrateã§ãã github.com // Restaurant { // name // } // ã®ãããªã¹ããŒããã³ãŒãã§å®çŸ© pub struct Restaurant ( pub query_model :: Restaurant); #[async_graphql::Object] impl Restaurant { async fn name ( & self ) -> &str { & self . 0 .name } // ... } ãŸããHTTPãµãŒããšããŠã¯Axumãå©çšããŠããŸãã github.com ãããŸã§ã¯GraphQLãªã®ã§ãšã³ããã€ã³ã1ã€ã§æžãã§ããŸããããæè¿ã¯ç€Ÿå
ã®ä»ãµãŒãã¹ãšéä¿¡ããããã«ã€ã³ã¿ãŒãã«ãªREST APIãäœãæ©äŒãå¢ããŠããŠããŸãã ã©ã€ãã©ãª ã¢ããªã±ãŒã·ã§ã³ãæ§æããã¢ãžã¥ãŒã«ãšã¯å¥ã«ãç¬ç«ããããžãã¯ããŸãšããã©ã€ãã©ãªãšããŠã®crateãããã€ãäœæããŠworkspaceã«å«ããŠããŸãããããã®ã©ã€ãã©ãªã¯ä»ã¢ãžã¥ãŒã«ããå©çšãããŸãã ããšãã°ãå
è¿°ããTiberiusãããŒã¹ã«ããDBãã©ã€ãã瀟å
ãµãŒãã¹ã®ã¯ã©ã€ã¢ã³ããä»ã«ã¯ãã°ãªã©ã®æšªæçé¢å¿äºãæ±ãã©ã€ãã©ãªãååšããŸãã Rustã«ããéçºã®ãµãããã ããã£ãããš Rustã¯ããžãã¹ããžãã¯ãæžãã®ã«ãäŸ¿å© Rustã®èšèªæ©èœãšããŠãæææš©ãã©ã€ãã¿ã€ã ã®ããã«ã¡ã¢ãªå®å
šæ§ãæèãããã®ãããæ³šç®ãããŸããããã«ãWebã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ããæžãããã§ã¯ã Option ã Result ã«ä»£è¡šããã颿°åèšèªã®ãšãã»ã³ã¹ãåã蟌ãã æ©èœããããŒã¿å€æã«ãŸã€ããæ©èœãéåžžã«äŸ¿å©ã ãšãããããŠæããŸããã äžäŒã¬ã¹ãã©ã³ã¯15幎以äžã®æŽå²ããããµãŒãã¹ã§ãããã®ãããªãµãŒãã¹ã¯ããã°ãã°æŽå²çäºæ
ãããªãããŒã¿æ§é ãã³ãŒããå€ãæã£ãŠããŸããããšãã°æå¹ãªå€ãšnullã®äž¡æ¹ãååšãããã«ã©ã ãæ±ãããšããããŸãããã®ãšãã« Option ãå©çšããããšã§ãããžãã¹ããžãã¯äžã§nullã«ãŸã€ãããã°ãé¿ããmatchåŒãif letåŒã«ãã£ãŠå€ããªãã±ãŒã¹ãã€ãã«èæ
®ã§ããŸãã ãŸããWebã¢ããªã±ãŒã·ã§ã³ã¯ç¡å¹ãªå€ãå
¥åããããå€éšã®ãµãŒãã¹ãšã®éä¿¡ã«å€±æãããªã©ãã€ãã«ããžãã¯ã倱æããå¯èœæ§ããããŸãããã®ãããªããžãã¯ã§ã¯è¿ãå€ãšã㊠Result 1 ã䜿ãããšã§ã確å®ã«ãšã©ãŒããã³ããªã³ã°ã§ããŸãããŸãã ? æŒç®åãå©çšããããšã§ãã³ãŒããç°¡æœã«ä¿ã¡ã€ã€ãšã©ãŒãã³ããªã³ã°ã§ããã®ã䟿å©ãªç¹ã§ãã ä»ã«ã¯ãäžäŒã¬ã¹ãã©ã³ã ãšäºçŽå¯èœãªæéãé£äºã³ãŒã¹ã®æ€çŽ¢çµæãªã©ã§ã³ã¬ã¯ã·ã§ã³ãæäœããå Žé¢ãæ°å€ããããŸãããã®ãããªãšãã«ãã€ãã¬ãŒã¿ãš map ã filter ã®ãããªã€ãã¬ãŒã¿ã¢ããã¿ãå©çšããããšã§ãã³ã¬ã¯ã·ã§ã³ã«ãŸã€ããããžãã¹ããžãã¯ãç°¡æœã«æžããã®ãããç¹ã ãšæããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®åå±€ã§åå®å
šã«ããŒã¿ã倿 å
è¿°ããããã«ããã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯è€æ°ã®ã¢ãžã¥ãŒã«ã§è²¬åãåããŠããŸãããã£ãŠããã®ãŸãŸã§ã¯ããŒã¿ã¢ã¯ã»ã¹å±€ã§ããŒã¿ã¹ãã¢ããååŸããçã®ããŒã¿ãDTOãçµç±ããŠã¯ãšãªã¢ãã«ã«å€æããããžãã¯ãæžãå¿
èŠãåºãŠããŸãã ããã§ã From ãã¬ã€ãã TryFrom ãã¬ã€ããçšããŠåå®å
šãªããŒã¿ã®å€æãå®è£
ããããšã§ãå±€ã®éã§å®å
šã«ããŒã¿ãåãæž¡ãã§ããŸããããšãã°DTOãã¯ãšãªã¢ãã«ã«å€æããããã« From ãã¬ã€ãã TryFrom ãã¬ã€ããDTOã«å¯ŸããŠå®è£
ããé©åã«ã¢ãã«ãžå€æã§ããããã«ããŠããŸãã impl From < dto :: Restaurant > for query_model :: Restaurant { fn from (d: dto :: Restaurant) -> Self { query_model :: Restaurant { id: d.id, name: d.name, // ... } } } ãã®ããã«ã¢ãã«ã«å¯ŸããŠå€æã®ããã®ãã¬ã€ããå®è£
ããŠããã°ãããšã¯ from ïŒ try_from ã into ïŒ try_into ã䜿ãã ãã§å±€ã®éã®åå®å
šãªããŒã¿å€æãå¯èœã«ãªããŸãã Cargo workspaceãæŽ»çšããéçº Cargo workspaceãæŽ»çšããŠã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ãå¶åŸ¡ããªããéçºã§ããŠããã®ãããç¹ã§ãã ãªããžããªã®ã«ãŒããã£ã¬ã¯ããªã«ããCargo.tomlã§ã¯ãworkspaceã®membersãšããŠã¢ããªã±ãŒã·ã§ã³å
ã®åã¢ãžã¥ãŒã«ãæå®ããŠããŸãããããŠããããã®ã¢ãžã¥ãŒã«ãcrateãšããŠå®è£
ããåcrateã®Cargo.tomlã§ã¯ã¢ãŒããã¯ãã£ãæèããŠä»ã®crateãžã®äŸåé¢ä¿ãèšå®ããããšã§ãæå³ããªãäŸåã¯ã³ã³ãã€ã©ã«ãã£ãŠãšã©ãŒã«ã§ããæ§é ã«ããŠããŸãã # ã«ãŒããã£ã¬ã¯ããªã®Cargo.toml [workspace] resolver = "2" members = [ "backend/*", ] # ããŒã¿ã¢ã¯ã»ã¹å±€ã®Cargo.toml [package] name = "backend-data-access" version.workspace = true authors.workspace = true edition.workspace = true publish.workspace = true [dependencies] backend-query-model = { workspace = true } ãŸããã¢ãžã¥ãŒã«ãcrateã«åé¢ããããšã§ãã³ãŒãã倿Žãããšãã«ã倿Žã®ãã£ãcrateãšãã®crateã«äŸåããcrateã ããåãã«ãããã°ãããªããŸãããçµæãšããŠãæ¯åã¢ããªã±ãŒã·ã§ã³å
šäœããã«ãããã«æžã¿ãéçºæã®ãã«ãæéã®ççž®ã«ãè²¢ç®ããŠããŸãã ããã©ãŒãã³ã¹ã®åäž ãã¡ããããã©ãŒãã³ã¹ã®åäžãåœåã®çãã©ããéæã§ããç¹ã§ãããããã£ãããšã®1ã€ã§ãã ããã¯ãšã³ãã¯Google Cloud Runã§éçšããŠããŸããçŸåšã¯å¹Žæ«å¹Žå§ã§ã¬ã¹ãã©ã³äºçŽãéåžžã«å¢ããææã§ãããããŒã¯æã§ã3å°çšåºŠã®ã€ã³ã¹ã¿ã³ã¹ã§ãªã¯ãšã¹ããåããããšãã§ããŠããŸãã ãŸããäžäŒã¬ã¹ãã©ã³ã®ããã¯ãšã³ãã®äžéšãRustã«ç§»è¡ããããšã§ãåŸæ¥ã®Pythonã®ããã¯ãšã³ãã«ãããKubernetes Deploymentã®ReplicaSetæ°ã次ã®ããã«60çšåºŠãã40çšåºŠã«æžããããšãã§ããŸããã Wed 4以éã¯Pythonããã¯ãšã³ãã®è² è·ããªãããŒãã§ãã ä»ã«ã¯ãããã¯ãšã³ãã®é«éåã«ãšããªã£ãŠãµãŒãã¹å
šäœã®æ§æãæé©åããããšã§ãäžäŒã¬ã¹ãã©ã³å
šäœã®ããã©ãŒãã³ã¹ãåäžããŸããããã¡ãã«ã€ããŠã¯ããŒã ã¡ã³ããŒã®kozaiyãæ¬¡ã®èšäºã«è©³ããæžããã®ã§ã芧ãã ããã user-first.ikyu.co.jp ãã£ãšãããªããšå¬ããããš ãšã³ã·ã¹ãã ã®ãããªãæç Webã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ããéçºããããã§ãããã«ãã©ãããã©ãŒã ã®Rust察å¿ãæ¡å
ããããšéçºã楜ã«ãªãããã§ãã ããšãã°ãçŸåšã¯Cloud Runã䜿ã£ãŠããã®ã§ãAPMãšããŠCloud Traceãå©çšããããšã«ããŸãããããããå
¬åŒã«ã¯Rustã®SDKãæäŸãããŠããªãããšãããç¬èªã®ã©ã€ãã©ãªãéçºããããšã§å¯Ÿå¿ããŠããŸãã ãŸãšã ãã®èšäºã§ã¯ãäžäŒã¬ã¹ãã©ã³ã«ãããŠRustãæ¡çšããçç±ãšãRustã«ããããµã€ããã®Webã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ãéçºã®æ§åã«ã€ããŠç޹ä»ããŸããã Rustãæ¡çšããããšã§ãæåŸ
ã©ããæ§èœé¢ã§å€§ããªã¡ãªãããåŸãããšãã§ããŸããããŸããRustãCargoã®æ©èœãé©åã«æŽ»çšããããšã§ãçç£æ§ãä¿ã¡ã€ã€ä»åŸã®ç¶ç¶æ§ãèæ
®ããèšèšã§éçºãé²ããããšãã§ããŠããŸãã æ°ãã«Rustãå©çšãå§ããããŒã ã¡ã³ããŒããã¯ãRustã«å¯Ÿããææ³ãšã㊠èªåèªèº«ã«ããã°ã©ãã³ã°ãæããŠãããèšèªã ãªãšæããŸãã ããã°ã©ãã³ã°ããäžã§ãæ°ã«ãã¹ããã€ã³ããæ°ã«ãããŠãããèšèª ãšãã声ãããã£ãŠããŸãã ä»åŸã®ããã¯ãšã³ãã®å±æãšããŠã¯ãããããäºçŽäœéšã®æäŸãã¬ã¬ã·ãŒã·ã¹ãã ã®æ¹åãç®çãšããŠã é«éãªã¬ã¹ãã³ã¹ãæ±ããããã¬ã¹ãã©ã³æ€çŽ¢ ã¬ã¹ãã©ã³äºçŽã®ããžãã¯ãªã©ã®ã¬ã¬ã·ãŒãã€ã³ã¢ãã¡ã€ã³ã§ããã¢ãžã¥ãŒã« ã«ã€ããŠãRustã§çœ®ãæããŠããäºå®ã§ãããã®ãããªç®æã§ã¯ãé«ãããã©ãŒãã³ã¹ãåã«å®ãããéçºäœéšãæäŸããŠãããRustãæŽ»ããããšãã§ããã ãããšèããŠããŸãã ãã®ãããªæè¡çãªãã£ã¬ã³ãžãã§ããäžäŒã¬ã¹ãã©ã³ã®ããã¯ãšã³ãéçºã«èå³ãããããã¯ããã²ã«ãžã¥ã¢ã«é¢è«å¿åããŒãžãæ±äººããŒãžãããé£çµ¡ãã ããã hrmos.co www.ikyu.co.jp äžäŒã¬ã¹ãã©ã³ã§ã¯ anyhow::Result ãå©çšããŠããŸã ↩
ãã®èšäºã¯ äžäŒ.com Advent Calendar 2023 24æ¥ç®ã®èšäºã§ãã 宿æ³ãããã¯ãéçºã§éçºãã£ã¬ã¯ã¿ãŒãããŠããŸããæ©æ¬ãšç³ããŸãã ã€ãã«ã¯ãªã¹ãã¹ã€ããæ®ããšãããã®èšäºãå«ããŠ2ã€ãšãªããŸããã æ¬æ¥ã®èšäºã§ã¯éçºãã£ã¬ã¯ã¿ãŒ1幎ç®ã®å¥®éåãçããã«ç޹ä»ããããšæããŸãã åããã£ã¬ã¯ã¿ãŒã®æ¹ã¯ãã¡ãããäœãæ°ããããšã«ææŠããŠããçããã«å±ããšå¬ããã§ãã ç°¡åã«çµæŽçŽ¹ä» æ°åã§NWã€ã³ãã©ã®äŒç€Ÿã«å
¥ç€Ÿãã ãšã³ãžãã¢ãšããŠæ³äººé¡§å®¢ã®ãµãŒãã¹å°å
¥ããµããŒããããŠããŸããã AWSã®éçšãã»ãã¥ãªãã£åæã®å°å
¥ãNWæ©åšã®å°å
¥éçšãã¹ãã管çãµãŒãã¹å°å
¥ãªã©æ§ã
ãªåéãæ
åœããçŽè¿ã§ã¯æè¡å¶æ¥ãšããŠææ¡ã¡ã€ã³ã§ã®æŽ»åã«åŸäºããŠããŸããã 5幎ç®ã«ãªã£ãããããµãŒãã¹ã®å°å
¥ã§ã¯ãªãããµãŒãã¹ãäœãããšã«èå³ãæã¡ããããã¯ãéçºãšããæ°ããåéã«ãã£ã¬ã³ãžããããšã決ããŸããã ãããã瀟å
ã®å¶åºŠã掻çšããçŸåšã¯äžäŒã«ãäžè©±ã«ãªã£ãŠããŸãã 奮éå ã€ã³ãããå€éæ»ããªããšãå
ããåºç€ å
¥ç€Ÿåã«éçºãã£ã¬ã¯ã¿ãŒãšã¯ãªããããšããããšã§ãããç°¡åãªè³æ Œã ãåããŸããã Webディレクション | Web検定(ウェブケン) äžè¬çãªWebæ¥çã®çšèªãã¡ã€ã³ã§ãå®éã«äœããã圹å²ãªã®ãã¯ãµãã£ãšã ãåŠã³ãŸããããã ãå®éã«å
¥ç€ŸããŠã¿ããšãèšèéããå³ãå·Šãããããªããç¶æ³ã§ããã 瀟å
ã§äœ¿ãããŠããããŒã«ã§è§Šã£ãããšããã£ãã®ãGmailãšSlackã ãã§ãé²ãæ¹ä»¥åã«äœ¿ãæ¹ãããããªããã æ¥åãããŒã«ã€ããŠèª¬æãåãããã衚é¢çãªãšããã ãåãã£ãæ°ã«ãªã£ãŠããŸããã SQLãæžããªãã®ã§ããŒã¿æœåºãé ŒãŸããŠãæéãããããã æäœæ¹æ³ã«ã€ããŠèãã1åã§ã¯çè§£ã§ããªãã®ã§ãé²ç»ãããŠåŸã§èªåã§ã³ã³ãã«ã«ãŸãšããæ¥ã
ãã ãªã«ããã¢ãŠãããããäœãã§ããªãç¶æ
ã§ããã ããã§èªåãæèããã®ã¯ã ããããªãããšã¯ããããªããŸãŸã«ããªã äžåºŠæããŠããã£ãããšã¯ã次åããã¯äžäººã§ã§ããããã«ãªã ãšã«ããåšãã«è¿·æããããªãããã«ãæž¡ãããã¿ã¹ã¯ã¯ãã¹ãªãããªããããã«ããããšãæ¥ã
èããŠããŸããã ãŸãã¯ä»äºã«æ
£ããããšãäžäººåã®ä»äºãã§ããããã«ãªãããšãç®æããŠãããããã«åãçµãæ¥ã
ã§ããã ãšã«ããã€ã³ãããéãå€ããŠæŽçããããªããªãããã«ãªãã®ããªããšãèžã匵ã£ã2ã«æã 2ã«æç®ã§èµ·ããã®ãåžžã«è¿œããããŸãããŠãããã£ã¬ã¯ã¿ãŒã®å
茩ãç£äŒã«å
¥ããããšããåºæ¥äºããã å¿
æ»ã«ç¬æ»ããããäžç€ ç£äŒã«å
¥ãããå
茩ããè€æ°ãããžã§ã¯ãã®ãã£ã¬ã¯ã·ã§ã³ãåŒãç¶ããŸããã æ£çŽããã£ãŠããïŒãšããæ°æã¡ãšãèªåãäž»äœã«ãªãããšã§ãããžã§ã¯ãã倱æããã®ã§ã¯ãªãããšããäžå®ã§ã粟ç¥çã«ã¯äœè£ã®ãªãç¶æ
ã§ããã å®éã«æ¥åã«åãæãããšã åŒãç¶ãã æ¥åãããŸãé²ããããšææ°èŸŒãããé 匵ãã©ãããšåããå
ãã€ãã€ãåã£ãŠããããæ¥ã
ç¬æ»ãç¶æ
ãã ããŒã ããã¯ãã£ã¬ã¯ã·ã§ã³ãšããŠã®åœ¹å²ãæ±ãããããèª¿æŽæ¥åã«ãäœæ¥ãæéããããŠããŸãç¶æ
ãã 仿¯ãè¿ããšãããªç¶æ
ã§ããã é²ãæ¹ãèŠä»¶ã仿§ã«ã€ããŠåæãšèª¿æŽãããŠããã€ããããç¶æ³ãèŠæãèããŠããŠæã£ãŠåž°ãã ãã®äŒæžé³©ã«ãªã£ãŠãã ãŠãŒã¹ã±ãŒã¹ãè€æ°èæ
®ã§ããåºæ»ããçºçããããšãå€ãã£ã èªåãããã¹ãæäœéã¿ã¹ã¯ãã§ããŠããªãã®ã«ãæ¹åãæ°èŠã®ææ¡ãªã©è䌞ã³ãããŠäœã䟡å€ãåºãããšç©ºåãããŠãã æ¯ãè¿ããšãªããªãæ¥ããããã§ãããã ãã®ç¶æ³ãæç Žãã¹ãæèããããšã¯ åãçµãåã«é²ãããšããŠããæ¹åã®èªèåãããè¡ã æ©ããã€ã³ãã¯ããŸãã«å£æã¡ãè¡ã ããŒã ãããŒãžã£ãŒã«é±1åããããžã§ã¯ãã®é²ãæ¹ãããŒã ã®ã³ã³ãã£ã·ã§ã³ã«ã€ããŠäŒè©±ãããæéãããã ããŸããã ããããšãŠã倧ããã£ãâŠïŒ ãã®æã«å¿
ãèªåã®èãããã£ãŠèšã¿ãã®ã£ãããåããŠããããšã«åªããçµæã æ·ããŠããã£ãã¬ãŒã«äžãé²ããããšã¯ã§ããããã«ãªã£ãŠããŸããã ã§ã¯æ¬¡ã¯èªãåããããã«ãªããã°ããã èªåã®åœ¹å²ãäœãšãªãããã£ãŠããä» è€æ°ã®ãããžã§ã¯ããçµéšããããšã§ããããžã§ã¯ãã®åæãäžç€ããªãªãŒã¹åããªãªãŒã¹åŸã®ããããã®ã¿ã€ãã³ã°ã§ãã£ã¬ã¯ã·ã§ã³ãããã¹ãããšãããã£ãŠããŸããã ããã®ãããžã§ã¯ããšåãããã«ãããé²ããŠãããŸãããšãããããã«ãªã£ãã®ã¯å€§ããã ä»åŸã®åããäºæž¬ããŠåããããã«ãªã£ãããšããããããŒã ã¡ã³ããŒãä»éšçœ²ããäŸé Œããããããšãå¢ããŠããŸããã ããã«æé·ãæãããšãããšããŠã¯ããèããã¿ã¹ã¯ããå°ããã€ããªããããã«ãªã£ãããšã èª¿æŽæ¥åãããŒã ã®éçºãåã«é²ããããšã ãã§ã¯ãªããæ¬æ¥ã®ãã£ã¬ã¯ã·ã§ã³ïŒæ¹åã瀺ãïŒãšããæå³ã§ã®ãèããã¿ã¹ã¯ããæ
åœããããŒã ããã®æ¹åã«é²ãã§ãããšããäœéšãå°ããã€ã§ããããã«ãªã£ãŠããŠããŸãã æè¿ã§ã¯ãã®ãããªããšã«æ©ãã§ããŸãã éçºç®ç·ã«ãªããããŠããžãã¹èгç¹ïŒäŸ¡å€ãããã®é©åãªã¿ã€ãã³ã°ã§äžã«åºãããã«ã¯ã©ããã¹ããïŒãæŒããŠããŸãããšããã ããã¯åãæ©ã¿ããæã¡ã®æ¹ãããã£ãããã®ã§ã¯ãªãã§ããããã éçºãã£ã¬ã¯ã¿ãŒã¯éçºã¡ã³ããŒãšéããæéãå€ãããšãããé¥ããã¡ãªæèã ãšæããŸãã å®å
šã«ãã¹ãªãé²ããããã«ã¯ãšãŠãéèŠã§ãããå¿ããŠã¯ãããªãã®ã¯ã ãªãªãŒã¹ãããããšããŽãŒã«ã§ã¯ãªããã䟡å€ã®ãããããã¯ããçã¿åºãããšããŽãŒã«ã§ããããšããããšã§ãã äŸãã°Aæ¡ãè¯ããšæã£ãŠé²ããŠããããã©ããªãªãŒã¹çŽåã«ãªã£ãŠBæ¡ã®æ¹ãé¡§å®¢ã®æºè¶³åºŠãé«ãã売äžã«ãã€ãªãããšããã£ãã±ãŒã¹ããããšããŸãã éçºããŒã ãšããŠã¯ãçŽåã§å€æŽãå ããªããŠã¯ãããªãããªãªãŒã¹æ¥ã®å»¶é·ã¯ãªãã¹ãé¿ãããããšããç¶æ³ã¯ã¹ãã¬ã¹ã«ã€ãªãããšæããŸãã ããããç§ãã¡ãé²ãã¹ããŽãŒã«ã¯ã䟡å€ãããããã¯ããçã¿åºãããšãã§ãã éçºããŒã ã«ã¯è² è·ãããããŸãããã£ã¬ã¯ã¿ãŒãšããŠã¯ãµã³ã¯ã³ã¹ãã§ã¯ãªãããããã¯ãã®äŸ¡å€ãèŠãã¹ãã§ãã ç§ã¯åæ§ã®çµéšãéãã§ããã£ã¬ã¯ã¿ãŒã¯éçºç®ç·ãšãããã¯ããªãŒããŒã®ã©ã¡ãã®ç®ç·ãæã€ããšããšãŠãéèŠã ãšèº«ããã£ãŠåŠã³ãŸããã ãã£ã¬ã¯ã¿ãŒãšããŠåãå§ããåœåã¯ããã£ã¬ã¯ã¿ãŒã£ãŠæ£çŽããªããŠãéçºã¯é²ãããªâŠãšèªåã®äŸ¡å€ãèŠã€ããããã«ããŸããã ä»ã§ã¯ããããã¯ãã®äŸ¡å€ãæå€§åããããšãããã«éçºããŒã ãšãããã¯ããªãŒããŒã®äž¡è
ãæãé²ããããæ¹æ³ã暡玢ããããšããã£ã¬ã¯ã·ã§ã³ã®äŸ¡å€ã ãšæã£ãŠããŸãã ä»åŸã«åã㊠ä»ã®ç§ãæèããç®æšã«ããŠããããšã宣èšãããŠãã ããã ç§ã¯ããšã³ãžãã¢ããæè¡åã¯ãªãã ç§ã¯ãããŒã±ã¿ãŒãããåžå Žã®ææ¡ãäºæž¬ã«åŒ·ããªãã ç§ã¯ãå¶æ¥ãããçŸå Žã®èãæ¹ãçè§£ã§ããŠããªãã ããã©ãããŒã ã®æšé²åãé«ããéçºã«ãã£ãŠçã¿åºããããããã¯ãã䟡å€ãããã®ã«ããåã¯èª°ãããæãŠãããã«ãªãããã ãã®ããã«2ã€ã®ããšãæèããŠãããããšèããŠããŸãã ããŒã ãããžã¡ã³ãã«ã€ããŠåŠã³ãããŒã ã«åã£ãé²ãæ¹ã§ããã«æšé²åãäžããŠãã ããžãã¹ç®ç·ãåžžã«æèããéçºã§çãŸãããµãŒãã¹ã䟡å€ãããã®ã«ãªãããã«ãã£ã¬ã¯ã·ã§ã³ãè¡ã äžäººã®ãã£ã¬ã¯ã¿ãŒãšããŠããŒã ãäŒç€Ÿã«ãšã£ãŠãªããŠã¯ãªããªãååšã«ãªãããšãç®æããŠããŸãã æåŸã«äžèš åæ°ãåºããŠã奿¥çãã€å¥è·çš®ã«ãã£ã¬ã³ãžããããšãæ¬åœã«ããã£ããšæã£ãŠããŸãã èŸãæããããŸãããæ¥ã
èªå·±æé·ã§ããŠãããšå®æããããšãã§ããŠããŸãã ãã®å ŽãåããŠããŒã ã¡ã³ããŒãåããšã³ãžãã¢ã¡ã³ããŒãäžäŒã®çããã«æè¬ã®æ°æãäŒãããã§ãããã€ãæž©ããã¢ããã€ã¹ãããããšãããããŸãã ãããããæãããšå
æ°ãåæã«é 匵ããŸãïŒ
ãã®ãšã³ããªãŒã¯ 一休.comのカレンダー | Advent Calendar 2023 - Qiita ã®22æ¥ç®ã®èšäºã§ãã ã¬ã¹ãã©ã³ãããã¯ãUIéçºããŒã ã®éæ²»ã§ãã äžäŒã¬ã¹ãã©ã³ã®ããã³ããšã³ããæ
åœããŠããŸãã äžäŒã¬ã¹ãã©ã³ã§ã¯ Next.js App Router Remix ãæ¡çšããŠããŸãã user-first.ikyu.co.jp æšå¹Žã®çµããé ããå§ãŸã£ãäžäŒã¬ã¹ãã©ã³ã®ãªãã¥ãŒã¢ã«ã§ãããããã³ããšã³ã㯠Nuxt v2 (Vue 2) ãã Next.js App Router (React) ã«ããšãã倧ããªåãæ¿ãã§ãäžæ
£ãã ã£ãæã
㯠React åå¿è
ãã²ã£ãããèœãšã穎ãå
šéšèžã¿æããŠããŸããã äŸãã°ããã¥ãŒããªã¢ã«ã«åŸã£ãŠ useState ã§å€åããç¶æ
ãå®çŸ©ããŠãæåã¯ããã§å
šãŠãããŸããã£ãŠããŸãããæ©èœè¿œå ããŠããéçšã§ãã€ã®éã«ãäžã€å¢ãäºã€å¢ããããšã¯ãºã«ãºã«ãšã ãµãšæã«è¿ããšäžã€ã®ã³ã³ããŒãã³ãã«10åãã® useState ãçããŠããŸã£ãŠããŸããã ãã®çµæã && , || , ?? ã®ãªã³ãã¬ãŒããšäžé
æŒç®åã ããã® JSX ã ããæ®ããŸãããäœåºŠãäœåºŠãèªã¿è¿ããŠãã®ã«ãã³ã³ããŒãã³ããä»ã©ããªç¶æ
ã«ããã®ãããã£ã±ãææ¡ã§ããªã⊠ä»ã«ãã ãã±ããªã¬ãŒ ã³ãŒã«ãã㯠useEffect åé¡ ãšãã£ãèœãšã穎ãèžã¿æããŠããŸããã ããã³ããšã³ãã®ç¶æ
管çã£ãŠæ¬åœã«é£ããã§ãããã ãããããŠæ¬æ¥ã¯ React ç¶æ
ç®¡çæ¹åã®ç¬¬äžåŒŸãšã㊠useState æ¿«çšããã©ãæãåºããã®ãã«ã€ããŠã話ãããŸãã ã³ãŒã«ããã¯ã useEffect åé¡ã¯æ¥æä»¥éã®èšäºã§ã玹ä»ããäºå®ã§ãã useState ã®é£ãã ãŸãã¯äžçªåæ©çãªãšããããèããŠã¿ãŸãããã è€æ°ã®useStateããã¯ã䜿çšããå Žåãäºæããªãç¶æ
ã®çµã¿åãããçºçããå¯èœæ§ããããŸãã function Sample () { const [ show , setShow ] = useState ( false ); const [ disabled , setDisabled ] = useState ( false ); const toggle = useCallback (() => { setShow (( prev ) => ! prev ); } , [] ); const toggleDisabled = useCallback (() => { setDisabled (( prev ) => ! prev ); } , [] ); return ( <> < button onClick = { toggle } disabled = { disabled } > show < /button > < button onClick = { toggleDisabled } > disable < /button > < SampleModal show = { show } / > < / > ); } ãã®ã·ã³ãã«ãªäŸã§ã¯ãshowïŒã¢ãŒãã«è¡šç€ºçšïŒãš disabledïŒãã¿ã³ç¡å¹åçšïŒã®äºã€ã®ç¶æ
ã管çããŠããŸãã ãããããã£ãäºã€ãããªãã®ã« show === true && disabled === true ã®ããã«ããã¿ã³ãç¡å¹åãããŠããã«ãé¢ãããã¢ãŒãã«ã衚瀺ãããŠããããšããççŸããç¶æ
ã衚çŸã§ããŠããŸããŸããuseState ã§ç®¡çããç¶æ
ãå¢ããã°å¢ããã»ã©ãççŸããç¶æ
ãçãã§ããŸãå¯èœæ§ã¯é«ããªããŸãã ãã®åé¡ã解決ããããã«ã¯ãã³ã³ããŒãã³ãã®ç²åºŠãå°ããããuseState ã«ã¯ primitive å€ãå
¥ããæ§é åãããããŒã¿ãçšããŠãããããªãç¶æ
ãçãŸãªãããã«ããã®ãèªç¶ãªçºæ³ã§ãããã type State = Initial | Disabled | Modal type Initial = { type : 'Initial' disabled: false show: boolean } type Disabled = { type : 'Disabled' disabled: true show: false } type Modal = { type : 'Modal' disabled: false show: true modalData: ModalData } function Sample () { const [ state , setState ] = useState < State >( { type : 'Initial' , disabled: false , show: false } ) const open = useCallback (() => { setState ( { type : 'Modal' , modalData: 'data' , disabled: false , show: true } ) } , [ setState ] ) const toggleDisabled = useCallback (() => { if( state.disabled ) { setState ( { type : 'Disabled' , disabled: true , show: false } ) } else { setState ( { type : 'Initial' , disabled: false , show: false } ) } } , [ setState ] ) return ( <> < button onClick = { open } disabled = { state.disabled } > show < /button > < button onClick = { toggleDisabled } > disable < /button > < SampleModal show = { state.show } / > < / > ) useState + union åã§ã¯è¶³ããªãã£ã äžè¿°ããå®è£
ã®ããã«ãunion åã«ãã£ãŠäžæ£ãªç¶æ
ãäœãããªããªããŸããã é·ç§»ã¯ã€ãã³ããã³ãã©å
ã§æé»çã«èšè¿°ãããŸããäžèšã®ã¢ãŒãã«ã§ã¯ç¶æ
ã2ã€ãããªããã·ã³ãã«ãªå®è£
ãªã®ã§é·ç§»ã®å
šäœåãææ¡ã§ããŠããŸãããç¶æ
ã®æ°ãå¢ãé·ç§»ãè€éã«ãªããšé·ç§»ã®å
šäœãææ¡ããã®ãå°é£ã«ãªãã人çºçã«é·ç§»å
ãæ±ºå®ããããžãã¯ããã¹ãããå¿
èŠããããŸããçµæã誀ã£ãŠäžæ£ãªé·ç§»ãçŽã蟌ãå ŽåããããŸãã äŸãã°ãäžäŒã¬ã¹ãã©ã³ã§ã¯ç©ºåžç¢ºèªã«ã¬ã³ããŒãšããæ©èœããããŸãã 空åžç¢ºèªã«ã¬ã³ã㌠äžèšç©ºåžç¢ºèªã«ã¬ã³ããŒã®ç¶æ
é·ç§»å³ã¯ä»¥äžã®ããã«ãªããŸããé»è²ã§å²ãããŠããã®ãç¶æ
ã§ãç°è²ã§å²ãããŠããã®ãé·ç§»ã€ãã³ãã§ãã ã«ã¬ã³ããŒã®ç¶æ
é·ç§»å³ ç¶æ
ã7åãé·ç§»ã€ãã³ãã20åãããã€ãã³ããã³ãã©å
ã§ã®é·ç§»å
ãæ±ºããããžãã¯ãè€éã«ãªã£ãŠããŸãäžæ£ãªé·ç§»ãèµ·ãããŠããŸãå¯èœæ§ããããŸããã ãã®ãããªäžæ£ãªé·ç§»ã人çºçã§ã¯ãªãæ©æ¢°çã«é²ãããã«ãstate machine ãå°å
¥ããŸãã state machine ãšã¯ïŒ state machine ã¯è€æ°ã®ãç¶æ
ããšãç¶æ
éã®é·ç§»ãã§æ§æãããŸãã äžè¿°ãã web ç»é¢ã®ã·ããªãªãäŸã«ãããšããã©ãããªç¶æ
ãïŒéåžžã®ç¶æ
ïŒãããã¢ãŒãã«ãéããç¶æ
ããžã®é·ç§»ã¯ã show ãã¿ã³ãã¯ãªãã¯ããããšããã€ãã³ãã«ãã£ãŠè¡ãããŸãã ãã¢ãŒãã«ãéããç¶æ
ãã§ã¯å床 ãshow ã¯ãªãã¯ãã€ãã³ããçºçããŠãããã®ã€ãã³ãã«å¯Ÿå¿ããç¶æ
é·ç§»ã¯å®çŸ©ãããŠããªãã®ã§ããã以äžäœãèµ·ããŸããã ãŸãããã©ãããªç¶æ
ãããæåã« disabled ãã¿ã³ãæŒãã㊠ïŒdisable ã€ãã³ããçºç«ããŠïŒããã¿ã³ãç¡å¹åãããç¶æ
ãã«ãªããšãããã§ä»®ã« show ã€ãã³ããçºç«ããŠããåæ§ã« show ã€ãã³ãã«å¯Ÿå¿ããç¶æ
é·ç§»ãå®çŸ©ãããŠããªãã®ã§ãããã¿ã³ãç¡å¹ãªã®ã«ã¢ãŒãã«ãéããŠããŸãããšããççŸããç¶æ
ãçããŸããã ã¢ãŒãã«ã®ç¶æ
é·ç§»å³ state machine ã§ã¯ããããããå®çŸ©ããç¶æ
ãšãã®ç¶æ
éã®é·ç§»ããååšããªãã®ã§ãäºæããªãç¶æ
ã«é¥ãããšããããŸãããstate machine ãå°å
¥ãããšãã¢ããªã±ãŒã·ã§ã³ããžãã¯ãæç¢ºãã€å®£èšçã«å®çŸ©ã§ããã®ãéåžžã«é
åçãªãã€ã³ãã§ãã XState (state machine) ã®å°å
¥ state mcahine ãå°å
¥ããããã«ã XState ã䜿ã£ãç¶æ
ç®¡çæ¹æ³ãå°å
¥ããããšã決å®ããŸããã ãã¡ããä»ã®è§£æ±ºçããã£ããšæããŸãã äŸãã°ãåŒç€Ÿ CTO ã以åã玹ä»ãã TypeScript ã® discriminated union ïŒã¿ã°ä»ããŠããªã³åïŒã§ç¶æ
ãã颿°ã§é·ç§»ã衚çŸããææ³ã¯ãã®äžã€ã§ãããåŒç€Ÿãããã¯ãã§å®çžŸãããœãªã¥ãŒã·ã§ã³ã§ããããšã¯ééããããŸããã techplay.jp ãã ãçŸåšã®èªåéã§ã¯ãå¶çŽã®ãªãç¶æ³äžã§ããŸãåãå®çŸ©ããŠãç¶æ
ãå®å
šã«ã³ã³ãããŒã«ã§ãããšããèªä¿¡ã¯æãŠãŸããã§ãããstate machine ãã©ãã®äžå®å
šãªç©ãçã¿åºããŠããŸããªããäžå®ããã£ãã®ã§ãã XState ã§ããã° state machine ãæ£ããå®çŸ©ããããšã匷å¶ãããŸããæè¡ãšããŠã®ãã¬ãŒã ã¯ãŒã¯ã«çãŸãããæèã®ãã¬ãŒã ã¯ãŒã¯ãšããŠã¬ã€ãã¬ãŒã«ãæç€ºããŠãããç¹ãè©äŸ¡ããŸããã XState ãšã¯ïŒ stately.ai state machineãäœæããããšãã§ããéåžžã«é«æ©èœãªã©ã€ãã©ãªã§ãã äŸãã°ãããã³ããšã³ãã®ãµã³ãã«ãšããŠããçšãããã TODO ãªã¹ãã XState ã§å®è£
*1 ãããšä»¥äžã®ããã«ãªããŸãã type TodoList = { items: { id: number name: string completed: boolean }[] } type TodoEvent = Add | Toggle | Disable | Enable type Add = { type : 'ADD' item: { id: number name: string completed: boolean } } type Toggle = { type : 'TOGGLE' id: number } type Disable = { type : 'DISABLE' } type Enable = { type : 'ENABLE' } type TodoState = { value: 'ACTIVE' ; context: TodoList } | { value: 'INACTIVE' ; context: TodoList } export const machine = createMachine < TodoList , TodoEvent , TodoState >( { initial: 'ACTIVE' , states: { ACTIVE: { on: { ADD: { target: 'ACTIVE' , actions: assign (( ctx , event ) => ( { items: [ ...ctx.items , event.item ] } )), } , TOGGLE: { target: 'ACTIVE' , actions: assign (( ctx , event ) => ( { items: ctx.items.map (( item ) => item.id === event.id ? { ...item , completed: ! item.completed } : item ), } )), } , DISABLE: 'INACTIVE' , } , } , INACTIVE: { on: { ENABLE: 'ACTIVE' , } , } , } , } ) ãŸã state ãšã㊠TODO ã远å ããããã°ã«ã倿Žãå¯èœãªç¶æ
ã® ACTIVE ãšããªã«ãã§ããªãç¶æ
ã® INACTIVE ãå®çŸ©ããŸãã æ¬¡ã«ãå state ãåã€ãã³ããåãåã£ãæã«ã©ã®ç¶æ
ã«é·ç§»ããããããªãã¡ç¶æ
é·ç§»ã on ã§å®çŸ©ãããã®ç¶æ
é·ç§»æã®å¯äœçšãšããŠã®ããŒã¿æŽæ°ã actions ã§æå®ããããšã§ãstate machine ã宿ããŸãã XStateã§ã¯ãå
éšæ
å ±ãšã㊠context ïŒè©³ããããšã¯åŸã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãïŒãæã¡ãŸãã ADD ã€ãã³ãã§ã¯ context ã§ãã items ã« æ°ãã TODO ã远å ããŠããŸãã XState ã§å®çŸ©ãã state mahine ã§ã¯ã INACTIVE ã®ç¶æ
ã§ ADD ã TOGGLE ã®ã€ãã³ãã«å¯Ÿããç¶æ
é·ç§»ãå®çŸ©ããŠããªãã®ã§ã ããããªãç¶æ
ã«é·ç§»ããªãããšãä¿èšŒãããŸãã ã context context ãšã¯ãstate machine ãæ±ãç¶æ
ã®ã詳现ãããå€åããéšåããåžåããŠãè€éãªç¶æ³ã«å¯Ÿå¿ããä»çµã¿ã§ãã state machine ãå³å¯ã«ã¯æéç¶æ
æ©æ¢°ïŒFSM: Finite State MachineïŒã®ãæéãã¯ããããŸã§æ°åŠçãªãæéãã§ãã å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã管çããªããã°ãªããªãç¶æ
ã«çŽã¥ãããŒã¿ãæ¡ä»¶ãè€éã§ãæéç¶æ
æ©æ¢°ãåççã«é©çšãããšãããšããæéãã§ãã£ãŠãã人éã®èªç¥èœåã§ã¯ãšããŠãææ¡ããããªãèšå€§ãªããªãšãŒã·ã§ã³ãçã¿åºããŠããŸããŸãã æéç¶æ
æ©æ¢°ãçŸå®çã«å©çšããããã« ç¶æ
ãšãã®ç¶æ
ã«é¢é£ããããŒã¿ãåé¢ããŠãcontext ãšãã圢ã§ä¿åã»ç®¡çããŸãã äŸãã°ä»¥äžã®ããã«ããŠãŒã¶ãŒã®å
¥åãã¢ããªã±ãŒã·ã§ã³ã®çŸåšã®ç¶æ
ãªã©ãç¶æ
èªäœã§ã¯ãªããç¶æ
ã®ãå
容ãã衚ãããŒã¿ã®ããšã§ãã äºçŽããäººæ°æ¥æ äºçŽã®éã«éžæããæ¯æãæ¹æ³ 䜿çšããã¯ãŒãã³æ
å ± äºçŽå
¥åã®ç¶æ
é·ç§»å³ XState ã§ç®¡çãã¹ãã§ãªãç¶æ
XState ã§å
šãŠã®ç¶æ
ã管çãã¹ããšèšã£ãŠãããã§ã¯ãããŸããããã¿ã³ãæŒããšã¢ãŒãã«ã衚瀺ãããç¶æ
é·ç§»ã¯ãXState ã§ç®¡çããŠããŸããšåŽã£ãŠãªãŒããŒãšã³ãžãã¢ãªã³ã°ã«ãªã£ãŠããŸããŸãã ãŸãã以äžã®å Žåã¯ç¶æ
ãšããŠæã€ã¹ãã§ã¯ãããŸããã ç¶æ
é·ç§»ããç¬ç«ããŠãããå€ãæäœã®éçšã§å€åããªããã® äŸãã°ãAPI ã¬ã¹ãã³ã¹ã¯ state machine ã®é·ç§»ã«å€åããå€ã§ã¯ãªãã®ã§ XState ã§ç®¡çãã¹ãã§ã¯ãªããuseState ã§ç®¡çãã¹ãã§ãã XStateã§ç®¡çãã¹ãåºæºãšããŠã¯ 1ã€ã®ã³ã³ããŒãã³ãã§ useState ã3ã€ä»¥äžå®çŸ©ãããŠãã äœãã¢ã¯ã·ã§ã³ãèµ·ãããæã®é·ç§»å
ã2ã€ä»¥äžãã å Žåã ãšæã£ãŠãŸããïŒãããã¯ãã«ãã£ãŠåºæºã¯éããšæãã®ã§ãããŸã§ç®å®ã§ãïŒ XStateãå°å
¥ããŠè¯ãã£ãããš ããã³ããšã³ãã®æ¹ä¿®ã容æã«ãªã£ã state machine ã«ããããããªãç¶æ
ãã§ããªãããšãæ
ä¿ãããŠããã®ã§ãããã³ããšã³ãã®æ¹ä¿®ãããéã«å€§ãããã°ãèµ·ããªããªããŸããã å®è£
åã®ä»æ§ / ã¢ããªã³ã°ã®è°è«ãã§ããããã«ãªã£ã state machine ãç»é¢ã®ãã¡ã€ã³ã¢ãã«ãšãªãã®ã§ãç»é¢ãæ©èœãäœæããéã«ã©ã®ãã㪠state machine ã«ãããè°è«ããããšã§ãæå³ãããç»é¢ãæ©èœã®ã¢ããªã³ã°ã®è°è«ãã§ããããã«ãªããŸããã ææ XState ã«ãã state machine ãšããèãæ¹ã®ã¬ã€ãã¬ãŒã«ãã§ããããšã§ãæ¡ä»¶æãæå°éã«ãã state mahine ã®ã¡ã³ã¿ã«ã¢ãã«ã圢æãããŠããããã«æããŸãã ãŸããäžè¿°ããããã«å
šãŠ XState ã§ç®¡çãã¹ãã ãšã¯æã£ãŠãŸãããé©æé©æã§ XState ãããŸã掻çšããŠããããã§ãã ãããã« äžäŒã§ã¯ãããè¯ããµãŒãã¹ãäœã£ãŠããã仲éãåéããŠããŸãïŒ www.ikyu.co.jp ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããŸãã®ã§ããã²ãæ°è»œã«ãé£çµ¡ãã ããïŒ hrmos.co *1 : XState 4 ããŒã¹ã®ã³ãŒãã§ããXState 5ã«ã¯è¿æ¥äžã«ç§»è¡äºå®ã§ã
æŠèŠ ãã®èšäºã¯ äžäŒ.com Advent Calendar 2023 16æ¥ç®ã®èšäºã§ãã RESZAIKOéçºããŒã ã®æŸæã§ãã äžäŒã§ã¯åãµãŒãã¹æ¯ã«ãéçºäžã®ãµãŒãã¹ã®åäœã瀟å
ã§ç¢ºèªã§ããç°å¢ããããŸãã ããããmain(master)ãã©ã³ããšèªåçã«åæããŠããç°å¢ãšãç¹å®ã®ãã©ã³ããæå®ããŠå©çšã§ããç°å¢ã®2çš®é¡ããããŸãã ä»åãRESZAIKOã®æ°èŠãµãŒãã¹(äºçŽç»é¢)ã«å¯ŸããŠãã©ã³ããæå®ããŠãããã€ã§ããç°å¢ãäœæããã®ã§ããã®æ¹éãšåçç¹ãšä»åŸã«ã€ããŠèšè¿°ããŠãããŸãã çŸåšéçšäžã®äºçŽç»é¢ éçºç°å¢ãäœãçç± äžäŒã§ã¯é·ãããEKSäžã«è€æ°ã®ç°å¢ãçšæããŠããã©ã³ããæå®ãããšéçºç°å¢ã«ãããã€ããã·ã¹ãã ãå©çšãããŠããŸããã äžè¬çã«ãã®ãããªç°å¢ãæ§ç¯ããã®ã¯ä»¥äžã®ãããªçç±ãæããããŸãã åäœç¢ºèª ãã€ã¯ããµãŒãã¹ã§ãç°ãªããã©ã³ãå士ã®çµã¿åããã§åäœç¢ºèªãããã ããŒã«ã«ã ãšäœæ
ãåçŸããªã ãããã€ãã¡ãããšåãã確èªããã ä»äººãšææç©ã®å
±æ ãªãªãŒã¹ã§ããã»ã©åäœã«èªä¿¡ã¯ç¡ãããã¹ããŒã¯ãã«ããŒãšå
容ãå
±æããã æ¬ãµãŒãã¹ã§ã¯ Prisma ãå©çšããŠDBã®ã¹ããŒããã¢ããªã®ã³ãŒããšåããªããžããªã§ç®¡çããŠããããã è€æ°ã®æ°æ©èœãå¹³è¡ããŠéçºããŠããå Žåã«éçºç°å¢ã1ã€ã ãšãDBå®çŸ©ãè¡çªãããããŠå°æŽå€§å€ã§ãã ããã§ãè€æ°ã®éçºç°å¢ãäœæã§ããããã«ããŸããã æ¬ãµãŒãã¹ã¯åºç€ã«Google Cloudã® Cloud Run ã䜿çšããŠããŸãã Cloud Runã¯ç¹ã«èšå®ããªããã°ã¢ã¯ã»ã¹ãããæã ãã³ã³ãããèµ·åããããã«ãªã£ãŠããã®ã§ãEKSã䜿çšããå Žåããã¹ããã¯ãã³ã¹ããããŸãæ°ã«ããç°å¢ãå¢ãããŠãããŸãã å®çŸæ¹æ³ ãµãŒãã¯Cloud Runã§åããŠããŠããããã€ã¯ Github Actionsã§è¡ã£ãŠããŸãã ãã®ãããéçºç°å¢çšã®Github Actions WorkflowãäœæããŠãããŸãã ãããã€ãè¡ãGithub Actions Workflowã®äœæ æ¬èšäºã®äž»æšããå€ããã®ã§è©³ãã説æããŸãããã Google Cloudã«ã¯ Github Actionsãšé£æºããŠãããã€ãè¡ãããã®æ©èœ ãåçš®çšæãããŠããã®ã§ãåèã«ããŠWorkflowã®yamlãã¡ã€ã«ãäœæããŸãã name : backend.demo.create on : workflow_dispatch : inputs : name : required : true type : string description : "Environment name to deploy" jobs : build : runs-on : ubuntu-latest steps : - name : "Checkout" uses : actions/checkout@v3 # SecretããGCPã®èªèšŒçšã®jsonãèªã¿åºã - id : "auth" uses : "google-github-actions/auth@v0" with : credentials_json : "${{ secrets.gcp-dev-service-accont-key }}" - name : "Set up Cloud SDK" uses : "google-github-actions/setup-gcloud@v0" with : install_components : 'alpha,beta' # 以äžãã«ãã»ãããã€ã®èšè¿° Workflowã®åŒã³åºã Workflowã« workflow_dispatch ãå®çŸ©ããããšã§ã å€éšããREST APIã§WorkflowãåŒã³åºã ããšãã§ããŸãã éçºç°å¢çšã®ã¢ããªãäœæããŠããã¡ãããREST APIã§å¿
èŠã«å¿ããŠWorkflowãåŒã³åºããŠãããŸãã POST https://api.github.com/repos/test/test-repo/actions/workflows/backend.demo.create/dispatches Content-Type: application/json Accept: application/vnd.github+json Authorization: Bearer <TOKEN> X-GitHub-Api-Version: 2022-11-28 { "ref":"feature/branch-to-test", "inputs":{"name":"demo-1"} } å®è£
ãããéçš ãã©ã³ããããã€ãµãŒãã¹ç»é¢ ãããªæãã®ã¢ããªãäœæããŸããã ãã©ã³ãåãå
¥åã㊠Deploy ãæŒããšããã¢ç°å¢ã«è©²åœã®ãã©ã³ãããããã€ãããŸãã ãã€ã誰ããã©ã®ãã©ã³ãããããã€ããããèšé²ããããã«ãªã£ãŠããŸãã å逿©èœã¯ãŸã å®è£
ããŠããªãã®ã§ã䜿ãçµãã£ããmainãã©ã³ããæåã§é©çšããéçšã«ãªã£ãŠããŸãã åçãšå°æ¥ æè§Cloud Runã䜿ã£ãŠããã®ã«ãæ¢åã®ä»ãµãŒãã¹ã®ä»æ§ã«åŒãããããå®è£
ã«ããŠããŸããŸããã ç¹ã«ä»¥äžã®ç¹ãè¯ããªãã§ãã èšå®ãã¡ã€ã«ãã³ããããŠå¢ãããŠããã®ã§ãç°å¢ãå¢ããæ¯ã«åããããªèšå®ãã¡ã€ã«ãå¢ãã ç°å¢æ¯ã«ç€Ÿå
çšã®ãã¡ã€ã³( [env-name].dev.reszaiko.com ã®ãããª)ãäœã£ãŠããã®ã§ãç°å¢ãå¢ãã床ã«DNSãšSSLã®èšå®ãå¿
èŠã«ãªã ãã®ãããæ°è»œã«ç°å¢ã墿žãããäºãå°é£ã«ãªã£ãŠããŠãæ¢åã®åé¡ããã®ãŸãŸåŒãç¶ãã§ããŸãã 䜿ããªããªã£ãç°å¢ãæ»ãå¿ããŠãã®ãŸãŸå æãç¶ãã 空ããŠããç°å¢ããªãå Žåãä»ã®ç°å¢ã䜿ã£ãŠãã人ãšã³ãã¥ãã±ãŒã·ã§ã³ããŠèéããŠãããå¿
èŠããã ãã®ãŸãŸãããã€ç°å¢ãäœããªã ãã©ã³ããããã€ç°å¢ãšããŠãå
šãŠã®ãã©ã³ãã«å¯ŸããŠèªåçã«ãã¢ç°å¢ãäœæãç Žæ£ããã®ãçæ³ã§ãã ã³ã³ããã®ãã«ããDBããµãŒãã®çšæããããã€ã¯æ¢ã«Github Actionsã§è¡ãããã«ããŠããŸããã éçºç°å¢ãžã®ã¢ã¯ã»ã¹ã¯Cloud Routerãå©çšããŠæ¯ãåããŠããããã dev.reszaiko.com/[branch-name]/ ã®ããã«ç°å¢æ¯ã®ãã¹ã®è¿œå ãGithub Actionäžã§æ§ç¯ã§ããŸãã ãŸããç¹ã«éçºç°å¢ãå¿
èŠãšããªã軜埮ãªä¿®æ£ã«å¯ŸããŠãç¡å¶éã«ç°å¢ãäœãã®ãé²ãããã«ã以äžã®ææ®µãèããããŸãã dev-**** ã®ããã«ãç¹å®ã®prefixãæã€ãã©ã³ãã«å¯ŸããŠèªåã§ç°å¢ãäœã æ¢åã®ãããã€çšUIãæ¡åŒµããŠãç°å¢æ°ãå¢ããããæžããããã§ããããã«ãã åè
ã¯ãã©ã³ããæ¶ããã°èªåã§ç°å¢ãæ¶ããã®ã§ã䜿ããªããªã£ãç°å¢ãæ®ã£ãŠããŸããšããããããåé¡ãè§£æ¶ã§ããŸãã åŸè
ã¯UIäžã§ååšããç°å¢ã®ææ¡ãã¢ããªãžã®ãªã³ã¯ãDBã®ãªã»ãããªã©æ©èœã远å ããäºãã§ããŠäŸ¿å©ã§ãã éçºç°å¢ãäœããªããšé§ç®ãªã®ã ãããããã©ã³ããããã€ç°å¢ãå¿
èŠãããšããåé¡ããããŸãã éçºäžã®ãã©ã³ããé·æéå©çšããŠãããšæ¬çªç°å¢ãšã®ä¹é¢ã倧ãããªããmainãã©ã³ãã«ããŒãžããéã«å
¥å¿µãªãã§ãã¯ãå¿
èŠã«ãªããŸãã RESZAIKOã®äºçŽããŒã ã§ã¯ ãã©ã³ã¯ããŒã¹éçº ã®ããã« é »ç¹ã«ãªãªãŒã¹ããææ³ãå°å
¥ãããè°è«ããŠããŸããã ãã®ãããªææ³ã§ã¯éçºäžã®æ©èœã¯ãã£ãŒãã£ãŒãã©ã°ãå©çšããŠåºãåããã®ãé©ããŠããŸãã RESZAIKOã§ã¯ LaunchDarkly ãšãããã£ãŒãã£ãŒãã©ã°æ©èœãæäŸããŠãããSaasãå°å
¥ããŠããããã ã³ã¹ãããããŠãã©ã³ããããã€ç°å¢ãéçºããŠããããã¯ããã£ãŒãã£ãŒãã©ã°ãé©åã«å©çšããäœå¶ãæŽåããéçºç°å¢ã¯mainãã©ã³ããšåæãããã®ã ãã§éçšããŠããæ¹ããããããããŸããã ãŸãšã 䜿çšããŠããæè¡ããµãŒãã¹ã¯æ¥ã
æ°ããç©ãå°å
¥å¯Ÿè±¡ã«ãªãã®ã§ãæé©ãªéçºææ³ãšããã®ã¯ãã®æã«åãããŠæ€èšããå¿
èŠããããŸãã æ¬¡ã«èšäºãæžããšãã¯ããã©ã³ã¯ããŒã¹éçºã«åããããã£ãŒãã£ãŒãã©ã°ã®éçšæ³ãã¿ãããªã®ãæžããããã«é 匵ããŸãã äžäŒã§ã¯ãå
±ã«åããšã³ãžãã¢ãåéããŠããŸãã www.ikyu.co.jp ã«ãžã¥ã¢ã«é¢è«ã宿œããŠããã®ã§ããæ°è»œã«ãå¿åãã ããã hrmos.co