「佐賀をさんぽするためのアプリ」をつくった
「2024 ガバイソン春」にて、「佐賀でさんぽするときに使えるWEBアプリ」を作ってみました。
同イベントにて最優秀賞をいただいています。うれしい。
コンセプト
「オルレ」 というのは、リボンや「カンセ」と呼ばれるオブジェクトなんかの目印を頼りに整備されたルートを散策する、韓国初のレジャーです。九州でも「九州オルレ」として行政に受け入れられ、いまでもいくつかの町ではルートの保全がなされているとか。
余談ですが、僕の地元、佐賀の嬉野でも昔やってました。春になると桜がきれいな街で、木にぶら下がったリボンをたどって散歩するのが楽しかった記憶。
そんな佐賀のゆったりした空気、時間を「さんぽ」として楽しんでもらいたく、目的地を巡りながら散策する際の手助けになるアプリケーションを作ろう!というのが今回のコンセプトです。
完成品
(クレジットの関係で予告なく閉じる場合があります)
技術構成
今回はイベント側から 「PHPを使用する」 という制限がありました。ということで、構成は以下の通りです。
- Laravel v10
- Blade (テンプレートエンジン)
- Sail (Laravel + Docker をサポートする機能)
- Google Maps API
- Places API (位置データの取得)
- Direction API、Distance Matrix API (ルートの計算、取得)
- Maps JavaScript API (マップのレンダリング)
- Microsoft Azure
- GitHub Action (mainにpush時に自動でデプロイ)
Laravel に関しては前のハッカソンで痛い目を見たこともあり、セットアップから不具合への対応を記事にしてまとめていたのが功を奏しました。
チーム
僕を含めた5人チームです。
ほかのチームが同じ大学に所属するチームのなか、専門学生3人 + 大学生2人という混合チームで出場しました。
いつものような領域での分担はせず、各自が残存タスクを手に取る形でプロジェクトを回してみましたが、フロントをnaoyuki君が、インフラを柳井くんが専念してくれたのもあり、心置きなくバックエンドを進めることができました。
気付き
以下反省と気付いたことの雑記です。
要件は固めなくてもいい
いままでのハッカソンでは、
- 要件を機能単位で整理する
- 要件定義書からタスクを逆算してチケットを切る
- チケットに対して各自をアサインする
- 作業が終わったらmainにプッシュする
という感じで作業してましたが、今回は
- 作りたい機能を案として自由に列記しておく
- 必要だと感じた段階でチケットとして登録する
- 手が空いているメンバーが自主的にアサインする
- 作業が終わったらdevelopにプッシュする
- キリがいい動作版をひとつのバージョンとして新しいブランチに切り出す
という流れで作業をしました。
事前開発期間が1週間しかなかったこともあり、若干の焦りから生まれた方法でもあるんですが、結果的にみんなが「なにかしなければ」と思ってくれたようで、モチベーションの維持がしやすいと感じました。
「ひとつの完成版」を作るという意識ではなく、「機能を足していき、キリがいい状態を最新バージョンとする」 ことで、「もしこの機能が作れないと発表に間に合わない...」という焦りを生むこともなくなり、結果として気軽にコミットがしやすい土壌になっていた気がしてます。
Laravel + JS でのデータの共有がムズい
public/js
にJavaScriptファイルを置いて直接読み込む形式をとったのですが、JS側でAPIと通信して取得したデータをLaravelに送信する必要があり、ここで結構悩むことになりました。
案としては、
- formにhiddenなinputを置き、そこにデータを含める
- Ajaxで直接POSTする
などがあり、時間の都合で前者を使用したんですが、未だ最適解はよくわかっておらずといった感じ。
Request
にデータを集約するのが正解だと感じてるので、Ajaxのほうが素直なのかとも思っていますし、Laravel 側でサポートしてそうな雰囲気があるので(サービスプロバイダまわり)、もっと勉強できそうな感じがします。
むすび
まさかの初優秀賞が地元のハッカソンになり、個人的にめちゃくちゃうれしい次第です。引きこもり時代の日課が発案のきっかけになったり、メンバーや開発環境にも恵まれたりと、とても楽しいイベントでした。
また参加します。
Discussion