この記事は Akerun Advent Calendar 2024 - Qiita の11日目の記事です。
こんにちは、フォトシンス1年目の@ps-endoです。現在はモバイルアプリ(iOS)の開発を担当しています。 この記事ではモバイルアプリチームにジョインした際に実践したコード規模感の把握方法を1つ紹介します。
コードの規模感
コードの規模感を最初の段階で把握しておくと、実装の規模感やどこに処理が集中しているかなどがわかり、コード全体の把握を進め易くなります。 また、iOSアプリの場合はObjective-C, Objective-C++, Swiftを混ぜた状態で実装ができるため、各々がどのぐらいのボリュームであるのか確認しておきたい点です。
コードの規模感の確認はclocコマンドを使うとスムーズです。
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