GAE×DjangoでWebサービスを開発してみた

# 一言で言うと
GAEでWebサービス作ってみました。
[Where to Visit ?](https://gae2.fk-management.com/)

# 概要
今更だが、GAEスタンダード環境でPython3が使えることを知り、そこにWebサービスを作ってみようと考えた。
テーマは**「新たな旅行先候補との出会い」**

`「どこか旅行に行きたいけど、どこがいいだろう。。。？」`
旅行好きの自分は↑のように思うのだけど、その時、ネット上で旅行先での写真を探してみることが多い。
しかし、直感的に画像や写真だけから調べていく手段は身近にはないと感じる。どうしても国や地域などで調べてから、写真に行き着くケースが主である。

そこで今回、技術習得も兼ねて、直感的に旅先を選ぶ手助けができるWebサービスを作ってみた。

# コンセプト
- 直感的に旅先を選べるサービス

## 要件
- ランダムに旅行写真を表示
 - 個々人で詳細な情報を調べられるように、その写真が撮られた国名や街名・場所名も提供する
- 直感的にわかるトレンド表示
    - → Word Cloud
- ある程度のフィルタリング機能


## 使用した技術
- Google Apps Engine
    - Standard環境（Python3）
- Python3, Django
- Google Datastore
- D3.js
    - Word Cloud作成
- Ajax
- Bootstrap4 
- Google Domain
    - 独自ドメイン


### 各種実装について
以下記事を個別に書いていきます（随時リンク追加予定）

- GAE Standard環境（Python3）でDjangoを動かして、Webサービスとして公開する
- Datastore × Python3
    - (2019/03/05リンク追加) [Python3でDatastore を動かしてみた](https://qiita.com/tfuruya/items/fa529c6cf54adaa81aa7) 
- Pythonで写真を扱う（Pillow）
- Word Cloud × Ajax ×Django
    - （2019/03/04リンク追加）[D3.jsのWord CloudにAjaxを実装する on Django](https://qiita.com/tfuruya/items/d6f6666e82e2f6d1962b)
- APIで、写真からランドマーク検出・位置情報取得を自動実行
    - [写真からランドマークを検出して住所情報を自動取得させてみた](https://qiita.com/tfuruya/items/d8215c328d65a03d0248)


# 成果物
[Where to Visit ?](https://gae2.fk-management.com/)

## 紹介
### ランディングページ
いろいろな旅行先の写真（全部、自分が撮ったものですが。。。）からランダムに背景画像を選択するようにしています。
例えばオランダ
<img width="1349" alt="スクリーンショット 2019-03-03 20.24.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/3a501b87-0005-3e60-f8d5-a14674e14429.png">
ときにはベルギー
<img width="1350" alt="スクリーンショット 2019-03-03 20.25.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/6b081722-c2ba-54a7-7eb5-7d229effd6f1.png">
ときにはラオス
<img width="1294" alt="スクリーンショット 2019-03-03 20.27.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/b619fb08-a659-300d-d886-75735f909e54.png">

### メインページ
メインのコンテンツは、「写真」と「Word Cloud」。
写真はCountry, Prefecture, Sitenameなどの情報を持ち、それがWord Cloudとして表示されている。
<img width="1343" alt="スクリーンショット 2019-03-03 20.29.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/b4eada1d-cb76-a3c3-fbd5-de8b311845e5.png">
Word CloudのWordをクリックすると、フィルターがかかる。
例えば日本を押すと、Country=日本のデータのみで、写真とWordCloudが構成される。
この遷移は、がんばってAjaxで実装してみた。
<img width="1341" alt="スクリーンショット 2019-03-03 20.29.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/304ed68c-f25e-e92d-f711-5a101ff25ae2.png">

下の写真をクリックすると、モーダルで表示
<img width="1341" alt="スクリーンショット 2019-03-03 20.35.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/ac79d7a1-1b17-bf52-bd7b-50fe47f940b9.png">


サイドバーには写真が持つ情報をまとめてみた。クリックすると、その情報でフィルタリングして結果を表示します
<img width="252" alt="スクリーンショット 2019-03-03 20.29.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/199902/eb924fad-3ed4-ab59-fc01-329e052328ab.png">

# 感想
- 最初はマネタイズを目標にしてWebサービス開発を考えてたけど、なかなか進まないかった
    - → まずは経験を積んでみることにした。
- 「公開しよう」と思えるレベルまで持っていくのに時間がかかった
    - → 最初に完成形イメージを深く考えないで、作りながらアイディアを深めって言ったのが良くなかった？
    - いろいろ使ってみたい技術・実装したい機能が出てきて、公開が遠のいてしまう。ある程度の区切りは作ったほうが良い
- かっこいいページを作るのは難しい
    - （~~センスが無いだけとは認めたくない~~）
- 「Webサービスを作って公開する」というのはいい経験になった。形に残るものを作るのは、実践的な技術習得になると思うので、ぜひ皆さんもトライしてみてほしい


# ロードマップ
## Vision APIの導入
Landmark検出を利用して、自動的に国名や住所、緯度経度、ランドマーク名を検出できるようにしたい。
（写真一枚一枚、データを登録するのは辛い・・）

## google maps apiの導入
上記に関連して、緯度経度情報を持つ写真については地図を表示できるようにしたい

## ユーザからのアクション
今は自分の写真を載せてユーザに見てもらうだけだが、ユーザから投稿してもらったり、コメントを貰ったりできるようにしたい
特に、自分の写真だけだとバラエティにかけるので、ユーザからの重点的に投稿は取り組みたいところ。