フォトシンス エンジニアブログ

株式会社Photosynth のテックブログです

コード規模感の把握とcloc

この記事は Akerun Advent Calendar 2024 - Qiita の11日目の記事です。

こんにちは、フォトシンス1年目の@ps-endoです。現在はモバイルアプリ(iOS)の開発を担当しています。 この記事ではモバイルアプリチームにジョインした際に実践したコード規模感の把握方法を1つ紹介します。

コードの規模感

コードの規模感を最初の段階で把握しておくと、実装の規模感やどこに処理が集中しているかなどがわかり、コード全体の把握を進め易くなります。 また、iOSアプリの場合はObjective-C, Objective-C++, Swiftを混ぜた状態で実装ができるため、各々がどのぐらいのボリュームであるのか確認しておきたい点です。

コードの規模感の確認はclocコマンドを使うとスムーズです。

github.com

cloc . --vcs=git --quiet

例としてSwiftのテストライブラリ swift-testing をclocで調べると、次の出力になります。

github.com/AlDanial/cloc v 2.02  T=0.30 s (854.3 files/s, 153086.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Swift                          189           3809          12646          22178
Markdown                        37           1095            331           3800
CMake                           12             71            164            495
C++                              4             84            166            404
C/C++ Header                     8             98            285            270
Text                             2             45              0            189
XML                              2              0              0            166
YAML                             3              0              0             86
INI                              1              2              0              9
Dockerfile                       1              5              9              5
-------------------------------------------------------------------------------
SUM:                           259           5209          13601          27602
-------------------------------------------------------------------------------

全体の規模が判明したら、次は特定のプログラム言語に絞り、ソースコード毎のコード規模を取得します。

例えばSwiftに絞る場合は次のようなコマンドを実行します。

# cd ./Tests/TestingMacrosTests
cloc . --vcs=git --quiet --include-lang="Swift" --by-file

コードの行数が多いファイルから列挙してくれます。

github.com/AlDanial/cloc v 2.02  T=0.16 s (36.4 files/s, 6695.9 lines/s)
------------------------------------------------------------------------------------
File                                             blank        comment           code
------------------------------------------------------------------------------------
./TestDeclarationMacroTests.swift                   39             21            418
./ConditionMacroTests.swift                         25             24            339
./UniqueIdentifierTests.swift                       13              9             62
./TagMacroTests.swift                                6              9             57
./TestSupport/Parse.swift                            4              9             41
./TestSupport/FixIts.swift                           3             18              7
------------------------------------------------------------------------------------
SUM:                                                90             90            924
------------------------------------------------------------------------------------

上の結果から2つの情報が手に入ります

  • ファイルパスやファイル名で使っている単語
    • 単語から機能の関連性の推測
  • コード行数
    • コード行数だけでは判断は難しいですが処理が集中しているかどうかなど

余談ですが、clocコマンドは次のようにするとCSV形式で出力できますので、 そのCSVスプレッドシートなどに読み込み、どのあたりまで目を通したのか記録を残せるようチェックリストにします。

cloc . --vcs=git --quiet --include-lang="swift" --by-file --csv

ビューのファイル

iOSアプリの多くの画面はXibファイル、Storyboardファイル、UIKitもしくはSwiftUIのコードで作成されます。 ビューに関係するファイルをclocコマンドで列挙して規模感を把握していきます。

例えば、Storyboardファイルの一覧は次のコマンドで確認できます。

cloc . --vcs=git --include-ext="storyboard" --by-file

上のコマンドでStoryboardのファイルパスが手に入るので、Storyboardでカスタムクラスとして指定しているViewControllerをxmllintで取り出します。

xmllint --xpath "/document/scenes/scene/objects/viewController/@customClass" ./path/to/example.storyboard | awk -F'[ =\"]' '{print $4}'

次のような出力が得られます。(出力例であり、実際とは異なります)

ExampleListViewController
ExampleDetailViewController

画面を管理するViewControllerが得られたので、これもざっと見ていきます。

終わりに

上に紹介した方法で、ざっくりとコードの規模感やコードの中身を頭に入れておけば、「あの画面に関係するコードでちょっと聞きたくて」といった話に繋げやすくなるかなと思います。


株式会社フォトシンスでは、一緒にプロダクトを成長させる様々なレイヤのエンジニアを募集しています。 photosynth.co.jp

Akerunにご興味のある方はこちらから akerun.com