最近iOS開発をはじめたけど、Interface builderやstoryboardなど
Xcodeに依存する機能が多くEmacsで開発できんの?って思ったけど
UI系はXcode、コード改修はEmacsみたいに行う作業を割り切れば全然問題なさそう。
ただ、Emacsのobjc-modeがデフォルト設定のままだとツラすぎなので
いろいろ機能を追加して開発環境を整えたので紹介しようかと。
追加した機能
- objc-modeの拡張設定
- コード整形(clang-format)
- インタラクティブな実行環境(quickrun)
- Xcodeのドキュメント検索(helm-xcdoc)
- コード自動補完(emaXcode, yasnippet, auto-complete)
- tagジャンプ(gtags)
- シンタックスチェック(flymake)
1. objc-modeの拡張設定
以下の拡張設定をします
- TABスペースは利用せず、半角スペースを4つにする(デフォルトのままでは2になってる)
- .hファイルもobjc-modeで開くけるようにする
- FoundationやUIKit等のFrameworkの.hファイルを検索対象に含めるようにする
- 対になってる.hファイルと.mファイルをトグルできるようにする
- .hと.mを左右に並べて開く
設定
|
|
2. コード整形
コード整形はclang-formatを利用します。
clang-formatはC、C++、Objective-c用のコード整形ツールで選択したリジョンを
指定したスタイルでを整形することができます。
設定
・clang-formatコマンドのインストール
|
|
・clang-format.elはmelpaでインストール。
M-x package-refresh-contents
M-x package-install clang-format
|
|
3. インタラクティブな実行環境
テストコードや処理の挙動を手軽に確認したい場合はquickrunを利用します。
あらかじめmainが入ってるテンプレートファイルを作成しておき
確認したい場合、テンプレートファイルを開けばインタラクティブな実行確認ができます
設定
・quickrunはmelpaでインストール。
M-x package-refresh-contents
M-x package-install quickrun
|
|
4. Xcodeのドキュメント検索
Xcodeのドキュメント検索にはhelm-xcdoc(拙作)を利用します
カーソル上のシンボル名 or 検索ワードからドキュメント検索を行いViewer(eww)で確認できます。
Emacs24.4以上、helm 1.5以上が利用可能条件となります
設定
・emacs-helm-xcdocは、以下からダウンロードします
https://github.com/fujimisakari/emacs-helm-xcdoc
|
|
5. コード自動補完(emaXcode, yasnippet, auto-complete)
コード自動補完するためには、emaXcode, yasnippet, auto-completeを利用します。
この3つelispの役割は以下のようになります。
- emaXcode: Frameworkの.hファイルから情報を抽出してyasnippetが理解できる形式でファイルに書き出す。
auto-completeの情報源(ac-source-emaXcode-yasnippet)の設定を行う。 - auto-complete: 文脈に沿った自動補完をする
- yasnippet: 補完で選択されたsnippetを展開して入力する
※ emaXcodeはコード自動補完以外にも幅広く機能を備えてます。
たとえば、objc-modeの拡張設定やシンタックスチェック(flymake)部分の機能も用意されてたりします。
利用した場合、emaXcodeに依存した設定が多くなりそうだったので自分は自動補完のみ利用することにしました。
設定
・emaXcodeは、以下からダウンロードします
https://github.com/ShingoFukuyama/emaXcode
・auto-complete、yasnippetはmelpaでインストール。
M-x package-refresh-contents
M-x package-install auto-complete
M-x package-install yasnippet
|
|
・設定完了後に以下を実行し、Frameworkの.hファイルからyasnippet用の情報をファイルに書き出しときます(1回のみでOK)
M-x emaXcode-yas-get-objc-messages-from-header-files
6. tagジャンプ
tagジャンプには、globalコマンドとgtags.el、helm-gtags.elを利用します。
globalでObjective-cはサポートしておらず利用できなさそうだったのですが
pygmentsとctagsのカスタム設定を利用することで実現できました。
設定
・gtags、helm-gtagsはmelpaでインストール。
M-x package-refresh-contents
M-x package-install gtags
M-x package-install helm-gtags
・globalコマンドインストール
|
|
・pygmentsのpipインストール
pygmentsはsudoでネイティブなシステム環境にインストールする必要がありあす。
globalがpygmentsを利用する際、#!/usr/bin/pythonから利用するので
virtualenvやpyenvでユーザーローカルにpygmentsをインストールしてもimportできなので。
|
|
・ctags拡張設定
|
|
・シンボリクリンク生成
tagジャンプ対象にFrameworkの.hファイル含ませるため
project直下にFrameworkまでのシンボリックを配置します
|
|
・TAGファイルの生成
|
|
・gtag設定
|
|
7. シンタックスチェック
シンタックスチェックは、数年前の記事だとgccを利用したチェックが行われてたけど
現在のMacOSXの標準コンパイラーはclangなのでこちらを利用しました。
設定
|
|
参考にしたサイト
http://www.emacswiki.org/emacs/ObjectiveCMode
http://fukuyama.co/emaxcode
http://sakito.jp/emacs/emacsobjectivec.html