sironekotoroの日記

Perl で楽をしたい

定型のフォルダ構造を作る

先週はブログも書かずに何をしてたんだっけか

あぁ、部屋片付けてたのか。

あれから1週間たった今も片付いてない。なんぼかは減ったけど、ベッドの上で処分品のダンボールと一緒に寝てます。

定型のフォルダ構造を作る

最近は経理業務の割合が70%ほどになりました。

経理というのは月次、四半期、年次、と繰り返しの多いお仕事です。

その中でも定型の業務ってのがいくつかあります。

毎月コツコツ、温かみのある手運用でやるのもいいのですが、楽をして早く帰ったりtwitter見てたいですよね?

ってことで、経理業務で毎月毎に作成するフォルダ構造を作るPerlスクリプトです。

こういうフォルダ構造を作ります。

$ tree -N
.
├── 売上
├── 海外
├── 立替金
├── 支払いCSV
├── 支払データ
├── 仕訳データ作成
│   ├── 支払
│   ├── 未払
│   └── 弥生販売から弥生会計
├── 給与・社会保険
│   ├── 概算
│   ├── 確定
│   └── 人件費
└── 経費請求書スキャンデータ

作る前にちょっと考える

  • 他の人(Windowsユーザ)が使えるように、クロスプラットフォームgolang で作った方が良いのでは? -> まず自分が作ってみて、自分が楽をするところから

  • Windowsユーザが使いまわせるように、バッチファイル(.bat)でいいのでは? -> まず!自分が!!楽をする!!!

  • bashzsh)でかけるのでは? -> うちはPerlが書きたい

  • フォルダ構造をどう指定する? -> 面倒なので、スクリプトに直接書いちゃう

  • 引数で指定したフォルダを作れたら良いのでは? -> 指定先が Windows共有(samba) なので、文字コードが面倒そう。とりあえず、macOSの環境で作って持っていくことにしよう

〜が面倒!しか書いてない。

出来上がったもの

最初は File::Spec とかいつも使ってるのでやろうと思ったのですが、せっかくなので使ったことのない Path::Tiny 使ってみました。

スクリプト名は mkdir_per_month.pl としました。最近、長くても分かりやすい名前つけようって感じの命名してます。

#!/usr/bin/env perl
use strict;
use warnings;

use utf8
    ; # スクリプト内にマルチバイト文字列(全角)書く時必須
binmode STDOUT, ':utf8'
    ; # macだけでの運用を想定してるので、出力時の文字コードをutf8で決めうち

use Path::Tiny
    ; # パスの作成をよしなにやってくれるモジュール(要cpanmでインストール)

my $target_root_path = path('.')
    ;    # スクリプトと同じところにところに作成する

my $parent_dir;    # 親ディレクトリ名の保存用変数

# スクリプト下部のDATAフィールドから持ってくる
for my $line (<DATA>) {

    chomp $line;    # 改行はしっかり削除

    # 行が文字から始まっていれば親ディレクトリ
    if ( $line =~ /\A\w/ ) {
        $parent_dir = path($line);  # パスを作って
        $parent_dir->mkpath;        # パスに相当するディレクトリを作成
    }

    # 文字から始まっていなければ子ディレクトリ
    else {
        $line =~ s/\s+//;   # 行頭のスペース削除
        my $path = path( $parent_dir, $line );
        $path->mkpath;
    }
}

__DATA__
支払いCSV
海外
給与・社会保険
    概算
    確定
    人件費
経費請求書スキャンデータ
仕訳データ作成
    支払
    未払
    弥生販売から弥生会計
支払データ
売上
立替金

フォルダ構成が三階層以上になった時はどうするんや、ってなりますが、そん時はそん時ってことで(再帰とか使う事になるんかな)

その他

macOS には tree コマンドがない

macOSのパッケージマネージャ、homebrew で インストールします

$ brew install tree

tree コマンドで文字化けする

$ tree
.
├── mkdir_per_month.pl
└── �\203\233�\202��\203\233�\202�

-N つけましょう

$ tree -N
.
├── mkdir_per_month.pl
└── ホゲホゲ

Path::Tiny でお世話になったページ