Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Handle Slim Safety

ydah
September 09, 2023

Handle Slim Safety

大阪Ruby会議03 LT 「Handle Slim Safety」のスライド
https://regional.rubykaigi.org/osaka03/ #osrb03

ydah

September 09, 2023
Tweet

More Decks by ydah

Other Decks in Technology

Transcript

  1. Yudai Takada
    Osaka RubyKaigi 03


    2023.09.09 (Sat)
    Handle Slim Safety

    View Slide

  2. ɾName: Yudai Takada


    ɾGitHub: @ydah


    ɾX: @ydah_


    ɾMember of RuboCop RSpec team


    ɾSoftware Engineer at ANDPAD, Inc.
    self.inspect

    View Slide

  3. Handle Slim Safety

    View Slide

  4. What is Slim?

    View Slide

  5. 4MJN͸3BJMTҎ߱ʹରԠͨ͠ߴ଎ ܰྔͳςϯϓϨʔτΤϯδϯͰ͢ɻओ
    ཁͳ3VCZͷ࣮૷શͯͰ͔ͬ͠Γςετ͞Ε͍ͯ·͢ɻࢲͨͪ͸ܧଓతΠϯ
    ςάϨʔγϣϯΛ࠾༻͍ͯ͠·͢ɻ HJUIVCBDUJPOT

    4MJNͷ֩ͱͳΔߏจ͸ͭͷߟ͑ʹΑͬͯಋ͔Ε͍ͯ·͢͜ͷಈ࡞Λߦ͏
    ͨΊʹ࠷௿ݶඞཁͳ΋ͷ͸Կ͔ɻଟ͘ͷਓʑͷ4MJN΁ͷߩݙʹΑͬͯ ൴Β
    ͕࢖͏)BNM΍+BEFͷӨڹΛड͚ߏจͷ௥Ճ͕ߦΘΕ͍ͯ·͢ɻ4MJNͷ
    ։ൃνʔϜ͸ඒ͸ݟΔਓͷ໨ͷதʹ͋Δ͜ͱΛ෼͍ͬͯΔͷͰɺ͜͏͍ͬͨ
    ௥ՃʹΦʔϓϯͰ͢ɻ
    4MJN͸ߏจղੳίϯύΠϧʹ5FNQMFΛ࢖͍5JMUʹ૊Έࠐ·Ε·͢ɻ͜Ε
    ʹΑΓ4JOBUSB΍ϓϨʔϯͳ3BDLͱ΋Ұॹʹ࢖͑·͢ɻ

    View Slide

  6. doctype html


    html


    head


    title My Slim Template


    body


    ruby:


    message = "Slim!"


    h1 Welcome to
    #{
    message}


    p This is a simple example.
    ͜͏͍͏΍ͭ

    View Slide

  7. ҆શʹ͔͋ͭ͏

    View Slide

  8. doctype html


    html


    head


    title My Slim Template


    body


    ruby:


    message = "Slim!"


    h1 Welcome to
    #{
    message}


    p This is a simple example.
    ࠓ೔ͷλʔήοτ
    ˡ͜͜

    View Slide

  9. ͜Ε͸Կʁ
    Embedded engines:


    Tiltͷ͓͔͛ͰɺSlim ͸ଞͷςϯ
    ϓϨʔτΤϯδϯͷຒΊࠐΈʹݟࣄʹ
    ରԠ͍ͯ͠·͢ɻ


    Ruby,JavaScript,css,sass…etc

    View Slide

  10. ҆શʹ͔͋ͭ͏

    View Slide

  11. ຒΊࠐΈ಺ͷίϝϯτ
    doctype html


    html


    head


    title My Slim Template


    body


    h1 Welcome to Slim!


    javascript:


    //
    comment


    alert("Hello, World!");

    View Slide

  12. ίϯύΠϧޙ









    My Slim Template

    title>


    < /
    head>


    :



    html>


    <br/><br/><br/>/ /<br/>mecha kimitsu joho<br/><br/><br/>alert("Hello, World!");<br/><br/><br/></<br/>script><br/>ݟΒΕͨ͘ͳ͍ίϝϯτ΋<br/>ݟΒΕͯ͠·͏<br/>

    View Slide

  13. ࢼߦࡨޡ
    %BOHFS΍4FNHSFQͰܯࠂ͢Δʁ
    ⭕ϧʔϧΛ௥Ճ͢Δ͚ͩͰྑ͍
    ❌ίϝϯτॻ͚ͩ͘Ͱܯࠂ͸ͭΒͦ͏
    ❌ܯࠂΛݟམͱ͞ΕΔͱҙຯ͕ͳ͍

    View Slide

  14. ͭͬͨ͘
    ZEBITMJNFNCFEEFENJOJGZ

    View Slide

  15. slim-embedded-minify
    module Slim
    class Embedded < Filter
    class TagEngine < Engine
    prepend Minify::Tag
    end
    class JavaScriptEngine < TagEngine
    prepend Minify::Javascript
    end
    ennd

    View Slide

  16. slim-embedded-minify
    module Slim
    class Embedded < Filter
    module Minify
    module Javascript
    include Tag
    def on_slim_embedded(engine, body, attrs)
    mini
    fi
    ed_body = minify(body)
    super(engine, mini
    fi
    ed_body, attrs)
    end
    ennnnd

    View Slide

  17. slim-embedded-minify
    ⭕ίϝϯτ͕ࣗ༝ʹॻ͚Δ
    ⭕௥Ճ࡟আ΋͔ΜͨΜ
    ⭕ίϯύΠϧ݁ՌΛൺֱͯ͠ίϝϯτ
    ͷΈ͕ফ͍͑ͯΔ͔ʹΑͬͯ֬ೝՄ

    View Slide

  18. Its safe now

    View Slide

  19. ੩తղੳʹ͍ͭͯ

    View Slide

  20. 3VCP$PQͰ͸ղੳෆՄ
    4MJN͸3VCZͰ͸ͳ͍ͷͰɺ
    4ZOUBY&SSPSʹͳΔ ͦΕ͸ͦ͏

    spec/f
    i
    xtures/dummy.slim:1
    :
    5
    :
    F
    :
    Lint/
    Syntax: unexpected token tCOLON


    (Using Ruby 2.7 parser; conf
    i
    gure using
    TargetRubyVersion parameter, under
    AllCops)


    ruby:


    ^

    View Slide

  21. ຒΊࠐΈҎ֎ͷTMJ̼
    ੩తղੳπʔϧ͋Γ·͢


    •r7kamura/slimcop


    •r7kamura/rubocop
    -
    slim


    ͕ɺຒΊࠐΜͰ͍ΔRubyίʔυͷ੩త
    ղੳ͸ग़དྷͳ͍

    View Slide

  22. ຒΊࠐΈͷTMJ̼
    ੩తղੳπʔϧ͋Γ·͢


    •sds/slim
    -
    lint


    ͕ɺautocorrect͸ग़དྷͳ͍

    View Slide

  23. ͍ͭͬͨͯ͘Δ
    ZEBITMJNFNCFEDPQ

    View Slide

  24. slimembedcop
    html


    ruby:


    if File.exists?("foo.txt")


    message = "Yay!"


    else


    message = "Nooo!"


    end


    h1
    #{
    message}
    ੾Γग़ͯ͠3VCP$PQʹ౉ͯ͠
    ղੳͯ͠΋Β͏

    View Slide

  25. slimembedcop
    ❯ slimembedcop dummy.slim


    Inspecting 1 f
    i
    le


    W


    Offenses:


    dummy.slim:3
    :
    8
    :
    W
    :
    [Correctable] Lint/
    DeprecatedClassMethods: File.exists? is
    deprecated in favor of File.exist
    ?.

    if File.exists?("foo.txt")


    ^^^^^^^^^^^^

    View Slide

  26. ⭕3VCP$PQͷطଘͷDPQ͕࢖͑Δ
    ⭕ࣗಈमਖ਼ʹରԠ͍ͯ͠Δ
    ⭕DPQ͕࡞ΕΔʹTMJNFNCFEDPQͷ
    DPQ΋࡞ΕΔ
    slimembedcop

    View Slide

  27. We got static
    analysis

    View Slide

  28. ීஈԿؾͳ͘࢖͍ͬͯΔ΋ͷʹ΋վળ
    ͷ༨஍͸ҙ֎ͱ຾͍ͬͯΔͷͰɺͲΜ
    ͲΜվળͯ͠ɺͲΜͲΜ޾ͤʹͳͬͯ
    ͍͖·͠ΐ͏ʂʂ
    ·ͱΊ

    View Slide

  29. end

    View Slide