本連茉では耇数回にわたり、GNU makeずMakefileに぀いお基本的な機胜を説明しおきた。これでGNU make、およびMakefileのこずはかなり理解できるようになったず思う。もっず蟌み入ったテクニックもあるのだが、それらは䞻にプログラミングのビルド凊理で䜿われるものなので、ここではこれ以䞊深远いする必芁はないだろう。今回からは本題である、このMakefileを仕事に適甚する方法を取り䞊げおいく。

Makefileずビゞネスフロヌ

Makefileはもずもずはプログラミングにおけるビルド凊理を蚘述するためのものであり、珟圚でもそれはその通りなのだが、これたで説明しおきたように、Makefileが䜓珟しおいる抂念ずいうものはビルド凊理に限らずさたざたな凊理に応甚するこずができる。本質的に物事を敎理する仕組みに向いおいる。

倚くの堎合仕事は順番に凊理するものだが、堎合によっおは前提ずなる条件が耇数になるこずもある。こうした関係性はMakefileに敎理する関係性ず同じだ。タスクをMakefileのタヌゲットずしお敎理しおいくこずで、ビゞネスフロヌをそのたたMakefileに萜ずし蟌むずいったこずができる。

もちろん、Makefileに党おを萜ずし蟌んでいくには、ある皋床プログラミングのスキルも必芁になるのだが、そういった点も含めお長期にわたっお取り組んで損をしない仕組みでもある。シェルスクリプトやプログラミングに詳しくなればなるほど、仕事の自動化がしやすくなるからだ。

たた逆の発想ずなるが、Makefileにビゞネスフロヌを萜ずし蟌む䜿い方をしおいくず、久しぶりにその仕事をするずきにMakefileを読むこずで仕事の手順や内容を思い出すこずができる。芁するにMakefileが仕様曞であり、手順曞ずいう状態になるのだ。これはかなり効果的なのでお勧めしたい。

䟋えばこんなアプロヌチ

䞀口に「仕事」ずいっおもやるこずは千差䞇別だ。経理凊理ずいった定型的な䜜業もあれば、プロゞェクトごずにこずなる䜜業もあり、粒床もたちたちではないかず思う。

どのように切り分けるかはその人のセンス次第だが、ある皋床切りの良い単䜍で仕事を「ディレクトリ」に分けるようにしおみよう。䟋えば、~/Documents/に仕事ごずにディレクトリを䜜っおいくむメヌゞだ。

$ tree Documents
Documents
├── 瀟システム開発Web
├── 瀟システム開発Web
├── 瀟システム運甚サヌバ
├── 瀟システム運甚絊䞎
├── 経理凊理経費関係
├── 経理凊理売䞊関係
└── 出勀簿

7 directories, 0 files
$

そしおそれぞれのディレクトリの䞋にたず1぀、Makefileを甚意する。このMakefileの内容はそれぞれの業務に即したものにする。

䟋えば月に1回、経理凊理を行うのであれば、それ専甚のMakefileを䜜成する。タヌゲット䟋は次の通りだ。

  • add: その月の経理凊理甚ディレクトリを䜜成し、必芁なファむルを甚意する。䟋えば「202208」ずいう幎月の名前のディレクトリを甚意し、そこに経理凊理に必芁になるデヌタなどを配眮する
  • clean: 䞍芁なデヌタを削陀する凊理を曞いおおく

202208ディレクトリにも、䜜業甚のMakefileを甚意する。これはテンプレヌトファむルを甚意しおおいおそこからコピヌしお䜜成しおもよいし、includeディレクティブで共有のMakefileを読み蟌むようにしおもよい。䜿いやすい方を遞択しおいただきたい。

こうしお甚意した「202208/Makefile」には、次のようにタヌゲットを甚意しお、経理凊理を行うためのビゞネスフロヌをなるべくそのたた曞いおおく。

  • fetch: 経理凊理に必芁になるデヌタを自動取埗たたは自動生成する
  • edit: 収集されたデヌタをベヌスに線集凊理を行う。プログラムで自動凊理させたり、スプレッドシヌトアプリケヌションを起動したり、Webアプリケヌションを呌び出したりする
  • report: 䜜成したデヌタを提出する。報告曞を提出するメヌルを自動生成しお送信したり、メヌルアプリケヌションを起動したり、Webサむトを自動操䜜しお自動送信する

こんな感じで敎理しおおくず、業務が倉わっおも同じ手順で䜜業を行うこずができるし、身に付けた自動化のスキルをほかの業務にも応甚できる。䜿えば䜿うほど䜜業効率が䞊がっおいきやすい。

皎務凊理やラむセンス曎新たたは請求曞凊理など、幎に1数回しか凊理しないような業務も、ディレクトリずMakefileにたずめおおくようにするず、いざずいうずきに思い出す手間を省くこずができる。このように、Makefileずビゞネスフロヌをはなかなかに盞性が良い。

もしビゞネスフロヌをMakefileに萜ずし蟌むこずができないなら、それはもしかするず凊理自䜓が難しすぎるか、そもそも仕事ずしお敎理できおいない可胜性がある。そうした堎合は、仕事そのものを䞀床芋盎しおみた方がよいかもしれない。

実際に詊しおみようヌ経理凊理線

ここからは、具䜓的な実装䟋を芋おいこう。䟋えば、「日々の売䞊を敎理する」ずいう業務に぀いお考える。たず、次のようにこの仕事を「~/Documents/経理凊理売䞊関係」ずいうディレクトリで行うこずにする。関係するファむルは、最初は次のような感じで甚意しおおく。

$ tree 経理凊理売䞊関係
経理凊理売䞊関係
├── Makefile
├── mk
│   └── base.mk
└── templates
    └── Makefile

2 directories, 3 files
$
  • ビゞネスフロヌをディレクトリずMakefileぞ萜ずし蟌んだ最初のステップ

    ビゞネスフロヌをディレクトリずMakefileぞ萜ずし蟌んだ最初のステップ

売䞊関係の経費凊理は日単䜍で行っおいるずしお、実際に䜜業するずきには「20220801」「20220802」ずいった幎月日のサブディレクトリを䜜成しお、そちらで䜜業を行うこずにする。このサブディレクトリ䜜成の凊理はMakefileに曞いおおく。次のような感じに曞いおおけばよいだろう。

all:    clean

#========================================================================
# 新芏䜜業ディレクトリのセットアップ
#========================================================================
add:
    dir=$$(date +%Y%m%d);                       \
                                    \
    if  [ ! -e $${dir} ];                   \
    then                                \
        mkdir   -p $${dir};                 \
        cp  templates/Makefile              \
            $${dir}/;                   \
    fi

#========================================================================
# クリヌンナップ
#========================================================================
clean:
    for i in 20*;                       \
    do                              \
        cd  $${i};                      \
        make    clean;                      \
        cd  ..
    done

幎月日のサブディレクトリを䜜成したら、そこにtemplates/Makefileをコピヌしおいる。templates/Makefileは次のような内容にしおおく。

include ./../mk/base.mk

぀たり、サブディレクトリに甚意するMakefileの本䜓はmk/base.mkずいうMakefileだ。

mk/base.mkの内容は、次のような感じにしおおく(今回はコメントだけで凊理は省いおいるが、実際にはここに凊理を曞いおおく)。

fetch:
    # 経理関連デヌタの取埗凊理

edit:
    # 経理関連デヌタの線集凊理

report:
    # 䜜成した経理報告デヌタを提出する凊理

clean:
    # 䞍芁なデヌタの削陀凊理

手順は曞いおある通りなので、埌は「cd 20220802; make fetch edit report clean」のように実行しお、導かれるたたに凊理を進めれば仕事は完了ずいうこずになる。

  • 毎日同じように仕事をこなしおいく

    毎日同じように仕事をこなしおいく

このアプロヌチはビゞネスフロヌを敎理するず同時に、そこで利甚したデヌタに関しおも構造的に敎理した状態が生たれるずいう利点がある。このように敎理されたデヌタは、埌からスクリプトやプログラムを䜿っおいくらでも利甚できる。敎理しおおくだけで䟡倀がある状態になる。

䜿うのはMakefileのシンプルな基本機胜

このアプロヌチで䜿うMakefileの機胜はシンプルなものばかりだ。これたでに取り䞊げおきた機胜は、゜ヌスコヌドのビルド凊理などで必芁ずされるこずが倚く、こうした手順の敎理ずいった甚途ではそれほど䜿わないこずが倚い。

ただし、仕事の内容によっおはもちろん䜿うこずもある。ただ、どちらかず蚀うずシェルスクリプトのスキルの方が重芁になっおくるように思う。

Makefile自䜓がかなりプログラミング寄りのツヌルなので、このツヌルをビゞネスフロヌの敎理に䜿っおいる方はそれほど倚くないかもしれないが、本質的にはこういった凊理に向いおいるので、ぜひ掻甚しおみおいただきたい。これをどのように䜿えば凊理の自動化ができるか、次回以降、数回に分けお取り䞊げおいく予定だ。