💪

最強のJuliaパッケージテンプレートを考えた

に公開
2025/09/11

これまでに10以上のJuliaのパッケージを公開してきた経験を元に, Juliaのパッケージを作るときに用いるPkgTemplates.jlの設定ファイルの推奨設定を公開しました.

依存パッケージ

パッケージの生成とドキュメントのデプロイキーの登録に次の2つのパッケージが必要となります. 次のコードを実行してインストールしましょう.

import Pkg; Pkg.add("PkgTemplates")
import Pkg; Pkg.add("DocumenterTools")

テンプレート

下記の設定ファイルの2-4行目の user, authors, repo は自分の環境に合わせて変えてください. Antique.jlの場合, それぞれ"ohno", ["Shuhei Ohno"], "Antique.jl"となります.

template.jl
# Options この3行を自分で書き換える!!!
user    = "JuliaFewBody"
authors = ["Shuhei Ohno", "Martin Mikkelsen"]
repo    = "FewBodyHamiltonians.jl"

# Package Template
using PkgTemplates
template = Template(;
  dir     = @__DIR__,
  user    = user,
  authors = authors,
  julia   = v"1.11",
  plugins = [
    # https://juliaci.github.io/PkgTemplates.jl/stable/user/#Default-Plugins
    ProjectFile(; version = v"0.0.1"),
    SrcDir(),
    Tests(; project = true),
    Readme(),
    License(),
    Git(; ignore = ["*/Manifest.toml"]),
    GitHubActions(; extra_versions = ["1.11"]),
    CompatHelper(),
    TagBot(),
    # Secret(),
    Dependabot(),
    # https://juliaci.github.io/PkgTemplates.jl/stable/user/#Code-Coverage
    Codecov(),
    # https://juliaci.github.io/PkgTemplates.jl/stable/user/#Documentation
    Documenter{GitHubActions}(),
    # https://juliaci.github.io/PkgTemplates.jl/stable/user/#Miscellaneous
    Citation(; readme = true),
    Formatter(),
  ],
)
template(repo)

# Deploy Keys
using DocumenterTools
DocumenterTools.genkeys(;
  user = user,
  repo = repo,
)

https://gist.github.com/ohno/f3b1eb2c8f3a7e6803c34c8aab56e869?file=template.jl

補足

4点補足があります. まず, 実行時に表示される案内(英語だけど本当に書いてある通り)に従って, 生成される2つのキーを登録します. カバレッジ分析を行う場合はCodecovはGitHub連携でログインし, Settings> Global Upload Tokenかアップロードキーを取得してリポジトリに登録します. 最後に, 生成されるCITATION.bibの中にあるバージョンが v1.0.0-DEV になってしまっているので修正しましょう. この問題は解決したので, そのうち必要なくなります.

  1. Deploy keys Documenter
  2. Repository secrets DOCUMENTER_KEY
  3. Repository secrets CODECOV_TOKEN
  4. version = {v1.0.0-DEV} in CITATION.bib

そのうちパッケージの生成とこれらの操作を自動で行うGitHub Appを作りたいと考えています.

応用例

下記の組織のパッケージはいずれもこのテンプレートを活用しています.

https://github.com/orgs/JuliaFewBody/repositories

まとめ

PkgTemplates.jlを利用して CompatHelper, TagBot, Dependabot, Codecov, Documenter, Citation など標準的な機能を全て含めたパッケージの雛形を生成する方法を簡潔にまとめました. ご質問やご提案はコメント欄または下記Xアカウントまでお願いいたします.
https://x.com/ohnolab

Discussion