13 ポイント 投稿者 beenzinozino 2024-11-14 | 2件のコメント | WhatsAppで共有

こんにちは。Node.js環境でClangを使ったC、C++、Javaフォーマッタを開発しました。このプロジェクトは、すでにメンテナンスされていない(deprecated となった)Angular の clang-format パッケージをベースに、新たに進めているプロジェクトです。

1〜2か月ほど前にも一度同じ内容を投稿しましたが、パッケージの安定性がさらに高まり、新機能も追加されたため、改めて記事を書くことにしました。

現在、多くの方に関心を持っていただき、既存のレガシーユーザーの方々にも多く移行していただいたおかげで、週間ダウンロード数が10,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 環境で多くの利点があります。


さらに、1.2.0 バージョンへのアップグレードに伴い、新機能が追加されました。主な変更点は git-clang-format パッケージを追加したことです。

たとえば、C/C++ プロジェクトを進める中でコードフォーマットの必要性を感じ、clang-format などのパッケージを導入しようとする状況を考えてみましょう。

小規模なプロジェクトでは、コードフォーマットを一括で全面的に修正してからまとめてコミットしても、履歴の追跡にそれほど問題はないかもしれません。しかし、大規模なプロジェクトでは、コードフォーマットの導入によって既存コードのフォーマットを一括で全面的に修正する必要があるため、コミット履歴の追跡が煩雑になるおそれがあります。

ここで、開発者が1000行のコードのうち100行だけを修正し、コミット時に修正された100行だけに対してフォーマットチェックを行うとしたらどうでしょうか。第一に、修正された100行だけにフォーマットを適用すればよいため、1000行すべてを全面的に修正する必要がなくなり、コミット履歴の追跡が容易になります。第二に、開発の過程でコードがコミットされるたびにフォーマットが適用されたコードが徐々に増えていくため、時間が経つほどコードフォーマットの一貫性が高まっていきます。

このために使うのが git-clang-format パッケージです。lint-staged によってステージされたファイルだけを検査して CI の速度を向上させるように、それより一段進んで、変更されたファイルの中でも変更されたコードに該当する行だけを検査し、コードフォーマットチェックを適用できます。これも LLVM が標準で提供しているため、パッケージとしてラップして公開しました。

正確な使い方は公式ドキュメントに記載してありますので、ぜひご関心をお寄せください。(ただし公式ドキュメントは英語です) ご不明な点やご意見がありましたら、コメントいただけると幸いです。長文をお読みいただき、ありがとうございました。

公式ドキュメント: https://clang-format-node.lumir.page
リポジトリ: https://github.com/lumirlumir/npm-clang-format-node

2件のコメント

 
rumbarum 2024-11-18

オープンソース開発を応援します!

 
beenzinozino 2024-11-18

ありがとうございます!!🙇‍♂️