
æè¿ã§ã¯ã npm
ã composer
ã bundler
ã pip
ã maven
ã cargo
ãªã©ã®ãããžã§ã¯ãäŸåé¢ä¿ç®¡çããŒã«ã«é©ã人ã¯ã»ãšãã©ããŸããã å
±éã®æ¬ ç¹ã¯ãã©ã³ã¿ã€ã ãçŽæ¥å¶åŸ¡ã§ããªãããšã§ãã ãã®åé¡ã¯ã nvm
ã php-build
ã rvm
ã virtualenv
ã sdkman
ã rustup
ãªã©ãéåžžã¯Bash / Zshã§èšè¿°ãããã©ã³ã¿ã€ã ããŒãžã§ã³ã®ã°ããŒãã«ãªããããŒãžã£ãŒãã«ãã£ãŠè§£æ±ºãããŸãã
次ã®ã¬ãã«ã®ãåé¡ãã¯ãæ®éçãªéçºè
ãæ¯æ¥ãŸã£ããç°ãªããã¯ãããžãŒã䜿çšããŠãããžã§ã¯ãã«åŸäºããããšããå§ãŸããŸãã ç°å¢å€æ°ã¯æ··ä¹±ã«å€ãããã·ã§ã«ã®èµ·åã«ã¯æ°ç§ãããå ŽåããããŸãã å¿
ç¶çã«ããã®åç©åã§ã®äœæ¥ã«ãããåœå
ã®ééããå§ãŸããŸãã
ãã®åŸãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãšé
ä¿¡ã¯ãæ··ä¹±ãšãããããåŸ
ã¡ãŸããããã§ã¯ãããŒã«ãã€ã³ã¹ããŒã«ããŠç¹å®ã®ããŒãžã§ã³ãã¢ã¯ãã£ãåããã¿ã³ããªã³ã䜿çšããæåãã³ã¹ã¯å®å
šã«æè¿ãããŸããããçæ³çã«ã¯ã䜿çšãããŠããæè¡ããå¯èœãªéãæœè±¡åããããã»ã¹ãããªããã£ããªãã¥ãŒãã©ã«ãªã³ãã³ãã«ããããããšãå¿
èŠã§ãïŒãªãªãŒã¹ã®æºåãzegateãããŠã³ããŒããæºåããã«ããããã¯ãã¬ã€ã¢ãŠãããã§ãã¯ãæ¿èªïŒçœ²åïŒãããŒã«ã¢ãŠãã
ããã§ã¯ãããŒã«ãèªããé Œã¿ãæ¢åã®ãã¯ãããžãŒã®äžã§çµ±äžçã«æ©èœãã
ããã¯ã FutoIn CIDïŒFutoIn Continuous IntegrationïŒDeliveryããŒã«ïŒã衚ããŸã ã
FutoIn CIDã®å²åŠ
- ç¹å¥ãªãããžã§ã¯ãã䜿çšããŠããããã眮ãæããŸããã
- æ§æããã«äœæ¥ãã䜿çšããããã¯ãããžãŒãèªåçã«æ±ºå®ããŸãã
- ãããžã§ã¯ãã®äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ã®è©³çްããéçºè
ãŠãŒã¶ãŒãåãé€ããŸãã
- ãã¢Python 2.7ããã³3.xã§ãåäœããŸã
- CIDãæ§æããããã©ã«ãã§ã³ãã³ãããªãŒããŒã©ã€ãããæ©èœãæ®ããŸãã
- å¥ã®FTN16仿§ã«ããã代æ¿å®è£
ãå¯èœã§ãã
- ãã¹ãŠã®äžè¬çãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšç¡å¶éã®éçºããŒã«ã®ãµããŒãã
- ç¹å®ã®ããŒã«ãšãã®æ©èœããã®å®å
šãªæœè±¡åã ã¢ããªã±ãŒã·ã§ã³ã®çš®é¡ããšã®ããŒã«ã®åºåã®ã¿ïŒã¢ã»ã³ããªããã¹ããããŒãžã§ã³ç®¡çã·ã¹ãã ããªãªãŒã¹ç®¡çã·ã¹ãã ãã©ã³ã¿ã€ã ãããŒã¿ç§»è¡ãªã©ã
- äœãã«ãèªç±ãªããŒã«ã®åŒ·å¶çãªçµ±åãšå¶éïŒããšãã°ããã©ã³ããšã¿ã°ã«é¢ããSubversionïŒã
- ç¶æ
å
šäœã¯ãæ§æãªãã·ã§ã³ãå±éç°å¢ãããã³ã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ãŒã®åçãªå€ãå®å
šã«åæ ããããªãŒæ§é ã«æ ŒçŽãããŸãã
åºæ¬æäœ
cid tag
-ãªãªãŒã¹ã®ããã®ã³ãŒãzagegitãæºåããŸããcid prepare
ã¯ãªãŒã³ãã«ãçšã®ã³ãŒããååŸããŠæºåãããã¹ãŠã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸããcid build
ãããžã§ã¯ãããã«ãããŸããcid package
-ãã€ããªã¢ãŒãã£ãã¡ã¯ããæºåããŸããcid check
å±éãå¿
èŠãšããªããã¹ããå®è¡ããŸããcid promote
ãã€ããªã¢ãŒãã£ãã¡ã¯ããRMSã«éä¿¡ããããããæ©ãé²ããŸã
å¥ã®ããŒã«ã«ããŒããããŸããcid deploy
ãã€ããªã¢ãŒãã£ãã¡ã¯ããVCSã¿ã°ããŸãã¯ãã©ã³ããããããã€ããŸããcid run
ããšã³ããªãã€ã³ãããç¹å®ã®ãšã³ããªãã€ã³ãããŸãã¯ååä»ãã³ãã³ããèšå®ããŠãããžã§ã¯ããéå§ããŸããcid ci_build
-CIãµãŒããŒã§å®è¡promote
ã1ã€ã®ããã«ã§prepare
ã build
ã package
ãããã³promote
ããŸããcid tool (install|uninstall|update|test|env)
-ããŒã«ã管çããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãcid tool (prepare|build|check|package|migrate)
-ç¹å®ã®ããŒã«ã®æšæºæäœãåŒã³åºããŸããcid tool (list|describe)
-ãµããŒããããããŒã«ã®ãªã¹ããšè©³çްãªèª¬æãcid init
- futoin.json
æ§æfutoin.json
åæåã
ããã€ãã®å®éã®ã¢ã¯ã·ã§ã³
ãã¹ãŠãåŠå¥³ã®æµ®æµªè
ããã¯ã¹debian/jessie64
ãŸãã
1. APTããŒã¹ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®äŸã«åºã¥ããŠãã£ã¹ããªãã¥ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãïŒDebianãUbuntuãããã³ãã®ä»ã®ãã©ãŒã¯ïŒã
sudo apt-get install -y python-pip sudo pip install futoin-cid
2. sudo
æ§æãã
åŠæ³ãšå©äŸ¿æ§ã®ãã©ã³ã¹ãèŠã€ããããã«ããã¹ã¯ãŒããªãã§ããã±ãŒãžã®ã€ã³ã¹ããŒã«ã®ã¿ãèš±å¯ããããšãææ¡ãããŠããŸãã 詳现ã¯READMEãã芧ãã ããã
å Žåã«ãã£ãŠã¯ãZuluã®Dockerããã³JRE / JDKã«ã¯ãçœ²åæ€èšŒããŒãšè¿œå ã®ãªããžããªãã€ã³ã¹ããŒã«ããæ©èœãå¿
èŠã§ãã sudo
ã®ãã¬ãŒã ã¯ãŒã¯ã«æžå¿µãããå Žåãããã¯ããªãã®æã§è¡ãããšã¯ããã»ã©é£ãããããŸããã ãã¹ãŠã®å®è¡å¯èœã³ãã³ããåºåãããŸãã
Vagrantã®å Žåãããã©ã«ãã§ãã¹ãŠãå®è¡ã§ããŸãã
3. HelloWorldãåéããŠã¿ãŸãããã
cid ci_build master Builds --vcsRepo=git:https://github.com/laravel/quickstart-basic.git --rmsRepo=scp:${HOME}/Releases

å€ãã®æçŽ

ã§ã¯ãäœãèµ·ãã£ãã®ãèŠãŠã¿ãŸãããã
tar tJf ~/Releases/Builds/laravel-CI-*.txz --exclude="*/*/*"
./ ./composer.json ./storage/ ./vendor/ ./resources/ ./.package.checksums ./LICENSE.txt ./composer.lock ./database/ ./.env.example ./.env ./LICENSE.txt.gz ./node_modules/ ./artisan ./.gitattributes ./phpunit.xml ./tests/ ./gulpfile.js ./app/ ./gulpfile.js.gz ./config/ ./package.json ./public/ ./server.php ./composer.json.gz ./readme.md ./package.json.gz ./bootstrap/
å±éã®æºåãæŽã£ãå®å
šãªãã€ããªã¢ãŒãã£ãã¡ã¯ãã衚瀺ãããŸãã ããã©ã«ãã§ã¯ãCIDã¯ãèŠã€ãã£ã.jsã .jsonã .cssã .svgãããã³* .txtãã¡ã€ã«ã®gzipããŒãžã§ã³ãäœæããnginxã®gzip_staticã¢ãžã¥ãŒã«ã§äœ¿çšããŸãã
SHA-512ããã·ã¥ãå«ã.package.checksums
ãã¡ã€ã«ã¯ãå³åžãããã§ã¹ããšããŠäœæãããŸãã
泚ïŒãããžã§ã¯ãã«ãŒãã®ããã¯ã¯ãå¥ã®å®è£
ããªãå Žåã®æšæºã¢ã¯ã·ã§ã³ã«ãããŸããã ããšãã°ãMavenãŸãã¯Puppetèªäœãã¢ãŒãã£ãã¡ã¯ããäœæããŸã
4. RMSã䜿çšããŠå±éãã
cid deploy Builds --rmsRepo=scp:${HOME}/Releases --deployDir=deploy

泚ïŒããã©ã«ãã§ã¯ãæç€ºçã«ååãæå®ããªãéããCIDèªäœã¯éžæãããããŒã«å
ã®å±éçšã®ææ°ã®ã¢ãŒãã£ãã¡ã¯ããæ€çŽ¢ããŸãã åãããšãã¿ã°ã«ãåœãŠã¯ãŸããŸãã
ãã¡ãããããã»ã©æ·±å»ãªãããžã§ã¯ãã§ã¯ãªãåäžã®ãã·ã³ã«ãããã€ããå Žåã¯ããã®ãããªæé ãã¹ãããããŠãVCSã¿ã°ããçŽæ¥ãããã€ã§ããŸãã
5. VCSã§çŽæ¥å±éãã
ãã®äŸã«ã¯ã¿ã°ããªãããããããžã§ã¯ãã®ã©ã€ããã©ã³ãã䜿çšããŸãã
cid deploy vcsref master --vcsRepo=git:https://github.com/laravel/quickstart-basic.git --deployDir=deploy

å€ãã®æçŽ

ãã©ã³ãã倿Žããã«ç¹°ãè¿ããæ¢ã«ãããã€ããããªããžã§ã³ã«é¢ããèŠåãåãåããŸãã ã¿ã°ãšã¢ãŒãã£ãã¡ã¯ãã䜿çšããŠãåãã§ãã
cid deploy vcsref master --vcsRepo=git:https://github.com/laravel/quickstart-basic.git --deployDir=deploy

ãªãªãŒã¹çšã®ãããžã§ã¯ãã³ãŒãã®æºåã®äŸ
ããŒã«ã«ã³ããŒããåŒã³åºããŠãç¹å®ã®ããŒãžã§ã³ãæºåããŸãã
cid tag master 1.0.0
åŒã³åºãæã«ããŒã«ã«ã³ããŒãæããªããæ¬¡ã®ã€ã³ã¯ãªã¡ã³ã¿ã«ããŒãžã§ã³ã®ãªãªãŒã¹ã
cid tag master --vcsRepo=git:user@somehost:project.git
æšæºã¢ã¯ã·ã§ã³ïŒãªã¢ãŒããªããžããªãšã®åæãå¯èœãªãã¹ãŠã®ã¡ã¿ããŒã¿ãã¡ã€ã«ã®æŽæ°ãã³ããããã¿ã°ã®äœæã CIDèªäœã®ãªãªãŒã¹äŸïŒ

ãããžã§ã¯ãã¯è¿œå ã®ãã©ã°ã€ã³ã䜿çšããå ŽåããããŸãã ããšãã°ãCIDã¯ãœãŒã¹ã³ãŒããšCHANGELOGã®ããŒãžã§ã³ãæŽæ°ããŸãã
ç§ãã¡ã¯åã
ã®ããŒã«ã䜿çšããŸã
rubyVer=2.3 cid tool exec ruby -- -e 'puts "Hello World!"'

ããŒã«ããŸã ã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ãå¿
èŠãªãã¹ãŠã®æäœãå®è¡ãããŸãã ãã®å ŽåãRVMãã€ã³ã¹ããŒã«ãããæ¬¡ã«çŸåšã®Ruby 2.3ãã€ã³ã¹ããŒã«ãããŸãã ãã®å Žåãã·ã§ã«ã®èµ·åæã«RVMã¯èµ·åãããæšæºç°å¢å€æ°ã¯æ±æãããŸããã
cid tool describe maven

æè¡çãªè©³çް
futoin.json
ãã¡ã€ã«
æªåé«ãpackage.json
ã composer.json
ã Cargo.toml
ãªã©ãšã®é¡æšã«ããããããžã§ã¯ããã«ãŒãã«ããå Žåãããã¯ãããžã§ã¯ãã®èª¬æã«ãªããŸãã äžè¬çãªãããžã§ã¯ãèšå®ãèšå®ã§ããŸããããã¡ã€ã«ã®ååšã¯ãªãã·ã§ã³ã§ãã
CIDã¯ãèµ·åæã«å±éã«ãŒããã©ã«ããŒã§å±éç°å¢ã®å¯èœãªèšå®ãæ€çŽ¢ããŸãããããžã§ã¯ãèšå®ãšç°å¢èšå®ïŒ .env
ããŒãïŒã®äž¡æ¹ãæå®ã§ããã¢ã¯ãã£ããŠãŒã¶ãŒã®ããŒã ãã©ã«ããŒãš.env
ã®.env
ããŒãã®ã¿ãæå®ã§ããŸãã ã
泚ïŒ.envããŒãã¯é¡äŒŒç©ã§ã¯ãªãããdotenvããã¡ã€ã«ã眮ãæãããã®ã§ã¯ãããŸããã
æå¹ãªå€ã¯ã FTN16ã§è©³çŽ°ã«ææžåãããŠããŸãã
æãè峿·±ããµã€ãïŒ
actions
-æšæºæäœã¿ã°/æºå/ãã«ã/ããã±ãŒãž/ãã§ãã¯ããªãŒããŒã©ã€ããŸãã¯è£è¶³ã§ããŸããplugins
-远å ã®ããŒã«ã远å ã§ããŸããtools
䜿çšããtools
ã®ãªã¹ããšããªãã·ã§ã³ã§ãããã®ããŒãžã§ã³ããã£ãããšæå®ã§ããŸãã
- ããŒãžã§ã³
'*'
ããã³true
ããã©ã«ãããŒãžã§ã³ãå¿
èŠ - ãã以å€ã®å ŽåãããŒãžã§ã³ã¯
{tool}Ver
ç°å¢å€æ°ã«çŽæ¥ç§»åããã°ããŒãã«ç¶æ
.env.{tool}Ver
ããŒããšããŠãã©ã°ã€ã³ã§äœ¿çšã§ããŸãã
toolTune
åããŒã«ãç¹ã«åŸ®èª¿æŽããæ©èœã 詳现ã¯cid tool describe {tool}
å©çšã§ããŸããentryPoints
ååä»ããšã³ããªãã€ã³ããentryPoints
ãŸããpersistent
ãããžã§ã¯ãå
ã®èªã¿åã/æžã蟌ã¿ãã¹ã®ãªã¹ãã ç¹ã«ãŠã§ãåãã
ãããžã§ã¯ãã«ãŒãã«ããfutoin.json
ãã¡ã€ã«ã®äŸïŒ
{ "name": "example-package", "version": "0.4.2", "actions": { "package": [] }, "plugins": { "examplerelease": "some.project.specific.release", "examplehelper": "some.other.helpertool" }, "vcs": "git", "tools": { "examplerelease": true, "python": "*", "node": "stable", "gradle": "*" }, "toolTune" : { "gradle": { "package": "jar" } }, "rms": "scp", "rmsRepo": "rms@somehost", "rmsPool": "ReleaseBuilds", "entryPoints": { "app": { "tool": "python", "path": "app.py", "tune": {} } } }
å±éã®ãã¥ã¢ã³ã¹
- {.deployDir}ã¯ãç¹å®ã®ãããžã§ã¯ãããããã€ããããã®æ¡ä»¶ä»ãã«ãŒããã©ã«ããŒã§ãã
- {.deployDir} / persistent-èªã¿æžãå¯èœãã¡ã€ã«çšã®ã¹ãã¬ãŒãžé åã ã¯ã©ã¹ã¿ãšã¯ããããã¯ãŒã¯ãã¡ã€ã«ã·ã¹ãã é åãæããŸãã
- {.deployDir} / current-çŸåšã®ããŒãžã§ã³ãžã®ã·ã³ããªãã¯ãªã³ã¯ã
- {.deployDir} / {version_dir}-ç¹å®ã®ããŒãžã§ã³ã®æçµé
眮ïŒ
- {artifact}-RMSããã®æ¡åŒµåã®ãªãããã±ãŒãžã®ååã
- {vcsref} _ {vcsrevision}-ãã©ã³ããããããã€ãããå Žåã
- {vcstag}-ã¿ã°ãããããã€ãããå Žåã
- {.deployDir} / {version_dir} .tmp-åŠçäžã®äžæãã©ã«ããŒã
- {.deployDir} / {version_dir}ã{ext}-rmsã¢ãŒãã§å±éããããã€ããªã¢ãŒãã£ãã¡ã¯ãã§ã¯ãããŸããã
- {.deployDir} / vcs-
vcsref
ããã³vcstag
ã§ã®ãªããžããªã®ããŒã«ã«ã³ããŒã - {.deployDir} /ãfutoin-deploy.lock-ããã¯ãã¡ã€ã«ãããã³èª€ã£ãŠæå®ãããã¿ãŒã²ãããã©ã«ããŒã誀ã£ãŠã¯ãªã¢ããããšã«ããã»ãã¥ãªãã£æ©èœã
- ä»ã®ãã¹ãŠã¯ã¯ãªãŒã³ã¢ãããããŸãã
ããŒã«ã远å ããããã®åæ°ã«ã€ããŠå°ã
ãã¹ãŠã®ããŒã«ã¯ããã€ãã®ã¿ã€ãã«åããããŸãã 1ã€ã®ããŒã«ãããã«è€æ°ã®ããŒã«ã«é©çšã§ããŸãã å°æ¥çã«ã¯ãããã«å¢ãããããããŸããã
SubTool
-ããŒã¹ãèªåæ€åºãäŸåé¢ä¿ã®æ±ºå®ãã€ã³ã¹ããŒã«ãæŽæ°ãåé€ã®ããã®ã€ã³ã¿ãŒãã§ãŒã¹ãBuildTool
ã¢ã»ã³ããªããŒã«ã®ããŒã¹ïŒæºåããã«ããããã±ãŒãžïŒãMigrationTool
ç§»è¡ããŒã«ã®ããŒã¹ïŒç§»è¡ïŒãRmsTool
-RMSïŒããã¢ãŒã·ã§ã³ïŒããã³å
éšAPIã®ããŒã¹ãRunEnvTool
ããŒãžã§ã³ãããŒãžã£ãŒïŒnvmãrvmãgvmãªã©ïŒã®ããŒã¹ãRuntimeTool
å®è¡ããŒã«ã®ããŒã¹ã ãããã«ã¯ãjavaãpythonãrubyãªã©ãå«ãŸããŸããTestTool
ãã¹ãïŒãã§ãã¯ïŒããµããŒãããããŒã«ã®ããŒã¹ãVcsTool
-VCSïŒã¿ã°ïŒããã³å
éšAPIã®ããŒã¹
è£å©çãªããŒãºã®ããã«ãããã¯ã¹ã€ã³ã®ã»ãããããããã®äžéšã¯ãã§ã«ãµãããŒã«ã«å«ãŸããŠããŸãã
çŸæç¹ã§ã¯äœããããŸããïŒ
CentOSãDebianããArchLinuxãGentooãŸã§ãã»ãŒãã¹ãŠã®äžè¬çãªLinuxãã£ã¹ããªãã¥ãŒã·ã§ã³ããµããŒããããŠããŸãã
å®éšçãªmacOSãµããŒãã远å ããŸããã é©åãªæ©åšã¯ãããŸãã-ãã¹ãã®å©ãã¯å€§æè¿ã§ãã
æŠå¿µå®èšŒãšããŠã PHP ã Python ã RubyããGo ã Rust ã ScalaãŸã§ãããŸããŸãªããã°ã©ãã³ã°èšèªãšé¢é£ããŒã«ããµããŒããããŠããŸã ã ã«ã¹ã¿ã ãã©ã°ã€ã³ãæ¡åŒµããã³è¿œå ããæ©èœã¯ãã»ãŒç¡å¶éã§ãã
Git ã Mercurialãããã³Subversionã® 3ã€ã®ç°ãªãVCSããµããŒããããŠããŸãã
ãŸã äœã§ããïŒ
RMSãµããŒãã¯ååãšããŠå®è£
ãããŸãã ãã¹ãç®çã§ã¯ããããŸã§ã®ãšããscp
ã®ã¿ãæ©èœããŸãããArchivaãArtifactoryãNexusã®ã¡ã€ã³ã¹ã³ãŒãã§ãã
åäœãã¹ãã®ãµããŒãã¯ãããžã§ã¯ããã«ãããŒã«ïŒmakeãgradleãgruntãªã©ïŒã«äŸåããŠããŸãããçµæã®ã³ã¬ã¯ã·ã§ã³ã¯ãŸã 決å®ãããŠããŸããã æšå¥šäºé
ãæè¿ããŸãã
æå·çœ²åããã»ã¹ã¯ãŸã 決å®ãããŠããŸããã ãŠãŒã¹ã±ãŒã¹ã®å
±é忝ãåæããŠèŠã€ããããšãå¿
èŠã§ãã
å¿
èŠã«å¿ããŠã* BSDãµããŒãã¯æå°éã®åŽåã§æžã¿ãŸããã.Netã«éç¹ã眮ããWindowsãµããŒãã§ã¯ã代æ¿ã®ç¹å¥ãªå®è£
ãå¿
èŠã«ãªãå¯èœæ§ãé«ããªããŸãã
ããŒã¿ç§»è¡çšã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸãããŠããŸãããæšæºã®å®è£
ã¯ãŸã ãããŸããã
ãŸãšãããš
æ lazãå調ãªå€§éšãã®ç
çåŠçæåŠãããã³èªååãžã®æ
ç±ã«é§ãããŠãã»ãŒãã¹ãŠã®å¯èœãªæè¡ã«å¯ŸããŠäžè¬åã®æŠå¿µãçãŸããŸããã ç¹å®ã®FutoIn CIDããŒã«ã®åœ¢åŒã®å®è£
ã远å ãããŸããã ãã¡ãããå®éã«ã¯æ·±å»ãªç²ç ãšèµ°è¡ãå¿
èŠã§ãã éçºè
ã®ç掻ãç°¡çŽ åããããšã«å ããŠãDevOpsã€ã³ãã©ã¹ãã©ã¯ãã£ã®èªååãé ãããèŠãããŸãã
ãã¡ãããããã¯ããŸããŸãªãã¯ãããžãŒããµããŒãããæåã®ããŒã«ã§ã¯ãããŸãããããããããã¥ãŒãã³ã°ãªãã§æ©èœããçç£æ§ãåäžãããæ¥åžžã®ãšã©ãŒã®æ°ãæžããããšãã§ããæåã®ããŒã«ã§ãã
ãããžã§ã¯ããžã®ãªã³ã¯ïŒ
â GitHub
â Pythonããã±ãŒãžã€ã³ããã¯ã¹
â FTN16ãã©ãã