メニューを閉じる

テクノデジタルグループ

メニューを開く

2023.09.28

Rust

The Rust Programing Language 日本語版に学ぶ、プログラミングの本領?

Hallo New Rustaceans!

右の爪を持ち上げて挨拶する赤さび色のカニ、Ferrisくん。

公式キャラクターのFerrisくん。 かわいいですね。

目次

  1. 初めに
  2. Rustの紹介
  3. The Rust Programing Language 日本語版の取り扱う範囲
  4. プログラマが念頭に置いておかないといけない概念
  5. 最後に

初めに

皆さん、はじめまして。テクノデジタルのMです。

今回は”The Rust Programing Language 日本語版に学ぶ、プログラミングの本領”と題して、このドキュメントを通して私が学んだこと、そして初学者が見逃しがちな、”プログラミングとはどのような行為なのか”という点について少し綴っていきたいと思います。

Rustの紹介

Rustは”C”や”C++”に代わる、安全で、高速な言語を目指して開発されている、最近各分野で注目されているプログラミング言語です。

“Rust(ラスト)は、性能、メモリ安全性、安全な並行性を目指して設計されたマルチパラダイムのプログラミング言語である。C言語、C++に代わるシステムプログラミング言語を目指しており、構文的にはC++に似ているが、「ボローチェッカー」(borrow checker) で参照の有効性を検証することによってメモリ安全性を保証できる。Rustはガベージコレクションなしでのメモリ安全性を達成しており、必要な場面で参照カウントを使うこともできる。(Wikipediaより抜粋)”

Rocket、Actix-webなど複数のWebフレームワークやクロスプラットフォームデスクトップアプリケーションフレームワークのTauriなど、アプリケーションの周辺環境はOSレベルにとどまらず、積極的に拡大中です。

The Rust Programing Language 日本語版の取り扱う範囲

本ドキュメントでは、大まかに以下の二つの項目について取り扱っています。

  • Rustの基礎概念、文法、各言語機能、周辺環境の使い方(基本編)
  • Rustで採用されているプログラミング手法の解説、Rustでの実践プログラミング(応用編)

1~10章にわたる基本編ではRustの重要な概念である「メモリと所有権」、そしてそれを前提に実装された言語機能の解説が8割を占めています。

中でも注目すべきは、動的型付け言語や、JavaやC#などのガベージコレクションを搭載した言語の解説・教本では触れられない、プログラムとメモリの関係性から、しばしば安全性を損なうメモリと値の取り扱いにおいて、Rustではどのようにメモリ安全性を獲得しているのかを、とても自然な日本語で解説されている点です。しばしば難解な言い回しが登場しますが、それでも他言語のドキュメントの機械翻訳感とは比べ物になりません。

応用編では、CLIアプリケーション(Grepのコピー)の演習から始め、関数型言語の機能解説、オブジェクト指向プログラミングについて、などなど、応用的事項を解説していったあと、最後にWebサーバーを実装する内容となっています。

応用編を最後までやり切れば、Rustでのプログラミングは一通り、読んで理解し、自らも実装を行えるようになっていると思います。

自分のような、業務上Pythonやbashなどのスクリプトをメインで触っている初学者は、このThe Rust Programing Language 日本語版を読了してから、前章で紹介した各フレームワークに取り掛かるのが、理解しやすくなるため、おすすめです。

全20章+付録という割とボリューミーなドキュメントですが、これを読了すればRustだけでなく、プログラミング全般の知識がつき、より技術的に習熟できること請け合いです。

プログラマが念頭においておかないといけない概念

さて、突然のっぴきならない章タイトルで始めました。

紹介した「The Rust Programing Language 日本語版」となんの関係があるのかと思われたかもしれません。

ここからは本書個人の感想となるので、「ふ~ん」と思っていただきたいです。

Rustと、PythonやSwift、Kotlin、定番のJavaやC#といった言語との大きな違いは、メモリの制御です。高水準言語でプログラミングを行っていると忘れがち、また初学者であれば気が付かない視点ですが、プログラミングとはメモリ上の値を、少ない手順でどう変化させるかを設計することです。そして、コーディング(記述)はその制御を簡単で明瞭な命令文として、言語のルールに則った形でいかに記述するかということで、別の視点となります。

少し脱線しましたが、私が言いたかった事を一行にまとめるとこうなります。

 

「メモリ上の値を変化させる(増やす、減らす、置き換える、作る、消す)最適手順を考えることがプログラミングの本当の要点である」

 

より良いプログラムを作る為には、最大の関心で取り組まないといけない命題です。

Rustが高速である理由の一つにガベージコレクション(以下、GC)を使用していないというポイントがあります。GCの役割は、使い終わったメモリ上の値を片付ける事です。GCを実装している言語ではメモリの片付けをGCに委託しているため、プログラムが必要とするCPUリソースが増大するという特徴がありますが、逆にプログラマはメモリの消費量が際限なく増えていく心配をせずにプログラミングができるわけです。

GCにはプログラミングを簡単にするという点で強力ですが、高水準言語の実装を抽象化して隠ぺいするという特徴とも合わさって、プログラミングがメモリ上のビットを、作り、計算して、破棄するものであるという認識が薄れやすい特性があるのかもしれません。実際、文系出身でスクリプトを扱っていた私は、これまでプログラミングを行っていてそういった観点を持ち合わせませんでした。

RustではGCがない代わりにメモリの処分を厳格なルールによって制御しています。

ゆえに、その概念とコーディング上のルール、コンパイラの指摘等によって、メモリ上の値の生き死にが、手に取ってわかります。そこから得られる気づきというのは、プログラミングという行為を習熟していくうえでとても大事な事ではないかと、「The Rust Programing Language 日本語版」を読んで思いました。

Rust(またはCやC++など)を知らない、この記事を読んでいるあなたが、私のように「The Rust Programing Language 日本語版」を読んで重要な気づきを得られることを願っています。

最後に

RustはOSやドライバなど低レイヤーのシステムを指向した言語ですが、安全で高速という特徴から、Webアプリやゲームなど高レイヤーのアプリケーションを作成するのに適しているため、様々なライブラリの開発が盛んに行われています。

皆さんもぜひ、この機会にRustを学んで、新しいステップを踏み出してみませんか?


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事