Hello, World!

難しいことは書けません

どうにかして楽にbladeファイルを作成したい

LaravelでWebサービスを作成した際にbladeファイルを作るのがすごくめんどくさかった
いちいち以下のようなコマンドを打っていた

mkdir -p resources/views/shop
mkdir -p resources/views/menu

touch resources/views/shop/index.blade.php
touch resources/views/menu/list.blade.php

めちゃくちゃめんどくさい

なのでテキストファイルを読み込んでそこに書かれているディレクトリとbladeファイルを作ってくれるコードを書いた
shellで書いてもいいのだけど、なんとかくPerlで書いてみようと思い書いてみた

file_list.txt
resources/views/shop/index.blade.php
resources/views/shop/shop_information.blade.php
resources/views/shop/shop_introduction.blade.php
resources/views/shop/shop_other.blade.php
resources/views/menu/sort.blade.php
resources/views/menu/list.blade.php
resources/views/menu/add.blade.php
resources/views/menu/edit.blade.php
resources/views/menu/delete.blade.php
resources/views/staff/sort.blade.php
resources/views/staff/list.blade.php
resources/views/staff/add.blade.php
resources/views/staff/edit.blade.php
resources/views/staff/delete.blade.php
make_file_dir.pl
#!/usr/local/bin/perl

my $make_dir_command = 'mkdir -p';
my $make_file_command = 'touch';
open(DATAFILE, "< file_list.txt") or die("error :$!");

if ($?) {
  print "エラーが発生しました。\n";
  print "$make_file_command:$!", "\n";
} else {
  while (my $data = <DATAFILE>){
    chomp($data);

    if ($data =~ /\//) {
      foreach my $row_data($data){
        my $line = $row_data;
        #末尾から/以降を削除
        $row_data =~ s/\/[^\/]*$//;
        system("$make_dir_command $row_data");
        system("$make_file_command $line");
        print "--実行コマンド--\n";
        print "$make_dir_command $row_data\n";
        print "$make_file_command $line\n";
      }
    } else {
      print "/が含まれていません。\n";
    }
  }
}

実行結果

$ perl make_file_dir.pl
--実行コマンド--
mkdir -p resources/views/shop
touch resources/views/shop/index.blade.php
--実行コマンド--
mkdir -p resources/views/shop
touch resources/views/shop/shop_information.blade.php
--実行コマンド--
mkdir -p resources/views/shop
touch resources/views/shop/shop_introduction.blade.php
--実行コマンド--
mkdir -p resources/views/shop
touch resources/views/shop/shop_other.blade.php

... 省略 ...

もしかしたら初めのif文はいらないかもしれないけど一応
テキストファイルのデータが変数$dataに入っていて、foreachでデータ1行1行(resources/views/shop/index.blade.php などが)変数row_dataに入ってる
そして、一旦そのデータを変数lineに保持
次に変数row_dataの末尾の"/"以降の部分(index.blade.phpなど)を削除する
ここで変数row_dataにはディレクトリ名だけの値が入っている(例:resources/views/shop)
system() で指定したコマンドを実行
(参考:http://www.tohoho-web.com/perl/cmd.htm
ディレクトリを作成している

$make_dir_command $row_data

ディレクトリが先に作られているので、ファイルを作成している

$make_file_command $line

これでできた!