ãã®è¨äºã¯ãLayerX Tech Advent Calendar 2024 ã®9æ¥ç®ã®è¨äºã§ãã
æ¨æ¥ã¯ budougumi0617 ããã«ãããªã¯ã¨ã¹ããã°ããã«ã¦ã§ã¢ã«å¾ç¶ãã¸ãã¯ããæ å ±ã渡ãããã¨ãã®2ã¤ã®ã¢ããã¼ãã§ããã確ãã«ãªãã¨ãã課é¡æã¨ãæ¸å¿µã¯ããã¤ã¤ãã¡ããã¨æ¤è¨ããä¸ã§æ±ºãåã姿å¢ãè¯ããªã¨ããè¨äºã§ããã
ãã¹ã¦ã®çµæ¸æ´»åããã¸ã¿ã«åããããã«ãã¹ã¦ã®æ¥åæ´»åããã¸ã¿ã«åããããã³ã¼ãã¬ã¼ãã¨ã³ã¸ãã¢ãªã³ã°å®¤ã¢ããªã±ã¼ã·ã§ã³ãã¼ã ã® @yuya-takeyama ã§ãã
ã¢ããªã±ã¼ã·ã§ã³ãã¼ã ã¯ã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ãªã³ã°ã«å¯¾ããç解ã¨éçºåãæã¡ããæè¡ãã¤ããããã¨ã«ãã課é¡è§£æ±ºããã¦ãããã¼ã ã¨ãªã£ã¦ãã¾ãã
æ¨ä»ã¯ç¤¾å ã§å©ç¨ããå種 SaaS ã ã£ããæ§ã ãªæ¥åã®éã§ã®ã¹ã ã¼ãºãªãã¼ã¿é£æºã課é¡ã«ãªã£ã¦ããããã®è¾ºã®è©±ããã¦ããã¾ãã
ç´è¿ã§ãããã°ãã¤ãã³ãã§ã®ç»å£ãªã©ã§åæ§ã®ãããã¯ãæ±ã£ã¦ãã¾ãããããããä¸æ©é²ãã 話ã¨ãªã£ã¦ããã¾ãã
- çç£æ§ã¨ã¬ããã³ã¹ã両ç«ããã°ã«ã¼ã管çã®ãããSmartHRä¸ã®å±æ§æ å ±ãå ã«æ¬ä¼¼çãªABACã·ã¹ãã ãæ§ç¯ãã話
- Terraformã§å®ç¾ããHR Driven Provisioningã¨ã¢ã¯ã»ã¹å¶å¾¡ã®èªåå
tl; dr
- ãã¯ã©ã¯ä¸ã®ããã³ãæ å ±ã®ã¡ã³ããã³ã¹ãæå管çã ã£ãã¨ãããã SmartHR ããã®èªååæãããããã«ãã¾ãã
- ãããä½ãã«ããã£ã¦ãSmartHRã»ãã¯ã©ã¯éã ãã§ãªãããã®ä»è«¸ã ã®ãµã¼ãã¹ãã«ãã¼ã§ããããã«ã¨èããçµç¹æ å ±ãã¹ã¿ãä½ããªãã¢ããã¼ããé¸æãã¾ãã
- ãã®ã¢ããã¼ããå®ç¾ããã«ããã£ã¦ããã¼ã¿é£æºã®ããã®ãã¬ã¼ã ã¯ã¼ã¯ãè¨è¨ã»å®è£ ããSynthetix ã¨åä»ãã¾ãã
çµç¹æ å ±ãã¹ã¿ã¨ã¯
æ¬é¡ã«å ¥ãåã«ããã®è¨äºã«ããããçµç¹æ å ±ãã¹ã¿ãã¨ã¯ã©ããªãã®ãã«ã¤ãã¦ã§ããã ãæ確ã«ãã¦ããã¾ãã
ã¤ã³ã¿ã¼ãããä¸ã§æ¤ç´¢ããã¨ãçµç¹ãã¹ã¿ãã人äºãã¹ã¿ããªã©æ§ã ãªååã§å¼ã°ãã¦ããããã§ãã(ããããçµç¹æ å ±ãã¹ã¿ãã¨å¼ç§°ãã¦ããã±ã¼ã¹ã¯ããªãå°æ°æ´¾ã®ããã§ãããç§ã¯ãçµç¹æ å ±ããçµç¹æ å ±ãã¹ã¿ãã¨èªç¶ã¨å¼ãã§ããã®ã§ããã®ã¾ã¾ããã¾ã)
ä¸æ¦ãã®è¨äºã«ããã¦ã¯ä»¥ä¸ã®ãããªæ å ±ããã¼ã¿ãã¼ã¹åãããã®ããããã«æã£ã¦ããã ããã°ã¨æãã¾ãã
- ä¼ç¤¾ã«æå±ãã人ã«é¢ããæ
å ±
- 社å¡ãã¯ãããæ¥åå§è¨ãæ´¾é£ç¤¾å¡ãªã©ãå«ãã¦ã社å ã§ã®æ¥åã«æºãã人ã ã®ããããæ å ±ãéç´ãã
- ã©ããã£ãæ å ±ãæã¤ã¹ãããã¯è¦ä»¶ã«ãã£ã¦ç°ãªãããä¸è¬çã«ã¯ååã社å¡çªå·ã社å¡ã¨ãã¦ã®ã¡ã¼ã«ã¢ãã¬ã¹ãæå±é¨ç½²ãå½¹è·ãè·ç¨®ãªã©ãå«ã
- ä¼ç¤¾ã«åå¨ãã大å°æ§ã
ãªçµç¹ã«é¢ããæ
å ±
- äºæ¥é¨ãé¨ã室ãã°ã«ã¼ãããã¼ã ãªã©ãªã©
- ããããæã¤ååãé¨ç½²ã³ã¼ã
- ããã¦ãããã®è¦ªåé¢ä¿ãçµç¹å³ã®ããªã¼ã表ç¾ããããã«å¿ è¦ãªæ å ±
- æå±æ å ±ã«ããã¦ããé¨ç½²ã³ã¼ããç¨ãã¦ãã©ãã«æå±ããã®ããã表ç¾ãã
å´åã°ã«ã¼ãã® SaaS 管ç大å¤åé¡
以åãããå´åã°ã«ã¼ãã®ã¡ã³ãã¼ãããæåã§ç®¡çãã¦ãã SaaS ãå¤ãã¦å¤§å¤ãã¨ããç¸è«ãããã£ã¦ãã¾ããããã¨ãã¨ãå´åã°ã«ã¼ãã§ã¯ä¸»ã«ä»¥ä¸ã® SaaS ãéç¨ãã¦ãã¦ãã¡ã³ãã¼ã®å ¥ç¤¾æã«ã¯ã¢ã«ã¦ã³ãæå¾ ãããããç°åãçºçããã¨ããã«åããã¦æå±æ å ±ãå¤æ´ãããã¨ããã¨ããã«å·¥æ°ãåããã¦ãã¾ããã
- ãã¯ã©ã¯ (社å ã§ã®ç³è«ãçµè²»ç²¾ç®ããã®ä»é¢ä¿ããçµçæ¥åç)
- SmartHR (å´å管çã人äºç®¡ç)
- æå¤æ 管çãµã¼ãã¹
å¤æ ã«ã¤ãã¦ãå æ¥çºè¡¨ã®ãã£ãéããã¯ã©ã¯å¤æ ã¨ãããµã¼ãã¹ããªãªã¼ã¹ããã¾ããã
LayerXã«ããã¦ã¯ç¾å¨ããã¯ã©ã¯å¤æ å°å ¥ã®ããã®ç§»è¡æéã¨ãªã£ã¦ãããéãç¡ãå®å ¨ã«ç§»è¡ãå®äºã¨ãªãã¾ãããããå®äºããã¨ããã¨ãã¨å¤æ ã«ä½¿ã£ã¦ãããµã¼ãã¹ä¸ã®ããã³ãæ å ±ã®ã¡ã³ããã³ã¹ã¯å½ç¶ä¸è¦ã¨ãªãã¾ãã
æ®ã 2 ã¤ã®ãã¡ããã¯ã©ã¯ã¯ç³è«çã«å¿ è¦ãªç²åº¦ã§ã®ã¿çµç¹æ å ±ãç»é²ããã¦ããã®ã«å¯¾ããSmartHR ã«ã¯åºæ¬çã«çµç¹å³ä¸ã®æ å ±ãã»ã¼å®å ¨ãªå½¢ã§ç»é²ããã¦ãã¾ããã¨ãããã㧠SmartHR ããèªåã§ã®ãã¼ã¿åæãè¡ãããã«ããã°ãå´åã°ã«ã¼ãçã«ã¯çµç¹æ å ±ã®å¤æ´ã«åããã¦ã¡ã³ããã³ã¹ãå¿ è¦ãªãµã¼ãã¹ã¯ SmartHR ã ãã¨ãããã¨ã«ãªãã¾ãã
ãã¼ã¿é£æºã®ããã®ã¢ããã¼ããèãã
å´åã°ã«ã¼ãã®é¢ä¿è ã¯ããä½äººãã¨è©±ãã¦ããã¯ã©ã¯ä¸ã®ããã³ãæ å ±ã¯ SmartHR ããåæãããã¨ãããã¨èªä½ã¯æ±ºã¾ããã©ãä½ã£ã¦ããããéã«è©±ãã¦ããä¸ã§ãä¸é·ã® @kanny ãããããä»å¾çµç¹æ å ±ã®åæè¦æ±ã¯ä¸å®é«ã¾ã£ã¦ãããã·ã³ãã«ã« 1:1 ã§é£æºããããã¯ä¸éãã¼ãã«ãæãå½¢ã®ã»ããè¯ãããããªãããã¨ããã¢ããã¤ã¹ããããã¾ããã
ããã¾ã§ã«ãã³ã¼ãã¬ã¼ãã¨ã³ã¸ãã¢ãªã³ã°å®¤å ã§ãçµç¹æ å ±ãã¹ã¿æ¬²ãããããçãªè©±ããã¦ãããã¨ã¯ããã¾ãããããã¨ä¼¼ã¦ããé¨åãããã¨ã¯æãã¤ã¤ãè¨è¨ãç·´ã£ã¦ãããã¡ã«ãç®æãã¹ãã¢ããã¼ãã¯ä»¥ä¸ã® 2 ã¤ããããªãã¨ãããã¨ãå°ããã¤è¦ãã¦ãã¾ããã
ã¢ããã¼ã 1: ãçµç¹æ å ±ãã¹ã¿ãã¨å¼ã°ãããã¼ã¿ãã¼ã¹ã«å ¨ã¦ã®æ å ±ãéç´ãããããä¸å¿ã«æ§ã ãªæ¥åãèªååãè¡ã
ä¼ç¤¾ã大ãããªã£ã¦ããã¨ãã³ã¼ãã¬ã¼ãé¨éã®æ¥åãå°ããã¤ç´°ååãã¦ããéç¨ã®ä¸ã§ãããããã®é¨ç½²ãã¨ã«æ¥åããã¼ã¿ãåããã¦ããã®ã¯ããããã¨æãã¾ãããã¼ã¿ã MECE ã«åãããã®ãªãè¯ãã®ã§ãããå®éã«ã¯ä¼¼ããããªãã¼ã¿ãéè¤ãã¦ç®¡çãã¦ããããæãæ¼ãããã£ããããã¨æãã¾ãã
ä¾ãã°ã³ã¼ãã¬ã¼ãã¨ã³ã¸ããªã³ã°å®¤ã§ã¯ IdP ã¨ã㦠Microsoft Entra ID ã管çãã¦ãããä¼ç¤¾ã¢ã«ã¦ã³ãã¯éç¨å½¢æ ã«é¢ä¿ãªãçºè¡ããã®ã§åºæ¬çã«å ¨å¡ç¶²ç¾ ããã¦ã¯ãã¾ãããé¨ç½²æ å ±ãããã¸ã®æå±æ å ±ãæã£ã¦ããããã§ã¯ããã¾ãããä¸æ¹ãSmartHR ã«ã¯é¨ç½²æ å ±ã»æå±æ å ±ã¯æã£ã¦ãã¾ãããç´æ¥éç¨é¢ä¿ã®ãªãã¡ã³ãã¼ã«ã¤ãã¦ã¯ããããç»é²ããã¦ãã¾ããã
ããããåé¡ã解決ããã¢ããã¼ãã¨ãã¦ãããè¨ãããã®ã¯ Single Source of Truth ã¨ãã¦ã®çµç¹æ å ±ãã¹ã¿çãªä½ããæã¤ãã¨ã§ãããã
æ§ã ãªæ¥åã®ä¸å¿ã«ãã®çµç¹æ å ±ãã¹ã¿ããããæ¥åã®éç¨ã§å¿ è¦ã«å¿ãã¦ãã¼ã¿ãç»é²ã»æ´æ°ããããããããæ§ã ãªèªååãè¡ããã¨ãããã®ã§ãã
ããã¯ã¤ã¡ã¼ã¸ã¨ãã¦ã¯ç¾ãããçæ³çãªç¶æ ã«æãã¾ããã§ãããå®ç¾ããã®ã¯ä¸¦å¤§æµã®ãã¨ã§ã¯ããã¾ãããé¢é£ããæ¥åããã®ããã®ã·ã¹ãã ããã®ããã«å ¨ã¦è¿½å¾ããå¿ è¦ãããããã§ãã
ã¢ããã¼ã 2: ãçµç¹æ å ±ãã¹ã¿ãã¯ä¸æ¦è«¦ãã¦ãåæãããã¼ã¿ãä¸ç®æã«éãã¦ããããå ã«æ§ã ãªæ¥åãèªååãè¡ããããã«ãã
Single Source of Truth ããèªä½ããããªãä½ããã¨ããã¨ã¨ã¦ã大å¤ã§ãããã¾ãã¯ç¤¾å ã«æ£é¸ãã¦ããæ§ã ãªãã¼ã¿ãããéãããã¨ã§ãå°ãã㤠Single Source of Truth ãããä½ããè¦ãã¦ããã®ã§ã¯ãªãããã¨ããã¢ã¤ãã£ã¢ã§ãã
ãã®ã¢ããã¼ããèãã¦ããä¸ã§ãæåã«ä»¥ä¸ã®ãããªå³ãæ¸ãã¾ããã (社å ã®å®éã®ãã®ããæ å ±ãè½ã¨ãã¦ãä¼ããããããã®ã«ãã¦ãã¾ã)
å³ä¸ã® ABAC Generator ã¨ããã®ã¯åè¿°ã®ããã°è¨äºã«ã¦ç´¹ä»ããã¦ããã®ãã®ã§ããã¯ã©ã¯ Sync ã¨ããã®ãä»åã®è¨äºã§ç´¹ä»ãã¦ããåæå¦çã§ãã
ãªãããã®å³ã¯ããã¾ã§ãããããä½ã£ã¦ããããçæ³ç³»ã§ãããABAC Generator ã¯ç¾ç¶ã¾ã Microsoft Graph API ã¨ç´æ¥ããã¨ããããå®è£ ã®ã¾ã¾ã§ãã
çµç¹æ å ±ãã¼ã¿é£æºãã¬ã¼ã ã¯ã¼ã¯ Synthetix
ãã®å³ã«ç¤ºãããã¬ã¼ã ã¯ã¼ã¯ã Synthetix ã¨åã¥ãã¾ãããååã®ç±æ¥ã¯ä»¥ä¸ã®åèªãå ã«ãLayerX ã® X ãããã¯ã¹ãã¦ä½ã£ãé èªã§ã:
- synthetic: çµ±åçãª
- synthesize: åæãã
- synchronize: åæããã
ä¸è¨ã§ããã¨çµç¹æ å ±ã® ETL ãã¤ãã©ã¤ã³ã¿ãããªæãã§ããå種 SaaS ãã Extract ãããã¼ã¿ããã¼ã¿ã¢ãã«ã«ãããã£ã¦ Transform ãããã¼ã¿ã¹ãã¢ã« Load ãã¦ããã®ãã¼ã¿ã¹ãã¢ä¸ã®ãã¼ã¿ãå ã«æ§ã ãªå¦çãå®è¡ããããã«ããã°ããã¼ã¿ã½ã¼ã¹é¨åã® SaaS ãä¹ãæãããã¨ããã£ãã¨ãã¦ãå½±é¿ç¯å²ãéå®çãªãã®ã«ã§ãã¾ãã
ãããã Embulk ãªã©ã§å®è£ ãããã¨ãã§ããªãã¯ãªãã¨æãã¾ãããç§èªèº«ç¹å¥ Embulk ã®çµé¨ãããããã§ããªãã®ã§ãTypeScript ã® monorepo ã¨ãã¦ç´ æ´ã«å®è£ ãã¾ããã
ã¾ã loader ã¨å¼ã°ããã³ã³ãã¼ãã³ããå種 SaaS ã ã£ãããä½ããã®ãã¼ã¿ãã¼ã¹ (ææ¸ãã®ã¹ãã¬ããã·ã¼ããªã©ãå¯) ãªã©ãããã¼ã¿ãèªã¿è¾¼ã¿ã¾ããloader ã¯ãã¼ã¿ãèªã¿è¾¼ãã®ã«å¿ è¦ãªã¯ã©ã¤ã¢ã³ãã©ã¤ãã©ãªã¨ãä¸å åããããã¼ã¿ã¢ãã«ã表ç¾ãã schema ã¨ããããã±ã¼ã¸ã«ä¾åãã¾ãã
ãã㦠schema ã¯äººãé¨ç½²ãªã©ãçµç¹æ å ±ã表ç¾ããããã®ç¤¾å æ¨æºã®ã¹ãã¼ãã§ããã¹ãã¼ãã®å®ç¾©ã«ã¯ zod ã使ã£ã¦ãã¾ãã
loader ã«ãã£ã¦åºåããããã¼ã¿ãå¦çããã®ã¯ processor ã¨å¼ã°ããã³ã³ãã¼ãã³ãã§ããå processor ã¯ãçµç¹æ å ±ã«ã¢ã¯ã»ã¹ããéã¯ååã¨ã㦠loader ã«ãã£ã¦åºåããããã¼ã¿ã®ã¿ãå ã«æ§ã ãªå¦çãè¡ãã¾ãã
ç¾å¨ã¯å ¨ã¦åä¸ãã¹ãä¸ã§å ¨ã¦å®è¡ãã¦ããããã¼ã¿ã¯æ¹è¡åºåãã® JSON ã¨ãã¦ãã¡ã¤ã«ã«æ¸ãåºãã¦ããã ãã§ããå®è¡éå§æã« ULID ã®ãã£ã¬ã¯ããªãçæããloader ãã¨ã«ãµããã£ã¬ã¯ããªãä½æãããã¼ã¿ç¨®å¥ãã¨ã®ãã¡ã¤ã«ãæã¡ã¾ãã
01JEMSZPVE8VB3W4Z8976TAKX6/ âââ smarthr/ âââ people.json âââ departments.json âââ memberships.json
ããã¯ä½ããã®ãã¼ã¿ãã¼ã¹ã«ãã¦ãè¯ãã£ãã®ã§ãããã¹ãã¼ãã¯ã¾ã 試è¡é¯èª¤ãã¦ãã段éã§ã¯å¤æ´ããããå½¢ãè¯ããªã¨æããTypeScript ã®ã³ã¼ãã ãã§å®çµããããã«ä¸æ¦ãã®ãããªå½¢ã«ãã¦ãã¾ãã
Synthetix ã®å±æ
ã¨ãããã㧠SmartHR ãããã¯ã©ã¯ã¸ã®çµç¹æ å ±ã®åæãã両ãµã¼ãã¹ã® API ã使ã£ã¦ Synthetix ä¸ã«å®è£ ãã¾ããããã§ã«æ°ã¶æã®éç¨ãè¡ãªã£ã¦ããç¶æ ã§ãã
ã¨ã¯ãããç¾å¨ã¯ SmartHR ä¸ã®æ å ±ãå¤å°ã®å¤æãå ããä¸ã§ãã¯ã©ã¯ããã³ãä¸ã«ãå ¥ãç´ãã¦ããã ããªã®ã§ããã㯠Synthetix ããªãã¦ãå®ç¾ã§ãããã¨ã§ãã
ä»å¾ã¯ Synthetix ã§æ¬æ¥ããããã£ã以ä¸ã«ãåãçµãã§ããã¾ãã
ç´æ¥éç¨ã¡ã³ãã¼ã¨æ¥åå§è¨ã¡ã³ãã¼ããã¼ã¿ä¸çµ±åãã¦æ±ããããã«ãã
SmartHR ã«ã¯åºæ¬çã«éç¨é¢ä¿ã®ããã¡ã³ãã¼ã ããç»é²ããã¾ãããæ¥åå§è¨ã¨ãã¦æºãã£ã¦ããã ãã¦ããæ¹ã ã®ãã¼ã¿ã¯ç»é²ããã¾ãããSmartHR ã¯å´å管ççã®ããã«ä½¿ã£ã¦ããã®ã§ããã®ç¹ã§ã¯ãããããã®ãªã®ã§ãããå è¿°ã®éã ABAC Generator ã¨ãããã¼ã«ã§ã¯çµç¹æ å ±ã®ãã¼ã¿ã½ã¼ã¹ã¨ãã¦æ±ã£ã¦ãããããã«æ¥åå§è¨ã¡ã³ãã¼ã¯å«ã¾ãã¦ããªããã¨ã«ãªãã¾ãã
ããã¾ã§ã®è¨äºã»çºè¡¨çã§ã¯è©±ã¨ãã¦ããããããªãã®ã§çãã¦ãã¾ããããããã¯éç¨ä¸ã¯ã¨ã¦ã大ããªãã¤ã³ãã§ããæ¥åå§è¨ã¡ã³ãã¼ã«ã¤ãã¦ã¯æå±æ å ±ãå ã«ããã°ã«ã¼ãã¸ã®å²ãå½ã¦ãã§ããªãã®ã§ãå¥éåå¥ã§ã®å²ãå½ã¦ãè¡ã£ã¦ãã¾ãã
ããããããã«ã¯äººäºã»ã³ã¼ãã¬ã¼ãã¨ã³ã¸ãã¢ãªã³ã°å®¤ã»æå±ããé¨ç½²ã¨ãã3é¨ç½²ã§ã®ç´°ããããã¨ããçºçãããã®ã§ããå¿ è¦ãªä½æ¥èªä½ã¯ããã¾ã§æéããããããã§ã¯ãªãã§ããããã¯ãã³ãã¥ãã±ã¼ã·ã§ã³ãçºçããã¨èªèããããªãããã«æ°ã使ã£ããããå¿ è¦ããããããã¹ãæ¼ãã®å¯è½æ§ãé«ã¾ãã¾ãã
ããã解æ¶ããã«ã¯ãåæã¨ãã¦ã®æ¥åå§è¨ã¡ã³ãã¼ãæ ¼ç´ãããã¼ã¿ãã¼ã¹ãè¨è¨ã»å®è£ ããå¿ è¦ãããã¾ããããã¦æ¢åã®ã¢ã«ã¦ã³ãçºè¡ããã¼ãããã¾ãæ¥ç¶ãã¦ããã¼ã¿ãé©åã«ã¡ã³ããã³ã¹ããããããªæ¥åããã¼ãæ§ç¯ããå¿ è¦ãããã¾ãã
ã§ããä»ã¯ããããã¡ããã¨ä½ããã£ã¦ããã®ãã¼ã¿ãã¼ã¹ç¨ã® loader ã Synthetix ä¸ã«å®è£ ããã°ãæ¥åå§è¨ã¡ã³ãã¼ãç´æ¥éç¨ã¡ã³ãã¼åæ§ã«èªåçã«ã°ã«ã¼ãã¸ã®å²ãå½ã¦ãè¡ãããããã«ãªãã¾ãã
ã¾ã¨ã
ã¨ãã£ãå ·åã«ãã³ã¼ãã¬ã¼ãã¨ã³ã¸ãã¢ãªã³ã°å®¤ã§ã¯ã社å å ¨ä½ã«é¢ããæ¥åæ´»åããã¸ã¿ã«åããåäºæ¥é¨ãçç£æ§é«ãããã¤ã»ãã¥ã¢ã§çµ±å¶ã®ã¨ããç¶æ ã§åãããããã½ããã¦ã§ã¢ã»æ¥åããã¼ã®ä¸¡é¢ããåãçµãã§ãã¾ãã
èå³ããæ¹ã¯æ¯é以ä¸ããã«ã¸ã¥ã¢ã«é¢è«çãå¿åãã ãã:
- ãå ±éãã³ã¼ãã¬ã¼ãã¨ã³ã¸ãã¢ï¼ã½ããã¦ã§ã¢ï¼
- ãå ±éãã³ã¼ãã¬ã¼ãã¨ã³ã¸ã㢠ï¼ITåºç¤ï¼
- ãå ±éãæ å ±ã»ãã¥ãªãã£ããã¸ã¡ã³ãæ å½
ææ¥ã®æ å½ã¯ ken5scal ããã§ããå æ¥ã®å¤§çµ±é 令ã®è©±ã®ç¶ãã§ããããï¼ä»ã§ã¯ãªããªãè¦ãããªãã¾ã¨ããªã®ã§ãããè¦ãã§ãã¯ï¼