本日誌を始めて、13日目。やっと本日誌ページ用 m4 マクロを作成した。
私の Web ページ (http://www.j.dendai.ac.jp/~naney/ 以下) は m4 を利用して作成している。 m4 はマクロプロセッサである。 主に何に利用しているかというと、ヘッダやフッタなどの定型的な部分の生成などである。 ヘッダやフッタなどをマクロ化し、各ページでパラメータを指定して展開させることで、それぞれにあったものを生成する。 利点としては、例えばヘッダの形式を変えたい場合にマクロを書き換えることで、全ページを変更することができることなどがある。 SSI による include では各ページ固有の情報などのパラメータ部分がうまく扱えない。 ちなみに m4 ページの処理は、Autoconf、Automake を利用して、./configure; make; make install; で一発で済むようにしている。
前置きがながくなった。もちろんこのページのヘッダやフッタなどもマクロ展開で行っていたのだが、ナビゲーションの [Prev Day]、 [Next Day] などは毎日手でリンクを張っていた(実際には前日のものをコピーして書き換え)。 これは面倒だし、間違えもおきやすいので、この部分を処理するマクロを本日作成した。 まだあまりチェックしていないので、もしかしたらうまくリンクがつながらないかもしれない。
次はキーワードインデックス部分と、記事別ナビゲーション(似ている内容の記事ごとの、Prev、Next のリンク) の生成を自動化したいが、これは m4 だけではかなり辛いか(できるとは思うが)。
[ コンピュータ日誌 ]
NSIS のサイトによるとビルドに「SCons」を使うようしたらしい。
と興味深いツールになっているようだ。
現在プロジェクトLaTeXベースのドキュメント生成には GNU Make を使っているのだが、UNIX、Windows の両方でビルドできるようにするには ComSpec 環境変数の有無で使用するコマンドを切り換えたり等いろいろ面倒なので、代替ツールとして使えないかなと。
基本的な機能は Make に対する改良がなされているようであるし、コピー等ファイル操作も SCons 自体がもっているのでクロスプラットフォームでビルドできるようにするのも楽そうだ。
一方 Autoconf 系の機能については、インストール済みのライブラリの検出や実装レベルのチェック等を実装しているようである。 make check や make dist、make install 等にあたるターゲットに関する機能(あるいは規約)のようなものは無い。これは非常に残念。 結局自分が Ant を使わなくなったのも GNU Autotools にあるこれらの機能に欠けているからであるし。
実は私がPerl が好きな理由の一つとして、これらサポートが充実しているという点がある。Perl では ExtUtils::MakeMaker (あるいは Module::Build)があり、ビルドからテスト、ソースパッケージのパッケージングまでフレームワークが整っている。
SCons は Python ベースで、Makefile にあたるファイルも Python スクリプトである。 SCons が影響を受けた Cons は Perl ベースであったのだが、既に2001年5月ごろから開発が止まってしまっている。残念。
ということで Make の代替には使えそうであるが、GNU Autotools と同じようなことをするにはいろいろ手をかけないといけないといった印象。
ちょっとした文字列構文解析関係の C++ コードを書き始めた。 C++ は随分触ってなかったので「C++ で書き直すのを考慮してそれっぽく Perl で書くから後で書き直して」と最初は言っておいたのだが、それもあんまりだと思って C++ で書くことにした。
Debian GNU/Linux 上で書くので GNU Automake + CppUnit で。 「Perl + Test::Harness」や「Java + Eclipse + JUnit」や「C# + Visual C# + NUnit」などと比べるとやっぱりタルいな。
1つメソッド書くのに、
と 4ファイル5カ所編集しなければならない。 クラス追加時には Makefile.am にヘッダファイルとソースファイルをテストケース用のと含めて4ファイル書き加える必要があるし。
あー面倒。
でも C++ で書き始めると楽しいんだよなあ。
OS X に Homebrew でインストールした Emacs をしばらく使ってみて IME インラインパッチなるものがないと辛いということがよくわかりました。
今は Homebrew の emacs formula では IME インラインパッチが当たらなくなっているので自分で当ててインストールしなおしました。
パッチは @takaxp 氏の
を使いました。感謝。まずはパッチファイルを取得。
$ mkdir ~/tmp $ cd ~/tmp $ git clone git@gist.github.com:1d91107b311b63b57529.git
次に emacs formula を書き換えます。
$ brew update $ brew edit emacs
で起動したエディタで先頭の方に patch 処理と Autoconf・Automake への依存情報を追加します(/Users/naney は私の HOME ディレクトリ)。
class Emacs < Formula desc "GNU Emacs text editor" homepage "https://www.gnu.org/software/emacs/" url "http://ftpmirror.gnu.org/emacs/emacs-24.5.tar.xz" mirror "https://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz" sha256 "dd47d71dd2a526cf6b47cb49af793ec2e26af69a0951cc40e43ae290eacfc34e" # ここから追加 patch :p1 do url "file:///Users/naney/tmp/1d91107b311b63b57529/emacs-24.5-inline.patch" end depends_on "autoconf" => :build depends_on "automake" => :build # ここまで追加 bottle do ...
保存したらあとは Emacs をアンインストールし、書き換えた fomula で再度 Emacs をインストール。
$ brew uninstall emacs $ brew install --with-cocoa --with-gnutls --verbose emacs
やっほー。これで「Google 日本語入力で平仮名入力になっている時に C-x C-f と打ったらカレントバッファに変な文字が入力されてる!」なんていうのが無くなりました。快適です。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。