ãã®èšäºã¯ãCIãœãªã¥ãŒã·ã§ã³ãšããŠTFSã䜿çšããŠãããããã®ã¢ã»ã³ããªããã»ã¹ãã³ãã¬ãŒãã«ç±å¿ã§ã¯ãªã人ã«åœ¹ç«ã¡ãŸãã
ãããžã§ã¯ãã®éçºäžïŒå®éã«ã¯ãäŒç€Ÿã®å®éã®è£œåçšã®ãã€ããªäŸçµŠã¢ãžã¥ãŒã«ã§ãïŒãåäœãã¹ããã³ã³ãã€ã«ããŠå®è¡ãããããå°ãè€éãªCIããã»ã¹ãå¿ èŠã§ããããšãããããŸããã
ããã¯ããçæ³çãªãããã»ã¹ãç§ãã¡ã®ç®ã«èŠãããã®ã§ãã
å®æçãªçµã¿ç«ãŠïŒ
- åäœãã¹ãã®ã³ã³ãã€ã«ãšå®è¡ã
- ãã¹ããµã³ãã«ã®æºåïŒãµã³ãã«ã¯åºè·ã®äžéšã§ããããã¹ãã®åŸç¶æ®µéã§è£œåã«ãã£ãŠäœ¿çšãããŸããæºåã¯ãããŸããŸãªå Žæãããã¡ã€ã«ãåéããç¹å®ã®ãã©ã«ããŒæ§é ã«ãœãŒãããŠããã¯ããããšã§ãïŒã
- ããã©ãŒãã³ã¹ãã¹ãã®å®è¡ã çµæã®ä¿åïŒã°ã©ããäœæã§ããããã«ïŒ; åå·®ãå¹³åäºä¹ãè¶ ããå Žåã«èŠåãçæããŸãã
- falseããã³trueå¿çã®ãã¹ããå®è¡ããŸãã ã¬ããŒãããã³/ãŸãã¯ãããªãç 究ã®ããã«çµæãä¿åããã
- TFSããã®ãã°ãšã¿ã¹ã¯ã«é¢ãããªãªãŒã¹ããŒãã®çæã
- ããŒã¿ã«ã§ã®ãªãªãŒã¹ããŒãã®å ¬éã
- ãã°ããã³ã¿ã¹ã¯ã®ã¢ã»ã³ããªçªå·ã®èªåç»é²ã
- æºåãããé ä¿¡ã¢ãŒã«ã€ããç¹å®ã®å Žæã«ã¢ããããŒãããŠã補åã§å°æ¥äœ¿çšã§ããããã«ããŸãã
åŒç€Ÿã®ã¯ãŒã¯ãããŒã¯ããã°ãã¿ã¹ã¯ã®è¿œè·¡ãªã©ãå®å šã«TFSäžã«æ§ç¯ãããŠããŸãã ããŒãžã§ã³ç®¡çãšç¶ç¶çãªçµ±åã TFSã®CIã¢ã»ã³ããªã¯ããã«ãããã»ã¹ãã³ãã¬ãŒãã䜿çšããŠå®çŸ©ãããŸãã ãçæ³ããå®çŸããããã«ç§ãã¡ãæåã«è©Šã¿ãã®ã¯ãããã»ã¹ãã³ãã¬ãŒããèªåçšã«ã«ã¹ã¿ãã€ãºããããšã§ããããããŠãå€ãã®å°é£ã«çŽé¢ããŸããã
1.ã¢ãžã¥ãŒã«ã®éçºïŒç¹ã«ããã¹ããµã³ãã«ã®æºåïŒã«äŒŽããã¢ã»ã³ããªããžãã¯ã®äžéšãå€æŽãããŸãã ã¢ãžã¥ãŒã«ã®ä»ã®ãœãŒã¹ã³ãŒããšãšãã«ããã®ããžãã¯ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ä¿æããããšãæãŸããã§ãã ãã ããTFS 2012/2013ã®ããã»ã¹ãã³ãã¬ãŒãã¯åå¥ã«ä¿åãããããŒãžã§ã³ç®¡çãããŸããïŒã¯ããVCSã«ãããŸãããåžžã«ææ°ããŒãžã§ã³ã®ã¿ã䜿çšãããŸãïŒã ãªããããåé¡ãªã®ã§ããïŒ å°ãªããšã2ã€ã®ãã©ã³ãããããŸãïŒéçºãšå®å®ïŒçè«çã«ã¯ãä¿®æ£ããã°ã©ã ãäœæããå¿ èŠãããå ŽåããªãªãŒã¹ãã©ã³ãããŸã çºçããå¯èœæ§ããããŸãïŒãå°ãªããšããããã€ãã®ã¢ã»ã³ããªæé ã¯ãããã§ç°ãªããŸãã 1ã€ã®ãã³ãã¬ãŒãã§ãã¹ãŠã®ãã©ã³ããåéããããšã¯ã§ããŸããã
å¯èœãªè§£æ±ºçïŒ
- ãã³ãã¬ãŒããæåã§ããŒãžã§ã³ç®¡çãããã³ãã¬ãŒããã¡ã€ã«ã®ååã«ããŒãžã§ã³çªå·ãè¿œå ããŸãã ãã®å Žåããã©ã³ããããŒãžãããšãããã³ãã¬ãŒãã®ããŒãžãå¿ããªãã§ãã ããã çªç¶ããã³ãã¬ãŒãã®ç·šéã«å ããŠãç¬èªã®ã¢ã¯ãã£ããã£ãå¿ èŠã«ãªã£ãå Žåããããã®ã¢ã¯ãã£ããã£ãå«ãdllã«æ¬äŒŒããŒãžã§ã³ç®¡çãé©çšããå¿ èŠããããŸãã
- å€æŽããããžãã¯ãã¹ã¯ãªããã«åã蟌ã¿ããã³ãã¬ãŒããããã®ã¹ã¯ãªãããåŒã³åºããŸãã ã¹ã¯ãªããã¯ãã¢ãžã¥ãŒã«ã®æ®ãã®ãœãŒã¹ã³ãŒããšå ±ã«ä¿åãããŸãã
ã¹ã¯ãªãããéžæããŸããã æåã®æ®µéã§-éåžžã®ããããã¡ã€ã«ã
2.ã¹ã¯ãªããã䜿çšãããšãå¥ã®åé¡ãçºçããŸãã-ãã®ã³ã°ã®æ å ±éãæ¥æ¿ã«æžå°ããŸããã ã¡ãã»ãŒãžã¯åã«ã³ã³ãœãŒã«ã«æžã蟌ãŸããã¬ãã«ã¯ãããŸãããèŠåãšèšºæãåºå¥ããããšã¯ã§ããŸããã ãšã©ãŒã匷調衚瀺ããã«ã¯ãã¡ãã»ãŒãžãstderrã«æžã蟌ãå¿ èŠããããŸãã ãã ããTFSãstderrããèªã¿åãåè¡ã¯ãåå¥ã®ãšã©ãŒãšããŠèªèãããŸãã ãããã£ãŠãããšãã°ãTFSã§ãã©ãŒãããããã3è¡ã®ãšã©ãŒã¡ãã»ãŒãžã¯ã3ã€ã®åå¥ã®ãšã©ãŒãšããŠè¡šç€ºãããŸãã ããã¡ããšãã§ã¯ãããŸããããããªãã¯çããããšãã§ããŸãã
3.ã¹ã¯ãªãããæé·ãå§ããŸããã ãµã³ãã«æºåã¹ãããã«å ããŠãããã«ããã©ãŒãã³ã¹ãã¹ããšFP / TPãã¹ããè¡ââãããŸããã ãªããã å®è¡äžã®ãã¹ãã¯ãã³ãã¬ãŒãå ã«ããããã«æãããŸãã å®éããããã®ãã¹ãã¯ããŒã«ã«ãã£ãŠå®è¡ãããŸããããŒã«ãã¢ãžã¥ãŒã«ã®äžéšã§ãããããã«å¿ããŠéçºãããŠãããããèµ·åæ¹æ³ãå€ãããŸãã ãã³ãã¬ãŒãã«æ®ããŠãããšããã©ã°ã©ã1ã§æ¢ã«èª¬æããåé¡ããããŸãã
ãã£ãšãã£ãšã ã¹ã¯ãªããããçŸåšã®ã¢ã»ã³ããªã®ããããã£ïŒãã©ã³ãã®ååãããŒãžã§ã³çªå·ãªã©ïŒã«ã¢ã¯ã»ã¹ããããšããèŠæãæçãå§ããä»ã®ã¢ã»ã³ããªã«é£çµ¡ããŠãã€ãã©ã€ã³ãæŽçããŸããã
ãã®æ®µéã§ãã¹ã¯ãªããã¯åãªãããããã¡ã€ã«ããã匷åã§ããããšãæããã«ãªããŸããã ããã»ã¹ãã³ãã¬ãŒãããããã®ã¯ããã»ã©äŸ¿å©ã§ã¯ãªãããšãèãããšããã¹ãŠã®ããžãã¯ãã¹ã¯ãªããã«è»¢éãããã³ãã¬ãŒããã·ã§ã«ãšããŠã®ã¿äœ¿çšããŠããœãŒã¹ããã³ãã¢ãŠãããã¹ã¯ãªããã«å¶åŸ¡ã転éããããšãæãŸããŸããã
ã¹ã¯ãªããã®åè£ã¯ã PSake ã Rakeãããã³Fakeã§ãã ç°¡åãªåæã®åŸãPowerShellæ§æã®ããã«PSakeã¯åé€ãããŸããã çæ-ãªããªã ç§ãã¡ã®ããŒã ã®èª°ãRubyã«æ £ããŠããŸããã§ããã åœç©ã®ãŸãŸã§ããã å ¬å¹³ã«èšãã°ããã®æç¹ã§ã¯ããŒã ã®FïŒã誰ãç¥ããªãã£ããšèšããªããã°ãªããŸããããFïŒã¯ãã®ãŸãŸVisual Studioã§ãµããŒããããŠããã®ã§ãç§ãã¡ã¯ããã§è§£æ±ºããŸããã
æ®å¿µãªãããFakeã¯TFSãšã¯åéã§ã¯ãããŸããã ããããç§ãã¡ã¯ããã°ã©ããŒãªã©ã§ã¯ãããŸãããïŒïŒ èªåã§ãã蟌ã¿ã åé¡1ãš3ã¯è§£æ±ºããããšèšããŸãã ãã ããåé¡2ã¯æ¬¡ã®ããã«æªåããŠããŸãã ã¢ã»ã³ããªå šäœãã¹ã¯ãªããã«ãªã£ããããVisual Studioã«è¡šç€ºãããçµæã¯æ°ã®ãããããã«èŠããŸãã-èŠåã¯è¡šç€ºãããŸããã§ããïŒã³ã³ãã€ã©ããã®ãã®ãå«ãïŒã å®è¡ãããã¹ããŒãžã¯è¡šç€ºãããŸããã ééãã¯ã²ã©ããå±¥ç©ãã«ãã£ãŠç€ºãããŸãã 圌ãã¯Fakeã®æ¡åŒµæ©èœãäœæããŠãã®åé¡ã解決ããããšããŸããããFakeã«ã¯æ§é ååºåãTFSã«ãªãã€ã¬ã¯ãããåäžã®ãã°ãã€ã³ãããããŸããã§ããã éäžã§ãããã«ããã€ãã®äžæºãçããŸããïŒè©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ïŒã
ããã«ãããããããç§ã¯ãæ¬æ Œçãªããã°ã©ãã³ã°èšèªã䜿çšããŠã¢ã»ã³ããªãèšè¿°ãããšããã¢ã€ãã¢ã奜ãã§ããã æçµçã«ãç§ã¯äœæã«èªåã®ããã©ãŒãã³ã¹ã§ãã§ã€ã¯ã®ã¢ã€ãã¢ãå®çŸããããšã«ããŸããã éç¹ã眮ãããã®ã¯ïŒ
- æ¡åŒµæ§ïŒããšãã°ãã¢ã»ã³ããªã«é¢ãããã©ã°ã€ã³htmlã¬ããŒãããŸãã¯ããŒã¿ããŒã¹ã§ã®ãã¹ãçµæã®å ¬éãªã©ïŒã
- ããŸããŸãªå€éšã·ã¹ãã ãšã®çµ±åïŒãã¥ãŒã®æåã¯TFSã§ããïŒã
- èªã¿ãããç解ãããããã°ããã³ãšã©ãŒåºåã
ããã«ãFïŒã¹ã¯ãªãããç解ããããšããæåã®è©Šã¿ãæãåºããŠããCïŒã§ãã¹ã¯ãªãããèšè¿°ã§ãããšããããšèãããã®èŠä»¶ãäœæ¥ç¯å²ã«å«ããŸããã ã¯ããã¢ã»ã³ããªã¹ã¯ãªãããCïŒã§èšè¿°ã§ããŸãããæ®å¿µãªããããã®å ŽåIntelliSenseã¯æ©èœããŸãããã¹ã¿ãžãªã¯CïŒãã¹ã¯ãªããã«ãªãåŸãããšãèªèããŠããŸããã
ãã®çµæãéåžžã«ãŸãšããªããŒã«ïŒAnFake = Another FïŒMakeãšåŒã°ããŸãïŒãäœæãããTFSãšãæŠã£ãŠããããã¹ãŠã®äººã«ãšã£ãŠæçšã«ãªããŸãã ãããã©ã®ãããªãã®ã§äœãã§ããããèŠãŠã¿ãŸãããïŒçŸåšãAnFakeã¯äž»ã«TFSåãã«èšèšãããŠãããããTFSã®ã³ã³ããã¹ãã§ããã«è°è«ããŸãïŒã
TFSããŒãžã§ã³ç®¡çã·ã¹ãã ã«ããDemoãšåŒã°ãããœãªã¥ãŒã·ã§ã³ããããšããŸãã
$/TeamProject/Demo /dev /Demo.App /Demo.Lib /Demo.Lib.Test Demo.sln
ãŸããåäžã®ãããã³ã°ã§ã¯ãŒã¯ã¹ããŒã¹ãDemo.devããæ§æããŸããã
$/TeamProject/Demo/dev: C:\Projects\Demo.dev
ïŒä»¥äžãããã©ã³ãããšã«1ã€ã®ã¯ãŒã¯ã¹ããŒã¹ãã¹ããŒã ã䜿çšããããšæ³å®ãããŠããŸãïŒ
Visual Studioã§CïŒ\ Projects \ Demo.dev \ Demo.slnãéããŸãã AnFakeãNuGetããã±ãŒãžãšããŠã€ã³ã¹ããŒã«ããŸãã
PM> Install-Package AnFake
ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšããœãªã¥ãŒã·ã§ã³ã®ã«ãŒããã©ã«ããŒã«ããã€ãã®ãã¡ã€ã«ãäœæãããŸãã
- build.fsx-MSBuildã®åŒã³åºããšãã¹ãã®å®è¡ãå«ãåºæ¬çãªãã«ãã¹ã¯ãªããã
- anf.cmd-AnFakeãåŒã³åºãããã®ãšã€ãªã¢ã¹ïŒ./packages/AnFake.xyz/bin/AnFake.exeãæ¯åæžã蟌ãŸãªãïŒ;
- .workspace-çŸåšã®ãœãªã¥ãŒã·ã§ã³ãããŠã³ããŒããããã¯ãŒã¯ã¹ããŒã¹ããã®ãããã³ã°ã®èª¬æãå«ãããã¹ããã¡ã€ã«ã
- .nuââget \ NuGet.config-[ããã§ãªãå Žåã®ã¿äœæ]ã«ã¯ãVCSã§ãã€ããªããã±ãŒãžãã¡ã€ã«ãã³ããããããªãããã«ããdisableSourceControlIntegrationãªãã·ã§ã³ãå«ãŸããŠããŸãã
åºæ¬çãªbuild.fsxã¹ã¯ãªããã¯æ¬¡ã®ãšããã§ãã
Tfs.PlugIn() let out = ~~".out" let productOut = out / "product" let testsOut = out / "tests" let tests = !!"*/*.Test.csproj" let product = !!"*/*.csproj" - tests "Clean" => (fun _ -> let obj = !!!"*/obj" let bin = !!!"*/bin" Folders.Clean obj Folders.Clean bin Folders.Clean out ) "Compile" => (fun _ -> MsBuild.BuildRelease(product, productOut) MsBuild.BuildRelease(tests, testsOut) ) "Test.Unit" => (fun _ -> VsTest.Run(testsOut % "*.Test.dll") ) "Test" <== ["Test.Unit"] "Build" <== ["Compile"; "Test"]
... CïŒã§ãåã
Tfs.PlugIn(); var outDir = ".out".AsPath(); var productOut = out / "product"; var testsOut = out / "tests"; var tests = "*/*.Test.csproj".AsFileSet(); var product = "*/*.csproj".AsFileSet() - tests; "Clean".AsTarget().Do(() => { var obj = "*/obj".AsFolderSet(); var bin = "*/bin".AsFolderSet(); Folders.Clean(obj); Folders.Clean(bin); Folders.Clean(out); }); "Compile".AsTarget().Do(() => { MsBuild.BuildRelease(product, productOut); MsBuild.BuildRelease(tests, testsOut); }); "Test.Unit".AsTarget().Do(() => { VsTest.Run(testsOut % "*.Test.dll"); }); "Test".AsTarget().DependsOn("Test.Unit"); "Build".AsTarget().DependsOn("Compile", "Test");
ååãšããŠãããã¯ãã§ã«ããŒã«ã«ã¢ã»ã³ããªãéå§ããã®ã«ååã§ãã
PM> .\anf Build
ïŒããã§ã¯ããã±ãŒãžãããŒãžã£ãŒã³ã³ãœãŒã«ã䜿çšããŸããããAnFakeã¯ä»»æã®ã³ãã³ãã©ã€ã³ã³ã³ãœãŒã«ããå®è¡ã§ããŸãïŒ
ãã®çµæã次ã®ãããªã¬ããŒããåŸãããŸãã

ã³ã³ãã€ã«ã«1ã€ã®èŠåãæž¡ãããããšãããããŸãã 2ã€ã®ãã¹ããå®äºãããã®ãã¡ã®1ã€ã¯ã¹ããããããŸããã OKãå€æŽãã³ãããããŸãã ã³ãããã«ã¯ã.nuget / packages.configãã¡ã€ã«ïŒããã§ã¯NuGetããœãªã¥ãŒã·ã§ã³ã¬ãã«ã®ããã±ãŒãžãèŠå®ããŠããïŒãšããœãªã¥ãŒã·ã§ã³ã®ã«ãŒããã©ã«ããŒã«AnFakeãã€ã³ã¹ããŒã«ãããšãã«äœæããããã¡ã€ã«ãå«ãŸããŸãã
次ã«ãTFSãä»ããŠåãã¢ã»ã³ããªãå®è¡ããŸãã ãããè¡ãã«ã¯ãç¹å¥ãªAnFakeTemplate.xamlãã³ãã¬ãŒããã€ã³ã¹ããŒã«ããŸãïŒããŒã ãããžã§ã¯ãã§äžåºŠã ãå®è¡ãããŸãïŒã
PM> .\anf "[AnFakeExtras]/vs-setup.fsx" "BuiltTemplate" -p "TeamProject"
ãã¡ãããTeamProjectã®ä»£ããã«ãTFSã§ãããžã§ã¯ãã®ååã眮ãæããå¿ èŠããããŸãã
ããŒã ã¯ãAnFake.BuildTemplate.yyyymmdd.hhmmssãšããååã®äžæçãªã¯ãŒã¯ã¹ããŒã¹ãäœæããŸãã äžæãã©ã«ããŒ$ / TeamProject / BuildProcessTemplatesã«åçž®ããŸãã AnFakeTemplate.xamlãã³ãã¬ãŒããšããã€ãã®é¢é£ã©ã€ãã©ãªãè¿œå ããŸãã å ¬æ£ãªinãã®åµãåŒãèµ·ãããªãããã«ãããŒã ã¯èªåçã«äœãã³ãããããŸããã ãã®ãããVisual Studio->ããŒã ãšã¯ã¹ãããŒã©ãŒ->ä¿çäžã®å€æŽã«ç§»åããã¯ãŒã¯ã¹ããŒã¹AnFake.BuildTemplateã«åãæ¿ããŠãå€æŽã衚瀺ãïŒäœåãªãã®ããªãããšã確èªããŠïŒã³ãããããŸãã
ããã§ãã«ãå®çŸ©ãäœæã§ããŸãïŒ
- Visual Studio-> Team Explorer-> Buildsã«ç§»åããNew Build DefinitionãéžæããŸãã
- [ããã»ã¹]ã¿ãã®[ãã«ãããã»ã¹ãã³ãã¬ãŒã]ã»ã¯ã·ã§ã³ã§ã[詳现ã®è¡šç€º]ãã¯ãªãã¯ããŸãã
- [æ°èŠ]ãã¯ãªãã¯ãã[ããŒãžã§ã³ç®¡çãã¹]ãã£ãŒã«ãã«æ¬¡ã®ããã«å ¥åïŒãŸãã¯ãœãŒã¹ç®¡çãšã¯ã¹ãããŒã©ãŒã§éžæïŒ$ / TeamProject / BuildProcessTemplates / AnFakeTemplate.v2.xaml; [OK]ãã¯ãªãã¯ããŸãïŒããŒã ãããžã§ã¯ãã§1åã®ã¿å®è¡ïŒ
- [ãã«ãããã»ã¹ãã¡ã€ã«]ããããããŠã³ãªã¹ãã§ãAnFakeTemplate.v2.xamlãéžæããŠä¿åããŸãã

AnFakeTemplateãã³ãã¬ãŒãã¯ã3ã€ã®ç°¡åãªæé ãå®è¡ããŸãã
- ããŒãžã§ã³ç®¡çã·ã¹ãã ãããœãªã¥ãŒã·ã§ã³ãå±éããŸãã
- ãœãªã¥ãŒã·ã§ã³ã¬ãã«ã®NuGetãã±ããã埩å ããŸãïŒã€ãŸããAnFakeèªäœãããŠã³ããŒãããŸãïŒã
- AnFakeã«å¶åŸ¡ã移ããŸãã
- ä»ã®ãã¹ãŠã¯ã¹ã¯ãªããã§ãã§ã«å®çŸ©ãããŠããŸãã
ãã³ãã¬ãŒãã¯éåžžã«ã·ã³ãã«ã§ãå€ãã®ããŒãžã§ã³ãšã®äºææ§ãç¶æããŠããŸãã ããã«ããããã³ãã¬ãŒããæŽæ°ããããšãªãAnFakeããã±ãŒãžãã¢ããã°ã¬ãŒãã§ããŸãã ç°ãªããœãªã¥ãŒã·ã§ã³ã§ç°ãªãããŒãžã§ã³ã®AnFakeã䜿çšããããšãã§ãããããã¯1ã€ã®ãã³ãã¬ãŒãã§å®å šã«çµã¿ç«ãŠãããŸãã
TFSã§åºæ¬çãªAnFakeçµ±åã·ããªãªã瀺ããŸããã ãã ããçµ±åã¯ãã³ãã¬ãŒãã«éå®ãããŸãããçŸåšã®ã¢ã»ã³ããªã®ããããã£ã«ã¹ã¯ãªããããã¢ã¯ã»ã¹ã§ããŸãã ä»ã®ã¢ã»ã³ããªã®ææç©ã«ã¢ã¯ã»ã¹ãã ã³ã³ãã¢ãæŽçããæ©äŒãããããŸãã ããã«ãAnFakeã¯ãããã³ã°ãšã¯ãŒã¯ã¹ããŒã¹ãæäœããéã«è¿œå ã®èªååãæäŸããŸãããããã³ã°ã¯æ®ãã®ãããžã§ã¯ããœãŒã¹ãšãšãã«VCSã«ä¿åã§ããã¯ãŒã¯ã¹ããŒã¹ã¯èªåçã«äœæããã³æŽæ°ãããŸãã
ããã§ããããã¹ãŠã®å©ç¹ã®èª¬æã§èšäºããã£ã±ãã«ãããã¯ãããŸãããããã®ã¢ãããŒããèå³æ·±ããããŒã«ãéèŠãããå Žåã¯ãè¿ãå°æ¥ã«ç¶ç·šãæžããŸãã çµè«ãšããŠãèšäºã®åé ã§èª¬æãããçæ³çãªãã¢ã»ã³ããªã¯ãçŸåšå®å šã«å®è£ ãããŠãããAnFakeã§æ©èœããŠãããšèšããããšæããŸãã å®éã®ã¹ã¯ãªããã衚瀺ããããšã¯ã§ããŸããããããã€ãã®èå³æ·±ãæç²ãããã§èŠãããšãã§ããŸã ã
ãã£ãŒãããã¯ã«æè¬ããŸãã ããããšã