LoginSignup
17

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-12-01

この記事では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を参考にすると良さそうです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17