ハッカソン振り返りレポート


## 参加したハッカソン
- 開催日： 2024/12/2 ~ 2024/12/3
- イベント名： スマプロハッカソン2023

## 作ったもの
- モチベが上がる映像を共有しあうサービス(未完成)<br>
[https://github.com/DD-dream-director/DreamDirector](https://github.com/DD-dream-director/DreamDirector)
## 技術スタック
- Django(PythonのWebフレームワーク)
- HTML,CSS,JavaScript

## 良かった点
- **方向転換のスピード**: 初日のメンターさんとの討議の末、事前開発で定めた目標の実現が難しいことがわかったため、
  早い段階で今回の案に方向転換した。
- **ソースコードのコメント**: プロダクトは最終的に完成したなかったが、開発後のメンター様からのフィードバックにて、
「ソースコードに適切なコメントが施されているため、ソースを読めば設計の全体像が見える」といわれた。

## 反省点
- **DataBaseの検討が甘かった**: DBの設計が甘かったため、実現したい機能に対して、後付けでDBを増築した。
  その弊害として、ある程度開発が進んでいた部分を改変せざるを得ない状況になり、開発が遅れた。
- **計画的なコミュニケーション**: 疑問が生まれたらすぐにバックとフロントでコミュニケーションをしていたら、自分の仕事ができなくなる。

## 反省点の考察
- **DataBaseの検討が甘かった件について** : DBの設計を適切に行うためには必要な機能を洗い出す必要がある。
  今回は事前開発期間でそれを行えなかったので、もっとミーティングの頻度を増やすべきだった。

## 今後の改善策
- **ER図＆アクティビティー図を作る** : DBを先に作るためには、機能の洗い出しが必要であり、そのためには機能の可視化が必要である。また、可視化することでチーム内の完成イメージが統一されやすいため、まとまって開発しやすい。
- **情報共有の時間は決めた時間のみ行う** : 話合いは大事だけど、
  フロントエンドとバックエンドのやり取りが多すぎると
  頻繁に議論が発生し、各々の分担に集中できない。
  事前開発機関では一日おき、当日は１時間３０分おきくらいがちょうど良いと思う。
- **フロントエンドとバックエンドで役割分担するときは情報のインターフェイスをきちんと定める** : 特にDjangoの場合は特殊だから、Djangoテンプレートに渡すコンテキストの名前をきちんと協議の上決定してから開発を進める。


## その他の感想・学び
- チーム開発だとコードスタイルをどういう風に統一するかをすごく考えた。キャメルケースが好きない人もいれば変数名を自分好みに省略しちゃう人もいた. 普段意識しない部分について考える機会となり、これからコードを書く上での新たな指針となった。
- チーム全体での計画的なコミュニケーションの重要性を痛感した。初めにきちっと決めていれば疑問点が生まれるたびに役割分担した人同士でコミュニケーションをとる必要性が少なくなり、担当分野に深く集中できる。

- 時間管理の難しさを感じた。ハッカソンでは限られた時間の中で製品を作り上げる必要があり、それぞれのタスクに割ける時間をきちんと見積もることが重要だと学んだ。
- プロダクトは完成していないし、反省をし改善策を考えただけでは身につかないと思うから、最後まで作りきる。また、その過程で今回考えた改善策を実践する。

# まとめ

- アクティビティー図とER図を作成し共有すべし!
- Djangoのテンプレートはバックエンドの人間が継承元のbase.htmlを作成し、それに合う形のテンプレートを作るべし！<br>
  - 実際に使ったテンプレート(Djangoテンプレート言語という意味ではない)
      - 継承元(base.html)
        ```Django
        {% load static %}
    
        <!DOCTYPE html>
        <html lang="ja">
          <head>
            <meta charset="UTF-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <link rel="stylesheet" href="{% static 'css/diagnosis.css' %}">
            {% block title %}
    
            {% endblock %}
            {% block extraMetaInfo %}
    
            {% endblock %}
          </head>
          <body>
            <header>
              <a href="{% url 'recommend_videos' %}" name="return_home">トップページ</a>
              <a href="{% url 'post_video' %}">投稿</a>
              {% if request.user.is_authenticated %}
                  <a href="{% url 'account_app:logout' %}">ログアウト</a>
                {% else %}
                  <a href="{% url 'account_app:login' %}">ログイン</a>
                  <a href="{% url 'account_app:signup' %}">会員登録</a>
                {% endif %}
    
    
              {% block extraheader %}
    
              {% endblock %}
            </header>
            <main>
              {% block main %}
    
              {% endblock %}
            </main>
            <footer>
              {% block extrafooter %}
    
              {% endblock %}
            </footer>
          </body>
          {% block extraScript %}
    
          {% endblock %}
        </html>
    
        ```
    - 継承先
      ```Django
      <!-- 可読性と管理効率向上のため,以下のコメントとblockは消さないこと -->
      {% extends 'base.html' %}
      {% load static %}
    
      {% block title %}
        <!-- titleタグを入れる -->
      {% endblock %}
    
      {% block extraMetaInfo %}
        <!-- 追加のlinkタグなどを入れる -->
      {% endblock %}
    
      {% block extraheader %}
        <!-- headerタグ内の追加要素を入れる -->
      {% endblock %}
    
      {% block main %}
        <!-- mainタグの追加の要素を入れる -->
      {% endblock %}
    
      {% block extrafooter %}
        <!-- footerタグ内の追加要素を入れる -->
      {% endblock %}
    
      {% block extraScript %}
        <!-- 追加のjavascript読み込み用のscriptタグを入れる -->
      {% endblock %}
      
- メンターさんにもっと頼るべし！
- 名刺を作るべし！
- 変数名は省略するべからず！(省略するときはコメントを必ず入れること！)
    例
    ```python
    def printHello():
        '''
        "Hello"を表示する関数
        '''
        output = "Hello"
        print(output)
    ```


---
読んでくれてありがとうございます！(｀･ω･´)ゞ
お粗末様でした！<(_ _)>