はじめに
今回の記事は、ちょっとしたお遊び記事です。
作成した公式プラグインが、気づいたら「100万ダウンロード」と「5万以上サイトで有効化中」になっていました。この数値は、Plugin Stats View という私のプラグインで出したもので、plugins_api を利用して集計しています。
ここまで良くやったなあとは思いつつ、今まで何行書いたんだろうと思い、行数とサイズを調べるプログラムを php で作成してみました。
下準備 & 仕様
作業ディレクトリを作成し、66個のプラグインをコピーしました。あらかじめ、自分以外の方が書いたライブラリなどを削除しました。
- コマンドライン上で実行します。
- コード中に指定したディレクトリを再帰検索して、php, js , css ファイルをカウントします。
- php, js, css のそれぞれと全ての行数の総和と、サイズの総和を出力します。
コード
<?php
/**
* Plugin Name: Program number of line
* Author: Katsushi Kawamori
* Author URI: https://riverforest-wp.info/
* License: GPL2
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*
*/
/*
Copyright (c) 2021- Katsushi Kawamori (email : dodesyoswift312@gmail.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
$line_all = pnol_scan_file( 'ディレクトリをフルパスで指定します' );
foreach ( $line_all as $key => $value ) {
echo $key . ' : ' . number_format( $value['line'] ) . '行 - ' . number_format( $value['size'] / 1024 / 1024, 2 ) . 'Mbyte' . PHP_EOL;
}
echo PHP_EOL;
/** ==================================================
* Scan file
*
* @param string $dir dir.
* @return array $count
* @since 1.00
*/
function pnol_scan_file( $dir ) {
$iterator = new RecursiveDirectoryIterator(
$dir,
FilesystemIterator::CURRENT_AS_FILEINFO |
FilesystemIterator::KEY_AS_PATHNAME |
FilesystemIterator::SKIP_DOTS
);
$iterator = new RecursiveIteratorIterator( $iterator );
$iterator = new RegexIterator( $iterator, '/\.php$|\.js$|\.css$/i', RecursiveRegexIterator::MATCH );
$count = array(
'all' => array(
'line' => 0,
'size' => 0,
),
'php' => array(
'line' => 0,
'size' => 0,
),
'js' => array(
'line' => 0,
'size' => 0,
),
'css' => array(
'line' => 0,
'size' => 0,
),
);
if ( ! empty( $iterator ) ) {
foreach ( $iterator as $file_path => $file_info ) {
if ( $file_info->isFile() ) {
$line = exec( 'wc -l '. $file_path );
$count['all']['line'] += trim( str_replace( $file_path, '', $line ) );
$count['all']['size'] += $file_info->getSize();
switch ( $file_info->getExtension() ) {
case 'php':
$count['php']['line'] += trim( str_replace( $file_path, '', $line ) );
$count['php']['size'] += $file_info->getSize();
break;
case 'js':
$count['js']['line'] += trim( str_replace( $file_path, '', $line ) );
$count['js']['size'] += $file_info->getSize();
break;
case 'css':
$count['css']['line'] += trim( str_replace( $file_path, '', $line ) );
$count['css']['size'] += $file_info->getSize();
break;
}
}
}
}
return $count;
}
?>
実行
以下の様な結果になりました。
終わりに
最近、自プロダクトの「競技会採点システム」の方に時間を割く事が多くなったので、今後、公式プラグインの方はあまり力を入れないと思います。フォーラムで応答が無くても、ご容赦ください。
コメントを残す