crates.io にライブラリを公開してみた / publish-on-crates-io
by
haco
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Mobility Technologies Co., Ltd. crates.io にライブラリを公開してみた t.aida / 相田岳彦 2020/10/29 MoT.rs #2
Slide 2
Slide 2 text
Mobility Technologies Co., Ltd. 2 主題 : Rust エコシステム紹介 1. crates.io 紹介 2. ライブラリ公開の手順 3. 自動化のススメ 話すこと
Slide 3
Slide 3 text
Mobility Technologies Co., Ltd. crates.io の紹介 3 01
Slide 4
Slide 4 text
Mobility Technologies Co., Ltd. 4 https://crates.io/ crates.io って何?
Slide 5
Slide 5 text
Mobility Technologies Co., Ltd. 5 ● RubyGems や ● JavaScript の npm みたいなやつです crates.io って何?
Slide 6
Slide 6 text
Mobility Technologies Co., Ltd. 6 モジュールを検索したり… こんな感じで
Slide 7
Slide 7 text
Mobility Technologies Co., Ltd. 7 ドキュメントを読んだり… こんな感じで
Slide 8
Slide 8 text
Mobility Technologies Co., Ltd. 8 依存モジュールを確認できたり… パッケージ管理に必要な一通りの機能が揃ってます こんな感じで
Slide 9
Slide 9 text
Mobility Technologies Co., Ltd. 9 https://www.reddit.com/r/rust/ 最新情報のキャッチアップは reddit がオススメ ● あるある罠の Q&A ● アップデート後のバグ報告 ● ライブラリ作者によるハイテンションなリリース報告 ● 今話題のブログ記事 etc… 余談
Slide 10
Slide 10 text
Mobility Technologies Co., Ltd. ライブラリを公開する 10 02
Slide 11
Slide 11 text
Mobility Technologies Co., Ltd. 11 まずはアカウント登録!
Slide 12
Slide 12 text
Mobility Technologies Co., Ltd. 12 まずはアカウント登録!
Slide 13
Slide 13 text
Mobility Technologies Co., Ltd. 13 APIトークン発行!
Slide 14
Slide 14 text
Mobility Technologies Co., Ltd. 14 $ cargo login xxxxxxxxxx $ cargo publish または… $ export CARGO_REGISTRY_TOKEN=”xxxxxxxxxx” $ cargo publish ライブラリ公開!
Slide 15
Slide 15 text
Mobility Technologies Co., Ltd. 15 ライブラリの公開は超簡単です! レッツトライ!! 君だけの最強のライブラリを公開してライバルに差をつけよう! ということで
Slide 16
Slide 16 text
Mobility Technologies Co., Ltd. 16 cargo.toml ファイルに一行追加するだけ [dependencies] serde_json = "1.0" もちろん使うのも簡単!
Slide 17
Slide 17 text
Mobility Technologies Co., Ltd. 17 …?
Slide 18
Slide 18 text
Mobility Technologies Co., Ltd. 18 「npm でも gem でもほとんど同じでしょ」 え、それって…
Slide 19
Slide 19 text
Mobility Technologies Co., Ltd. 19 「npm でも gem でもほとんど同じでしょ」 「当たり前のことじゃないの?」 え、それって…
Slide 20
Slide 20 text
Mobility Technologies Co., Ltd. 20 「npm でも gem でもほとんど同じでしょ」 「当たり前のことじゃないの?」 → そんなふうに考えていた時期が(ry え、それって…
Slide 21
Slide 21 text
Mobility Technologies Co., Ltd. 21 組み込み Linux で使われている C/C++ の世界観では全く当たり前ではない! それって当たり前のことじゃないの?
Slide 22
Slide 22 text
Mobility Technologies Co., Ltd. 22 まずビルドツールが乱立していて… ● GNU Make / CMake / Ninja / Meson / Bazel / Gradle (!) etc... ビルド方法がライブラリごとに異なるため… ● 依存しているモジュールのバージョンを調べて ● ライブラリをそれぞれの手順でビルドして ● 生成されたファイル群を特定のパスに配置して やっと自分のアプリケーションをビルドできる (yum や apt で完結するなら楽だけど docker コンテナは必須) (クロスコンパイルのツールチェインが入ると GB 単位で膨れる) (そもそもパッケージ管理ツールで完結することはまずない ) C/C++ のプロジェクトは…
Slide 23
Slide 23 text
Mobility Technologies Co., Ltd. 23 まずビルドツールが乱立していて… ● GNU Make / CMake / Ninja / Meson / Bazel / Gradle (!) etc... ビルド方法がライブラリごとに異なるため… ● 依存しているモジュールのバージョンを合わせて ● ライブラリをそれぞれ異なる手順でビルドして ● 生成されたファイルを特定のパスに配置して やっと自分のアプリケーションをビルドできる (yum や apt で完結するなら楽だけど docker コンテナは必須) (そもそもパッケージ管理ツールで完結することはまずない ) C/C++ のプロジェクトは… TL;DR ビルドが地獄!
Slide 24
Slide 24 text
Mobility Technologies Co., Ltd. 24 システムプログラミング言語では 統一されたツールがあること自体が画期的! なので…
Slide 25
Slide 25 text
Mobility Technologies Co., Ltd. 25 言い換えると… ウェブ開発のようなお手軽さで システムプログラミング言語を扱うことができる!! (ライブラリ公開の話から脱線してますね…) ということで
Slide 26
Slide 26 text
Mobility Technologies Co., Ltd. 自動化のススメ 26 03
Slide 27
Slide 27 text
Mobility Technologies Co., Ltd. 27 数が増えてくると結構大変 ライブラリ公開はお手軽だけど…
Slide 28
Slide 28 text
Mobility Technologies Co., Ltd. 28 複数個のライブラリを含むプロジェクトで ■ libs/ ■ foo/Cargo.toml ■ bar/Cargo.toml ■ baz/Cargo.toml ■ app/ ■ Cargo.toml foo, bar, baz をリリースしたい場合 たとえば…
Slide 29
Slide 29 text
Mobility Technologies Co., Ltd. 29 $ cd libs/foo $ cargo publish --manifest-path=... を繰り返すのは面倒なので CI にやらせたい! 手作業で
Slide 30
Slide 30 text
Mobility Technologies Co., Ltd. 30 ● libs/*/Cargo.toml が更新されたらライブラリのリリース ● master 以外では --dry-run ● リリース時は Cargo.toml のバージョンを上げる [package] name = "foo" version = "0.1.0" # これ 運用ルールを決める
Slide 31
Slide 31 text
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 でやること
Slide 32
Slide 32 text
Mobility Technologies Co., Ltd. 32 ● Cargo.toml から version 取得 ● タグを作って git tag と git push 実行 ● 最後に cargo publish お手軽! リリース用のスクリプトでやること
Slide 33
Slide 33 text
Mobility Technologies Co., Ltd. 33 三行まとめ ● ライブラリ公開は簡単! ● GitHub Actions で自動化も簡単! ● Rust やってこ 公開したライブラリ ● log4rs-cases - crates.io ● env-extractor - crates.io おわり
Slide 34
Slide 34 text
文章·画像等の内容の無断転載及び複製等の行為はご遠慮ください。 Mobility Technologies Co., Ltd. 34