00:10 – Run Anything을 이용한 모델 생성
01:30 – 코드 자동 완성.
02:35 – 정의로 이동.
04:06 – 빠른 문서.
04:36 – 접미사 코드 완성.
05:22 – RuboCop 통합 및 인텐션 액션(빠른 수정).
08:20 – 최근/최근 편집한 파일 표시.
09:04 – RegExp 검사기.
09:58 – 파일 구조 팝업.
10:39 – 코드 서식 지정 도구 및 코드 스타일 옵션.
12:10 – 관련 기호로 이동(관련 Rails 엔티티).
12:40 – 에디터에서 메서드 사이 이동.
12:51 – 리팩터링: 메서드 추출.
14:15 – 리팩터링: 이름 변경.
15:50 – 다중 커서.
이제 새 모델을 만들고 여기에 일부 콘텐츠를 추가하여 RubyMine의 다양한 코드 편집 기능을 보여드리겠습니다. 시작하려면 Ctrl을 두 번 눌러 Run Anything 작업을 엽니다. 이 작업은 모든 구성, 스크립트, 명령, Rake 작업, Rails 생성기 및 콘솔 명령어를 실행하는 데 사용할 수 있습니다.
“rails g model”과 같은 내용을 입력하여 시작하거나, “Model”을 삽입할 수 있습니다. 그러면 RubyMine이 사용자가 모델 생성기를 찾고 있다는 것을 알아차리고 코드 완성 목록에 이를 제안합니다.
Enter를 누르고 모델 생성기의 UI 래퍼를 확인하겠습니다. 컨트롤러, 마이그레이션 및 기타 생성기에 대해 보게 될 내용과 동일합니다.
여기에서 Post가 될 모델 이름과 해당 필드: content: text를 제공할 수 있습니다(이제 보시다시피 RubyMine은 필드 유형에 대한 코드 데이터 완성을 제공함). 다른 필드는 “picture: string”이 됩니다. 추가 옵션을 제공할 수도 있습니다. 건너뛰고 OK(확인)를 누르겠습니다.
IDE는 생성기를 실행하고 실행 도구 창을 열어 내 명령의 결과를 보여주며 생성된 모든 파일을 탐색할 수 있도록 해줍니다. 또한 기본적으로 에디터에서 마이그레이션 파일과 POST 모델이 열립니다.
실행 도구 창을 닫겠습니다. 이제 새로 만든 모델에 콘텐츠를 추가할 준비가 되었습니다. 이제 몇 가지 연결을 추가하겠습니다. 먼저 “belongs_to” 연결을 통해 준비한 POST가 사용자에게 속하도록 하겠습니다.
RubyMine은 시작할 때마다 애플리케이션의 색인을 생성하므로 나중에 애플리케이션 또는 Ruby, Rails 및 기타 gem에서 선언된 클래스, 메서드 및 기타 엔티티에 대한 코드 자동 완성과 같은 여러 코드 분석 기능을 제공합니다.
따라서 이것이 “belongs_to”에 대해 특정하게 자동 완성을 실행하는 방법입니다. 자동 완성을 실행해 보겠습니다. RubyMine은 또한 여기에서 우리가 모델을 찾고 있다는 것을 이해할 수 있을만큼 똑똑합니다. 실제로 우리는 사용자 모델을 찾고 있으므로 자동 완성도 실행해 보겠습니다.
샘플 앱은 gem carrierwave를 사용하여 사진을 업로드합니다. 그리고 사진을 모델과 연결하려면 “mount_uploader”라는 이 gem의 사용자 지정 메서드를 사용해야 합니다. 보시다시피, 이 gem은 우리 애플리케이션에 설치되었기 때문에 RubyMine은 이 메서드도 자동 완성할 것을 제안합니다.
RubyMine의 코드 분석 기능에 코드 자동 완성만 있는 것은 아닙니다. RubyMine의 가장 중요한 기능 중 하나는 애플리케이션 내부 또는 외부에서 선언된 엔티티의 정의로 이동할 수 있는 기능입니다. 예를 들어, 사용자 모델의 정의로 빠르게 이동할 수 있습니다. 이를 위해, 모델 이름 위로 마우스를 가져간 다음 운영 체제에 따라 Ctrl 또는 Command를 누른 다음 클릭합니다.
이제 모델로 이동했으며 여기서도 연결을 추가할 수 있습니다. 마찬가지로, “belongs_to” 연결의 정의로 이동할 수 있습니다. 이제 활성 레코드 gem, 파일 associations.rb로 이동했습니다. 프로젝트 도구 창에서 보여 드리겠습니다.
따라서 우리는 애플리케이션과 외부 라이브러리, gem 활성 레코드, 파일 associations.rb 외부에 있습니다. 마찬가지로, gem carrierwave인 이 메서드 또는 파일 activerecord.rb 등으로 이동할 수 있습니다.
이제 사진의 크기를 확인하고 사진이 너무 크면 오류를 제공하는 메서드를 추가해 보겠습니다. 이것을 picture_size: “picture.size > 5.megabytes”라고 부르겠습니다. 이제 여기에 비슷해 보이는 두 개의 메서드가 있는 것 같습니다. 어떤 것을 사용해야 할지 잘 모르겠으면 어떻게 할까요? 이러한 각 메서드를 검색하거나 문서를 확인하는 대신, F1을 눌러 IDE에서 바로 이러한 각 메서드에 대한 빠른 문서를 볼 수 있습니다.
따라서 megabytes 메서드가 제공된 메가바이트에 해당하는 바이트 수를 반환하며 이것이 제가 찾고 있는 메서드입니다. 두 번째는 첫 번째의 별칭일 뿐이므로 이 중 아무 것이나 사용할 수 있습니다.
제가 이것을 if 구문으로 만드는 것도 잊은 것 같군요. 하지만 코드로 돌아가는 대신 점(.)을 삽입하고 if를 입력할 겁니다. 그러면 다음과 같은 if 구문으로 이 줄을 래핑할 수 있습니다. “if picture.size> 5.megabytes”. 이 기능을 “수정 후 코드 완성”이라고 합니다. 코드로 돌아가지 않고도 구문을 보완, 변경 또는 반전시킬 수 있죠.
JavaScript 및 Ruby 모두의 경우에 설정에서 모든 수정 후 코드 템플릿 목록을 볼 수 있습니다. 또한 그 형태가 어떤지도 확인할 수 있고 원하는 항목을 활성화 및 비활성화할 수도 있습니다.
좋습니다. 메서드를 마무리해 보겠습니다. 이제 파일에 코드 스타일 위반이 있는지 확인하기 위해 RuboCop을 다시 활성화하겠습니다. 분명히 몇 가지 이슈가 있습니다. 모든 줄에서 오류 설명을 보려면 에디터의 오른쪽 부분으로 이동하여 모든 강조 표시로 이동할 수 있습니다. 강조 표시된 텍스트 위로 마우스를 가져가서 오류 설명을 볼 수도 있습니다.
마지막으로, 마우스를 사용하지 않으려면 F2 키를 눌러 파일의 다음 오류로 이동한 다음 Command+F1 또는 Ctrl+F1을 눌러 오류 설명을 표시합니다.
이 특정한 경우에 문제는 작은 따옴표로 묶은 문자열 대신 큰 따옴표로 묶은 문자열을 사용하고 있다는 것입니다. RuboCop으로 이 문제를 해결하려면 Alt+Enter를 누르고 파일의 모든 RuboCop 위반 사항을 수정하거나 위반 유형 또는 단속 부서별로 수정할 수 있습니다. 이 파일에 있는 모든 RuboCop 이슈를 수정해 보겠습니다.
좋아요. 이 문제는 사라지지만 여전히 몇 가지 이슈가 남아 있습니다. 우선, 여기에는 줄 하나가 아니라 여러 줄로 된 구문이 있습니다. 불행히도, RuboCop은 이에 대한 빠른 수정을 제공하지 않지만 RubyMine은 제공합니다.
여기에 액세스하기 위해 Alt +Enter를 다시 누르겠습니다. 보시다시피 구문을 제어자로 변환할 수 있습니다. 즉, if 구문을 한 줄 구문으로 만들 수 있습니다. Enter를 누르면 보시다시피 이 오류가 사라집니다.
그래도 RuboCop에 따르면 몇 가지 성가신 이슈가 있습니다. 우선, 이 줄이 너무 깁니다. 또 다른 문제는 사용 중인 클래스에 대한 문서 주석이 없다는 것입니다. 이러한 이슈를 없애기 위해 추가 RuboCop 구성 파일을 만들어 보겠습니다.
이를 위해 프로젝트의 루트로 이동하여 RuboCop 구성 파일인 .rubocop.yml을 만들겠습니다. RubyMine이 새 파일을 Git에 추가할 것인지 묻습니다. 지금은 “Yes(예)”를 누르지만 VCS 기능에 대해 조금 나중에 살펴 보겠습니다.
성가신 이슈를 없애기 위해 추가 규칙을 더해 보겠습니다. 모델로 돌아갑니다. 변경 사항을 더 빨리 적용하기 위해 파일을 수동으로 저장하겠습니다. 보시다시피 RubyMine은 RuboCop 구성 파일을 준수하므로 이러한 오류가 사라집니다.
RubyMine이 우리를 위해 무엇을 해줄 수 있는지 알아 보겠습니다. 아마 알아차렸겠지만 현재 에디터에 열려 있는 파일을 제외하고 모든 파일을 닫았습니다. 이를 위해, 탭 위로 마우스를 가져가고 Alt를 누른 채로 Close(닫기) 버튼을 클릭합니다. 이제 모든 파일을 제거했지만 현재 에디터에 열려있는 파일은 그대로 있습니다. 이 파일도 더 이상 필요하지 않기 때문에 지금은 이 파일도 닫겠습니다. 그리고 Project(프로젝트) 도구 창도 닫겠습니다.
이제 작업 중인 사용자 모델로 이동하겠습니다. 이를 위해, Recent Files(최근 파일)이라고 하는 또 다른 편리한 팝업을 사용할 수 있습니다. 운영 체제에 따라 Command+E 또는 Ctrl+E를 사용하면 됩니다. 이를 통해 최근 연 파일로 이동할 수 있습니다. 예상하겠지만 여기에서도 검색이 작동하므로 이와 같은 작업을 수행할 수 있지만, 결과적으로 Recently Edited Files(최근 편집된 파일)이라는 유사한 팝업이 표시됩니다. 기억하시겠지만 이전에 연결을 추가할 때 사용자 모델을 편집했습니다. 그래서 여기에서 모델을 열 수 있습니다.
우선 몇 가지 사항을 다시 상기해 보겠습니다. 여기에는 몇 가지 RuboCop 이슈가 있고 제거할 수 있습니다. 그리고 여기에 RubyMine에서 인텐션 액션을 사용하기에 좋은 또 다른 사례가 있습니다. 여기에는 사용자가 유효한 이메일 주소를 제공하는지 확인하는 정규 표현식이 있습니다. 따라서 이 정규 표현식을 확인하기 위해 Alt+Enter를 다시 누르고 Check RegExp(RegExp 확인)을 선택한 다음, 몇 가지 샘플을 제공할 수 있습니다. 이것은 일치하지 않습니다. 이것도 일치하지 않습니다. name@email.com이라고 하면 어떨까요? 좋습니다. 이것은 일치합니다. 좋아요. 바로 이렇게 되는 것입니다.
여기서 클래스 이름을 self로 바꿀 수도 있습니다. 그리고 여기서 여러 줄로 된 구문에 사용해야 하는 삼항 연산자를 제거하겠습니다. 그래서 if/end 구문으로 만들겠습니다.
여기서 이 모델은 다소 두터운 느낌이 있어서 메서드 사이를 더 빠르게 이동하기 위해 파일 구조 팝업을 사용할 수 있습니다. 이 팝업을 사용하면 파일에서 여러 메서드 사이를 이동할 수 있고 검색 작업도 원활하게 수행됩니다. 그래서 이와 같은 비공개 메서드 몇 가지를 시도해볼 수 있습니다.
보시다시피 비공개 메서드에 대한 추가 들여쓰기가 있으며, 기본적으로 RuboCop은 이를 코드 스타일 위반으로 간주하므로 이 위반을 제거하기 위해 구성 파일을 편집했습니다. 이렇게 한 이유는 많은 개발자들이 실제로 비공개 및 보호된 메서드에 대해 추가 들여쓰기를 추가하는 것을 선호하기 때문입니다.
코드 스타일과 관련하여 RubyMine은 Ruby 스타일 가이드 및 설정에서 조정할 수 있는 몇 가지 옵션에 따라 코드 서식을 다시 지정하는 내장 코드 서식 지정 도구를 제공합니다.
코드의 서식을 다시 지정하려면 Code(코드)| Reformat Code(코드 서식 다시 지정)으로 이동하거나 단축키를 사용할 수 있습니다. 보시다시피 RubyMine은 비공개 메서드의 서식을 다시 지정하고 나머지 메서드와 일치하도록 만들었습니다.
그런데 이 특정 메서드만 선택하고 Reformat(서식 다시 지정) 작업을 다시 누르면 RubyMine은 이 특정 선택의 서식만 다시 지정합니다.
RubyMine이 비공개 메서드를 들여쓰는 이유는 설정에 따라 이것이 지금 해야 할 일이기 때문입니다. 그래서 설정으로 이동하고 Code Style(코드 스타일)을 찾습니다. Ruby 언어에 대한 항목이 필요합니다. 하지만 그 결과 다양한 언어 및 기술에 대한 다양한 코드 스타일 옵션이 제공됩니다. 그러나 여기 Ruby 섹션에서 보시다시피 비공개 및 보호된 메서드에 대한 또 다른 들여쓰기를 추가할지 여부를 선택할 수 있으며 Preview(미리보기) 창에도 변경되는 내용이 표시됩니다.
다른 코드 스타일 옵션도 있습니다. 예를 들어 해시 로켓 주위에 공백, 블록의 중괄호, 해시 등을 추가할 수 있습니다.
Apply(적용) 및 OK(확인)를 차례로 누르겠습니다. 코드 서식을 다시 지정해 보겠습니다. 보시다시피 이제 RubyMine이 비공개 메서드에 대한 들여쓰기를 추가합니다. 이것이 RubyMine에서 코드 서식 지정 도구가 작동하는 방식입니다.
이제 다른 사용자 관련 내용을 살펴 보겠습니다. 이를 위해 Navigate(탐색) | Related Symbol(관련 기호)...로 이동합니다. 그러면 모든 사용자 관련 항목이 표시된 팝업이 열립니다. 사용자 컨트롤러, 헬퍼, 다양한 뷰 및 테스트 등이 있습니다. 컨트롤러로 이동하겠습니다.
여기에는 평소에 볼 수 있는 것과 같이 많은 RuboCop 이슈들이 있습니다. 이러한 이슈들을 한 번에 수정해 보겠습니다. 여기에 다양한 Rails 액션들이 있습니다. 그리고 서로 다른 액션과 메서드 사이를 이동하려면 운영 체제에 따라 Ctrl+⇧ 및 Ctrl+⇩ 또는 Alt+ ⇧ 및 Alt+⇩을 사용합니다.
그래서 종종 우리는 서로 다른 작업에 대해 같은 일을 하는 것처럼 보입니다. ID로 데이터베이스에서 사용자를 찾고 이를 인스턴스 변수 user에 할당합니다. 그 대신 이 코드 조각을 자체 메서드로 리팩터링하지 않는 이유는 무엇일까요?
이를 위해 Refactor(리팩터링) 메뉴로 이동하여 리팩터링 팝업을 선택합니다. 보시다시피 RubyMine은 다양한 리팩터링을 제공합니다. 예를 들어 변수, 상수, 필드를 추출할 수 있습니다. 이러한 모든 작업에는 고유한 단축키가 있습니다. 메서드 추출 리팩터링을 진행하겠습니다. 여기를 클릭하겠습니다.
새로운 메서드를 비공개, 공개 또는 보호된 메서드로 만들 수 있습니다. 비공개로 만들어 보겠습니다. 여기에 get_user라는 이름도 지정하겠습니다. OK(확인)를 클릭합니다.
RubyMine은 방금 자체 메서드로 리팩터링한 동일한 코드를 사용하는 모든 작업을 찾습니다. “Yes(예)”를 클릭하면 각 작업에 대해 새 메서드를 하나씩 적용하거나 한 번에 모두 적용할 수 있습니다.
그래서 새로운 메서드는 비공개 섹션에 위치합니다. 여기에 있으며, 모든 Rails 작업은 이전 코드 조각 대신 새 메서드를 사용합니다. 그러나 여기에는 여전히 작은 문제가 있습니다. 리더 메서드 앞에 get을 붙이는 것은 코드 스타일 위반이어서 안되므로 다른 이름을 지정해야 합니다.
RubyMine에는 이를 위해 Rename이라는 리팩터링도 있으므로 이 작업을 수동으로 수행할 필요가 없습니다. 따라서 Shift+F6을 누르면 이 메서드를 다른 이름으로 바꿀 수 있습니다(예: take_user). Refactor(리팩터링)를 누릅니다. RubyMine은 모든 사용 위치를 찾고, refactor(리팩터링)을 누르면 모든 사용 위치에서 메서드의 이름을 변경합니다.
보시다시피 이 메서드는 이제 모든 Rail 작업에서 take_user라고 불립니다.
마지막으로, 여러 작업에서 동일한 메서드를 사용하려고 하지는 않을 것입니다. 이것은 분명히 중복이므로 이것을 필터, 사전 필터로 만들기만 하면 됩니다.
여기로 이동하여 운영 체제에 따라 Command+D 또는 Ctrl+D를 이용해 이 줄을 복제해 보겠습니다. 이 메서드를 사전 필터로 만들어 보겠습니다. 이제 보시다시피 take_user에 코드 완성을 사용할 수 있습니다.
이제 이 메서드를 사용하는 모든 작업을 기억하지 못하므로 모든 사용 위치를 수동으로 다시 찾을 수 있습니다. 이를 위해 Alt+F7을 누릅니다. 보시다시피 edit, followers, following, show 및 update와 같은 액션이 이 작업을 사용합니다. 좋아요. 이 액션들을 추가해 보겠습니다.
마지막으로, 이제 사전 필터가 있어 take_user가 더 이상 필요하지 않으므로 이 항목의 모든 반복을 제거할 수 있습니다. 그러나 수동으로 수행할 필요는 없습니다. take_user 중 하나를 선택한 다음 운영 체제에 따라 Ctrl+G 또는 Alt+J를 누르기만 하면 됩니다.
그런 다음 단축키를 다시 눌러 파일에서 take_user의 모든 반복 항목을 선택합니다. 그러나, 아마도 지우지 않아야 하는 take_user 메서드의 정의를 선택한 것 같습니다. 그리서 이 정의를 선택 취소해야 합니다.
이를 위해 같은 단축키를 사용하되 Shift도 같이 누릅니다. 이제 우리가 해야 할 일은 Command+백스페이스를 눌러서 take_user 메서드의 불필요한 호출을 모두 제거하는 것입니다.
마지막으로, Esc 키를 눌러 여러 커서에서 탈출해 보겠습니다.