# Juliaパッケージ作成法; BasicBSpline.jlのメモ ###### tags: `Julia` ## 概要 * 基本的にインターネットからの寄せ集めの情報です * 参考文献は末尾にまとめて記載する. * 私の個人的なメモも兼ねてます. * インターネットには古い情報もあるので、迷わないようにまとめることにも一定の価値がある(はず) ## やったこと * `BasicBSpline.jl`というパッケージの生成 * 私の独自記法に合わせたBスプライン関連のパッケージ * https://github.com/hyrodium/BasicBSpline.jl ## つかいかた * GitHubからインストールできます ``` (pkg) > add https://github.com/hyrodium/BasicBSpline.jl ``` ## 環境 JuliaはWindowsを含めた色々な環境に対応しているので, 今回のパッケージの動作に影響する訳ではない. しかし, パスの表記などが異なる場合があるので念のため記載しておく: * Manjaro Linux ### 事前準備 * PkgTemplatesのインストール * Juliaのパッケージモードで`add PkgTemplates`する * sshキーを生成してGitHubに登録 * 以下の記事を参考にやれば良い. * https://qiita.com/shizuma/items/2b2f873a0034839e47ce * https://help.github.com/ja/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account * (sshキーの登録は何度もやってるが毎回やり方を忘れてしまう) ### パッケージ雛形の生成 これを実行した. ``` using PkgTemplates t = Template(; ssh=true, user="hyrodium", plugins=[ TravisCI(), GitHubPages(), ] , ) generate("BasicBSpline", t) ``` REPLでチマチマ入力するのは面倒なのでJunoかJupyterでやれば良い. ### `src`の編集 前の工程で`~/.julia/dev/BasicBSpline`以下にパッケージのテンプレートが生成されているはず. `src/BasicBSpline.jl`を編集すればおk. ### `test`の編集 (順番としては後でやったが, 説明の都合上ここで書く) `test/runtests.jl`を編集すればおk. ``` using BasicBSpline using IntervalSets using Test @testset "BasicBSpline.jl" begin # Write your own tests here. @testset "Knots" begin @test zero(Knots)==Knots([]) @test Knots(1:3)==Knots([3,2,1]) @test Knots([-1,2,3])+2Knots([2,5])==Knots([-1,2,2,2,3,5,5]) @test Knots([-1,2,3])+2Knots([2,5])==Knots([-1,2,2,2,3,5,5]) end @testset "BSplineSpace" begin P = BSplineSpace(2,Knots([1,3,5,6,8,9])) @test BSplineSupport(2,P)==3..8 @test dim(P)==3 end end ``` 上記のように`testset`が入れ子になっててもおk. ### パッケージ依存関係の追加 * `~/.julia/dev/BasicBSpline`に移動してからJulia起動 * pkgモードで`activate .`する * `add IntervalSets`する ### documentの生成 * `~/.julia/dev/BasicBSpline/docs`に移動 * 以下を実行 ``` julia --project=docs -e ' using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate(); include("docs/make.jl"); ' ``` * `docs/build/`に移動 * `python3 -m http.server --bind localhost`を実行 * `http://localhost:8000/`にアクセスして確認 ### リポジトリにpush * `Initialize with README.md`**せずに**リポジトリを作成 * `~/.julia/dev/BasicBSpline.jl`に移動 * `git push -u origin master`する ### デプロイキーの作成 * 以下のコードを(どこでも良い?)実行する. ```julia using DocumenterTools # Travis.genkeys(user="hyrodium", repo="git@github.com:hyrodium/BasicBSpline.jl.git") こちらはdeprecated DocumenterTools.genkeys(user="hyrodium", repo="git@github.com:hyrodium/BasicBSpline.jl.git") ``` * 2種類の文字列が出てくるので前者をDeploy keyとしてGitHubに登録する. * https://github.com/hyrodium/BasicBSpline.jl/settings/keys/new * 名前は適当に`TravisDocumenter`とかでおk * Allow write accessにチェックを入れる * TravisCIにログイン * https://travis-ci.org/account/repositories * ここでリポジトリを選択 * https://travis-ci.org/github/hyrodium/BasicBSpline.jl/settings * ここで後者の長い文字列を追加 * これで設定完了 ### Gitのタグ付け * https://github.com/hyrodium/BasicBSpline.jl/releases * Create a new releaseする * `v0.1.0`とかをタグに設定 ### GitHubからcloneして編集 ``` (pkg) > dev https://github.com/hyrodium/BasicBSpline.jl ``` (たぶんこれでおk) ### ドキュメントの追加編集 PkgTemplates.jlで生成した雛形では`docs/src/index.md`は以下のようになっている. ````markdown # BasicBSpline.jl ```@index ``` ```@autodocs Modules = [BasicBSpline] ``` ```` これを編集する. juliaの方言がかなり入ったmarkdownなので慣れるまで少し掛かりそう. この辺りの処理をしているパッケージは[Documenter.jl](https://github.com/JuliaDocs/Documenter.jl)である. ## 参考資料 * [PkgTemplates による Julia パッケージの作り方(前半)](https://qiita.com/SatoshiTerasaki/items/24443f20852ed60968bf) * 主な参考資料はこちら * [PkgTemplates による Julia パッケージの作り方(後半)](https://qiita.com/SatoshiTerasaki/items/f43a7730bcf57f4b9572) * 主な参考資料はこちら * [Juliaのパッケージ開発に便利なPkgTemplate, Revise, developコマンド](https://qiita.com/mametank/items/43330a9452f0039ca22d) * [Julia Pkg modeの操作](https://qiita.com/skiing_LAL10/items/0c0132a34629fbc8a91f)