新卒エンジニア 内定者インターン学習日記 #1
こんにちは。これから、日々の内定者インターンを通して学んだことを発信していきます。
基本的に週3日フルタイムで働いていて、一週間で学んだこと・感じたことを書いていこうと思います。
私自身、エンジニアとしてまだまだ未熟な初心者のため、投稿の内容などに不備・指摘点ありましたら、コメント等頂けると幸いです。
自己紹介
- 現在大学4年生。
- 内定先の自社開発企業2025年9月下旬から、主に週3日インターンとして働いている。
- 一応、大学は情報系の学部だが、CS・システム開発に関する知識が定着したかと言われると?
- インターンを通して、システム開発の基本を身につけていきたい。
- また、自己学習を通して、CSの知識・ruby on railsの学習を進めていこうと考えている。
目的
- 日々の施策の中で、理解できなかったこと・学習したことなどをブログとして投稿し、アウトプットを行うことで、知識を定着させる。
- 日々の成長を記録し、成長具合・エンジニアとしての現在地を見える化する。
2025/1/13~15で取り組んだ施策
- (施策1)本番環境のDBをダンプしたデータをマスキングし、staging環境のDBに保存する施策。
- (施策2)外部からデータをインポートするrakeタスクがあるのだが、その処理の中にインポートした情報をgoogle spreadsheetsに出力する処理も含まれていた。その処理を別のrakeタスクとして切り出し、処理の高速・効率化も可能であればする。また、元々スプレッドシート出力はstaging環境・本番環境それぞれで実行した場合、両方とも同じgoogle driveのフォルダに保存されてしまっていたが、stagingと本番それぞれのフォルダを作成し、出力先を分ける。
施策1を通して学んだこと
モード'wb'について
何のために学んだか?
google driveに保存されているデータをダウンロードする処理を実装するため
学んだ内容
- w (Write): 書き込みモード。指定したファイルがすでに存在する場合は内容を空にし、存在しない場合は新しく作成する。
- b (Binary): バイナリモード。画像、PDF、実行ファイル、あるいは改行コードを勝手に変換したくないデータを扱う際に使用する。Windows環境などでの改行コードの自動変換を防ぐため、画像転送やアップロード処理でよく使われる。
参考
gemini 3
サニタイズとは?
何のために学んだか?
google driveに保存されているデータをダウンロードする処理を実装するため
学んだ内容
入力文字列から危険な文字や予期しない形式を除去・正規化して、安全に扱える形に変換すること(今回の場合だと、ファイルパス操作やパス・ディレクトリトラバーサルを防ぐ目的)
参考
ディレクトリトラバーサルとは?
何のために学んだか?
google driveに保存されているデータをダウンロードする処理を実装するため
学んだ内容
Webサイトやアプリケーションの脆弱性をつき、管理者が本来公開するつもりのないファイルや情報に攻撃者が不正にアクセスするサイバー攻撃の手法
参考
.newについて(ruby on rails)
何のために学んだか?
google driveに保存されているデータをダウンロードする処理を実装するため
学んだ内容
設計図から、今から使うための実物(インスタンス)を組み立てる」という命令
- クラス:車の設計図, DriveService クラス
- .new:工場で組み立てる, DriveService.new
- インスタンス:実際に走れる「車」, @drive(変数に格納された実体)
参考
gemini 3
施策2を通して学んだこと
cloud run jobsについて
何のために(なぜ)学んだか?
スプレッドシート出力処理をrakeタスクとして作成し、rakeタスクをジョブとして定期実行する実装を進めていたが、なぜcloud run jobsを作成する必要があるのか?明確な理由がわからなかったから。
学んだ内容
cloud run jobsとは?
- Cloud Run jobs は、コンテナ化されたアプリケーションを一度限りまたは定期的なジョブとして実行するためのサーバーレスサービスです。簡単に Web サービスを提供できる Cloud Run の、バッチ処理やスケジュールされたタスク実行に特化したものとなります。GCE インスタンスによる処理と比較して、運用コストの削減と迅速な実行が大きなメリットです。
- 簡単な処理を効率的に、行うためにcloud run jobsが利用されている。
引用
frozen_string_literal: trueについて
何のために(なぜ)学んだか?
ruby on railsのファイルの冒頭に、# frozen_string_literal: trueと書いてあるものと書いてない物があって、なぜ必要なのか?がわからなかった。
学んだ内容
- 指定なしの場合: "abc" が100回登場したら、メモリ上に100個の "abc" が作られる
- 指定ありの場合: "abc" は100回登場しても、メモリ上にはたった1つしか作られず、それを使い回す
- 意味:このファイルの中に書かれたすべての文字列をいちいち.freezeしなくても最初から全部freeze状態で扱ってという意味
- freeze:そのオブジェクトを読み取り専用にして、二度と変更できないようにロックをかける
参考
awk処理とは?
何のために(なぜ)学んだか?
単語の意味がわからなかった。
学んだ内容
テキストファイルを1行ずつ読み込み、特定のルールに従ってデータの抽出や加工、集計を行うための強力なテキスト処理プログラミング言語
参考
gemini 3
OAuthについて
何のために(なぜ)学んだか?
OAuthとは何か?がわからなかった。スプレッドシート出力処理を実装するにあたり、google driveとの接続するために必要だった。
学んだ内容
記事:https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be 内のイラストによる説明手順がめちゃくちゃわかりやすい。やはり、文章だけじゃなくて、視覚的に図やイラストで理解することは重要だと思った。
参考
google drive api について
何のために(なぜ)学んだか?
スプレッドシート出力処理を実装するにあたり、google driveとの接続するために必要だった。
学んだ内容
アプリケーションは、更新トークンを今後使用するために保存し、アクセストークンを使用して、google APIにアクセスする必要がある。アクセストークンの有効期限が切れると、アプリケーションは更新トークンを使用して新しいアクセストークンを取得する。
- client_id:Google Cloud上で作成したプロジェクト固有のID。Googleに対して「このアプリがアクセスを求めています」と名乗るために使う
- secret:アプリのパスワード。
- クライアントIDと対になる秘密鍵。アプリの本人確認のためにサーバー間通信でつかわれる。
token(Refresh Token):通常のアクセストークンは短時間(1時間程度)で切れるが、このトークンがあれば、ユーザの再承認なしで新しいアクセストークンを自動取得できる。
認証のフロー(仕組み)
- 認可:ユーザがブラウザで「このアプリがあなたのgoogleドライブにアクセスすることを許可しますか?」という画面で「はい」を押す
- コード交換:許可されると、Googleから「認可コード」が届く
- トークン取得:アプリがclient_idとsecretを使い、その「認可コード」をgoogleに差し出すと、
- token(refresh token)が発行される。
- API実行:以後、アプリはこのtokenを使って「今から一時間有効な鍵(アクセストークン)」を裏側で取得し続け、googleドライブの操作を行う。
参考
gemini 3
Railsにおいてrequireが不要な理由
何のために(なぜ)学んだか?
rubyのファイル冒頭でrequireを明示的に書いているもの・書いていないものが存在し、いつ必要なのか?そもそも必要なのかわからなかった。
学んだ内容
- config/application.rbに書かれている"Bundler.require(*Rails.groups)"により必要がない。
詳細:https://zenn.dev/toshi023/articles/d99b00510aafb3
参考
Discussion