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-) • ޷͖ͳFW͸CakePHP • ΞΠίϯ͸
 ඒຯ͍͠ࡪ਌ࢠကͷࣸਅͰ͢

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: GitHub΍SVNͳͲͷϨϙ –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. • Composer͸symfony/ 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 • ಡΈࠐ·ΕͨRepository͸Poolʹ௥Ճ͞Εɺ ౷߹తʹղܾ͢Δͷʹར༻͞ΕΔ

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. お付き合いいただき
 ありがとうございました!