18
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
18
Help us understand the problem. What are the problem?