📝

Java/Go/Node.js/Pythonのタスクランナー

2024/06/24に公開

概要

Zennで記事を1回書いてみようと思い、筆者がこれまでに使ったことがあるタスクランナーを整理した記事になります。各ツールの比較をする記事ではありません。

タスクランナーとは

この記事ではソースコードのビルド、静的解析、Unit Testの実行など、開発時に必要となる処理をコマンドラインから実行するソフトウェアを指しています。

各言語のタスクランナー

Java

Apache Maven

https://maven.apache.org/

mvnコマンドでビルドしたり、pom.xmlファイルで依存性を管理するJava向けのツール。
最近はGradleばかりを使うようになりましたが、OSSライブラリを触っているとpom.xmlを読む機会はまだまだあります。

Gradle

https://gradle.org/

この記事を書いている2024年6月時点ではJavaにおけるタスクランナー(ビルドツール)の主流はこのツールだと思っています。XMLではなくGroovyベースの宣言型Configでプロジェクト構成やライブラリの依存性を定義し、Spotbugsなどの静的解析ツールの実行もビルドコマンドの中に組み込むことができます。

どのツールでも似たような話かもしれませんが、独自のConfigが多く、最初は覚えることが多いのでサンプルなどを見ながらわからない部分をマニュアルで調べるというやり方の方がキャッチアップしやすいです。

Go

Task

https://taskfile.dev/

YAMLファイルにタスクの内容を記述してそれを実行してくれるツール。
GoのタスクランナーはMakefileを利用することも多いのですが、Windowsを利用する開発者を含むプロジェクトにおいてはマルチプラットフォーム対応が辛いことになりそうだなと考え、このツールを採用しました。
単純なコマンドであれば特に違和感なく使えます。でも結局パスの区切り文字とかWinとMacで切り替える処理を組み込んだりしないといけなかったので、これで良かったのかどうかは何とも・・・。

依存性の管理はGo標準のgo.modファイルで行うため、Taskで行うのはコマンドのキックのみです。ビルド前にコード生成したり静的解析ツールを動かしたりする目的で使ってます。

Node.js

npm

https://www.npmjs.com/

Node.js標準で付いてくるパッケージ管理ツールですが、タスクランナーとして使う機会も多いです。
ただ、今から新たに開発を始めるのならばpnpmの方が性能が良さそうなのでそちらを試した方が良さそうです。

独自の処理を実行するにはJavaScriptファイルを用意しないといけないケースがあったりしますが、比較的何でもできるのと静的解析ツールはコマンドを呼び出す定義をpackage.jsonに記載するだけなのでそんなに不便することはない印象です。

Python

Pipenv

https://pipenv.pypa.io/en/latest/

今Pythonで開発するのならばPoetryなのでは?と思うかもしれませんが、Poetryにはタスクランナーの機能が備わっていないので、筆者の経験ベースだとPythonのタスクランナーの経験はPipenvのみという状態でした。Poetryが行うのはパッケージ管理のみなので別途Makefileなどで定義してあげる必要があります。

最近見かけるようになってきたryeであればパッケージ管理もタスクランナーも対応できそうですが、まだ触ってないのであげてません。どうにもPythonはパッケージ管理ツールの入れ替わりがまだ激しいようなので今後も変わっていくのかなと思っているところです。

Discussion