Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save senseilearning/43a3aef3f5e2e7215e531f6df6070eb7 to your computer and use it in GitHub Desktop.
Save senseilearning/43a3aef3f5e2e7215e531f6df6070eb7 to your computer and use it in GitHub Desktop.
はい、承知いたしました。FengNiaoをKMP (Kotlin Multiplatform) プロジェクトで効果的に使うための方法を、注意点を含めてステップバイステップで解説します。
はじめに:KMPプロジェクトにおける重要な注意点 ⚠️
最も重要な点は、FengNiaoはKotlinのコードを解析できないということです。
FengNiaoはSwiftやObjective-Cのコード(.swift, .m, .hファイル)とXcodeのUIファイル(.xib, .storyboard)をスキャンして、画像リソースが使われているか(UIImage(named: "...")など)を判断します。
そのため、KMPプロジェクトで画像が**commonMainやiosMainのKotlinコード内でのみ使用されている場合、FengNiaoはそれらを「未使用」と誤って検出してしまいます**。
この制限を理解した上で、以下の手順を踏むことでFengNiaoを安全かつ効果的に利用できます。
KMPプロジェクトでFengNiaoを効果的に使う手順
この手順のゴールは、「FengNiaoでiOSネイティブ側の未使用画像を検出しつつ、Kotlin側で使っている画像を誤って削除しないようにする」ことです。
ステップ1:FengNiaoのインストール
まだインストールしていない場合、Homebrewを使うのが最も簡単です。ターミナルで以下のコマンドを実行してください。
brew install fengniao
ステップ2:プロジェクトの正しいディレクトリで実行する
FengNiaoはXcodeプロジェクト(.xcodeproj)がある場所で実行する必要があります。KMPプロジェクトでは、通常 iosApp という名前のディレクトリです。
まず、ターミナルでそのディレクトリに移動します。
# プロジェクトのルートからiosAppディレクトリへ移動
cd iosApp
ステップ3:Dry Runで未使用候補をリストアップする
いきなり削除せず、まずはどの画像が未使用と判断されるかを確認します(Dry Run)。
iosApp ディレクトリで、以下のコマンドを実行してください。
fengniao
すると、未使用と判断された画像ファイルの一覧が表示されます。
このリストには、本当に未使用のファイルと、Kotlinコードでのみ使われているために未使用と誤判定されたファイルが混在しています。
ステップ4:誤判定されたファイル(Kotlinで利用中の画像)を特定し、除外リストを作成する
ステップ3で出力されたリストを見ながら、あなたのプロジェクトの commonMain や iosMain のKotlinコードで実際に使われている画像を探します。(Moko-resourcesなどを使っている場合は、そこで定義しているリソース名と照らし合わせます)
次に、それらの誤判定されたファイルをスキャンから除外するための設定ファイルを作成します。
iosApp ディレクトリに .fengniao.yml という名前のファイルを作成し、以下のように記述します。
.fengniao.yml
# .fengniao.yml
# FengNiaoのスキャンから除外したいファイル名を指定します
exclude:
- "image_used_in_kotlin_1.png"
- "icon_for_common_module.jpg"
- "another_image_used_in_iosMain.png"
このように、Kotlin側で使っていることがわかっているファイル名を exclude リストに追加していきます。
ステップ5:除外リストを使って再度スキャンする
.fengniao.yml ファイルを作成したら、もう一度 fengniao コマンドを実行します。
fengniao
今度のリストには、除外したファイルは表示されません。残っているのは、本当にプロジェクトのどこからも使われていない可能性が高い画像です。
ステップ6:未使用ファイルを削除する
リストアップされたファイルが本当に不要であることを最終確認したら、削除コマンドを実行します。
【重要】 削除する前に、必ずGitなどでプロジェクトの状態をコミットしておきましょう。万が一必要なファイルを削除してしまっても、簡単に元に戻せます。
# 未使用と判断されたファイルを削除する
fengniao --delete
実行後、削除されたファイルの一覧が表示されます。
まとめ:効果的な運用のためのヒント ✨
* .fengniao.yml はGitで管理する:一度作成した除外リストはプロジェクトのバージョン管理に含めましょう。これにより、チームの誰もが安全にFengNiaoを実行できます。
* 定期的な実行:プロジェクトが大きくなるにつれて、不要なリソースは溜まりがちです。定期的にこの手順を実行して、プロジェクトをクリーンに保つことをお勧めします。
* プロセスを理解する:最も大事なのは「FengNiaoはKotlinを知らない」という前提です。この一手間(除外リストの作成)を惜しまないことが、KMPプロジェクトでツールを効果的に使う鍵となります。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment