RustでHello Worldやってみた

2021/07/18 2021/07/18 #Rust

RustでHello Worldやってみた

こんにちは。のんです。

今回は前々からやってみたかったRust言語の勉強をしようと思って、やったことを記事にしてみました。

Rustに関しては本当に初心者なので、内容は間違っているかもしれません。今後のアップデートにご期待くださいということで...

GitHubのリポジトリ

勉強用のリポジトリはこちら。

Hello Worldまでの道のり

正直Rustの開発環境をどのように作成するのかノウハウがなさすぎて非常に困りました。

というのもまともに触ったことのあるコンパイラ言語C#(.NET Framework)のみで、VisualStudioにすべてを任せていて、それ以外の言語の開発環境を作ったことがなかったのです。

Dockerイメージの選定

とりあえず、DockerHubにある公式のイメージを選択。

軽量OSのalpineで作成されている↓を利用しました。

コンテナ

  • ./app:/app:cache
  • rust_dev_target:/app/target

とりあえずソースコードが載るappを同期し、とバイナリが載る/app/targetをvolumeとして設定しただけの簡素なコンテナです。

app:
    container_name: app
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - ./app:/app:cache
      - rust_dev_target:/app/target
    working_dir: /app

volumes:
  rust_dev_target:
    driver: local

ビルドなどに必要なファイルを設定

どうやら、ビルドするためのcargoコマンドにはCargo.tomlが必要らしいので、公式ページなどを見様見真似で作成。

[package]
name = "sample"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[[bin]]
name = "sample"
path = "main.rs"

ぶっちゃけ内容は謎。

Cargo.lockというファイルが自動的に作成されたが、これも謎。Rustのパッケージ管理をcargoがしてくれるのだろうか。と推測するくらいしかできない。

ともあれ、今回の目的はHello Worldを出すことなので、この勉強は次回にまわします。

ソースコードを記載

main.rsに下記を記載

fn main() {
    println!("Hello, world!");
}

ビルドと実行

cargoが動作するコンテナを用意したので、ビルドや実行はコンテナ経由で行います。

docker compose run --rm app cargo build

でビルドし、

docker compose run --rm app cargo run

で実行。

docker compose run --rm app cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.08s
    Running `target/debug/sample`
Hello, world!

なんとかHello Worldまでたどり着くことができました。

最後に

コンパイラ言語の経験が少なすぎて、WEBで利用するときの完成形が想像できないのが非常に辛い。完成したコードのバイナリを実行して、待機させるイメージなのは想像つくけども、それを具体的な手順が想像できない...

この辺が得意な方に色々教えていただく必要があるかもしれないなぁ。

次回からはこのコンテナを利用して簡単なチュートリアルをしてみようと思います。

あとは、リクエストをさばいてみるということもしたいかも。nginxとどのように連携することになるかは想像つかないので、ここもひとつ大きな壁になりそう...

頑張りましょう。

次回のRust記事はいつになるかわかりませんが、また記事にします。

その時はよしなに。

.

のん

所属 : 株式会社スマレジ 開発部

YouTube : のんラボ

Twitter : @nonz250

Github : nonz250

Qiita : @nonz250

My Qiita posts My Qiita contributions My Qiita followers

主にPHPを使用し、サーバーサイドを担当。最近はフロントにも興味津々。

なにかを作ったりいじったりするのが好きで、個人開発なども行っている。

趣味はバイクアイコン画像は大抵愛車の「Z250」である。友達にアイコン描いてもらえて嬉しい。

PHP / Laravel / CakePHP2 / CakePHP3 / Vue / Nuxt / C# / etc...

Tags

#のんラボ #Laravel #Vue #個人開発 #ブログ #プログラミング #javascript #Html5 #WEBサービス #Twitter #今年の抱負メーカー #勉強方法 #PWA #モバイルアプリ #Android #ツーリング #バイクに乗るエンジニア #Z250 #秋吉台 #能登半島 #バイク #冒険 #東尋坊 #Squid #リバースプロキシ #hosts #axios #cropper #AdSense #Bootstrap #MySQL #高速化 #トドTask #Telescope #デバッグ #composer #テスト #セキュリティ #POSレジ #スマレジ #本部機能 #バリデーション #入力チェック #Mac #Chrome #テスト駆動開発 #開発手法 #UI #デザイン #WEBサイト #機能美 #PHP #Laravel 6 #コメント #バージョンアップ #vue-cli #localhost #BIツール #売上分析 #TANAX #MFK250 #ツアーシェルケース2 #RESTful #API #REST API #実務的 #PHP Tech Tutor #Smaregi Tech Talk #勉強会 # ブログ #CakePHP3 #CSRF #VSCode #開発環境 #CakePHP3.0 #さくらのレンタルサーバー #モジュールモード #シェル #メール #Gmail #relay #OGP #エラーページ #抱負 #家庭教師 #ドメイン駆動設計 #DDD #読書会 #那智の滝 #伊勢志摩 #伊勢志摩スカイライン #フロント #三方五湖 #レインボーライン #ボーイスカウト・ルール #プログラマが知るべき97のこと #リファクタリング #ユビキタス言語 #車輪の再発明 #マイクロサービス #デプロイ #QA #laravel-mix #Tips #storybook #@storybook/addon-actions #昇降デスク #コードレス #書斎 #オフィス #リモートワーク #働き方 #エラーハンドリング #スマレジ4 #pixel 5 #レビュー #スマレコ #TDD #RSS #404 #高山ダム #ラーツー #React #Nuxt #node_modules #エラー #インポート #設定方法 #環境構築 #Docker #フォレストパーク神野山 #学生向け #PR #採用 #Node.js #npm #しまなみ海道 #youtube #CSS #IE #SLA #Rust #千里浜なぎさドライブウェイ #千里浜 #インサイドセールス #曽爾高原 #無線LAN #ポートフォリオ