Help us understand the problem. What is going on with this article?

きれいめ系iOSプログラマのためのモテXcode5コーデ術(Uncrustify, VVDocumenter)

More than 5 years have passed since last update.

こんにちは。haranicleです。
今回は、きれいなソースコードを生産したい「きれいめ系プログラマ」な皆さんのために、
コードフォーマッタの設定とコメントの記述を助けてくれるXcodeのプラグインを紹介します。

※Xcode5.1で使用する場合は、以下のように設定してください。(2014/04/06追記)
iOSモテコーデ術Xcode5.1対応

コードフォーマッタ

開発メンバが多かったり、期間が長いプロジェクトだとコードフォーマットがバラバラでイケてないソースコードが生産されがちです。
モテなソースコードを生産するために、コードフォーマットを決めて自動で整形してあげましょう。
今回は以下を実現します。

  • Xcode5でビルドに成功したタイミングで、自動的にコードフォーマッタを実行できる。

  • プロジェクト毎に異なるコードフォーマットを設定できる。

※本章は下記ページをベースに記載しています。
Xcode で コードフォーマッター Uncrustify を使う - FUKULOG開発者ブログ

前提条件

  • Homebrewがインストール済みであること。

  • Xcode5とCommand Line Toolsがインストール済みであること。

  • 試しにフォーマッタを実行してみるXcodeのプロジェクト(今回はMoteSampleという名前のSingle View Applicationフォーマットのプロジェクト)を作成していること。

以下の説明は、これらの条件を満たしていることが前提です。

Uncrustifyのインストール

Uncrustifyをインストールします。
Xcodeのプラグイン版もありますが、今回は、ビルド時に自動実行させるためにHomebrew版を使用します。
以下のコマンドをターミナルで実行してください。

$ brew install uncrustify

Uncrustifyを実行するスクリプトの作成

~/bin/配下(フォルダがない場合は新規に作成する)にuncrustifyという名前のファイルを作成し、uncrustifyに以下を記述します。

uncrustify
#!/usr/bin/ruby
base_path = ENV['PWD']

puts "running uncrustify for xcode project path: #{base_path}"

if base_path != nil
  paths = `find "#{base_path}" -name "*.m" -o -name "*.h" -o -name "*.mm" -o -name "*.c"`
  if paths.kind_of?(String) then
    paths = paths.split(/\r?\n/).map {|line| line.chomp}
  end
  paths = paths.collect do |path|
    path.gsub(/(^[^\n]+?)(\n)/, '"\\1"')
  end
  paths = paths.join(" ")
  result = `/usr/local/bin/uncrustify -c "#{base_path}"/.uncrustifyconfig --no-backup #{paths}`;
  puts result
else
  puts "Invalid base path..."
end

(2013/12/15修正 paths = `find... の結果がArrayではなく改行区切りのStringで取得されてしまった時にコードフォーマッタを実行できないバグを修正しました。)

スクリプトに実行権限を追加

以下のコマンドをターミナルで実行して、スクリプトに実行権限を付与します。

$ chmod +x ~/bin/uncrustify

Uncrustifyのフォーマットの作成

MoteSampleフォルダ(プロジェクトフォルダのルート)内に.uncrustifyconfigというファイルを作成し、下記ページのフォーマットを記述します(各パラメータについて日本語解説がついてて素敵です)。

uncrustify - 意識の高さからかコードフォーマッター設定を公開 - Qiita [キータ]

Xcodeの設定

Xcode>Preferences...>Behaviors>Build>Succeedsと順に選択し、Runのチェックボックスを✓します。
次にRunの横のドロップダウンからChoose Script...をクリックし、~/bin/uncrustifyを選択してOpenをクリックします。

これでXcodeでビルド成功時に自動でフォーマッタが走るようになりました。
Command Line Toolsがインストールされていないと実行されないので注意してください。
(僕はココで若干ハマりました...)

動作確認

MoteSampleのViewController.mに以下を記述します。

ViewController.m
-(BOOL)isMoteru:(NSInteger)age    faceSize:(CGSize)faceSize money:(NSInteger)money{return NO;}

⌘+Bでビルドし、ビルド成功のタイミングで以下のように整形されれば成功です。

ViewController.m
- (BOOL)isMoteru:(NSInteger)age faceSize:(CGSize)faceSize money:(NSInteger)money
{
    return NO;
}

.uncrustifyconfigをチームで共有すれば、全員が同じコードフォーマットのソースコードを生産できますね。

VVDocumenter

Uncrustifyはインデントなどの整形は出来ますが、変数名やコメントの記述方法については整形できません。
変数名は仕方ないとして、せめてコメントのフォーマットは統一したい!
折角コメント書くんだからAppledocを使ってAPIドキュメントを作りたい!
そんなきれいめ系プログラマなあなたにおすすめしたいのがVVDocumenterです。
VVDocumenterはXcodeで"///"と入力すると、自動的にJavadocライクなコメントを生成してくれるXcodeのプラグインです。

前提条件

  • Xcode5がインストール済みであること。

  • 試しにVVDocumenterを実行してみるXcodeのプロジェクト(今回はMoteSampleという名前のSingle View Applicationフォーマットのプロジェクト)を作成していること。

以下の説明は、これらの条件を満たしていることが前提です。

VVDocumenterのインストール

ダウンロード

下記URLからVVDocumenter-Xcodeを取得します。
git cloneするなりダウンロードするなりお好きにどうぞ。

onevcat/VVDocumenter-Xcode · GitHub

インストール

  1. ダウンロードしてきたファイルの中のVVDocumenter-Xcode.xcodeprojをXcodeで開きます。

  2. ⌘+Bでビルドし、Buld Succeededと表示されればインストール成功です。

  3. Xcodeを再起動します。

動作確認

MoteSampleを開き適当なメソッドの前にカーソルを合わせ、"///"を入力します。
Javadocライクなコメントが挿入されたら成功です。
@param@returnを自動で挿入してくれるので便利ですね。

おまけ

Xcodeでリファレンス表示も!

VVDocumenterでコメントを書いておくとXcodeでメソッド名を⌥+クリックでサクッとリファレンスを見ることができます。

こんな感じでソースコードを書いておいて。

source.png

メソッド名を⌥+クリックでリファレンス表示!

reference.png

これだけでも、インストールする価値がありますね。

Appledocも!

上記ソースコードからAppledocでAPIドキュメントを生成するとこんな感じになります。

appledoc.png

おわりに

コードフォーマッタとVVDocumenterを設定したのに全然モテない!おかしい!

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