ããã«ã¡ã¯
ç§ãã¡ã¯ãçŸå®äžçãšä»®æ³äžçã®äž¡æ¹ã§ãå®å šãªã°ããŒãã«åã®äžçã«äœãã§ããŸãã ã€ãŸããç°ãªãããã€ã¹ã§åãããŒã¿ãåãèšå®ãåãããã°ã©ã ã®åäœãå®çŸãããã®ã§ãã ç§ãã¡ã®æ代ã®ãã¹ãŠã®ãã®ãšãã¹ãŠã®ãã®ã®ãã®ãããªåæã¯ãã¯ã©ãŠãã®å©ããåããŠç°¡åã«éæãããŸãã ããã«ã€ããŠã¯ããã®èšäºã§èª¬æããŸããã€ãŸããWindows 8ã¢ããªã±ãŒã·ã§ã³ïŒWinRTïŒãšWindows Azureã¯ã©ãŠãã亀差ãããŠãããŒã¿ãšã¡ã¿ããŒã¿ãä¿åããŸãã
å ¥é
ãããã£ãŠãWindows 8çšã®ã¢ããªã±ãŒã·ã§ã³ïŒããã¹ããšã³ããªãä¿åããããã®ãµãŒãã¹ãšããïŒããããšããŸãã
1ïŒåã¬ã³ãŒãã«é¢ããæå°éã®æ å ±ïŒããšãã°ãã¿ã€ãã«ãäœææ¥ïŒãå«ãã¬ã³ãŒãã®ãªã¹ãã衚瀺ããå¿ èŠããããŸãã ãããã¡ã¿ããŒã¿ãšåŒã³ãŸãã
2ïŒç¹å®ã®èŠçŽ ã«ç§»åãããšãã«ãã¬ã³ãŒãïŒã³ã³ãã³ãïŒã«é¢ãã詳现æ å ±ã衚瀺ã§ããå¿ èŠããããŸãã ãããããŒã¿ãšåŒã³ãŸãã
3ïŒWindows 8ãå®è¡ããŠããããŸããŸãªããã€ã¹éã§ããŒã¿ãåæããå¿ èŠããããŸãïŒèªå® ã§ã¬ã³ãŒããäœæããè·å Žã§èŠãŸããïŒã
ç§ãèŠãæãæ£ããã¢ãããŒãã¯ãããŒã¿ãšã¡ã¿ããŒã¿ãåå²ããããããç°ãªãå Žæã«ä¿åããããšã§ãã ããã«ããããªã¹ãã«è¡šç€ºããå°ããªã¡ã¿ããŒã¿ããã°ããååŸãããŠãŒã¶ãŒã®èŠæ±ã«å¿ããŠãéããããŒã¿ãèªã¿èŸŒãããšãã§ããŸãã
ãã®èšäºã§ã¯ãã¡ã¿ããŒã¿ãä¿åããããã®Windows Azureã¢ãã€ã«ãµãŒãã¹ãšãããŒã¿ãä¿åããããã®Windows Azure Blob Storageã玹ä»ããŸãã åæ¹ã«ã¯å€ãã®ããã¹ããšåçããããŸãã
ã¹ããã1.ã¯ã©ãŠãã¹ãã¬ãŒãžã䜿çšãã
Windows Azure Blob Storageã䜿çšããããæè»ã§ã¯ãã¹ãã©ãããã©ãŒã ãªäœæ¥ã®ããã«ãã¢ãã€ã«ã¯ã©ã€ã¢ã³ãããã®èŠæ±ãåä¿¡ããã³åŠçããWCFãµãŒãã¹ã®åœ¢åŒã§å¥ã®ã¬ã€ã€ãŒãå°å ¥ããããšããå§ãããŸãã ãããã£ãŠããã®ã¬ã€ãã®æåã®ã¹ãããã¯ããã€ãã®ã¹ãããã§æ§æãããŸãã
å¿ èŠãªWindows AzureãµãŒãã¹ãäœæãã
ãŸããWindows Azureã«2ã€ã®ãµãŒãã¹ïŒã¯ã©ãŠããµãŒãã¹ãšã¹ãã¬ãŒãžïŒãäœæããŠãã¯ã©ãŠãç°å¢ãæºåããå¿ èŠããããŸãã 2çªç®ã®ãã®ããå§ããŸãããã Windows Azure管çããŒã¿ã«ã«ã¢ã¯ã»ã¹ããŸã ã ããŒãžã®äžéšã«ã¯ããã©ã¹ã®ä»ãã倧ããªãã¿ã³ããããŸãã ã¯ãªãã¯ãããšãäœæãããµãŒãã¹ã®éžæãéããŸãã ããŒã¿ãµãŒãã¹->ã¹ãã¬ãŒãžãå¿ èŠã§ãã
䟿å©ãªæ°ãããµãŒãã¹ã®ååãå ¥åããäžã®[daw]ãã¿ã³ãã¯ãªãã¯ããŠããµãŒãã¹ããªã³ã©ã€ã³ã¹ããŒã¿ã¹ãåãåããŸã§åŸ ã¡ãŸãã ãã®åŸãã¹ãã¬ãŒãžã®èšå®ã«å ¥ããç®ãšããŠã¹ã§ãããŒã®ç®¡çããã¿ã³ãæ¢ããæåiã¢ã€ã³ã³ãããŒãã«è¡šç€ºãããŸãã ã¯ãªãã¯ãããšãç®ã®åã«3ã€ã®ãã£ãŒã«ãã衚瀺ãããŸãã æåã®ãã®ã«ã¯ãäœæäžã«å²ãåœãŠããã®ãµãŒãã¹ã®ååãå«ãŸãã2çªç®ãš3çªç®ã«ã¯ã¢ã¯ã»ã¹ããŒãæ ŒçŽãããŸãã ãããã®æåã®ãã®ãèŠããŠãããŠãã ãããããã¯ããã«ç§ãã¡ã«åœ¹ç«ã¡ãŸãã
WCFãµãŒãã¹ã®äœæ
Visual Studio 2012ã䜿çšããŠWindows Azureã§WCFãµãŒãã¹ãšå¯Ÿå¿ãããµãŒãã¹ãäœæããŸããäŸãšããŠUltimateããŒãžã§ã³ã䜿çšããŸãããWebããŒãžã§ã³ã¯ç¡æã§ã®äœ¿çšã«é©ããŠããŸãã
ãã®ãããã¹ã¿ãžãªãéããã¯ã©ãŠãã¿ã€ãã®æ°ãããããžã§ã¯ããäœæããŸãã
衚瀺ããããŠã£ã³ããŠã§ãã¯ã©ãŠãã«é 眮ããå¿ èŠããããããžã§ã¯ãã®ã¿ã€ããéžæããããã«æ±ããããŸãã WCFãµãŒãã¹WebããŒã«ã«èå³ããããŸãã ãããéžæããäœæããããã®ã®ãªã¹ãã«è¿œå ããŸãïŒååãå€æŽããããšãå¿ããªãã§ãã ããïŒïŒ
Visual Studioã¯ãããçšåºŠã®æ€èšã®åŸã2ã€ã®ãããžã§ã¯ããäœæããŸãã1ã€ã¯WCFãµãŒãã¹ãããžã§ã¯ãã§ããã1ã€ã¯Windows Azureã¯ã©ãŠãã§å ¬éããããã®ç¹å¥ãªãããžã§ã¯ãã§ãã ããããå°ã調æŽããŸãããã
ãµãŒãã¹ãã¯ã©ãŠãã«ç°¡åã«å ¬éããã«ã¯ãVisual Studioããããè¡ãå¿ èŠãããã¯ã©ãŠããèªèãããŸãããããè¡ãæš©å©ãããããšãç解ããå¿ èŠããããŸãã 圌女ã説åŸããã«ã¯ãã¯ã©ãŠããããžã§ã¯ããå³ã¯ãªãã¯ããŠã[å ¬é]ã¡ãã¥ãŒé ç®ãéžæããŸãã
以åã«ã¯ã©ãŠãã«äœãå ¬éããŠããªãå Žåãå€WindowsAzureMSDNã®ä»£ããã«ç©ºã«ãªããŸãã åãããã«ã¯ããªã³ã¯ãã¯ãªãã¯ã㊠ããããªã±ãŒã·ã§ã³ãããã¡ã€ã«ãããŠã³ããŒãããVisual Studioã®[ã€ã³ããŒã]ãã¿ã³ã䜿çšããŠã€ã³ããŒãããŸãã ããã«ãããã¯ã©ãŠããµãŒãã¹ã®æäœãIDEããçŽæ¥å®è¡ã§ããããã«ãªããŸãã
VS2012ããã¯ã©ãŠãã«ã¢ã¯ã»ã¹ãããã次ã®ã¹ãããã«é²ã¿ãWCFãµãŒãã¹ããã¹ãããããã®ã¯ã©ãŠããµãŒãã¹ãçŽæ¥äœæããŸãã [å ±éèšå®ââ]ã¿ãã§ã[ ã¯ã©ãŠããµãŒãã¹ ] -> [æ°èŠäœæ ]ãéžæãã[詳现èšå®]ã¿ãã§ãæ¢åã®ã¹ãã¬ãŒãžã¢ã«ãŠã³ããæå®ããŸãïŒãªã¹ãã§æ¢ã«éžæå¯èœã«ãªã£ãŠããã¯ãã§ãïŒã ã¯ã©ãŠããµãŒãã¹ãšã¹ãã¬ãŒãžã¢ã«ãŠã³ãã®äž¡æ¹ãåããŸãŒã³ã«ç¶æããããã«ããŠãã ããã
ãããã®æé ãå®äºãããã[å ¬é]ãã¿ã³ãã¯ãªãã¯ããã ãã§ããããžã§ã¯ãããããã¯ãŒã¯ã«ãªãŒã¯ããŸãã
ã¹ããã2.ã¹ãã¬ãŒãžã䜿çšãã
æåã®ã¹ãããã¯ãæ¥ç¶æååããµãŒãã¹ã®web.configãã¡ã€ã«ã«è¿œå ããããšã§ãã è¡ã¯æ¬¡ã®ãšããã§ãã
DefaultEndpointsProtocol = https; AccountName = service_name; AccountKey = that_the_storage_key_of_Storage
ã¯ã©ãŠãã¹ãã¬ãŒãžãæäœããã«ã¯ãREST APIã䜿çšããæ¹æ³ãš.NETã©ãããŒã䜿çšããæ¹æ³ã®2ã€ããããŸãã ãã®èšäºã§ã¯ã2çªç®ã®ãªãã·ã§ã³ãæãåçŽãªæ¹æ³ãšããŠäœ¿çšããŸãã ããã«ãç¬èªã®ãµãŒãã¹ãäœæããã®ãç¡é§ã§ã¯ãããŸããã§ããã
ãããã£ãŠããã®æ©èœã䜿çšããã«ã¯ãWindows Azureã¹ãã¬ãŒãžããã±ãŒãžãNuGetãããžã§ã¯ãã«æ¥ç¶ããå¿ èŠããããŸãã
BLOBã³ã³ãããŒã®æ¥ç¶ãšç®¡çã¯ãã¯ã©ã€ã¢ã³ãã䜿çšããŠè¡ãããŸãã
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_connectionString); _blobClient = storageAccount.CreateCloudBlobClient();
ãªããžããªã®ãããªãäœæ¥ã¯éåžžã«ç°¡åã§ãã
// CloudBlobContainer container = BlobClient.GetContainerReference(ContainerName); // , container.CreateIfNotExists(); // "-<id >" CloudBlockBlob blockBlob = container.GetBlockBlobReference(BlobNamePrefix + data.Id); // var serializer = new XmlSerializer(typeof(CompositeType)); using (var s = new MemoryStream()) { serializer.Serialize(s, data); s.Seek(0, SeekOrigin.Begin); // blob blockBlob.UploadFromStream(s); }
åæ§ã«ãããŒã¿ãååŸã§ããŸãïŒ
// CloudBlobContainer container = BlobClient.GetContainerReference(ContainerName); // - null if (!container.Exists()) return null; // var blockBlob = container.GetBlockBlobReference(BlobNamePrefix + id); if (!blockBlob.Exists()) return null; // var serializer = new XmlSerializer(typeof(CompositeType)); CompositeType result = null; using (var s = new MemoryStream()) { // blockBlob.DownloadToStream(s); s.Seek(0, SeekOrigin.Begin); result = serializer.Deserialize(s) as CompositeType; } return result;
äžèšã®ã¡ãœããã¯ã©ãããŒã¯ã©ã¹ã«é 眮ãããWCFãµãŒãã¹èªäœã«ã¯2ã€ã®ã¢ã¯ã·ã§ã³ã®åçŽãªã³ã³ãã©ã¯ãããããŸãã
[ServiceContract] public interface IBlobService { [OperationContract] CompositeType GetData(int value); [OperationContract] void PutData(CompositeType data); }
!!! ããã§ã¯ãéèŠã ã絶察ã«èªæã§ã¯ãªãããšãè¿°ã¹ãå¿ èŠããããŸãã BLOBã³ã³ãããŒãšãããã¯ã®ååã¯ãå°æåã«ããå¿ èŠããããŸãã ã€ãŸãã BlobContainerãšããååãäœæããããšãããšãšã©ãŒãçºçããããšãã°ã blob-containerã¯åé¡ãªãäœæãããŸãã
ãµãŒãã¹ãäœæããããã¯ã©ãŠãã«ååºŠå ¬éãããã®æé ãå®äºãããšyour_service_name.cloudapp.net / BlobService.svcã§å©çšã§ããããã«ãªããŸãã
ã¹ããã3.ã¢ãã€ã«ãµãŒãã¹
åã®2ã€ã®ã¹ãããã¯ããããŒã¿ããä¿åããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæããããšãç®çãšããŠããŸãããããã¯ãåžžã«å¿ èŠãšã¯éããããªã³ããã³ãã§å¿ èŠãšãªã倧éã®æ å ±ã§ãã ããã§ã¯ããã¡ã¿ããŒã¿ãã®ä¿åã«ç§»ããŸãããã ãããè¡ãããã«ãWindows Azureã®ææ°ã®ã¢ãã€ã«ãµãŒãã¹ãå©çšããŸãã
æ°ããã¢ãã€ã«ãµãŒãã¹ã®äœæã¯ãWindows Azureã®ä»ã®ãµãŒãã¹ãšåããããç°¡åã§ãã ããäžåºŠã 管çããŒã¿ã«ã«ç§»åããŸããäœæã¡ãã¥ãŒã§ã[ èšç® ] -> [ã¢ãã€ã«ãµãŒãã¹ ]ãéžæãããšãç®ã®åã«ãŠã£ã¶ãŒãã衚瀺ãããŸãã
ãã®äžã«ãå°æ¥ã®ãµãŒãã¹ã®ååããã±ãŒã·ã§ã³é åïŒ1ãæã®ã©ããã«äœçœ®ããããšãå¿ããªãã§ãã ããïŒã瀺ããããŒã¿ãä¿åããã¹ãã¬ãŒãžã瀺ããŸãïŒæ¢åã®ãã®ã䜿çšããããæ°ããããŒã¿ãäœæã§ããŸãïŒããŠã£ã¶ãŒããå®äºããŸãã
ãµãŒãã¹ãäœæãããããé·ã®ä»ããã¯ã©ãŠãã¢ã€ã³ã³ã§ããŒã¯ãããã»ã¯ã·ã§ã³ã®ããŒãžã«ç§»åããŸãïŒååãããããŸããïŒã ãã®ããŒãžã«ã¯ãæ°ããWindowsã¹ãã¢ã¢ããªã®äœæãšæ¢åã®Windowsã¹ãã¢ã¢ããªã®æ¥ç¶ã® 2ã€ã®ãªãã·ã§ã³ããããŸãã 1ã€ç®ã¯ãã¢ãã€ã«ãµãŒãã¹ã§åäœããããã«æ§æãããã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠã¢ãŒã«ã€ããããŠã³ããŒãããããšãå¯èœã«ãã2ã€ç®ã¯ãæ¢åã®ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ãå¿ èŠãããã³ãŒããæäŸããŸãã ååãšããŠãã©ã®ãªãã·ã§ã³ãéžæãããã¯åé¡ã§ã¯ãããŸããã 2çªç®ã®ãã®ã䜿çšããã¢ããªã±ãŒã·ã§ã³ãæåã§äœæããããšããå§ãããŸãã
ãããŸã§ã¯ããŸã ããããŠããŸãããã¢ãã€ã«ãµãŒãã¹ã䜿çšããæºåãããŸãããã ãããè¡ãã«ã¯ãæåã«ïŒãããã¡ãã¥ãŒã®ïŒ[ããŒã¿]ã»ã¯ã·ã§ã³ã«ç§»åããã¬ã³ãŒããä¿åããããã®æ°ããããŒãã«ãè¿œå ããŸãã 奜ããªããã«åŒã³åºãããšãã§ããŸããTestItemããããŸãã
ãã®ããŒãã«ã¯ãWindows 8ã¢ããªã±ãŒã·ã§ã³ã§å ¥åãããã¡ã¿ããŒã¿ãšã³ããªããã¹ãããŸãã
ã¹ããã4. Windows 8
ããã¯ããããã¹ãŠã ã£ããã®ãããæéã§ãã Windows 8ïŒWinRTïŒã®ã¢ããªã±ãŒã·ã§ã³ã¯ãVisual Studio 2012ã®ExpressããŒãžã§ã³ã§ç¡æã§äœæã§ããŸãïŒWCFãµãŒãã¹ã§äœ¿çšããŠãããã®ã®ãçŸåšã¯Win8ã¢ããªã±ãŒã·ã§ã³çšïŒã
ãã¡ã€ã«->æ°èŠãããžã§ã¯ã-> Windowsã¹ãã¢ïŒ
ãŸããã¢ãã€ã«ãµãŒãã¹ã®ã¡ãªããã享åã§ããããã«ãå¿ èŠãªã©ã€ãã©ãªãªã³ã¯ãè¿œå ããå¿ èŠããããŸãã ãæ°ä»ãã®æ¹ã¯ãåã®ã¹ãããã§ãWindows AzureããMobile Services SDKã®ããŠã³ããŒããšã€ã³ã¹ããŒã«ãæäŸãããŸããã ãããè¡ãå¿ èŠããããŸããã¢ãã€ã«ããã€ã¹çšã®ã¯ã©ãŠããµãŒãã¹ã䜿çšããããã§ãã
SDKãã€ã³ã¹ããŒã«ããããšãæšæºã®åç §ã®è¿œå æé ã䜿çšããŠãããžã§ã¯ãã«æ¥ç¶ã§ããŸãã
次ã«ãWCFãµãŒãã¹ãžã®ãªã³ã¯ãæ¥ç¶ããŸãã ããããæšæºã®[ ãµãŒãã¹åç §ã®è¿œå ]ãã€ã¢ãã°ã䜿çšããŠç°¡åã«å®è¡ã§ããŸãã
ãµãŒãã¹åç §ãæ¥ç¶ããçµæãVisual Studioã¯ç¹å¥ãªã©ãããŒã¯ã©ã¹ãäœæããŸããããã¯ããµãŒãã¹ã³ã³ãã©ã¯ããæã€éåžžã®ã¯ã©ã¹ã®ããã«èŠããŸãããå®éã«ã¯æå®ãããã¢ãã¬ã¹ã§ãªã¢ãŒãWCFã«ã¢ã¯ã»ã¹ããŸãã
æåŸã«ãã¢ãã€ã«ãµãŒãã¹ã䜿çšããããã®ã³ãŒããè¿œå ããŸããããã¯ãåè¿°ããããã«ãWindows Azureã®ã¯ã©ãŠããšçš²åŠ»ãå«ãããŒãžã§å ¥æã§ããŸãã 次ã®ããã«ãªããŸãã
public static MobileServiceClient MobileService = new MobileServiceClient( "https://***.azure-mobile.net/", "secret_key");
ãã®ãã£ãŒã«ããApp.xamlããŒãžã«è¿œå ããŠãã¢ããªã±ãŒã·ã§ã³ã®ã©ãããã§ãã¢ãã€ã«ãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸããã
ã¹ããã5.ãã¹ãŠããŸãšãã
ãã¹ãŠã®ãã¹ãäžåºŠã«æ¥ç¶ããæ°ããã¬ã³ãŒããè¿œå ãããšAzure Blob Storage and Mobile Servicesã«é 眮ãããã³ãŒããäœæããŸãã
private async Task PutDataTestWCF(CompositeType data) { // WCF var cli = await Task.Run(() => new BlobServiceClient(new BasicHttpBinding(), new EndpointAddress(CloudServiceEndpoint))); // () await cli.PutDataAsync(data); // await cli.CloseAsync(); // var table = App.MobileService.GetTable<TestItem>(); // var list = await table.Select(x => x.Id == data.Id).ToListAsync(); // , , - if (list != null && list.Count > 0) await table.UpdateAsync(new TestItem() {Id = data.Id, Text = data.Text}); else await table.InsertAsync(new TestItem() {Text = data.Text}); }
ããã§ã¯ãããã€ãã®ããšã«æ³šæãã䟡å€ããããŸãã ãŸããäœããã®æ¹æ³ã§ãããã¯ãŒã¯ã§æ©èœãããã¹ãŠã®ã¡ãœããã¯éåæã§ãã èªåçæãããWCFãµãŒãã¹ã®ã¯ã©ã€ã¢ã³ãã¯ã©ã¹ã«ããéåæã¡ãœããïŒPutDataAsyncïŒãå«ãŸããŠããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¿ãŒãããã«æ¥ç¶ããããšããŠãããšãã«ããŠãŒã¶ãŒã«ãããã¯ãããã€ã³ã¿ãŒãã§ã€ã¹ã匷å¶çã«è¡šç€ºãããããšãªããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãé«ããããšãã§ãããããçŽ æŽãããã§ãã
ããã«ãäž¡æ¹ã®ãµãŒãã¹ã®æäœãéåžžã«ã·ã³ãã«ã§ééçã«ãªããŸããã WCFã§åäœãããã®ãã¢ãã€ã«ãµãŒãã¹ã§åäœãããã®ã¯ãã©ã¡ãã.Netã³ãŒããžã®åçŽãªåŒã³åºãã®ããã«èŠãããã¹ãŠã®è©³çŽ°ããã©ããã«ãé ããŠããŸãã ããã§ã¯æœè±¡çãªããŒã¿ã¢ã¯ã»ã¹ã¬ã€ã€ãŒãèšè¿°ããŸããã§ããããæ··ä¹±ããŠãã¹ãŠãæ£ããè¡ããšãã¢ããªã±ãŒã·ã§ã³ããã¹ãããããã®ã¢ãã¯ãã©ã°ã€ã³ãç°¡åã«äœæã§ããŸãã
ãããã«
ãã®èšäºã§ã¯ããŸãWindows 8ã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³ã§ã¯ãªããããŸããŸãªçš®é¡ã®ã¯ã©ãŠãã¹ãã¬ãŒãžãããŸããŸãªæ¹æ³ã§æäœããæ©èœãçµã¿èŸŒãæ¹æ³ã瀺ããããšæããŸããã èšäºã倧ãããããããç解ãã«ããããšãå€æãããããç§ã¯æå³çã«ããã»ã©å€ãã®ã³ãŒããåŒçšããŸããã§ããã 以äžã«ããã¬ãŒãã³ã°ã«äœ¿çšã§ããã³ãŒããå«ãã¢ãŒã«ã€ããæ·»ä»ããŸãã
ã¢ãŒã«ã€ããããŠã³ããŒããã
ãã®äžã§ããµãŒãã¹ãžã®ãã¹ãŠã®åç §ã***ãŸãã¯****ã«çœ®ãæããŸããã ãã¹ãŠãããŸãããããã«ãäœãã©ãã§çœ®ãæããããæ確ã«ãªããšæããŸãã
èšäºãšãã¹ãã¢ããªã±ãŒã·ã§ã³ã®æºåã§ã¯ã次ã®è³æã䜿çšãããŸããã
- å ¬åŒBlob Storageã¬ã€ã
- ã¢ãã€ã«ãµãŒãã¹ã§ããŒã¿ãæäœããããã®å ¬åŒã¬ã€ã
-Google ã Bing ã Yandex
-èªåã®èããšæšæž¬
PSç¡é¢å¿ãªãã€ãã¹ãžã®å€§ããªèŠæ-ã³ã¡ã³ããŸãã¯PMã«ãã€ãã¹ã®è°è«ãæžããŠãã ããã å°æ¥ã®åºçç©ã§ä¿®æ£ããããã«ãç§ã¯èªåã®æ¬ é¥ãç¥ãããšãéèŠã§ãã ã©ããããããšãã