Rust未経験者が勉強をかねてCLIツールを作り始めてみました。
今回はなぜRustを使うことにしたのかを紹介します。

Table of Contents

はじめに

筆者のスペック

Rustを他言語と比較するため、筆者の言語経験を共有しておきます。

ほぼ毎日書いている

  • Python (2013-)
  • TypeScript (2016-)

Pythonはforkwellで上位0.0%でした 😄

たまに書いている

  • bash (2013-)
  • JavaScript (2012-)
  • AutoHotKey (2012-)

昔かなり書いていた

プロダクトなどの作成経験はあるが、今はアクティブに使っていないものです。

  • VBA (2008-2011)
  • Java (2011-2015)
  • Scala (2015-2016)
  • Nim (2018)

基本文法はなんとなく分かる

一通り勉強はしたがプロダクトなどを作成していないものです。

  • C (2010)
  • C++ (2010-2011)
  • Haskell (2017)
  • Golang (2018)

雰囲気だけ分かる (読めない)

チラッと仕様を見ただけで書いたことがないものです。

  • Perl
  • Ruby
  • PHP
  • C#

なぜRust?

Rustに至るまでかなり悩みましたが理由は3つあります。

  • Low-level programmingの経験値を上げたい
  • シングルバイナリで高速実行可能なイマドキの言語を使いたい
  • NimやGolangには不満がある

1つずつ補足します。

Low-level programmingの経験値を上げたい

筆者のスペックから分かる通り、Low-levelの言語経験がほとんどありません。
2010年にCとC++をやっていますが、どちらも業務で使用できる最低限のレベルです。

言語を学ぶときは異なるパラダイムの方が技術の幅が広がるというのが最大の理由ですね。

シングルバイナリで高速実行可能なイマドキの言語を使いたい

私が主に使っている言語でCLIツールを作成すると、実行時に実行環境が必要です。
PythonならPythonが、TypeScript(JavaScript)ならNodeという風に。

シングルバイナリにする方法もありますが、以下のデメリットがあるためオススメはできません。

  • サイズが肥大化する
  • 環境によって動かないことも多い

開発時は問題ありません。ただ、配布時に実行環境は利用者のハードルを上げます。
特に管理者権限を持たないサーバやDockerコンテナを使用する場合は色々と面倒でしょう。

また、Pythonは非常に速度が遅い言語です。
APIアクセスがメインのツールであれば問題ありませんが、Local処理がメインの場合は致命的です。

加えて.. 今の時代にCやC++を使う気にはなれません。
使うとしたら以下の言語のいずれかになると思いました。

  • Golang
  • Rust
  • Nim

NimやGolangには不満がある

Rustを使う前にNimやGolangも使ってみました。
しかしそれらを諦めてRustを選ぶことにしました。

Golang

GolangをCLIツール作成に使うことは業界でも一般的だと思います。
特に昨今のインフラレイヤーでは重宝されています。

しかしGolangは私にとってあまりにシンプル過ぎました…

教育コストを下げ、皆で無骨にソースを書くためには非常に良い言語かもしれません。
しかしジェネリクスや関数型思考のメソッド(map, filter等)が無い世界に今更戻る気にはなれませんでした。

TODO: 詳細

Nim

Nimは間違いなく最も文法が好きな言語の1つに入ります。(他にはKotlinも好きです)

Pythonを踏襲した文法は非常にクールです。
それでいてPythonには無い静的型付けや高速処理、ラムダ式の簡略化などエレガントです。

実際にプロダクトを作成し、本ブログでも記事にしています。

しかしNimにはたった1つ足りないものがありました。知名度です。

Versionも1に達していませんし、言語のバージョンアップ速度も緩やかです。
コミュニティもかろうじて日本コミュニティがある程度.. 企業の利用実績もほとんどありません。

いくら素晴らしい言語でも消えてしまうリスクを背負って開発をし続ける気にはなれないわけです。
非常に残念! 😢

作っているもの

Miroir CLIというツールを作っています。

まだREADMEも無く、バージョニングすらしていません。
私が開発しているMiroirというWebツールで参照するデータをCLIで操作するためのものです。

単体での利用価値はありませんが、Miroirを使うことがあればご利用いただければと思います。

今のところはRustの厳しい所有権による洗礼を受けているところです 😇

学習

Rustの学習には以下のサイトを利用しています。

各節、シンプルにまとまっているので非常に読みやすいです。
3. Rustで学ぶは実際にモノを作りながら無駄なく知識を学べるため、Rustを初めて触るときはまずやってみることを強くオススメします。

総括

RustでCLIツールを作り始めたので経緯を書いてみました。
開発が進んできたら具体的な内容の記事を追加していきたいと思っています。