Aho - AWKで作られたGit実装

[PR]記事内のアフィリエイトリンクから収入を得る場合があります
  • URLをコピーしました!

S 20240217 132033

今や世界中の開発者がバージョン管理ツール「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

S 20240217 134200

現在init、add/rm、status、commit、config、cat-fileといったコマンドが実装されており、reset、branch、switch、ls-filesなどを実装予定とのこと。cloneやpushなどのネットワーク関連機能は実装する予定はないそうです。

まとめ

AhoはAWKで作られたGit実装です。AWKでは簡単なプログラムしか作れないと思っていた方や、Gitの内部構造に興味のある方は参考にしてみてはいかがでしょうか。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次