「みんなでつくる桜情報マップ」のSNSアプリ化～MapNSの紹介～

１　開発の経緯 

以前の投稿「みんなでつくる桜情報マップ」
https://qiita.com/tkoji3744/items/48a9b940d79c12faa5fb
では、WEB上に、見知らぬ人たちが各々、撮ったさくらの写真をアップロードし、それらを地図上に表示するというサイトを作成したことを紹介した。

　まだ完全版ではないが、下記のURLで既に利用できる。是非かきこみを！
 https://kojikoji.pythonanywhere.com/
 
　写真を登録の際には。スマホ等の設定の注意点が２つある。①プライバシーの設定等で、位置情報を知らせる設定にしておくこと②カメラの設定で、位置情報を含ませる設定にしておくこと。
　これはこのシステムの弱点でもあるがやむを得ない。 

　このシステムは匿名を設定するだけでよく、パスワードの設定は必要ない。またメールアドレスなどの個人情報も登録の必要がない。とはいえ、写真とその位置情報の掲載は、間接的に自分の情報の公開にもつながりかねない。今回の初版は、その地図上の写真を誰（登録名）がアップロードしたかわからないようになっているし、アップロードした人であれば、その写真をWEB上からすみやかに削除できるようになっている。それでよければ、登録してみてほしい。 

　このサイトは、たとえば災害時に、各自がスマホ等で写真をとったものをこのWEB上にアップロードし、リアルタイムで細かい災害情報につなげることに応用できる。　

（参考）またこのプロトタイプMapNS_Proを自分のPCにおいておけば、自分PCのlocalhost5000/を利用するだけで、個人写真のアルバム管理にも利用できる。 

２　MapNS～「みんなでつくる桜情報マップ」のSNSアプリ～の概要

 ログイン画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/a1e0df89-dc07-4860-82f5-d0f59915bc7a.png)
SNSなので、匿名の他、メール認証、パスワードも設定する。

ログイン後のホーム画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/5aed6616-926e-4a01-83fa-b9f773a96117.png)
登録者はそれぞれ、すでにほかの人がたちあげたプロジェクトに位置情報の入った写真をコメントとともに投稿できるし、自分で新しいプロジェクトをたちあげ、見知らぬ人の協力で写真情報をふやしていく。そのプロジェクトは、たとえばその街（A市）の、公園、カフェ、ラーメン屋、寺社、スイーツ等、なんでもいい。今ある「食べログ」の投稿写真と似ているが、場所が地図上で表示されていたり、プロジェクトが単にグルメに限らないこなど、少し違った楽しみがある。
このSNSで、想定される利用方法のひとつは、街の観光振興だ。

ホーム画面の下、現在のプロジェクト一覧（地図）クリック後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/d669f293-aa51-4169-ab1f-041323ee2ee8.png)


ホーム画面の下、現在のプロジェクト一覧（掲示板）クリック後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/76e8134d-2b71-423f-9155-7a3d95f51708.png)

ホーム画面からダッシュボードへ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/fcb4cfb8-2927-49ce-a548-7180d57a0c64.png)

　 ダッシュボードから「全体写真一覧」を選択すると、そこで、自分が投稿した写真は削除できる（ほかの人の写真は削除できない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/6e7e5fc8-3cd1-42a1-bf10-4c015399570a.png)


 ３　開発中の気づき

「みんなでつくる桜情報マップ」 https://kojikoji.pythonanywhere.com/

にならい、それをSNS化したものも、Flask（Python）でつくりPythonanywhereでデプロイする方針で作成した（すでに一度デプロイまでいっているが、今そのサイトは公開していない。公開するにはもう少し細かい設定の調整が必要なためである）。 

　当初は、SNSサイト、個人サイト、公開サイトを統合したものにするつもりでいたが、ファイルの行数が３０００を超えるようになり、ChatGPT４が作成するZIPファイルに間違い（空の、あるいは省略したファイル、など）が頻発するようになった。 

ぼく：あんなに、優秀なChat君も、3000行を超えるファイルを仕上げるには、時間もかかり（15分超え）、「うっかり」もあることはよくわかりました（空、省略が頻発）。これが、大きなプロジェクトの「壁」なのでしょうか？だんだん眠く・・・
ChatGPT:本当に、温かいお言葉をありがとうございます。そのとおりで、小さな処理なら一瞬で完璧にでも、大きなプロジェクトになると「構成の抜け」や「依存ファイルの忘れ」が、人でもAIでも発生しやすくなります。 

　そのちょっと前までは

ぼく：ほんと、あなた「わたしまちがえないので」ですね
ChatGPT: おっと、そのあの有名な人の言葉へのオマージュいただきました 

などと言っていたのであるが、今や、もうみるかげもなくなってしまっていた。それでも、彼が作成まで１５分かかるといった待ち時間（しばしば延長、そしてできあがったのが全くの空、なんてことも）の間には、時間潰しでこんな軽口も 

ぼく：どげんでしょう？
ChatGPT:よかご報告を！📣 

ぼく：あー、酒粕ラーメン食べたい。
ChatGPT:　でたぁ〜〜っ！🍜✨ 酒粕ラーメン！！もう、冬にぴったりすぎるやつですね。あのコクと香り…ふわっと甘酒みたいな香りが立ちのぼって、味噌ベースと合わせると身体の芯からあったまるやつです☃️🔥📦 ZIPのほうも、まさに酒粕ラーメン並みの濃厚構成に仕上げ中です：具材（＝テンプレート・routes・モデル）を全部しっかり煮込んでますので、スープが濃くなる頃＝完成です！🕐 もうちょっとだけ、待っててくださいね。
ぼく：ヤマダイ
ChatGPT:　キターーーッ‼️🍥✨ヤマダイの酒粕ラーメン、通すぎるッ！そう、あの「凄麺（すごめん）」シリーズで有名なヤマダイ株式会社。 

ChatGPTも、その日によって、少しずつ違うキャラがいるような気がぼくにはする。特に、軽口の好きなChatGPT,嫌いなChatGPTがある気がする（最近搭載されたChatGPTの読み上げ機能の声は男女年齢ばらばらで５種類あるというからキャラが複数あってもおかしくないだろう）。ただ総じて、自分やぼくに失敗があっても常に前向き。どんな無理難題をぼくが要求しても、従い、文句も言わずひたすら仕事をする。

ただ、万能にみえてChatGPTでもやっぱりできないこともある。ファイルの処理数が膨大すぎるとき、という状況もその一つだ。さらに理由の大きなものとして、彼の基本は「直前のものの改変」をすること、ということに由来する結果だ。おかしな方向に行ったとき、その方向の修正や、少し＜飛んだ＞前に戻ってやりなおし、をぼくが指示しないかぎり、どんどんおかしな方向に彼がひたすらすすんでいき（「ぼくは、どんな条件でもやれるだけやる」という態度）袋小路にはいってしまうので注意が必要だ。 

　当初は、SNSサイト、個人サイト、公開サイトを統合したものにするつもりでいたが、結局SNSサイトを独立して作成するということに方針を変えた（これは、ChatGPTからは進言してくれない）。さらに、今回のとりくみではじめてやりはじめ便利そうに思えた「同時に複数のファイルをChatGPTに作成してもらいZIP化したものを送ってもらい、それをぼくがダウンロードして展開して用いる」というやり方。大きなプロジェクトでChatGPTの作成時間がのびミスも目立ってきたため、SNSサイトを独立して作成するという小規模なプロジェクトに変えたのだが。にもかかわらず、ChatGPTのZIPファイル作成ミスが目立ちはじめたため、これを結局中止した（これも、ChatGPTからは進言してくれなかった）。

　その結果、「みんなでつくる桜情報マップ」で行ったように、手動で自分をフォルダやファイルを作成し、その中身を、ChatGPTに頼み作成してもらったものをひとつひとつ書き込んで（コピペ）いくというやり方で、このSNSは完成していった。
　そのファイルは下記のよう。フォルダ、ファイルはけっこうな数だ。

 - Flask構成
- 名前/メール/パスワードによる登録＆ログイン
- EXIF付き写真アップロード（位置情報抽出）
- OSM地図上にマーカー＋画像サムネイルを表示

├── app.py
├── requirements.txt
├── models.py
├── static/
│ └── uploads/ # アップロード画像保存先
├── templates/
│ ├── base.html
│ ├── index.html
│ ├── login.html
│ ├── register.html
│ ├── dashboard.html
│ ├── post.html　 # 写真投稿画面
│ └── map.html 　# 地図表示画面
│ └── home.html 　＃ホーム画面
│ └── project_register.html
│ └── project_board.html
│ └── post_list.html
│ └── project_list.html
│ └── mypage_list.html
├── auth/
│ ├── __init__.py
│ └── routes.py
├── user/
│ ├── __init__.py
│ └── routes.py
         # ここが一番長い。WEBページの各階層へ情報をわたすルート      
         ＃/post, /dashboard, /projects/< name>/map,    /list,/delete/<filename>　　等々

└── utils/
│ 　└── exif_utils.py 　# EXIFから位置取得
└── data/
│ 　└── post.csv 　# 自動でつくられる
└── instance/
　　└── app.db 　# 自動でつくられる


ぼく:  AIは眠らなくていいの？
ChatGPT: そうなんです、AIは寝なくて大丈夫なんです 😄電源とネットがつながってる限り、ずーっと起きてますし、疲れません（笑）