午前2時の正夢

これは夢か現実か?とりあえず眠ることにしよう。

RustでCLIを作った

GW開発第一弾。コードは後で公開すると思う。
個人情報周りの隠蔽とかがガバガバなのでリファクタリングしてる。

モチベーション

zoomAPIでlamdaからAPIを叩いて定時に部屋をつくるって記事を見た。
zoomは最近良く使うのでAPIの仕様を見つつやりたかったRustの勉強に当てようと思ったので着手。

Rustはちゃんとやるといって何回は放置してきたので良い機会だと思った。
RocketでAPIサーバー作ったりwasmを履かせるあたりは触った。
けど言語的にまだまだ自分の中では不自由だった。あとは色々と書きながら使い所を見出したかった。

zoomAPIについても同様でこの数ヶ月で何百倍にもにユーザー増えたサービスのAPIは構造など勉強になると思った。

実際結構勉強にはなったのでおすすめ。

スタック

Rust cargoを使う。
Rustとcargoについてはドキュメントに詳しいことが乗っているのでそちらを参考にしてほしい。

バージョンはこんな感じ。

あとはRustの標準ライブラリと通信周りはreqwestを使った。

つまりどころ

コマンドプロンプトから引数を取るのにまずは苦労した。
標準ライブラリを参考にし実装して解決。
あとはエラーハンドリングとかコマンドオプションの判定の仕方とかはCLIで学ぶRustのサンプルを動かして学んだ。

通信周りもすんなりとは行かず色々と見て回ったがエラーメッセージが丁寧なので大体エラーメッセージを見つつ公式ドキュメントを読めば解決できた。

一番厄介だなと思ったのはRustのパラダイムを勉強しないと行けないことかなと。全てはmain.rsで呼び出されないといけないなど他の言語だとあんまり意識してないことを意識することもあった。

解決してないものは認証のときのメールアドレスをどうやって扱うのか知見がないのでOSS見ながら参考にしていこうと思う。

良いところ

Rustの良いところはコンパイル時のエラーメッセージがわかり易い。
あとVscodeで開発環境が作れるのがいい。もちろんintellijでもプラグインを入れるとできる。

開発環境構築についてはまた別の記事にする。

参考にしたもの

ドキュメント類
プログラミング言語Rust
CLIで学ぶRust

標準ライブラリ
std
reqwest

RustでできたCLI(エラーハンドリングとか色を付けるあたりとか参考にした)
bat
lsd