ここで紹介するGQLは、一般的に知られているGraphQLではなく、Git Query Languageの略称です。
GQLを使用すると、SQL構文でGitリポジトリをクエリでき、リポジトリ内の全作者のコミット数の統計など、Gitリポジトリの様々な情報を迅速に取得できます。

1. インストールと使用

GitHubから最新版をダウンロードし、ローカルのPATH環境変数が指すフォルダに配置後、gqlにリネーム(ファイル名を変更)すれば直接実行できます。

2. 初回使用

コマンドラインでカレントディレクトリをGit作業ディレクトリに変更し、まず-hでコマンドラインオプションを確認します。オプションを指定しない場合は、対話モードで起動します。

gql -h
GitQL is a SQL like query language to run on local repositories

Usage: gitql [OPTIONS]

Options:
-r,  --repos <REPOS>        Path for local repositories to run query on
-s,  --script <file>        Script file contains one or more query
-q,  --query <GitQL Query>  GitQL query to run on selected repositories
-p,  --pagination           Enable print result with pagination
-ps, --pagesize             Set pagination page size [default: 10]
-o,  --output               Set output format [render, json, csv]
-a,  --analysis             Print Query analysis
-e,  --editor               Enable GitQL Rich Line Editor
-h,  --help                 Print GitQL help
-v,  --version              Print GitQL Current Version

3. 使用のポイント

  1. show tablesで利用可能なテーブルを照会します。commitsbranchesrefsdiffs_changestagsdiffsの6つのテーブルがあります。
c:/git/obsidian-translations[master] # gql
gitql > show tables
╭───────────────╮
│ Tables        │
╞═══════════════╡
│ commits       │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ branches      │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ refs          │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ diffs_changes │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ tags          │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ diffs         │
╰───────────────╯
gitql >
  1. テーブルの列構造を表示するには describe を使用します。
gitql > describe commits
╭─────────────────┬──────────╮
│ Field           ┆ Type     │
╞═════════════════╪══════════╡
│ commit_id       ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ title           ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ message         ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ author_name     ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ author_email    ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ committer_name  ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ committer_email ┆ Text     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ datetime        ┆ DateTime │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ parents_count   ┆ Int      │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ repo            ┆ Text     │
╰─────────────────┴──────────╯
  1. 2025-01-01以降のブランチを検索
 select * from branches where updated >= '2025-01-01 12:00:00' order by updated
  1. 2025-03-01以降のコミット情報を検索
 select title, datetime from commits where datetime >= '2025-03-01 00:00:00' order by datetime
  1. コミット者ごとのコミット回数統計(コミット回数トップ10)
SELECT author_name, COUNT(author_name) AS commit_num FROM commits GROUP BY author_name, author_email ORDER BY commit_num DESC LIMIT 10
  1. 特定のコミット者による今年のコミット情報を検索
SELECT title,author_name,datetime FROM commits WHERE LOWER(author_name) = "emisjerry" and datetime>='2025-01-01 00:00:00'
  1. リポジトリ内で特定の文字列を含むコミットメッセージを検索し、そのコミット者とコミット回数を表示
 select author_name,count(author_name) as Count from commits where message like '%zh_TW%' group by author_name

4. 💡 関連リンク

💡 解説記事(繁体中国語): https://jdev.tw/blog/8805/
💡 Explanation article(English): https://quaily.com/jdevtw-en/p/git-query-language-exploring-git-repository-command-line-tool
💡 解説記事(日本語): https://quaily.com/jdevtw-jp/p/git-query-language-exploring-git-repository-command-line-tool

✅GitHub: https://github.com/AmrDeveloper/GQL
✅公式ドキュメント: https://amrdeveloper.github.io/GQL/
✅もう一つのGitQL GitHub: https://github.com/filhodanuvem/gitql

5. チュートリアル動画

https://youtu.be/dnJRixV12Vs

##