🛢️

構造化ログを集計するCLIツールを作った + Rust初学者の学習記録

2022/06/07に公開

Rustを勉強するための習作として構造化ログを集計するCLIツールを作ったので簡単なツールの紹介と学習記録です。Rust興味あるんだけど・・・一歩踏み出す勇気が出ない・・・という方の後押しに慣ればと思って記事にしました。

https://github.com/toritoritori29/qma

何を・何のために作ったか

構造化ログを集計するCLIツールです。こんな感じで簡単な設定yamlを書いて置くとそれをもとに構造化ログを集計してマークダウンやCSV形式で標準出力に吐き出します。ログはファイルからを読み込むこともできますし、標準入力から受け取ることもできます。コマンドラインで定常的に構造化ログの集計する必要があるときに使ってみてください。

作成目的はRustの学習と個人開発サイトの管理の負担減です。やっぱり何か作らないと理解深まらないですよね。

Rustを学習した雑感

学習コスト+学習法

pythonやjavascriptに比べると学習コストは遥かに高いです。低レベルのシステムプログラミングを目的とした言語なのでスタックとヒープを意識する必要があるのと、それらを安全に扱うための所有権、借用という概念を新たに理解する必要があります。

所有権と借用回りは初めてだと非常に取っ付きにくくて使いたての頃は膨大な量のエラーを吐いていたのですが、逆に言うと変なところがあると全部コンパイラがわかりやすい(わかりにくい)文章で指摘してくれます。 そういう意味では突如意味不明なセグフォで落ちて発狂することになるC++などに比べるとストレスフリーで学習することができると思います。

これからRust初めて見たいという方でしたら、まずは王道のこちらを読んでみるのが良いと思います。とはいえ大分ボリュームがあるので、無理に全部読まずに12章あたりまで読めば何となく書き始めることができるようになると思います。おそらく作っていく中でトレイトオブジェクトやBox回りの知識が必要になると思うので、残りは詰まったら読むのがいいです。最初から全部理解するのは多分無理です。

https://doc.rust-jp.rs/book-ja/title-page.html

あとRust初める方は環境を最初にしっかり整えて置くほうがいいです。 私はこのYoutube見て環境整えました。Rustは基本的にエラーメッセージが丁寧なのでラフにエラーが見えるようにしておくと効率が段違いです。全然関係ないですが最近増えたVtuber系プログラム動画いいですよね。もっと増えて。
https://www.youtube.com/watch?v=677kcyyPwJ4

上記の動画でも紹介されていますがClippyという便利なツールがあります。これはRust的にイマイチな書き方を逐一教えてくれて練度上昇に寄与します。本当に便利なので絶対いれたほうがいいです。
https://github.com/rust-lang/rust-clippy

Rustの良い点

テスト・ドキュメンテーション・パッケージ管理の機能が高いレベルで組み込まれているのがRustの非常に良い点です。 テストはテスト対象と同じファイル内に直接テストコードを書いておけばcargo testコマンドですぐにテストできます。またドキュメントもコメントに直接マークダウンを書くことができるようになっていて、開発に必要なツールチェインがcargoに一通り含まれています。余計な環境構築に手間取らない+多くのユーザーで環境が統一されているのは本当にいいポイントだと思います。

あとちゃんと比較したわけではないのでプラセボかもしれないですが速いです。コンパイルしてバイナリにするので当然なのですが、基本的にコンパイル時に解決できることはコンパイル時に解決するので生成したバイナリには無駄が無いです。所有権や借用の仕組みを用いてメモリリークのあるような処理はそもそもコンパイルできないようになっているので、速度と安全性を両立できている良い言語だと思います。

Rustの悪い点

まだ少し触っただけなので肌に合わなかった点、程度のニュアンスです。些細なことではあるのですがfloat型が微妙に使いにくかったです。少し調べると分かるのですがrustのfloat型にはEqやOrdトレイトが実装されていないのでソートできません。理由としてはINFとINFの比較が定義できないから、ということのようなのですが、確かにそうだけど実用上定義しておいてほしい・・・みたいな気持ちがあります。

あとはライフタイム記述子キモいな、くらいです。慣れの問題だと思います。

おわりに

Rustは最初ハードル高いですが、少し慣れて来てもやっぱりハードル高い言語だと思います。なので逆にあまり怖がらずとりあえずやってみるというスタンスが大事だと思います。Rustに興味があったら是非初めてみてください!

Discussion