LoginSignup
1
0

可読性の高いバッチでファイル検索機能を実装してみた

Last updated at Posted at 2024-03-06

経緯

そもそもバッチの開発はあんまり携わったことがなかった。バッチ自体が可読性を高めるのは難しいという印象だった。

今回は、そんなバッチでも可読性の高いものを書いてみようと思った。

※注意※
可読性はあくまで個人的にそう感じるというだけで、絶対そうしなきゃいけないというわけではない。もちろん、pythonは改行しなきゃいけない(しかもスペース5つ分)など指定がある言語もある。

第一に、パラメータは冒頭にまとめる

1.bat
REM パラメータ一覧

    set FileName=file_name.txt

    set LogFile=sample_batch_001.log

    set flg=0


ファイル名はスネークケースを使って、変数はキャメルケースに統一をするというのも一つの可読性を高めるテクニックかもしれない。

第二に、コメントアウト

ロジックのフローをわかりやすくするのが肝心。

2.bat
REM ファイルの存在確認

    if exist %FileName% (

        set flg=100
        
    ) else (

        set flg=200

        REM 処理中断
        goto fin
        
    )

    

上のように、Windowsの改行とタブスペースを使う。最低でも改行は一つ設けた方が読みやすいと思う。

個人的な趣向かもしれないが、フラグやカウントをとる処理はいちいちコメントに書く必要はないのかと思う。

第三に、インデント

ロジックの包含関係を意識してインデントする。

3.bat
REM ファイルパス一覧の存在確認

    for /f "delims== tokens=1" %%f in ('type %FileName% ') do (


        REM 関数の呼び出し
        call :func "%%f"

    )

    exit /b %flg%


REM 関数の開始
:func 

        set tgtPath=%~1

        if exist %tgtPath% (

            set flg=100

            REM ファイルが存在した
            echo EXISTS %tgtPath% >>%LogFile%

        ) else (

            set flg=200

            REM ファイルが存在しない
            echo DOESNT EXIST %tgtPath% >>%LogFile%

        )


REM 処理終了
:fin

echo %flg%>>%LogFile%

大見出しで機能の概要だけをコメントすると読みやすい。
さらに、改行2個に増やしてロジックの分け目が見やすくした。

おまけ

別視点になりますが、例3)で関数を使うことで遅延展開の回避をしている。実は、下の記事を参考にした。
https://qiita.com/yz2cm/items/4983be006116c369d08b

個人的にsetlocal enabledelayedexpansionがいくつも入ってると読みにくいし、デバッグしづらいと感じる。なので、なるべく関数を使い読みやすくしている。

そういえば、よく「関数」にうるさい人がいたのを思い出した。たぶん、一日に平均4回は「関数を使ってください」と言わせていた。

もしかしたら、なるべく関数を使うのが第四の鉄則になるかもしれない。

厳しく指導してくれる人があんまりいないので、少し寂しい。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0