はじめに
こんにちは!あんころです。
3月にProgateハッカソン powered by AWSに3人1チームで参加し、なんと最優秀賞を取ることができました!
嬉しい気持ち半面、メンバーに助けてもらった場面も多く、手放しで喜べない気持ちも正直あるといった所感です。
この記事では、良かった点・反省点・次に向けての考えを率直にまとめていきます。
どんなハッカソン?
Progateハッカソン powered by AWSは、Progate株式会社様が主催するハッカソンイベントです。
イベント当日の2日間はAWS環境が無料で使えるのが大きな特徴で、「AWSを試してみたいけどお金がかかるのがネックで…」という方にはおすすめです。また、チーム開発を通じたスキルアップも期待できて、大変メリットが多いイベントです。
4月開催が最終回とのことなので、興味がある方はぜひ参加を検討してみてください!
自分のハッカソンの目標
今回は、以下の3つを目標として掲げました。
-
AWSを使って本番インフラを構築する
→ IaCを使い、本番デプロイを完成させることができました。 -
CI/CDパイプラインを構築する
→ GitHub Actionsで自動デプロイの仕組みを構築できました。 -
チーム開発を円滑にする (心理的安全性の確保)
→ ハッカソン前にDiscordチャンネルを作り、メンバーを招待して打ち解ける時間を設けることができました。
→ Discordのチャンネルを用途ごとに分け、自分の取り組みや気持ちを積極的に発信しました。
→ 自分から積極的に話しかけ、話しやすい雰囲気作りを意識しました。
結果として、事前に立てた3つの目標をすべて達成することができました。
作ったもの
プロダクト名:KaleidoScan
コンビニ商品をスマホカメラで撮影すると、その商品からオーラが出るというコンセプトのプロダクトです。
「商品からオーラが出たら面白くない?」というメンバーの一言から発案されました。いつも同じ商品を買いがちな人に、オーラを通じて新しい商品との出会いを提供したいという想いがベースにあります。
また、デフォルトの売上ランキングモードに加え、掘り出し物モードや急上昇モードなど複数のユースケースも設計し、幅広い層の方に使ってもらうようにしました。
詳細をもっと知りたいよという方はこちらもぜひご覧ください ↓
余談: キックオフ前の失敗談…
今回のハッカソンは「モバイル × コンビニ」というテーマがありましたが、去年はテーマがなかったため、今年も同様だと思い込んでいました。その結果、キックオフ前に別のプロダクトを考えていたものがテーマ発表でボツになってしまいました…..
この経験から、去年の前例を鵜呑みにせず、事前に運営へ確認することを怠らないようにしないとなと強く感じました。
自分が関わった部分
今回、大きく、フロントエンド・インフラの2つの領域に関わりました。
フロントエンド
フロントの土台作り
基本的な機能実装やUIの調整など、ブラッシュアップ担当のメンバーが深掘りしやすいベースを作ることを意識しました。
動くオーラ部分の実装
オーラのブラッシュアップはメンバーに任せましたが、このオーラの動き自体は本当に苦労しました。何時間もClaude Codeと壁打ちしながら作りましたが、自分のイメージ通りにならない場面が続きました。ただ、オーラはこのプロダクトの核であり、UX上も最も重要な部分です。ここは妥協したくなかったので、粘り強く向き合い続けました。最終的に、自分の求めているものを作れたときは本当に嬉しかったです。
インフラ
IaC仕様書・AWS構成図の作成
ハッカソン当日にIaCを使って実際のインフラ環境を構築・本番デプロイ、CI/CD構築
普段はフロントエンド・バックエンドが中心ですが、今回は設計ドキュメントの整備からインフラ・デプロイまで一気通貫して担当できたのは、自分の中でも大きな経験になりました。
ハッカソンでの学び
Claude Codeを使った開発
今回初めて、SKILLやサブエージェントを本格的に定義して開発に臨みました。SKILLで専門知識を与えたり、サブエージェントを定義してメインエージェントのコンテキスト汚染を防いだりと、コスト面も含めて多くの気づきがありました。ChatGPTやGeminiと比べても開発効率は段違いで、Claude Codeの可能性に改めて驚かされました。
また、git worktreeを使った並行開発も初めて体験しました。バックエンドのAPI実装と並行して作業を進めることができた一方、操作を誤ってコンフリクトを起こしてしまう場面もありました。
なんとか解消できましたが、並行開発ならではの難しさも身をもって学びました。
TDDによるテスト駆動開発
RED(テストを先に書く)→ GREEN(テストを通す実装をする)→ REFACTOR(リファクタリング)のサイクルで進める開発手法です。これまで個人開発でコード品質を意識したことはほとんどありませんでしたが、今回触れてみて、その有効性を実感しました。今後の個人開発でも積極的に取り入れていきます。
Lefthookによるコミット前CIチェック
Lefthookという仕組みを今回初めて知りました。コミット前に自動で(テスト・リント・フォーマット)チェックが走る仕組みで、コード品質を継続的に保てることを学びました。
事前にドキュメントをまとめるということ
今回の開発では、フロントとバックエンドの連携でのズレや認識違いが一切起きず、非常にスムーズに進めることができました。これはメンバーが事前にドキュメントを整備し、全員で読み合わせをして認識を揃えてから開発に入ったおかげだと思います。これまでのチーム開発では認識のズレによる衝突を何度も経験してきただけに、その効果を強く実感しました。次のHack1グランプリでも必ず取り入れます。
メンバーの皆さん、本当にありがとうございました。🙏
ハッカソンを通して見えてきた課題
ハッカソンに参加をし、成長した!と喜ばしいと感じる部分がある半面
ここはちょっと改善がいるなと感じる課題も多くありました。
メンバーが優秀すぎて助けてもらうことが多かったこと
自分でも主導して貢献できた部分はありましたが、振り返るとメンバーに助けてもらった場面が多かったと感じています。
特に印象に残った動きをここに残すとともに、自分も真似をして武器にしていきます。
メンバーAの凄かったところ
- 情報整理・ドキュメント整備の徹底ぶり。api.md・db.mdなど必要なドキュメントを事前にきれいに用意してくれており、認識ズレのない開発環境を整えてくれた。
- 思考の言語化能力の高さ。自分が理解するのに時間がかかる内容を、数十分で把握して
的確にまとめてDiscordに共有してくれた。頭の回転の速さに驚いた。 - 発表中、他チームの内容をすべてメモして感想を書いていた。自分は自分たちの発表さえ終わればいいと思っていたので、学びへの貪欲さという点で自分の姿勢の甘さを認識させられた。
- Claude Codeへの深い知見。SKILL・サブエージェント・Hook・gitworktreeを使った
並行開発環境まで設計・導入してくれた。
メンバーBの凄かったところ
- UI/UXの引き出しの多さ。フォント選定・配色・コントラスト比まで丁寧に比較検討しており、アクセシビリティへの配慮もあった。
- AIに良いデザインを出力させるための設計まで考えていた。「ClaudeはFigmaなしでピクセルパーフェクトに対応できるのか」「px指定だとレスポンシブが崩れるのでは」という懸念を先回りして設計に落とし込んでいた。自分にはそこまでの視点がなかった。
- ローディング画面をレティクルで表現する提案。自分は「くるくるのアニメーションでいいか」と思っていたが、彼はそこをUIとして深掘りしていた。
- 妥協を一切しないところ。ハッカソン後に「まだやりたいことがあった」と言っていて、
自分がすでに満足していたことを振り返ると、いかに自分が妥協していたか、甘いかを気づかされた。
自分を卑下しすぎてしまうこと
貢献できた部分があったにもかかわらず、メンバーに謝ってばかりいる場面が多くありました。結果として、メンバーに余計な気を遣わせてしまったと思います。さらに「自分はダメだ」と自分を責めてしまうことも多く、メンタル面ではまだまだ未熟だと感じています。
こうなってしまうのは、自己評価の低さや自己肯定感の低さが主なのかなと思っています。ただ、自分を卑下してしまうのは、それだけ真剣に取り組んでいる証拠でもあると思います。目標を立てて自分に厳しくなれる人ほど、陥りやすい罠です。
同じように感じている方へ伝えたいのは、ハッカソンに出て自分を成長させようとしているだけで、すでに十分すごいということです。比較するなら他人ではなく、過去の自分と比べてみてください。ハッカソン期間中、毎日その日の自分の頑張りを書き出してみるのも一つの方法かもしれません。
とはいいつつも、頭でわかっていても中々難しいですよね。
自分もまだ発展途中です。一つ一つ積み重ねて、成長していきましょ!
技術理解が置き去りになってしまっていること
ハッカソンは期日までに完成させることが求められるため、どうしても「動けばOK」という気持ちになりがちです。しかし、自分が理解しないまま終わってしまうのはもったいないですし、AIに出力させるだけでは、エンジニアとしての成長につながらないと感じています。
特にIaCの部分は、ハッカソン中は「とりあえず環境が作れればOK」という目標で進めてしまいました。今回はうまくいきましたが、同じことを次回も再現できるかと問われると、正直自信がありません。その再現性のなさに課題を感じているので、ハッカソン後に改めて時間を取り、きちんと理解を深めようと思います。別途まとめ記事を投稿予定です。
次のハッカソンに向けて
次は4月12日からのHack1グランプリに、個人参加で野良の人とチームを組む形で出場します。
個人参加を選んだ理由
Hack1グランプリは去年も参加しました。しかし当時は実力不足で開発にほとんど関われず、ハッカソン後にメンターさんの前で大号泣するという、自分の中で一番悔しい経験をしました。
そのリベンジとして、今年は必ず自分の納得できるプロダクトを作り切りたいと思っています。
個人参加を選んだ理由は2つあります。メンバーとのスケジュールの都合が合わないという理由もありましたが、それ以上に、同じメンバーで出場すると再び依存してしまう可能性が高いと感じたからです。
- 過度な依存をせず、自分でプロダクトをやり切る経験を積むこと
- そして今度は自分がメンバーを助ける側に回ること
その2つを目標に、あえて一人で挑む道を選びました。
もし一緒のチームになる方、これからよろしくお願いします。
引き続き応援もよろしくお願いします!