Slide 1

Slide 1 text

2022೥ʹ࢝ΊΔ PerlͰWebαʔϏε։ൃ(झຯ) 2022/04/12 Kichijoji.pm #29 id:papix (@__papix__)

Slide 2

Slide 2 text

ࣗݾ঺հ • papix (id:papix / @__papix__) • גࣜձࣾ͸ͯͳ WebΞϓϦέʔγϣϯΤϯδχΞ (2017೥ʙ) • ϒϩάMediaνʔϜ → ϚϯΨνʔϜ • Ұൠࣾஂ๏ਓJapan Perl Associationཧࣄ • ϒϩά: https://papix.hatena(blog.(com|jp)|diary.jp)

Slide 3

Slide 3 text

ࢲࣄͰ͕͢...

Slide 4

Slide 4 text

υϝΠϯΛങ͍·ͨ͠

Slide 5

Slide 5 text

ԿΛ࡞Δ? • υϝΠϯʹैͬͯ(?), ٕज़Ͱཱྀߦͷ৴པੑΛߴΊ͍ͨ • ϫʔέʔγϣϯ(લճ࿩͠·ͨ͠Ͷ!)Ͱ͸, ॓ͷ௨৴؀ڥ͕େࣄ • ňWi-Fi͋Γ·͢ʼnͱॻ͔Ε͍ͯͯ΋, ͦͷ඼࣭·Ͱ͸Θ͔Βͳ͍ • docker pullͰ͖ͳ͔ͬͨΓ, Online MTG͕Ͱ͖ͳ͍඼࣭ͩͱࠔΔ • օͰ॓ͷ৘ใ(௨৴଎౓౳)ΛूΊΔαʔϏε͕͋ΔͱศརͰ͸?

Slide 6

Slide 6 text

ͱ͜ΖͰ, • υϝΠϯͷߪೖΛ͖͔͚ͬʹ։ൃΛ࢝ΊͨͷͰ...

Slide 7

Slide 7 text

͜Ε͕ͦ͜ ňυϝΠϯۦಈʼn ։ൃ΍ʂ

Slide 8

Slide 8 text

ʘϫοϋοϋʗ

Slide 9

Slide 9 text

͸͍

Slide 10

Slide 10 text

Ͳ͏࡞Δ? • ň΍͸ΓGoͰGraphQLΛ࣮૷ͯ͠... Next.jsͰ...ʼn • ͔͠͠, ࢒೦ͳ͕ΒͲͪΒ΋༨Γಘҙͳٕज़ཁૉͰ͸ͳ͍ • ֶश͠ͳ͕Β࣮૷͢Δͷ͸ָ͍͠͠, ֶͼʹ΋ͳΔ • ͔͠͠, ͜ͷ։ൃ଎౓Ͱ͸Ӭԕʹ׬੒͠ͳ͍ͷͰ͸...?

Slide 11

Slide 11 text

Done is better than perfect ׬ᘳΛ໨ࢦ͢ΑΓ, ·ͣऴΘΒͤΖ

Slide 12

Slide 12 text

·ͣ͸ಘҙͳٕज़Ͱ! • ·ͣ͸Ұ௨Γ׬੒ͤͯ͞, ͔ͦ͜Βڵຯͷ͋Δٕज़Λ੝Γࠐ΋͏! • Ͱ͋ΔͳΒ͹, ΍͸ΓҰ൪ಘҙͰ࢖͍׳Εٕͨज़Ͱ࢝ΊΔ΂͖ • ͱ͍͏Θ͚Ͱ...

Slide 13

Slide 13 text

Perl

Slide 14

Slide 14 text

ຊ୊ • ͱ͍͏Θ͚Ͱ, झຯͰ! PerlͰ! WebApp։ൃ, ࢝Ί·ͨ͠ • ·ͩ·ͩ։ൃணखͨ͠͹͔ΓͰ͕͢, ͲͷΑ͏ͳߏ੒ʹ͔ͨ͠࿩ͦ ͏ͱࢥ͍·͢ • ߹ཧੑ͸օແͰ, ׬શʹझຯʹৼΓ੾͍ͬͯΔ఺ྃ͝ঝ͍ͩ͘͞ • ͪͳΈʹίʔυωʔϜ͸ňMoonsideʼnͰ͢

Slide 15

Slide 15 text

cpan fi le requires 'Amon2', '== 6.15'; requires 'Aniki', '== 1.06'; requires 'Cookie::Baker', '== 0.11'; requires 'Crypt::JWT', '== 0.034'; requires 'DBD::mysql', '== 4.050'; requires 'DBIx::Schema::DSL', '== 1.0000'; requires 'Digest::HMAC', '== 1.04'; requires 'Digest::SHA', '== 6.02'; requires 'Furl', '== 3.14'; requires 'Gazelle', '== 0.49'; requires 'HTML::FillInForm::Lite', '== 1.15'; requires 'JSON::XS', '== 4.03'; requires 'Module::Find', '== 0.15'; requires 'Module::Functions', '== 2.1.3'; requires 'Plack::Middleware::ReverseProxy', '== 0.16'; requires 'Plack::Middleware::Session', '== 0.33'; requires 'Plack::Session::Store::Redis', '== 0.05'; requires 'Redis', '== 1.999'; requires 'Router::Boom', '== 1.03'; requires 'Smart::Args', '== 0.14'; requires 'Text::Xslate', '== v3.5.9'; requires 'Time::Moment', '== 0.44'; on development => sub { requires 'Anego', '== 0.02'; }; on test => sub { requires 'Test2', '== 1.302188'; requires 'Test::WWW::Mechanize::PSGI', '== 0.39'; }; جຊతʹ࠷৽൛Λ࢖͏Α͏, όʔδϣϯݻఆ͍ͯ͠Δ

Slide 16

Slide 16 text

Amon2 / Text::Xslate • WAF/Template Engine͸ͦΕͧΕAmon2/Text::XslateΛબఆ • Amon2͸࠷ۙ͝ແࠫଡͰ͕͢, લ͸݁ߏ࢖͍ͬͯͯ, ·ͩ·ͩهԱ͕ ͋ΔͨΊ • Amon2Λ࠾༻͢ΔͳΒ౰વTemplate Engine͸Text::XslateͰ • Syntax͸Text::Xslate::Syntax::TTerseʹ͠·ͨ͠

Slide 17

Slide 17 text

Aniki • ORM͸TengͱAnikiͰ೰Έ·͕ͨ͠, Anikiʹ͠·ͨ͠ • Tengͱࣅͨ࢖͍৺஍Ͱ, SchemaΛDBIx::Schema::DSLͰॻ͚ͨΓ, σϑΥϧτͰrelationshipʹରԠ͍ͯ͠Δͷ΋خ͍͠

Slide 18

Slide 18 text

Anego • ຊ೔ͷझຯ࿮ • ňAniki͕͋ΔͳΒAnego͕͋ͬͯ΋͍͍͡Όͳ͍!ʼn • DBIx::Schema::DSLͰఆٛͯ͠, ͍͍ײ͡ʹmigrationͰ͖Δ • schemaมߋ࣌ͷALTER TABLEΛදࣔͨ͠ΓͰ͖Δ

Slide 19

Slide 19 text

Authentication • Firebase Authentication • Ϣʔβʔ؅ཧपΓ͸ࣗલͰ؅ཧͨ͘͠ͳ͍ • Firebase AuthenticationͰ؅ཧͯ͠, PerlͷApp͔Βར༻͢Δ • ೝূ͸Firebase, ͦΕΛݩʹPerlͷAppͰηογϣϯΛ༻ҙ • ࢀߟจݙ: https://diary.ssig33.com/posts/535 • ͪ͜ΒͰ͸RailsͰͷࣄྫ͕ͩ, ಉ͡Α͏ͳ͜ͱ͸PerlͰ΋ग़དྷΔ

Slide 20

Slide 20 text

CSRF Defender • Amon2ͷ৔߹, جຊ͸HTTP::Session2ʹ͓೚ͤ • ࣗಈͰ๷ޚ༻ͷtokenΛൃߦͯ͘͠ΕΔ • ͷͰ, ޙ͸ͦΕΛݩʹνΣοΫ͢Δ͚ͩ • ԿͳΒ, νΣοΫͷ࣮૷΋Amon2͕༻ҙͯ͘͠Ε͍ͯΔ

Slide 21

Slide 21 text

CSRF Defender • ࠓճ͸ηογϣϯετΞʹRedisΛ࢖͏͜ͱʹͨ͠(झຯ) • ͕, HTTP::Session2::ServerStore͸Cache::Memcached::FastΛ૝ఆ ͍ͯ͠Δ • ݁ہ, Amon2ͷ࣮૷Λࢀߟʹͭͭ͠ಠࣗʹ࣮૷͢Δ͜ͱʹͨ͠ • RedisʹΑΔSession؅ཧ͸Plack::Session::Store::Redisʹ೚ͤΔ • ޙ͸ͦΕΛ࢖ͬͯtokenΛൃߦͨ͠Γ...

Slide 22

Slide 22 text

·ͱΊ

Slide 23

Slide 23 text

·ͱΊ • WebαʔϏεΛ࡞Δͷ͸΍ͬͺΓָ͍͠ • झຯͰ(1ਓͰ)։ൃ͢Δͱ༷ʑͳٕज़બఆΛ޷͖উखग़དྷΔ • ׂͱ׳Ε͍ͯΔݴޠ(?)Ͱ΋, ௐ΂ͯΈΔͱ৽͍͠ൃݟ΍ֶͼ͕͋Δ • ͪ·ͪ·։ൃΛਐΊͯ, ࣍͸ެ։, ӡ༻, վળͷϑϩʔ·Ͱճ͍ͨ͠

Slide 24

Slide 24 text

ʘ WebαʔϏε։ൃ͕޷͖ͳ஥ؒΛืू͍ͯ͠·͢!!! ʗ https://hatenacorp.jp/recruit