サポーターズ主催の技育CAMPに参加しての感想 ②
博多華丸・大吉
スピーチとスカートは短い方が良い
などと言われますが
スライドとフライドも短い方が良い
と私は思います。
スライドは短くシンプルに、フライドは軽くサクッと。
今回のハッカソンと、その後の打ち上げのソーセージフライドを食べて、そう感じたんですよね。
ま、私は発表の時、あがっていたんですけどね。
フライドだけに。
目次
1. 実装内容
前回の続きです。
私たちが今回実装したのは『鍵の観測者(オブザーバー)』というサービスです。
これは「家などの鍵の締め忘れをすぐに通知し、戸締りを見張ってくれる」ものとなっています。
本記事ではその実装の具体的な内容と、流れを書いていきます。なお、ハードサイド、データベースサイドは次回(←書き次第URL有効化)書かせて頂きます。
実際のコードや、スライドは前回内容を参考にして頂ければと思います。
2. 背景・経緯
共通の不安:鍵の締め忘れ
私たちの日常生活において、家を出る際の鍵の締め忘れは、多くの人にとって共通の不安の一つです。
このような小さな不注意が、大きな安全上のリスクにつながることは誰もが理解しています。
しかし、忙しい朝の出勤時や、急いでいる外出時には、この「当たり前」の行動が意外と見落とされがちです。
この問題に対処するため、私たちのチームは最近開催されたハッカソンに参加しました。
ハッカソンでの出会いとアイデアの誕生
今回のハッカソンは「テーマ自由」であり、審査基準は「世の中の役に立つこと」という非常に開かれた条件でした。
このような環境の中、何をプロジェクトテーマに選ぶか多くのアイデアが飛び交いましたが、チームメンバーの一人が自身の経験から、「家の鍵をちゃんとかけたかどうか不安」という問題を提起しました。
彼の話を聞いているうちに、チーム内で他にも同様の不安を抱えている人がいることがわかりました。
サービス開発への道
この一見個人的な不安が、実は多くの人々に共通する問題であることに気づいた私たちは、この問題解決をプロジェクトのテーマに選びました。
そこから、家などの鍵の締め忘れをすぐに通知し、戸締りを見守るサービスの開発に乗り出したのです。
このサービスは、ただ単に鍵がかかっているかどうかを検知するだけでなく、使用者が安心して外出できるようにすることを目指しています。
技術と社会への貢献
このプロジェクトを通じて、私たちは技術が日常生活の小さな不安を解消し、より安全で快適な生活を実現する手段となり得ることを実感しました。
また、ハッカソンというプラットフォームが、社会的な問題に対する実用的な解決策を生み出す場として、いかに有効であるかを改めて認識する機会となりました。
3. サーバーサイド
サーバーサイドプロジェクトの紹介: Go言語とGinフレームワークを使用したLINE Botの実装
ここでは、Go
言語で書かれたLINE Bot
のサーバーサイドプロジェクトについて紹介します。
サーバーサイドでは、Gin
フレームワークを利用しており、LINE Messaging API
との通信、Raspberry Pi
からの信号受信、AWS
バケットとのデータ交換を行っています。
実際のコード
Github サーバー側
プロジェクトのディレクトリ構造
サーバーサイドの構造はシンプルです。以下のディレクトリとファイルが含まれています:
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
-
go.mod
とgo.sum
:プロジェクトの依存関係を管理します。 -
main.go
:アプリケーションのエントリーポイントです。 -
pkg
ディレクトリ:ビジネスロジックを含む複数のパッケージがあります。 -
opendoor
:ドアを開ける操作を扱います。 -
postcallback
:LINEからのコールバックを処理します。 -
sendmessage
:メッセージの送信ロジックを含みます。 -
useaws
:AWS
バケットとの通信を担当します。 -
public
ディレクトリ:静的ファイルが格納されており、以下のHTMLファイルが含まれます。 -
red.html
,blue.html
,yellow.html
,lost.html
:各色のページを示します。
min.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
からのコールバックの受信、ドアを開けるためのエンドポイントの設定、そして静的ファイルへのルーティングが行われます。
統合サービスとデータベース: RenderとAWS
このプロジェクトは、Renderというウェブホスティングサービスを使用して外部に公開されています。
これにより、ラズパイやLINE Messaging API
からの通信や、公開されたpublic
ディレクトリ内の静的ファイルに簡単にアクセスできるようになります。
また、AWS
のバケットとの通信を通じて、ユーザー情報などのデータを保存および取得する機能が組み込まれています。
4. おわりに
私は今回サーバー周りを主に担当しました。
AWS
やLINE Messaging API
との実際のコードでのやり取りの仕方が学べてよかったです。
また、静的ファイルはもっと凝ったページにしたかったのですが、技術と時間と知識が足りず無念です。学んでいきたいです。
明日は③を書き、それでハッカソンの感想、解説は終わりとなります。
引き続きよろしくお願いします。