今や世界中の開発者がバージョン管理ツール「Git」を使用しています。
GitはLinuxを生み出したリーナス・トーバルズ氏がカーネル開発用に作成したバージョン管理で、巨大なソースコードを扱うためのさまざまな工夫がこらされています。
本日紹介する「Aho」は、このGitをAWKで実装するオープンソースプロジェクトです。
開発者のDouglas Anderson氏は、最新のAWK(gawk)はワンライナー以上のことができ、(Ahoは)Gitの内部構造やGNU AWKの新しい機能を探求するための、トイプロジェクトだと説明しています。
実用性を追求したプロジェクトではありませんが、GitやAWKに興味のある方にとっては参考にすべき部分がありそうです。
なお「AWK」は開発者であるAlfred Aho、Peter Weinberger、Brian Kernighanの頭文字からつけられており、プロジェクト名のAhoもここからとられたものだと思われます(発音はエイホ)。
Ahoの使用方法
Ahoを使用するにはgawk 5.0以降とpigzコマンドが必要です。Linuxで動作する事を前提として作られており、BSD/Macでは動かない可能性もあるとのこと。
Ahoを試すには、プロジェクトのソースコードをgitコマンドでcloneし、その内部でahoコマンドを実行するのが簡単です(以下はUbuntu 22.04で確認しました)。
$ git clone https://github.com/djanderson/aho $ cd aho $ source ./modpath $ aho init Initialized empty Git repository in .aho $ aho add -v . add '.gitignore' add 'LICENSE' add 'README.md' add 'aho' add 'aho.awk' add 'include/add.awk' add 'include/branches.awk' add 'include/config.awk'
「aho init」「aho add」などgitでお馴染みのコマンドが使用できます。ahoでは.aho以下にバージョン管理のために必要なファイルが作られます。
treeコマンドで表示すると以下のような内容が表示されます。
$ tree .aho/ .aho/ ├── branches ├── config ├── description ├── HEAD ├── index ├── objects │ ├── 16 │ │ └── dfbb852d5efb5e1a75ad336c8f62ebb94a82f0 │ ├── 42 │ │ └── 2c6135819b57720ace71e3c6c97eb072b5b430 │ ├── 51 │ │ └── 2807153b4d4abffab8490ce97e5a164fe7de1f │ ├── 62 │ │ └── 9effea54a58d8734f57d9412a5964f69578477 │ ├── 64 │ │ └── c66bb623af4a10aa3bca2da143c75ab4e2186f [...] └── refs ├── heads └── tags
現在init、add/rm、status、commit、config、cat-fileといったコマンドが実装されており、reset、branch、switch、ls-filesなどを実装予定とのこと。cloneやpushなどのネットワーク関連機能は実装する予定はないそうです。
まとめ
AhoはAWKで作られたGit実装です。AWKでは簡単なプログラムしか作れないと思っていた方や、Gitの内部構造に興味のある方は参考にしてみてはいかがでしょうか。