🥷

Progateの「1週間でGitを実装しよう」インターンに参加した話

2024/10/05に公開

2024年9月、9日から13日の5日間、東京都渋谷区にあるProgateオフィスにて、Gitを実装してきました。このインターンについて、(学期始めでドタバタし、約1ヶ月空いてしまいましたが、)参加者目線で詳細に紹介していこうと思います。

こちらが今回使用したリポジトリです。
チームは2人で、TypeScriptを用いて実装しました。
https://github.com/Progate/git-intern-2024-term1

自己紹介

  • 大学 学部3年生 26年卒
  • main言語: Python 5年
  • DiscordのBotを主に開発
  • TypeScriptの経験は1年未満(5回程度)
  • 西日本在住

エントリー 〜 インターン採用

エントリーから採用されるまでの流れを紹介します。

このインターンはconnpassにて募集が掲載されていたため、6月下旬(2次締め切りギリギリ)にこちらからエントリーし、翌日に面接日時を確定しました。
https://progate.connpass.com/event/319527/
https://progate.connpass.com/

面接では、一般的な面接でよくある質問 + コーディング面接を行いました。
問題はすぐに解ける程度のもので、言語は自由でした。私はPythonを用いました。

面接から1週間後、合格のメールを受け取りました。その時、詳細な面接のフィードバックも頂けました。

インターン期間

1日目 - Gitについての座学、個人でのmygit log実装

1日目は雇用契約等の手続きをしたのち、Gitについての座学を受けました。内容については割愛させていただきますが、およそ以下の記事のような内容でした。(自分の浅学のため、その時は完全には理解できませんでした。。。)
https://qiita.com/marchin_1989/items/2ec01553e907f3a9e6bb

座学を受けた後、個人でmygit logコマンドの実装を始めました。
やることとしては、HEADが指しているcommitオブジェクト(ブランチを指していたら、ブランチが指しているcommitオブジェクト)を読み込み、[treeオブジェクトへの参照、コミットしたユーザの情報、タイムスタンプ、コミットメッセージ、親commitオブジェクト]を取得、表示し、取得した親commitオブジェクトを読み込んで...を繰り返す処理の実装でした。
しかし、自分は各Gitオブジェクト、エラー定義諸々を丁寧に実装したため、思ったよりも時間がかかってしまい、commitオブジェクトのハッシュ値しか出力できませんでした。

夕方は、Design Docsに取り掛かりました。しかし、どういうものを書けばよいのかを理解できていない状態で取り掛かってしまい、ボロボロでした。

お昼はピザをいただきました。美味しかったです。

2日目 - 設計

1日目の夕方に作成したDesign Docsをたたき台とし、2日目に設計を行いました。5日間という短い期間でしたので、mygit addmygit commitコマンドの実装を目標として取り掛かり始めました。まずmygit addの設計を始めました。以下はクラス設計図(のつもり)です。チームメンバーと2人で話し合いながら設計を行いました。

リアルタイムでフィードバックを頂きながら設計・Design Doc作成をしましたが、この工程が結構面白く、良かったです。

お昼はお寿司をいただきました。美味しかったです。

3, 4日目 - 実装

3,4日目はひたすら実装を進めました。自分は主にmygit addを担当しました。基本クラス・タイプを作成し、index(ステージング)ファイルの読み取り、追加、書き出しを実装しました。indexファイルはバイナリファイルなんですが、バイナリファイルを扱ったことが無いに等しかったため、0から勉強し、実装しました。

躓いたのが、エントリの数をindexクラスの属性に生やしてしまっており、実態の数とずれることで、indexファイルの読み込みがエラーを吐いてしまうバグを作ってしまったことです。これの厄介なところが、ハッシュ値によっては正常に読み込めてしまう(ランダム落ち)点です。実際、手元のテストで気づかず、チームのレビューにてバグが発覚しました。しかし、メンターの助けもあり、速やかに解決することができました。

3日目のお昼はキューバサンドを、4日目は豚肉のステーキをいただきました。美味しかったです。

5日目 - 仕上げ + 発表

5日目の午前中に、mygit addmygit commitコマンドの実装を終わらせることができたので、mygit logmygit statusコマンドの実装やリファクタリングをしました。

5日目のお昼はカレーをいただきました。美味しかったです。

午後には成果物の発表を行いました。Progateの社員さんが見に来てくださり、その中でデモをしました。オンラインの発表でしたが、緊張してしまい、声を張れなかったですが、もう一人のチームメイトのおかげもあって無事に発表を終わらせられました。

総括

全体を通して、メンターからフィードバックを直ぐに頂ける点がかなりよかったと感じています。お陰で、当初目標にしていた機能以上のものができました。デモでも、問題なくスムーズに実行できました。

4日目の朝に1on2という形で、エンジニアとしてのキャリア相談をさせて頂ける機会があり、とても有意義なアドバイスを頂けました。4日目のアドバイスということで、とても解像度が高く、かつ自分が感じていた弱点、見えなかった強みを教えて頂けました。
決して大規模なインターンではなかったですが、その分少人数で密度の高い内容で、個人に対する深い面談・FBの機会を得られたので、参加して良かったです。

以上、Progateインターン 参加記でした。

Discussion