Skip to content

Instantly share code, notes, and snippets.

@sile
Last active April 3, 2019 04:47
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sile/c92348d3dd5b6580bda1500bcb31e712 to your computer and use it in GitHub Desktop.
Save sile/c92348d3dd5b6580bda1500bcb31e712 to your computer and use it in GitHub Desktop.
2017年6月時点のRustの開発用メモ

2017年6月時点のRustの開発用メモ

注意

  • 特に最新動向を追ったりはしていないので、情報が古い可能性はある

インストール

  • https://www.rustup.rs/ に記載の方法で必要なツールの一式が入る
  • バージョンは最新の安定版を使用

参考資料

インストールしているコマンド

# フォーマッタ
$ cargo install rustfmt

# コード補完とか諸々
$ cargo install racer

# 高速grep
$ cargo install ripgrep

# Rustコード片のお手軽実行用
# (https://github.com/DanielKeep/cargo-script の方がメジャー)
$ cargo install evalrs

# `cargo install-update -a`で、インストール済みライブラリ群を一括更新してくれる
$ cargo install cargo-update

Emacs

インストールパッケージ

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
(package-refresh-contents)

;; Rustモード
(package-install 'rust-mode)


;; Cargoモード
;;
;; 以下を良く使う:
;; - テスト実行:
;;   - Ctrl-K + Ctrl-C + Ctrl-T
;; - チェックビルド:
;;   - Ctrl-C + Ctrl-C + Ctrl-K
;;   - バイナリを生成しないので高速
;; - ドキュメントオープン:
;;   - Ctrl-C + Ctrl-C + Ctrl-V
;; - ドキュメント生成:
;;   - Ctrl-C + Ctrl-C + Ctrl-D
;;  - 前回実行コマンドの再実行:
;;   - Ctrl-C + Ctrl-C + Ctrl-C
(package-install 'cargo)

;; コード補完とか定義元に飛んだりとか
(package-install 'racer)
(package-install 'company-racer)

.emacs

;; ソース: https://github.com/sile/dotfiles/blob/master/.emacs

(add-hook 'rust-mode-hook #'cargo-minor-mode)
(add-hook 'rust-mode-hook #'racer-mode)

;; ファイル保存時に常にrustfmtを適用
(add-hook 'rust-mode-hook #'rust-enable-format-on-save)

(add-hook 'racer-mode-hook #'eldoc-mode)
(add-hook 'racer-mode-hook #'company-mode)

(setq company-tooltip-align-annotations t)
(setq racer-rust-src-path (concat (file-name-as-directory (getenv "HOME")) "dev/rust/rust/src/"))

(setq compilation-ask-about-save nil)

良く使うライブラリ

  • clap:
  • slog:
  • trackable:
    • 主にエラーハンドリング用のライブラリ
      • Rustでのエラーハンドリング自体に関してはRustbookが詳しい
    • try!?を、ほぼそのまま置き換えるイメージ
      • 一例としてtrack_try!というマクロを提供している
      • try!等と異なるのは、エラー発生地点までのトレース情報が付与されること
      • また、異なるErrorトレイト実装間の相互変換も容易になるようにしている
    • https://github.com/brson/error-chain の方がメジャー
  • serde:
    • https://github.com/serde-rs/serde
    • シリアライズライブラリ
    • serde_deriveと組み合わせることで#[derive(Serialize, Deserialize)]と書くだけで、たいていのデータ構造がシリアライズ可能になるので便利
    • 設定ファイルの読み込み処理や、ネットワークを跨いだデータ転送時のデータ変換処理等を自前で書かなくても良くなる
      • 少し複雑な設定をコマンドに指定したいなら、clapではなく、serde+tomlを使った方が楽
    • serdeconvでTOML/JSON/MessagePackに関する変換を手軽に行える
  • futures:
    • いわゆるFuture
    • 非同期I/O系のプログラミングをするなら事実上必須
    • futuresは「非同期I/O処理の記述」を行うのみなので、実際に実行するには別のライブラリが必要
    • 良く使うのはfibers
      • tokioの方がメジャー
  • その他:
    • byteorder, rand, num, etc

リリース周り

  • https://crates.io/ にアカウントを登録してcargo publishでリリース(パッケージ登録)が可能
  • crates.ioにpublishすると自動で https://docs.rs/ にも(バージョン毎の)ドキュメントを生成してくれる
  • ライブラリのリリース前には、crateレベルで#![warn(missing_docs)]を指定  - 公開コンポーネントに対するドキュメント記述漏れを防止
  • バイナリのcrateを登録した場合にはcargo install CRATE_NAMEでインストールが可能になる

その他

  • crateルート/examples/*.rsのファイル群はcaro run --example FILENAMEで実行可能
  • travis: https://github.com/sile/libflate/blob/master/.travis.yml
  • コードカバレッジ計測:
  • 開発サイクル:
    • 基本はcargo checkないしcargo testとコード修正の繰り返し
    • 少し変わった処理を走らせたり確認したい場合にはcargo run --examples FILENAMEでコマンド実行
    • リリース前にはcargo docで生成されたドキュメントを確認しつつ諸々微調整を行う
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment