U22プログラミングコンテストに応募してみて

先週10月20日に最終審査会が行われたU-22 プログラミングコンテストにて、「経済産業省商務情報政策局長賞アイデア部門」を頂きましたので、その雑記です。
もう少し書き足したいのですが、そうすると公開がいつになるか分からないので、とりあえず投稿させていただきます。

以前、「[第2回東京公共交通オープンデータチャレンジで優秀賞をいただきました。](https://qiita.com/takoyaki3/items/edcf3c2d03b2f03f8a95)」という記事を書いたところ、今までの僕の中では最大のいいね（2019年10月27日現在、14...）をいただけましたので、今回も少しだけスケジュール感などをメモします。

あまり詳しくは書いていないので、興味を持ってくださった方は[ニコニコ生放送に最終審査会の様子のアーカイブ](https://live.nicovideo.jp/gate/lv321895646)があるようなので、併せてご覧ください。
どの作品もレベルが高く、とても面白いプレゼンでした。

因みに、11月15日〆切で第３回東京公共交通オープンデータチャレンジもあるそうなので、どうにか今回も出したいなと作りつつ、間に合うのかなと非常に不安な状況です…（苦笑）。間に合うといいな...。今回は見送ろうかな…。

# 開発した作品
作成したものは、**「スマホで読み取ることのできるマークシートプラットフォーム」**です。
YouTubeに応募時の動画をアップしていますので、ご覧いただければと思います。

紹介動画： [https://youtu.be/OZ_KsAbBBWQ](https://youtu.be/OZ_KsAbBBWQ)
WebAPP： [https://cell-sheet.com](https://cell-sheet.com)

具体的には、

1. 独自シート作成
2. PDFでダウンロード
3. スマホで読み取り
4. 結果集計・訂正
5. CSV出力、Web上でグラフ化

等々、テストやアンケートで使える機能を作成し、統合しています。

![](https://gyazo.com/422c92f36d91d806c53d93e9b49a3b68.png)

# 開発に使用した言語
今回、Cell Sheet の開発に使用した言語は、次の通りです。

|言語|用途|
|---|---|
|Javascript|Webアプリ|
|PHP|サーバーサイドとWebUIをつなぐためのAPIなど|
|Python|画像解析ソフトなど|
|node.js|Cloud Functions での処理|

また、フレームワークやライブラリとして

- Vue.js
- OpenCV

を使用しました。

今回は環境構築の手軽さから、画像解析に OpenCV を使用していますが、速度面から、C++で実装したいところです。

# システム構成

今回は、Google Firebase を中心に、Google Cloud Platform を使用しました。
また、執筆時点ではセキュリティ対策として、さくらのレンタルサーバーを使用しています。
セキュリティに関するアドバイスをくださった方に感謝します。

CloudをVPS以外の用途で使用したのは初めてだったのですが、一度理解すれば、非常に便利だと感じました。
まだまだ一部の機能しか使えていないので、クラウドを使いこなせるようになりたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224979/b79fc1a3-8fcd-4bc5-adb5-306b1ce1c0d1.png)

なお、解析サーバーには、ドッカーによる仮想化を導入しています。
基本的には、GCPのAlwaysFreeの対象となっているf1-micro（vCPU x 1、メモリ 0.6 GB）です。
また、解析処理などでは、さくらのレンタルサーバーを中間に挟むことで、ユーザーが直接ドッカー内の解析サーバーにアクセスすることを防いでいます。

ログイン処理や、Storageにアップする処理は、Firebaseを利用させていただきました。

# 開発経緯

今回、このマークシートプラットフォームを作成しようと考えたきっかけは、高校の生徒会活動でのアンケート集計です。

![](https://gyazo.com/60907d95732bdcfb7884650cb9d35231.png)

手作業でのアンケート集計に、僕の青春を捧げました。
それはそれで、いい思い出だったりもするのですが（笑）

しかし、冬休みをアンケート集計に費やすことに疑問を感じたので、
スキャナがなくても、学生が気軽にマークシートを使えるようなシステムを作れないかと考え、

- [C++でマークシート読み取れるフリーソフトを自作してみた！](https://qiita.com/takoyaki3/items/c3ccd2765f285764e5a0)
- [Webで使えるマークシート処理サービスを作る（構築編）](https://qiita.com/takoyaki3/items/3d007546fa24fb11c297)

とQiitaにも投稿したように、Cell Sheet の開発を開始しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224979/ec5e5296-cd40-67b2-bbb6-53fd973cd53e.png)

第一世代では、縦横にしかマーカーを配置しなかったため、真上からの撮影やスキャナ画像でないと読み取りが厳しい状況でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224979/67a148ae-4bf7-48fb-e40e-8ab0b951aac5.png)

第二世代として、マーカーを四隅に配置することで、斜めからの撮影でも問題ないようになりました。

これに、集計機能や独自シート作成機能を追加し、今回の応募に至りました。

![](https://gyazo.com/422c92f36d91d806c53d93e9b49a3b68.png)

# スケジュール
2017年12月　第一世代解析ソフトを作成する
2019年03月　第二世代解析ソフトを作成する
2019年08月　U-22プロコンに向け、独自シート作成や集計のWebアプリを作成する
2019年09月　応募
2019年10月　U-22プロコン最終審査会に向け、機能を追加する

・・・ほとんど、作業自体は８月以降ですね…
最終版の提出が〆切３分前くらいだったので、~~もう少し余裕を持ちたいところです…~~ 最後まで改良したかったということで。

コンテストを積み重ねるほど、〆切ギリギリを極めている気がします。


# 感想
U-22プログラミングコンテスト、想像していたよりレベルが高く、感動しました。
事前に昨年のアーカイブなども見させていただきました。しかし、恥ずかしながら私の技術力・想像力では、説明分を読むだけでは、イマイチ細かい部分が理解できず、なんか凄そうだけど、なにがすごいのだろう状態でした。
しかし、目の前で彼らのプレゼンを見ると、自分との距離を見せつけられ、衝撃を受けるとともに、どうすれば距離を縮められるのか、考えさせられるとても良い機会でした。

我々は、既存のライブラリやフレームワークなど、使えるものは使っていこうスタンスだったのですが、経済産業大臣賞総合のBlawnなど、計算機のハードウェアに近いところまで扱えると、今までにできないプロダクトを作れるので、ライブラリを使わずにフルスクラッチするのもいいなと感じました。