m4を使ってみる

30分プログラム、その160。よく聞くm4を実際に使ってみる。
題材は、HTMLの生成。
Webアプリを使っているとデバッグ用のページとリリース用のページを分けたいことがある。例えば、デバッグ用のページはJavascriptファイルを個別に指定しているけど、リリース用のページでは全部まとめてあるとか。

デバッグ用。

<html>
  <head>	
    <!-- ファイルを個別に指定する -->
    <script type="text/javascript" src="./a.js"></script>
    <script type="text/javascript" src="./b.js"></script>
    <script type="text/javascript" src="./c.js"></script>
  </head>
  <body>
  ..
  </body>
</html>

リリース用。

<html>
  <head>	
    <!-- full.jsはa.js,b.js,c.jsをまとめたもの -->
    <script type="text/javascript" src="./full.js"></script>
  </head>
  <body>
  ..
  </body>
</html>

使い方

デバッグ用のHTMLとリリース用のHTMLはほぼ同じものなので、ひとつのファイルから自動生成させる。

$ m4 template.html > release.html
$ m4 -D _DEBUG template.html > debug.html

ソースコード

元になるtemplate.htmlは次のようになる。

<html>
  <head>	
    # ifdef(`_DEBUG',デバッグ用,リリース用)
    ifdef(`_DEBUG',
          <script type="text/javascript" src="./a.js"></script>
          <script type="text/javascript" src="./b.js"></script>
          <script type="text/javascript" src="./c.js"></script>,
          <script type="text/javascript" src="./full.js"></script>)
  </head>
  <body>
  ..
  </body>
</html>