はじめに
シェルスクリプトマガジン Vol.64(2020年1月25日発売) にRust入門記事を寄稿しました。 どんな内容か紹介します。
↑ シェルスクリプトマガジンのWebサイト 「バックナンバー」ページのスクリーンショット
記事の概要
シェルスクリプトマガジンに寄稿したのは、この号の看板記事の一つ、「特集1 はじめてのRust」でした。 特集1の全体(合計23ページ)を一人で書きました。
特集1は2部構成になっています。 Part 1では、Rustの特徴、使いどころ、インストール方法、プログラミングのやり方などを、初心者にもわかりやすいように紹介しています。
Part 2ではCSV形式のデータを分析するという実用的なプログラムを扱っています。 chrono、clap、csv、serde_jsonなどの人気のクレートを用いることで、Rustにおけるプログラミングの雰囲気を感じてもらえるようにしました。
Part 2の終わりでは、読者の今後の学びのために、参考になりそうなオンラインドキュメントなどを紹介しています。
Part 1について
Part 1の目次は以下のとおりです。
Part 1 Rustを始めよう(11ページ)
- Rustとは
- Rustのプログラムコード
- 生い立ちと開発体制
- 増える大規模採用事例
- Rustの特徴
- ハイパフォーマンス
- さまざまな環境で実行できる
- 安全性が保証される
- 高い生産性
- Rustの使いどころ
- コマンドラインツール
- Webアプリケーション、ゲーム/チャットサーバー
- 機械学習、科学技術計算
- IoT、組み込みシステム
- Rustのインストール
- リンカーのインストール
- Rustツールチェーンのインストール
- はじめてのRustプログラム
- パッケージの作成
- プログラムのビルド
- 関数定義の基本構文
- 数値型について
- 式と文
- let文による変数の導入
- if式による条件分岐
- 繰り返し
- 戻り値を返す
- 変数のミュータビリティ(可変性)
- main()関数の追加
Part 1の最初の数ページで読者に興味を持ってもらいたかったので、図表を使って誌面を賑やかにしています。 特にRustの特徴のところは、編集者さんからのリクエストもあり、図を多用して、なんとなくでも分かってもらうことを目標にしました。
- ハイパフォーマンスの項、「ゼロコスト抽象化」の例として、動的ディスパッチと静的ディスパッチを図解
- 安全性が保証されるの項、「所有権モデル」の例として、所有権のムーブと借用を図解
その後の「はじめてのRustプログラム」の節は入門記事としてよくある内容です。 ニュートン法で平方根の近似値を求めるプログラムを題材にして、基本構文やデータ型などを紹介しています。
Part 2について
Part 2 コマンドラインプログラムを作ろう (12ページ)
- CSVファイルのダウンロード
- パッケージ作成と使用クレートの指定
- clapクレートでコマンドライン引数を処理
- 列挙型のOption型とResult型
- match式による場合分け
- コマンドライン引数を必須にする
- トレイトについて
- CSVファイルを開きエラーを処理する
- CSVファイルのレコードを順に読み込む
- リリースビルドで高速化する
- CSVのレコードを表す構造体を定義する
- CSVのレコードをデシリアライズする
- カウンタをまとめた構造体を定義する
- 日時を表す文字列をchronoで変換する
- 対象レコードを絞り込む
- 統計処理を行う
- 統計情報をJSON形式で出力する
- まとめ
- Rustの参考資料
Part 2では実用的なプログラムを扱っています。
掲載誌がシェルスクリプトマガジンということで、コマンドラインプログラムを題材にしました。
といってもgrep
のような汎用的なコマンドを作るわけではなくて、あるCSVファイルのデータを集計して、結果をJSON形式で出力するという簡単なものです。
具体的には、ニューヨーク市のタクシー&リムジン委員会(NYC TLC)が公開している乗車記録データを分析し、マンハッタン中心部からJFK国際空港までの所要時間を時間帯ごとに集計します。
ソースコードは ここ にあります。 また乗車記録データはNYC TLCの このページ からダウンロードできます。
使用している乗車データは1ヶ月分だけでも700万件近くあるので、Rustの高速性を体験してもらうのにちょうどいいかなと考えました。 筆者の平凡なPC環境でも、1ヶ月分を5秒あまりで処理できます。 (シングルスレッドのプログラムです)
chrono、clap、csv、serde_jsonなどの人気のクレートを使用していますので、Rustで実際になにか作るときにもきっと役に立つと思います。
執筆を終えて、感想など
今回の記事はページ数が23ページと少なく、また内容も実践Rust入門で書いたものと似ています。 ですから、シェルスクリプトマガジンから執筆のご依頼を受けたときは、簡単に書けるだろうと考えてました。
でも、そんなに甘くはなかったです。 Rustは言語機能が豊富で、他の言語にない概念も多いので、Rustを知らない読者向けに説明するのは本当に難しく感じます。 文字数が限られているので、何を選んで、なにを省くかの判断が難しい。 また、記事を読んでもらうためには、この言語を学びたい、という動機づけが必要ですので、最初の数ページで特徴をアピールしないといけない。 何をアピールすると読者の心に届くのか。
ページ数の制限から、所有権モデルについては特徴のところでの図解にとどめました。 それでもエラー処理などコードを書くうえで説明が避けられない部分もあり、どうしてもページ数が膨らんでしまいます。
まあ、それでも最後はなんとかまとまりました。 Rustの入門記事は書くのが大変なので、毎回、執筆が終わると「もう書きたくないなー」と思ってしまいます。 でも、読者の皆さんからの反応があると、嬉しくてまた書いてしまうのかも。
編集の方からは「雑誌の新言語の特集でここまで分かりやすいものは、そうないように思えます」と言っていただけました。 お世辞もあると思いますが、ある程度のレベルのものは書けたようです。
ご購入はAmazonなどのネット書店か出版社の通販サイトで
掲載号(vol.64)の価格は税込で550円です。
シェルスクリプトマガジンは現時点では全国誌ではありません。 実店舗では こちら にリストアップされている書店のみに置かれています。 東京は12店舗。その他の地域には16店舗あります。
これらの書店が近くにないなら、Amazonなどのネット書店か、出版社の通販サイト から購入するのがいいでしょう。
発売日の1月25日の夕方にAmazonのランキングを確認したところ、OS・プログラミングの雑誌の売れ筋ランキングで4位でした。
↑ amazon.co.jp 「OS・プログラミングの雑誌の売れ筋ランキング」より。(2020年1月25日時点)
質問や感想などはSlackのrust-jpコミュニティへ
記事やプログラムの内容について質問などがあったら、SlackのRust日本語コミュニティ「rust-jp」でお知らせください。 筆者のIDは tatsuya6502 です。
参加登録は こちら から。