この記事ではmotion-modeとrubocopをEmacsに導入してRubyMotionアプリ開発で活用する方法について扱います。motion-modeについては作者のainame さんが何か書いてくださるそうなので期待しましょう。
Rubocop はアプリがsnake caseとcamel caseが入り乱れていないかなど、一貫したルールでコードが記述されているかチェックしてくれるツールです。チームで開発する際はもちろん一人でコードを記述する際にも一貫したコードは、可読性が向上し将来的にメンテナンスが容易になることでしょう。
1. Rubocopをインストール
RubocopはRubyGems経由でインストールするできます。
2. Emacsのパッケージをインストール
MELPA経由で以下のパッケージをインストールします。flycheckを導入しておくことで、Rubocopのチェック結果をよりわかりやすく表示できるようになります。
3. Emacsの設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; motion-mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path "~/.emacs.d/elisp/motion-mode")
(require 'motion-mode)
;; following adding of hook is very important.
(add-hook 'ruby-mode-hook 'motion-recognize-project)
(add-to-list 'ac-modes 'motion-mode)
(add-to-list 'ac-sources 'ac-source-dictionary)
;; set keybindings as you like
(define-key motion-mode-map (kbd "C-c C-c") 'motion-execute-rake)
(define-key motion-mode-map (kbd "C-c C-d") 'motion-dash-at-point)
(define-key motion-mode-map (kbd "C-c C-p") 'motion-convert-code-region)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; rubocop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'rubocop)
(add-hook 'ruby-mode-hook 'rubocop-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; flycheck-mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; (add-hook 'after-init-hook #'global-flycheck-mode)
(require 'flycheck)
(add-hook 'ruby-mode-hook 'flycheck-mode)
(flycheck-define-checker ruby-rubocop
"A Ruby syntax and style checker using the RuboCop tool.
See URL `http://batsov.com/rubocop/'."
:command ("rubocop" "--format" "emacs" "--silent"
(config-file "--config" flycheck-rubocoprc)
source)
:error-patterns
((warning line-start
(file-name) ":" line ":" column ": " (or "C" "W") ": " (message)
line-end)
(error line-start
(file-name) ":" line ":" column ": " (or "E" "F") ": " (message)
line-end))
:modes (enh-ruby-mode motion-mode))
RubyMotionプロジェクトのファイルを開くとrubocop
が動作するようにflycheck-define-checker
を追加しています。(Rubyのコードを開いたときにもrubocop
が動作するようにしています)
rubocop
で指定されているコーディング規約に沿っていない箇所があれば、上の画像のように?
が行頭に表示されるようです。
4. .rubocop.yml
いくつかrubocop
のルールをカスタマイズしました。.rubocop.yml
というファイルを~/
やプロジェクトのルートに置くと良さそうです。
メソッド名、シンボル名がsnake caseになっているか、コメントがASCII文字だけか、1行あたりの文字数をチェックする機能を外しています。
.rubocop.yml 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# disable to check whether method name use camel case.
MethodName :
Enabled : false
# disable to check whether symbol name use camel case.
SymbolName :
Enabled : false
# disable to check whether only ascii symbols in comments.
AsciiComments :
Enabled : false
# disable to check whether lines is less than 80 characters.
LineLength :
Enabled : false
ほかのカスタマイズ項目についてはhttps://github.com/bbatsov/rubocop/tree/master/config のdefault.yml を参考にすると良さそうです。