見出し画像

【Scala・Rustコース】エンジニアインターンの参加学生に感想を伺いました!

9月11日~9月15日の5日間で第2回目のエンジニア職インターンを実施しました!
この記事ではScala・Rustコースに参加した学生さんの感想をお伝えします。


-自己紹介をお願いします。

明治大学総合数理学部学部三年生で趣味はコントラクトブリッジ、
好きなプログラミング言語はRustです。


-今回インターンに参加しようと思った理由はなんですか?

RustがやりたかったのでRustのできるインターンを探したら、
FANCOMIがヒットしたので応募しました。
面談でRust熱を伝えたところ、選考を通過することができました。


-実施した内容について教えて下さい。 

1‐2日目
与えられたタスクは、IPアドレスから国を返すWebAPI(ip2country)を更新するというものでした。

使われているRustのバージョンや、クレートのバージョンが古いので、
アップデートをする他、レガシーなクレートをモダンなクレートに置き換えるといった感じです。

まず自身の開発環境構築をしました。
VSCodeもRustも何回かインストールしたことあるので、
さすがにスムーズにできるかと思っていたんですが、
GitHubからcloneしてきた作業予定のリポジトリをビルドしてみると失敗するんです。

error: the 'cargo.exe' binary, normally provided by the 'cargo' component, is not applicable
to the '1.41.0-x86_64-pc-windows-msvc' toolchain

※cargo.exeに対応するmsvcが無いって言っている?ググっても原因不明...

色々検討していると、
まずRustインストール時にVisual Studioのインストールに失敗していることが発覚しました。
RustのビルドにはCコンパイラが必要で、それはVisual Studioに内包されています。
LinuxでRustをインストールしたときに、gccも入れないと動かないのとかを思い出しました。
そんなわけでVisual Studioを再インストールしようとするも、失敗...。

なぜかインストーラーが起動しないんです。
原因追究をしていると、以下のStack Overflowに到達しました。

https://stackoverflow.com/questions/76448647/rust-windows-installation-visual-c-visual-studio-community-exit-code-5002

管理者権限が無いのが問題らしいと発見し、
自分のアカウントの権限を確認すると、確かに管理者ではありませんでした。
背景として、インターン生のアカウントには管理者権限を付与していないことが判明。
情報システム部の方に連絡を取って対応いただき、Visual Studioをインストールすることができました。

と思ったら、またビルド失敗しました(笑)

error: the 'cargo.exe' binary, normally provided by the 'cargo' component, is not applicable to the '1.41.0-x86_64-pc-windows-msvc' toolchain

また原因追究をしていると、rust-toolchainという
名前の知らないファイルがワーキングスペースに存在していることに気が付きました。
中身は

1.41.0

というものだけがはいっており、メンターの方曰く、
このファイルはRustのバージョンを指定するものらしいです。

Rustのバージョンが古いのが色々問題を起こしている可能性があったので、
一旦最新バージョンに変えてみました。

error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
   --> C:\Users\2023_intern04\.cargo\registry\src\index.crates.io-6f17d22bba15001f\socket2-0.3.11\src\sockaddr.rs:156:9
    |
156 |         mem::transmute::<SocketAddrV4, sockaddr_in>(v4);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: source type: `SocketAddrV4` (48 bits)
    = note: target type: `SOCKADDR_IN` (128 bits)
For more information about this error, try `rustc --explain E0512`.
error: could not compile `socket2` (lib) due to previous error

どうやらクレートの中に最新のRustではビルドできない物があるらしい。

Cargo.lockを辿って依存関係を調べてみると、
どうやらactixが依存元っぽいので最新にしてみたら無事にビルドできました。
※ちなみに後日判明したんですが、先のエラーはcargoを再インストールすると直るそうです。

-開発環境構築おつかれさまです!こちらの設定周りの不備もありお手数おかけしました...

環境構築ができ、色々と更新に入っていきますが、更新箇所は具体的に以下の通りです。

・actix → axum
・failure → anyhow + thiserror
・env_logger → tracing
・ymlでparamを定義していたのをコードで定義するように変更(clap)

この中だと使ったことあるのはaxumだけでした。
色々調べながら作業したんですが「こんな便利なクレートあったんだ!ほえ〜っ」って感じでした。

今までErrorのラッパーは毎回自分で定義してたし、
loggerは一回で標準出力とファイルに出力するマクロを自分で作ったりしてました。
やめよう、車輪の再発明。

-(笑)

正直こんなクレートがあると知らなければ、
調べることもしなかっただろうなと思ったので、
Rustでよく使われるクレートに関しては一通り確認しておいたほうが良いかもしれないと思いました。

https://qiita.com/qryxip/items/7c16ab9ef3072c1d7199#%E3%83%9C%E3%82%A4%E3%83%A9%E3%83%BC%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E5%89%8A%E6%B8%9B
※この記事とか良さそうでした

更新作業については特に何事も無くサクッと終わることができました。
そんなにコード量も無く、どのクレートもサンプルコードが充実していて、すぐ習得できたので特に躓いたりとかはしませんでした。

それから、エクストラ課題としてテストコードの改修も行いました。
この課題は、actix_testで書かれていたものをaxum_testに書き換えるというものです。

書き換えるのは良いのですが、元々のコードにテストケースが1つずつしか無かったので、rstestというクレートを使用してテストケースを追加しておきました。

一応、ここまでが今回のインターンで元々予定されていたタスクでしたが、この時点で2日目のお昼休憩が終わったぐらい。

-!!

メンターの方が1日目の終わり際に、追加タスクを作ってくれていたので、
とりあえずそれをやりました。

-タスク対応が早いんですね、すごい...!

3日目
次のタスクは、AWS Lambdaで呼び出されるアプリを書くというもの。
元々Scalaで書かれていましたが、色々あってRustで書き直すことになったみたいです。
Scalaのコード見たらコピペですぐ終わってしまうということで(笑)、1から作ることになりました。

具体的な内容としては、
SQSからメッセージを受け取って、そのメッセージ内のURLにリクエストを飛ばすだけ。
AWSのドキュメントを読みながら、小一時間ぐらいで作りました。

正直、指示内容通りに進めたので何が完成するのか不明なまま完了してしまったが、ちゃんと動作はしたらしいです。
話は変わりますが、某プログラマーが
数字を右から貰って加工して左に流す仕事しかない、
みたいなブログを見たのを思い出しました。

-自分がどんなプロダクトにかかわっていて、今自分が何を開発しているのか、理解して取り組める環境って大事ですよね...!今回は短い期間の中で出来る範囲だったので、体験させてあげられなくてごめんなさい><

一旦その日は発表資料作成をしました。

4日目
次の日起きたら課題が3つ出題されていました!

課題の内容は、全部ip2countryに関係するもので
・スナップショットテストの追加
・内部データの検討
・外部から利用しているデータのバリデーションチェック
の追加でした。

全部やる時間は無かったので、スナップショットテストの追加と内部データの検討を少し行いました。
スナップショットテストの追加では、過去のバージョンのRustを稼働させる必要があり、少し苦しみました。

5日目
最終日に成果発表をして、Gitを壊した話などをしたらかなりウケました(笑)

フォークしたリポジトリのチャート

-成果発表会でも笑いが起きてましたね(笑)

フォーク元にプルリク送るブランチだけ綺麗ならいいやって思ってぐちゃぐちゃにしてしまいました(笑)


-今回のインターンを通して学べたことはありましたか?

Rustの便利なライブラリについて色々知れたこと、
チーム開発でのGitの使い方をより深く知ることができたこと、
FANCOMIがどんな会社か知ることができました!


-最後に感想をお聞かせ下さい。

5日間Rustを書けて楽しかったし、色々学ぶこともできて最高でした。

-ありがとうございました!


この記事が気に入ったらサポートをしてみませんか?