本連載では複数回にわたり、GNU makeとMakefileについて基本的な機能を説明してきた。これでGNU make、およびMakefileのことはかなり理解できるようになったと思う。もっと込み入ったテクニックもあるのだが、それらは主にプログラミングのビルド処理で使われるものなので、ここではこれ以上深追いする必要はないだろう。今回からは本題である、このMakefileを仕事に適用する方法を取り上げていく。
Makefileとビジネスフロー
Makefileはもともとはプログラミングにおけるビルド処理を記述するためのものであり、現在でもそれはその通りなのだが、これまで説明してきたように、Makefileが体現している概念というものはビルド処理に限らずさまざまな処理に応用することができる。本質的に物事を整理する仕組みに向いている。
多くの場合仕事は順番に処理するものだが、場合によっては前提となる条件が複数になることもある。こうした関係性はMakefileに整理する関係性と同じだ。タスクをMakefileのターゲットとして整理していくことで、ビジネスフローをそのままMakefileに落とし込むといったことができる。
もちろん、Makefileに全てを落とし込んでいくには、ある程度プログラミングのスキルも必要になるのだが、そういった点も含めて長期にわたって取り組んで損をしない仕組みでもある。シェルスクリプトやプログラミングに詳しくなればなるほど、仕事の自動化がしやすくなるからだ。
また逆の発想となるが、Makefileにビジネスフローを落とし込む使い方をしていくと、久しぶりにその仕事をするときにMakefileを読むことで仕事の手順や内容を思い出すことができる。要するにMakefileが仕様書であり、手順書という状態になるのだ。これはかなり効果的なのでお勧めしたい。
例えばこんなアプローチ
一口に「仕事」といってもやることは千差万別だ。経理処理といった定型的な作業もあれば、プロジェクトごとにことなる作業もあり、粒度もまちまちではないかと思う。
どのように切り分けるかはその人のセンス次第だが、ある程度切りの良い単位で仕事を「ディレクトリ」に分けるようにしてみよう。例えば、~/Documents/に仕事ごとにディレクトリを作っていくイメージだ。
$ tree Documents
Documents
├── A社システム開発(Web)
├── B社システム開発(Web)
├── C社システム運用(サーバ)
├── C社システム運用(給与)
├── 経理処理(経費関係)
├── 経理処理(売上関係)
└── 出勤簿
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に落とし込むことができないなら、それはもしかすると処理自体が難しすぎるか、そもそも仕事として整理できていない可能性がある。そうした場合は、仕事そのものを一度見直してみた方がよいかもしれない。