Emacs
RubyMotion

RubyMotionアプリ開発に、motion-mode + Rubocop を導入

More than 5 years have passed since last update.

この記事ではmotion-modeとrubocopをEmacsに導入してRubyMotionアプリ開発で活用する方法について扱います。motion-modeについては作者のainameさんが何か書いてくださるそうなので期待しましょう。

Rubocopはアプリがsnake caseとcamel caseが入り乱れていないかなど、一貫したルールでコードが記述されているかチェックしてくれるツールです。チームで開発する際はもちろん一人でコードを記述する際にも一貫したコードは、可読性が向上し将来的にメンテナンスが容易になることでしょう。


1. Rubocopをインストール

RubocopはRubyGems経由でインストールするできます。

% gem install rubocop


2. Emacsのパッケージをインストール

MELPA経由で以下のパッケージをインストールします。flycheckを導入しておくことで、Rubocopのチェック結果をよりわかりやすく表示できるようになります。


3. Emacsの設定

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 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が動作するようにしています)

131128-0001.png

rubocopで指定されているコーディング規約に沿っていない箇所があれば、上の画像のように?が行頭に表示されるようです。


4. .rubocop.yml

いくつかrubocopのルールをカスタマイズしました。.rubocop.ymlというファイルを~/やプロジェクトのルートに置くと良さそうです。

メソッド名、シンボル名がsnake caseになっているか、コメントがASCII文字だけか、1行あたりの文字数をチェックする機能を外しています。


.rubocop.yml

# 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/configdefault.ymlを参考にすると良さそうです。