見出し画像

【裏技】正規表現でコードの行数をカウントする超簡単テクニック

みなさん、明けましておめでとうございます!
新入社員のKです!
今回はソフト・拡張機能いらずのステップカウンターをテキストエディタで実現できたのでご紹介します!




はじめに

ここから少し背景の話になるので本編気になる方はスキ押してから飛ばしちゃってください!背景も読んでくださる方はありがとうございます!スキ押してからこの先もお読みください!
……

私、最近スキルシートを書く機会がありまして、今まで書いてきたコードの詳細な情報を記述する必要があったのですが、今まで記述してきたコードの行数は数えてませんでした。
「今までのコードの量を考えると5000行以上はあるよな…」と落胆する気持ちを解消しようと、Googleで「ステップ数 カウント」と検索をするとソフトのインストール案内ばかり…。
「セキュリティ的にどうなんだ?」と考え付いた時点で辞めた方がいいだろうと思い、自力で数えようと思いました。
とはいっても、意味ある行と意味のない行を1行1行数えていくのは時間もかかるし面倒くさいしで生産性がない…。
なら、「テキストエディタで正規表現を使って必要のない行を消せばいいのでは!?」と思いついたのが今回のきっかけです。

今回は、以下の2つを使って簡単なサンプルをお見せいたします!
 
 プログラミング言語:PHP
 テキストエディタ :サクラエディタ

それでは準備をしていきましょう!

【準備】

まずはステップ数を数えるために必要なコードから書いていきましょう!
今回は消費税額を計算するPHPコードを書きました。

<?php

   //商品価格:ここでは仮に1000とする。
   $hontai = 1000;
   //単位は%
   $zeiritsu = 10;
   
   //消費税額を計算する関数を呼び出す
   $zeigaku = taxCalc($hontai,$zeiritsu);

   //計算結果を出力
   print "消費税額は".$zeigaku."円です。";

   /**
    * 【関数】taxCalc 消費税計算
    *
    * 商品価格に消費税率を掛け合わせた数を消費税額として返す
    *
    * @param int $hontai 商品価格
    * @param int $zeiritsu 消費税率
    *
    * @return int 消費税額
    */
   function taxCalc($hontai,$zeiritsu)
   {
      return $hontai * $zeiritsu / 100;
   }
?>

普通のコメントやPHPDoc等が間に挟まっていて、正確なコード行数を数えるのが大変そうですよね…。
では、一撃で解決するために正規表現を使って置換のできるテキストエディタを開いてください!

正規表現で置換しよう!

【手順】

まずはテキストエディタに書いたコードを全て張り付けましょう!

サクラエディタに張り付ける

そしたら、ショートカットキーの「Ctrl+R」を押して置換のポップアップウィンドウを表示させて、赤い枠にチェックが入っていることを確認してください。

置換のポップアップウィンドウ

そしたら置換前の項目に以下の文字列を張り付けてください。

.*/\*.*\r\n|.*\*/\r\n|\s+\*\s[^1-9|^\(|^\$].*\r\n|\s+\*\r\n|\s+//.*\r\n|^\r\n|\s+\r\n

該当行マークを押すと…

「該当行マーク」押下時

コードとして意味を持たない行が選出されています!
このまま「すべて置換」をすれば必要な行だけ残りますが、ここでコピペした正規表現の中身を解説しましょう。

「 | 」(パイプライン)が、論理和(または)を表す文字なのでパイプラインで分けて簡単に説明していきます!

./*.\r\n
 「/*~↵」

当該箇所
    /**

.*/\r\n
 「~*/↵」

当該箇所
    */

\s+*\s[^1-9|^(|^$].\r\n
 「(いくつかのスペース) * 数式で使わない文字~↵」

当該箇所
     * 【関数】taxCalc 消費税計算
     * 商品価格に消費税率を掛け合わせた数を消費税額として返す   
     * @param int $hontai 商品価格
     * @param int $zeiritsu 消費税率
     * @return int 消費税額

\s+//.*\r\n
 「(いくつかのスペース)//~↵」

当該箇所
   //商品価格:ここでは仮に1000とする。
   //単位は%
   //消費税額を計算する関数を呼び出す
   //計算結果を出力

\s+\*\r\n
 「(いくつかのスペース)*↵」

当該箇所
    *
    *
    *

改行だけの行
^\r\n
 「↵だけの行」
\s+\r\n
 「(いくつかのスペース)↵」

つまり、「コメント」と「改行だけの行」を対象にしているということです。
では、「すべて置換」して消してみましょう!

「すべて置換」押下時

全体行28行から、綺麗にコードだけが残って10行と数えることができました!長いコードでもサクラエディタなら行番号が表示できるので最終行のとなりを見ればすぐわかりますね!

【注意点】

便利にステップ数が数えられるものの、1つだけ弱点があります。それは…

※複数行コメントに対応できない

/*
*   この書き方だと対応できます
*/

/*
    この書き方だと対応できません。
*/

複数行コメントの書き方の1つで、文字列のはじめに「*」がない場合はHTMLなど、全角文字もコードの一部として扱う言語があり、判別ができません。
「/*~*/」の間にある複数行すべてを対象にする書き方もありましたが、サクラエディタでは対応していませんでした。

【Tips】

複数行コメントに対応できる書き方(※サクラエディタ非対応)

/\*[\s\S]*?\*/

「Notepad++」というテキストエディタだと対応しているみたいなので、ご利用されている方は、こちらの書き方も組み込んで使ってみてください!

おわりに

いかがでしたでしょうか?
今回は「行を消す」ための使い方をしましたが、正規表現を勉強することで、たくさんの文章の中から必要な文字だけを対象に置換することができます!
Grep置換などでも重宝する正規表現、身に着けて生産性の高い作業を心掛けましょう!

今回紹介させていただいた正規表現も、「もっと簡単な方法があるよ!」「こういう書き方だと複数行コメントも対応できるよ!」という方がいらっしゃいましたら、この記事のコメントで教えていただけると幸いです!
最後までお読みいただきありがとうございました!
この記事が役に立ったと思われた方は、スキ記事の保存をしていただけると嬉しいです!
今年も技術ブログを月1で載せていきますので、よろしくお願いいたします!

この記事が気に入ったらサポートをしてみませんか?