äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã https://www.medley.jp/jobs/
ã¯ããã« ã¯ãããŸããŠãã³ãŒãã¬ãŒããšã³ãžãã¢ã®å±±äžã§ãã 2020 幎㫠Slack ãæŽ»çšãã ChatOps çšè°ã¯ãŒã¯ãããŒãå
補ã§éçºããã®ã§ãããããã«ã2021 幎 4 æã«ãã® Slack çšè°ãšé»åå¥çŽã·ã¹ãã ã§ãã ã¯ã©ãŠããµã€ã³ ã飿ºãããŠãé»åå¥çŽããã£ãšäŸ¿å©ã«äœ¿ããçç£æ§ã®åäžãå®çŸããŸããã®ã§ã話ãããããŸãã ãŸããåœç€Ÿã®çšè°ã·ã¹ãã 㯠2020 幎 12 æã®åœç€Ÿã®èšäº ã®ããããã«ãªããŸãããçšè°ã®äœæ¥ã Slack äžã§å®çµããã ChatOps ã«ããçšè°ã¯ãŒã¯ãã㌠ãšãªã£ãŠãããŸããæ¬çš¿ã«ã€ããŠã¯ 2021 幎 7 æã«å·çããŠãããŸãã®ã§äžåºŠå°å
¥ãã 1 幎çšçµéãããã®é倧ããªãã©ãã«ãç¡ããä»ãåœç€Ÿã®æ¥µããŠè¿
éãªæææ±ºå®ã®äžå©ã«ãªã£ãŠããŸããChatOps ã«ããçšè°ã¯ãŒã¯ãããŒã«ã€ããŠã¯ãçŽè¿ã2021 幎 6 æã« LayerX 瀟ã LayerX ã¯ãŒã¯ãããŒã®æ°æ©èœãšããŠçºè¡š ãããµãŒãã¹ãšããŠãæäŸããã æ¥çµæ°è ã§ãåãäžããããŠããããšãããä»çŸåšã®ãã©ãã€ã ãšããŠãå
é²çã§æå¹ãªäžææ³ã§ãã£ããšåèªèããŠãããŸãã ä»åãæ°åã³ãããŠã€ã«ã¹æææ¡å€§é²æ¢ã«äŒŽããªã¢ãŒãã¯ãŒã¯ã®å éãšããç¶æ³ããããåœç€Ÿã§ 2021 幎 4 æã«é»åå¥çŽã·ã¹ãã ãšããŠã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããé»åå¥çŽã«éãããå¥çŽæŒå°äœæ¥ã¯çšè°ã®åŸç¶äœæ¥ã«åœããããããã å°å
¥ããŠäœ¿çšããã®ã¿ãªãããã¯ã©ãŠããµã€ã³ã® API ãå©çšããŠçšè°äžã«ããããŒã¿ãé»åå¥çŽã«éä¿¡ãããããšã§ã·ãŒã ã¬ã¹ãªé£æºãå®çŸããŠããŸããæ¬çš¿ã§ã¯åœç€Ÿãè¡ã£ãã·ãŒã ã¬ã¹ãªé£æºææ³ã«ã€ããŠè©³çްãã説æããããŸãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ã® API 飿ºã«ã€ã㊠å®è£
æŠèŠ åŒç€Ÿã®çšè°ã·ã¹ãã ã§ãã TeamSpirit ãšã¯ã©ãŠããµã€ã³ãšã®é£æºã«ã€ããŠã話ãããŸãããŸããæ¬çš¿ã®éçºéšåãšã·ã¹ãã æ§æã¯äžèšã«ãªã£ãŠãããŸãã åŠçå
容ã®è©³çްã¯åŸã»ã©è¿°ã¹ãŸãããæŠèŠãšããŠã¯ TeamSprit(Apex)ããã¯ã©ãŠããµã€ã³ã® API ãã³ãŒã«ããã¯ã©ãŠããµã€ã³äžã§äœæããå¥çŽææžãžçšè°ã«èšèŒãããŠããå¥çŽæžãã¡ã€ã«ãå
æ¹æ
åœè
çã®æ
å ±ã飿ºããä»çµã¿ãšãªã£ãŠãããŸããããã«ããå¥çŽæ
åœè
ã¯ã¯ã©ãŠããµã€ã³ã«ãã°ã€ã³åŸãäžèšã® 3 ã¹ãããã§å
æ¹ã«éä¿¡ã§ããããã«ãªã£ãŠããŸãã èšèŒå
容ã®ç¢ºèª æŒå°ã»çœ²åç®æã®èšå® å
æ¹ãžã®éä¿¡ ã¯ã©ãŠããµã€ã³ã䜿çšããŠå¥çŽææžãäžããäœæããå Žåã®ãŠãŒã¶äœæ¥ãšãåœç€Ÿã§æ¡çšãã API 飿ºè¡ã£ãå Žåã®ãŠãŒã¶äœæ¥ãæ¯èŒãããã®ãäžèšã®è¡šã§ããäœæ¥ãååçšåºŠåæžãããããšãåãããŸãã äœæ¥é
çª äžããäœæããå Žå API 飿ºãå©çšããåœç€Ÿã®å Žå 1 ãã°ã€ã³ ãã°ã€ã³ 2 å¥çŽææžã®äœæ(ä»¶åãå¥çŽææžãšããŠã®å®åèšå®ç) ãªã 3 å¥çŽæžãã¡ã€ã«ã®ã¢ããããŒã ãªã 4 å
æ¹ã®éä¿¡å
èšå® ãªã 5 æŒå°æ¬ã®èšå® æŒå°æ¬ã®èšå® 6 å
æ¹ãžã®éä¿¡ å
æ¹ãžã®éä¿¡ å®è£
ä»åã®éçºã§äœ¿çšãã ã¯ã©ãŠããµã€ã³ API ã¯äžèšã® 5 ã€ã® API ã䜿çšããŸãã (â»ä»¥éãã¯ã©ãŠããµã€ã³ API ã«å£ãã倿°ã衚çŸããå Žå㯠{} ã§æ¬ããŸã)ã API çš®é¡ äœ¿çšçšé post /token ã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸ post /document å¥çŽææžã®äœæ put /documents/{documentID}/attribute å¥çŽææžã®äœæã§èšå®ã§ããªãã现ããé
ç®ã®èšå® post /documents/{documentID}/files ãã¡ã€ã«ã®ã¢ããããŒã post /documents/{documentID}/participants å
æ¹ã®éä¿¡å
èšå® å
šäœåã§èšèŒããã¯ã©ãŠããµã€ã³ã®é£æºéšã«ã€ããŠãäžèšã® API ãç¹ã亀ããŠè©³çްåãããšäžå³ã®ããã«ãªããŸãã å®è£
æ¹æ³ãšããŠã¯ã¯ã©ãŠããµã€ã³ API ã®ãªãã¡ã¬ã³ã¹ãåç
§ãããã¹ãå®è¡æã«åºåããã curl ã³ãã³ããåèã«åæ§ã®ã¬ã¹ãã³ã¹ãåŸãããã« Apex ã§ HTTP ãªã¯ãšã¹ããå®è£
ããŸãããã¢ã¯ã»ã¹ããŒã¯ã³ã®ååŸãäŸã«ãšããšäžèšã®ããã«ãªããŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=xxxxxxyyyyyyzzzzzz' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/token' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Content-Type' , 'application/x-www-form-urlencoded' ); req . setBody ( 'client_id=' + 'xxxxxxyyyyyyzzzzzz' ); ç§èªèº«ãApex ãã¯ã©ãŠããµã€ã³ API ããã®æ¡ä»¶ãæ
åœãããŸã§è§Šã£ãããšããããŸããã§ãããããªã¯ãšã¹ãã®è©Šè¡ããå®è£
ãŸã§ 2 é±éããããªãçšåºŠã§å®è£
ããããšãã§ããŸããã ãã ããå®è£
ãéçšã«ããã£ãŠã¯äžèš 2 ç¹ã«ã€ããŠæ³šæãå¿
èŠã«ãªããŸãã Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã 1. Apex ããã¯ã©ãŠããµã€ã³ãžã®ãã¡ã€ã«ã®ã¢ããããŒãã¯åçŽã§ã¯ãªã ãã¡ã€ã«ã®ã¢ããããŒãã«ã€ããŠã¯ä»å䜿çšãã API ã®äžã§ãå¯äžããã¹ãå®è¡ã® curl ãš Apex ã®ãªã¯ãšã¹ãå®è£
ã§å·®åãçãŸããŸãããŸãããã®å·®åã確èªããããã« curl ã³ãã³ãäŸãš Apex ã®ãªã¯ãšã¹ãå®è£
äŸã§ headerãbody ã«ã»ããããŠããå€ãæ¯èŒããŠã¿ãŸãã API ãªãã¡ã¬ã³ã¹ã§ã® curl ã³ãã³ãäŸ curl -X 'POST' \ 'https://api.cloudsign.jp/documents/{document_id}/files' \ -H 'accept: application/json' \ -H 'Authorization: AAAAAABBBBBBCCCCCC' \ -H 'Content-Type: multipart/form-data' \ -F 'name=ãã¹ã' \ -F 'uploadfile=@ãã¹ã.pdf;type=application/pdf' Apex ã§ã®ãªã¯ãšã¹ãå®è£
äŸ HttpRequest req = new HttpRequest (); req . setMethod ( 'POST' ); req . setEndpoint ( 'https://api.cloudsign.jp/documents/{document_id}/files' ); req . setHeader ( 'accept' , 'application/json' ); req . setHeader ( 'Authorization' , âAAAAAABBBBBBCCCCCCâ); req . setHeader ( 'Content-Type' , 'multipart/form-data; boundary={boundary}' ); // â»1 req . setBodyAsBlob ({multipartBody}); // â»2 äž»ãªéã㯠â»1 , â»2 ãšã³ã¡ã³ãããéšåã«ãªããŸãã Apex ã§ã¯ HTTP ãªã¯ãšã¹ãã®å€ãæã§æžããŠããããšã«ãªãã®ã§ããã¹ãå®è¡äŸã®ããã« curl ããããªã«åŠçããŠããéšå(-F ãªãã·ã§ã³ã®éšåã Apex ã§èšèŒããŠãã boundary)ãå®è£
ããªããã°ãªããŸããããããåçŽã«å®è£
ã§ããªãçç±ã«ãªããŸãã boundary ã«ã€ããŠã¯ multipart/form-data ãéä¿¡ããéã«å¿
èŠãªå¢çã§ããããŒã§ã©ã®æååãå¢çã§ããããèšå®ããŸãã curl ã®-F ãªãã·ã§ã³ã§å®çŸ©ããŠããæååãšãã¡ã€ã«æå®éšåã¯ãApex ã§ãã¡ã€ã«(ãã€ããª)ãæ±ãããããã® body ã«å«ãŸããæååãå«ã㊠Blob åã§æ±ãå¿
èŠããããŸã( Content-Transfer-Encoding: base64 ã« API æäŸåŽã察å¿ããŠããå Žåã¯äŸå€ã«ãªããŸã)ããã®ãããæååãšãã€ããªããŒã¿ãçµåãäžã€ã® Blob ã«ããæ¹æ³ã¯äžèšã«ãªããŸãã ããã€ããªããŒã¿ãããbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã® 3 ã°ã«ãŒãã«åããã 3 ã°ã«ãŒãããããã Base64 ã§ç¬Šå·åããã 笊å·åããããã€ããªããŒã¿ããšãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååãã«ã€ããŠãBase64 ã®ããŒã¿ããã£ã³ã°ã瀺ãâ=âãå«ãŸããªãããã«æ¹è¡ã³ãŒãã§èª¿æŽããã ãbody ã®éå§ãããã€ããªããŒã¿ãŸã§ã®æååããããã€ããªããŒã¿ããããã€ããªããŒã¿ä»¥éããçµç«¯ãŸã§ã®æååãã®é ã§çµåããã çµåãã Base64 ã®ããŒã¿ã埩å·ããŠãäžã€ã® Blob ãšããã 2. ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯ã¯ã©ãŠããµã€ã³ã§ã³ã³ãããŒã«ããã ã¢ã¯ã»ã¹ããŒã¯ã³ããã®æå¹æé㯠token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹ãšããŠã¯ã©ãŠããµã€ã³ããçºè¡ãããŸãã çºè¡ãããã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 3600 } ãã®ã¬ã¹ãã³ã¹ã®å
ãexpires_in ã®å€ãããŒã¯ã³ã®æå¹æéã«ãªããŸããæ²é¡ã®éããæå¹æéã®ç®¡çã¯ã¯ã©ãŠããµã€ã³åŽã§è¡ãããæå¹æéå
ã«å床ããŒã¯ã³ã®ãªã¯ãšã¹ããè¡ã£ãå Žåãçµéããæéã ã expires_in ã®å€ãå°ãããªã£ãçµæãè¿ã£ãŠããŠãaccess_token ãªã©ã¯åãå€ãååŸãããŸããæå¹æéå
ã« token API ãå床å®è¡ããçµæãäžèšã«ãªããŸãã æå¹æéåãåã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "AAAAAABBBBBBCCCCCC" , "token_type" : âxxxxâ , "expires_in" : 762 } äžæ¹ãæå¹æéåŸã«ããŒã¯ã³ã®ãªã¯ãšã¹ããå®è¡ãããšããããŸã§ãšç°ãªãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããæ°ããæå¹æéãèšå®ãããŸãã æå¹æéåãåŸã« token API ãçºè¡ããéã®ã¬ã¹ãã³ã¹äŸ { "access_token" : "XXXXXXYYYYYYZZZZZZ" , "token_type" : "xxxx" , "expires_in" : 3600 } ãã®ãããAPI 飿ºãäžåºŠåããåŸãæå¹æéããããã§ããäžåºŠ API 飿ºãåããŠããŸã£ãå Žåãã¿ã€ãã³ã°ãæªããšå¥çŽææžã®äœæããæçµåŠçã§ããå
æ¹ã®éä¿¡å
èšå®ãŸã§ã®ããã»ã¹å
ã®ã©ãããããããŒã¯ã³ã®æå¹æéåããçºçããå¯èœæ§ãæ³å®ãããŸããå®éã«æéåããçºçããå Žåãçºçæä»¥éã«çºè¡ãããã®åã® API 飿ºåŠçã倱æããŸãã ããŒã¯ã³ã®æå¹æéåããçºçããéãAPI ãªãã¡ã¬ã³ã¹ãã HTTP ã¹ããŒã¿ã¹ã³ãŒãã 401 ãã€ãšã©ãŒå
容ãâunauthorizedâã§å¿çãããããšãããåœç€Ÿã§ã¯ãã®ãšã©ãŒãåããå Žåã«ããŒã¯ã³ãåååŸããŠåŠçããªãã©ã€ããããã«å®è£
ããŸããã æŒå°ææžäœæãäŸã«ãšããšäžèšã®ãããªå®è£
ã€ã¡ãŒãžã«ãªããŸãã //ã¯ã©ãŠããµã€ã³äžã«æŒå°ææžãäœæããäœæããææž ID ãååŸãã public String getDocumentId ( String authToken, String title, String message){ ã»ã»ã»äžç¥ã»ã»ã» HTTPResponse res = http . send (req); if ( res . getStatusCode () == 200 ){ ã»ã»ã»æ£åžžã«çµäºããéã®åŠçã»ã»ã» } //ã¿ã€ãã³ã°ãæªã token ãã¿ã€ã ã¢ãŠãããå ŽåãããŒã¯ã³ãååŸãçŽããŠããªãã©ã€ãã else if ( res . getStatusCode () == 401 ){ //ã¬ã¹ãã³ã¹ã®å
容ã確èªããããããšã©ãŒã¬ã¹ãã³ã¹ã®äžèº«ãååŸãã Map < String , Object > responseBody = new Map < String , Object >(); responseBody = ( Map <String, Object>) JSON . deserializeUntyped ( res . getBody ()); String errorVal = (String) responseBody . get ( 'error' ); //ãªãã¡ã¬ã³ã¹äžãã¢ã¯ã»ã¹ããŒã¯ã³ãç¡å¹(æå¹æéåã)ã®å Žåã'unauthorizedâãšãªã if ( errorVal . equals ( 'unauthorized' )){ //ã¯ã©ãŠããµã€ã³ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®åååŸ authToken = getAuthToken (); //åçŽååž°ã§åå®è¡ããã documentId = getDocumentId (authToken, title, message); } ã»ã»ã»äžç¥ã»ã»ã» } ã»ã»ã»ä»¥äžçç¥ã»ã»ã» } å®è£
ãçµã㊠äžèšãå®è£
ããçµæãçšè°ãšå
¥åå
容ãåãããŸãã¯ãçšè°ããçæã§ããå
容ã¯å
šãŠã·ã¹ãã 飿ºã§èªåçæãããããæŒå°æ
åœã¯çšè°ãšã¯ã©ãŠããµã€ã³ã®ç»é¢ã䞊ã¹ãŠè»¢èšãããããªç
©éãªäœæ¥ãå¿
èŠãšããªãç°å¢ã«ãªããŸããããŸããå¥çŽæžã®è£œæ¬ãéµéçã®çŽåªäœã§ãããæ
ã®äºåã®åæžãã§ããããã«ãªãçã®ãé»åå¥çŽãå°å
¥ããããšã®ããããã®ã¡ãªããã䜵ããŠäº«åããŠããŸãã åœç€Ÿã§ã¯ 2021 幎 4 æåŸåããã¯ã©ãŠããµã€ã³ãå°å
¥ããŸãããã2021 幎 6 ææç¹ã§ã¯ãã§ã« æéã§ç· çµããå¥çŽæžã®ã3 å²ä»¥äžããé»åå¥çŽã掻çšããŠãã ãæŒå°æ
åœã®å±æãšããŠä»åŸãå©çšãæ¡å€§ããŠããäºå®ã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ã³ãŒãã¬ãŒãéšéã§ã¯ãæ¬çš¿ã®ããã«ãSaaS ã®å°å
¥ã²ãšã€ãšã£ãŠãæ€èšãå°œãããæ¢åã®ã·ã¹ãã ãšææ©çã«çµåãããããšã§ã培åºçã«åçæ§ã远æ±ããçµç¹åºç€ãã仿ãã¥ããããè¡ã£ãŠããŸãã é¢çœããïŒèå³ãããïŒãšæããæ¹ã¯ããã²åœç€Ÿæ¡çšããŒãžãããå¿åãé¡ãããŸãïŒ æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã https://www.medley.jp/jobs/designer-new.html
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã2020 幎 9 æã«èª¿å€è¬å±åãã®ãããã¯ãããªãªãŒã¹ããã ãã® ãã¬ã¹ãªãªãŒã¹ ãçºè¡šãããã®ã¯ãCOVID-19 ã®æææ¡å€§ã«ç«¯ãçºããç·æ¥äºæ
宣èšãçºä»€ãããŠãã 2020 幎 4 æåã°ããã® 1 ã¶æåŸãç§ã¯ãªã¢ãŒãã¯ãŒã¯äžã§ã®ãªã³ã©ã€ã³ MTG ã«ãªãããªãç¶æ
ã®ãŸãŸã調å€è¬å±åããããã¯ãã®ãã©ã³ãã£ã³ã°ã«ã€ããŠåœ¹å¡é£ãäž»èŠãããžã§ã¯ãã¡ã³ããŒã«ãã¬ãŒã³ãè¡ã£ãŠããã ä»åã¯åœæã®ãã¬ãŒã³è³æããã©ããªãã Pharms ã®ãã©ã³ãèšèšã«ã€ããŠèª¬æããŠããããšæãã å»è¬åæ¥ã®ã«ãŒããšã¯ ãã¶ã€ããŒãšããŠåç°ãã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçãé»åã«ã«ããªã©ãäž»ã«å»çæ©é¢åãã®ãããã¯ããã¶ã€ã³ãæ
åœããŠãããã®ã®ã調å€è¬å±ã®ãããã¯ããã¶ã€ã³ã¯æªç¥ã®é åããã©ã³ãã£ã³ã°ãæ€èšããäžã§ãè¬ã®åŠæ¹ãè¡ãå»åž«ãšèª¿å€ã宿œããè¬å€åž«ãåæ
ããŠè¡ãå»è¬åæ¥ã®ã«ãŒãã€ããŠèª¿ã¹ãããšããã¯ãããã å»è¬åæ¥ã¯ãæ¯æ®ºãæããããªãŒããªã 2 äžã䞻治å»ã®åŠæ¹ããè¬ããæ¯ãçãããŠãªããä»è
ã«ãã§ãã¯ãããã®ãå§ãŸããšãããŠããã ïŒåèïŒ å
¬çç€Ÿå£æ³äºº æ¥æ¬è¬å€åž«äŒ HP ïœå»è¬åæ¥ãšã¯ ïŒ å»çãã©ãããã©ãŒã ã®æªæ¥ãèŠæ®ãããã©ã³ãå®çŸ© 次ã«ã調å€ã«é¢ããæ³å¶åºŠãç«¶åãªã©ã®å€éšèŠå ãã¡ãã¬ãŒãšããŠã®ãã©ã³ãåãéçºåãªã©ã®å
éšèŠå ã«ã€ããŠç°¡æãª SWOT åæãè¡ãã調å€è¬å±ã®ãããžã§ã¯ãã®åŠ¥åœæ§ãæ€èšŒãã¡ãã¬ãŒãåãçµãå»çãã©ãããã©ãŒã äºæ¥(â»)ã«ããããã«èª¿å€è¬å±ãããžã§ã¯ããå ããããšã«ããä»ã®ãããã¯ããšã®ãã©ã³ã¹ãèæ
®ããªãããã©ã³ãããŒãã³ã°æ€èšãè¡ã£ãŠãã£ãã â») å»çãã©ãããã©ãŒã äºæ¥ã§ã¯ãæ£è
ãšå»çé åã®æ¥åã·ã¹ãã ã SaaS ãããã¯ãã§ã€ãªããæ£è
ãšå»çæ©é¢åæ¹ã«ãšã£ãŠããã¯ãããžãŒã®æ©æµãåããããšã®ã§ãããã©ãããã©ãŒã ã¥ãããè¡ã£ãŠãããäž»èŠãµãŒãã¹ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSãããªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ããªãCLINICSãã ã¡ãã¬ãŒã®ãããŸã§ã®æŽå²ãæ¯ãè¿ããšããããã¯ãå
容ãæç¢ºãã€ç«¯çã«è¡šããããŒãã³ã°ãå€ããã¡ãã¬ãŒããã = ãäžå€®çªç ŽãªããŒãã³ã°ããšããããšãå®çŸ©ããããŒãã³ã°ãæ€èšããŠãã£ãã æçµçã«èª¿å€è¬å±ã衚ããPharmaciesïŒãã¡ãŒãã·ãŒãºïŒããšãPharmsïŒãã¡ãŒã ã¹ïŒãã® 2 æ¡ã«çµèŸŒã¿ãããããã®ã¡ãªããã»ãã¡ãªãããæŽçããŠãã£ãã åœæã瀟å
ã§ã¯èª¿å€è¬å±ã·ã¹ãã = Pharmacies ãšåŒã°ããŠããããã®äžå€®çªç ŽãªããŒãã³ã°ãææååè£ã§ãã£ããäžæ¹ã§ããã©ã³ãã§äœçŸãã¹ãã¢ã€ãã³ãã£ãã£ã®æ¬ åŠããåŒã³ã¥ãããªã©ã課é¡ãšããŠæ£èŠããããããã«ã¯å»çãã©ãããã©ãŒã å
šäœãèŠæ®ãããã©ã³ãæ§ç¯ãšãã芳ç¹ããèæ
®ãããšããã©ã³ã¹é¢ã§ã®èª²é¡ãæµ®ã圫ãã«ãªããããã課é¡ãã¯ãªã¢ã«ããŠèªçããã®ã PharmsïŒãã¡ãŒã ã¹ïŒã§ããã ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ã®èšèš ãã©ã³ãåãåºãŸãã°ãããšã¯ãŽã£ãžã¥ã¢ã«ã»ã¢ã€ãã³ãã£ãã£ãçªãè©°ããŠããã®ã¿ãèŠèªæ§ãå¯èªæ§ãèæ
®ãããã©ã³ããã§ã€ã¹ã®æ€èšŒã調å€è¬å±ãšæ³èµ·ããããã©ã³ãã«ã©ãŒã®éžå®ããŸãã·ã³ãã«ã®èšèšãªã©ã«åãæãã£ãŠããã ãã©ã³ãã«ã©ãŒã®éžå®ã«ãããŠã¯ããªããšãªããç·ããšããã€ã¡ãŒãžãããŒã å
ã§ããã£ããããã粟緻åãããããè¬ã®èµ·æºã調å€è¬å±æ¬æ¥ã®åœ¹å²ãèžãŸã詳现ã«èœãšã蟌ãã§ãã£ãã ããŽã«ã·ã³ãã«ãå«ããããå«ããªãããæ€èšã®ã²ãšã€ã§ãã£ãããå»çãã©ãããã©ãŒã äºæ¥ã«ãã CLINICS ã®ããŽãã·ã³ãã«ããŒã¯ä»ãã§ãããããå»çãã©ãããã©ãŒã ã«é¢é£ãããããã¯ã = ã·ã³ãã«ãå®çŸ©ãããšããã«ãŒã«ãçå®ãã·ã³ãã«ãèšèšãã·ã³ãã«ã¯è¬ã®æ§é åŒã«å©çšããããããã«ã æ§é ããã¢ããŒããšãããã©ã³ãã«ã©ãŒãšåãããŠè©³çްã«äœã蟌ãã§ãã£ãã ãŸããPharms ã®è£œå玹ä»çšã©ã³ãã£ã³ã°ããŒãžããããã¯ããã¶ã€ã³ã®ã¢ãã¯ã¢ãããäœæããããŽãšã®ãã©ã³ã¹ãªã©ãèæ
®ããªãã調æŽãè¡ã£ãŠãã£ãã æçµçã«ãæ£è
ã»èª¿å€è¬å±ã»å»çæ©é¢ã® 3 è
ã®ã€ãªãããäžè§åœ¢ã§è¡šçŸãã€ã€ãäžå¿ãå
è¿°ãããããã«ã æ§é ããã¢ããŒããšãã圢ç¶ãšãPharms ã®é æåãPããã«ãã»ã«ãšé å€ã§è¡šçŸããŠã調å€è¬å±ã·ã¹ãã ãšããŠã·ã³ãã«ããŒã¯ã«åœãå¹ã蟌ãã ã ãŸãšã ãã®ãããªéçšãçµãŠãPharms ã®ãã©ã³ãã宿ããã®ã ãããããã¯èª¿å€è¬å±ã·ã¹ãã ã®éçºãšããŠã¯æ°·å±±ã®äžè§ã§ãããªããæ¬äžžã¯ãããã¯ããã¶ã€ã³ãäžè¬çã«ã¯ããŽãšãããã¯ããã¶ã€ã³ã¯å¥ãããžã§ã¯ãã§é²è¡ããããæ
åœãããã¶ã€ããŒãå¥ã ã£ããããããšãå€ãã®ã§ã¯ãªãã ãããã Pharms ã¯ãã©ã³ãèšèšããããã¯ããã¶ã€ã³ãããŒã±ãã£ã³ã°è³æãšãã£ããã¶ã€ã³é åããã¹ãŠç§ãæ
åœããŠããããšã«ãªãã®ã ããããæ
ã«äºæ¥å
šäœã俯ç°ãçè§£ããªãããã¶ã€ã³ã UI ãã¶ã€ã³ã«éã蟌ããŠæºããããšãã§ããããã¶ã€ããŒãã£ãªã¢ãšããŠããããŸã§å¹
åºãæºãããããšã¯éåžžã«è²ŽéãªçµéšãåŸãããšãã§ãããšèªè² ããŠããã ç¶ããŠãããã¯ããã¶ã€ã³éçºã®ç§è©±ã«ã€ããŠèªããããšããã ããçŸåš Pharms 以å€ã®å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ããæ°ããªãããã¯ãéçºã«æ³šåããŠããããããã®è©±ã¯ãŸãã®æ©äŒã«ã å»çãã©ãããã©ãŒã äºæ¥ã«é¢é£ãããããã¯ãããããããåµåºãæé·ãããŠããé¢çœãææã«ãããçŸåšãã¶ã€ããŒãç©æ¥µæ¡çšäžã§ããã«ãžã¥ã¢ã«ã«è©±ãèããããå»çé åã®ãã¶ã€ã³ã«èå³ããããšãã£ããã¶ã€ããŒã®æ¹ã¯ããã² ãã¡ã ãŸã§ãé£çµ¡ããã ãããšå¹žãã§ãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã§ã»ãã¥ãªãã£ãšã³ãžãã¢ãããŠããäžæµŠã§ãã ç§ã¯ã¡ãã¬ãŒã«ã¯ä»å¹ŽïŒ2021 幎ïŒã® 2 æã«å
¥ç€Ÿãããã®ããã°ãå·çããŠããæç¹ã§å
¥ç€Ÿ 4 ã¶æç®ãšãªããŸããçŸåšãå
šç€Ÿçãªã»ãã¥ãªãã£ãæ
åœããŠããŸãã ä»åã®ããã°ã¯ä»¥äžã®ãããªæ§æã§ãå±ãããŸãã ç®æ¬¡ èªå·±ç޹ä»ãšãæ¬ããã°ã®ããŒãã«ã€ã㊠åè·ã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®ä»äº ã¡ãã¬ãŒã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã®ä»äº ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã®éããšæ°ã¥ããèª²é¡ ã»ãã¥ãªãã£ãšã³ãžãã¢åéäžïŒ èªå·±ç޹ä»ãšãæ¬ããã°ã®ããŒãã«ã€ã㊠ç§ã¯åè·ã§ã»ãã¥ãªãã£å°æ¥äŒç€Ÿã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠè匱æ§èšºæããããã¬ãŒã·ã§ã³ãã¹ãã®ã»ããã»ãã¥ãªãã£ç ä¿®ã®è¬åž«ããã¡ã€ã¢ãŠã©ãŒã«ã Web ã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ïŒWAFïŒãšåŒã°ããæ©åšã®å°å
¥æ¯æŽãªã©ã«æºãã£ãŠããŸããã ãã®ãªãã§ãè匱æ§èšºæã®æ¡ä»¶ã«å€ãé¢ãã£ãŠããããšããããæåŸã«ã¯è匱æ§èšºæã®ãµãŒãã¹ãªãŒããŒãšããŠãµãŒãã¹ã«é¢ãããã¹ãŠãåããŸãšããç«å Žã§ããã ä»ã§ã¯äºæ¥äŒç€Ÿã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠæŽ»åããŠããããã§ããããã®ããã°ã§ã¯ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã«ã©ã®ãããªå€åãããããã®å€åã«ããçŽé¢ããŠããèªåèªèº«ã®èª²é¡ãèŠåŽã«ã€ããŠæžããŠãããŸãã åè·ã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®ä»äº å
è¿°ã®ãšããåè·ã§ã¯è匱æ§èšºæã«é¢ããããšãå€ãã£ããããããã§ã¯è匱æ§èšºæã«ã€ããŠåãäžããŸãã è匱æ§èšºæã¯ã¹ãããæ¡ä»¶ãšããŠå®æœããããšãã»ãšãã©ã§ããã®ã§ãæ¡ä»¶ã®æµããšãã芳ç¹ã§ä»äºå
å®¹ãæŽçãããšä»¥äžã®ããã«ãªããŸãã å¶æ¥ãã©ããŒïŒåè¡ã Q&A ãªã©ïŒ ã¹ã±ãžã¥ãŒã«ã蚺æå¯Ÿè±¡ãªã©ã«ã€ããŠã客æ§ã«ãã¢ãªã³ã° a. ããã§èšºæçšç°å¢ã®æºåããé¡ãããããšãå€ã 蚺æå¯Ÿè±¡ã®èª¿æ»ãã¯ããŒã«äœæ¥ ã¹ã±ãžã¥ãŒã«æãå¶éäºé
ã«ã€ããŠã客æ§ãšããåãã èšç»æžãäœæ 瀟å
ã§èšç»æžã¬ãã¥ãŒãã客æ§ãžéä» èšºæäœæ¥ a. èªå蚺æããŒã«ã®èª¿æŽ a. æå蚺æã®å®æœ a. åºåçµæã®ç²Ÿæ»ãåçŸæ§ã®ç¢ºèª a. éå ±ãããã°åœæ¥äžã«æŽçããŠéä» èšºæçµæã®ãšããã³ã¹æŽç å ±åæžã®äžæžãããªã¹ã¯åºŠåãã®æ€èš 瀟å
ã§å ±åæžã¬ãã¥ãŒ ã客æ§ãžå ±åæžãçŽå å ±åäŒã®å®æœ ãã®ãªãã§ãç¹ã«èšºææ
åœè
ã®æè¡çã¹ãã«ãåãããã®ããæå蚺æã®å®æœããšãåºåçµæã®ç²Ÿæ»ãåçŸæ§ã®ç¢ºèªãã§ãå
šäœã®ãã¡çŽ 4 å²ã»ã©ãæ®ãã¯ããã¥ã¡ã³ãäœæãã¬ãã¥ãŒãããŒãã£ã³ã°ãæ¥åæ¹åãšãã£ãå®åæ¥åãå ããŠããŸããã ç§ã¯ããã® 4 å²ã®éšåã«å¯ŸããŠä»å 䟡å€ãæäŸãããããšãããšã³ãžãã¢ãšããŠã®æ°è² ããšãå人çãªé¢å¿ãšãã 2 ã€ã®çç±ãããå¯ãæéãåã£ãŠã¯è匱æ§ã®æªçšïŒExploitïŒææ³ã®ç¿åŸãšãç¥èçãªè£åŒ·ãšããŠã®è³æ ŒååŸã«æãæ®ããææããããŸããã çµå±ãå¯äžè¶³ãç¶ããããšãåå ã§èºçãçºçããå
¥é¢äžæ©åãŸã§ççããŒã«ãŒãæªåãããšããèªåèªèº«ã®è匱æ§ãé²åããããšã«ãªã£ãã®ã§ãããã¡ãããšå€ã¯å¯ãŸãããã 話ããããè±ç·ããŸããããè匱æ§èšºæã SI æ¡ä»¶ãªã©ã¯å¹ŽåºŠæ«ã«ããŒã¯ãè¿ãããã®ã®å¹ŽéãéããŠäºæéšã§å泚ããããšãå€ããäžå®ã®å質ãç¶æããªãããçŽæãå®ãããã«ç®ã®åã®æ¡ä»¶ã§å¿
æ»ã ã£ããšããã®ãä»ãŸã§ã®ä»äºã®ã¹ã¿ã€ã«ã§ããã ç®ã®åã®æ¡ä»¶ãã²ãããããªããçµç¹ã«å¯ŸããŠãå ±åæžãæåºããŠçµãããã®é¢ããæ¹ã«å¯ŸããŠãããã§ç€ŸäŒã®åœ¹ã«ç«ã£ãŠããã®ã ãããããšããçåãçãŸããããšããã¡ãã¬ãŒã«å
¥ç€Ÿãã転æ©ã«ãªã£ãŠããŸãã ã¡ãã¬ãŒã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã®ä»äº ããŠãã»ãã¥ãªãã£ãµãŒãã¹ãæäŸããåŽã§æ¡ä»¶ã«è¿œãããŠããç§ãã¡ãã¬ãŒã§ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠæŽ»åããããšã«ãªã£ãŠããããã§ãããå
·äœçã«ä»ãªã«ãããŠããã®ãïŒãšãããšã倧ããã¯ä»¥äžã® 6 ã€ãæããããŸãã èªç€ŸãµãŒãã¹ã«å¯Ÿããè匱æ§èšºæ è
åšæ
å ±ãèåŒ±æ§æ
å ±ã®åéãåšç¥ å
šç€Ÿçãªæ¥åããã»ã¹äžã®ãªã¹ã¯èª¿æ» å
šç€Ÿã·ã¹ãã ã® BCP æŽåãä¿å® ISMS éçš ã»ãã¥ãªãã£çžè« èªç€ŸãµãŒãã¹ã«å¯Ÿããè匱æ§èšºæãšããã®ã¯ãè匱æ§èšºæã®å
補åãã§ãè匱æ§èšºæãå€éšã®æ¥è
ã«ãé¡ãããã®ã§ã¯ãªãèªç€Ÿå
ã§å®æœããŠéçºã«ãã£ãŒãããã¯ãã圢ã§ãã å
補ã«ãã蚺æã§ãã£ãŠããåºæ¬çãªæµãã¯ãã§ã«ã玹ä»ããæµãã§é²ããŠããŸããã察象ãµãŒãã¹ãã¯ããŒã«ããŠãã蚺æå¯Ÿè±¡ã確å®ããããŸã§ã®äž»èŠãªãã€ã³ãã§ã¯ãæäœæé ã«æŒãããªãããªã©ã®èгç¹ã§éçºããã®ã¬ãã¥ãŒãæãããã«ããŠããŸããããã¯å
補ã§ããããããå®çŸã§ããŠããã¢ãããŒãã ãšæããŸãã å
補ã§å®æœããŠãã蚺æå¯Ÿè±¡äžèЧã®äŸ ãªãããããŸã§è匱æ§èšºæã«ã€ããŠæžããŠããŸããããããã¯çŸåšã®æ¥åã®ã»ãã®äžéšã§ããã®ã»ãã«ã¯ ISMS ã®éçšïŒäºåå±ïŒãšããŠã®æŽ»åã®ã»ããã³ãŒãã¬ãŒã IT ã¡ã³ããŒãšå
±ã«äºæ¥ç¶ç¶èšç»ïŒBCPïŒæŽåãªã©ã䞊è¡ããŠé²ããªããã°ãªããŸããããšã«ããé¢ããç¯å²ãåºãããããŠããšãŠãå°éãªæŽ»åã§ãã ã§ãããäŒç€Ÿå
šäœã俯ç°ããŠã»ãã¥ãªãã£ã®ããšãæèããŠç©äºãèãç¶ããããç«å Žãšããã®ã¯ã»ãã¥ãªãã£äŒç€Ÿã§ã¯çµéšã§ããªãããšã§ãèªç€Ÿã«ãšã£ãŠã®æé©è§£ã¯äœãïŒãæ¢æ±ãç¶ããããšã®æ°ããªé¢çœããèŠãã ãããšãã§ããŠããŸãã ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã®éããšæ°ã¥ããèª²é¡ ãããŸã§ã®å
容ã§ãæ°ã¥ãã®æ¹ãããããšæããŸãããçŸåšã®æ¥å㯠ISMS éçšãåããšããŠãªã¹ã¯ãããžã¡ã³ãã®åéãå€ããå®åçãªããã¯ã°ã©ãŠã³ãã®ãªãæ¥åãåºãŠããŠããŸãã ã·ã¹ãã çãªã»ãã¥ãªãã£ã«é¢ããŠããã©ããã£ãŠæªçšã§ãããâŠå¥œç©ã® BOF*ã¯ç¡ãã®ã..BOF ã¯ã©ãã âŠããšããæ»æèгç¹ã®æèåè·¯ã®ã¿ã§å€æããã®ã§ã¯ãªãããã©ã®ãããªãœãªã¥ãŒã·ã§ã³ãä»çµã¿ããŸãã¯ã«ãŒã«ã§ãªã¹ã¯äœæžã§ããã®ãããããŠãããããªãã¹ãèªåã§éçšã§ããããã«ã¯ã©ããããããšããå®ãåŽã«ãšã£ãŠã®å®åçãªèª²é¡ãèããªããã°ãªããŸããã * ãããã¡ãªãŒããŒãããŒã®ããš ãã®ã»ãã«ãç§ãå®éã«æããŠããã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æ°ã¥ããèãæ¹ã®å€åãæããŠãããšã以äžã®ãããªãã®ããããŸãã æ»æææ³ã®çè§£ãèžãŸããïŒç€Ÿå
ãªãœãŒã¹ãéã¿ãïŒçŸå®çã«éçšããã察çã®ä»çµã¿ãææ¡ã§ããªããã°ãªããªãããšãçæãã ä»çµã¿åãã«ãŒã«åããã«ãããšã³ãžãã¢ã§ã¯ãªãåŸæ¥å¡ã®ååšãèæ
®ããããã«ãªã£ã è匱æ§åäœã®åœ±é¿ç¯å²ã床åãã§ã¯ãªããã·ã¹ãã ã®å©ç𿹿³ãæ
å ±ã®çš®é¡ãªã©ã瀟å
ã ããããæãŠãèŠç¹ãæã£ãŠè©äŸ¡ããããã«ãªã£ã ãã¢ããããŒãããããŠãã§ããªããåé¡ãçããªãã·ã¹ãã èšèšãèèŠã§ããããšãæ¹ããŠèªèãã ãããã®å€åãžã®å¯Ÿå¿ã«ã€ããŠã¯ããã¹ãŠãœãªã¥ãŒã·ã§ã³ãèªååã«å¯ŸããŠç§ã®ç¥èŠããŸã ãŸã äžè¶³ããŠãããããããããã¯ãæ»æè
ç®ç·ãã®èãæ¹ã«å ããŠããœãªã¥ãŒã·ã§ã³ãšèªååãã®ç¥èŠãè£å®ããªãããã¡ãã¬ãŒã®ã»ãã¥ãªãã£åäžã«è²¢ç®ãç¶ããŠãããããšèããŠããŸãã ã»ãã¥ãªãã£ãšã³ãžãã¢åéäžïŒ æåŸãšãªããŸãããã»ãã¥ãªãã£ãšã³ãžãã¢ã¯é¢ããæ¥åã®å¹
åºãã«å ãã絶察çãªæ£è§£ãååšããªãåé¡ã«ãœãªã¥ãŒã·ã§ã³ãæäŸããããšãå€ãä»äºã§ãã ã¡ãã¬ãŒã§ã®å
補ã«ããè匱æ§èšºæãå
šç€Ÿã»ãã¥ãªãã£ã«èå³ãããæ¹ã¯ãã²ãžã§ã€ã³ããŠãã ããããã€ã§ããåŸ
ã¡ããŠããŸãïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã§ã»ãã¥ãªãã£ãšã³ãžãã¢ãããŠããäžæµŠã§ãã ç§ã¯ã¡ãã¬ãŒã«ã¯ä»å¹ŽïŒ2021 幎ïŒã® 2 æã«å
¥ç€Ÿãããã®ããã°ãå·çããŠããæç¹ã§å
¥ç€Ÿ 4 ã¶æç®ãšãªããŸããçŸåšãå
šç€Ÿçãªã»ãã¥ãªãã£ãæ
åœããŠããŸãã ä»åã®ããã°ã¯ä»¥äžã®ãããªæ§æã§ãå±ãããŸãã ç®æ¬¡ èªå·±ç޹ä»ãšãæ¬ããã°ã®ããŒãã«ã€ã㊠åè·ã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®ä»äº ã¡ãã¬ãŒã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã®ä»äº ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã®éããšæ°ã¥ããèª²é¡ ã»ãã¥ãªãã£ãšã³ãžãã¢åéäžïŒ èªå·±ç޹ä»ãšãæ¬ããã°ã®ããŒãã«ã€ã㊠ç§ã¯åè·ã§ã»ãã¥ãªãã£å°æ¥äŒç€Ÿã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠè匱æ§èšºæããããã¬ãŒã·ã§ã³ãã¹ãã®ã»ããã»ãã¥ãªãã£ç ä¿®ã®è¬åž«ããã¡ã€ã¢ãŠã©ãŒã«ã Web ã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ïŒWAFïŒãšåŒã°ããæ©åšã®å°å
¥æ¯æŽãªã©ã«æºãã£ãŠããŸããã ãã®ãªãã§ãè匱æ§èšºæã®æ¡ä»¶ã«å€ãé¢ãã£ãŠããããšããããæåŸã«ã¯è匱æ§èšºæã®ãµãŒãã¹ãªãŒããŒãšããŠãµãŒãã¹ã«é¢ãããã¹ãŠãåããŸãšããç«å Žã§ããã ä»ã§ã¯äºæ¥äŒç€Ÿã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠæŽ»åããŠããããã§ããããã®ããã°ã§ã¯ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã«ã©ã®ãããªå€åãããããã®å€åã«ããçŽé¢ããŠããèªåèªèº«ã®èª²é¡ãèŠåŽã«ã€ããŠæžããŠãããŸãã åè·ã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®ä»äº å
è¿°ã®ãšããåè·ã§ã¯è匱æ§èšºæã«é¢ããããšãå€ãã£ããããããã§ã¯è匱æ§èšºæã«ã€ããŠåãäžããŸãã è匱æ§èšºæã¯ã¹ãããæ¡ä»¶ãšããŠå®æœããããšãã»ãšãã©ã§ããã®ã§ãæ¡ä»¶ã®æµããšãã芳ç¹ã§ä»äºå
å®¹ãæŽçãããšä»¥äžã®ããã«ãªããŸãã å¶æ¥ãã©ããŒïŒåè¡ã Q&A ãªã©ïŒ ã¹ã±ãžã¥ãŒã«ã蚺æå¯Ÿè±¡ãªã©ã«ã€ããŠã客æ§ã«ãã¢ãªã³ã° a. ããã§èšºæçšç°å¢ã®æºåããé¡ãããããšãå€ã 蚺æå¯Ÿè±¡ã®èª¿æ»ãã¯ããŒã«äœæ¥ ã¹ã±ãžã¥ãŒã«æãå¶éäºé
ã«ã€ããŠã客æ§ãšããåãã èšç»æžãäœæ 瀟å
ã§èšç»æžã¬ãã¥ãŒãã客æ§ãžéä» èšºæäœæ¥ a. èªå蚺æããŒã«ã®èª¿æŽ a. æå蚺æã®å®æœ a. åºåçµæã®ç²Ÿæ»ãåçŸæ§ã®ç¢ºèª a. éå ±ãããã°åœæ¥äžã«æŽçããŠéä» èšºæçµæã®ãšããã³ã¹æŽç å ±åæžã®äžæžãããªã¹ã¯åºŠåãã®æ€èš 瀟å
ã§å ±åæžã¬ãã¥ãŒ ã客æ§ãžå ±åæžãçŽå å ±åäŒã®å®æœ ãã®ãªãã§ãç¹ã«èšºææ
åœè
ã®æè¡çã¹ãã«ãåãããã®ããæå蚺æã®å®æœããšãåºåçµæã®ç²Ÿæ»ãåçŸæ§ã®ç¢ºèªãã§ãå
šäœã®ãã¡çŽ 4 å²ã»ã©ãæ®ãã¯ããã¥ã¡ã³ãäœæãã¬ãã¥ãŒãããŒãã£ã³ã°ãæ¥åæ¹åãšãã£ãå®åæ¥åãå ããŠããŸããã ç§ã¯ããã® 4 å²ã®éšåã«å¯ŸããŠä»å 䟡å€ãæäŸãããããšãããšã³ãžãã¢ãšããŠã®æ°è² ããšãå人çãªé¢å¿ãšãã 2 ã€ã®çç±ãããå¯ãæéãåã£ãŠã¯è匱æ§ã®æªçšïŒExploitïŒææ³ã®ç¿åŸãšãç¥èçãªè£åŒ·ãšããŠã®è³æ ŒååŸã«æãæ®ããææããããŸããã çµå±ãå¯äžè¶³ãç¶ããããšãåå ã§èºçãçºçããå
¥é¢äžæ©åãŸã§ççããŒã«ãŒãæªåãããšããèªåèªèº«ã®è匱æ§ãé²åããããšã«ãªã£ãã®ã§ãããã¡ãããšå€ã¯å¯ãŸãããã 話ããããè±ç·ããŸããããè匱æ§èšºæã SI æ¡ä»¶ãªã©ã¯å¹ŽåºŠæ«ã«ããŒã¯ãè¿ãããã®ã®å¹ŽéãéããŠäºæéšã§å泚ããããšãå€ããäžå®ã®å質ãç¶æããªãããçŽæãå®ãããã«ç®ã®åã®æ¡ä»¶ã§å¿
æ»ã ã£ããšããã®ãä»ãŸã§ã®ä»äºã®ã¹ã¿ã€ã«ã§ããã ç®ã®åã®æ¡ä»¶ãã²ãããããªããçµç¹ã«å¯ŸããŠãå ±åæžãæåºããŠçµãããã®é¢ããæ¹ã«å¯ŸããŠãããã§ç€ŸäŒã®åœ¹ã«ç«ã£ãŠããã®ã ãããããšããçåãçãŸããããšããã¡ãã¬ãŒã«å
¥ç€Ÿãã転æ©ã«ãªã£ãŠããŸãã ã¡ãã¬ãŒã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã®ä»äº ããŠãã»ãã¥ãªãã£ãµãŒãã¹ãæäŸããåŽã§æ¡ä»¶ã«è¿œãããŠããç§ãã¡ãã¬ãŒã§ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠæŽ»åããããšã«ãªã£ãŠããããã§ãããå
·äœçã«ä»ãªã«ãããŠããã®ãïŒãšãããšã倧ããã¯ä»¥äžã® 6 ã€ãæããããŸãã èªç€ŸãµãŒãã¹ã«å¯Ÿããè匱æ§èšºæ è
åšæ
å ±ãèåŒ±æ§æ
å ±ã®åéãåšç¥ å
šç€Ÿçãªæ¥åããã»ã¹äžã®ãªã¹ã¯èª¿æ» å
šç€Ÿã·ã¹ãã ã® BCP æŽåãä¿å® ISMS éçš ã»ãã¥ãªãã£çžè« èªç€ŸãµãŒãã¹ã«å¯Ÿããè匱æ§èšºæãšããã®ã¯ãè匱æ§èšºæã®å
補åãã§ãè匱æ§èšºæãå€éšã®æ¥è
ã«ãé¡ãããã®ã§ã¯ãªãèªç€Ÿå
ã§å®æœããŠéçºã«ãã£ãŒãããã¯ãã圢ã§ãã å
補ã«ãã蚺æã§ãã£ãŠããåºæ¬çãªæµãã¯ãã§ã«ã玹ä»ããæµãã§é²ããŠããŸããã察象ãµãŒãã¹ãã¯ããŒã«ããŠãã蚺æå¯Ÿè±¡ã確å®ããããŸã§ã®äž»èŠãªãã€ã³ãã§ã¯ãæäœæé ã«æŒãããªãããªã©ã®èгç¹ã§éçºããã®ã¬ãã¥ãŒãæãããã«ããŠããŸããããã¯å
補ã§ããããããå®çŸã§ããŠããã¢ãããŒãã ãšæããŸãã å
補ã§å®æœããŠãã蚺æå¯Ÿè±¡äžèЧã®äŸ ãªãããããŸã§è匱æ§èšºæã«ã€ããŠæžããŠããŸããããããã¯çŸåšã®æ¥åã®ã»ãã®äžéšã§ããã®ã»ãã«ã¯ ISMS ã®éçšïŒäºåå±ïŒãšããŠã®æŽ»åã®ã»ããã³ãŒãã¬ãŒã IT ã¡ã³ããŒãšå
±ã«äºæ¥ç¶ç¶èšç»ïŒBCPïŒæŽåãªã©ã䞊è¡ããŠé²ããªããã°ãªããŸããããšã«ããé¢ããç¯å²ãåºãããããŠããšãŠãå°éãªæŽ»åã§ãã ã§ãããäŒç€Ÿå
šäœã俯ç°ããŠã»ãã¥ãªãã£ã®ããšãæèããŠç©äºãèãç¶ããããç«å Žãšããã®ã¯ã»ãã¥ãªãã£äŒç€Ÿã§ã¯çµéšã§ããªãããšã§ãèªç€Ÿã«ãšã£ãŠã®æé©è§£ã¯äœãïŒãæ¢æ±ãç¶ããããšã®æ°ããªé¢çœããèŠãã ãããšãã§ããŠããŸãã ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã®éããšæ°ã¥ããèª²é¡ ãããŸã§ã®å
容ã§ãæ°ã¥ãã®æ¹ãããããšæããŸãããçŸåšã®æ¥å㯠ISMS éçšãåããšããŠãªã¹ã¯ãããžã¡ã³ãã®åéãå€ããå®åçãªããã¯ã°ã©ãŠã³ãã®ãªãæ¥åãåºãŠããŠããŸãã ã·ã¹ãã çãªã»ãã¥ãªãã£ã«é¢ããŠããã©ããã£ãŠæªçšã§ãããâŠå¥œç©ã® BOF*ã¯ç¡ãã®ã..BOF ã¯ã©ãã âŠããšããæ»æèгç¹ã®æèåè·¯ã®ã¿ã§å€æããã®ã§ã¯ãªãããã©ã®ãããªãœãªã¥ãŒã·ã§ã³ãä»çµã¿ããŸãã¯ã«ãŒã«ã§ãªã¹ã¯äœæžã§ããã®ãããããŠãããããªãã¹ãèªåã§éçšã§ããããã«ã¯ã©ããããããšããå®ãåŽã«ãšã£ãŠã®å®åçãªèª²é¡ãèããªããã°ãªããŸããã * ãããã¡ãªãŒããŒãããŒã®ããš ãã®ã»ãã«ãç§ãå®éã«æããŠããã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æ°ã¥ããèãæ¹ã®å€åãæããŠãããšã以äžã®ãããªãã®ããããŸãã æ»æææ³ã®çè§£ãèžãŸããïŒç€Ÿå
ãªãœãŒã¹ãéã¿ãïŒçŸå®çã«éçšããã察çã®ä»çµã¿ãææ¡ã§ããªããã°ãªããªãããšãçæãã ä»çµã¿åãã«ãŒã«åããã«ãããšã³ãžãã¢ã§ã¯ãªãåŸæ¥å¡ã®ååšãèæ
®ããããã«ãªã£ã è匱æ§åäœã®åœ±é¿ç¯å²ã床åãã§ã¯ãªããã·ã¹ãã ã®å©ç𿹿³ãæ
å ±ã®çš®é¡ãªã©ã瀟å
ã ããããæãŠãèŠç¹ãæã£ãŠè©äŸ¡ããããã«ãªã£ã ãã¢ããããŒãããããŠãã§ããªããåé¡ãçããªãã·ã¹ãã èšèšãèèŠã§ããããšãæ¹ããŠèªèãã ãããã®å€åãžã®å¯Ÿå¿ã«ã€ããŠã¯ããã¹ãŠãœãªã¥ãŒã·ã§ã³ãèªååã«å¯ŸããŠç§ã®ç¥èŠããŸã ãŸã äžè¶³ããŠãããããããããã¯ãæ»æè
ç®ç·ãã®èãæ¹ã«å ããŠããœãªã¥ãŒã·ã§ã³ãšèªååãã®ç¥èŠãè£å®ããªãããã¡ãã¬ãŒã®ã»ãã¥ãªãã£åäžã«è²¢ç®ãç¶ããŠãããããšèããŠããŸãã ã»ãã¥ãªãã£ãšã³ãžãã¢åéäžïŒ æåŸãšãªããŸãããã»ãã¥ãªãã£ãšã³ãžãã¢ã¯é¢ããæ¥åã®å¹
åºãã«å ãã絶察çãªæ£è§£ãååšããªãåé¡ã«ãœãªã¥ãŒã·ã§ã³ãæäŸããããšãå€ãä»äºã§ãã ã¡ãã¬ãŒã§ã®å
補ã«ããè匱æ§èšºæãå
šç€Ÿã»ãã¥ãªãã£ã«èå³ãããæ¹ã¯ãã²ãžã§ã€ã³ããŠãã ããããã€ã§ããåŸ
ã¡ããŠããŸãïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã§ã»ãã¥ãªãã£ãšã³ãžãã¢ãããŠããäžæµŠã§ãã ç§ã¯ã¡ãã¬ãŒã«ã¯ä»å¹ŽïŒ2021 幎ïŒã® 2 æã«å
¥ç€Ÿãããã®ããã°ãå·çããŠããæç¹ã§å
¥ç€Ÿ 4 ã¶æç®ãšãªããŸããçŸåšãå
šç€Ÿçãªã»ãã¥ãªãã£ãæ
åœããŠããŸãã ä»åã®ããã°ã¯ä»¥äžã®ãããªæ§æã§ãå±ãããŸãã ç®æ¬¡ èªå·±ç޹ä»ãšãæ¬ããã°ã®ããŒãã«ã€ã㊠åè·ã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®ä»äº ã¡ãã¬ãŒã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã®ä»äº ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã®éããšæ°ã¥ããèª²é¡ ã»ãã¥ãªãã£ãšã³ãžãã¢åéäžïŒ èªå·±ç޹ä»ãšãæ¬ããã°ã®ããŒãã«ã€ã㊠ç§ã¯åè·ã§ã»ãã¥ãªãã£å°æ¥äŒç€Ÿã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠè匱æ§èšºæããããã¬ãŒã·ã§ã³ãã¹ãã®ã»ããã»ãã¥ãªãã£ç ä¿®ã®è¬åž«ããã¡ã€ã¢ãŠã©ãŒã«ã Web ã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ïŒWAFïŒãšåŒã°ããæ©åšã®å°å
¥æ¯æŽãªã©ã«æºãã£ãŠããŸããã ãã®ãªãã§ãè匱æ§èšºæã®æ¡ä»¶ã«å€ãé¢ãã£ãŠããããšããããæåŸã«ã¯è匱æ§èšºæã®ãµãŒãã¹ãªãŒããŒãšããŠãµãŒãã¹ã«é¢ãããã¹ãŠãåããŸãšããç«å Žã§ããã ä»ã§ã¯äºæ¥äŒç€Ÿã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠæŽ»åããŠããããã§ããããã®ããã°ã§ã¯ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã«ã©ã®ãããªå€åãããããã®å€åã«ããçŽé¢ããŠããèªåèªèº«ã®èª²é¡ãèŠåŽã«ã€ããŠæžããŠãããŸãã åè·ã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®ä»äº å
è¿°ã®ãšããåè·ã§ã¯è匱æ§èšºæã«é¢ããããšãå€ãã£ããããããã§ã¯è匱æ§èšºæã«ã€ããŠåãäžããŸãã è匱æ§èšºæã¯ã¹ãããæ¡ä»¶ãšããŠå®æœããããšãã»ãšãã©ã§ããã®ã§ãæ¡ä»¶ã®æµããšãã芳ç¹ã§ä»äºå
å®¹ãæŽçãããšä»¥äžã®ããã«ãªããŸãã å¶æ¥ãã©ããŒïŒåè¡ã Q&A ãªã©ïŒ ã¹ã±ãžã¥ãŒã«ã蚺æå¯Ÿè±¡ãªã©ã«ã€ããŠã客æ§ã«ãã¢ãªã³ã° a. ããã§èšºæçšç°å¢ã®æºåããé¡ãããããšãå€ã 蚺æå¯Ÿè±¡ã®èª¿æ»ãã¯ããŒã«äœæ¥ ã¹ã±ãžã¥ãŒã«æãå¶éäºé
ã«ã€ããŠã客æ§ãšããåãã èšç»æžãäœæ 瀟å
ã§èšç»æžã¬ãã¥ãŒãã客æ§ãžéä» èšºæäœæ¥ a. èªå蚺æããŒã«ã®èª¿æŽ a. æå蚺æã®å®æœ a. åºåçµæã®ç²Ÿæ»ãåçŸæ§ã®ç¢ºèª a. éå ±ãããã°åœæ¥äžã«æŽçããŠéä» èšºæçµæã®ãšããã³ã¹æŽç å ±åæžã®äžæžãããªã¹ã¯åºŠåãã®æ€èš 瀟å
ã§å ±åæžã¬ãã¥ãŒ ã客æ§ãžå ±åæžãçŽå å ±åäŒã®å®æœ ãã®ãªãã§ãç¹ã«èšºææ
åœè
ã®æè¡çã¹ãã«ãåãããã®ããæå蚺æã®å®æœããšãåºåçµæã®ç²Ÿæ»ãåçŸæ§ã®ç¢ºèªãã§ãå
šäœã®ãã¡çŽ 4 å²ã»ã©ãæ®ãã¯ããã¥ã¡ã³ãäœæãã¬ãã¥ãŒãããŒãã£ã³ã°ãæ¥åæ¹åãšãã£ãå®åæ¥åãå ããŠããŸããã ç§ã¯ããã® 4 å²ã®éšåã«å¯ŸããŠä»å 䟡å€ãæäŸãããããšãããšã³ãžãã¢ãšããŠã®æ°è² ããšãå人çãªé¢å¿ãšãã 2 ã€ã®çç±ãããå¯ãæéãåã£ãŠã¯è匱æ§ã®æªçšïŒExploitïŒææ³ã®ç¿åŸãšãç¥èçãªè£åŒ·ãšããŠã®è³æ ŒååŸã«æãæ®ããææããããŸããã çµå±ãå¯äžè¶³ãç¶ããããšãåå ã§èºçãçºçããå
¥é¢äžæ©åãŸã§ççããŒã«ãŒãæªåãããšããèªåèªèº«ã®è匱æ§ãé²åããããšã«ãªã£ãã®ã§ãããã¡ãããšå€ã¯å¯ãŸãããã 話ããããè±ç·ããŸããããè匱æ§èšºæã SI æ¡ä»¶ãªã©ã¯å¹ŽåºŠæ«ã«ããŒã¯ãè¿ãããã®ã®å¹ŽéãéããŠäºæéšã§å泚ããããšãå€ããäžå®ã®å質ãç¶æããªãããçŽæãå®ãããã«ç®ã®åã®æ¡ä»¶ã§å¿
æ»ã ã£ããšããã®ãä»ãŸã§ã®ä»äºã®ã¹ã¿ã€ã«ã§ããã ç®ã®åã®æ¡ä»¶ãã²ãããããªããçµç¹ã«å¯ŸããŠãå ±åæžãæåºããŠçµãããã®é¢ããæ¹ã«å¯ŸããŠãããã§ç€ŸäŒã®åœ¹ã«ç«ã£ãŠããã®ã ãããããšããçåãçãŸããããšããã¡ãã¬ãŒã«å
¥ç€Ÿãã転æ©ã«ãªã£ãŠããŸãã ã¡ãã¬ãŒã§ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã®ä»äº ããŠãã»ãã¥ãªãã£ãµãŒãã¹ãæäŸããåŽã§æ¡ä»¶ã«è¿œãããŠããç§ãã¡ãã¬ãŒã§ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠæŽ»åããããšã«ãªã£ãŠããããã§ãããå
·äœçã«ä»ãªã«ãããŠããã®ãïŒãšãããšã倧ããã¯ä»¥äžã® 6 ã€ãæããããŸãã èªç€ŸãµãŒãã¹ã«å¯Ÿããè匱æ§èšºæ è
åšæ
å ±ãèåŒ±æ§æ
å ±ã®åéãåšç¥ å
šç€Ÿçãªæ¥åããã»ã¹äžã®ãªã¹ã¯èª¿æ» å
šç€Ÿã·ã¹ãã ã® BCP æŽåãä¿å® ISMS éçš ã»ãã¥ãªãã£çžè« èªç€ŸãµãŒãã¹ã«å¯Ÿããè匱æ§èšºæãšããã®ã¯ãè匱æ§èšºæã®å
補åãã§ãè匱æ§èšºæãå€éšã®æ¥è
ã«ãé¡ãããã®ã§ã¯ãªãèªç€Ÿå
ã§å®æœããŠéçºã«ãã£ãŒãããã¯ãã圢ã§ãã å
補ã«ãã蚺æã§ãã£ãŠããåºæ¬çãªæµãã¯ãã§ã«ã玹ä»ããæµãã§é²ããŠããŸããã察象ãµãŒãã¹ãã¯ããŒã«ããŠãã蚺æå¯Ÿè±¡ã確å®ããããŸã§ã®äž»èŠãªãã€ã³ãã§ã¯ãæäœæé ã«æŒãããªãããªã©ã®èгç¹ã§éçºããã®ã¬ãã¥ãŒãæãããã«ããŠããŸããããã¯å
補ã§ããããããå®çŸã§ããŠããã¢ãããŒãã ãšæããŸãã å
補ã§å®æœããŠãã蚺æå¯Ÿè±¡äžèЧã®äŸ ãªãããããŸã§è匱æ§èšºæã«ã€ããŠæžããŠããŸããããããã¯çŸåšã®æ¥åã®ã»ãã®äžéšã§ããã®ã»ãã«ã¯ ISMS ã®éçšïŒäºåå±ïŒãšããŠã®æŽ»åã®ã»ããã³ãŒãã¬ãŒã IT ã¡ã³ããŒãšå
±ã«äºæ¥ç¶ç¶èšç»ïŒBCPïŒæŽåãªã©ã䞊è¡ããŠé²ããªããã°ãªããŸããããšã«ããé¢ããç¯å²ãåºãããããŠããšãŠãå°éãªæŽ»åã§ãã ã§ãããäŒç€Ÿå
šäœã俯ç°ããŠã»ãã¥ãªãã£ã®ããšãæèããŠç©äºãèãç¶ããããç«å Žãšããã®ã¯ã»ãã¥ãªãã£äŒç€Ÿã§ã¯çµéšã§ããªãããšã§ãèªç€Ÿã«ãšã£ãŠã®æé©è§£ã¯äœãïŒãæ¢æ±ãç¶ããããšã®æ°ããªé¢çœããèŠãã ãããšãã§ããŠããŸãã ã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æŽ»åå
容ã圹å²ã®éããšæ°ã¥ããèª²é¡ ãããŸã§ã®å
容ã§ãæ°ã¥ãã®æ¹ãããããšæããŸãããçŸåšã®æ¥å㯠ISMS éçšãåããšããŠãªã¹ã¯ãããžã¡ã³ãã®åéãå€ããå®åçãªããã¯ã°ã©ãŠã³ãã®ãªãæ¥åãåºãŠããŠããŸãã ã·ã¹ãã çãªã»ãã¥ãªãã£ã«é¢ããŠããã©ããã£ãŠæªçšã§ãããâŠå¥œç©ã® BOF*ã¯ç¡ãã®ã..BOF ã¯ã©ãã âŠããšããæ»æèгç¹ã®æèåè·¯ã®ã¿ã§å€æããã®ã§ã¯ãªãããã©ã®ãããªãœãªã¥ãŒã·ã§ã³ãä»çµã¿ããŸãã¯ã«ãŒã«ã§ãªã¹ã¯äœæžã§ããã®ãããããŠãããããªãã¹ãèªåã§éçšã§ããããã«ã¯ã©ããããããšããå®ãåŽã«ãšã£ãŠã®å®åçãªèª²é¡ãèããªããã°ãªããŸããã * ãããã¡ãªãŒããŒãããŒã®ããš ãã®ã»ãã«ãç§ãå®éã«æããŠããã»ãã¥ãªãã£ãšã³ãžãã¢ãšããŠã®æ°ã¥ããèãæ¹ã®å€åãæããŠãããšã以äžã®ãããªãã®ããããŸãã æ»æææ³ã®çè§£ãèžãŸããïŒç€Ÿå
ãªãœãŒã¹ãéã¿ãïŒçŸå®çã«éçšããã察çã®ä»çµã¿ãææ¡ã§ããªããã°ãªããªãããšãçæãã ä»çµã¿åãã«ãŒã«åããã«ãããšã³ãžãã¢ã§ã¯ãªãåŸæ¥å¡ã®ååšãèæ
®ããããã«ãªã£ã è匱æ§åäœã®åœ±é¿ç¯å²ã床åãã§ã¯ãªããã·ã¹ãã ã®å©ç𿹿³ãæ
å ±ã®çš®é¡ãªã©ã瀟å
ã ããããæãŠãèŠç¹ãæã£ãŠè©äŸ¡ããããã«ãªã£ã ãã¢ããããŒãããããŠãã§ããªããåé¡ãçããªãã·ã¹ãã èšèšãèèŠã§ããããšãæ¹ããŠèªèãã ãããã®å€åãžã®å¯Ÿå¿ã«ã€ããŠã¯ããã¹ãŠãœãªã¥ãŒã·ã§ã³ãèªååã«å¯ŸããŠç§ã®ç¥èŠããŸã ãŸã äžè¶³ããŠãããããããããã¯ãæ»æè
ç®ç·ãã®èãæ¹ã«å ããŠããœãªã¥ãŒã·ã§ã³ãšèªååãã®ç¥èŠãè£å®ããªãããã¡ãã¬ãŒã®ã»ãã¥ãªãã£åäžã«è²¢ç®ãç¶ããŠãããããšèããŠããŸãã ã»ãã¥ãªãã£ãšã³ãžãã¢åéäžïŒ æåŸãšãªããŸãããã»ãã¥ãªãã£ãšã³ãžãã¢ã¯é¢ããæ¥åã®å¹
åºãã«å ãã絶察çãªæ£è§£ãååšããªãåé¡ã«ãœãªã¥ãŒã·ã§ã³ãæäŸããããšãå€ãä»äºã§ãã ã¡ãã¬ãŒã§ã®å
補ã«ããè匱æ§èšºæãå
šç€Ÿã»ãã¥ãªãã£ã«èå³ãããæ¹ã¯ãã²ãžã§ã€ã³ããŠãã ããããã€ã§ããåŸ
ã¡ããŠããŸãïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp