読者です 読者をやめる 読者になる 読者になる

TimeCapsule💊

やったこと,やること,やってみたいこと

Rustでパスワード生成ツールを作った話

Rustでランダムパスワードを生成するCLIツールを作りました。

command line parserにclap、ランダムな文字列を生成するためにrandを使用。

https://github.com/n2kia4/rpwg

経緯

clapいい感じだし、Rustで何かCLIツール作ってみよう ⇨ 普段からよくお世話になっているHomebrewでインストールしたpwgenをRustで書いてみよう、という雑な感じです。

インストール

cargo installでローカルにインストールすることが出来ます。

$ cargo install rpwg

使い方

使い方は以下の通り。

$ rpwg [FLAGS] [OPTIONS]

rpwgで実行すると、a-z, A-Z, 0-9, 特殊記号の中からランダムで8文字取り出し、パスワードを生成します。 (a-z, A-Z, 0-9, 特殊記号はそれぞれ少なくとも1文字はパスワードに含まれます)

FLAGS

$ rpwg -0

数字を除く。

$ rpwg -A

アルファベットの大文字を除く。

$ rpwg -S

特殊記号を除く。

OPTIONS

$ rpwg -l <LENGTH>

パスワードの長さを指定。

$ rpwg -q <QUANTITY>

生成する数量を指定。

$ rpwg -n <NUMBER_COUNT>

パスワードに含める数字の文字数を指定します。

$ rpwg -u <UPPER_COUNT>

パスワードに含めるアルファベット大文字の文字数を指定します。

$ rpwg -c <LOWER_COUNT>

パスワードに含めるアルファベット小文字の文字数を指定します。

$ rpwg -s <SYMBOL_COUNT>

パスワードに含める特殊記号の文字数を指定します。

終わりに

初めてRustでCLIツールを作ったのですが、無事にv0.1.0としてcrates.ioに公開出来ました。

必要最低限の機能しか実装出来ていないので、ここから改良重ねていきます。

追記

コマンドが増え次第、説明分を随時追加更新致します。

Versionを上げる際はcargo install rpwg -fでよろしいかと(現在v0.3.0が最新版)。

Rustを学び始めた

タイトル通りRustを学び始めました。

ので、とりあえずRustの概要 + インストール + Hello, world! に関する記事でも書くとします。

Rustとは

Mozillaが中心となってオープンソースで開発されている言語。

ある調査において開発者に愛されている言語ランキングで1位を獲得したそうで、fork数(12月18日現在:3721)を見ても愛され言語だなぁと実感しますね。

安全性、速度、並行性にフォーカスし、C++にも匹敵する性能、開発が活発、言語仕様が素晴らしいといった点が特徴ですかね。

Install

公式サイト: The Rust Programming Language

$ curl https://sh.rustup.rs -sSf | sh

Hello, world!

こちらを参考に実装します。(日本語Verはこちら)

$ mkdir hello_world && cd hello_world

main.rsを作成し、コードを書いていきます。

fn main() {
    println!("Hello, world!");
}

次はコンパイルと実行。

$ rustc main.rs
$ ./main

完了ですね。 ですが、Rustにはビルドシステム、パッケージマネージャ、プロジェクト管理を備えたCargoがあります。

Cargoを使ったHello, world!

実行可能アプリケーションを作る際は–binを、ライブラリを作る際は必要ありません。

$ cargo new hello_world --bin && cd hello_world

生成されるファイルはsrc/main.rs, Cargo.toml, .gitignoreの3つ。Cargo.tomlは設定ファイルで、Authorsの値はgit configを基に生成されます。

src/main.rsを覗くと、先ほどのmain.rsと同様のコードが既に用意されています。ではビルドと実行を。

$ cargo build
$ cargo run

完了ですね。ちなみに最適化を掛ける際はbuild, run共に–releaseをつけましょう。

とまぁこんな感じで、

最近はRustしか書いていない。

ブログはタイムカプセルだと思う

ブログを書く行為って、タイムカプセルにその時代の物を入れて地中に埋める行為と似ている。

その時の自分を保存するか、その時の物を保存するかの違いですね。

「過去を学ばない者は過ちを繰り返す」なんて言葉は本当にその通りだなと僕は思っていて、過ちを繰り返さない為に過去の自分を保存する。

ある年月後に記事(過去の自分)を見て、笑うのか、怒るのか、呆れるのか。。。

様々な反応をするだろうが、未来から過去を知って賢くなると同時に、過去から未来の自分へのメッセージを受け取ることすら可能だ。

僕はプログラマなので、基本的に技術ネタが多くなると思うのですが、もし他の誰かが読んだ時に参考になる記事を書くのはもちろん、僕にとってはかけがえのないタイムカプセルになるよう願います。