Laravelでどれだけ関数があるか調べたい時にBashでやったこと
このプロジェクトに関数がいくつあるか知りたい ってこと無いですか?ないですか。僕はありました。
Laravelのプロジェクトなんですけど、パブリックな関数がいくつあるのか知りたかったんですね。PhpStormのプラグインだったり、色々と探したんですが、なんか欲しい情報を簡単に出せるのがありませんでした。
最近shell(bash)の書き方を覚えたばかりなので、使って書いたほうが早そうという結論に。
前提
- Bashで書いてます。shell初心者です。
- コメントアウトも拾っちゃいます。
- 文字列とかも拾っちゃいます。
- とにかく
public function
って文字列は無差別に拾います。
- 行数カウントです。
- プロジェクトルートから実行するのを想定。
ワンライナー
$ result_file="class_analysis"; [[ -f "$result_file" ]] && rm "$result_file"; touch "$result_file"; targets=("Services" "Repositories"); for target in "${targets[@]}"; do ls -1 app/"$target"/ | grep ".*Interface.php" | while IFS= read file; do echo "app/$target/$file,$(grep -c "public function" "app/$target/$file")" >> $result_file; done; done;
分解
public function
って文字列は無差別に拾います。$ result_file="class_analysis"; [[ -f "$result_file" ]] && rm "$result_file"; touch "$result_file"; targets=("Services" "Repositories"); for target in "${targets[@]}"; do ls -1 app/"$target"/ | grep ".*Interface.php" | while IFS= read file; do echo "app/$target/$file,$(grep -c "public function" "app/$target/$file")" >> $result_file; done; done;
分解
まずは出力先ファイル名を設定。
$ result_file="class_analysis";
出力先ファイルが既に存在する場合は、削除しちゃいます。
[[ -f "$result_file" ]] && rm "$result_file";
新規で出力先ファイルを作ります。
touch "$result_file";
今回は「すべてのディレクトリ」ではなく、ある程度絞って数を見たかったため、ディレクトリをある程度絞りました。
プロジェクト的に重要なロジックが詰まっている以下の2つを対象としています。
targets=("Services" "Repositories");
対象ディレクトリで回して行きます。
for target in "${targets[@]}"; do
app
配下のファイルを1ファイル1行で表示し、パイプで出力を次の処理へ渡す。
ls -1 app/"$target"/ |
今回対象のプロジェクトではInterfaceを具象クラスと同じディレクトリに格納していたため、Interfaceだけ見ればいいや、ということでインターフェースだけで絞り込みました。
Interfaceという文字列で grep
した結果を、またまたパイプで次の処理へ渡します。
grep ".*Interface.php" |
1ファイルずつ回して public function
という文字列を含む行数を抜き出して、カンマ区切りでファイル名とともに echo
して、その結果を出力先ファイルに追加。
while IFS= read file; do
echo "app/$target/$file,$(grep -c "public function" "app/$target/$file")" >> $result_file;
done;
ループお終い。
done;
以上
あとがき
上記、ニーズに合わせてカスタマイズして使っていただければと。
ファイルの grep
周りをもうちょっときれいにできる気がしてる。
Author And Source
この問題について(Laravelでどれだけ関数があるか調べたい時にBashでやったこと), 我々は、より多くの情報をここで見つけました https://qiita.com/kaz_goto/items/9ef2656e411614cdd171著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .