デザイナーだがサーバーサイドエンジニアとしてハッカソンに参加しました

sKawashimaです。

以前Post not found: 初めてハッカソンに出場して考えたこと SPAJAM2018に出場した時に「もう二度と出たくない」とか言ってましたが、知人からの誘いと思想の転換から再度SPAJAMに参加しました。
参加したのは2019/6/8〜9に開催されたSPAJAM2019 東京予選B会場です。

最近このブログの更新はハッカソン出場記録ばかりになってきてますが、次以降はいろいろ別のこと書くので今回はご容赦を。


目次

お誘いと参加表明

さて、今回のチームはこれまでの !kie とは異なる RAISE UP というチームです。

4月頃に同居人であるryu-gから「今度ハッカソンに出るハッカソンチームに誘われてるけど一緒に来ない?」とお誘いを受けました。
ryu-gを誘ったのは出身大学ではハッカソンの実績で有名な先輩と同期です。
ryu-gはデザイナーなので、自分はフロントエンドかなあなどと考えながら「話だけ聞かせて」と答えたところ、 「サーバーサイドエンジニアやってくんね?」 との依頼をいただきました。

少し悩んだ後に「やるかぁ」と返答して参加を決定しました。
悩んだ点は2つ。
1つ目は、自分は現在本業デザイナーとして活動しており、サーバーサイドは趣味程度であるため、ハッカソンガチ勢の中で迷惑をかけてしまいそうという懸念。
2つ目は、会社に入りたての時期で自分のコンディションがそれについて行けるか不安だったという懸念。
その上で、1つ目は事前学習、2つ目はノリと雰囲気と勢いで乗り切ろうと思い参加を決意しました。

もう少し真面目な話をすると、自分の活動の判断基準の1つが「今しか出来ないことをする」ことであって、こういった貴重な機会からは基調な体験と学びを得られると判断して参加を決意しました。

また、思想の転換として「デザイナーとしてではなくサーバーサイドエンジニアとして参加する」という切り替えがあったので、「普段とは違うことをする」楽しみを見出したのも参加の要因です。

メンバー紹介

ryu-gがメンバー紹介書いてくれました。

イカれたメンバーを紹介するぜ

ハッカソンの実績で有名な先輩 「iOS書くわ とりあえず機能の事考えないでデザイン作っていいよ」
ハッカソンの実績で有名な同期 「こちらにご用意したGPSモジュールで座標を取得しましょう」
しば(ぼく) 「デザイナーだけどデータベースとAPI作りました」
ryu-g「なまこの捕食シーン見たことある?」
ケンタッキー(元!kieメンバー)「熱出たから休むわ」

ryu-gの当日のツイート。

サーバーサイドで使った技術とツール

言語環境は TypeScript-ts-node-Node.js という形でTypeScriptを書きました。
ちゃんと型を書く練習したかったのでちょうどよかったのです。
サーバーのフレームワークは以前勉強してた Express を採用し、DBも同じ理由で MongoDB を選択しました。
(職場の人から「 deno 使わないの?」って言われましたが、せめてバージョン1.0以降に使いたいのとRUSTで書ける気がしないのでスルーしました)

Node.jsのデプロイ先は Now.sh を使いました。
なんせ名前にセンスを感じるし、使い勝手も非常に良いと聞いていたので使ってみました。
正直使いやすくて大好きです。
MongoDB に関しては、 MongoDB Atlas を使用しました。
初めて使いましたが、色々使いやすく便利でした。

当日の自分の動き

SPAJAMのアイデアソンは全力で脱力して参加しました
チーム全体のほぼ共通認識として、「このアイデアソンはいらない」と評価されていたので、「自分だけの認識じゃないんだなあ」と思いながらの判断です。

その後、チームでのアイデア出しには積極的に参加し、昼頃にはアイデアが確定しました。
今考えると早く確定させすぎた感じもありますが、たまには良いかなと思ってました。
アイデアは「位置情報の記録、その他能動的な記録ができるレンタル傘」です。

アイデアが確定次第、僕はデザインをryu-gにまかせてサーバーサイド、APIの開発開始です。
サーバー側に求められた機能はデータベースに対する単純な CRUD の一部だけ (Create/Read/Update/Delete) だったので、引っかかることなくサラサラ開発出来ました。
DBの設計は本業エンジニア軍勢の二人が作ってくれたので助かりました。
正直、まだDB設計はできる気がしていないのです。

ていうか、それなら Firebase で良かったやん…というところもありますが、自分で作ってるからこその工夫や調整ができたので満足してます。
あえて言うなら、 NowMongoDB Atlas へのデプロイ/連携周りは経験がなかったので、当日の試行錯誤でした。

当日の自分の動きのコンセプトは「常に出せるものを出す」でした。
最低限 hello だけ返すAPIを作って、それを Now にデプロイし、 MongoDB Atlas とのデータ連携をして…と常に最低限の成果状態を維持するよう意識して動きました。
コレに関しては普段のデザインの仕事や課題解決で意識するようにしている思想で、松竹梅提案よりも根本的な思想です。
まあ、マシュマロ・チャレンジを経験するとコレの価値はわかると思います。
とにかく周囲に悪影響が起きないよう、表層だけでも動く状態を維持しました。

時間に関しては、正直途中からやることがない状態だったので夜は寝たり起きたりを繰り返したり、仮データ作成ツールを作ったりするくらいには余裕でした。
必死になってた先輩には申し訳ない気持ちもあったりします。

そういえば、思ってたよりフロントエンドの技術が活かせたのが楽しかったです。
iPadにDBの最新の情報を表示するための画面や仮データ作成ツールの制作に結構使いました。
技術はいくら持っても損はしないですね。

結果と最優秀賞の印象

結果は、初出場と同じく、優秀賞でした。
正直、予想通りでした。
最優秀賞は発表を聞きながら逃したことを察していました。

敬意を持って、最優秀賞の成果を簡単に紹介します。
最優秀賞は、チーム「ERAIZA」のpicdoc
成果は「外国人向けピクトグラム写真撮ったら教えてくれるアプリ」です。
外国人は日本のピクトグラムが理解できない、という問題に対する改善案でした。

アイデアについて、デザイナーとして「なるほど」となりました。
SPAJAMではテーマが一日目の昼前に発表され、二日目の昼に成果発表するという厳しいスケジュールが組まれています。
その中で、アイデアについて「問題」をリサーチしたのか知っていたのか、少なくとも問題解決に全面を向けたアイデアづくりだったので素直に「負けた」と感じました
エンジニアリングについても、機械学習を用いた画像認識など、知識と技術有りきの成果でした。

チーム「ERAIZA」の成果には素直に負けたと思える気持ちの良い結果だったと思います。

チームの中でサーバーサイドエンジニアを経験して思ったこと

サーバーサイドエンジニアの楽しみとは何なのだろう、と終始考えていました。
自分は本業がデザイナーであり、趣味でフロントエンドエンジニアもやってますが、サーバーサイドエンジニアを積極的に仕事にしたことはありませんでした

自分なりに考えてみて、見つけた楽しみは3つあります。

1つ目は 「アルゴリズムを考えてプログラムを書くという行為そのもの」です。
例えばマインクラフトの建築のように、自分で何が求められていて何を作るかを考え、パーツを組み立てていく楽しみです。
エンジニアの楽しみとしてそれを実感したのは何気に初めてだったと思います。

2つ目は 「設計図を使い回して高速に機能が増やせること」です。
(いや、使い回すようなコードを書くな、という指摘は置いといて)
今回はシンプルなAPI実装がメインだったので、そのシンプルな要素は基本的に使いまわしが効きました。
ので、実装にかかる時間に対して増えていく機能が多く、それは素直に楽しいと感じました

3つ目は 「今まで見えていなかった裏側をほぼ完全に把握し、操れること」です。
上に「使い回し」という言葉を使いましたが、使い回してでも全部書くということはそこで起きている事象は全て把握できているということです。
「どのURLにどうアクセスされたら、どういう処理をしてどういうデータを返すか」というサーバーサイドエンジニアの責務は、同時に 「裏側を全て掌握して管理する」楽しさであることに気づけました
フルスクラッチ開発、してみるのも楽しいんだろうなあ(2つ目と矛盾しますが)。

このように、サーバーサイドエンジニアについての考えを大きく改める良いきっかけになりました。

ハッカソン運営の方々に関して

最初のアイデアソンで、去年体験した「喜怒哀楽を掘り下げる」の哀にて「以前煽ってきた運営の人がいてげっそり」的なことを書いた結果(しかもそれを僕以外のメンバーも書いていた)、直接その運営の人から謝られるという現象が発生しました。
これにはちょっと申し訳ない気持ちもあったり。
でも、今回は特に煽られることもなく――というか干渉そのものがない状態でやりやすかったのは事実でした

前回のときの煽りは「(周囲と比べて)遅れているチームを急かす」意味合いがあったんだろうなあ、と思いつつ、やはり 「無為に急かすのは良くない」という意見は変わらなかったです。

それとは別に思ったことと言えば、審査員の中で約一名、発表の質問タイムにマイクを渡されて「苦労したところはどこですか」しか聞かなかった人がいたことが非常に悪い意味で印象的でしたね。
技術者じゃなかったとしても、提案の中身に関する質問が1つもなかったのは流石に「何の審査員なんだ…?」と思ってしまった次第です。
「がんばったで賞」もらえるのかな。

終わりに

そんな感じです。
ひとまず、チームの中でのサーバーサイドエンジニアとしての経験ができたことは少なからず良かったと思います。
いろいろ、作りたいものを作っていけると良いなあ。

読んでいただきありがとうございます。
いい加減、1記事/1~2週を維持したいと思っていますが、どうなることやら…。
なんせ、作りたいものが無限にあるので、仕事以外の時間は読書と開発(と酒)みたいな生活してるもので。
アウトプットの重要性は実感しているので、ブログ執筆も真面目にやっていきたい所存です。
これからもどうぞよろしく。
ではまた。