ENGINEER BLOGPHONE APPLIのエンジニアブログ

Android StudioでCode Style共有&Code自動整形

2020年6月17日

こんにちは、株式会社Phone Appliプロダクト本部プロダクトデベロップメント部スマホチーム所属のAndroidエンジニアである田松知将(たまつかずまさ)と申します。
今回は、私個人としてブログ一本目ということで、現在スマホチームで行っているタスクの一つである、 コーディングスタイルの自動整形の設定方法及び共有化や簡単な項目解説についての記事を執筆させて頂きたいと思います。
※開発を少しでもかじっている方向けの記事になっているかと思いますので、分かりにくい部分がある点は容赦頂ければと思います。

目次

1. そもそもコーディングスタイルって?

2. Android StudioでCode Styleを定義

3. Code Styleの適用

4. Projectチーム間でのCode Style共有

5. まとめ

1. そもそもコーディングスタイルって?

コーディングスタイルとはコードを実装する上でプログラム上エラーにはならないが、コードの可読性を上げ保守し易くするために定められたルールのようなものと捉えて頂ければ良いと思います。文章だと分かりづらいと思いますので、以下に例を記載致します。

code_style_before.png


かなり極端な例を紹介しましたが、処理毎のブロックが分かりづらく処理を追いづらいですよね。そこで以下のように修正しました。

code_style_after.png

処理の終わりや変数への代入等がだいぶ見易くなったと思います。今回は簡単な例で5行程度のコードでしたが、ここからメソッドやfor文、callback等が追加された場合にコーディングスタイルが統一されていないと、保守性や可読性が著しく低下するのは容易に想像出来ると思います。

コーディングスタイルについてざっくり説明しましたが、コーディングスタイルを定義したとしてもそれを常に意識しながらコーディング作業をすることはとても大変だと思います。そこで、実装作業後にAndroid Studioの標準機能であるCode Styleの自動整形を使用することで、定義したコーディングスタイルを一発で適用する方法を次章から紹介したいと思います。

2. Android StudioでCode Styleを定義

まずは、コーディングスタイルを自動適用するために、Android StudioのCode Styleを定義することから始めてみましょう!
Android Studioを立ち上げ、メニューバーの [Android Studio] -> [Preferences] -> [Editor] -> [Code Style] -> [それぞれCode Styleを設定したい言語] から定義を設定できます。全ての設定を紹介することは出来ないので、今回は弊社でAndroidアプリ開発において使用されている言語のJava, XMLのそれぞれのタブ項目で、どのようなCode Styleを主に設定することができるのかを説明致します。

・Java
code_style_java_config_tab.png

・Tabs and Indents
タブのスペースサイズや改行時のインデント(字下げ)のスペース数

・Spaces
if文や関数の引数, ()の前後等にスペースを挿入するか否か

・Wrapping and Braces
一行に対する最大文字数の設定や最大文字数を超えた場合に、どのようなルール・区切りで折り返すか

・Blank Lines
メソッドやパッケージ,クラス前後等の空白行数

・JavaDoc
パラメータ説明の位置合わせや折り返し等、JavaDocのスタイル

・Imports
ワイルドカードインポートの制御やインポート文同士の空行等、インポートについて

・Arrangement
メンバ変数やメソッド等の配置順序

・Code Generation
Android StudioのGenerate機能を使用した際に生成されるコードのスタイル

・XML
code_style_xml_config_tab.png

・Tabs and Indents
タブのスペースサイズや改行時のインデント(字下げ)のスペース数

・Other
一行のおいての最大文字数や改行時のインデント、属性と=間のスペース有無等

・Arrangement
属性の配置順序及びフォーマット時の強制再配置の有無

・Code Generation
コード自動生成時のコメントについて

・Android
Android特有のAndroidManifestやLayoutファイルの折り返しや空白行の挿入等


今回はAndroidアプリ開発において、特に使用頻度の高いJava及びXMLファイルのCode Style定義について記載致しましたが、他にもKotlinやC++等様々な言語フォーマットに対する定義が出来ます。定義まで出来たら後はコードファイルに適用するだけです!実際に定義したCode Styleを適用してみましょう。

3. Code Styleの適用

メニューバーから [Code] -> [Refomat Code]から現在開いているファイルに定義したCode Styleを適用することができます。この適用方法の他に [Code] -> [Show Reformat File Dialog] から適用項目を決定することも可能です。

code_style_reformat_dialog.png

・Scope
指定された部分にCode Styleを適用する

・Only VCS changed text
Git等のバージョン管理システムが導入されている場合のみ選択可能になり、差分があるコード部分にのみ

・Selected text
選択範囲のみ

・Whole file
現在開いているファイル全体

・Optional
適用するCode Styleのオプション項目。オプション項目なのでインデントやスペース数等のCode Styleは項目のチェック関係なく反映される

・Optimize imports
使用されていないインポートの削除や順序の並び替え等インポートに関する部分

・Rearrange code
変数やメソッドの順序等の配置修正について

・Code cleanup
コード上に潜在的問題がある部分に関して修正を加える(Code Styleの設定とは少し異なる)


補足としてPackageフォルダ配下等の、複数のファイルにCode Styleを適用させたい時は、以下の画像ように対象フォルダメニューから、該当する複数のファイルに対してCode Styleを適用させることが出来ます。

code_style_package_menu.pngcode_style_filter.png

ここまででAndroid StudioにCode Styleを設定し、コードファイルへの適用まで行いました。これで新しくファイルを作成する時や既存のコードに修正を加えた時等に、コードのフォーマットを行うことで常にコーディングスタイルが統一された実装を行うことが出来るようになりました!ただ、これだけではチーム開発を行う際に共有を行っていないので、最終的に実装者によっては統一性のないコーディングスタイルになってしまいます。Code Styleを変更した項目を共有するのでは、各々の手間がかかりすぎスマートではありません。そこで、あるファイルを共有し設定することで簡単に設定したCode Styleをチーム及びプロジェクト間で共有出来るので、その方法を紹介して終わりにしたいと思います。

4. Projectチーム間でのCode Style共有

設定したCode Styleの共有ですが、ここまで設定を終わらせた皆さんなら、とても簡単に設定を行えると思います。Code Styleを設定したプロジェクトルート配下に存在する「.idea/codeStyles」を共有するだけです。.ideaフォルダとは、Android Studio等のIDEで使用されるプロジェクトの設定が格納されているものと認識頂ければ大丈夫です。.ideaフォルダ配下に格納されているものは、個人の設定がほとんどなのでGit等のバージョン管理ツールで共有する場合は「.idea/codeStyles」フォルダのみを共有する設定にする必要があります。
設定ファイルの共有後は以下の画像のように[Code Style] -> [Scheme]メニューが[Project]になっていることを確認する(なっていなければProjectにする)ことで設定ファイルをプロジェクトに適用します。

code_style_apply.png

ここまででAndroid StudioのCode Styleの設定・適用からチーム間の共有まで行えるようになりました!

5. まとめ

コーディングスタイルは、実装を進める上で最初の段階で定義しておくと、開発者それぞれの表記揺れが減り、可読性の高いコードになるのと同時に、コーディングスタイルを開発者側が常に意識する部分が減り、他のことにリソースを割くことが出来ます。また、ファイル数の少ない早い段階で定義しておくと、ファイルの変更が少ないので差分が出過ぎて死にそうになるみたいなこともないので、適用するならなるべく早い方がよいでしょう。今回は、より詳しい設定の説明は省いてしまったのですが、それぞれのプロジェクト毎に違う部分もあるので、使用する際は公式のスタイルルールに則りつつ、自らが見易くなるように精査しながら定義を設定することが必要です。

今後も開発者が考える必要がない領域を増やし、真に考えなくてはいけない領域にリソースを割けるような開発体制にしていけたら良いのではと思っています。今回は設定寄りの記事を執筆したので、次回はもう少し技術的な記事が書ければと思います。

以上、お読み頂きありがとうございました。