2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCamlでつくりたかったcliツールをRustでつくった経緯と感想

2
Last updated at Posted at 2023-05-06

成果物

rustを3日くらい勉強してみて、cliツールを作成してみました。

manual-rollback-kunとは

cliツールです。
コマンドは
add
deploy
delete
save
rollback
があります。

addは新しい設定ファイルを作成します。
deployは設定ファイルに応じてsourceからdeployへファイルがコピーされます。
deleteはaddで追加した設定を削除できます。
saveはsourceにあるファイルをすべてsave/project_name/YYYY-MM-DD-HH-mm-ss形式で保存ます。
rollbackはsave/project_nameにある日付を選択したら、保存していたデータがdeployにファイルがコピーされます。

というようなツールをつくりました。
コンテナ化しろという話ですが……まあ、仕事上、どうしようもない環境もこの世にはあることだなぁ(感嘆)。

そもそもOcamlでつくりたかった

僕の母語は日本語と関西弁とJavaScriptとTypeScriptです。
TSなら簡単につくれるでしょうが、JavaScriptはネイティブバイナリにするのが面倒くさいという弱点があります。
(pkgとかnexeとかあるけど)
ロールバックとかSaveとかしたい環境なら必ずnodeは入っているでしょう。
それでも、環境に依存しない、WinでもMacでもLinuxでも動くネイティブバイナリにしたいなぁ、という欲望がずっとありました。

Ocamlは良い言語だ……が

そんなわけでOcamlを勉強してツールをつくっていました。
もともとFsharpをちょっと勉強していたので簡単でした。
(FsharpとOcamlはスウェーデン語とデンマーク語くらいの違いしかありません)

関数型言語ということもあり書き味は良いし、しかも.netも要らないし、どんな環境でも動くようにコンパイルできるし。
良いことずくめじゃないですか。書いていて楽しい素晴らしい言語……。
なのですが……。

Ocamlはライブラリが少ない気がする

とにかくライブラリを探すのが大変なんですね。
使用者が少ないからなんでしょう。opamとかいろいろ検索してもほしいライブラリが見つからんのです。
そうなると自分でつくるしかない。

僕はcli上で質問したいわけです。node.jsでいえばinquirer.jsのようなライブラリがほしい。
save先とかproject_nameとか聞いて、tomlに保存したいわけです。
ところがなんというかあるにはあるけど微妙で更新されていないライブラリしかないわけです。

自分でつくるしかないのが楽しい言語ですね。DIYみたいな。他言語であるこういうライブラリをOcamlで実装したらどうなるか、みたいな。

そんなわけでinquirer_ocというocaml版のinquirer.jsみたいなツールをつくったりopamに公開したりしました。

しかしね、やっぱりライブラリがほしいわけです。
あと使用者が少ないのでbing aiとかgithub copilotの精度が悪いのね。
提示されたコードがまあまあ動かない。

Goも良い言語なんだが

・いろんな環境にコンパイルできる
・ライブラリも多い
・使用者も多い

昔ちょこっと書いてたこともあるんですが、関数型っぽい書き方は難しいんですよね。やっぱり。
fp-goとかあるけどなぁ……。

ScalaとかFsharpは、やっぱり環境が必須なのがね……。

紆余曲折の果てのrust

・いろんな環境にコンパイルできる
・ライブラリも多い
・使用者も多い
・ちょっと関数型っぽい風味がする
で良いんですけど、やっぱり書いてて若干めんどい部分があるなぁ……という。
型推論とか弱いしね。いちいち型書かずとも、もうちょい推論してくれても良くないか、と。

そんなに高速に動作しなくていいから、もうちょっと簡単に書けない? 
みたいなことを思うわけです。

所有権とかなくしてGCで処理してくれたらもっと簡単に書けませんか? みたいな。
でもそうするとrustの良さってなくなるよね。きっと。

JavaScriptくらいの速度でいいんで、関数型っぽく書けていろんな環境向けにコンパイルできる良い言語ってないんですかねぇ……。
ないよなぁ……。ないんだよなぁ……。

Electronとかさ、とにかくファイルサイズが大きいよな。
tauriもWebViewとか入れたらそこそこ大きくなっちゃうけど。

まあ、もうしばらくrustで書いているうちに楽しくなってくるかな、という気もしております。
いろいろつくってみよう。

fsharpのNativeAOTとかいいんでないか? どうなんや?

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?