株式会社Progateの5daysインターンに参加してきた!
参加したきっかけ
テーマであるGitの実装部分に興味があったこと、過去の参加者レポートを読み興味が湧いたことから参加しました。
また、交通費を全額支給していただけるのも、遠方から参加する学生にとってはありがたい。
1日目 Git座学 & mygit logの実装
諸々の手続きを終えた後、早速Gitの内部に関する座学が始まりました。
.git/
配下にあるGitオブジェクトや、内部で行われている処理の話など初めて知る情報が多く、とても勉強になりました。
説明終了後、自作でgit log
の実装に取り掛かりました。
意外とそれっぽいlog実装できて満足しているものの、HEADが追跡しているブランチの表示までは実装が間に合わず悔しい...
commit c3732cd2f1b27f8748d38b4acfe196e5db53884c main
Author: thirdlf03 <thirdlf03@gmail.com>
Date: Mon Aug 11 03:35:34 2025 +0900
hllo
commit 9f95f9ad89a6099a1ef516673bce393cda3fd483
Author: thirdlf03 <thirdlf03@gmail.com>
Date: Fri Aug 08 00:57:16 2025 +0900
hello
お昼は、ポークステーキを食べました。美味しかったです。
2日目 Design Docs、タスク分解
2日目は、Design Docsの書き方やAsanaのタスク管理についての座学を受けた後、チームで3・4日目に実装するaddとcommitについてDesign Docsを作成しました。
Design Docsの存在は知っていたものの、「どう書くべきか」「何を盛り込むべきか」が曖昧だったため、とても勉強になりました。
この日に時間をかけてDesign Docsを作ったおかげで、3・4日目の実装がスムーズに進み、改めてチームで何を作るのかの認識を揃える重要性を実感しました。
過去のチーム開発では、チーム内で目指すものの認識がずれ、開発が止まったり手戻りが発生したりした経験がありましたが、Design Docsはその問題の解決策の一つだと感じました。
お昼はステーキランチをいただきました。
3日目 addの実装
2日目に作成したDesign Docsを元に、addコマンドの実装を始めました。
僕は主にindexファイルの読み込みや更新を行う関数の実装を担当しました。
indexのフォーマットを確認しながら、バイナリを読み込む作業は初めての体験で面白かったです。
参考: https://git-scm.com/docs/index-format
バイナリの処理に関する実装に時間がかかりましたが、なんとかindexファイルの読み込みと更新を終え、3日目の目標であるaddコマンドの実装を完了できて一安心。
途中で1on1の時間もあり、今後のキャリアや途中経過のフィードバックをいただきました。
特にキャリアに関してはどうするか迷っていたこともあり、相談することができて嬉しかったです。
実際に1on1を受ける立場になって、会社全体のパフォーマンス向上のために1on1が大事だと実感しました。
お昼はカレーを食べに行きました。ナンが美味しかったです。(4日目との記憶が混ざっているかも…)
運営部オフ会
僕の活動拠点が福岡ということもあり、リアルで集まる機会が少ないため、Progate PathのDiscordサーバーで活動している運営部メンバーとのオフ会を開いていただきました!
普段オンラインで話しているメンバーと直接会って話せて、とても嬉しかったです!!
またオフ会したいな....
↓運営部絶賛募集中です
4日目 commitの実装
4日目はcommitの実装を進めていきました。
僕はHEADファイル関連の処理や全体的なデバッグを担当しました。
HEADファイル処理の実装を終え、commitを試してみると、commitオブジェクトの表記が微妙に違ったり、treeオブジェクトが壊れるなどの問題が発生。
特にtreeオブジェクトの不具合は修正に苦戦し、就業後試行錯誤してようやく解決しました。
おそらく、原因はバイナリ処理の過程で誤ったエンコードをしていたみたいで、エラーの原因になってそうな関数をStringではなくBufferで受け取るようにして解消しました。
普段の開発しているレイヤーでは出会わない種類のエラーで新鮮な体験でした。
お昼はピザを食べました。1切れがみたことないくらいデカくて新鮮でした。
Progate Bar
この日はProgate Barが開催されており、行きたいと思っていましたが、commitのデバッグしていて気がついたら19:30。LTなどのイベントが終わった懇親会からの参加になりました。
それでもリアルであったことないTwitterのフォロワーや、普段なかなか話せない方々と交流でき、とても楽しかったです。
福岡での開催も楽しみ。
5日目 成果発表
5日目は、commitの修正と成果発表に向けた動作確認を行いました。
発表の1時間前にproductionブランチで初回コミット時のエラーが起こることを発見し、慌てて修正するトラブルがありましたが、なんとか間に合わせることができました。
発表は無事成功し、5日間の成果をしっかり見せられました。
お昼はおにぎりとデニッシュをいただき、おにぎりはもちろんの事、特にデニッシュが美味しかったです!
インターンを通して学んだこと・気づき
Gitの内部仕様
これまでブラックボックスとして使っていたGitコマンドの内部動作を理解することで、Gitコマンドの解像度がかなり上がりました。
今まで雰囲気でGitを使っていたこと、中身を知る大切さを痛感しました。
チームで仕様を擦り合わせる大切さ
ハッカソン等のチーム開発時、これまでは何となく仕様を決めて進めていましたが、今回のように設計だけに時間を取る日があると、全員が実装の流れを理解し、すぐ実装を始められるんだなと実感しました。
ハッカソンなどではここまで時間を取れないかもしれませんが、可能な限りDesign Docsは書いていきたいです。
レビュワーとしての能力不足
今回の開発フローでは、各々実装を進めた後、単体テスト作成。
PRを出し、CIが通ったらレビューを経てマージする形でした。
ただ、レビューに時間をかけすぎて実装する手を止めてしまっている時間が長かったり、レビュー漏れがありマージ後に修正が必要になることもあり、レビュワーとしての力不足を感じました。
生成AIが当たり前になっている今、品質も気にしつつ開発速度を上げるためにはいかに効率よくレビューできるかってのは大事なスキルになってくると思いました。
どの部分を力を入れてレビューするのか、手を抜く部分を決めるのも大切だなと感じた。
会社の雰囲気
5日間オフィスに出社してみて、静かに作業するだけでなく、出社メンバーでワイワイ話しながら進める雰囲気があると感じました。
↑インタビュー記事で語られていた「会話やコミュニケーションが生まれる場としてのオフィス」が体現されていました。
また、体験をとても大切にしていると感じました。
ユーザー体験はもちろん、開発者やインターン生の体験まで気を配ってくださっている印象でした。
僕が何気なくこうだったらいいな〜って思いで発言したことも真摯に受け止め、すぐ改善すると言ってくださったのが印象的でした。
こうした体験へのこだわりがプロダクトのユーザー体験にも表れているのではないかなと思いました。
終わりに
このインターンを通して、Gitの内部仕様や実務でのチーム開発の進め方、そしてProgateという会社について深く知ることができました!!
おそらく来年も同様のインターンが実施されると思うので、興味のある方はぜひ参加してみてください!!
学んだ知識を活かしてRustでGitを再実装したり、もっと低レイヤーな領域に触れてみようと思います。
余談
0日目 八景島シーパラダイス
出社時間的に福岡から当日移動は厳しかったため、前入りしました。
八景島シーパラダイスで開催されている「LIGHTIA」に興味があったので、横浜まで移動して満喫。
LIGHTIA超おすすめです。
Discussion