<style> /* basic design */ .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p { font-family: 'Meiryo UI', 'Source Sans Pro', Helvetica, sans-serif, 'Helvetica Neue', 'Helvetica', 'Arial', 'Hiragino Sans', 'ヒラギノ角ゴシック', YuGothic, 'Yu Gothic'; text-align: left; line-height: 1.6; letter-spacing: normal; text-shadow: none; word-wrap: break-word; color: #444; } .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {font-weight: bold;} .reveal h1, .reveal h2, .reveal h3 {color: #2980b9;} .reveal th {background: #DDD;} .reveal section img {background:none; border:none; box-shadow:none; max-width: 95%; max-height: 95%;} .reveal blockquote {width: 90%; padding: 0.5vw 3.0vw;} .reveal table {margin: 1.0vw auto;} .reveal code {line-height: 1.2;} .reveal p, .reveal li {padding: 0vw; margin: 0vw;} .reveal .box {margin: -0.5vw 1.5vw 2.0vw -1.5vw; padding: 0.5vw 1.5vw 0.5vw 1.5vw; background: #EEE; border-radius: 1.5vw;} /* table design */ .reveal table {background: #f5f5f5;} .reveal th {background: #444; color: #fff;} .reveal td {position: relative; transition: all 300ms;} .reveal tbody:hover td { color: transparent; text-shadow: 0 0 3px #aaa;} .reveal tbody:hover tr:hover td {color: #444; text-shadow: 0 1px 0 #fff;} /* blockquote design */ .reveal blockquote { width: 90%; padding: 0.5vw 0 0.5vw 6.0vw; font-style: italic; background: #f5f5f5; } .reveal blockquote:before{ position: absolute; top: 0.1vw; left: 1vw; content: "\f10d"; font-family: FontAwesome; color: #2980b9; font-size: 3.0vw; } /* font size */ .reveal h1 {font-size: 5.0vw;} .reveal h2 {font-size: 4.0vw;} .reveal h3 {font-size: 2.8vw;} .reveal h4 {font-size: 2.6vw;} .reveal h5 {font-size: 2.4vw;} .reveal h6 {font-size: 2.2vw;} .reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p {font-size: 2.2vw;} .reveal code {font-size: 1.6vw;} /* new color */ .red {color: #EE6557;} .blue {color: #16A6B6;} /* split slide */ #right {left: -18.33%; text-align: left; float: left; width: 50%; z-index: -10;} #left {left: 31.25%; text-align: left; float: left; width: 50%; z-index: -10;} </style> <style> /* specific design */ .reveal h2 { padding: 0 1.5vw; margin: 0.0vw 0 2.0vw -2.0vw; border-left: solid 1.2vw #2980b9; border-bottom: solid 0.8vw #d7d7d7; } </style> <!-- --------------------------------------------------------------------------------------- --> # Rust勉強会 第14回 ## 14章 ### 2020/10/23 岡本拓海 --- ## 本日のメニュー 1. リリースプロファイルでビルドをカスタマイズする 1. crates.ioでライブラリを公開する 1. ワークスペースで巨大なプロジェクトを体系化する 1. crates.ioからバイナリをインストールする 1. 独自のコマンドを使用してCargoを拡張する プレゼン20分くらい+議論10分位で18:30前後終了を目指します。 --- ## リリースプロファイルでビルドをカスタマイズする Rustのビルドプロファイル - devプロファイル - 通常```cargo build```で生成される - 開発用途 - release プロファイル - ```cargo build --release```で生成 - リリース用 ---- ## ビルドのカスタマイズ **Cargo.toml**ファイルで最適化設定をカスタマイズできます。 ```toml [profile.dev] opt-level = 0 #最適化レベル0 [profile.release] opt-level = 3 #最適化レベル3 ``` --- ## crates.ioでライブラリを公開する(準備) > プロジェクトの依存としてcrates.ioのパッケージを使用しましたが、 自分のパッケージを公開することで他の人とコードを共有することもできます。 crates.ioのクレート登録所は、自分のパッケージのソースコードを配布するので、 主にオープンソースのコードをホストします。 ---- ## ドキュメンテーションコメント ```///```でドキュメンテーションコメントです (javadocとかdoxygenとかで見たことありますよね) 以下を記述して```cargo doc --open```でクレートのドキュメント用のHTMLを自動で生成してくれます ```rust= /// Adds one to the number given. /// /// # Examples /// /// ``` /// let five = 5; /// /// assert_eq!(6, my_crate::add_one(5)); /// ``` pub fn add_one(x: i32) -> i32 { x + 1 } ``` ---- ## よく使われるセクション * Panics * ドキュメント対象の関数がpanic!する可能性についての記述 * Errors * Resultを返す場合、起きうるエラーの種類条件についての記述 * Safety * 関数がunsafeな理由の説明 ---- ## 便利!ドキュメンテーションテスト '''cargo test'''を走らせた時ドキュメンテーションコメントにコードが含まれていると、そのコードも自動でテストしてくれます。 ```rust= /// Adds one to the number given. /// /// # Examples /// /// ``` /// let five = 5; /// /// assert_eq!(6, my_crate::add_one(5)); /// ``` pub fn add_one(x: i32) -> i32 { x + 1 } ``` ---- ## lib.rs等のファイルにコメントをつける ```//!```を使いましょう。 モジュールの内部で使用して、クレートやモジュール全体にドキュメントをつけます。 ---- ## pub useで便利な公開APIをエクスポートする これを ```rust pub mod kinds { pub enum PrimaryColor { // ---snip--- } pub enum SecondaryColor { // ---snip--- } } pub mod utils { use kinds::*; pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor { // --snip-- } } ``` ---- ## pub useで便利な公開APIをエクスポートする こうじゃ ```rust pub use kinds::PrimaryColor; pub use kinds::SecondaryColor; pub use utils::mix; pub mod kinds { // --snip-- } pub mod utils { // --snip-- } ``` ---- ## pub useで便利な公開APIをエクスポートする するとこうなる ```rust extern crate art; //use art::kinds::PrimaryColor; use art::PrimaryColor; //use art::utils::mix; use art::mix; fn main() { // --snip-- } ``` --- ## crates.ioでライブラリを公開する crates.ioに作ったライブラリを公開しましょう!! ---- ## Crates.ioのアカウントをセットアップする 1. https://crates.io/ に行ってアカウントを作る - Githubアカウントで作れる 3. https://crates.io/me/ でアカウント設定に行き、APIキーを取得 4. 以下のコマンドでcrates.ioにログインする ```bash cargo login some_like_your_api_key ``` ---- ## クレートにメタデータを追加する 以下のように最低限のメタデータを追加します ```toml [package] name = "guessing_game" version = "0.1.0" authors = ["Your Name <you@example.com>"] description = "A fun game where you guess what number the computer has chosen." license = "MIT OR Apache-2.0" ``` ---- ## Crates.ioに公開する 以下のコマンドでcrates.ioに自分のクレートを公開できます!! ```bash cargo publish ``` https://crates.io/dashboard を見ると自分の公開したクレートが表示されているはずです。 ---- ## 既存のクレートの新バージョンを公開する > クレートに変更を行い、新バージョンをリリースする準備ができたら、 Cargo.tomlファイルに指定されたversionの値を変更し、再公開します。 セマンティックバージョンルールを使用して加えた変更の種類に基づいて次の適切なバージョン番号を決定してください。 そして、cargo publishを実行し、新バージョンをアップロードします。 ---- ## cargo yankでCrates.ioからバージョンを削除する ``` bash cargo yank --vers 1.0.1 # 1.0.1バージョンを取り下げ cargo yank --vers 1.0.1 --undo # 取り下げの取り消し ``` ***取り下げは、コードの削除は一切しません*** 例えば、誤ってテストコードにアップロードされた秘密鍵を削除することはできません。もしやってしまったら秘密鍵を再作成しなければなりません。 --- ## ワークスペースで巨大なプロジェクトを体系化する 複数のクレートを含むディレクトリに,Cargo.tomlファイルを作成し、以下のような記述をすると、ディレクトリ下のクレート複数をまとめて```cargo build```でビルドできるようになります。 ``` [workspace] members = [ "adder", "add-one", ] ``` ---- ## ワークスペース外部のクレートに依存する 通常の外部のクレートを使用するのと同様に記述すれば、ワークスペースで使用するバージョンが一致するように依存関係を解決してくれます。 ``` [dependencies] rand = "0.3.14" ``` ---- ## ワークスペース中の特定のクレートのテストを実行する ```bash cargo test -p add-one ``` --- ## crates.ioからバイナリをインストールする cargo installコマンドにより、バイナリクレートをローカルにインストールし、使用することができます。 ```bash cargo install rur # rur:Universal Robotsを動作させるクレート ``` --- ## 独自のコマンドを使用してCargoを拡張する > Cargoは変更する必要なく、新しいサブコマンドで拡張できるように設計されています。 $PATHにあるバイナリがcargo-somethingという名前なら、cargo somethingを実行することで、 Cargoのサブコマンドであるかのように実行することができます。このような独自のコマンドは、 cargo --listを実行すると、列挙もされます。cargo installを使用して拡張をインストールし、 それから組み込みのCargoツール同様に実行できることは、Cargoの設計上の非常に便利な恩恵です! --- ## 参考資料 https://doc.rust-jp.rs/book-ja/ch14-00-more-about-cargo.html --- # ご清聴ありがとうございました
{"metaMigratedAt":"2023-06-15T15:19:08.102Z","metaMigratedFrom":"YAML","title":"第14回 14章","breaks":true,"description":"Rust勉強会第14回のスライド","slideOptions":"{\"theme\":\"white\",\"slideNumber\":\"c/t\",\"center\":false,\"transition\":\"none\",\"keyboard\":true}","contributors":"[{\"id\":\"610cfd52-ad2b-46e8-81e2-a79a85a7f06f\",\"add\":11755,\"del\":4530}]"}
    189 views