å éšããŒã«ã®ç£æ»ãã°ïŒæçãªå€æŽå±¥æŽãã¿ãŒã³
å éšããŒã«åãã®å®è·µçãªç£æ»ãã°ïŒCRUDããšã«èª°ããã€äœããããã远跡ããå·®åãå®å šã«ä¿åãã管çè åãã®ã¢ã¯ãã£ããã£ãã£ãŒãã衚瀺ããŸãã

ãªãå éšããŒã«ã«ç£æ»ãã°ãå¿ èŠã§ãã©ãã倱æããã¡ã
å€ãã®ããŒã ã¯äœãåé¡ãèµ·ããŠããç£æ»ãã°ã远å ããŸãã顧客ã倿Žãäºã£ãããè²¡åæ°å€ãå€ãã£ãããç£æ»äººããèª°ãæ¿èªããã®ãïŒããšèããŠãããããå Žé¢ã§ãããã®æç¹ã§å§ãããšãéå»ãæççãªæãããïŒDBã®ã¿ã€ã ã¹ã¿ã³ããSlackã®ããåããæšæž¬ïŒããåæ§ç¯ããããšããŠããŸããŸãã
ã»ãšãã©ã®å éšã¢ããªã«ããããã³ã³ãã©ã€ã¢ã³ã¹ã«ååãã¯å®ç§ãªéèã·ã¹ãã ãæå³ããŸãããæå³ããã®ã¯å°ããªåãã«çŽ æ©ãäžè²«ããŠçããããããšã§ãïŒèª°ã倿Žããããã©ã®ã¬ã³ãŒãããäœãå€ãã£ããããã€èµ·ããããã©ãããæ¥ããïŒUIãã€ã³ããŒããAPIãèªååïŒããã®æç¢ºãããç£æ»ãã°ãå®éã«ä¿¡é Œã§ãããã®ã«ããŸãã
ç£æ»ãã°ã倱æããã®ã¯ããŒã¿ããŒã¹ã§ã¯ãªããã«ãã¬ããžã§ããåçŽãªç·šéã§ã¯å±¥æŽã¯åé¡ãªãããã«èŠããŠããäœæ¥ãæ©ããªããšããã«ç©ŽãéããŸããäžè¬çãªèœãšã穎ã¯äžæ¬ç·šéãã€ã³ããŒãã宿ãžã§ããéåžžã®ç»é¢ããã€ãã¹ãã管çæäœïŒãã¹ã¯ãŒããªã»ãããããŒã«å€æŽãªã©ïŒããããŠåé€ïŒç¹ã«ããŒãããªãŒãïŒã§ãã
ããäžã€ã®å€±æã¯ãããã°ãã°ãšç£æ»ãã°ãæ··åããããšã§ãããããã°ãã°ã¯éçºè åãã§ãã€ãºãå€ãæè¡çã§äžè²«æ§ã«æ¬ ããŸããç£æ»ãã°ã¯èª¬æè²¬ä»»ã®ããã®ãã®ã§ãäžè²«ãããã£ãŒã«ããæç¢ºãªè¡šçŸãéãšã³ãžãã¢ã«ãèŠããããå®å®ãããã©ãŒããããå¿ èŠã§ãã
å®çšäŸïŒãµããŒããããŒãžã£ãŒã顧客ã®ãã©ã³ã倿Žãããã®åŸèªååãè«æ±æ å ±ãæŽæ°ãããšããŸããåã«ãé¡§å®¢ãæŽæ°ããããšãããã°ããŠããªããšã誰ããã£ãã®ããã¯ãŒã¯ãããŒããã£ãã®ããã€ã³ããŒããäžæžãããã®ããå€å¥ã§ããŸããã
ã誰ãã»äœãã»ãã€ããçããç£æ»ãã°ã®ãã£ãŒã«ã
è¯ãç£æ»ãã°ã¯äžã€ã®ç®æšããå§ãŸããŸãïŒå©çšè ã1ä»¶ã®ãšã³ããªãèªãã°äœãèµ·ãããæšæž¬ããã«çè§£ã§ããããšã
誰ãè¡ã£ãã
倿Žããšã«æç¢ºãªã¢ã¯ã¿ãŒãä¿åããŠãã ãããå€ãã®ããŒã ã¯ããŠãŒã¶ãŒIDãã§æ¢ãŸããŸãããå éšããŒã«ã§ã¯è€æ°ã®å ¥å£ããããŒã¿ãå€ããããšããããããŸãã
ã¹ã¿ããããµãŒãã¹ã¢ã«ãŠã³ããå€éšé£æºã®éããå€å¥ã§ããããã«actor typeãšactor identifierãå«ããŠãã ãããããŒã ãããã³ããããå Žåã¯organizationãworkspaceã®IDãä¿åããŠã€ãã³ããæ··ãããªãããã«ããŸãã
äœãèµ·ããŠã©ã®ã¬ã³ãŒãã
ã¢ã¯ã·ã§ã³ïŒäœæãæŽæ°ãåé€ã埩å ïŒãšã¿ãŒã²ããããã£ããã£ããŸãã"ã¿ãŒã²ãã"ã¯äººéã«ãããããããã€æ£ç¢ºã§ããã¹ãã§ãïŒããŒãã«ããšã³ãã£ãã£åãã¬ã³ãŒãIDãå¯èœãªãçãã©ãã«ïŒæ³šæçªå·ãªã©ïŒãä»ããŠäžèЧæ§ãé«ããŸãã
å®çšçãªæå°ãã£ãŒã«ãã»ããïŒ
- actor_type, actor_idïŒactor_display_nameãããã°å°è¯ãïŒ
- action ãš target_type, target_id
- happened_at_utcïŒUTCã§ä¿åããã¿ã€ã ã¹ã¿ã³ãïŒ
- sourceïŒç»é¢ããšã³ããã€ã³ãããžã§ããã€ã³ããŒãïŒãš ip_addressïŒå¿ èŠãªãïŒ
- reasonïŒã»ã³ã·ãã£ããªå€æŽã®ããã®ä»»æã®ã³ã¡ã³ãïŒ
ãã€èµ·ããã
ã¿ã€ã ã¹ã¿ã³ãã¯åžžã«UTCã§ä¿åããŠãã ããããããŠç®¡çUIã§ã¯é²èЧè ã®ããŒã«ã«æå»ã§è¡šç€ºããŸããããã§ã¬ãã¥ãŒäžã®ãäºäººãå¥ã®æéãèŠãŠãããè°è«ãé¿ããããŸãã
ããŒã«å€æŽãè¿éãããŒã¿ãšã¯ã¹ããŒãã®ãããªãã€ãªã¹ã¯ãªæäœã«ã¯"reason"ãã£ãŒã«ãã远å ããŠãã ãããçãã¡ã¢ïŒäŸïŒããã±ãã1842ã§ãããŒãžã£ãŒãæ¿èªãïŒã ãã§ãç£æ»ãã¬ã€ã«ãéé³ãã蚌æ ã«å€ããŸãã
ããŒã¿ã¢ãã«ã®éžæïŒã€ãã³ããã° vs ããŒãžã§ã³å±¥æŽ
æåã®èšèšéžæã¯å€æŽå±¥æŽã®ãçå®ããã©ãã«ãããã§ããå€ãã®ããŒã ã¯æ¬¡ã®ã©ã¡ãããéžã³ãŸãïŒè¿œèšã®ã¿ã®ã€ãã³ããã°ããŸãã¯ãšã³ãã£ãã£ããšã®ããŒãžã§ã³å±¥æŽããŒãã«ã
ãªãã·ã§ã³1ïŒã€ãã³ããã°ïŒè¿œèšã®ã¿ã®actionsããŒãã«ïŒ
ã€ãã³ããã°ã¯ãã¹ãŠã®æäœãæ°ããè¡ãšããŠèšé²ããåäžããŒãã«ã§ããåè¡ã¯èª°ãããã€ãã©ã®ãšã³ãã£ãã£ã«è§Šããããšã倿Žã説æãããã€ããŒãïŒå€ãã¯JSONïŒãä¿åããŸãã
ãã®ã¢ãã«ã¯è¿œå ãåçŽã§ãããŒã¿ã¢ãã«ãé²åããŠãæè»ã§ãã管çè ã®ã¢ã¯ãã£ããã£ãã£ãŒãã«ãèªç¶ã«ããããããŸãïŒãã£ãŒãã¯åºæ¬çã«ãææ°ã®ã€ãã³ããæåãã ããã§ãïŒã
ãªãã·ã§ã³2ïŒããŒãžã§ã³å±¥æŽïŒãšã³ãã£ãã£ããšã®ããŒãžã§ã³ïŒ
ããŒãžã§ã³å±¥æŽã¢ãããŒã㯠Order_history ã User_versions ã®ããã«ãšã³ãã£ãã£ããšã«å±¥æŽããŒãã«ãäœããæŽæ°ããšã«å®å
šãªã¹ãããã·ã§ããïŒãŸãã¯æ§é åããã倿Žãã£ãŒã«ãïŒãšããŒãžã§ã³çªå·ãäœæããŸãã
ããã«ããæç¹ã§ã®ã¬ããŒãã£ã³ã°ïŒããã®ã¬ã³ãŒãã¯å é±ã®ç«ææ¥ã«ã©ãèŠãããïŒãïŒãç°¡åã«ãªããŸããç£æ»äººã«ããããããããããããã®ã¬ã³ãŒãã®ã¿ã€ã ã©ã€ã³ãèªå·±å®çµçã«èŠããå©ç¹ããããŸãã
éžã³æ¹ã®å®åçãªæéïŒ
- æ€çŽ¢å Žæãäžãæã«ããããç°¡åãªã¢ã¯ãã£ããã£ãã£ãŒããæ¬²ããããšã³ãã£ãã£ãå¢ããŠãæ©æŠãå°ãªããããå Žåã¯ã€ãã³ããã°ãéžã¶ã
- ã¬ã³ãŒãåäœã®ã¿ã€ã ã©ã€ã³ãæç¹åŸ©å ããšã³ãã£ãã£ããšã®å·®åãé »ç¹ã«å¿ èŠãªãããŒãžã§ã³å±¥æŽãéžã¶ã
- ã¹ãã¬ãŒãžãæ°ã«ãªããªãããã£ãŒã«ãã¬ãã«å·®åã®ããã€ãã³ããã°ã¯ãã«ã¹ãããã·ã§ãããã軜ãããšãå€ãã
- ã¬ããŒãã£ã³ã°ãäž»ç®çãªããããŒãžã§ã³ããŒãã«ã®æ¹ãã€ãã³ããã€ããŒããè§£æããããåãåãããç°¡åãªå Žåãããã
ã©ã¡ããéžãã§ãç£æ»ãšã³ããªã¯äžå€ïŒimmutableïŒã«ããŠãã ããïŒæŽæ°ãåé€ãè¡ããªãããšãäœãééããããã°ä¿®æ£ã説æããæ°ãããšã³ããªã远å ããŸãã
ãŸã correlation_idïŒæäœIDïŒãå ããããšãæ€èšããŠãã ããã1ã€ã®ãŠãŒã¶ãŒæäœãè€æ°ã®å€æŽãåŒãèµ·ããããšã¯ãããããŸãïŒäŸïŒ"ãŠãŒã¶ãŒç¡å¹å"ããŠãŒã¶ãŒæŽæ°ãã»ãã·ã§ã³åãæ¶ããä¿çã¿ã¹ã¯ã®ãã£ã³ã»ã«ãåæã«è¡ãïŒãå
±éã® correlation id ãããã°ããããã®è¡ã1ã€ã®èªã¿ãããæäœã«ã°ã«ãŒãã§ããŸãã
åé€ãäžæ¬ç·šéãå«ããŠCRUDæäœã確å®ã«ãã£ããã£ãã
ä¿¡é Œã§ããç£æ»ãã°ã¯1ã€ã®ã«ãŒã«ããå§ãŸããŸãïŒãã¹ãŠã®æžã蟌ã¿ã¯ç£æ»ã€ãã³ããæžãåäžã®çµè·¯ãéãããšãããã¯ã°ã©ãŠã³ããžã§ããã€ã³ããŒããã¯ã€ãã¯ç·šéç»é¢ãªã©ãéåžžã®ä¿åãããŒããã€ãã¹ããæŽæ°ããããšãã°ã«ç©Žãã§ããŸãã
äœæã§ã¯ã¢ã¯ã¿ãŒãšãœãŒã¹ïŒUIãAPIãã€ã³ããŒãïŒãèšé²ããŠãã ãããã€ã³ããŒãã¯ã誰ããã£ããããèŠå€±ããããå Žæãªã®ã§ããã¡ã€ã«ã飿ºç±æ¥ã§ãæç€ºç㪠"performed by" å€ãä¿åããŸããåæå€ïŒãã«ã¹ãããã·ã§ãããäž»èŠãã£ãŒã«ãã®ã»ããïŒãä¿åããŠãããšããã®ã¬ã³ãŒãããªãååšããã®ãã説æã§ããŸãã
æŽæ°ã¯åä»ã§ãã倿Žããããã£ãŒã«ãã ãããã°ããæ¹æ³ïŒå°ããèªã¿ãããéãïŒãšãä¿åããšã«ãã«ã¹ãããã·ã§ãããä¿åããæ¹æ³ïŒåŸã§åãåãããããããéãïŒããããŸããçŸå®çãªåŠ¥åçã¯ãéåžžã¯å·®åãä¿åããæš©éãéè¡æ å ±ãäŸ¡æ Œã«ãŒã«ã®ãããªã»ã³ã·ãã£ããªãªããžã§ã¯ãã«ã¯ã¹ãããã·ã§ããã䜿ãããšã§ãã
åé€ã¯èšŒæ ãæ¶ããŠã¯ãããŸããããœããåé€ïŒis_deleted ãã©ã°ãšç£æ»ãšã³ããªïŒãåªå
ããŠãã ãããããŒãåé€ãäžå¯é¿ãªããå
ã«ç£æ»ã€ãã³ããæžããåé€ãããã¬ã³ãŒãã®ã¹ãããã·ã§ãããå«ããŠäœãåé€ããããã蚌æã§ããããã«ããŸãã
埩å ïŒundeleteïŒã¯ç¬ç«ããã¢ã¯ã·ã§ã³ãšããŠæ±ã£ãŠãã ããã"Restore" 㯠"Update" ãšåãã§ã¯ãªããåé¢ããŠããããšã§ã¬ãã¥ãŒãã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ãç°¡åã«ãªããŸãã
äžæ¬ç·šéã§ã¯ã500ä»¶ãæŽæ°ããããšãã£ãææ§ãªåäžãšã³ããªã¯é¿ããŠãã ãããåŸã§ãã©ã®ã¬ã³ãŒããå€ãã£ãã®ãïŒãã«çããããã ãã®è©³çްãå¿ èŠã§ããå®çšçãªãã¿ãŒã³ã¯èŠªã€ãã³ãïŒã¬ã³ãŒãããšã®åã€ãã³ãã§ãïŒ
- 芪ã€ãã³ãïŒã¢ã¯ã¿ãŒã䜿çšããããŒã«/ç»é¢ããã£ã«ã¿ãããããµã€ãº
- ã¬ã³ãŒãããšã®åã€ãã³ãïŒã¬ã³ãŒãIDãbefore/afterïŒãŸãã¯å€æŽããããã£ãŒã«ãïŒãçµæïŒæå/倱æïŒ
- ä»»æïŒå ±éã®çç±ãã£ãŒã«ãïŒããªã·ãŒæŽæ°ãã¯ãªãŒã³ã¢ãããç§»è¡ïŒ
äŸïŒãµããŒããªãŒãã120ä»¶ã®ãã±ãããäžæ¬ã¯ããŒãºãããšãã芪ãšã³ããªã¯ãã£ã«ã¿ïŒ"status=open, older than 30 days"ïŒããã£ããã£ããåãã±ããã«ã¯ status open -> closed ã瀺ãåãšã³ããªãä»ãããšãã圢ã§ãã
ã¹ãã¬ãŒãžããã©ã€ãã·ãŒã®åé¡ãæããã«äœãå€ãã£ãããä¿åãã
ç£æ»ãã°ã¯ãããŸãã«å€ããä¿åããŠãŽãã®å±±ã«ãªãããããŸãã«å°ãªããŠæå³ããªããã®ã©ã¡ããã«é¥ããã¡ã§ããç®æšã¯ã³ã³ãã©ã€ã¢ã³ã¹äžåŒè·ã§ãã管çè ãèªã¿ãããèšé²ãäœãããšã§ãã
å®åçãªããã©ã«ãã¯ã»ãšãã©ã®æŽæ°ã§ãã£ãŒã«ãåäœã®å·®åãä¿åããããšã§ãã倿Žããããã£ãŒã«ãã ããã"before" ãš "after" ã®å€ã§ä¿åããŸããããã«ããã¹ãã¬ãŒãžãæãã€ã€ããã£ãŒãã®å¯èªæ§ãé«ãŸããŸãïŒ"Status: Pending -> Approved" ã¯å·šå€§ãªJSONãããã£ãšããããããã§ãã
äœæãåé€ãäž»èŠãªã¯ãŒã¯ãããŒé·ç§»ã«ã€ããŠã¯ãã«ã¹ãããã·ã§ãããä¿æããŠãã ãããã¹ãããã·ã§ããã¯éãã§ããã誰ãããåé€ãããåã®é¡§å®¢ãããã£ãŒã«ã¯æ£ç¢ºã«ã©ãèŠãããïŒããšå°ãããšãã«åœ¹ç«ã¡ãŸãã
æ©å¯ããŒã¿ã«ã¯ãã¹ãã³ã°ã«ãŒã«ãèšããŠãã ãããããããªããšç£æ»ããŒãã«ãããäžã€ã®æ©å¯ããŒã¿ããŒã¹ã«ãªã£ãŠããŸããŸããäžè¬çãªã«ãŒã«ïŒ
- ãã¹ã¯ãŒããAPIããŒã¯ã³ãç§å¯éµã¯çµ¶å¯Ÿã«ä¿åããªãïŒåã«"倿Žããã"ãšãã°ããïŒ
- ã¡ãŒã«ãé»è©±çªå·ãªã©ã®å人æ å ±ã¯éšåãã¹ã¯ãŸãã¯ããã·ã¥ããŠä¿åãã
- ããŒããèªç±èšè¿°ãã£ãŒã«ãã¯çããã¬ãã¥ãŒãš"changed"ãã©ã°ãä¿åãã
- é¢é£ãªããžã§ã¯ãã¯ãã®ãŸãŸã³ããŒããã®ã§ã¯ãªãåç §ïŒuser_id, order_idïŒããã°ãã
ã¹ããŒãã®å€æŽãç£æ»å±¥æŽãå£ãããšããããŸãããã£ãŒã«ãåãåŸã§å€æŽã»åé€ãããå Žåã«åããŠãå ã®ãã£ãŒã«ãããŒãšäžç·ã« "unknown field" ã®ãããªå®å šãªãã©ãŒã«ããã¯ãä¿åããŠãã ãããåé€ããããã£ãŒã«ãã«ã€ããŠã¯æåŸã«æ¢ç¥ã ã£ãå€ãä¿æãã€ã€ "field removed from schema" ãšããŒã¯ããŠããã£ãŒãã®æ£çŽããä¿ã¡ãŸãã
æåŸã«ããšã³ããªã人éåãã«ããŠãã ãããçã®ããŒïŒ"assignee_id"ïŒã®æšªã«è¡šç€ºã©ãã«ïŒ"Assigned to"ïŒãä¿åããå€ïŒæ¥æãé貚ãã¹ããŒã¿ã¹åïŒããã©ãŒãããããŠè¡šç€ºããããããŸãã
æé ïŒã¢ããªã®ãããŒã«ç£æ»ãã°ãå®è£ ãããã¿ãŒã³
ä¿¡é Œã§ããç£æ»ãã¬ã€ã«ã¯ãããå€ããã°ãéãããããšã§ã¯ãããŸãããéèŠãªã®ã¯ã©ãã§ãåãåå©çšå¯èœãªãã¿ãŒã³ã䜿ãã"äžæ¬ã€ã³ããŒãããã°ãããŠããªãã£ã" ã "ã¢ãã€ã«ã®ç·šéãå¿åã«ãªã£ãŠãã" ãšãã£ã穎ãäœããªãããšã§ãã
1) ç£æ»ããŒã¿ã¢ãã«ãäžåºŠã ãèšèšãã
ããŒã¿ã¢ãã«ããå§ãããããã倿Žãèšè¿°ã§ããå°ããªããŒãã«çŸ€ãäœããŸãã
ã·ã³ãã«ã«ä¿ã€ïŒã€ãã³ãçšããŒãã«1ã€ã倿Žãã£ãŒã«ãçšããŒãã«1ã€ããããŠå°ããªã¢ã¯ã¿ãŒã³ã³ããã¹ãã
- audit_event: id, entity_type, entity_id, action (create/update/delete/restore), created_at, request_id
- audit_event_item: id, audit_event_id, field_name, old_value, new_value
- actor_contextïŒãŸã㯠audit_event äžã®ãã£ãŒã«ãïŒ: actor_type (user/system), actor_id, actor_email, ip, user_agent
2) å ±æã®ãWrite + Auditããµãããã»ã¹ã远å ãã
åå©çšã§ãããµãããã»ã¹ãäœããæ¬¡ãè¡ããŸãïŒ
- ãšã³ãã£ãã£åããšã³ãã£ãã£IDãã¢ã¯ã·ã§ã³ãbefore/after ã®å€ãåãåã
- ããžãã¹çšã®å€æŽãã¡ã€ã³ããŒãã«ã«æžã蟌ã
- audit_event ã¬ã³ãŒããäœæãã
- 倿Žããããã£ãŒã«ããèšç®ã㊠audit_event_item è¡ãæ¿å ¥ãã
ã«ãŒã«ã¯å³æ Œã§ãïŒãã¹ãŠã®æžã蟌ã¿çµè·¯ããã®åããµãããã»ã¹ãåŒã¶ããšãUIãã¿ã³ãAPIãšã³ããã€ã³ãã宿çãªèªååãçµ±åãªã©ããã¹ãŠå«ã¿ãŸãã
3) ãµãŒããŒåŽã§ã¢ã¯ã¿ãŒãšæå»ãçæãã
"誰" ãš "ãã€" ããã©ãŠã¶ã«é Œããªãã§ãã ãããèªèšŒã»ãã·ã§ã³ããã¢ã¯ã¿ãŒãèªã¿åããã¿ã€ã ã¹ã¿ã³ãã¯ãµãŒããŒåŽã§çæããŸããèªååãå®è¡ãããå Žå㯠actor_type ã system ã«ããŠãžã§ãåãã¢ã¯ã¿ãŒã©ãã«ãšããŠä¿åããŠãã ããã
4) å ·äœçãªã·ããªãªã§ãã¹ããã
åäžã®ã¬ã³ãŒãïŒäŸïŒé¡§å®¢ãã±ããïŒãéžãã§ãäœæã2ã€ã®ãã£ãŒã«ãã®ç·šéïŒstatus ãš assigneeïŒãåé€ã埩å ãè¡ã£ãŠãã ãããç£æ»ãã£ãŒãã«ã¯5ã€ã®ã€ãã³ãã衚瀺ãããç·šéã€ãã³ãã®äžã«2ã€ã®æŽæ°ã¢ã€ãã ããããã¢ã¯ã¿ãŒãšã¿ã€ã ã¹ã¿ã³ããæ¯ååãæ¹æ³ã§åãŸã£ãŠããããšã確èªããŸãã
å®éã«äœ¿ãã管çã¢ã¯ãã£ããã£ãã£ãŒããæ§ç¯ãã
ç£æ»ãã°ã¯ã¬ãã¥ãŒãã€ã³ã·ãã³ã察å¿ã§äººãçŽ æ©ãèªããªããã°æå³ããããŸããã管çãã£ãŒãã®ãŽãŒã«ã¯ã·ã³ãã«ã§ãïŒãäœãèµ·ãããïŒããäžç®ã§çããå¿ èŠã«å¿ããŠçã®JSONã«æººããªãåœ¢ã§æ·±æãã§ããããã«ããããšã
ã¿ã€ã ã©ã€ã³è¡šç€ºããå§ããŸãããïŒææ°é ã§1è¡ã1ã€ãã³ãããããŠãCreatedããUpdatedããDeletedããRestoredãã®ãããªæå¿«ãªåè©ã䜿ããŸããåè¡ã«ã¯ã¢ã¯ã¿ãŒïŒäººãŸãã¯ã·ã¹ãã ïŒãã¿ãŒã²ããïŒã¬ã³ãŒãçš®å¥ïŒäººã«èŠãããååïŒãæå»ã衚瀺ããŸãã
å®çšçãªè¡ã®ãã©ãŒãããäŸïŒ
- åè© + 察象: "Updated Customer: Acme Co."ïŒäŸ: é¡§å®¢ãæŽæ°ïŒ
- ã¢ã¯ã¿ãŒ: "Maya (Support)" ãŸã㯠"System: Nightly Sync"
- æå»: 絶察æå»ïŒã¿ã€ã ãŸãŒã³ä»ãïŒ
- 倿Žã®èŠçŽ: "status: Pending -> Approved, limit: 5,000 -> 7,500"
- ã¿ã°: Updated, Deleted, Integration, Job
ãäœãå€ãã£ãããã¯ã³ã³ãã¯ãã«ä¿ã£ãŠãã ãããã€ã³ã©ã€ã³ã§1ã3ãã£ãŒã«ãã瀺ããããªã«ããŠã³ããã«ïŒããã¯ãŒãã¢ãŒãã«ïŒã§è©³çްã瀺ãããã«ããŸãïŒbefore/after å€ããªã¯ãšã¹ããœãŒã¹ïŒwebãmobileãAPIïŒãçç±/ã³ã¡ã³ããªã©ã§ãã
ãã£ã«ã¿ãªã³ã°ã¯ãã£ãŒãã䜿ãç©ã«ããããã«éèŠã§ããå®éã®è³ªåã«å¿ãããã£ã«ã¿ã«æ³šåããŠãã ããïŒ
- ã¢ã¯ã¿ãŒïŒãŠãŒã¶ãŒãã·ã¹ãã ïŒ
- ãªããžã§ã¯ãçš®å¥ïŒCustomers, Orders, PermissionsïŒ
- ã¢ã¯ã·ã§ã³çš®å¥ïŒCreate/Update/Delete/RestoreïŒ
- æ¥ä»ç¯å²
- ããã¹ãæ€çŽ¢ïŒã¬ã³ãŒãåãIDïŒ
ãªã³ã¯ã¯æš©éãããå Žåã®ã¿è¡šç€ºããŸããããé²èЧè ã圱é¿ãåããã¬ã³ãŒãã«ã¢ã¯ã»ã¹ã§ãããªã "View record" ã¢ã¯ã·ã§ã³ã衚瀺ããã§ããªãå Žå㯠"Restricted record" ã®ãããªå®å šãªãã¬ãŒã¹ãã«ãã瀺ããŠç£æ»ãšã³ããªèªäœã¯èŠãããŸãŸã«ããŸãã
ã·ã¹ãã ã¢ã¯ã·ã§ã³ã¯æç¢ºã«è¡šç€ºããŠãã ããã宿ãžã§ãã飿ºãã¯ã£ããã©ãã«ä»ãããŠã"Danaãåé€ãã" ãš "Nightly billing syncãæŽæ°ãã" ãåºå¥ã§ããããã«ããŸãã
ç£æ»ããŒã¿ã®æš©éãšãã©ã€ãã·ãŒã«ãŒã«
ç£æ»ãã°ã¯èšŒæ ã§ãããšåæã«æ©å¯ããŒã¿ã§ããããŸããç£æ»ãã°ã¯ã¢ããªå ã®å¥ã®ãããã¯ããšããŠæ±ã£ãŠãã ããïŒæç¢ºãªã¢ã¯ã»ã¹ã«ãŒã«ãå¶éãå人æ å ±ã®åãæ±ããå®çŸ©ããŸãã
誰ãäœãèŠãããããæ±ºããŠãã ãããäžè¬çãªåãæ¹ã¯æ¬¡ã®éãã§ãïŒã·ã¹ãã 管çè ã¯ãã¹ãŠãèŠããããéšéãããŒãžã£ãŒã¯èªåã®ããŒã ã®ã€ãã³ãã ããã¬ã³ãŒãææè ã¯èªåãæ¢ã«èŠãããšãã§ããã¬ã³ãŒãã«çŽã¥ãã€ãã³ãã ããèŠãããšããå ·åã§ããã¢ã¯ãã£ããã£ãã£ãŒããå ¬éãããªããã¹ã¯ãªãŒã³ã ãã§ãªããã¹ãŠã®è¡ã«åãã«ãŒã«ãé©çšããŠãã ããã
ãã«ãããã³ããéšé暪æããŒã«ã§ã¯è¡ã¬ãã«ã®å¯èŠæ§ãéèŠã§ããç£æ»ããŒãã«ã¯ããžãã¹ããŒã¿ãšåãã¹ã³ãŒãã³ã°ããŒïŒtenant_id, department_id, project_idïŒãæãããåãããã«ãã£ã«ã¿ã§ããããã«ããŸããäŸïŒãµããŒããããŒãžã£ãŒã¯èªåã®ãã¥ãŒå ã®ãã±ããã®å€æŽã¯èŠããããã人äºã®çµŠäžèª¿æŽã¯èŠãŠã¯ãªããªãããšããèšå®ã§ãã
å®åã§ãã䜿ãããåçŽãªããªã·ãŒïŒ
- 管çè ïŒããã³ãã»éšé暪æã§ãã«ç£æ»ã¢ã¯ã»ã¹
- ãããŒãžã£ãŒïŒdepartment_id ã project_id ã§éå®ãããç£æ»ã¢ã¯ã»ã¹
- ã¬ã³ãŒãææè ïŒèªåãé²èЧã§ããã¬ã³ãŒãã«çŽã¥ãã€ãã³ãã®ã¿é²èЧå¯
- ç£æ»äºº/ã³ã³ãã©ã€ã¢ã³ã¹ïŒèªã¿åãå°çšããšã¯ã¹ããŒãå¯ãç·šéäžå¯
- ãã®ä»ïŒããã©ã«ãã§ã¯ã¢ã¯ã»ã¹äžå¯
次ã«ãã©ã€ãã·ãŒã§ããäœãèµ·ãããã蚌æããã®ã«ååãªæ å ±ã¯ä¿æãã€ã€ããã°ãããŒã¿ããŒã¹ã®è€è£œã«ãªããªãããã«ããŸããSSNãå»çèšé²ãæ¯æã詳现ãªã©ã®æ©å¯ãã£ãŒã«ãã¯èµ€ååïŒã¬ãã¯ã·ã§ã³ïŒãåªå ããŠãã ããïŒãã£ãŒã«ãã倿Žãããããšã¯èšé²ãããå®éã®å€ã/æ°ããå€ã¯ä¿åããªãããŸãã¯ããã·ã¥ã§ç §åã§ããããã«ããããªã©ã§ãã
ã»ãã¥ãªãã£é¢é£ã€ãã³ãïŒãã°ã€ã³è©Šè¡ãMFAãªã»ãããAPIããŒçæãããŒã«å€æŽïŒã¯ããžãã¹å€æŽãšã¯å¥ã® security_audit ã¹ããªãŒã ã«å ¥ããããå³ããã¢ã¯ã»ã¹å¶åŸ¡ãšé·ãä¿ææéãèšå®ããããšãæ€èšããŠãã ããã
誰ããå人ããŒã¿åé€ãèŠæ±ããå Žåãç£æ»ãã¬ã€ã«ãäžžããšæ¶å»ããªãã§ãã ããã代ããã«ïŒ
- ãŠãŒã¶ãŒãããã¡ã€ã«ããŒã¿ãåé€ãŸãã¯å¿ååãã
- ãã°å ã®ã¢ã¯ã¿ãŒèå¥åãå®å®ãã代æ¿åïŒäŸïŒ"deleted-user-123"ïŒã«çœ®ãæãã
- å人ããŒã¿ãšããŠä¿åãããŠãããã£ãŒã«ãå€ããã¹ã¯ãã
- ã¿ã€ã ã¹ã¿ã³ããã¢ã¯ã·ã§ã³çš®å¥ãã¬ã³ãŒãåç §ã¯ã³ã³ãã©ã€ã¢ã³ã¹ã®ããã«ä¿æãã
ä¿æãæŽåæ§ãããã©ãŒãã³ã¹ïŒã³ã³ãã©ã€ã¢ã³ã¹å¯Ÿå¿ïŒ
æçšãªç£æ»ãã°ã¯åã«ãã€ãã³ããèšé²ãããã ãã§ã¯ãããŸãããã³ã³ãã©ã€ã¢ã³ã¹ã®ããã«ã¯ãååãªæéä¿æããããäºåŸæ¹ãããããŠããªãããåãåããã«è¿ éã«å¿ãããããã蚌æã§ããå¿ èŠããããŸãã
ä¿æïŒèª¬æã§ããããªã·ãŒã決ãã
ãªã¹ã¯ã«åã£ãã·ã³ãã«ãªã«ãŒã«ããå§ããŠãã ãããå€ãã®ããŒã ã¯æ¥åžžã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°çšã«90æ¥ãå éšã³ã³ãã©ã€ã¢ã³ã¹çšã«1ã3幎ãèŠå¶å¯Ÿè±¡ã¬ã³ãŒãã®ã¿é·æãéžã³ãŸããæèšããªã»ããããåºæºïŒéåžžã¯ã€ãã³ãæå»ïŒãé€å€é ç®ïŒä¿åãã¹ãã§ãªããã£ãŒã«ããå«ããã°ãªã©ïŒãæç¢ºã«æžããŠãããŸãããã
ç°å¢ããšã«ä¿ææéãå€ããã®ãäžè¬çã§ããæ¬çªã¯æé·ããã¹ãã¯ã»ãšãã©äžèŠããšããå ·åã§ãã
æŽåæ§ïŒæ¹ãããé£ãããã
ç£æ»ãã°ã¯è¿œèšã®ã¿ãšããŠæ±ã£ãŠãã ãããè¡ãæŽæ°ãããéåžžã®ç®¡çè ãåé€ã§ãããããŠã¯ãããŸãããããåé€ãæ³çèŠæ±ãããŒã¿ã¯ãªãŒã³ã¢ããã§çã«å¿ èŠãªãããã®åé€èªäœãã€ãã³ããšããŠèšé²ããŸãã
å®çšçãªãã¿ãŒã³ïŒ
- ãµãŒããŒã®ã¿ãç£æ»ã€ãã³ããæžããã¯ã©ã€ã¢ã³ãã¯æžããªã
- éåžžã®ããŒã«ã«ã¯ç£æ»ããŒãã«ã® UPDATE/DELETE æš©éãäžããªã
- ãŸããªããŒãžæäœã®ããã«å¥ã®ãbreak glassãããŒã«ãçšæãã
- 宿çã«ã¢ããªæ¬äœããŒã¿ããŒã¹å€ãžãšã¯ã¹ããŒãã¹ãããã·ã§ãããä¿åãã
ãšã¯ã¹ããŒããããã©ãŒãã³ã¹ãç£èŠ
ç£æ»äººã¯CSVãJSONãæ±ããããšãå€ãã§ããæ¥ä»ç¯å²ããªããžã§ã¯ãçš®å¥ïŒInvoice, User, TicketïŒã§ãã£ã«ã¿ã§ãããšã¯ã¹ããŒããçšæããŠãããšãããŒã¿ããŒã¹ãæã§æãå¿ èŠããªããªããŸãã
ããã©ãŒãã³ã¹ã®ããã«ã¯æ€çŽ¢æ¹æ³ã«åãããŠã€ã³ããã¯ã¹ã匵ã£ãŠãã ããïŒ
- created_atïŒæéç¯å²ã¯ãšãªïŒ
- object_type + object_idïŒäžã€ã®ã¬ã³ãŒãã®å±¥æŽæ€çŽ¢ïŒ
- actor_idïŒèª°ãäœããããïŒ
ç£æ»æžã蟌ã¿ã倱æããŠãæ°ã¥ããªããšèšŒæ ã倱ããŸããç°¡åãªã¢ã©ãŒãã远å ããŠãã ããïŒã¢ããªãæžã蟌ã¿åŠçããŠããã®ã«ç£æ»ã€ãã³ããäžå®æéãŒããªãé¢ä¿è ã«éç¥ãã倧ãããšã©ãŒããã°ããããªã©ã§ãã
ç£æ»ãã°ãç¡çšã«ããäžè¬çãã¹
äžé£ã®åãïŒèª°ããäœãããã€ãã©ãããïŒã«çããããªã倧éã®è¡ãéããã®ãäžçªã®ç¡é§ã§ãã
ããªã¬ãŒã ãã«é Œãã®ã¯çœ ã§ããDBããªã¬ãŒã¯è¡ãå€ãã£ãããšãèšé²ã§ããŸãããããžãã¹æèïŒã©ã®ç»é¢ã䜿ã£ãããã©ã®ãªã¯ãšã¹ããåå ããã©ã®ããŒã«ã§è¡ã£ãããèªåã«ãŒã«ãã©ããïŒãèŠèœãšããã¡ã§ãã
ã³ã³ãã©ã€ã¢ã³ã¹ãšæ¥åžžã®äœ¿ãåæãå£ãäž»ãªãã¹ïŒ
- æ©å¯ãã€ããŒãïŒãã¹ã¯ãŒããªã»ãããããŒã¯ã³ããã©ã€ããŒãããŒãïŒããã«ã§èšé²ãã
- å±¥æŽããèšæ£ããããã«ãç£æ»ã¬ã³ãŒããç·šéã»åé€ã§ããããã«ãã
- CSVã€ã³ããŒããçµ±åãããã¯ã°ã©ãŠã³ããžã§ããšãã£ãéUIã®æžã蟌ã¿çµè·¯ãèŠèœãšã
- ã¢ã¯ã·ã§ã³åãäžè²«ããŠããªãïŒ"Updated", "Edit", "Change", "Modify" ã®æ··åšïŒãããã£ãŒããèªã¿ã¥ãããªã
- 倿޿ã«ãªããžã§ã¯ãã®äººéã«ãããååãä¿åããŠãããªãïŒIDã ãã ãšååã¯åŸã§å€ããïŒ
ã€ãã³ãèªåœãæ©ãã«æšæºåããŠãã ããïŒäŸïŒuser.created, user.updated, invoice.voided, access.grantedïŒãšãããã¹ãŠã®æžã蟌ã¿çµè·¯ã§å¿ ã1ã€ã®ã€ãã³ããçºè¡ãããŸããç£æ»ããŒã¿ã¯æžã蟌ã¿å°çšãšæ±ãã誰ããééã£ã倿Žããããå±¥æŽãæžãæããã®ã§ã¯ãªãèšæ£ã€ãã³ãããã°ããŠãã ããã
ãã䜿ãããã§ãã¯ãªã¹ããšæ¬¡ã®ã¹ããã
å®äºã宣èšããåã«ããã€ãã®éããã§ãã¯ãè¡ã£ãŠãã ãããè¯ãç£æ»ãã°ã¯æè¯ã®æå³ã§éå±ã§ãïŒå®å šã§äžè²«æ§ããããäœãèµ·ãããšãã«èªã¿ãããã
ãã¹ãç°å¢ã§çŸå®çãªããŒã¿ã䜿ããã®ãã§ãã¯ãªã¹ãã詊ããŠã¿ãŠãã ããïŒ
- ãã¹ãŠã®äœæãæŽæ°ãåé€ã埩å ãäžæ¬ç·šéã圱é¿ãåããåã¬ã³ãŒãã«ã€ãæ£ç¢ºã«1ã€ã®ç£æ»ã€ãã³ããçæããïŒæ¬ æãéè€ããªãïŒ
- ãã¹ãŠã®ã€ãã³ãã«ã¢ã¯ã¿ãŒïŒãŠãŒã¶ãŒãŸãã¯ã·ã¹ãã ïŒãã¿ã€ã ã¹ã¿ã³ãïŒUTCïŒãã¢ã¯ã·ã§ã³ãå®å®ãããªããžã§ã¯ãåç §ïŒã¿ã€ãïŒIDïŒãå«ãŸãã
- ãäœãå€ãã£ããããã¥ãŒãèªã¿ãããïŒãã£ãŒã«ãåãæç¢ºãold/new å€ãè¡šç€ºãæ©å¯ãã£ãŒã«ãã¯ãã¹ã¯ãŸãã¯èŠçŽãããŠãã
- 管çè ãæéç¯å²ãã¢ã¯ã¿ãŒãã¢ã¯ã·ã§ã³ããªããžã§ã¯ãã§ãã£ã«ã¿ã§ããã¬ãã¥ãŒçšã«ãšã¯ã¹ããŒãã§ãã
- ãã°ã¯æ¹ãããã«ããïŒã»ãšãã©ã®ããŒã«ã§æžã蟌ã¿å°çšãç£æ»ãã°èªäœã®å€æŽã¯ãããã¯ãŸãã¯å¥éç£æ»ããã
å éšããŒã«ãAppMaster (appmaster.io) ã§æ§ç¯ããå Žåãã«ãã¬ããžãé«ãä¿ã€å®çšçãªæ¹æ³ã¯UIã¢ã¯ã·ã§ã³ãAPIãšã³ããã€ã³ããã€ã³ããŒããèªååãåãBusiness Processãã¿ãŒã³ã«éãããšã§ããããããã°ç»é¢ãã¯ãŒã¯ãããŒãå€ãã£ãŠãCRUDç£æ»ãã¬ã€ã«ã¯äžè²«ããŠç¶æãããŸãã
ãŸãã¯ãã±ãããæ¿èªãè«æ±å€æŽã®ãããªéèŠãªã¯ãŒã¯ãããŒ1ã€ããå§ããã¢ã¯ãã£ããã£ãã£ãŒããèªã¿ãããæŽããŠããããã¹ãŠã®æžã蟌ã¿çµè·¯ãäºæž¬å¯èœã§æ€çŽ¢å¯èœãªç£æ»ã€ãã³ããåºããŸã§æ¡åŒµããŠãã ããã
ãããã質å
ããŒã«ãå®éã®ããŒã¿ã倿Žã§ããããã«ãªã£ããããã«ç£æ»ãã°ãå ¥ããŠãã ãããæåã®çŽäºãç£æ»èŠæ±ã¯ãå€ãã®å Žåæ³å®ããæ©ãèµ·ããŸããåŸããå±¥æŽãåããã®ã¯ã»ãšãã©æšæž¬äœæ¥ã«ãªããŸãã
æçšãªç£æ»ãã°ã¯ã誰ãããã©ã®ã¬ã³ãŒãã«ããäœããããã€ããã©ãããïŒUIãAPIãã€ã³ããŒãããžã§ãïŒããçŽ æ©ãçããããããšã§ãããããã®ãã¡äžã€ã§ãããã«çããããªããã°ããã°ã¯ä¿¡é ŒãããŸããã
ãããã°ãã°ã¯éçºè åãã§ãã€ãºãå€ãäžè²«æ§ã«æ¬ ããããšãå€ãã§ããç£æ»ãã°ã¯èª¬æè²¬ä»»ã®ããã®ãã®ã§ãå®å®ãããã£ãŒã«ããæç¢ºãªæèšãéãšã³ãžãã¢ã«ãèŠãããã圢åŒãå¿ èŠã§ãã
éåžžã®ç·šéããã°ããŠããŠã穎ãããã®ã¯ãæŽæ°ãéåžžã®ç·šéç»é¢ä»¥å€ã§èµ·ããå Žåã§ããããèŠèœãšãããã®ã¯äžæ¬ç·šéãã€ã³ããŒãã宿ãžã§ãã管çè ã®ã·ã§ãŒãã«ãããåé€ãªã©ã§ãã
ã¢ã¯ã¿ãŒã¿ã€ããšã¢ã¯ã¿ãŒèå¥åãä¿åããŠãã ãããåã«ãŠãŒã¶ãŒIDã ãã ãšãã¹ã¿ãããè¡ã£ãã®ãã·ã¹ãã ãžã§ãããµãŒãã¹ã¢ã«ãŠã³ããå€éšé£æºãè¡ã£ãã®ããåºå¥ã§ããŸãããããã§ã誰ãããã£ããææ§ããé¿ããããŸãã
ããŒã¿ããŒã¹ã«ã¯UTCã§ã¿ã€ã ã¹ã¿ã³ããä¿åãã管çUIã§ã¯é²èЧè ã®ããŒã«ã«æå»ã§è¡šç€ºããŠãã ãããããã«ããã¿ã€ã ãŸãŒã³ã«é¢ããè°è«ãé¿ããããŸãã
æ€çŽ¢ã1ãæã§è¡ããããæŽ»åãã£ãŒããç°¡åã«äœããããªãappend-onlyã®ã€ãã³ããã°ãããããã§ããåäžã¬ã³ãŒãã®æç¹åŸ©å ãé »ç¹ã«è¡ããããªãããŒãžã§ã³å±¥æŽã䟿å©ã§ããå€ãã®ã¢ããªã§ã¯ããã£ãŒã«ãåäœã®å·®åãæã€ã€ãã³ããã°ã§ååã§ãã¹ãã¬ãŒãžè² è·ãæããããŸãã
蚌æ ãæ¶ããªãããã«ãœããåé€ïŒis_deleted ãã©ã°ïŒç£æ»ã€ãã³ãïŒãåªå
ããŠãã ãããããŒãåé€ãå¿
èŠãªããå
ã«ç£æ»ã€ãã³ããæžããåé€åã®ã¹ãããã·ã§ãããå«ããŠäœãåé€ããããã蚌æã§ããããã«ããŸãã
æŽæ°ã¯ãã£ãŒã«ãåäœã®å·®åãããã©ã«ãã«ããäœæãåé€ãéèŠãªã¯ãŒã¯ãããŒé·ç§»ã ãã¹ãããã·ã§ãããä¿æããã®ãå®çšçã§ããæ©å¯ãã£ãŒã«ãã¯å€ãä¿åããã倿Žãããããšèšé²ãããããã¹ã¯ïŒããã·ã¥ã§åãæ±ã£ãŠãã ããã
ãã¹ãŠã®æžã蟌ã¿çµè·¯ãç£æ»ã€ãã³ããåºãããã«ã1ã€ã®å ±éã®ãæžã蟌ã¿ïŒç£æ»ããã¹ãäœã£ãŠåŒ·å¶ããŠãã ãããUIãAPIãã€ã³ããŒããããã¯ã°ã©ãŠã³ããžã§ãããã¹ãŠãã®ãããŒçµç±ã«ããããšã§ç©Žãé²ããŸããAppMasterã§ã¯ãããåå©çšå¯èœãªBusiness ProcessãšããŠå®è£ ããããšãå€ãã§ãã


