Rust

Rust という言語を実際にさわり始めてます。 まだ所感を述べるまでには至っていないですがこのエントリに所感を蓄積していきたいとおもいます。

Update: 2017/1/27

一次情報源

概要

リファレンス

コミュニティ

ニュース

開発環境

Mac

https://rustup.rs/

こちらでインストールすると IDE と仲良くできる様子なのでそうしています。 rustup ベースで日々開発するようになると色々サブコマンドを使うようになるのでこちらを参考に。

IDE

IntelliJ IDEA + Rust Plugin で記述しています。 インストールしているプラグインは

  • Rust
  • Toml

です。ざっくり概要はこちらをどうぞ。

エディタ

(こちら古いです、IntelliJ IDEA + Rust Plugin に移行済み) IDE 派ですが当然 IDE は無いので Atom エディタで記述しています。 インストールしているパッケージは

  • language-rust
  • linter-rust

です。

Cargo 系

formatting

IntelliJ IDEA + Rust Plugin での rustfmt on save な設定はこちら。 File Watchers Plugin をインストールしてある前提です。

rustfmt settings

linting

IntelliJ IDEA 上で clippy による Lint をかける設定はこちら。 この設定を行った上で、メニューの Tools => Rust => lint by clippy で実行するとコンソールに結果が出力されます。 lint settings

あらかじめ以下のコマンドでインストールしておく前提です。

$ rustup run nightly cargo install clippy

Web Application Development

https://github.com/flosse/rust-web-framework-comparison

言語自体がまだマイナーなこともあって、そんなに盛んにコミュニティが盛り上がってる状況ではなさそう。 今日(2016/11/27)時点では Iron が唯一数日以内にコミットがあるプロジェクトになっています。

Data Store

O/R Mapper

このライブラリがもっとも download されている様子。

http://diesel.rs/

だが、MySQL に対応していないのでそこを pull request するかといわれるとうーんみたいな。 Rust 界ではどうやら MySQL よりも PostgreSQL の方が好まれている様子が散見される。

MySQL

このライブラリがデファクトスタンダードな様子。

https://crates.io/crates/mysql

リモートの mysql サーバーに接続する際には以下のようにオプションを設定する必要がある。

fn get_opts() -> Opts {
    let user = "your_username";
    let addr = "your_address";
    let pwd = "your_password";
    let port = 3306;
    let mut builder = OptsBuilder::default();
    builder.user(Some(user))
        .pass(Some(pwd))
        .ip_or_hostname(Some(addr))
        .tcp_port(port)
        .prefer_socket(false);  // これ
    builder.into()
 }
fn main() {
    let options = get_opts();
    let pool = my::Pool::new(options).unwrap();
    // ...
}

Connection Pooling

とりあえずこれ使っとけ感がある。各データストア用ライブラリへの接続もグルーライブラリがあってすぐに始められる感じ。

Data Formats

YAML

こちらがデファクトスタンダードっぽい。

https://crates.io/crates/yaml-rust

dotenv

こちらがデファクトスタンダード。

https://crates.io/crates/dotenv

日付

これかな。

https://github.com/lifthrasiir/rust-chrono

シリアライズ・デシリアライズ

JSON とか、様々な形式で I/O する的なやつのデファクトスタンダードはこれかなぁ。

https://github.com/serde-rs/serde

追記: と思ってたんですが、実際に使ってみると serializer/deserializer のコードを生成する仕組みがとっても微妙で使わなくなりました。現在は rustc-serializeを使ってます。

docker image

official では無い様子ですがこちらがメンテされててよさそうです

logging

official とおもわれますが、大変良くできているなぁとおもいます。

password, hashing

こちらがデファクトかと

参照

Share this post:
Child pages:

Comments