๐Ÿ‘ฉโ€๐Ÿ’ป VS ์ฝ”๋“œ์—์„œ Rails ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์„ธ ๊ฐ€์ง€ ํ™•์žฅ

10809 ๋‹จ์–ด vscoderailsrubyproductivity
๋ณธ๋ฌธ์€
์•ˆ๋…•ํ•˜์„ธ์š”.๐Ÿ‘‹ ์–ด์„œ ์˜ค์„ธ์š”.์—ฌ๊ธฐ์„œ Ruby ๋ฐ Ruby On Rails์˜ Visual Studio ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.VS ์ฝ”๋“œ๋Š” ๋‚ด๊ฐ€ ์„ ํƒํ•œ ํŽธ์ง‘๊ธฐ๋กœ ๊ฐœ๋ฐœ ์ „ ์„ธ๊ณ„์—์„œ ์ ์  ์œ ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.2019๋…„ ์ž์‹ Atom extension called Nuclide์„ ๋งŒ๋“  ํŽ˜์ด์Šค๋ถ๋งˆ์ € ๊ท€์‹ ์ด ๊ณกํ•  ๋…ธ๋ฆ‡์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์œ ํ–‰ํ•˜๋Š” ๋ฃจ๋น„์™€ ๋ฃจ๋น„ ์˜จ ๋ ˆ์ผ์Šค ํŽธ์ง‘๊ธฐ๋„ ์žˆ๋Š”๋ฐ switched to VSCode์—์„œ ๋ณด๋“ฏ์ด Ruby 2019 State of the developer ecosystem.๋งŒ์•ฝ ๋‹น์‹ ์ด ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด, ํ‰๋ก ์—์„œ ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ์„ธ์š”.
RubyMine
VS ์ฝ”๋“œ์˜ ํ™•์žฅ์€ ๋ฃจ๋น„์™€ ๋ผ์ผ์Šค์™€ ๊ด€๋ จ๋œ ๊ฒƒ์ด ๋งŽ๋‹ค.๋‚ด๊ฐ€ ๋‹ค ํ•ด ๋ดค๋Š”๋ฐ, ์ด ๊ฒŒ์‹œ๋ฌผ์ด ๋ฐ”๋กœ ์—ฌ๊ธฐ์— ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋„ˆ๋Š” 10๊ฐœ์˜ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์—์„œ ์ ๋‹นํ•œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐพ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
์ด์ œ VS ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ์‹œ๋‹ค!
๋””๋ ‰ํ† ๋ฆฌ:

  • Ruby and Ruby On Rails VS Code extensions
  • endwise
  • Ruby Solargraph

  • Gem Lens
  • Configuration strategy for teams
  • Suggesting extensions
  • Workspace settings
  • Missing features
  • ๊ธฐํƒ€ ์œ ์šฉํ•œ VS ์ฝ”๋“œ ํ™•์žฅ Ruby ๋ฐ Ruby On Rails ๋ฐ ์ฝ”๋“œ ํ™•์žฅ


    Ruby์™€ Rails ๊ฐœ๋ฐœ์€ ์ œ๊ฐ€ ์œ ์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ํ™•์žฅ์ž…๋‹ˆ๋‹ค.ํ˜„์žฌ, ๊ทธ๊ฒƒ๋“ค์€ ๋‚˜์—๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ์„ค์ •์„ ์ œ๊ณตํ–ˆ๋‹ค.


    ์šฐ๋ฆฌ๋Š” ํ•„์š”ํ•œ ๊ณณ์— ํ˜„๋ช…ํ•˜๊ฒŒ end ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํ™•์žฅ์„ ์‹œ์ž‘ํ–ˆ๋‹ค.๋‚˜๋Š” ์ด๊ฒƒ์ด VS ์ฝ”๋“œ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์‚ฌ์‹ค์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.๊ทธ ๋ชจ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    endwise


    ์ด์ œ ๋ฌด๊ฑฐ์šด ๊ฒƒ ์ข€ ๋ด…์‹œ๋‹ค.๋งŒ์•ฝ VS ์ฝ”๋“œ๊ฐ€ ๋ฌด์„œ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์™„์„ฑ๋˜๋Š” ๊ฒƒ์— ์ต์ˆ™ํ•ด์กŒ๋‹ค๋ฉด, Solargraph์™€ VS ์ฝ”๋“œ ํ™•์žฅ์„ ์ข‹์•„ํ•  ๊ฒƒ์ด๋‹ค.
    Solargraph๋Š” MicrosoftRuby Solargraph๋ฅผ ํ†ตํ•ด ์Šค๋งˆํŠธ ๊ฐ์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฃจ๋น„์ ฌ์ด๋‹ค.
    solargraph.org
    Solarograph๋Š” ๋” ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด ํ•˜๋Š” ๋ณดํ‘ธ๋ผ๊ธฐ์™€ ์ž๋™ ํฌ๋งท์„ ํŠนํžˆ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ :
    RuboCop
    Solargraph ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŒŒ์ผ์— ์˜์กด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    gem 'solargraph', group: :development
    
    RuboCop ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    gem 'rubocop', group: :development
    
    ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋‹น์‹ ์€ ๊ณ„์† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Solargraph๋ฅผ ๋ณด๋‹ค ์ง€๋Šฅ์ ์ธ ํŠธ๋ž™ ์ฝ”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์„ฑ


    ์ด ํ™•์žฅ์€ Gemfile ์—์„œgem์˜ ์„ค๋ช…๊ณผ ์ตœ์‹  ๋ฒ„์ „์„ ๋น ๋ฅด๊ฒŒ ๋ณด๋ ค๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.๋ณด๊ธฐ:
    Gem Lens

    ํŒ€ ๊ตฌ์„ฑ ์ •์ฑ…


    ๊ฐœ๋ฐœ์ž๋กœ์„œ, ๋‚˜์˜ ๋ชฉํ‘œ๋Š” ๋‚˜์˜ ํŽธ์ง‘๊ธฐ๋ฅผ ๊ฐ€์žฅ ์ž˜ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์ด ์„ค์ •์ด ํ”„๋กœ์ ํŠธ์— ์ €์žฅ๋˜์–ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.๋•Œ๋กœ๋Š” ์ƒ์ฒ˜๋ฅผ ์ž…ํž ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ฐ™์€ ํ•ญ๋ชฉ์˜ ๋ชจ๋“  ์ฐธ์—ฌ์ž์—๊ฒŒ๋Š” ๊ฐ™์€ ํŽธ์ง‘๊ธฐ์™€ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.๋”ฐ๋ผ์„œ 10๊ฐœ์˜ ๋‹ค๋ฅธ ํŽธ์ง‘๊ธฐ๋ฅผ ์„ค์ •ํ•ด์„œ ์„ ๋ณ„ํ•˜๊ณ  ํฌ๋งทํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์ถ•์— ์ „๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    VS ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๊ฒฐํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ถŒ์žฅ ์—ฐ๊ธฐ
  • ์ผ๋ถ€ ์„ค์ • ์ž๋™ ์ ์šฉ
  • ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๋ฅผ ํ†ตํ•ด ์™„์„ฑ๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.
    ํ”„๋กœ์ ํŠธ์— .vscode ํด๋”๋งŒ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    VS Code workspace settings

    ์ œ์•ˆ ์—ฐ๊ธฐ


    ์•ž์„œ ์‚ดํŽด๋ณธ ์„ธ ๊ฐ€์ง€ ํ™•์žฅ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
    .vscode/extensions.json
    {
      "recommendations": [
        "kaiwood.endwise",
        "ninoseki.vscode-gem-lens",
        "castwide.solargraph"
      ]
    }
    
    VS ์ฝ”๋“œ์—์„œ ํ•ญ๋ชฉ์„ ์—ฌ๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ž‘์—…๊ณต๊ฐ„ ์„ค์ •


    VS ์ฝ”๋“œ์—์„œ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์ผ๋ถ€ ์„ค์ •์„ ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ์„ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ์†์‰ฝ๊ฒŒ ์„ค์น˜/์ƒˆ ํŒ€ ๊ตฌ์„ฑ์›
  • ๋ชจ๋“  ์—ฐ์† ํ†ตํ•ฉ ์‹œ์Šคํ…œ์—์„œ ๊ธฐ๋ณธ์ ์ธ linting/formatting์„ ์‰ฝ๊ฒŒ ์‹ค์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.๋‹ค์Œ์€ ๋‚ด๊ฐ€ ๋ณธ ์„ธ ๊ฐ€์ง€ ํ™•์žฅ๊ณผ ๊ด€๋ จ๋œ ์„ค์ •์ด๋‹ค.
  • .vscode/์„ค์ •json
    {
      "files.associations": {
        "*.html.erb": "html"
      },
      "[html]": {
        "editor.defaultFormatter": "vscode.html-language-features"
      },
      "editor.formatOnSave": true,
      "solargraph.autoformat": true,
      "solargraph.diagnostics": true,
      "solargraph.formatting": true
    }
    
    Solargraph๋ฅผ ์„ค์ •ํ•˜๋ฉด linting๊ณผ ์ž๋™ ํฌ๋งท, ๊ทธ๋ฆฌ๊ณ  .html.erb ์ž๋™ ํฌ๋งท์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

    ๋ถ€์กฑํ•œ ๊ธฐ๋Šฅ


    ํ˜„์žฌ .*.erb ํŒŒ์ผ์˜ linting, ๋ฌธ๋ฒ•์  ํ•˜์ด๋ผ์ดํŠธ ๋””์Šคํ”Œ๋ ˆ์ด, ์ž๋™ ํฌ๋งท ์ƒํƒœ๊ฐ€ ์กฐ๊ธˆ๋„ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด ํŒŒ์ผ๋“ค์„ ์ถœ๋ ฅ ํ˜•์‹ (HTML, CSS) ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์„ ํƒํ–ˆ๋‹ค.์ตœ์ข…์ ์œผ๋กœ ์™€ ๊ทธPrettier๊ฐ€ ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ์œผ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€Ruby plugin.

    ํฌ๋งท์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.htmlใ€‚์ง์› ์žฌ๊ต์œก๊ตญ ๊ธฐํƒ€ ์œ ์šฉํ•œ VS ์ฝ”๋“œ ํ™•์žฅ


    ๋‹ค์Œ์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์„ค์น˜ํ•œ ํ™•์žฅ์ž์ž…๋‹ˆ๋‹ค.
  • DotENV
  • EditorConfig for VS Code

  • File Utils ๋ณธ๋ฌธ ์บก์ฒ˜์— ์‚ฌ์šฉ๋œ ์ฃผ์ œ.๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ๋งค์ผ ์“ฐ๋Š” ๊ฑฐ
  • GitHub Plus Theme
  • gitignore
  • GitLens
  • Heroku
  • Local History
  • Settings Sync
  • ๐Ÿ”š ์ด๋ ‡๊ฒŒ!
    ๋„ค๊ฐ€ ์—†์–ด์„œ๋Š” ์•ˆ ๋  ํ™•์žฅ์ด ์žˆ๋Š”๋ฐ, ํŠนํžˆ Rails?๋‚˜์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ฒจ๋ผ, ๋‚˜๋Š” ์ด ๋Œ“๊ธ€์„ ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์ด๋‹ค!
    ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ์ข‹์•„ํ•˜์‹ ๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ณต์œ ํ•˜์„ธ์š”.

    ๋นˆ์„ผํŠธ ์›Œ์˜ˆ
    @vvoyer

    ๐Ÿ‘‹ ์˜ค๋Š˜ ์•„์นจ ์ถœํŒ:๐Ÿ‘ฉโ€๐Ÿ’ป VS ์ฝ”๋“œTravis CI Status์—์„œ Rails ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์„ธ ๊ฐ€์ง€ ํ™•์žฅ
    2019๋…„ 12์›” 2์ผ ์˜คํ›„ 13:29
    dev.to/vvo/the-three-โ€ฆ

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ