JSP_Blog

ジェイエスピー社員が綴る日替わりブログ

40歳文系のRust 3

2019-11-12 08:58:10 | 日記
Rustの業務アプリ活用を検討する投稿の第3回目です。
今回はCSVファイルの入出力について調べた話です。

調査のきっかけは、妻の職場で、社内システムからダウンロードした定型の30MBくらいのCSVを、部門別に売上が集計されたExcel形式で見れるようにしたいのだとか。
まァぱっと思い浮かぶ手法はVBAですね。
ただ、Excelが入っていないパソコンでも実行できたり、少し勉強してでも息の長い言語で作りたいとのこと。
また、JavaやPythonなどのように、ランタイムは極力インストールしないようにしたいとのこと。

そこで、もしRustで作ろうとしたらどれくらい手間がかかるのか、どのようなライブラリ(クレート)があるのかを調べてみました。
RustはAmazonのAWSで開発環境を整えられたり、Microsoftが利用を促すなど、いよいよ超大手からも脚光を浴びるようになってきました。
また、WindowsやLinuxのネイティブ環境用に実行ファイルを生成できるため、ランタイムも必要ありません。
さらにはC言語級に高速です。
VBAで作るくらい楽だったらこの上ない選択肢!と思い、調べてみました。


調査結果の概要は....

  • 普通に「csv」というクレートを使うのが定番の方法の模様

  • 項目間区切り文字(デリミタ)・項目囲み文字・エスケープ方法・改行コード・ヘッダー有無などを指定して読み書き可能。

  • 書き込み時、ディスクへの反映(フラッシュ)タイミングを指定可能。

  • 難儀なのがUTF8からの文字コード変換....(後述)

  • Rustの借用やライフタイムの概念が常に付きまとうので、やはりVBAほどすらすらコードは書けない....


「Rust」「CSV」でググるとすぐ出てくる以下のサイトは参考になりました。
【翻訳】RustとCSV解析
https://qiita.com/algebroid/items/c456d4ec555ae04c7f92

CSVの解析は少し楽かなーと。
読み込んだ1行が瞬時に構造体になるのはいいですね。

しかし、最も面倒なのが文字コードの変換です。
Rustの内部はテキストはUTF8しか扱えませんし、Linuxの開発環境はUTF8がベース。
Windowsで使うにはMS932(Windows-31J)でないとダメなので、読み込み時はMS932からUTF8へ、書き込み時はUTF8からMS932へ変換する必要があります。
「CSV」クレートの機能にあればいいのですが、別のクレート「encoding_rs」「encoding_rs_io」を利用する必要がありました。

CSVファイルの読み込み時は一度に変換できますが、書き込み時はCSVの1項目ごとにUTF8に変換しないといけないのがまた面倒でした。
文字コード変換機能は、是非「CSV」クレートで対応してほしいですね。


ちなみに、上記の<【翻訳】RustとCSV解析>のサイトでは、バイト配列でCSVを読み込むことで高速化できるという記事があり、実際に試してみたところ、バイト型から文字型・バイト型から数値型、またその逆といった変換が必要となり、さらに文字コードの変換と相まって、相当に面倒でした。


で、結局冒頭の妻の職場で必要な売り上げ集計プログラムは、Rustではタイヘン過ぎる...という結論に。
色々調べたり、借用・ライフタイム・型変換に悩まされた結果、CSVの読み書きと列同士の簡単な計算をするだけなのに、本当にまる1日かかってしまいました。
VBAだと多分1時間かかるかどうか程度と思いますが....
おとなしくVBAで対処しましょうということになりました。


ですが、業務アプリでCSVの編集はつきもの。いい勉強になりました。
どこかでソースを公開できればと思います。


ちなみに、RustでExcelを扱うライブラリも調べたところ、本格的に使える定番なライブラリは....あまりないように見えました。
読み込みのみ、書き込みのみ行えるライブラリが3・4つ存在する程度。
書き込みも書式設定はできなさそうな雰囲気です。
既存のExcelを開いて編集して保存ができれば色々業務アプリで使えるシーンがありそうですが、どうもやり方が今ひとつわからず....

RustでCSVやExcelをめぐるエコシステムはこれからという感じでした。
(酒)

moniswitch
  今お使いの離床センサーがそのまま使える!
  離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

WhitePlug
  手のひらサイズのLinuxサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« スマホ | トップ | 富士登山 »
最新の画像もっと見る

コメントを投稿

日記」カテゴリの最新記事