はじめに

2024年4月から1ヶ月、株式会社MG-DXでバックエンド開発に参加させていただいた谷口健斗と申します。

本記事では、インターンシップの参加目的、行ったタスク、学びなどについて触れていければと思います。

応募を検討されている方は参考にしていただければ幸いです。

 

参加目的

私が本インターンシップに応募した理由は2つあります。技術観点と就活観点です。

 

技術観点

私はこれまで、API開発やバッチ処理といったアプリケーション側のロジックを実装することが多く、インフラレイヤーはほぼ未経験といっていいくらいでした。個人で触ろうにも付与されたクレジットをRDBをなんとなしに立てただけで失ってしまい、どうにも途方に暮れていたところに本インターンを見つけ、現場レベルのインフラを理解したい!という気持ちでインターンに応募しました。

 

 

就活観点

私は25卒で就活をしており、現在は既に26卒が大半だと思うので少々恥ずかしい部分もあったのですが、他に迷っている数社と比較してCAの環境がどのようなものか?自分に適した会社はどこか?といった要素を検討するため、遅ればせながら本インターンに応募しました。

 

配属チーム

私の配属チームであるMG-DXでは薬急便というサービスを運営しています。薬急便は、処方箋をネットから簡単に近くの店舗に予約できるサービスです。貰った処方箋を薬局に持って行き、薬が出来るのを待つあの謎の時間が短縮出来る、何とも素晴らしいサービスです!

技術的には、フロント側を有しているということもあり、AI事業本部の中で比較的規模の大きいチームでした。[^1]

 

 

行ったタスク

以下の4つのタスクを担当させていただきました!

 

踏み台経由でCloud SQLのレプリカ接続を可能にする

これは、踏み台サーバがCloud SQLの本番環境用にのみエイリアス設定が施されていた状況を解消し、レプリカ用にもエイリアス設定を追加するものです。工夫した点は、レプリカインスタンスが1つ以上存在する場合にのみエイリアス設定を施し、存在しない場合は設定を行わないことです。これにより、レプリカが存在する場合は[replica[0]]のリスト、存在しない場合は空のリストを返すことで、出力先のプログラムに不要な条件分岐を省略させ、for文のみで処理を完結させることができました。

 

 

VPCコネクタをDirect VPC Egressに移行する

従来、Google CloudでCloud Run(AWSで言うLambdaのようなもの)から仮想プライベートクラウド (VPC) へ接続するには、常時起動するVPCコネクタが必要でした。しかし、Google Cloud Next24にてGAされたDirect VPC Egressという新機能を利用することで、VPCコネクタを用いずに実装が可能となりました。この新機能の導入により、全環境合わせて月6000円のコスト削減が見込め、プロジェクトへの直接的な貢献ができました。

 

 

Cloud RunインフラストラクチャのTerraform化

これまでCloud Runインフラストラクチャは全てMakefileを通じてデプロイされていましたが、これをインフラストラクチャをコードで管理するツールであるTerraformを使った方法に変更しました。既存リソースをTerraformに取り込む際には「terraform import」というコマンドが必要であり、この操作によって本番用のtfstateファイルがGCPリソースを認識することが出来ます。しかし、ローカルで「terraform import」を行った後、他のブランチがマージされると、tfstateファイルとの差分が認識され、既存リソースが削除される危険性がありました。これに対し、v1.5.0で追加されたimportブロックを使用することで、デプロイの自動化ツールであるPipeCDを通じて安全にTerraform化することに成功しました。

 

 

Cloud Runアプリケーションの自動デプロイ

Cloud Runアプリケーションもインフラと同様にMakefileでデプロイされていましたが、これを継続的インテグレーション/継続的デプロイメント(CI/CD)を活用して自動化するタスクを行いました。インフラをコードで管理する手法であるGitOpsやデプロイの自動化ツールであるPipeCDやArgoCDなど様々なツールに挑戦しました。完全な実装には至らなかったものの、CI/CDツールの奥深さと面白さを実感することができました。

 

学び

 

技術力の高さ

一番印象に残ったことはバックエンド全員で行う勉強会やレビュー会でした。今回のタスクとは直接関係のないお題でしたが、クリーンアーキテクチャ的な実装であったり、複雑な仕様をどう技術的に落とし込むか?という高度な議論が行われていて、まさについていくのがやっと、といった感じでした。

こうした会を通して、自分はまだまだ足りていないところばかりだと実感することが出来ました。当初の参加目的の一つである、劣等感を持てる環境に身を置きたい、という目的を実現することが出来ました。

 

 

インフラについて

インフラのタスクの実装を通して、インフラが非常に忍耐力の必要とする作業だということに気づきました。これまで経験したバックエンドの実装では、わからない→理解する→実装する、という工程の”実装する”工程にそこそこ時間がかかっていましたが、今回のインフラのタスクではこの”実装する”という工程はすぐに終わりました。結果、わからないところを理解することが実装の大部分を占め、実にストレスフルな作業が続きました。[^2]

しかし同時に、インフラの実装によって非常に大きなコストカットが実現出来たり、全アプリケーションの基盤を担っているため大きな達成感を味わうことが出来たりします。

そうした観点で、インフラは筋トレのようなものだと感じました。ちなみに自分は筋トレ全くしないので適当です。

 

 

就活観点

様々な部署・役職の方とお話しさせていただき、非常に学びのある時間になりました。中でも印象的だったことは、CAの人は誰も「CAがいいよ!」といったことを言わなかったことです。CAに限らず多くの人と就活を通してお話ししましたが、採用に近ければ近いほど自社を勧誘されることが多く、否定しても肯定しても気まずいという状況がありました。しかしCAではそれがなく、比較他社とCAをフラットに考えてくれたのが非常に印象的でした。もちろんどちらが良い悪いの話ではないですが、自分としては悩みを打ち明けやすく、話していて居心地が良かったなと感じました。

 

 

人の良さ

業務や面談、ランチでお会いした方全員に共通することですが、みなさんめちゃくちゃコミュ力が高く、しかもめちゃくちゃ優しいのでほんとに話しやすかったです。流石のいい人採用だなと素直に実感しました。

 

 

最後に

全てのタスクを実装し、気持ちよく終わることは残念ながら出来ませんでしたし、インターン最終日にあった本番リリースでもチームの方にお手数おかけしてしまいましたが、振り返ってみれば”自分が何も知らないということ”を知ることが出来、非常に充実した時間だったなと感じました。

インフラの場合は結局金がかかってしまい、個人で色々と触ってみることが難しい部分もありますが、今回のインターンで得た”自分が何も知らない”感覚を忘れず、今後も開発に精力していきたいです。

トレーナーの藤垣さんやメンターの野口さん初め、自分と関わってくださった全ての方に感謝申し上げます。大変お世話になりました!

 

[^1]: AI事業本部では、広告系などフロントエンドエンジニア無しで開発されているサービスも多くあるとのことです!

[^2]: もちろん0から基盤を構築する際など、実装がすぐには終わらない状況があることは認識しています。