---
# System prepended metadata

title: ソーシャルカレンダーサービス

---


ソーシャルカレンダーサービス
========================

# 1. サービス概要
* 興味のあるアーティスト、団体、ジャンル等をフォローすることで関連するイベントを提案
* レコメンドエンジンを用いてフォロー対象や閲覧履歴から興味のあると思われるイベントを提案
* イベントをフォローすることでカレンダー形式で予定を管理可能
* 外部カレンダーサービスと連携し、フォローイベントを同期可能（Googleカレンダー等）
* イベントへのコメント投稿、レビュー投稿
* 電子チケットの発行、販売でマネタイズ？


## 1-2. サービス名

**オキゴト**  
okigoto.com  
これから起こる出来事

## 1-3. キーワード

* イベント共有カレンダー
* ソーシャルカレンダー
* 日付の共有
* リマインドツール

## 1-4. 課題

### 1-4-1. マーケティング

* カレンダーはサービスとして弱い、電子チケット販売機能をスタートから実装することで小規模イベンターに使用してもらう？

### 1-4-2. データの集め方

* イベント情報の集め方
    * ユーザー投稿
    * ジャンルを限定し小規模から公式団体と提携
* ツイッター他SNS情報の集め方（SNSフォロー状況から関心があるであろうイベントを提案したい）


# 2. サービス仕様

## 2-1. トピック

アーティスト等は**トピック**としてシステム上は管理する。  
イベントにトピックを登録することでアーティストと関連付けを行う。  

トピックはユーザーが自由に作成可能であるが、何らかの制限を検討  

#### 制限が必要な状況

1. 同一トピックの乱立による混乱
2. 悪意のあるトピック（アンチ）
3. 人気トピックの偽装（売名、宣伝）
4. 公序良俗に反するトピック

#### 制限案

1. ある程度のサイト内貢献度が無いとトピックを作成できない（会員ランク制度）
2. トピック作成後に運営による目視チェックを行う
3. 制限なしでの作成を許可し、後から通報によるチェックを行う

> オープン時: 運営によるトピック登録

#### トピックの使用例）

* アーティスト名（安室奈美恵、GLAY、AKB等）  
* 団体名（RIZIN、UFC, TOPANGA等）  
* スポーツ（野球、サッカー、格闘技、MMA等）  
* ゲームタイトル（ストリートファイターⅤ、パズル＆ドラゴンズ、クラッシュ・オブ・クラン等）  
* ジャンル（音楽、ゲーム、お笑い、アイドル、花火、プログラミング、鉄道等）  
* その他著名人等  

### 2-1-1. 略称の扱い

ミスチル、ヒゲダンなどの略称の扱い  
トピックに略称の登録を複数可能とし、検索等にヒットさせる  
  
略称名でトピックを作成された場合は、正式名称トピックへのマージを可能とする  
マージ方法はredditの仕様を参考に検討中  
※ quoraも参考になる

> オープン時: 原則マージ不要。必要な場合は手動対応

### 2-1-2. 名称の重複

ツイッターと同様、IDはユニークとするが、表示名は重複可能とする  

TODO: 要検討  
著作権によりアイコン等を使用できない場合、同名トピックの判別が困難となる可能性がある。  
但し、トピックはハッシュタグ程度の扱いであり、かつ重複するケースも稀と思われるため無視しても良いかもしれない。  
  
追記: 問題有り。イベントへのトピック関連付け時に同名が存在すると判別ができない。 

##### 対策案
1. イベントへのトピック関連付けを諦め、トピックに対してイベントを個別に投稿する仕様とする？（目当てのトピック画面を開いてからイベント作成をクリック）
2. トピック選択リストを「トピック名（トピックID）」のようなフォーマットで対応？
3. トピックの作成は申請制にする。運営側で同名が発見された場合は「トピック名（補足カテゴリ）」のフォーマットで登録する。例：AI（アーティスト）、AI（人工知能）
4. 大ジャンル（音楽、ゲーム、アニメ等）の下にトピックを作成（同ジャンルで重複するケースは稀？）

> オープン時: 重複不可で進める

### 2-1-3. アカウントの紐付け

トピックにツイッター、FB、インスタグラム等のソーシャルアカウントの紐付けを可能とする。  
紐付ける事により、ツイッターのフォロー情報などを参考にトピックのレコメンドが可能となる。  

課題: 同一サービスの複数アカウントを紐づけ可能とするか

> オープン時: 各サービス1アカウント

### 2-1-4. トピックの登録

原則ユーザーによる登録  
メジャーなものは運営にて登録（ツイッターから収集？）

トピック管理イメージ  
https://jp.quora.com/topic/Microsoft-Windows/manage

#### 登録項目

* 名称
* ID（URLに使用するためのユニークな英数字）
* 略称（複数可）
* 概要テキスト
* 画像（複数可？）
* ソーシャルアカウント（ツイッター、FB、インスタグラム等）
* リンク（公式サイト、Wikipedia等）
* ~~ジャンル~~
* ~~関連トピック~~

TODO: 画像の著作権、肖像権に関して考える必要がある  
著名人の場合、肖像権はクリア可能な可能性はあるが、著作権は回避不可  
関連サイト内のOGPに含まれるデータの引用なら大丈夫かもしれない。

IDは自動生成
URLには日本語名称が入る（SEO）
https://okigoto.com/topic/トピック名称
※この場合同名トピックは不可

##### 関連トピック

~~関連するトピックを設定することでレコメンドの参考として使用する。  
親トピックのみの設定でも良いかも。~~

関連トピック、親トピックともに不要
関連度はアルゴルズム判定に任せる

表には出さないけど内部ではデータとして持っていてもいいかも

> オープン時: 関連トピック不要

### 2-1-5. 公式トピック

~~トピックはタグと同等の扱いのため原則"公式"という考えかたは不要と思われる。~~  
~~但し、画像著作権の関係で公式の扱いがあると良い。~~  
~~公式と提携出来た場合に関連するトピックを後から"公式認定"とし画像を使用出来るとベスト？~~  
  
~~"非公式"トピックはランダムな英数をID（URL）とし、公式認定を受けた場合に公式指定の英数字を使用可能とする？~~

公式トピックは不要
アカウントフォロー機能を実装し、"公式アカウント"としてフォロー可能とする
公式アカウントが投稿したイベントは"公式イベント"として区分け可能


### 2-1-6. タグ案

トピックの代わりにタグを使う案（事前登録が不要）

事前にトピックを作成せずに、イベントに自由にタグを設定
タグページはwikiのように編集？
これもquoraが参考になる

**メリット**

* URLは https://okigoto.com/tag/タグ名称 のようになりIDが不要
* 予めトピックを作成する必要がない
* ハッシュタグの方がユーザーにとって馴染みがあり、気楽に使える

**デメリット**

* 類似タグの乱立
  -> 略称が使えないため同じ目的なのに別名のタグが出来る
  -> 類似タグとして提案？機械学習で回避できるか？
* 同名タグのバッティング（概要がないため、同名の区別が出来ない）
  -> wikipediaのように「タグ名（ジャンル）」のようなルールで回避

> オープン時: 運営登録のみ許可するため、トピックで進める

## 2-2. イベント

### 2-2-1. イベントの登録

#### 登録項目

* イベント種別（後述）
* 関連トピック（複数可）
* イベント名
* イベント詳細（WYSIWYG）
* イベントURL（ソースとして必須）
* ~~開場時間（任意）~~
* 開始時間（もしくは終日）
* 終了予定時間（任意）
* イベント区分（後述）
* 施設名／住所（Google Place APIから取得）

※イベント画像はイベントURLのOGPから取得  
※OGPは引用の場合OKだが、画像自体がイベントページへリンクしていない場合はNGの可能性有り。
※開場時間がある場合はイベント詳細に記入

##### イベント種別

カレンダー等でイベントを表示する際にアイコンなどでイベントの種類を視覚化するために欲しい機能。  
また、イベント種別に応じて登録項目を変更することが可能になる
TODO: ある程度運用してから種別を洗い出し再検討

> オープン時: イベント種別不要、データ集めてから分類を考える

##### イベント区分

TODO: 要検討
イベント登録時の項目はあまり増やしたくないので本当に必要か考える  
イベント種別同様最初は不要か？運用状況をみて再検討

###### 区分案

* 無料／有料
* オンライン／オフライン
* ファンイベント（非公認イベント）
* ファンクラブ／会員限定

> オープン時: イベント区分不要、データ集めてから分類を考える

### 2-2-2. チケット販売期間

チケット販売期間／抽選期間などはユーザーにとって欲しい情報で、イベントとは別にカレンダーへの表示及び通知が必要。  
  
チケットの登録方法について下記の2パターンを想定出来るが前者(A)が有力候補。


#### A. チケットをイベントに紐付けるパターン

イベント登録時にチケット情報も同時に登録する

##### メリット

* イベントページにてチケット情報の閲覧及び購入が容易。
* イベントのみをフォローすればチケット情報もカレンダーに表示され通知も受けられる。

##### デメリット

* ツアーなどの場合は全公演のチケットを一斉に販売するケースが有る。その場合にユーザーは通知をたくさん受けてしまう。また登録する側も各イベント（公演）に対して同じ情報を登録する必要あり。
    →ツアー登録機能（シリーズイベント）を設ければ解決するか？
* 1イベントに対して複数のチケットが存在するケースが有る。ファンクラブ先行、先行抽選、一般販売など。
    →複数パターンのチケットを登録可能にすることで問題なし。
* 追加のチケット販売のケースが有る。チケットの追加販売をどうやってユーザーに通知するか。
    →チケット情報追加後にイベントの更新通知を行う
* イベント開催確定のタイミングでチケット情報未定のケースが有る
    →チケット情報追加後にイベントの更新通知を行う

#### B. チケット販売を別イベントとして登録するパターン

##### メリット

* イベントと同じように個別の通知を受けることが出来る。
* 想定外のケースに対する柔軟性が高い

##### デメリット

* チケット販売と実際のイベントのシステム上の関連性が無くなる（問題あるか？）
* チケットページ、イベントページに重複する情報が錯綜する。
    →関連イベント機能を設け、チケットとイベントページを相互リンク？
* 将来的なチケット販売機能を考慮できていない。
    →その時に考える

> オープン時: Bパターンで進めて様子見

### 2-2-3. コメント

コメントはYoutube方式で2回層まで（コメント＋返信）  

関連を知られたくないコメントもあると思うので、コメント時の名前は隠せるような機能が望ましい

1. 都度入力＋履歴表示（Amazonレビュー風）
2. 匿名選択可能
3. 全て匿名

1番が無難  
トピックやコメントを投稿するタイミングでハンドルネームを設定可能とし  
ハンドルネームは複数設定可能（5つくらい）  
次回投稿時はプルダウンから選択もしくは新規追加が可能

有意義なコメントが評価されるように、いいねボタンを付ける  
~~中傷的なコメントもあり得るのでバッドボタンも付ける（最近はつけない風潮？）~~  
スパム報告も付ける  

TODO: SNSと上手く連携する方法があればサービス内でのコメント機能は不要か？  
コメント機能があると過疎化が目立つ可能性もある。  
運用コストが増えるデメリットもあるため、本当にコメント機能が必要か要検討。  
実装は容易なのでとりあえず実装しておく。  

> オープン時: シンプルな仕様でとりあえず実装しておく

### 2-2-4. レビュー

終わったイベントにわざわざレビューをするか？  
レビューがあってもそれを見る人がいるのか？  
需要がないかもしれないので保留。  

> オープン時: コメント機能で代用

### 2-2-5. スパム対策

宣伝目的でイベントに関係の無いトピックを関連付けるケースが想定されるため
何らかの対策が必要

karmaシステム
カルマの低いユーザが投降したイベントはカルマの高いユーザにのみ初期表示され
カルマの高いユーザから不正報告を受けた場合、投稿者はカルマを失うペナルティを課す。
カルマを失う（もしくはマイナスになる）としばらく投稿が出来なくなる。

初期は必要ないので後々考える

> オープン時: 不要、運営側で手動削除

## 2-3. 会員

### 2-3-1. ゲスト

SEOのため、非会員でもコンテンツの閲覧は可能とする  
アプリも同様

#### 可能な操作

* トピックの検索
* トピックの閲覧
* イベントの検索
* イベントの閲覧
* コメント、レビューの閲覧

※ゲストの場合も行動履歴は記録し、レコメンドに使用する

### 2-3-2. 登録会員

メールアドレスもしくはソーシャルアカウントでのログインを可能とする

#### ソーシャルログイン

* Twitter
* Spotify
* Twitch

※ソーシャルログインのシェア1位はLINEだがレコメンド用のフォロー情報を取得出来ないため非採用  

#### 必須項目

* ~~ユーザー名（半角英数）~~
* ~~表示名~~
* メールアドレス
* パスワード

SNSではないため、表示名は不要  

TODO: 性別、年齢、お住いなどは、レコメンドの精度向上のために、オプションとして登録可能としたい。  
将来のマネタイズにも影響しそうなので要検討   

TODO: イベント、コメント投稿時はハンドルネームを使用するので**ユーザー名**も不要？  
興味関心はプライベートな情報なのでサービス上でのユーザー動向を外部者が極力追えないようにすべき。  

> オープン時: ツイッター、Twitch、メールアドレス＋パスワードのみ

#### 可能な操作

* トピックのフォロー
* イベントのフォロー
* イベントの参加申込み
* イベントへのコメント、レビュー
* カレンダーサービスとの連携
* トピックの作成※
* イベントの作成※

※特別権限付与を検討（貢献度、利用頻度に応じた会員ランク等）

#### 特別権限

* 特定トピックのイベント作成を行うと、そのトピックのランクが上がる
* ランクが上がるとトピックの画像や説明の更新が可能となる

※仕様がややこしいので保留  
当面はトピック作成者、イベント作成者のみが編集可能。

> オープン時: 権限不要

### 2-3-3. 公式アカウント

公式アカウントの作成を可能とする。  
申請後に運営にて承認。  
~~申請時に関連するトピックを指定し、該当トピックに関する特別権限を得る。~~  

~~※誰かが作成したトピックを後から乗っ取る形になるが問題ないか？~~  
~~当初の作成者には編集権限は残るが、画像のアップロード等一部の操作は公式アカウントのみが可能。~~

公式トピックは不要、公式イベントは有り

#### 通常会員との違い

* 公式アカウントは表示名を固定
* 表示名横に公式バッジ追加
* 公式アカウントが投稿したイベントは公式イベントになる（関連トピックを含む場合のみ？）
* 将来的にチケットの発行・販売などを可能とする

> オープン時: 不要？バッジくらいはあった方がいいかも

### 2-3-4. コミュニティ機能について

興味のあるものや参加イベントはプライベートな情報なので
ユーザー同士のフォロー機能などは持たない。  
ファン同士で会話したいユーザー向けには将来的にコミュニティ機能のようなものを検討  
トピック単位でフォーラムのようなものを設置？
公式アカウントのフォロー機能は欲しい

> オープン時: 不要

## 2-4. レコメンド

* フォローしているトピックのイベントは全て表示するためレコメンド不要  
  但し、イベント毎に信ぴょう性スコアのようなものを設けて、信ぴょう性の低いものは除外したい
* フォローしているトピックを元に関連トピックをレコメンド  
* フォローしているトピックを元に関連トピックのイベントをレコメンド（算出方法要検討）  
* 手動で「興味なし」としたトピック及びイベントは表示しない  
* 初期は難しいのでアクセスやいいねを基にしたレコメンドは不要
* レコメンドの算出に地域は考慮しないが、「近くのイベント」というカテゴリは設けても良いかもしれない  
  プロフィールに地域設定が必要なため初期は考えない

> オープン時: 最低限欲しい

## 2-5. 外部連携

個別フォローしているイベントだけでもGoogle連携したい

> オープン時: 実装難易度を検証、多分不要

端末に入っているカレンダーとの連携やApple関連について調べる必要あり

# 3. 画面一覧

!!画像の扱いが難しいため、Youtube風の画像をメインにしたUIよりも  
テキスト情報メインのカレンダーサービス風が良いのかもしれない。

## 3-1. TOP

画像著作権が絡むのでTOPは要検討  
  
Youtube, Spotifyのようなものが理想だが  
画像が使えない場合はニュースサイトのようなものが無難かも

### 非会員

* 近日中のイベント（人気順）
* 人気のトピック
* 人気のイベント
* サービス説明的なもの？バナー画像？

### 会員

* 近日中のおすすめイベント
* おすすめイベント
* おすすめトピック
* 近くのイベント（地域設定もしくは位置情報許可設定が必須）

## 3-2.  タイムライン

フォローしているトピック、イベントのタイムラインを表示  
新しいイベントが登録されました、コメントが投稿されました、時間が変更されました等

イベントの変更履歴だけ分かれば良いかも  
タイムラインというよりかはFBのお知らせがイメージに近いか  
https://www.facebook.com/notifications


## 3-3. スケジュール

参加予定イベントの一覧  
リスト表示とカレンダー表示の切り替え  
デフォルトはカレンダー表示

## 3-4.  トピック詳細

* 概要（画像、名称、説明、公式サイト・SNSリンク）
* 予定イベント
* 過去イベント
* フォロワー数（フォロワーは匿名）
* 関連トピック（類似トピック）

## 3-5. イベント詳細

FBのイベントページのようなイメージ  
概要、参加者、コメント



# 4. レコメンドエンジン

## 4-1. レコメンド対象

### 4-1-1. トピック

サイト内ユーザーのフォロー情報、各種ソーシャルアカウントのフォロー情報を基にトピック同士の関連度を計算。  
↑これは協調フィルタリングで可能  
自身の下記データを基にトピックを推薦。 
↑要検討  
単純に下記情報内から見つかるトピックを全て抽出して関連度の高いものを表示するだけで良いかも。  
精度は追々調整。

#### 使用データ

* トピックのフォロー
* ソーシャルアカウントのフォロー
* イベントのフォロー
* イベントの参加履歴

##### ソーシャルアカウント

* Twitter
* Spotify
* Twitch

LINE、インスタグラムはデータ取得不可  
Youtube、Showroomはデータ取得可。但し後回し  
TickTokはAPI無し  
Facebookは有意義なデータを取得出来る気がしない

### 4-2-2. イベント

先にトピックのおすすめ度を計算  
※フォローしているトピックはおすすめ度100%  
イベントに紐づくトピック（複数の場合あり）と上記おすすめ度を基に計算する

※位置情報も考慮した方が良いか  

日付近い方が優先度高  
https://www.udemy.com/course/recommender-systems/learn/lecture/11700392  
http://www.righto.com/2013/11/how-hacker-news-ranking-really-works.html

## 4-2. 初期データ

TODO

# 5. システム構成

## 5-1. バックエンド（REST API）

バックエンドはアプリ使用を想定し、REST APIとして構築

言語: PHP  
フレームワーク: Laravel  
DB: MySQL  

#### 資料

https://savvyapps.com/blog/how-to-build-restful-api-mobile-app

## 5-2. フロントエンド（Web）

フレームワーク候補  
* ionic + React  
* ionic + Vue  
* Flutter  
* フレームワーク無し

デザイン次第？  
最短でウェブ公開を目指すならフレームワーク無しか、素のVue  
アプリを最初から想定するならionic+Vue？

## 5-3. その他

機械学習はPython一択になると思う  
バックエンドのPHPとPythonの連携方法を検討  
https://taskqueues.com/  
RabbitMQかAmazonSQS  
無料かつサーバのいらないAmazonSQSが有力  

# 6. 開発TODO

## 会員関連

* ~~ソーシャルログイン（twitter, line）~~
    * django-allauthにて実装
* ソーシャル連携（フォロー情報取得）
    * twitterのみ
    * 実装方法、データ保管方法検討中 https://github.com/Bogdanp/django_dramatiq
* ユーザーアイコン
    * デフォルトアイコンをどうするか
* ~~一意でない表示名~~
    * LINE = displayName
    * Twitter = name
* パスワード忘れ機能
* 退会機能
    * 後回し、全体のデータの持ち方が影響する
    * 論理削除＋個人情報物理削除が理想
* アカウント停止（凍結）機能
* 2段階認証
* 評価システムの仕様決め

## トピック関連

* トピック登録画面

## イベント関連

* イベント項目の精査
* イベント項目の実装
* イベント登録画面

## セキュリティ関連

* IPに対するPOST制限

## レコメンド関連



## 他

* トピック、イベント検索
    * ElasticSearch?
* トピック、イベントアクセス集計
    * 関心度の測定に使用
    * 滞在時間も記録したい
    * https://developer.matomo.org/
    * https://github.com/padams/Open-Web-Analytics/wiki
* 通知システム
    * WEB通知
    * アプリ通知
* カレンダー連携
    * CalDAV, CardDAV調査
* djangoのREST化
    * https://github.com/encode/django-rest-framework

## 参考サイト

https://jp.quora.com/  
https://t.livepocket.jp/  

    イベントタイトル
    日程・時間
        デフォルト開演
        オプションで開場と終演を追加可能
    イベント詳細（WYSIWYG）
    会場名
        オートコンプリート
        住所自動入力
    建物名
    アクセス（自由入力）
    イベント画像（4枚）
    YoutubeURL
    出演者（タグ）
    検索キーワード（タグ）
    お問い合わせ先
        名前
        お問い合わせ先
        備考
    オフィシャルサイト
    オフィシャルFacebook
    オフィシャルTwitter
    イベントに対してチケットを最大25パターン設定可能

https://tixeebox.tv/  
https://tiget.net/  

    開催日（日にちのみ）
    イベント名
    イベント詳細
    出演者（カンマ区切り）
    会場名（google maps place api補完有り）
    会場の住所
    地図のURL（リンク先？）
    地図（表示されているgoogle mapからエリアを選択）
    カバー写真
    Youtube動画（テキスト入力）

https://event-pay.com  
https://www.metaps-payment.com/ticketpay/ticketpay.html  
https://passmarket.yahoo.co.jp/  

    イベント名
    イベント開始日時
    開催場所名（テキスト）
    カテゴリ（ジャンル）
    サブタイトル
    イベント詳細説明（HTML/リッチテキスト）
    イベント画像（3枚）
    販売者情報
    関連URL
    チケット情報を登録

https://peatix.com/?lang=ja  
https://everevo.com/  


#### GoogleMapsAPI

https://developers.google.com/maps/documentation/javascript/places-autocomplete?hl=ja

#### その他

* メルカリの「やることリスト」が分かりやすくて良い
