Iku — 文法認識型 Go 整形ツール

Tool

概要

Iku(イク)は「Grammar-Aware Go Formatter」を掲げる、Goコードのための整形ツールです。特徴は単純に改行を整えるのではなく、ソースコードをGoの抽象構文木(AST)のノード種別に基づいて解釈し、同種のノードを連続させ、異なるノード種別の間に空行を挿入する方針を取る点にあります。これによって関数内やトップレベル定義などのまとまりが視覚的に明確になり、コードの流れを読み取りやすくします。まだ小規模なリポジトリで開発初期の段階ですが、シンプルな理念に基づいた整形アプローチが示されています。

GitHub

リポジトリの統計情報

  • スター数: 6
  • フォーク数: 0
  • ウォッチャー数: 6
  • コミット数: 3
  • ファイル数: 10
  • メインの言語: Go

主な特徴

  • ASTノードの種類に基づくグルーピングで空行を制御する独自ルール
  • 「同種の連続は空行なし、異種の間は空行あり」という明確なポリシー
  • 小さく把握しやすい実装で導入が容易(開発初期)
  • Nixフレーク(flake.nix)を含み、再現可能な開発環境を意識

技術的なポイント

Ikuは名前どおり「文法(Grammar)を意識した整形」を行う点が肝です。READMEから読み取れる方針は、ソースを単なるテキスト列ではなくASTとして扱い、ノードタイプ(例:宣言、代入、if文、for文、returnなど)ごとに“グループ”を作ることです。実装面では、Go標準のパーサ(go/parser, go/ast, go/token)を用いてソースを解析し、ノード列を辿って隣接ノードの種類を比較、必要に応じて空行を挿入・削除する処理が想定されます。既存の gofmt や go/printer と組み合わせ、コードの整形そのものは標準の整形に任せつつ「空行の付加ルール」だけを独立して適用するアプローチが、互換性と実用性の両立に向くでしょう。

コメントやドキュメント文字列の扱いは難所で、コメントをどのノードに紐づけて扱うか、また既存の空行や行戻りをどう保つかが重要です。さらに、トップレベルのインポートや変数・型・関数宣言のグルーピング、関数内部のステートメント列における論理的まとまり(初期化 → ビジネスロジック → エラーハンドリング → return)をどの程度までノード種別で自動判定するかが設計上の判断点になります。

リポジトリに flake.nix と flake.lock が含まれていることから、開発環境の再現性を重視しており、Nix利用者は容易にビルド・検証できる構成です。一方で、コミット数やファイル数が少ないため現状はプロトタイプ段階で、ルールの拡張性や設定可能性(ユーザーが空行ポリシーをカスタマイズできるか)については今後の実装次第です。CIやテストがどの程度整備されているかはリポジトリ規模から限定的と推測され、導入の際はローカルでの検証を推奨します。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • LICENSE.txt: file
  • README.md: file
  • flake.lock: file
  • flake.nix: file

…他 5 ファイル

まとめ

ASTに基づくシンプルな空行ポリシーで可読性を高める、小規模で開発初期のGo整形ツール。

リポジトリ情報:

READMEの抜粋:

🚀 Iku

Grammar-Aware Go Formatter

Iku is a grammar-based Go formatter that enforces consistent blank-line placement by AST node type.

Philosophy

Code structure should be visually apparent from its formatting. Iku groups statements by grammatical type and separates them with blank lines, making the code flow easier to read at a glance.

Rules

  1. Same AST type means no blank line: Consecutive statements of the same type stay together
  2. Different AST type means blank line: T…