Upgrade to Pro — share decks privately, control downloads, hide ads and more …

crates.io にライブラリを公開してみた / publish-on-crates-io

haco
November 13, 2020

crates.io にライブラリを公開してみた / publish-on-crates-io

haco

November 13, 2020
Tweet

More Decks by haco

Other Decks in Programming

Transcript

  1. Mobility Technologies Co., Ltd. 2 主題 : Rust エコシステム紹介 1.

    crates.io 紹介 2. ライブラリ公開の手順 3. 自動化のススメ 話すこと
  2. Mobility Technologies Co., Ltd. 5 • RubyGems や • JavaScript

    の npm みたいなやつです crates.io って何?
  3. Mobility Technologies Co., Ltd. 9 https://www.reddit.com/r/rust/ 最新情報のキャッチアップは reddit がオススメ •

    あるある罠の Q&A • アップデート後のバグ報告 • ライブラリ作者によるハイテンションなリリース報告 • 今話題のブログ記事 etc… 余談
  4. Mobility Technologies Co., Ltd. 14 $ cargo login xxxxxxxxxx $

    cargo publish または… $ export CARGO_REGISTRY_TOKEN=”xxxxxxxxxx” $ cargo publish ライブラリ公開!
  5. Mobility Technologies Co., Ltd. 22 まずビルドツールが乱立していて… • GNU Make /

    CMake / Ninja / Meson / Bazel / Gradle (!) etc... ビルド方法がライブラリごとに異なるため… • 依存しているモジュールのバージョンを調べて • ライブラリをそれぞれの手順でビルドして • 生成されたファイル群を特定のパスに配置して やっと自分のアプリケーションをビルドできる (yum や apt で完結するなら楽だけど docker コンテナは必須) (クロスコンパイルのツールチェインが入ると GB 単位で膨れる) (そもそもパッケージ管理ツールで完結することはまずない ) C/C++ のプロジェクトは…
  6. Mobility Technologies Co., Ltd. 23 まずビルドツールが乱立していて… • GNU Make /

    CMake / Ninja / Meson / Bazel / Gradle (!) etc... ビルド方法がライブラリごとに異なるため… • 依存しているモジュールのバージョンを合わせて • ライブラリをそれぞれ異なる手順でビルドして • 生成されたファイルを特定のパスに配置して やっと自分のアプリケーションをビルドできる (yum や apt で完結するなら楽だけど docker コンテナは必須) (そもそもパッケージ管理ツールで完結することはまずない ) C/C++ のプロジェクトは… TL;DR ビルドが地獄!
  7. Mobility Technologies Co., Ltd. 28 複数個のライブラリを含むプロジェクトで ▪ libs/ ▪ foo/Cargo.toml

    ▪ bar/Cargo.toml ▪ baz/Cargo.toml ▪ app/ ▪ Cargo.toml foo, bar, baz をリリースしたい場合 たとえば…
  8. Mobility Technologies Co., Ltd. 29 $ cd libs/foo $ cargo

    publish --manifest-path=... を繰り返すのは面倒なので CI にやらせたい! 手作業で
  9. Mobility Technologies Co., Ltd. 30 • libs/*/Cargo.toml が更新されたらライブラリのリリース • master

    以外では --dry-run • リリース時は Cargo.toml のバージョンを上げる [package] name = "foo" version = "0.1.0" # これ 運用ルールを決める
  10. Mobility Technologies Co., Ltd. 31 更新されたファイルの一覧を取得して - id: files uses:

    jitterbit/get-changed-files@v1 with: format: 'json' 適当なリリース用のスクリプトに渡せば OK - name: Release applications if: ${{ github.ref == 'refs/heads/master' }} run: | ./builder/call.sh task release-apps \ --files='${{ steps.files. outputs.added_modified }}' GitHub Actions でやること
  11. Mobility Technologies Co., Ltd. 32 • Cargo.toml から version 取得

    • タグを作って git tag と git push 実行 • 最後に cargo publish お手軽! リリース用のスクリプトでやること
  12. Mobility Technologies Co., Ltd. 33 三行まとめ • ライブラリ公開は簡単! • GitHub

    Actions で自動化も簡単! • Rust やってこ 公開したライブラリ • log4rs-cases - crates.io • env-extractor - crates.io おわり