Node.js環境でClangを利用した C、C++、Java、JavaScript、JSON、Objective-C、C# フォーマッター
(clang-format-node.lumir.page)Node.js環境でClangを利用した C、C++、Java、JavaScript、JSON、Objective-C、C# フォーマッターを開発しました。このプロジェクトは、すでに保守終了となった(deprecatedされた)angular の clang-format パッケージをベースに、新たに進めているプロジェクトです。
現在、多くの方に関心を寄せていただき、既存のレガシーユーザーの移行も進んでいるおかげで、月間ダウンロード数 20,000 回を突破しました。
また、このパッケージはフルテストカバレッジを達成しており、Node.js コアでも既存の angular の clang-format プロジェクトの代わりに現在のパッケージを利用する方向への PR が上がっていることから、安定性についても安心して使えると思います。
このパッケージは、LLVM の C コンパイラとして知られる Clang の clang-format をベースに、C、C++、Java などさまざまな言語のコード整形を行うパッケージです。Node.js 環境で最も有名なパッケージのひとつである Prettier と同じ役割を果たします。
ただし、Prettier パッケージでは C、C++、Java などのネイティブ言語のフォーマットをサポートしていないため、それらの言語の整形には clang-format を使うことが多いです。
Node.js 環境における clang-format は、Node.js コア開発のように JavaScript コードと C、C++ などのネイティブコードを一緒に書く必要がある場合に特に便利です。従来の clang-format では、最新バージョンを利用するために追加の依存関係をインストールする必要がありましたが、現在のパッケージを使えばその必要はありません。
また、従来の clang-format パッケージは、CI などで Node.js と npm を使ったワークフローに統合するのがかなり厄介な面がありましたが、現在のパッケージなら npm からダウンロードしてスクリプトを設定するだけでよいため、CI 環境で多くの利点があります。
主なポイントは以下のとおりです:
- 対応言語: C、C++、Java、JavaScript、JSON、Objective‑C、C# — clang-format ベースのフォーマッター
- Fully Secure Binaries: LLVM 公式ソースから直接ビルド。GitHub Actions Attestation Provenances と npm Build Provenances により完全に検証
- Zero dependencies: Python、C++ ツールチェーン、npm サブ依存関係は不要 — 純粋な Node.js のみで動作
- Drop-in replacement: 保守終了となった angular/clang-format を置き換えるように設計
- 幅広いプラットフォーム対応: OS/アーキテクチャ、Node.js バージョン、GitHub Actions ランナーイメージ、Docker ビルドイメージなどを広くサポート
- CI フレンドリー: npm インストール + シンプルなスクリプトで CI 統合が可能 — 複雑なネイティブ設定は不要
- 自動ビルド・リリース: clang-format の更新ごとに GitHub Actions がビルド・検証・PR 作成を行い → 自動で npm の新バージョンを公開
- 安定性の指標: フルテストカバレッジ達成、月間ダウンロード 20,000 回突破、Node.js コアで既存 angular パッケージの置き換え PR が進行中
- 新機能 (1.2.0): git-clang-format ラッパー — 変更されたファイルの「変更された行」だけを整形し、大規模リポジトリでのコミット履歴の破壊を最小化
なぜ git-clang-format が重要なのか?
- 全体のリフォーマットは、大規模プロジェクトではコミット履歴を汚してしまう可能性があります。
- git-clang-format は、実際に修正した行だけを整形することで段階的な導入を可能にし、時間の経過とともにスタイルの一貫性を自然に確保できます。
- lint-staged のようなファイル単位ではなく、行単位でより細かく適用できます。
どのような場面に適しているか?
- Node.js と C/C++/Java などのネイティブコードが混在したリポジトリ
- CI パイプラインでネイティブツールチェーンをインストールせずに整形を簡単に適用したい場合
- angular/clang-format を使っていたレガシーユーザーの安全な移行
リンク
まだコメントはありません。