便利そうな Rust の crate メモ


逐次編集

## 開発ツール

### tier 1 よく使うもの

* https://github.com/dtolnay/cargo-expand - マクロを展開して確認
* https://github.com/rust-lang/rustfmt - コードフォーマッタ
* https://github.com/rust-lang/rust-clippytest - linter
* https://github.com/rust-lang/rustfix - コード書き換え
* https://github.com/passcod/cargo-watch - file watcher
* https://github.com/kbknapp/cargo-outdated - 古い依存の確認
* https://github.com/RustSec/cargo-audit - 脆弱性の確認
* https://github.com/nabijaczleweli/cargo-update - cargo install しているツールの一斉更新
* https://github.com/matthiaskrgr/cargo-cache - ビルドキャッシュの掃除
* https://github.com/est31/cargo-udeps - 使ってない依存の確認 
* https://github.com/rsolomo/cargo-check - link しないので高速なコンパイルチェック
* https://github.com/mozilla/sccache - ビルドキャッシュ共有でコンパイル高速化

### tier 2 知っとくと便利なもの

* https://github.com/mozilla/grcov - コードカバレッジ計測
* https://github.com/rr-debugger/rr - 巻き戻し可能なデバッガ
* https://github.com/IgaguriMK/cargo-clean-recursive  - https://igaguri.hatenablog.com/entry/2020/06/07/133847
* https://github.com/tbrand/cargo-tomlfmt - Cargo.toml のフォーマッタ
* https://github.com/gnzlbg/cargo-asm - asm ツール
* https://github.com/google/evcxr - REPL
* https://github.com/rust-lang/miri - REPL
* https://github.com/mitsuhiko/insta - スナップショットテスト
* https://github.com/nextest-rs/nextest - すごいテスト
* https://github.com/svenstaro/cargo-profiler - プロファイラ
* https://github.com/rust-embedded/cargo-binutils - binutils

### tier 3 その他有象無象

* https://gitlab.henriktjader.com/pln/cargo-klee
* https://github.com/awslabs/git-secrets
* https://github.com/tj/git-extras
* https://github.com/orhun/git-cliff
* https://github.com/taiki-e/cargo-llvm-cov - コードカバレッジ
* https://github.com/hhatto/cargo-strict - `unwarp` を `expect` に書き換え
* https://github.com/RazrFalcon/cargo-bloat - コードサイズ検証ツール
* https://github.com/dtolnay/cargo-llvm-lines - llvm 確認
* https://github.com/facebookexperimental/MIRAI - MIR インタプリタ
* https://github.com/rust-fuzz/cargo-fuzz - libFuzzer
* https://github.com/rust-secure-code/cargo-geiger - unsafe コードの統計を取る
* https://github.com/onur/cargo-license - 依存 crate のライセンスを列挙
* https://github.com/EmbarkStudios/cargo-deny - 依存させたくない crate の調査
* https://github.com/xd009642/tarpaulin - コードカバレッジ
* https://github.com/luser/rustfilt - デマングル
* https://github.com/termoshtt/katexit - rustdoc に katex 挿入
* https://github.com/rust-cross/cargo-zigbuild - glibc のバージョンが固定できる

## rust 製 CLI ツール

### more info

- https://github.com/rust-unofficial/awesome-rust
- https://github.com/TaKO8Ki/awesome-alternatives-in-rust
- https://github.com/ibraheemdev/modern-unix
- https://zenn.dev/zenwerk/scraps/8d323eaa63b76d

## シェルツール

- https://github.com/BurntSushi/ripgrep - grep
- https://github.com/phiresky/ripgrep-all - grep
- https://github.com/sharkdp/fd - find
- https://github.com/jhspetersson/fselect - find
- https://github.com/dalance/procs - ps
- https://github.com/ogham/exa - ls 
- https://github.com/Peltoche/lsd - ls
- https://github.com/willdoescode/nat - ls
- https://github.com/dflemstr/rq - jq
- https://github.com/yamafaktory/jql - jq
- https://github.com/theryangeary/choose - awk
- https://github.com/ezrosent/frawk - awk
- https://github.com/chmln/sd - sed
- https://github.com/BurntSushi/xsv - csv
- https://github.com/wfxr/csview - csv

## 便利ツール

- https://github.com/nushell/nushell - bash
- https://github.com/dbrgn/tealdeer - tldr
- https://github.com/denisidoro/navi - tldr
- https://github.com/sharkdp/bat - cat
- https://github.com/SoptikHa2/desed - sed
- https://github.com/m4b/bingrep - readelf
- https://github.com/dandavison/delta - git-diff
- https://github.com/ajeetdsouza/zoxide - cd
- https://github.com/lotabout/skim - fzf
- https://github.com/sharkdp/hexyl - hexdump
- https://github.com/cyrus-and/gdb-dashboard/ - gdb
- https://github.com/Canop/broot - screen, tmux, ls, tree
- https://github.com/zellij-org/zellij - tmux
- https://github.com/rust-lang/mdBook - markdown to html
- https://github.com/Y2Z/monolith - mhtml
- https://github.com/watchexec/watchexec - watch
- https://github.com/Aloxaf/silicon - carbon (コードスニペットのサムネイル作るやつ)
- https://github.com/sharkdp/hyperfine - time
- https://github.com/Nukesor/pueue - gnu parallel
- https://github.com/r-darwish/topgrade - apt update その他全部やる
- https://github.com/anordal/shellharden - shellcheck
- https://github.com/ogham/dog - dig
- https://github.com/vamolessa/pepper - vim 
- https://github.com/ChuckDaniels87/rnr - rename
- https://github.com/ducaale/xh - curl
- https://github.com/saschagrunert/git-journal

## システムモニタ

- https://github.com/ClementTsang/bottom - top
- https://github.com/bvaisvil/zenith - top
- https://github.com/bootandy/dust - du
- https://github.com/nachoparker/dutree - du
- https://github.com/Byron/dua-cli - du
- https://github.com/imsnif/diskonaut - du
- https://github.com/imsnif/bandwhich - iftop
- https://github.com/orf/gping - ping

## マクロを書くときに使う

- https://github.com/dtolnay/proc-macro2 - テスト可能なproc_macro
- https://github.com/dtolnay/syn - proc-macroのトークンストリームからrust構文木を生成する
- https://github.com/dtolnay/quote - quote!マクロ
- https://github.com/dtolnay/paste - concat_idents! より強力なシンボル結合マクロ
- https://github.com/CreepySkeleton/proc-macro-error - proc_macroのエラーを見やすくする
- https://github.com/Goncalerta/proc-quote - quote!のproc_macro版
- https://github.com/rustyhorde/vergen -ビルド時の環境変数にgitやCargo.tomlの情報を入れる
- https://github.com/rodrimati1992/const_format_crates/

## 型レベルプログラミング

* https://github.com/lloydmeta/frunk
* https://github.com/Metaswitch/frunk-enum
* https://github.com/paholg/typenum
* https://github.com/dtolnay/ghost
* https://github.com/dtolnay/reflect
* https://github.com/japaric/cast.rs
* https://github.com/marcianx/downcast-rs
* https://github.com/Clikengo/usize_cast
* https://github.com/dtolnay/ref-cast
* https://github.com/willcrichton/tyrade

## よく使う型

- https://github.com/bluss/either - Either型
- https://github.com/rust-lang/regex - 正規表現
- https://github.com/rust-random/rand - 乱数
- https://github.com/servo/rust-url - url
- https://github.com/marshallpierce/rust-base64 - base64
- https://github.com/uuid-rs/uuid - uuid
- https://github.com/chronotope/chrono - DateTime
- https://github.com/chronotope/chrono-tz - TimeZone
- https://github.com/tokio-rs/bytes - Bytes
- https://github.com/rust-num/num - bigint,複素数,その他数値関連
- https://github.com/myrrlyn/funty - 数値型トレイト
- https://github.com/alkis/decimal - 128bit 10進浮動小数点数

## ロガー

- https://github.com/rust-lang/log - ロギングインターフェース
- https://github.com/env-logger-rs/env_logger - 簡易ロガー
- https://github.com/tokio-rs/tracing - 高機能ロガー

## derive マクロ

- https://github.com/rust-num/num-derive - enum と数値の相互変換
- https://github.com/serde-rs/serde - シリアライズ&デシリアライズインターフェース
- https://github.com/jeltef/derive_more - `#[derive(From,Into,TryInto,etc...)]`
- https://github.com/taiki-e/auto_enums
- https://github.com/Peternator7/strum
- https://github.com/Keats/validator
- https://github.com/idanarye/rust-smart-default
- https://github.com/bluejekyll/enum-as-inner
- https://github.com/xfix/enum-map
- https://github.com/stephaneyfx/enum-iterator
- https://github.com/jtempest/float_eq-rs
 
## 便利ユーティリティ

* https://github.com/rust-itertools/itertools - 便利イテレータ
* https://github.com/rust-lang-nursery/lazy-static.rs - 実行時の static 変数
* https://github.com/matklad/once_cell - 実行時の mutable な static 変数
* https://github.com/dtolnay/indoc
* https://github.com/dtolnay/remain
* https://github.com/dtolnay/readonly
* https://github.com/frozenlib/parse-display
* https://github.com/SimonSapin/rust-typed-arena
* https://github.com/servo/bincode
* https://github.com/bnjjj/chicon-rs
* https://github.com/lucab/caps-rs
* https://github.com/bytecodealliance/cap-std/


## データ構造とアルゴリズム

* https://github.com/japaric/heapless
* https://github.com/tov/min-max-heap-rs
* https://github.com/bitflags/bitflags
* https://github.com/fizyk20/generic-array
* https://github.com/petgraph/petgraph
* https://github.com/bluss/arrayvec
* https://github.com/indiv0/lazycell
* https://github.com/bluss/maplit
* https://github.com/havarnov/multimap
* https://github.com/garro95/priority-queue
* https://github.com/bodil/im-rs
* https://github.com/andylokandy/arraydeque
* https://github.com/assert-rs/predicates-rs
* https://github.com/carllerche/slab
* https://github.com/fitzgen/id-arena
* https://github.com/bitvecto-rs/bitvec
* https://crates.io/crates/enum_dispatch
* https://docs.rs/ascii/1.0.0/ascii/
* https://docs.rs/indexmap/1.7.0/indexmap/
* https://docs.rs/ordered-float/2.8.0/ordered_float/
* https://docs.rs/superslice/1.0.0/superslice/
* https://docs.rs/itertools-num/0.1.3/itertools_num/
* https://docs.rs/maplit/1.0.2/maplit/
* https://docs.rs/either/1.6.1/either/
* https://docs.rs/im-rc/15.0.0/im_rc/
* https://docs.rs/rustc-hash/1.1.0/rustc_hash/
* https://docs.rs/smallvec/1.6.1/smallvec/
* https://docs.rs/dashmap/4.0.2/dashmap/
* https://github.com/tantivy-search/tantivy
* https://github.com/toshi-search/Toshi

## シリアライズ

* https://github.com/serde-rs/json - JSON シリアライザ＆デシリアライザ
* https://github.com/vityafx/serde-aux
* https://github.com/dtolnay/path-to-error
* https://git.ondrovo.com/packages/json_dotpath
* https://github.com/toml-rs/toml
* https://github.com/dtolnay/serde-yaml
* https://github.com/marshallpierce/base64-serde
* https://github.com/BurntSushi/rust-csv
* https://github.com/KokaKiwi/rust-hex
* https://github.com/withoutboats/heck - camelcase to snake case
* https://github.com/tokio-rs/prost - protocol buffer
* https://github.com/mozilla-services/canonicaljson-rs
* https://github.com/ruma/js_option - serde_json でnull と undefined の区別をつける
* https://github.com/maciejhirsz/logos
* https://github.com/mitsuhiko/minijinja - jinja2
* https://github.com/google/zerocopy

## エラー

* https://github.com/dtolnay/anyhow - Any エラー型
* https://github.com/dtolnay/thiserror - `#[derive(Error)]`
* https://github.com/dtolnay/no-panic
* https://github.com/yaahc/eyre


## 並列処理

* https://github.com/rayon-rs/rayon - データ並列計算ライブラリ,並列イテレータ,タスク並列,スレッドプール
* https://github.com/crossbeam-rs/crossbeam - 並行計算ライブラリ,MPMC キュー,チャンネル
* https://github.com/Amanieu/parking_lot
* https://github.com/vorner/arc-swap
* https://github.com/jonhoo/rust-evmap -- left_right
* https://github.com/zesterer/flume
* https://github.com/bikeshedder/deadpool
* https://github.com/TimelyDataflow/differential-dataflow
* https://github.com/kanidm/concread

## 非同期

* https://github.com/tokio-rs/tokio - 非同期 IO ランタイム
* https://github.com/rustls/tokio-rustls - Tokioの TlsConnector の rustls 実装
* https://github.com/tokio-rs/tls/tree/master/tokio-native-tls - Tokioの TlsConnector の nativetls 実装
* https://github.com/rust-lang/futures-rs - Future
* https://github.com/hyperium/hyper - 低レベルHttpサーバ＆クライアント
* https://github.com/hyperium/hyper-tls - native-tls を使った hyper 用 Https アダプタ
* https://github.com/rustls/hyper-rustls - rustls を使った hyper 用 Https アダプタ
* https://github.com/seanmonstar/reqwest - 高レベルHttpクライアント
* https://github.com/sfackler/rust-native-tls - TLS ライブラリ(バックエンドはプラットフォームごとのssl共有ライブラリ)
* https://github.com/rustls/rustls - Rust で再実装された TLS ライブラリ
* https://github.com/bluejekyll/trust-dns - DNS＆リゾルバサーバ＆クライアント
* https://github.com/dtolnay/async-trait
* https://github.com/tower-rs/tower
* https://github.com/tokio-rs/async-stream
* https://github.com/smol-rs/async-compat
* https://github.com/yoshuawuyts/futures-concurrency
* https://docs.rs/tokio-stream/0.1.7/tokio_stream/index.html
* https://github.com/ihrwein/backoff
* https://lib.rs/crates/axum
* https://github.com/DataDog/glommio - io_using を使った runtime
* https://github.com/bytedance/monoio - io_using を使った runtime
* 

## データベース

* https://github.com/launchbadge/sqlx

## テスト・デバッグ・計測

* https://github.com/AltSysrq/proptest
* https://github.com/BurntSushi/quickcheck
* https://github.com/rust-fuzz/arbitrary
* https://github.com/asomers/mockall
* https://github.com/bheisler/criterion.rs
* https://github.com/mitsuhiko/insta
* https://github.com/mitsuhiko/similar-asserts
* https://github.com/tokio-rs/loom
* https://github.com/assert-rs/assert_cmd
* https://github.com/assert-rs/assert_fs
* https://github.com/tikv/fail-rs
* https://github.com/rust-fuzz/honggfuzz-rs
* https://gitlab.com/karroffel/contracts
* https://github.com/sile/trackable
* https://github.com/nvzqz/static-assertions-rs
* https://github.com/magnet/metered-rs
* https://github.com/rust-pretty-assertions/rust-pretty-assertions
* https://github.com/thomcc/rust-more-asserts
* https://github.com/la10736/rstest
* https://github.com/frondeus/test-case
* https://github.com/davidpdrsn/assert-json-diff
* https://crates.io/crates/cap
* https://github.com/loiclec/fuzzcheck-rs


## Web API

* https://github.com/awslabs/aws-sdk-rust
* https://github.com/zenlist/serde_dynamo
* https://github.com/awslabs/aws-lambda-rust-runtime
* https://github.com/serenity-rs/serenity - discord
* https://github.com/getsentry/sentry-rust - sentry


## 数学・計算

* https://github.com/rustsim/alga
* https://github.com/rustsim/nalgebra
* https://github.com/boxtown/statrs
* https://github.com/paholg/dimensioned
* https://github.com/rust-ndarray/ndarray
* https://github.com/rust-ndarray/ndarray-linalg
* https://github.com/rust-ndarray/ndarray-stats
* https://github.com/rust-bio/rust-bio
* https://github.com/argmin-rs/argmin
* https://github.com/georust/geo
* https://github.com/iliekturtles/uom
* https://github.com/Stoeoef/spade
* https://github.com/stainless-steel/probability
* https://github.com/brendanzab/approx
* https://gitlab.com/Redpoll/changepoint
* https://github.com/tspooner/rstat
* https://github.com/vbarrielle/sprs
* https://github.com/liborty/rstats
* https://github.com/statrs-dev/statrs
* https://github.com/pola-rs/polars
* https://github.com/smartcorelib/smartcore
* https://github.com/benjarison/eval-metrics
* https://github.com/rust-ml/linfa
* https://github.com/rust-ndarray/ndarray-stats
* https://gitlab.com/daingun/automatica
* https://gitlab.com/Redpoll/changepoint
* https://github.com/guillaume-be/rust-bert
* https://github.com/charles-r-earp/autograph
* https://github.com/LaurentMazare/tch-rs
* https://github.com/spearow/juice
* https://crates.io/crates/rand_chacha
* https://crates.io/crates/rand_hc
* https://crates.io/crates/rand_pcg
* https://crates.io/crates/rand_distr
* https://github.com/p-e-w/savage
* https://gitlab.com/nyx-space/nyx/


## CUI

* https://github.com/clap-rs/clap - コマンドライン引数パーサ
* https://github.com/kkawakam/rustyline - Readline
* https://github.com/vorner/signal-hook - Unixシグナルハンドラ
* https://github.com/Stebalien/term
* https://github.com/crossterm-rs/crossterm
* https://gitlab.redox-os.org/redox-os/termion
* https://github.com/mackwic/colored
* https://github.com/slog-rs/slog
* https://github.com/daboross/fern
* https://github.com/softprops/envy
* https://github.com/Geal/rust-syslog
* https://github.com/rust-psutil/rust-psutil
* https://github.com/knsd/daemonize
* https://github.com/GuillaumeGomez/sysinfo
* https://github.com/mitsuhiko/dialoguer
* https://github.com/rust-cli/human-panic
* https://github.com/JohnTitor/termize
* https://github.com/oli-obk/rust-si
* https://github.com/dotenv-rs/dotenv - dotenv reader
* https://github.com/loony-bean/textplots-rs - 文字列のグラフ描画
* https://github.com/ftxqxd/drawille-rs - 文字列のグラフ描画

## GUI

* https://github.com/hecrj/iced
* https://github.com/dhardy/kas
* https://github.com/redox-os/orbtk
* https://github.com/antoyo/relm
* https://github.com/dhardy/kas
* https://github.com/Boscop/web-view
* https://github.com/emilk/emigui
* https://github.com/linebender/druid

## graphic

* https://github.com/SiegeLord/RustGnuplot - グラフ描画
* https://github.com/milliams/plotlib - グラフ描画
* https://github.com/38/plotters - グラフ描画
* https://github.com/jrmuizel/raqote - グラフ描画
* https://github.com/nannou-org/nannou
* https://github.com/cloudhead/rgx
* https://github.com/nical/lyon
* https://github.com/parasyte/pixels
* https://github.com/Yatekii/imgui-wgpu-rs
* https://github.com/phaazon/luminance-rs
* https://github.com/jamwaffles/embedded-graphics
* https://github.com/17cupsofcoffee/tetra


## 動画・画像処理

* https://github.com/tuffy/matroska - matroska
* https://github.com/piderman314/bardecoder - QRコード
* https://github.com/image-rs/image - 画像ファイル
* https://github.com/raymanfx/libv4l-rs - 動画ファイル
* https://github.com/image-rs/imageproc - 画像処理
* https://github.com/rust-cv/ndarray-image - 画像処理アルゴリズム
* https://github.com/rust-cv/cv - 画像認識アルゴリズム
* https://github.com/rust-cv/ndarray-vision


## web frontend 

* https://github.com/rustwasm/gloo
* https://github.com/SoundRabbit/Kagura
* https://github.com/seed-rs/seed
* https://github.com/ivanceras/sauron
* https://github.com/yewstack/yew
* https://github.com/utkarshkukreti/draco
* https://github.com/emilk/egui
* https://github.com/Pauan/rust-dominator

## wasm/wasi

* https://github.com/rust-lang/libm
* https://github.com/rustwasm/wasm-bindgen
* https://github.com/bytecodealliance/wasi
* https://github.com/rustwasm/wee_alloc
* https://github.com/rustwasm/twiggy
* https://github.com/rustwasm/gloo
* https://github.com/cloudflare/serde-wasm-bindgen
* https://github.com/rustwasm/wasm-pack
* https://github.com/rustwasm/console_error_panic_hook
* https://github.com/WebAssembly/wabt
* https://github.com/webassembly/binaryen
* https://github.com/iamcodemaker/console_log
* https://wapm.io/package/wabt
* https://emscripten.org/
* https://github.com/GoogleChromeLabs/wasm-bindgen-rayon
* https://github.com/wasmerio/loupe

## パーサ

- https://github.com/lalrpop/lalrpop
- https://github.com/pest-parser/pest
- https://github.com/Geal/nom
- https://github.com/zesterer/chumsky

## ffi

* https://github.com/rust-lang/rust-bindgen
* https://github.com/getditto/safer_ffi
* https://github.com/dtolnay/cxx
* https://github.com/google/autocxx
* https://github.com/eqrion/cbindgen
* https://github.com/dtolnay/inventory
* https://github.com/fussybeaver/bollard


## no_std

- https://github.com/Rahix/avr-hal
- https://github.com/japaric/ufmt
- https://github.com/knurling-rs/defmt
- https://github.com/rust-embedded/nb
- https://github.com/japaric/ufmt
- https://gitlab.com/mmstick/numtoa
- https://github.com/dtolnay/ryu
- https://github.com/rkyv/rkyv

## その他の情報源

* List of crates that improves or experiments with Rust, but may be hard to find - https://users.rust-lang.org/t/list-of-crates-that-improves-or-experiments-with-rust-but-may-be-hard-to-find/17806/1
* https://qiita.com/qryxip/items/7c16ab9ef3072c1d7199
* https://github.com/TaKO8Ki/awesome-alternatives-in-rust