サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞！)  ②

---
<font color="orange">サポーターズ</font>主催の技育CAMPに参加しての感想 ②
---

**博多華丸・大吉**

_スピーチとスカートは短い方が良い_

などと言われますが

_スライドとフライドも短い方が良い_

と私は思います。

スライドは短くシンプルに、フライドは軽くサクッと。

今回のハッカソンと、その後の打ち上げのソーセージフライドを食べて、そう感じたんですよね。

ま、私は発表の時、あがっていたんですけどね。

フライドだけに。
<br>


**目次**
- [1. 実装内容](#1-実装内容)
- [2. 背景・経緯](#2-背景経緯)
- [3. サーバーサイド](#3-サーバーサイド)
- [4. おわりに](#4-おわりに)

## 1. 実装内容

　[前回](https://qiita.com/come/items/40f778f59081118cd6f0)の続きです。

　私たちが今回実装したのは『鍵の観測者（オブザーバー）』というサービスです。
 
　これは「家などの鍵の締め忘れをすぐに通知し、戸締りを見張ってくれる」ものとなっています。

 本記事ではその実装の具体的な内容と、流れを書いていきます。なお、ハードサイド、データベースサイドは[次回]()(←書き次第URL有効化)書かせて頂きます。

 実際のコードや、スライドは[前回](https://qiita.com/come/items/40f778f59081118cd6f0)内容を参考にして頂ければと思います。
 
## 2. 背景・経緯

<font color="low blue">**共通の不安：鍵の締め忘れ**</font>

　私たちの日常生活において、家を出る際の鍵の締め忘れは、多くの人にとって共通の不安の一つです。
 
　このような小さな不注意が、大きな安全上のリスクにつながることは誰もが理解しています。
 
 　しかし、忙しい朝の出勤時や、急いでいる外出時には、この「当たり前」の行動が意外と見落とされがちです。

　この問題に対処するため、私たちのチームは最近開催されたハッカソンに参加しました。
<br>

 <font color="Salmon">**ハッカソンでの出会いとアイデアの誕生**</font>
 
 　今回のハッカソンは「テーマ自由」であり、審査基準は「世の中の役に立つこと」という非常に開かれた条件でした。
  
  　このような環境の中、何をプロジェクトテーマに選ぶか多くのアイデアが飛び交いましたが、チームメンバーの一人が自身の経験から、「家の鍵をちゃんとかけたかどうか不安」という問題を提起しました。
  
  　彼の話を聞いているうちに、チーム内で他にも同様の不安を抱えている人がいることがわかりました。
   <br>

  
 <font color="LimeGreen">**サービス開発への道**</font>
 
　この一見個人的な不安が、実は多くの人々に共通する問題であることに気づいた私たちは、この問題解決をプロジェクトのテーマに選びました。
 
 　そこから、家などの鍵の締め忘れをすぐに通知し、戸締りを見守るサービスの開発に乗り出したのです。
  
  このサービスは、ただ単に鍵がかかっているかどうかを検知するだけでなく、使用者が安心して外出できるようにすることを目指しています。
<br>

<font color="SaddleBrown">**技術と社会への貢献**</font>

　このプロジェクトを通じて、私たちは技術が日常生活の小さな不安を解消し、より安全で快適な生活を実現する手段となり得ることを実感しました。
 
　また、ハッカソンというプラットフォームが、社会的な問題に対する実用的な解決策を生み出す場として、いかに有効であるかを改めて認識する機会となりました。

## 3. サーバーサイド

<font color="HotPink">**サーバーサイドプロジェクトの紹介: Go言語とGinフレームワークを使用したLINE Botの実装**</font>

　ここでは、`Go`言語で書かれた`LINE Bot`のサーバーサイドプロジェクトについて紹介します。

　サーバーサイドでは、`Gin`フレームワークを利用しており、`LINE Messaging API`との通信、`Raspberry Pi`からの信号受信、`AWS`バケットとのデータ交換を行っています。

>実際のコード
[Github　サーバー側](https://github.com/kaaaaakun/render-line-bot-trial.git)
<br>

<font color="low blue">**プロジェクトのディレクトリ構造**</font>

　サーバーサイドの構造はシンプルです。以下のディレクトリとファイルが含まれています:

```bat
 render-line-bot-trial
├── go.mod
├── go.sum
├── main.go
├── pkg
│   ├── opendoor
│   │   └── opendoor.go
│   ├── postcallback
│   │   └── postcallback.go
│   ├── sendmessage
│   │   └── sendmessage.go
│   └── useaws
│       └── useaws.go
└── public
    ├── blue.html
    ├── lost.html
    ├── red.html
    └── yellow.html
```
<br>

- `go.mod` と `go.sum`：プロジェクトの依存関係を管理します。
- `main.go`：アプリケーションのエントリーポイントです。
- `pkg`ディレクトリ：ビジネスロジックを含む複数のパッケージがあります。
- `opendoor`：ドアを開ける操作を扱います。
- `postcallback`：LINEからのコールバックを処理します。
- `sendmessage`：メッセージの送信ロジックを含みます。
- `useaws`：`AWS`バケットとの通信を担当します。
- `public`ディレクトリ：静的ファイルが格納されており、以下のHTMLファイルが含まれます。
- `red.html`, `blue.html`, `yellow.html`, `lost.html`：各色のページを示します。

<font color="low blue">**min.go**</font>

　全てのコード解説は長いので、`main.go`のみ書かさせて頂きます。

```main.go
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"

	"line/pkg/opendoor"
	"line/pkg/postcallback"
)

func main() {
	engine := gin.Default()
	engine.GET("/", getTop)
	engine.POST("/callback", postcallback.PostCallback)
	engine.POST("/open_door", opendoor.OpenDoor)
	
	// 静的ファイルのルートを追加
	engine.StaticFile("/red", "./public/red.html") // publicディレクトリ内のred.htmlを提供
	engine.StaticFile("/blue", "./public/blue.html") // publicディレクトリ内のblue.htmlを提供
	engine.StaticFile("/yellow", "./public/yellow.html") // publicディレクトリ内のyellow.htmlを提供

	// publicディレクトリ内のlost.htmlを提供
	engine.StaticFile("/lost", "./public/lost.html")

	engine.Run(":" + "8080")
}

func getTop(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "hello world",
	})
}

```
　`main.go`はサーバーの設定とルートの定義を担っています。`Gin`フレームワークを使用して、ルートパスでの応答、`LINE`からのコールバックの受信、ドアを開けるためのエンドポイントの設定、そして静的ファイルへのルーティングが行われます。
 <br>

<font color="low blue">**統合サービスとデータベース: RenderとAWS**</font>

　このプロジェクトは、[Render](https://render.com/)というウェブホスティングサービスを使用して外部に公開されています。
 
 　これにより、ラズパイや`LINE Messaging API`からの通信や、公開された`public`ディレクトリ内の静的ファイルに簡単にアクセスできるようになります。
  
　また、`AWS`のバケットとの通信を通じて、ユーザー情報などのデータを保存および取得する機能が組み込まれています。

## 4. おわりに

　私は今回サーバー周りを主に担当しました。

　`AWS`や`LINE Messaging API`との実際のコードでのやり取りの仕方が学べてよかったです。

　また、静的ファイルはもっと凝ったページにしたかったのですが、技術と時間と知識が足りず無念です。学んでいきたいです。

　明日は③を書き、それでハッカソンの感想、解説は終わりとなります。

 引き続きよろしくお願いします。