feature image

2024年6月21日 | 作品紹介

ハッカソン参加記 4班"Slide Center"

挨拶

こんにちは チーム名をつけることを完全に忘れててどの様にブログを導入しようか困っている4班リーダーAlt--erです。

6/15、16の土日で行われた24年度春ハッカソンにおいて、4班は部内用のスライド一元管理サービス"Slide Center"を制作いたしました。


PDF形式のスライドをアップロードし、タイトルや説明文、ジャンルを設定することができます。また、一覧では登録されたジャンルでの絞り込みや検索も可能です。ハッカソンの発表スライドをアップロードしてくれた班もありました!

結果、「使い心地賞」を取ることができました。

動機

traPは部内共有ストレージを所有しており開発用の画像素材や集会スライド等の共有が行われています。ただ、ディレクトリ構造こそ整えてはいるものの一般的なドライブ系アプリの機能に留まっているため、資料が散逸しがちでした。
また、traQ(部内Slackのような内製SNS)上に添付ファイルとして共有される場合も多く、その場合検索性が極端に低いという問題も抱えていました。
そこで、スライドを一元管理しさらにジャンルなどの分類づけをスマートに行えるようなサービスを作る、という目標から誕生したのが"Slide Center"になります。

traP内では主に各種講習会や集会、集会で行う「らんぷろ」というLT会、ハッカソンでの発表などでスライドが作成・共有されるので、それらを全てこのサービスで管理できるようになります。

メンバー

フロントエンド

バックエンド

開発記録、用いた技術など

フロントエンド

(ここだけmehm8128が書いてます)

リポジトリ: https://github.com/traP-jp/h24s_04_frontend

使用技術

Webエンジニアになろう講習会という部内のWeb講習会で用いられていた、Vueを使って開発を進めました。
スライドの表示にはVuePDFを、アップロード部分にはvue3-dropzoneを用いました。

通信にはkyを用いていたのですが、以下のようなディレクトリ構成にしておくことで通信部分を分離して開発を進めやすくしました。分離しながらも、がちがちにやりすぎないことでハッカソン開発向けにしています。

└─── features/
    ├── {feature}/
        ├── api.ts    // kyを用いた通信を書く
        └── type.ts   // サーバーから降ってくる型やフロントから送信する型の型定義を書く

開発の進め方など

スライド一覧画面、アップロード画面、スライド閲覧画面の3ページあるので1人1ページ割り当てて、それぞれ実装していきました。
予めmehm8128がFigmaである程度デザインを作ったり、タスクをいくつかに分けたりしていたので、残りの2人のメンバーにはその通りに実装してもらって何か分からないことがあれば聞いてもらうような形にしていました。
コアの部分をライブラリに頼っていることもあり、特に大きな躓きはなくスムーズに進められたと思います。

スライドをアップロードするときに、スライドの1枚目を画像化してサムネイルとして保存していて、この画像化は(開発時間などとの兼ね合いで)フロントで行うことになったのですが、完全にGitHub Copilotくんにお任せしたらいい感じに書いてくれたのでよかったです。このサムネイルは一覧画面だけではなく、スライド閲覧画面でスライドを読み込んでいる間のフォールバックとして表示するようにして体験を向上させるのにも役立っています。
また、このサムネイルを用いてOGPも設定したかったのですがVueのままだとなかなか難しそうで、開発を継続するならfirebaseでいい感じの設定をしたりNuxt.js移行をしたりといった選択肢を考える必要があるのかなと思っています。

バックエンド

リポジトリ: https://github.com/traP-jp/h24s_04_backend

0日目(開催前夜まで)

フロントエンド側のmehm8128さんと話し合いながらDB設計を行っていました。この時にはジャンル以外にもユーザータグやtraQIDとの連携などといったサービス案が上がっていました。DB設計は一応これらの機能追加ができるように設定されています(ただ開発中の都合で一部テーブルのカラム数が増えましたが)。

1日目

初めの1~2時間でDB、バックエンドの基本的な環境構築を行いました。過去に個人制作で作ったBOTや以前のハッカソンのリポジトリなどからセットアップの構成を拝借しています。
ルーティングにはGoのパッケージ"Echo"を用いています。Echoは上記の"なろう講習会"でも扱われているパッケージで、traPでの各種サービスや実務でも用いられている有名パッケージです。

その後はアップロード/ダウンロード周り以外の部分について(ファイルの登録やジャンル機能など)noya2さんと共同で作業を進めました。プログラミングには互いに慣れていたこともありスムーズに作業を進められたかと思います。1日目の時点でアップロード周り以外については概ね作業を完了させることができました。

1.5日目(1日目深夜)~2日目

主にアップロード周りについての知見を入手する期間となりました。今回のサービスでは"Firebase Storage"を用いてそこにPDFの保存を行うようにしました。(mehm8128さんからの提案です。知見共有ありがとうございます!!)

今回のサービスにおいてファイルのアップロード/ダウンロードはサーバサイドで行いました。一度アップロードを行い、クラウドストレージ上のファイルパスとDL用URLを一度フロントエンドに返却。その後、そのデータとスライドに紐付けたタイトル、説明文などの情報をサーバサイドに送る、という流れとなっています。

Firebase関連のサービスの多くでGo言語で書かれたサーバアプリケーションがサポートされており、Storageもその一つです。アップロードについては特にこの記事の内容をもとに実装を進めました。また、ダウンロードについてもこちらのサンプルコードを参考に実装を行いました。

他にも、ファイルがアップロードされたことをtraQ上で通知するBOTの制作をnoya2さん中心に進めてもらいました。自分がStorage関連で模索している間に作業してもらったためなかなかサポートできませんでしたが、無事に通知を出すことができており、この後に行ったアップロードの確認等の作業でも役立てることができました。

メンバーから

@Alt--er

ハッカソンでのWeb開発は3回目、特に今回は初めてチームリーダーとして参加しました。スケジュールの調整やプロジェクトの設計等、ハッカソン前から動き出すべきことも多く、開発開始後もプロジェクトの舵取りを行う点で何かを決める場面が多かったりと今までの開発とは違った側面での経験を多く積めました。最後の方は自分がアップロード関連の作業を進めていたり等で駆動している中、BOT制作を請け負ってくれたnoya2さんに感謝!様ありがとうございます。

技術的な面についても、特にmehm8128さんがフロントエンドのみならずバックエンドについても多くの助言をくださったことで、自らの成長につながりつつ2日間で実装可能な分量に収めることができたと思います。気がついたらフロントエンドができている、というような状態だったのでフロントエンドチームの皆さんにも感謝しかありません。こんなリーダーでしたが1週間ありがとうございました!

@mehm8128

無事サービスとして動くところまで持っていけてよかったです。今までのハッカソンでは完成が間に合わなかったことが結構あったのですが、最低限必要な機能に絞って開発できたのと、全員上手く役割分担して作業できていたのがよかったのかなと思いました。
賞も取れたということで今後もtraP内で使われ続けることのできる便利なサービスだと思っているので、さらに使い勝手をよくしていけたらなと思います。

@noya2

私としては初めてのWeb分野の開発で、不安も大きかったのですが、チームのみんなに支えられて開発を進められました。サービスの作り方、チーム開発の進め方など、勉強になることがたくさんあって、大きく成長できる機会になりました。何より、サービスとして動くところを見ることができたのが本当に嬉しかったし、チーム全体としても盛り上がったと思います。リーダーの alt--er くんが、バックエンド経験者として、同じバックエンド担当である自分に的確に仕事を振り分けてくれたことで、2日間がとても有意義なものになったと思います。ありがとうございました!

@Hyde_616

私はこれまでWeb開発の経験がなく、3年にして完全初心者でこのハッカソンに臨むことになりましたが、先輩のサポートのおかげで何とか役に立てることがあってよかったなと思います。
スライド閲覧ページの製作以外何も携われなかったので、いつの間にかサービスが動くようになっていて驚きました。すごい。私ももっと勉強して、もっと役に立てるようになれたらいいなと思いました。2日間ありがとうございました!

@koki_10

私は完全初心者でtraPに入り初の開発がこのハッカソンで正直なところ不安が強かったですが、諸先輩方に支えていただき自分の仕事をこなすことができたと思います。また開発の実践をすることで勉強になることはもちろんのこと、自身のモチベーションの向上や、これからのtraP生活の展望を得ることができ、私にとって大きな転機になると思います。
今回のハッカソンでは諸先輩方に頼りきりであったので今後もっと勉強をしたり、アイデアを考えたりして次に関わる開発では主体的に動けるようになりたいです。

Alt--er icon
この記事を書いた人
Alt--er

23B_ゲーム,Sysad,サウンド,アルゴに興味あり。 なんか色々頑張りたい

mehm8128 icon
この記事を書いた人
mehm8128

21B JC。SysAd班で色々やってます

noya2 icon
この記事を書いた人
noya2

Hyde_616 icon
この記事を書いた人
Hyde_616

koki_10 icon
この記事を書いた人
koki_10

24B、SysAd班、algorithm班、Kaggle班 プログラミング初心者です! SysAdをメインで活動したいと思っています

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2023年11月21日
School Breakin' Tag -新感覚おにごっこ-
s9 icon s9
2024年9月20日
2024年 1-Monthonを開催しました!!
Synori icon Synori
2023年12月11日
DIGI-CON HACKATHON 2023『Mikage』
toshi00 icon toshi00
2022年4月7日
traPグラフィック班の活動紹介
annin icon annin
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記