こんにちは。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
に以下を記述します。
#!/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に以下を記述します。
-(BOOL)isMoteru:(NSInteger)age faceSize:(CGSize)faceSize money:(NSInteger)money{return NO;}
⌘+Bでビルドし、ビルド成功のタイミングで以下のように整形されれば成功です。
- (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
インストール
-
ダウンロードしてきたファイルの中のVVDocumenter-Xcode.xcodeprojをXcodeで開きます。
-
⌘+Bでビルドし、Buld Succeededと表示されればインストール成功です。
-
Xcodeを再起動します。
動作確認
MoteSampleを開き適当なメソッドの前にカーソルを合わせ、"///"を入力します。
Javadocライクなコメントが挿入されたら成功です。
@paramや@returnを自動で挿入してくれるので便利ですね。
おまけ
###Xcodeでリファレンス表示も!
VVDocumenterでコメントを書いておくとXcodeでメソッド名を⌥+クリックでサクッとリファレンスを見ることができます。
こんな感じでソースコードを書いておいて。
メソッド名を⌥+クリックでリファレンス表示!
これだけでも、インストールする価値がありますね。
###Appledocも!
上記ソースコードからAppledocでAPIドキュメントを生成するとこんな感じになります。
#おわりに
コードフォーマッタとVVDocumenterを設定したのに全然モテない!おかしい!