🙆♀️
新卒エンジニア 内定者インターン学習日記 #4
こんにちは。日々の内定者インターンを通して学んだことを発信しています。
基本的に週3日フルタイムで働いていて、一週間で学んだこと・感じたことを書いていこうと思います。
私自身、エンジニアとしてまだまだ未熟な初心者のため、投稿の内容などに不備・指摘点ありましたら、コメント等頂けると幸いです。
自己紹介
- 現在大学4年生。
- 内定先の自社開発企業2025年9月下旬から、主に週3日インターンとして働いている。
- 一応、大学は情報系の学部だが、CS・システム開発に関する知識が定着したかと言われると?
- インターンを通して、システム開発の基本を身につけていきたい。
- また、自己学習を通して、CSの知識・ruby on railsの学習を進めていこうと考えている。
目的
- 日々の施策の中で、理解できなかったこと・学習したことなどをブログとして投稿し、アウトプットを行うことで、知識を定着させる。
- 日々の成長を記録し、成長具合・エンジニアとしての現在地を見える化する。
2025/2/3・4・6で取り組んだ施策
引き続き以下の施策に取り組んでいる。
- (施策)外部からデータをインポートするrakeタスクがあるのだが、その処理の中にインポートした情報をgoogle スプレッドシートに出力する処理も含まれていた。その処理を別のrakeタスクとして切り出し、処理の高速・効率化も可能であればする。
- また、元々スプレッドシート出力はstaging環境・本番環境それぞれで実行した場合、両方とも同じgoogle driveのフォルダに保存されてしまっていたが、stagingと本番それぞれのフォルダを作成し、出力先を分ける。
- 追加:現状、スプレッドシート出力するデータの抽出元が、VMインスタンスにマウントしたFilestoreに保存されていて、本処理はそこにあるtsvファイルを参照している。
しかし、NFSでマウントしているため、IO処理やネットワーク帯域の制限によりエラーが発生する可能がある。
したがって、マウントしたFilestoreに保存するのではなく、GCSのバケットにデータが格納されることになった。(この実装は他エンジニアが対応)
それに合わせて、本処理(スプレッドシート出力)におけるデータ参照先もGCSへと変更になるため、データ参照処理を修正する。
施策を通して学んだトピック
Filestoreとは、マウントとは?
何のために学んだか?
現状、スプレッドシート出力するデータの抽出元が、VMインスタンスにマウントしているFilestoreに保存されているのだが、そもそもFilestoreとは何か?マウントとは?よくわからなかった。
学んだ内容
- Filestoreとは:Google Cloudが提供する、超高性能なネットワーク共有フォルダ(NAS)
- NAS(Network Attached Storage): ネットワーク接続ストレージ。ネットワークに繋がった、みんなで使える外付けハードディスク
今回の施策において
- Cloud Run Jobs自体のメモリでは容量に限界がある(4Gなどで設定する)が、Filestoreなら大きな容量がある。
- Cloud Run JobsからFilestoreにアクセスしても、それは外部フォルダを見ているだけなので、Cloud RunJobs側のメモリを消費しない。
- したがって、メモリ不足によるcloud run jobsの強制終了を引き起こさない。
Cloud Run Jobs・Filestoreそれぞれの役割まとめ
- Cloud Run Jobs:作業者。Filestoreにあるデータを読み取って、スプレッドシートに書き出す実行者
- Filestore:巨大な倉庫。処理の元データ・中間ファイルを保管しておく場所。
参考
Gemini 3
RuboCopとは?
何のために学んだか?
今回の施策における実装が一旦完了したため、PRレビューを依頼したところ、コードの品質担保のため、変更・追加したファイルにrubocopを実行するよう言われた。
RuboCopについて何も知らなかったため、調査。
学んだ内容
RuboCopに関しては、以下記事でまとめられているので、以下参照。
端的にいうと、RuboCop=Rubyで書かれたコードを適切なスタイルに修正するためのツール。
参考
正規表現 0番目には...
学んだ内容
- Rubyだけでなく、JavaScriptやPython、PHPなど、ほぼ全てのプログラミング言語の正規表現において、「0番目にはマッチした文字列全体を入れる」という世界共通のルールがあることを学んだ。
- 以下コード例。
text = "Today is 2026-02-09"
pattern = /(\d{4})-(\d{2})-(\d{2})/
match = pattern.match(text)
puts match[0] # "2026-02-09" (全体)
puts match[1] # "2026" (グループ1)
Discussion