定型のフォルダ構造を作る
先週はブログも書かずに何をしてたんだっけか
こんな感じで繋がっちゃったわけ。
— sironekotoro (@sironekotoro) 2020年6月12日
家で物理本読むの久しぶりだわ。だいたい通勤電車の中で電子書籍で読んでるからなぁ。 pic.twitter.com/VjLkdHgURN
あぁ、部屋片付けてたのか。
あれから1週間たった今も片付いてない。なんぼかは減ったけど、ベッドの上で処分品のダンボールと一緒に寝てます。
定型のフォルダ構造を作る
最近は経理業務の割合が70%ほどになりました。
経理というのは月次、四半期、年次、と繰り返しの多いお仕事です。
その中でも定型の業務ってのがいくつかあります。
毎月コツコツ、温かみのある手運用でやるのもいいのですが、楽をして早く帰ったりtwitter見てたいですよね?
ってことで、経理業務で毎月毎に作成するフォルダ構造を作るPerlスクリプトです。
こういうフォルダ構造を作ります。
$ tree -N . ├── 売上 ├── 海外 ├── 立替金 ├── 支払いCSV ├── 支払データ ├── 仕訳データ作成 │ ├── 支払 │ ├── 未払 │ └── 弥生販売から弥生会計 ├── 給与・社会保険 │ ├── 概算 │ ├── 確定 │ └── 人件費 └── 経費請求書スキャンデータ
作る前にちょっと考える
他の人(Windowsユーザ)が使えるように、クロスプラットフォームな golang で作った方が良いのでは? -> まず自分が作ってみて、自分が楽をするところから
Windowsユーザが使いまわせるように、バッチファイル(.bat)でいいのでは? -> まず!自分が!!楽をする!!!
フォルダ構造をどう指定する? -> 面倒なので、スクリプトに直接書いちゃう
引数で指定したフォルダを作れたら良いのでは? -> 指定先が 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 └── ホゲホゲ