Java/Go/Node.js/Pythonのタスクランナー
概要
Zennで記事を1回書いてみようと思い、筆者がこれまでに使ったことがあるタスクランナーを整理した記事になります。各ツールの比較をする記事ではありません。
タスクランナーとは
この記事ではソースコードのビルド、静的解析、Unit Testの実行など、開発時に必要となる処理をコマンドラインから実行するソフトウェアを指しています。
各言語のタスクランナー
Java
Apache Maven
mvn
コマンドでビルドしたり、pom.xml
ファイルで依存性を管理するJava向けのツール。
最近はGradleばかりを使うようになりましたが、OSSライブラリを触っているとpom.xml
を読む機会はまだまだあります。
Gradle
この記事を書いている2024年6月時点ではJavaにおけるタスクランナー(ビルドツール)の主流はこのツールだと思っています。XMLではなくGroovyベースの宣言型Configでプロジェクト構成やライブラリの依存性を定義し、Spotbugsなどの静的解析ツールの実行もビルドコマンドの中に組み込むことができます。
どのツールでも似たような話かもしれませんが、独自のConfigが多く、最初は覚えることが多いのでサンプルなどを見ながらわからない部分をマニュアルで調べるというやり方の方がキャッチアップしやすいです。
Go
Task
YAMLファイルにタスクの内容を記述してそれを実行してくれるツール。
GoのタスクランナーはMakefile
を利用することも多いのですが、Windowsを利用する開発者を含むプロジェクトにおいてはマルチプラットフォーム対応が辛いことになりそうだなと考え、このツールを採用しました。
単純なコマンドであれば特に違和感なく使えます。でも結局パスの区切り文字とかWinとMacで切り替える処理を組み込んだりしないといけなかったので、これで良かったのかどうかは何とも・・・。
依存性の管理はGo標準のgo.mod
ファイルで行うため、Task
で行うのはコマンドのキックのみです。ビルド前にコード生成したり静的解析ツールを動かしたりする目的で使ってます。
Node.js
npm
Node.js標準で付いてくるパッケージ管理ツールですが、タスクランナーとして使う機会も多いです。
ただ、今から新たに開発を始めるのならばpnpm
の方が性能が良さそうなのでそちらを試した方が良さそうです。
独自の処理を実行するにはJavaScriptファイルを用意しないといけないケースがあったりしますが、比較的何でもできるのと静的解析ツールはコマンドを呼び出す定義をpackage.json
に記載するだけなのでそんなに不便することはない印象です。
Python
Pipenv
今Pythonで開発するのならばPoetry
なのでは?と思うかもしれませんが、Poetry
にはタスクランナーの機能が備わっていないので、筆者の経験ベースだとPythonのタスクランナーの経験はPipenvのみという状態でした。Poetry
が行うのはパッケージ管理のみなので別途Makefile
などで定義してあげる必要があります。
最近見かけるようになってきたrye
であればパッケージ管理もタスクランナーも対応できそうですが、まだ触ってないのであげてません。どうにもPythonはパッケージ管理ツールの入れ替わりがまだ激しいようなので今後も変わっていくのかなと思っているところです。
Discussion