Slide 1

Slide 1 text

composerϓϥάΠϯΛ
 ࡞ͬͯΈΑ͏ PHPΧϯϑΝϨϯε2016 τϥοΫ1

Slide 2

Slide 2 text

ࣗݾ঺հ • த໺ ୓ (@Hiraku) • https://github.com/hirak • ීஈ͸ϝϧΧϦͰαʔόʔαΠυΤϯδχΞ
 ΍ͬͯ·͢ • झຯ͸ComposerΛ଎͘͢Δ͜ͱ

Slide 3

Slide 3 text

hirak/prestissimo • ͱ͍͏ComposerϓϥάΠϯΛ࡞͍ͬͯ·͢ • githubͰ2000starήοτ͠·ͨ͠

Slide 4

Slide 4 text

Composerͱ͸Կ͔ʁ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Composerͱ͸ • PHPϥΠϒϥϦͷґଘؔ܎ղܾπʔϧ • 2011ࠒʹ։ൃελʔτ / PHP5.3Ҏ߱ʹରԠ • autoloaderͷࣗಈੜ੒ • ଟ༷ͳϦϙδτϦܗࣜʹରԠ • ϓϥάΠϯػߏ • https://getcomposer.org/

Slide 7

Slide 7 text

࢖͍͸͡ΊΔͷ͸؆୯ https://getcomposer.org/download/ pharϑΝΠϧΛҰݸμ΢ϯϩʔυ͢Δ͚ͩɻ
 installerܦ༝Λਪ঑ʢϋογϡ஋ͷݕূʣ $ curl -sL https://getcomposer.org/installer | php (実態はこんな感じ) $ curl -O composer https://getcomposer.org/download/1.1.3/composer.phar

Slide 8

Slide 8 text

$ composer ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.1.2 2016-05-31 19:48:11 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Slide 9

Slide 9 text

Α͘࢖͏αϒίϚϯυ 対話形式でプロジェクトをセットアップ $ composer init ライブラリの追加 $ composer require 'vendor/package' ライブラリのアップデート $ composer update composer.jsonに従ってまとめてインストール $ composer install

Slide 10

Slide 10 text

શͯΛϩʔΧϧʹΠϯετʔϧ • ./composer.json • ඞཁͳϥΠϒϥϦΛఆٛ • ޙ͸ composer install • ./vendor/ ʹϥΠϒϥϦͱ autoload.php ͕ ഑ஔ͞ΕΔ

Slide 11

Slide 11 text

࠷ۙͷComposer • 4/5ʹॳͷstable൛1.0.0ϦϦʔε
 (ຊൃද࣌఺ͷ࠷৽͸ 1.2.1) • pathϦϙδτϦͷରԠڧԽ • ϓϥάΠϯͰαϒίϚϯυੜ΍ͤΔΑ͏ʹ • ࡞ऀͷJordi Boggiano͕7݄ʹདྷ೔

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

࣭໰ʮPHPҎ֎ͷݴޠͰComposer Λ࣮૷͢ΔΞΠσΞ͸Ͳ͏ࢥ͏ʁʯ • ࠓͷComposer͸͋·Γ଎͘ͳ͍ • ྫ͑͹ฒྻॲཧʹڧ͍ݴޠͰ࣮૷͢Ε͹΋ͬ ͱߴ଎ʹͰ͖ΔͷͰ͸…

Slide 15

Slide 15 text

@seldaek PHPͰॻ͍ͯ͋Δ͔Βͦ͜ɺ
 PHPͰ֦ுͰ͖ΔΑ͏ʹͳͬͯΔ

Slide 16

Slide 16 text

ComposerΛ֦ு͢Δɺͱ͸

Slide 17

Slide 17 text

֦ுͯ͠Ͱ͖Δ͜ͱ • composerίϚϯυͷલޙͰ೚ҙͷॲཧΛ࣮ߦ
 (ΠϕϯτϑοΫܕ) • αϒίϚϯυΛComposerʹੜ΍͢
 (αϒίϚϯυܕ)

Slide 18

Slide 18 text

ComposerϓϥάΠϯͰͷྫ

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

$ composer global require hirak/prestissimo

Slide 21

Slide 21 text

hirak/prestissimo (੿࡞) • ΠϕϯτϑοΫܕ • composerຊମͷμ΢ϯϩʔυʹׂΓࠐΜͰɺ ઌʹฒྻμ΢ϯϩʔυ͢Δ͜ͱͰinstallίϚϯ υΛߴ଎Խ • ͦͷଞ͸طଘίϚϯυʹӨڹΛ༩͑ͳ͍

Slide 22

Slide 22 text

ͲΕ͙Β͍଎͘ͳΔͷ͔ • ύοέʔδͱωοτϫʔΫ؀ڥʹΑΔͷͰҰ ֓ʹݴ͑ͳ͍ • LaravelϓϩδΣΫτͷ৽ن࡞੒ͩͱɺ • 269.36sec → 24.32sec • 10ഒҎ্଎͍

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

$ composer global require fxp/composer-asset-plugin

Slide 25

Slide 25 text

fxp/composer-asset-plugin • ΠϕϯτϑοΫܕ • composer.jsonʹbower΍npmͷύοέʔδ Λॻ͍ͯɺcomposerଆͰΠϯετʔϧͰ͖Δ Α͏ʹ͢Δ • ΁ɺมଶͩʔʔʔʂʂʂʢ๙Ίݴ༿ʣ

Slide 26

Slide 26 text

composer.json͕͜͏ͳΔ "require": { "fxp/composer-asset-plugin": "^1.2", "npm-asset/jquery": "2.2.0", "npm-asset/bootstrap": "3.3.7" } • npm-asset/xxxx͸packagistʹొ࿥͞Ε͍ͯͳ͍ɻ
 npmΛΫϩʔϧͯ͠औͬͯ͘Δ • vendor/npm-asset ΍ vendor/bower-asset ΁഑ஔ͞ΕΔ • node.jsͳ͠Ͱasset؅ཧ͕Ͱ͖ͯศརʂ

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

$ composer global require webysther/composer- plugin-qa

Slide 29

Slide 29 text

webysther/composer-plugin-qa • αϒίϚϯυܕ • vendor/bin/XXXXͳ։ൃ༻ίϚϯυΛ composerͷαϒίϚϯυͰ࣮ߦͰ͖ΔΑ͏ʹ ͢Δ

Slide 30

Slide 30 text

vendor/bin/phpunit
 ͬͯଧͭͷμα͍໰୊ • phpunit͸ϩʔΧϧΠϯετʔϧ͢Δ΂͖ • ͔͠͠PATH͕௨ͬͯͳ࣮ͯ͘ߦ͕໘౗ • composerͷαϒίϚϯυܦ༝Ͱݺ΂Δͱศར • composer qa:test Ͱphpunit͕࣮ߦ͞Εͯ
 ศར

Slide 31

Slide 31 text

༗໊ͳͷ΄ͱΜͲೖͬͯΔ

Slide 32

Slide 32 text

ͳͥɺComposerΛ
 ֦ு࣮ͯ͠ݱ͢Δͷ͔ʁ

Slide 33

Slide 33 text

composer͕஌͍ͬͯΔ΋ͷ • ϓϩδΣΫτͷϝλ৘ใ • Ͳ͜ʹͲͷΫϥεϑΝΠϧ͕͋Δ͔ • ϓϩδΣΫτຊମͷιʔείʔυΛࣗ༝ʹݺ ͼग़ͤΔ

Slide 34

Slide 34 text

composer͕͍࣋ͬͯΔ΋ͷ • symfony/console΍symfony/finderͳͲͷఆ൪ ίϚϯυϥΠϯϥΠϒϥϦΛ࠷ॳ͔Βಉࠝ • ѹ౗తͳϢʔβʔ਺ʹཪଧͪ͞ΕͨҠ২ੑ • ͍ͭͰʹɺϓϥάΠϯͷܗʹ͓͚ͯ͠͹഑෍΋ ָ͍͢͝

Slide 35

Slide 35 text

(prestissimo͸ϓϥάΠϯͱ ͯ͠͸अಓͳྫ)

Slide 36

Slide 36 text

ϓϥάΠϯҎલͷ֦ுํ๏

Slide 37

Slide 37 text

scriptsͱ͸ • composer.jsonʹscriptsͱ͍͏ϓϩύςΟΛ࡞Δ • ೚ҙͷεΫϦϓτΛ࣮ߦͰ͖Δ • ΠϕϯτϑοΫͰࣗಈ࣮ߦ / खಈ࣮ߦ • ରԠ͢ΔΠϕϯτ͕ͳ͚Ε͹ɺcomposerͷαϒίϚϯυ ʹͳΔ • https://getcomposer.org/doc/articles/scripts.md

Slide 38

Slide 38 text

͍͍ͩͨ͜Μͳײ͡ { "scripts": { "test": "phpunit", "postinstall": "rm -rf ./cache", "migrate": "App\Db\Migration::run" } } WFOEPSCJOʹ1"5) ͕௨ͬͯΔͷͰݺ΂Δ γΣϧεΫϦϓτͰ΋ 0, BVUPMPBE͕௨ͬͯΕ͹1)1ͷ TUBUJDϝιουͰ΋ॻ͚Δ

Slide 39

Slide 39 text

ݺͼग़͠ $ composer test $ composer migrate $ composer install # postinstallが自動発動 $ composer run postinstall # 明示発動

Slide 40

Slide 40 text

scriptsͩͱਏ͍ͱ͜Ζ • ଞͷcomposerϓϩδΣΫτͰ΋࢖͍·Θͨ͠ ͍ͳΒɺcomposer.jsonΛίϐϖ͢Δ͔͠ͳ͍ • ϓϥάΠϯԽ͓ͯ͘͠ͱɺrequire͢Δ͚ͩͰ ࢖͍·ΘͤΔΑ͏ʹͳΔ

Slide 41

Slide 41 text

ComposerϓϥάΠϯ ύοέʔδԽͨ͠scripts ʹ

Slide 42

Slide 42 text

ComposerϓϥάΠϯΛ࡞Δ

Slide 43

Slide 43 text

ComposerϓϥάΠϯͷ࡞Γํ • https://getcomposer.org/doc/articles/ plugins.md • ͪΐͬͱ࡞๏͕͋Δ͚ͩͰɺ࡞Δ΋ͷ͸ී௨ ͷcomposerϥΠϒϥϦͱಉ͡

Slide 44

Slide 44 text

༻ҙ͢Δ΋ͷ • composer.pharͱͦΕ͕ಈ͘؀ڥ • composerͷιʔείʔυ • ͖͋ΒΊͳ͍৺ʢॏཁʣ

Slide 45

Slide 45 text

େମͷྲྀΕ ࡞Ζ͏ͱ͍ͯ͠Δ QMVHJOύοέʔδ ࣮ݧ୆ͷ DPNQPTFSύοέʔδ ιʔείʔυ൛ DPNQPTFS pathͰrequireͤ͞Δ ࣮ࡍʹૢ࡞
 ͯ͠ಈ࡞֬ೝ ಈ͔ͳ͔ͬͨΒ
 मਖ਼

Slide 46

Slide 46 text

େମͷྲྀΕ ࡞Ζ͏ͱ͍ͯ͠Δ QMVHJOύοέʔδ ࣮ݧ୆ͷ DPNQPTFSύοέʔδ ιʔείʔυ൛ DPNQPTFS pathͰrequireͤ͞Δ ࣮ࡍʹૢ࡞
 ͯ͠ಈ࡞֬ೝ ಈ͔ͳ͔ͬͨΒ
 मਖ਼

Slide 47

Slide 47 text

ιʔείʔυ൛composer
 ͷεεϝ • ޷͖ͳ͚ͩvar_dumpσόοάͰ͖Δ • ελοΫτϨʔε΋ಡΈ΍͘͢ͳΔ • ࠷ޙ͸ιʔείʔυΛಡ·͟ΔΛಘͳ͍෦෼ ͕ଟ͍

Slide 48

Slide 48 text

ιʔείʔυͷ··composer Λಈ͔͢ $ git clone git://github.com/composer/composer.git $ cd composer $ php path/to/composer.phar install --no-dev $ bin/composer --version Composer version @package_branch_alias_version@ (@package_version@) @release_date@

Slide 49

Slide 49 text

ιʔείʔυͷ··composer Λಈ͔͢ $ git clone git://github.com/composer/composer.git $ cd composer $ php path/to/composer.phar install --no-dev $ bin/composer --version Composer version @package_branch_alias_version@ (@package_version@) @release_date@

Slide 50

Slide 50 text

composer.pharΛϏϧυ͢Δʹ͸ composer.phar͕ඞཁ • ʮ෰Λങ͍ʹߦ͘෰͕ͳ͍ʯΈ͍ͨͳ
 ηϧϑϗεςΟϯάঢ়ଶ • ڀۃͷυοάϑʔσΟϯάମ੍

Slide 51

Slide 51 text

େମͷྲྀΕ ࡞Ζ͏ͱ͍ͯ͠Δ QMVHJOύοέʔδ ࣮ݧ୆ͷ DPNQPTFSύοέʔδ ιʔείʔυ൛ DPNQPTFS pathͰrequireͤ͞Δ ࣮ࡍʹૢ࡞
 ͯ͠ಈ࡞֬ೝ ಈ͔ͳ͔ͬͨΒ
 मਖ਼

Slide 52

Slide 52 text

ϓϥάΠϯͷcomposerϓϩ δΣΫτΛ࡞Δ • $ composer init • type Λ composer-plugin ʹ͢Δ • require ʹ composer-plugin-api ΛೖΕΔɻ࠷৽൛^1.0Ͱྑ͍ • Ϣχοτςετ΋ॻ͖͍ͨͳΒɺrequire-devʹ"composer/ composer"ΛՃ͑Δ • extra.classʹىಈΫϥε໊Λొ࿥

Slide 53

Slide 53 text

composer.jsonͷྫ { "name": "my/plugin-package", "type": "composer-plugin", "require": { "composer-plugin-api": "^1.0" }, "require-dev": { "composer/composer": "1.2.0", "phpunit/phpunit": "^5.3" }, "autoload": { "psr-4": {"My\\": "src/"} }, "extra": { "class": "My\\Plugin" } }

Slide 54

Slide 54 text

େମͷྲྀΕ ࡞Ζ͏ͱ͍ͯ͠Δ QMVHJOύοέʔδ ࣮ݧ୆ͷ DPNQPTFSύοέʔδ ιʔείʔυ൛ DPNQPTFS pathͰrequireͤ͞Δ ࣮ࡍʹૢ࡞
 ͯ͠ಈ࡞֬ೝ ಈ͔ͳ͔ͬͨΒ
 मਖ਼

Slide 55

Slide 55 text

࣮ݧ୆ͷcomposerϓϩδΣΫ τΛ࡞Δ • ద౰ͳύεͰcomposer init͢Δ • த਎͸ۭͬΆͰ΋ϑϨʔϜϫʔΫΠϯετʔ ϧঢ়ଶͰ΋ͳΜͰ΋ྑ͍ • ϓϥάΠϯΛ࣮ࡍʹ࢖͏৔໘Λ૝ఆ

Slide 56

Slide 56 text

pathͰpluginΛrequire͢Δ { "name": "my/somepj", "type": "library", "repositories": [ { "type": "path", "url": "../plugin-package" } ], "require": { "my/plugin-package": "@dev" } }

Slide 57

Slide 57 text

pathϦϙδτϦͷಛੑ • ͨͩͷγϯϘϦοΫϦϯΫΛுΔ͚ͩ • ͳͷͰߋ৽͕ϦΞϧλΠϜʹ൓ө͞ΕΔ • όʔδϣϯ؅ཧ͸ແཧͳͷͰ"@dev"Λࢦఆ

Slide 58

Slide 58 text

ޙ͸ͻͨ͢Βࢼߦࡨޡ

Slide 59

Slide 59 text

composer = $composer; $this->io = $io; } } جຊܕ

Slide 60

Slide 60 text

composer = $composer; $this->io = $io; } public static function getSubscribedEvents() { return array( 'post-autoload-dump' => 'onPostAutoloadDump', ); } public function onPostAutoloadDump(Event $ev) { $this->io->write('onPostAutoloadDump'); } } Πϕϯτϋϯυϥܕ ΠϯλʔϑΣʔεΛҰͭ௥Ճ ϑοΫ͢ΔΠϕϯτΛྻڍ ࣮ߦ͞ΕΔॲཧͷຊମ

Slide 61

Slide 61 text

composer = $composer; $this->io = $io; } public function getCapabilities() { return array( 'Composer\Plugin\Capability\CommandProvider' => 'My\Commands', ); } } αϒίϚϯυܕ ΠϯλʔϑΣʔεΛҰͭ௥Ճ $PNNBOEҰཡΛ
 ද͢ΫϥεΛઃఆ

Slide 62

Slide 62 text

Slide 63

Slide 63 text

setName('hello'); } protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Hello, world!!'); } } αϒίϚϯυܕ(3) TZNGPOZDPOTPMF ͷίϚϯυΛ࡞Δͷͱ ͍͍ͩͨಉ͡

Slide 64

Slide 64 text

͓֮͑ͯ͘ͱྑ͍΋ͷ • ϓϥάΠϯ͸ComposerຊମͱಉҰϓϩηεͰಈ࡞ • ෇ਵ͢ΔϥΠϒϥϦ࢖͍์୊ • symfony/console, finder, json-schema... • require͠ͳͯ͘Α͍ • composer.jsonͩͬͯಡΊΔͧ

Slide 65

Slide 65 text

ϓϥάΠϯ։ൃͷ όουϊ΢ϋ΢

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

ʊਓਓਓਓਓਓʊ ʼɹҙຯෆ໌ɹʻ ʉY^Y^Y^Y^Yʉ

Slide 68

Slide 68 text

Τϥʔ͕ҙຯෆ໌ • composer͸ඪ४ͷΤϥʔϋϯυϥ͕๫ྗత • E_NOTICE/E_DEPRECATEDͳͲͷΤϥʔ͕શ ͯϒϥοΫϗʔϧͷΑ͏ʹٵ͍ࠐ·Εɺ ErrorExceptionʹม׵͞ΕΔ • ελοΫτϨʔε͘ΕΑʂʂ

Slide 69

Slide 69 text

։ൃத͚ͩॻ͖׵͑ͯ͠·͑ src/Composer/Util/ErrorHandler.php //... public static function register(IOInterface $io = null) { // set_error_handler(array(__CLASS__, 'handle')); error_reporting(E_ALL | E_STRICT); self::$io = $io; }

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

Τϥʔͷى͖ͨߦ͕
 Θ͔Δ…ʂʂ

Slide 72

Slide 72 text

༨ஊͰ͚͢Ͳ • set_error_handler(...); ͢Δͱ͖͸ୈೋҾ਺ࢦ ఆ͠·͠ΐ͏Ͷ • શΤϥʔΛϒϥοΫϗʔϧͷΑ͏ʹٵ͍ࠐΉ ͷ͸ catch (\Exception $e) ͱಉ͡…ʂ • Pokémon Catching (CATCH 'EM ALL)

Slide 73

Slide 73 text

͋ͱ͸ࠔͬͨΒ • ιʔεΛಡΉ • composerଆʹvar_dumpΔ • ଞͷϓϥάΠϯΛpackagistͰ୳ͯ͠ιʔεΛಡΉ • σόοΨͰݟΔ
 (cliπʔϧͳͷͰphpdbg͕࢖͍΍͍͢)

Slide 74

Slide 74 text

(͜͜·Ͱલஔ͖)

Slide 75

Slide 75 text

ͦΖͦΖ ຊ୊

Slide 76

Slide 76 text

๯಄ͷεϥΠυΛ ͍֮͑ͯ·͔͢ʁ

Slide 77

Slide 77 text

Composerͱ͸Կ͔ʁ

Slide 78

Slide 78 text

ϥΠϒϥϦͷ
 ґଘؔ܎ղܾπʔϧ

Slide 79

Slide 79 text

ͦΕ͚ͩʁ • ϓϥάΠϯΛݟΔͱɺଞʹ΋৭ʑͰ͖Δ͜ͱ͕Θ͔Δ • CLIπʔϧͷϑϨʔϜϫʔΫͰ΋͋Δ • λεΫϥϯφʔʹ΋ͳΔ • ։ൃπʔϧʹ΋ɺؤுΕ͹σϓϩΠπʔϧʹ΋ • ͜Ε͸ҰମԿͩʁ

Slide 80

Slide 80 text

ϥΠϒϥϦͷ
 ґଘؔ܎ղܾπʔϧ

Slide 81

Slide 81 text

ComposerͷӅΕͨ໾ׂ • ϥΠϒϥϦΛ؅ཧ͢ΔͨΊʹ͸ʮϥΠϒϥϦʯ ͱ͸Կ͔Λఆٛ͠ͳͯ͘͸ͳΒͳ͔ͬͨ • ͦΕ͕Composer༻ޠͰݴ͏ͱ͜Ζͷ
 ύοέʔδ

Slide 82

Slide 82 text

ຊ౰͸ Composerͱ͸Կ͔ʁ

Slide 83

Slide 83 text

ύοέʔδΛ࡞ΔͨΊͷ ϑϨʔϜϫʔΫ

Slide 84

Slide 84 text

PHPʹ͓͚ΔϓϩάϥϜͷ୯Ґ 1. 1ຕͷεΫϦϓτ 2. require ʹΑΔϑΝΠϧ෼ׂ 3. ؔ਺ / ΫϥεԽ 4. ύοέʔδ 5. αʔϏε (Microservices) 8FCΞϓϦέʔγϣϯ
 ϑϨʔϜϫʔΫͷର৅ $PNQPTFS͸͜͜ʹ
 ఆٛΛ༩͑ͨ

Slide 85

Slide 85 text

ͲΜͳෳࡶͳιϑτ΢ΣΞ΋ɺ ύοέʔδͷ֓೦ʹམͱ͠ࠐΊΔ ϝλ QBDLBHF ΂ΜΓ QBDLBHF QBDLBHF ΦϨΦϨ QBDLBHF ద౰ QBDLBHF ࡶڕ QBDLBHF ࠷ߴ QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF QBDLBHF

Slide 86

Slide 86 text

զʑ͸ԿΛ࡞͍ͬͯͨͷ͔ • ύοέʔδΛ࡞͍ͬͯͨ • Composer͸ԿͰ΋ύοέʔδͱΈͳ͢ • ʮPHPͰԿ͔Λ࡞Δʯ
 ʮComposerύοέʔδΛ࡞Δʯ
 ͍͍ͩͨಉ͡ҙຯ

Slide 87

Slide 87 text

͍·΍ Composerͱ͸Կ͔ʁ

Slide 88

Slide 88 text

ϓϩδΣΫτͷશͯΛ
 ঠѲ͢Δଘࡏ

Slide 89

Slide 89 text

ʊਓਓਓਓਓਓਓਓʊ ʼɹcomposer.jsonɹʻ ʉY^Y^Y^Y^Y^Y^Yʉ

Slide 90

Slide 90 text

൴͸ͳΜͰ΋஌͍ͬͯΔ • ύοέʔδ͕ԿͰͲ͏͍͏໾ׂͳͷ͔ • ඞཁͱ͍ͯ͠ΔϥΠϒϥϦ • ϓϩάϥϜͷىಈํ๏

Slide 91

Slide 91 text

͡Ό͋ɺComposerʹدͤΑ͏

Slide 92

Slide 92 text

ϓϩδΣΫτΛ೺Ѳ্ͨ͠Ͱ
 ಈ࡞͢Δπʔϧ • ComposerϓϥάΠϯܗࣜͳΒ࣮ݱ͠΍͍͢ • ࠓޙɺWebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ ΍։ൃπʔϧ΋ɺcomposerϓϥάΠϯͷܗࣜ ͕૿͑Δ͔΋ɻ

Slide 93

Slide 93 text

·ͱΊ • Composer͸ύοέʔδͷϑϨʔϜϫʔΫͩ • composer.jsonʹ৘ใΛू໿͠ɺશͯཧղ͞ ͤɺͦͷ্Ͱ։ൃ͢Δ • ·ͣ͸scriptsΛ࡞ͬͯΈͯʂ • ͦͷ্ͰϓϥάΠϯԽͯ͠ΈΔͱ͍͍Α