ããã«ã¡ã¯åäººïŒ PHPã§äººæ°ã®ããäŸåé¢ä¿ãããŒãžã£ãŒã®åºçŸã¯ãPHPã³ãã¥ããã£ã®ç掻ã®äžã§æãéèŠãªã€ãã³ãã®1ã€ã§ãã Composerã¯æéãã以åãã«åããŸãããèªå·±èšè¿°ã©ã€ãã©ãªãzipã¢ãŒã«ã€ãã«ããããåã«ãã©ã«ããŒã«æ£ãã°ã£ãŠããã³ãã§ã³ããŒããããŸãã«gitãŸãã¯PEARã䜿çšããããããšãã§äœæ²å®¶ã䜿çšãããšãã§ãã ããããç¹å®ã®CMSã§äœæ¥ããŠããããäœæ²å®¶ãäœã§ãããããç¥ããªããå Žåã¯ã©ãã§ããããã
ãŸããã
ç§ã¯å°ããªWebã¹ã¿ãžãªã§ããŒã ãªãŒããŒãšããŠåããŠãããçŽ1幎åãããŒã ã§ãã¹ããã©ã¯ãã£ã¹ã䜿çšããããã®ã¢ãããŒããåæ€èšããå¿ èŠããããŸããã æ©èœã®70ïŒ ä»¥äžãæšæºïŒWebãµã€ãããªã³ã©ã€ã³ã¹ãã¢ïŒãšåŒã°ãããããžã§ã¯ãã®éçºã«ã¯ã1C-Bitrixã䜿çšããŸãã ãã¹ãŠã®äžè¬çãªCMS 1C-Bitrixãšåæ§ã«ãã¢ãžã¥ãŒã«æ§é ãæã¡ããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ããµããŒãããŸãã è¯ãããã«èãããŸãããå®éã«ã¯å°ãç°ãªããŸãã ç¬èªã®ã¢ãžã¥ãŒã«ãéçºãããœãŒã¹ã³ãŒããå¿ èŠãªãã©ã«ããŒã«ã³ããŒããŠãã³ã³ãããŒã«ããã«ã§ã¢ãžã¥ãŒã«ã1ã€ãã€ã€ã³ã¹ããŒã«ããããšã§ã¢ãŒã«ã€ãã«ä¿åãããããã®ããã«æäŸãããŠãã1C-Bitrix Marketplaceãµã€ãã§ã¢ãžã¥ãŒã«ãå ¬éã§ããŸãã ã¢ãžã¥ãŒã«ãå ¬éããã«ã¯ãããŒãããŒã·ããå¥çŽãç· çµãã責任ã説æããå¥çŽã«çœ²åããã ãã§ãã ãŸããã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ããäŸåé¢ä¿ã®ãã§ãŒã³ã®ã€ã³ã¹ããŒã«ã«ã€ããŠã話ããŠããŸããã
ãã®åé¡ã¯ãã以åãã«éçºããããã¹ãŠã®CMSã«åºæã®ãã®ã§ãã ããã¯å°ããªã¢ãžã¥ãŒã«ã®éçºãããæ°ã«ããïŒããã®åçŽãªæ©èœãã¯ã¢ãžã¥ãŒã«ã«å ãŸããã¹ãã§ã¯ãªããšæãããŸãïŒãå¥ã®ããã¥ã¡ã³ããå¿ èŠã§ãã
ãã®èšäºã§ã¯ãããŒã /äŒç€Ÿã®ã¹ãã¬ãŒãžãšãã¹ããã©ã¯ãã£ã¹ã®äœ¿çšãæŽçããæ¹æ³ã説æããŸãã ããã¯ãåæ§ã®åé¡ã«çŽé¢ããŠãã人ãCMSã䜿çšããŠWebãµã€ããéçºããŠãã人ãç¬èªã®CMSãéçºããŠãã人ãPHPã§ãããžã§ã¯ããåçŽã«éçºããŠãã人ã«ãšã£ãŠèå³æ·±ããã®ã§ãã è¡ããïŒ
ããŒã1 ã¢ãžã¥ãŒã«ã®å ¬å ±é 眮
解決ããå¿ èŠãããæåã®ã¿ã¹ã¯ã¯ãã¢ãžã¥ãŒã«ã®ä¿åå Žæã§ãã ã¢ãžã¥ãŒã«ã®ãœãŒã¹ã³ãŒãã¯ãgitãmercurialããŸãã¯svnãªããžããªã«ä¿åã§ããŸãã å ¬éã¢ãžã¥ãŒã«ã«ã¯ãGitHubããå§ãããŸãã GitHubã§ã¯ããœãŒã¹ã³ãŒããç°¡åã«è¡šç€ºããMarkdown圢åŒã®ããã¥ã¡ã³ãã管çã§ããŸãã composerã䜿çšããã«ã¯ãcomposer.jsonãã¡ã€ã«ãäœæããŠããŒã¿ãåã蟌ãå¿ èŠããããŸãã ããã¯ããšãã£ã¿ãŒãIDEããŸãã¯composer initã³ãã³ããåŒã³åºãããšã§å®è¡ã§ããŸãã 以äžãåºæ¬çãªæ©èœãšäœæ²å®¶ã®ã³ãã³ãã«ã€ããŠã¯è©³ãã説æããŸãããäœæ²å®¶ãåããŠã®å Žåã¯ããã®èšäºãèªãã§ãã ãã ã
ã¢ãžã¥ãŒã«ãäœæãïŒããšãã°ãçŸåšã¯ç©ºã§ãïŒãGitHubã«ã³ãŒããæçš¿ãããã packagist.orgã«ã¢ãžã¥ãŒã«ãç»é²ããå¿ èŠããããŸãã Packagist㯠ãGitHubããã¯ãæ§æããŠããªããžããªã«å€æŽãå ãããããšãã«ãpackagist.orgã§ã¢ãžã¥ãŒã«ã«é¢ããæ å ±ãæŽæ°ãããããã«æäŸããŸãã
ããŒã2 èšçœ® ããã§æãèå³æ·±ã
確ãã«ãããªãã¯äœæ¥ããCMSã«éåžžã«ç²ŸéããŠããŸããã€ãŸããCMSã«ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããããšã®ãã¹ãŠã®å·§åŠããç¥ã£ãŠããŸãã 1C-Bitrixã§ã¯ãã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ã¯2段éã§è¡ãããŸãã
- ã¢ãžã¥ãŒã«ã®ãœãŒã¹ã³ãŒããç¹å®ã®ãã£ã¬ã¯ããª
<project_dir>/local/modules/<company_name>.<mod_mame>
- RegisterModuleé¢æ°ïŒ<company_name>ã<mod_mame>ïŒãåŒã³åºããŸãã ååãšããŠããã¹ãŠã®ã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ã¢ã¯ã·ã§ã³ã¯ãã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ãšåé€ãè¡ãã¯ã©ã¹ã®DoInstallã¡ãœããã§èª¬æãããŸãã
<project_dir>/local/modules/<company_name>.<mod_mame>/install/index.php
ããŒã2ã¯1ã§ãã ããã±ãŒãžãå®å šãªå Žæã«é ã
composerããããžã§ã¯ãã®ã«ãŒãã«ãããããã±ãŒãžå
ã®ããã¯ãå®è¡ããªãå Žåãcomposerã¯ããã©ã«ãã§ãã¹ãŠã®ããã±ãŒãžã<project_dir>/vendor
ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããŸãã ããããããã¯ç°¡åã«å€æŽã§ããŸãã
composer.jsonãã¡ã€ã«ããããžã§ã¯ãã«ãŒãã«é 眮ããå¿ èŠããããŸãã
{ "name": "sites/<sitename>", "description": "<SiteName>", "authors": [ { "name": "<developerName>", "email": "<developerEmail>" } ], "minimum-stability": "dev", "require": {}, "config": { "vendor-dir": "local/vendor" } }
1C-Bitrixã§ã¯ãéçºè
ã«ãã£ãŠæžãããã³ãŒãã¯éåžž<project_dir>/local
ãã£ã¬ã¯ããªã«é
眮ãããŸãã ãããã£ãŠã configã»ã¯ã·ã§ã³ã®ãšã³ããªã«ãã£ãŠvendor
ãã©ã«ããããã«ç§»åããŸããã ããã§ããã¹ãŠã®ãµãŒãããŒãã£ããã±ãŒãžãããã§ãã¹ããããŸãã ãã ããã¢ãžã¥ãŒã«ã¯ãã£ã¬ã¯ããª<project_dir>/local/modules/<company_name>.<mod_mame>
ã«é
眮ããå¿
èŠããããŸããã©ãããã°ããã§ããïŒ
ããŒã2 2ã ã¢ãžã¥ãŒã«ã€ã³ã¹ããŒã«ãã©ã°ã€ã³
Composerã«ã¯ããã€ãã®ã¿ã€ãã®ããã±ãŒãžãããããã®ãã¡ã®1ã€ã¯composer-pluginãcomposerèªäœã®æ¡åŒµæ©èœã§ãã CMSã®å¿ èŠã«å¿ããŠã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããããã«ãç¬èªã®ãã©ã°ã€ã³ãäœæããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãå¥ã®ãããžã§ã¯ããäœæãã composer.jsonããã®ã«ãŒãã«é 眮ããŸãã
{ "name": "<my_name>/installer", "description": "Plugin for custom installing", "type": "composer-plugin", "license": "MIT", "homepage": "<link to homepage github>", "version": "0.0.1", "authors": [ { "name": "<name>", "email": "<email>" } ], "require": { "composer-plugin-api": "^1.0" }, "require-dev": { "composer/composer": "^1.0" }, "autoload": { "psr-4": { "<my_name>\\installer\\": "" } }, "extra": { "class": "<my_name>\\installer\\Plugin" } }
ãã®ãã¡ã€ã«ã«ã¯3ã€ã®éèŠãªãã€ã³ãããããŸãã
- "type"ïŒ "composer-plugin" - äœæ²å®¶ã«ãã©ã°ã€ã³ã§ããããšãäŒããŸã
- autoload-èªåããŒãã¯ã©ã¹ã®ã«ãŒã«ã«ã€ããŠèª¬æããŸã
- extra-ã©ã®ã¯ã©ã¹ããã©ã°ã€ã³ã§ãããã瀺ããŸã
ãã©ã°ã€ã³ã¯2ã€ã®ã¯ã©ã¹ã§æ§æãããŸãã
- ãã©ã°ã€ã³èªäœã 圌ã¯äœæ²å®¶ã«èªåã®ã€ã³ã¹ããŒã©ãŒãè¿œå ããŸã
- ã€ã³ã¹ããŒã©ãŒãã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ã«åŸäºããŸã
ãã©ã°ã€ã³ã¯åã«ã€ã³ã¹ããŒã©ãŒãè¿œå ããŸãïŒãã¡ã€ã«ïŒ Plugin.php ïŒ
namespace company_name\installer; use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; use Composer\Plugin\PluginInterface; class Plugin implements PluginInterface { public function activate(Composer $composer, IOInterface $io) { $composer->getInstallationManager()->addInstaller(new Bitrix($io, $composer)); } }
次ã«ãã€ã³ã¹ããŒã©ãŒèªäœïŒ company_name\installer\Bitrix
ïŒã ã¯ã©ã¹ã¯ã Composer\Installer\LibraryInstaller
ãç¶æ¿ãã次ã®ã¡ãœãããå«ãå¿
èŠããããŸãã
- ãµããŒã -ã€ã³ã¹ããŒã©ãŒããã®ã¿ã€ãã®ããã±ãŒãžããµããŒãããå Žåãtrueãè¿ããŸã
- getInstallPath-ããã±ãŒãžãœãŒã¹ã³ãŒããé 眮ãããã¹ãè¿ããŸã
- ã€ã³ã¹ããŒã«/ã¢ã³ã€ã³ã¹ããŒã«/æŽæ° -ããã±ãŒãžã®ã€ã³ã¹ããŒã«/ã¢ã³ã€ã³ã¹ããŒã«/æŽæ°ããã¯
ãã¹ãŠã®ã¢ãžã¥ãŒã«ã¯bitrix-moduleã¿ã€ãã§ãããã€ã³ã¹ããŒã©ãŒã¯ãããã䜿çšããå¿ èŠããããŸãã
public function supports($packageType) { return $packageType === 'bitrix-module'; }
ã¢ãžã¥ãŒã«åïŒããªãªãã§åºåãããcompany_nameãšmod_nameã§æ§æãããïŒã®æŽåæ§ãç¶æããããã±ãŒãžã«<my_name>/<company_name>.<mod_mame>
ãŸãã¯<company_name>/<company_name>.<mod_mame>
ã ããã±ãŒãžåãååŸããŠã¹ã©ãã·ã¥ã§åºåããšã2çªç®ã®éšåã¯ã¢ãžã¥ãŒã«ã®ååã«ãªããŸã
public function getInstallPath(PackageInterface $package) { $name = explode("/", $package->getName()); return "local/modules/{$name[1]}/"; }
initBitrixããã³getModuleã¡ãœããã¯ã1C-Bitrix APIãšé£æºããŠã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã æŽæ°æ¹æ³ã¯ã䜿çšããŠããCMSãšã¢ãžã¥ãŒã«æŽæ°ã®ãªãªãŒã¹æ¹æ³ãããã³ãããã®å®è¡èšç»ã«åºã¥ããŠå®è£ ãããŸãïŒãã¡ã€ã«ïŒ Bitrix.php ïŒã
namespace company_name\installer; use Composer\Installer\LibraryInstaller; use Composer\Package\PackageInterface; use Composer\Repository\InstalledRepositoryInterface; class Bitrix extends LibraryInstaller { public function supports($packageType) { return $packageType === 'bitrix-module'; } public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { parent::install($repo, $package); $name = explode("/", $package->getName()); $this->initBitrix(); $module = $this->getModule($name[1]); $module->DoInstall(); } public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) { $name = explode("/", $package->getName()); $this->initBitrix(); $module = $this->getModule($name[1]); $module->DoUninstall(); parent::uninstall($repo, $package); } public function getInstallPath(PackageInterface $package) { $name = explode("/", $package->getName()); return "local/modules/{$name[1]}/"; } protected function initBitrix() { $_SERVER['DOCUMENT_ROOT'] = __DIR__ . "/../../../../"; define('STOP_STATISTICS', true); define("NO_KEEP_STATISTIC", "Y"); define("NO_AGENT_STATISTIC","Y"); define("NOT_CHECK_PERMISSIONS", true); require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'); $GLOBALS['APPLICATION']->RestartBuffer(); } protected function getModule($module) { include_once $_SERVER['DOCUMENT_ROOT'] . "/local/modules/" . $module . "/install/index.php"; $class = str_replace(".", "_", $module); $module = new $class(); return $module; } }
ãã©ã°ã€ã³ã確èªããããã³ãŒããGitHubã«ã¢ããããŒãããPackagistã«ç»é²ã§ããŸãã
ããŒã2 3ã ã¢ãžã¥ãŒã«
æåã®éšåã§èª¬æããã¢ãžã¥ãŒã«èªäœã«æ»ããŸãããã ãšãããã圌ã®composer.jsonã« ã
{ "name": "<my_name>/<company_name>.<mod_mame>", "type": "bitrix-module", "description": " ", "version": "1.0.0", "time": "11.09.2018", "minimum-stability": "dev", "license": "MIT", "homepage": "<link to homepage github>", "authors": [ { "name": "<name>", "email": "<email>" } ], "require": { "<my_name>/installer": "*" } }
ã¢ãžã¥ãŒã«ã®ååã¯CMSã®èŠä»¶ã«æºæ ããå¿ èŠããããã€ã³ã¹ããŒã©ãŒãåäœããã¿ã€ããæå®ããå¿ èŠãããïŒãã®å Žåã¯bitrix-module ïŒãäŸåé¢ä¿ã§ã¯ã¢ãžã¥ãŒã«ã«ãã©ã°ã€ã³ãå¿ èŠã§ã ïŒ requireã»ã¯ã·ã§ã³ïŒã ã¢ãžã¥ãŒã«èªäœãäœæãããã®åäœã確èªããåŸãGitHubã«ã³ãŒããå ¥åããPackagistã«ç»é²ããŸãã
ããŒã2 4ã ã®äœ¿çš
ãããžã§ã¯ãïŒãµã€ãïŒèªäœã«ã¯ãããã次ã®composer.jsonãããããšãæãåºãããŠãã ãã
{ "name": "sites/<sitename>", "description": "<SiteName>", "authors": [ { "name": "<developerName>", "email": "<developerEmail>" } ], "minimum-stability": "dev", "require": {}, "config": { "vendor-dir": "local/vendor" } }
ããã§ãå¿ èŠãªãã¹ãŠã®ã¢ãžã¥ãŒã«ãrequireã»ã¯ã·ã§ã³ã«ãªã¹ãããããã³ãã³ããåŒã³åºãããšãã§ããŸã
composer require "<my_name>/<company_name>.<mod_mame>" "*"
ããšãã°ãSMSã§ãã¹ã¯ãŒããéä¿¡ããŠãããžã§ã¯ãã«èªèšŒã¢ãžã¥ãŒã«ãè¿œå ããå¿ èŠãããå Žåãå®äºããäœæ¥ã®æçšæ§ãååã«æããããšãã§ããŸãã
ã¢ãžã¥ãŒã«èªäœã«ã¯ãæ¿èªããžãã¯ãæ åœããã³ãŒããå«ãŸããŠããŸããSMSéä¿¡ã³ãŒããå«ããããšã¯ã§ããŸãããããšãã°ãéç¥ã¢ãžã¥ãŒã«ãªã©ã®ä»ã®ã¢ãžã¥ãŒã«ãSMSãéä¿¡ãããããã³ãŒããéè€ããªãããã«SMSãåå¥ã®ã¢ãžã¥ãŒã«ã«ããæ¹ãããããã§ãã RESTãµãŒãã¹ãåæ§ã§ãã ä»ã®ã¢ãžã¥ãŒã«ã§ã䜿çšã§ããŸãã ãããŠããã®è€éãªã¹ããŒã ã®ãã¹ãŠã§ãã¢ãžã¥ãŒã«ãããã«4ã€ãåŒã£åŒµã£ãŠãããã®ã€ã³ã¹ããŒã«ã¯åãããã«ç°¡åãªãŸãŸã§ãã 1ã€ã®ã³ãã³ããå®è¡ããã ãã§ãïŒ
composer require "<my_name>/<company_name>.<mod_mame>" "*"
ãããŠãäœãã©ã®é åºã§ããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããããäœæ²å®¶ã«æ±ºããããŸãã
ããŒã3ã ãã©ã€ããŒãã¢ãžã¥ãŒã«
åã ã¡ãäžèšã®ãã¹ãŠã§ãã¢ãžã¥ãŒã«ããããªãã¯ãã¡ã€ã³ã«ããããšã奜ãŸãªãå Žåã¯ãããã«ä¿®æ£ããŸãã ã¢ãžã¥ãŒã«ã®helloã¹ãã¬ãŒãžãæŽçããã«ã¯ã2ã€ã®ããŒã«ãå¿ èŠã§ãã
- GitLabã¯GitHubã®é¡äŒŒç©ã§ããããµãŒããŒã«ããŠã³ããŒãããŠã€ã³ã¹ããŒã«ã§ããŸãã
- Satisã¯ãäœæ²å®¶ã䜿çšã§ãããªããžããªãžã§ãã¬ãŒã¿ãŒã§ãã
éå§ããã«ã¯ãGitLabãã€ã³ã¹ããŒã«ããã¢ãžã¥ãŒã«ã®ãœãŒã¹ã³ãŒããGitLabã«è»¢éããŸãã 次ã«ãSatisãã€ã³ã¹ããŒã«ãã satis.jsonã«ãã¹ãŠã®ã¢ãžã¥ãŒã«ãèšè¿°ããŸã
{ "name": "ropoName", "homepage": "https://composer.<company_name>.ru/", "repositories": [ { "type": "vcs", "url": "https://gitlab.<company_name>.ru/<my_name>/installer" }, { "type": "vcs", "url": "https://gitlab.<company_name>.ru/<my_name>/<company_name>.<mod_name>" } ], "config": { "gitlab-domains": [ "gitlab.<company_name>.ru" ], "gitlab-token": { "gitlab.<company_name>.ru": "GitLab Token" } }, "require-all": true }
GitLabã§ã¯ãapiãå©çšã§ããããŒã¯ã³ãäœæãã satis.jsonã§æå®ããå¿ èŠããããŸãã ããããã¹ãŠã®æäœã®åŸã次ã®ã³ãã³ããå®è¡ããŸãã
php bin/satis build satis.json ./web
ãããŠã Webãã©ã«ããŒã§ã httpsïŒ// composer ã<company_name> .ru /ãã§å ¬éã§ããéçãªããžããªãŒãååŸããŸã ã
ãµã€ãã®composer.jsonã¯ã ãªããžããªã»ã¯ã·ã§ã³ããããšããç¹ã§ã®ã¿ç°ãªããŸã
{ "name": "sites/<sitename>", "description": "<SiteName>", "authors": [ { "name": "<developerName>", "email": "<developerEmail>" } ], "minimum-stability": "dev", "require": {}, "config": { "vendor-dir": "local/vendor" }, "repositories": [ { "type": "composer", "url": "https://composer.<company_name>.ru/" } ] }
ããšãã
å人ãã¡ããã®èšäºãããªãã®åœ¹ã«ç«ã€ããšãæ¬åœã«é¡ã£ãŠããŸãã ãŸããã©ã®CMSã䜿çšãããã¯é¢ä¿ãããŸãããã³ãŒãã®ã¹ãã¬ãŒãžãæ£ããæŽçããå³å¯ã«ææžåãããåããã¢ãžã¥ãŒã«ãå€ãã®ãèãããã©ãŒãããäŸåé¢ä¿ã«åå²ããããšãã§ããã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ãŸãã¯æŽæ°ãå°é£ã«ãªããŸãã ããã°ã£ãŠã