Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© - BASE, Inc. Composerって何? どう動くの? 読んでみました! . . - PHP Conference Japan
Slide 2
Slide 2 text
© - BASE, Inc. ⾃⼰紹介 • ۚलथ / ͖Μ͡ΐ͏ͻͰ͖ • GitHub: @o0h / Twitter: @o0h_ • BASE, Inc. (2019.10) / ج൫νʔϜ • ex Connehito Inc.(2015.04-) • ͖ͳFWCakePHP • ΞΠίϯ ඒຯ͍͠ࡪࢠကͷࣸਅͰ͢
Slide 3
Slide 3 text
© - BASE, Inc. 本⽇は Composerのお話です! Composer\Console\Application::$logo
Slide 4
Slide 4 text
© - BASE, Inc. Composer、 使った事ありますか?
Slide 5
Slide 5 text
© - BASE, Inc. では、 Composerで 困った事ありませんか?
Slide 6
Slide 6 text
• install͕͍ • ίϯϑϦΫτʁʁͳΜౖ͔ΒΕͨʂ • Φϓγϣϯ͕Α͔͘ΒΜ • ίϯϑΟάΑʔΘ͔ΒΜ • .lockߋ৽ͰPR͛ΒΕͯwww
Slide 7
Slide 7 text
© - BASE, Inc. いつもあんなにお世話になってるのに、 彼(⼥)が困っている時に 何もしてあげられない。
Slide 8
Slide 8 text
© - BASE, Inc. それって、 とても切なくないですか?
Slide 9
Slide 9 text
© - BASE, Inc. よし、 じゃあ腹割って話をしてみよう!
Slide 10
Slide 10 text
© - BASE, Inc. Composerって何? どう動くの? 読んでみました! . . - PHP Conference Japan
Slide 11
Slide 11 text
© - BASE, Inc. Composerって どういう仕組みで 動いているのかな? みたいな話をします お話すること composer installΛྫʹ
Slide 12
Slide 12 text
© - BASE, Inc. Composerの 「使い⽅」については 触れません! お話しないこと
Slide 13
Slide 13 text
© - BASE, Inc. この発表を機に、 「Composer怖くないよ!」と 感じてくれる⼈を増やしたい 今回のゴール
Slide 14
Slide 14 text
© - BASE, Inc. Composerはあくまで⼀例。 「普段使っているツール」について、 その中⾝に興味を持ってみるのは楽しいよ! というのを感じてもらえたら幸いです。 今回の(裏)ゴール
Slide 15
Slide 15 text
© - BASE, Inc. ΑΖ͓͘͠Ͷ͕͍͠·͢ʂ ͱ͍͏͜ͱͰʂ
Slide 16
Slide 16 text
© - BASE, Inc. おしながき Installコマンドの全体感‧概要の整理 初めてのComposer Installコマンドの中⾝を⾒てみる
Slide 17
Slide 17 text
© - BASE, Inc. おしながき Installコマンドの全体感‧概要の整理 初めてのComposer Installコマンドの中⾝を⾒てみる
Slide 18
Slide 18 text
© - BASE, Inc. ComposerͱԿ͔ʁ
Slide 19
Slide 19 text
© - BASE, Inc. ComposerͱԿ͔ʁ =>ComposerύοέʔδཧγεςϜ ※ެࣜαΠτͰʮComposer is a tool for dependency management in PHP.ʯͱઆ໌͍ͯ͠·͢ɻ Introduction - Composer https://getcomposer.org/doc/00-intro.md
Slide 20
Slide 20 text
パッケージ管理システム? © - BASE, Inc. • ϨϙδτϦͷߪಡ • ύοέʔδͷΠϯετʔϧɾআ • ґଘؔͷղܾ • ઃఆཧ https://ja.wikipedia.org/wiki/ύοέʔδཧγεςϜ
Slide 21
Slide 21 text
パッケージ管理とComposer © - BASE, Inc. • PackagistͱΓͱΓͨ͠Γ <= ϨϙδτϦͷߪಡ • GitHub͔Βguzzlehttp/clientΛऔಘͯ͠ஔͨ͠Γ <= ύοέʔδͷΠϯετʔϧɾআ • ^1.2ͱ~1.2ʹର͠1.3.0Ͱͳ͘1.2.9ΛऔͬͨΓ <= ґଘؔͷղܾ • composer.jsonͷதΛղऍͨ͠Γ <= ઃఆཧ
Slide 22
Slide 22 text
パッケージ管理の「PHP実装」 © - BASE, Inc. ґଘཧͷେม͞Αʂ ύοέʔδཧͩʂ Composerരʂ ՝ ղ๏ ࣮
Slide 23
Slide 23 text
抽象の解釈としての実装 © - BASE, Inc. • ϨϙδτϦͷߪಡ • ύοέʔδͷΠϯετʔϧɾআ • ґଘؔͷղܾ • ઃఆཧ ݱ࣮ɾந ιϑτΣΞɾ࣮ • \Composer\Repository\ • \Composer\Installer\ • \Composer\Package\ • \Composer\DependencyResolver\
Slide 24
Slide 24 text
\Composer\Repository\ © - BASE, Inc. • ϨϙδτϦใͷཧ –repositories[].typeͷ෦ʹରԠ͢ΔΠϝʔδ • ex: –ComposerRepository: packagistϨϙ –VcsRepository: GitHubSVNͳͲͷϨϙ –PathRepository: ϩʔΧϧϑΝΠϧ Repositories - Composer https://getcomposer.org/doc/05-repositories.md
Slide 25
Slide 25 text
\Composer\Installer\ © - BASE, Inc. • Πϯετʔϧͷཧ –ύοέʔδDLͷىಈͱ͔औಘϑΝΠϧͷஔͱ͔ • ex: –LibraryInstaller: packageͷΠϯετʔϧ –ProjectInstaller: root projectͷΠϯετʔϧ –PluginInstaller: plugin packageͷΠϯετʔϧ –PearInstaller: pear packageͷΠϯετʔϧ
Slide 26
Slide 26 text
\Composer\Package\ © - BASE, Inc. • ύοέʔδใͷཧ –composer.jsonΛղऍͨ͠Γ • ex: –RootPackage: root projectͷཧ –Locker: composer.lockͷཧ –Link: packageؒͷ(ґଘ)ؔ
Slide 27
Slide 27 text
\Composer\DependencyResolver\ © - BASE, Inc. • ґଘؔͷཧ –ෳϨϙ͔ΒύοέʔδใΛ౷߹ͨ͠Γ –install͢Δ͔ʁupdate͢Δ͔?ͦͷ··͔?ΛܾΊͨΓ • ex: –Solver: ґଘؔΛཧ͠ύοέʔδͷѻ͍ΛܾΊΔ –Pool: ϨϙδτϦύοέʔδใͷू –Operation: install,update,removeͳͲͷૢ࡞Λࣔ͢
Slide 28
Slide 28 text
© - BASE, Inc. ίί·Ͱୈ1ষʂ
Slide 29
Slide 29 text
初めてのComposer: まとめ © - BASE, Inc. • ύοέʔδཧʹඞཁͳཁૉ –ϨϙδτϦ,Πϯετʔϥ,ґଘղܾ,ઃఆཧ • Composerύοέʔδཧͷʮ࣮ʯ –্هͷ4֓೦ʹ͍ͭͯɺ ͦΕͧΕରԠ͢Δnamespace͕ଘࡏ͢Δ
Slide 30
Slide 30 text
© - BASE, Inc. おしながき Installコマンドの全体感‧概要の整理 初めてのComposer Installコマンドの中⾝を⾒てみる
Slide 31
Slide 31 text
© - BASE, Inc. おしながき Installコマンドの全体感‧概要の整理 初めてのComposer Installコマンドの中⾝を⾒てみる
Slide 32
Slide 32 text
$ composer instal -vvv
Slide 33
Slide 33 text
͜ͷը໘ͷҙຯ͕͔ΔΑ͏ʹ͢Δͧʂ
Slide 34
Slide 34 text
© - BASE, Inc. コードの「⼊り⼝」を捉える installίϚϯυͷىಈ·ͰͷྲྀΕΛΔ ·ͣ
Slide 35
Slide 35 text
ApplicationとしてのComposer © - BASE, Inc. Composerͷຊମͱ͍͑ίΠπͰ͕͢
Slide 36
Slide 36 text
ApplicationとしてのComposer © - BASE, Inc. தΛݟͯΔͱɺ࣮ଶConsole\Application
Slide 37
Slide 37 text
symfony/console © - BASE, Inc. • Composersymfony/ consoleΛར༻ • CLIπʔϧΛ؆୯ʹ࡞Ε Δύοέʔδ • CommandΫϥεͱ͍͏ ୯ҐΛ࡞Γ • Applicationͷதʹొ ͢Δ ※ symfony/consoleʹ͍ͭͯίνϥͷهࣄͳͲΛͲ͏ͦ Container(PSR-11)ͱsymfony/consoleͰ؆୯ͳίϚϯυϥΠϯΞϓϦέʔγϣϯΛ࡞ͬͯΈΑ͏ - istyle Tech Blog https://techblog.istyle.co.jp/archives/97
Slide 38
Slide 38 text
Composer\Command © - BASE, Inc. $composer about $composer config $composer check-platform-
Slide 39
Slide 39 text
installってどこにあるの? © - BASE, Inc. InstallCommandΫϥε
Slide 40
Slide 40 text
© - BASE, Inc. InstallCommand::execute()ͷେ·͔ͳΠϝʔδ
Slide 41
Slide 41 text
© - BASE, Inc. InstallCommand::execute()ͷେ·͔ͳΠϝʔδ factoryͯ͠
Slide 42
Slide 42 text
© - BASE, Inc. InstallCommand::execute()ͷେ·͔ͳΠϝʔδ ઃఆͯ͠
Slide 43
Slide 43 text
© - BASE, Inc. InstallCommand::execute()ͷେ·͔ͳΠϝʔδ ࣮ߦʂ
Slide 44
Slide 44 text
© - BASE, Inc. (༨ஊ) ΫϥεʮComposer\Installerʯͱ ໊લۭؒʮComposer\Installer\*ʯ͕͋Γ·͕͢ ผͰ͢ɻ Class namespace
Slide 45
Slide 45 text
© - BASE, Inc. ֓؍
Slide 46
Slide 46 text
© - BASE, Inc. ΊͬͪΌ؆୯Μ͚ʂʂ
Slide 47
Slide 47 text
© - BASE, Inc. ຊʹͦ͏͔ʂʁ
Slide 48
Slide 48 text
© - BASE, Inc. メインとなる仕事の中⾝を追う InstallCommandͷࣄ ≒ Installerͷࣄ =>͡Ό͋InstallerಡΊྑ͍͔
Slide 49
Slide 49 text
Installerを開くと‧‧ © - BASE, Inc. ίϯετϥΫλ͔Βͯ͠طʹେมͦ͏…
Slide 50
Slide 50 text
© - BASE, Inc. ෳࡶͦ͏ͳίʔυɺ ۩ମతʹಡΈ࢝ΊΔલʹ ࣄ༰ͷΠϝʔδͱ ʮίίͲ͏ͳͬͯΔΜͩʁʯΛཧ͓ͯ͘͠ ਤΛඳ͘
Slide 51
Slide 51 text
installの⼤まかな流れ © - BASE, Inc. 1.PJใ(RootPackage)ͷಡΈࠐΈ 2.ϨϙδτϦใͷಡΈࠐΈ 3.ߋ৽༰ͷࢉग़(ґଘੑͷཧ) 4.ύοέʔδͷऔಘɾஔ 5..lockϑΝΠϧͷߋ৽ 6.autoloadϑΝΠϧͷੜ ࣄલॲཧ ґଘղܾ ࣄޙॲཧ
Slide 52
Slide 52 text
© - BASE, Inc. ͜ͷลΓΛ೦಄ʹஔ͖ͭͭ ࣮ࡍͷྲྀΕΛݟͯΈΔʂʂ
Slide 53
Slide 53 text
Installer::run()の全体像 © - BASE, Inc. functionͷத ͜Μͳײ͡
Slide 54
Slide 54 text
Installer::run()の全体像 © - BASE, Inc. ΠϯετʔϧࡁΈͷ ύοέʔδใΛ औಘͯ͠
Slide 55
Slide 55 text
Installer::run()の全体像 © - BASE, Inc. ґଘੑͷղܾ ύοέʔδͷऔಘ &ஔΛͯ͠
Slide 56
Slide 56 text
Installer::run()の全体像 © - BASE, Inc. .lockϑΝΠϧΛ ߋ৽ͯ͠
Slide 57
Slide 57 text
Installer::run()の全体像 © - BASE, Inc. autoloadϑΝΠϧͷ ग़ྗʂ
Slide 58
Slide 58 text
© - BASE, Inc. ͜Ε͕installͷਖ਼ମʂʂ ʙୈ2ষɾfinʙ
Slide 59
Slide 59 text
Installコマンドの全体感‧概要の整理: まとめ © - BASE, Inc. • جຊతͳίϚϯυ src/Composer/Commandʹ Ϋϥεͱ࣮ͯ͠͞Ε͍ͯΔ • Installॲཧͷ࣮ଶɺ InstallCommand->Installer::run()ʹ͋Δ
Slide 60
Slide 60 text
© - BASE, Inc. おしながき Installコマンドの全体感‧概要の整理 初めてのComposer Installコマンドの中⾝を⾒てみる
Slide 61
Slide 61 text
© - BASE, Inc. おしながき Installコマンドの全体感‧概要の整理 初めてのComposer Installコマンドの中⾝を⾒てみる
Slide 62
Slide 62 text
installの⼤まかな流れ © - BASE, Inc. 1.PJใ(RootPackage)ͷಡΈࠐΈ 2.ϨϙδτϦใͷಡΈࠐΈ 3.ߋ৽༰ͷࢉग़(ґଘੑͷཧ) 4.ύοέʔδͷऔಘɾஔ 5..lockϑΝΠϧͷߋ৽ 6.autoloadϑΝΠϧͷੜ ࣄલॲཧ ґଘղܾ ࣄޙॲཧ ࠶ܝ
Slide 63
Slide 63 text
© - BASE, Inc. PJ情報の読み込み 事前処理①
Slide 64
Slide 64 text
PJの読み込み? © - BASE, Inc. • ϓϩδΣΫτ(PJ)ύοέʔδͷҰܗଶ • ύοέʔδ ͕ࣗґଘ͍ͯ͠ΔϞϊͷใΛ࣋ͭ • ͳͷͰґଘղܾͷ࠷ॳͷҰา ʮPJͷใΛಡΈࠐΉʯ͜ͱ
Slide 65
Slide 65 text
RootPackage © - BASE, Inc. • ComposerͷੈքͰɺ 1ͭͷcomposer.jsonʹରԠͯ͠ 1ͭͷPackageΠϯελϯε͕࡞ΕΔ • ͦͷதͰɺ PJࣗ = rootͱͳΔPackage RootPackageΠϯελϯε͕࡞ΒΕΔ
Slide 66
Slide 66 text
Package © - BASE, Inc. • ͭ·Γ `composer install` ࣮ߦͱ RootPackageͷґଘੑͷղܾͱݴ͑Δ • Packageͷதʹɺࣗͷόʔδϣϯ ใґଘ͢Δύοέʔδͷใetcؚ͕ ·Ε͍ͯΔ
Slide 67
Slide 67 text
RootPackageの取得 © - BASE, Inc. Installer::create() Composer::getPackage()
Slide 68
Slide 68 text
© - BASE, Inc. レポジトリ情報の読み込み 事前処理②
Slide 69
Slide 69 text
[定義]レポジトリってなんだ? © - BASE, Inc. • (ར༻Մೳͳ)ύοέʔδใΛཧ͢Δ –໊લ –όʔδϣϯ –औಘઌ
Slide 70
Slide 70 text
レポジトリ情報の読み込み © - BASE, Inc. • ࢦఆ͞Εͨͷ͕ଘࡏ͢Δ͔ʁ Ͳ͜ʹ͋Δ͔ʁΛΒͳ͍ͱ ύοέʔδͷDL͕Ͱ͖ͳ͍ • ϨϙδτϦ͕ͦΕΛཧ͢Δɻ ʮԿͷύοέʔδ͕༗Δ͔ʯͷใΛ Ѳ͠ɺϢʔβʔʹఏڙ͢Δ
Slide 71
Slide 71 text
Repository(Interface) © - BASE, Inc. • ComposerͷੈքͰɺ ϨϙδτϦRepositoryInterfaceͷ࣮ Ͱදݱ͞ΕΔ • RepositoryʮύοέʔδใͷҰཡʯ ΛಡΈࠐΈɺཧ͢Δ • ʮऔಘʯʮݕࡧʯͷػೳΛఏڙ͢Δ
Slide 72
Slide 72 text
composer installͰɺ ϩʔΧϧٴͼϦϞʔτͷใ͕ؔΘΔ 基本的なレポジトリ3つ © - BASE, Inc. ϩʔΧϧ InstalledFilesystemRepo PlatformRepo (΄΅) vendorσΟϨΫτϦ PHPͷγεςϜใ ϦϞʔτ ComposerRepo Packagist
Slide 73
Slide 73 text
InstalledFilesystemRepo © - BASE, Inc. • ΠϯετʔϧࡁΈύοέʔδͷཧ –༰ `vendor/composer/installed.json` • ʮطʹ͋ΔPackageʯͷղܾ ͜ͷϨϙδτϦΛૢ࡞͢Δ͜ͱͰ࣮ݱ
Slide 74
Slide 74 text
InstalledFilesystemRepoの様⼦ © - BASE, Inc. $composer show —tree
Slide 75
Slide 75 text
• γεςϜཁ݅ͷཧ –phpͷόʔδϣϯ༗ޮͳ֦ுͳͲ • requireʹ'php””ext-XXX”͕هड़͞Εͨ ࣌ʹར༻͞ΕΔ PlatformRepository © - BASE, Inc. composer.json
Slide 76
Slide 76 text
PlatformRepositoryの様⼦ © - BASE, Inc. $composer show —platform
Slide 77
Slide 77 text
ComposerRepository © - BASE, Inc. • Packagist্ͷύοέʔδͷཧ –༰ `https://packagist.org/packages.json` • indexϑΝΠϧ –͜͜ʹه͞Ε͍ͯΔιʔεΛϑΣον͢Δ • ࠷ॳʮύοέʔδ໊ͷҰཡʯͷΈ –ͨͩ͠ɺͦΕࣗମԆॲཧ͞ΕΔ –ղܾ͕ඞཁͳύοέʔδ͕ग़͖ͯͨ࣌ʹ ύοέʔδݸผͷใΛऔΓʹߦ͘
Slide 78
Slide 78 text
ComposerRepositoryのリスト更新 © - BASE, Inc. ϦετΛऔಘ͍ͯ͠Δ༷ࢠ $ composer install
Slide 79
Slide 79 text
© - BASE, Inc. isntallʹ͓͍ͯɺ͜ΕΒͲ͏ѻΘΕΔ͔ʁ
Slide 80
Slide 80 text
Poolの作成とRepoの登録 © - BASE, Inc. • Pool –ϨϙδτϦύοέʔδΛཧ͢Δ –ҎޙɺϨϙδτϦʹର͢Δύοέʔδͷ͍߹ Θͤ(جຊతʹ)PoolΛհͯ͠ߦΘΕΔ • ґଘੑͷղܾʹਐΉલʹɺ ࡞͞Ε͍ͯΔ3ͭͷRepositoryΠϯελ ϯεΛPoolʹొ͢Δ
Slide 81
Slide 81 text
Poolの作成とRepoの登録 © - BASE, Inc. Installer::doInstall
Slide 82
Slide 82 text
Poolの作成とRepoの登録 © - BASE, Inc. Poolͷ࡞
Slide 83
Slide 83 text
Poolの作成とRepoの登録 © - BASE, Inc. ϩʔΧϧRepoͷొ
Slide 84
Slide 84 text
Poolの作成とRepoの登録 © - BASE, Inc. ଞͷRepoͷొ
Slide 85
Slide 85 text
© - BASE, Inc. ίί·Ͱࣄલॲཧ
Slide 86
Slide 86 text
installの事前処理: まとめ © - BASE, Inc. • PJใRootPackageͱͯ͠ΠϯελϯεԽ ͞ΕΔ • installʹ͓͍ͯϩʔΧϧͱϦϞʔτͷ Repository͕ಡΈࠐ·ΕΔ –InstalledFilesystem, Platform, Composer • ಡΈࠐ·ΕͨRepositoryPoolʹՃ͞Εɺ ౷߹తʹղܾ͢Δͷʹར༻͞ΕΔ
Slide 87
Slide 87 text
© - BASE, Inc. 更新内容の算出(依存性の整理) 依存解決①
Slide 88
Slide 88 text
更新内容の算出(依存性の整理)? © - BASE, Inc. • (rootΛؚΉ)ෳͷύοέʔδ͕ɺ ͦΕͧΕʹෳͷύοέʔδʹґଘ͍ͯ͠Δ • ͦΕΒͷใΛ౷߹͢Δඞཁ͕͋Δ –֤ύοέʔδ͕Կʹґଘ͍ͯ͠Δ͔Λ࠶ؼతʹѲ ͢Δ –ચ͍ग़͞Εͨґଘʹ͍ͭͯɺڞ༗Ͱ͖Δͷিಥ ͕ͳ͍͔ΛௐΔ • ࠷ऴతʹʮԿ͕΄͍͔͠ʯΛѲ͢Δ
Slide 89
Slide 89 text
© - BASE, Inc. ߟ͑ͳ͚Ε͍͚ͳ͍ͷɺ Packageͷrequireใ͔Βελʔτͯ͠ ґଘઌͷґଘ͋ΔதͰ શͯͷ݅(ࢦఆver.)Λຬͨ͢ʹ ԿΛऔಘ͢Εྑ͍ͷ͔ʁͷ ʮਖ਼ղʯΛݟ͚ͭΔɺͱ͍͏͜ͱ
Slide 90
Slide 90 text
© - BASE, Inc. ߟ͑ͳ͚Ε͍͚ͳ͍ͷɺ Packageͷrequireใ͔Βελʔτͯ͠ ґଘઌͷґଘ͋ΔதͰ શͯͷ݅(ࢦఆver.)Λຬͨ͢ʹ ԿΛऔಘ͢Εྑ͍ͷ͔ʁͷ ʮਖ਼ղʯΛݟ͚ͭΔɺͱ͍͏͜ͱ ͬ͘͟ΓͱॲཧखॱͷΠϝʔδ͚ͩઆ໌ ෳࡶͩͶʂ
Slide 91
Slide 91 text
PackageとRequest © - BASE, Inc. • Package->requiresͷใ Λ࿈Ͷ͍ͯ͘ʮཉ͍͠ ʯͷΩϡʔΛଋͶΔΫ ϥε͕ཉ͍͠ • ͦΕ͕RequestΫϥε • require1ߦ͝ͱʹjob͕1 ݸͰ͖ΔΠϝʔδ(=job) Package phpunit/phpunit:^8.4 Request jobs
Slide 92
Slide 92 text
RequestとJob © - BASE, Inc. Request jobs job୯७ͳ࿈ྻ • jobͷ࣋ͭใ –cmd • install|update|remove –packageName –constraint • ver.ࢦఆ
Slide 93
Slide 93 text
RequestとSolver © - BASE, Inc. • Solver::solve()ʹ RequestΛ͢ • ͜ͷதͰڝ߹݅ɾڞ௨ ෦͕ߟྀ͞ΕΔ • jobsΛݩʹɺ ʮԿΛ͢Ε͍͍͔ʯΛ Installerʹฦͯ͘͠ΕΔ Solver Request Operation[]
Slide 94
Slide 94 text
Operation © - BASE, Inc. • job͕ղܾ͞Εɺ࠷ऴ తʹߋ৽ૢ࡞͕ඞཁͳ ͷ͚͕ͩฦ͞ΕΔ • ྫ͑”Nothing to install or update”ͳ Βɺ`solve()`ͷฦΓ ۭྻ Solver Operation jobs Operation jobs Operation
Slide 95
Slide 95 text
© - BASE, Inc. パッケージの取得‧配置 依存解決②
Slide 96
Slide 96 text
パッケージの取得‧配置? © - BASE, Inc. • ʮͲͷύοέʔδΛऔಘ(ߋ৽ɺআ)͢Ε ྑ͍͔ʯͱ͍͏ใΛಘͨ • ͦΕͧΕʹ͍ͭͯɺదͳॴ͔Βऔಘ ͢Δ • ඞཁʹԠͯ͡ղౚमਖ਼ͳͲͷॲཧ ͞Έͭͭɺ࠷ऴతʹنଇతͳॴஔ ͢Δ
Slide 97
Slide 97 text
実際にパッケージをDLしてくる © - BASE, Inc. • ύοέʔδͷΠϯετʔϧɺ InstallationManager::execute()ʹΑͬͯ ߦΘΕΔ • औಘݩPackage͕͍ͬͯΔ • DLઌΛܾఆ͢ΔͷInstallerͷࣄ • DLΛ͢ΔͷDownloaderͷࣄ
Slide 98
Slide 98 text
© - BASE, Inc. Operation[]ΛInstallationManagerʹ͢໘ Installer::doInstall()
Slide 99
Slide 99 text
流れ © - BASE, Inc.
Slide 100
Slide 100 text
流れ © - BASE, Inc. ݟ͑ͳ͍ͷͰૡ͍ఠΉ ߏ͕ਂ͍ͥʂ
Slide 101
Slide 101 text
流れ(ざっくり)① © - BASE, Inc. Installer InstallationManager operation͔ΒpackageΛरͬͯ packageͷtypeʹԠͨ͡installerΛ༻ҙ LibraryInstaller locaRepo, operation locaRepo, operation
Slide 102
Slide 102 text
流れ(ざっくり)② © - BASE, Inc. DownloadManager package͔ΒtypeʹԠͨ͡ downloaderΛऔಘ package, downloadPath package, downloadPath LibraryInstaller Downloader packageͷใΛಡΈऔͬͯ downloadPathʹల։
Slide 103
Slide 103 text
流れ(ざっくり)③ © - BASE, Inc. localRepo ΠϯετʔϧࡁΈύοέʔδͷ ใ(ΦϯϝϞϦ)Λߋ৽ package LibraryInstaller Installer installed.jsonͷߋ৽
Slide 104
Slide 104 text
© - BASE, Inc. ίί·Ͱґଘղܾ
Slide 105
Slide 105 text
installの依存解決: まとめ © - BASE, Inc. • RootΛؚΉؔ࿈PackageͷrequireΛશͯ ྻڍ͠(Request/job)ɺSolverʹΑ࣮ͬͯ ߦ͖͢ૢ࡞ΛߜΓࠐΜͰ͍Δ • Package͝ͱʹInstallerɾDownloaderΛ ىಈ͠ɺવΔ͖ιʔείʔυΛDL͢Δ
Slide 106
Slide 106 text
© - BASE, Inc. .lockファイルの更新 事後処理①
Slide 107
Slide 107 text
.lockファイルに載せる情報は? © - BASE, Inc. • .lockϑΝΠϧɺʮίί·ͰʹΠϯε τʔϧͨ͠ͷʯͷࣸ૾ –औಘ͞ΕͨPackage: localRepoͷσʔλ –ϓϥοτϑΥʔϜͷใ: composer.json + PlatformReqRepoͷσʔλ –ͦͷଞɺstabilityϑϥάͳͲ: RootPackageͷ σʔλ
Slide 108
Slide 108 text
必要な情報を合成してdumpする © - BASE, Inc. • Composer\Package\Locker –ʮ.lockϑΝΠϧͷΠϯελϯεʯͳΠϝʔδ • Locker::setLockData()ʹ ඞཁͳใΛͨ͠Βɺ jsonσʔλΛΈཱͯͯϑΝΠϧʹग़ྗ ͜͜·ͰͷRepo/PackageͷΠϝʔδΛ௫Ί͍ͯΕɺ .lockσʔλͷࢉग़γϯϓϧͰ͢Ͷʂ
Slide 109
Slide 109 text
© - BASE, Inc. autoloadファイルの更新 事後処理②
Slide 110
Slide 110 text
autoloadファイルに載せる情報は? © - BASE, Inc. • ༰localRepoʹྻڍ͞Ε͍ͯΔͷ • ઃఆใͱͯ͠ɺ –RootPackageͷ༰ –Composer\Configͷ༰ –etc
Slide 111
Slide 111 text
各ファイルの出⼒ © - BASE, Inc. • autoloadϑΝΠϧෳͷ༰͔ΒΔ –ΫϥεϚοϓ –includeϑΝΠϧ –Composer\Autoload\ClassLoader –etc. • ͜ΕΒΛ`vendor/composer`ҎԼʹग़ྗ –※ઃఆʹΑͬͯҟͳΔ
Slide 112
Slide 112 text
© - BASE, Inc. おしながき Composerのcommandとは何か 実装からみる「Composerとは何か」 `install`を深堀りしてみる
Slide 113
Slide 113 text
© - BASE, Inc. まとめ
Slide 114
Slide 114 text
まとめ © - BASE, Inc. • installҰݟ ෳࡶͦ͏͚ͩͲෳࡶͩͥʂ • ෳࡶͳϞϊɺʮԿΛղܾ͢Δͷ͔ʁʯ Λҙࣝ͢ΔͱྲྀΕ͕௫Έͦ͢͏˕
Slide 115
Slide 115 text
© - BASE, Inc. ※આ໌͢͠͞ॏࢹͰɺ ͍ͩͿ؆ུԽͯ͠͠·ͨ͠ɻ ൃදͷதͰ৮Ε͍ͯͳ͍෦ଟʑ͋ΔͷͰɺ ͦ͜ੋඇίʔυΛಡΜͰΈ͍ͯͩ͘͞ʂ
Slide 116
Slide 116 text
© - BASE, Inc. いつも触っているものが なぜ動くのか?を知れると 楽しいです!!!
Slide 117
Slide 117 text
© - BASE, Inc. 、やっていきましょう!
Slide 118
Slide 118 text
© - BASE, Inc. ࣭͝ͳͲʂ ※งғؾճʹͳͬͨΒ͢Έ·ͤΜʂ
Slide 119
Slide 119 text
© - BASE, Inc. お付き合いいただき ありがとうございました!