旅行者(利用者)とその地元に住む人(事業者)とをマッチングさせて旅を充実してもらうサービスです。 旅行者は旅行先について掲示板で質問したり、旅行先の人に案内を依頼したりすることで充実した旅行を送ることができます。
町おこしをテーマに長野で民宿事業を友人と将来的にビジネスをしたいと話していた中で、その先駆けとして今回のサービスを検討しました。 私自身に特に長野に思い入れはないですが、せっかく作るのであればスケールできる可能性も考えて現在友人が行なっている民宿事業との親和性の高さを鑑みてこのサービスの方向にすることにしました。 また、過去に商材と事業者をマッチングさせる事業を私自身が立ち上げた経験も活かせると思いこのサービスを検討しました。
サービス初期は長野エリアでのローンチ予定です 事業者側: ・地元の大学生 ・大学院生 ・専門学校生(約60000人)を主要ターゲットとして、その他高校生、時間のある高齢者や主婦、サラリーマンの利用を想定しています。 ・地元還元をしたい人
利用者側: ・失敗したくない旅行者 ・英語圏の旅行者
- 利用者は旅行先について、どういう場所がおすすめなのか、どういうプランで回るのがおすすめかを掲示板で調べることができます。 事業者側はその質問に対して回答をしたりそれに対してのレビューをもらう事ができ、それをプロフィールに反映させる事ができます。 また、事業者はブログのように旅行プランやスポットについてブログ記事のようなものを書く事ができそれをプロフィールに反映させる事もできます。
- 利用者は旅行にガイドが必要だと思った時に、「いつ、どこに、どれくらいの予算で、どういう事がしたい」などの要望をポストでき、それに対して事業者は応募してガイド案内依頼をもらう事ができます。 もしくは、事業者側で、旅行プランを作成して旅行者がそのプランに参加するという形も可能です。
- その際、旅行者は過去の掲示板の回答やリンク可能なSNSアカウントを見て人となりや知見を判断して誰に依頼を出す判断材料にする事ができます。
事業者側:
・自身の知見を活かせる満足
・金銭的な報酬
・言語障壁を取り除けることにより精神的な満足
・安心に旅行できる
・言語的障害を突破して旅行できる
・調べることなく旅行先の高品質なスポットを訪れられる
・掲示板への広告費 ・マッチング成立での仲介費用
まず、友人の運営している民宿を運営する大学生と運営者に事業者(=ガイド)になってもらい、民宿に泊まるお客さんにサービスの宣伝と掲示板への質問をお願いする。 サービス初期は、サクラとして運営者で質問+回答を繰り返したり、こちらである程度旅行案内についてガイドへの報酬を払うなどして、サービスを使ってもらう機会を増やすなどしてコミュニティとして流行ってるいる感+利用実績を演出していく。 利用実績が増えたらインスタグラムのターゲティング広告を使い認知+ユーザー獲得を目指す。
マッチングガイド:プランに対して利用者が応募する、利用者がリクエストを出すといった基本的な機能はある 利用ユーザーがほぼいないため、サービススケールを諦めているかこれから進めていくか
Tour Master:ツアーガイドは審査制で事前面談を行い詳細な旅行プランや予算内容を決定→依頼するので事業者側の手軽感が弱い サイトがガチャガチャしていてどう調べればいいのかがわからないので使いずらい
foratravel:海外のサービスで、検索範囲は広い代わりにデザインに親しみが持てない ランサーズのように、利用者の要望に対して事業者が入札していくような旅全般をオールインワンでサポートする立て付け
・掲示板機能+SNSアカウントの連携で事業者側の人となりを知る事ができる。 ・動線がわかりやすい検索機能
・初期に実際に事業者として協力してくれる人がいること ・ローンチ時のターゲットエリアを絞ることで地元のサービス(特別)感を演出する ・実際に運営をしている利用者からのフィードバックを集めやすい環境(月の利用者200人、内海外旅行者: 40人(20%)英語圏の旅行者: 20人 (10%))
※MVPリリースでは、掲示板機能の完成までになります
利用者登録: メールアドレス、パスワード、ニックネーム 事業者登録: 利用者登録と同じ
プロフィール編集: 自己紹介文、プロフィール画像、掲示板・ブログ一覧のリンク SNS連携: 使用しているSNSへのリンク
質問投稿: 旅行先、日程、予算、興味のあることなどを指定して質問投稿 回答投稿: 質問に対する回答投稿 コメント機能: 質問や回答に対するコメント いいね機能: 質問や回答への共感 検索機能: キーワード、地域、カテゴリーなどでの検索(観光、グルメ、アクティビティなど)
※本リリースでは、ブログ機能、通知機能、利用者のマッチングと報酬システムまでを実装します
ブログ機能: 事業者が旅行プランやスポットについてのブログ記事を作成し、公開 カテゴリ機能:カテゴリ(食事、アクティビティなど) スポット選択機能:エリア 画像投稿機能:複数の画像を掲載できる いいね機能:事業者、利用者からいいねがもらった数字が表示される コメント機能:ブログへのコメント キーワード検索機能:カテゴリ、スポット、ユーザーで絞り込み可能
1.掲示板への回答、掲示板への投稿、ブログへのコメントがあった場合に通知が行くように設定
2.旅行プラン、旅行リクエストへの回答があった場合に通知が行くように設定
利用者登録: 支払い情報 事業者登録: ガイド登録を行う場合に銀行口座情報の登録、電話番号認証
プラン作成機能:時間、場所、目安予算、詳細、キーワード、カテゴリー(観光、グルメ、アクティビティなど) 検索機能: キーワード、地域、カテゴリーなどでの検索(観光、グルメ、アクティビティなど)
プラン作成機能:時間、場所、詳細、目安予算、キーワード、カテゴリー(観光、グルメ、アクティビティなど) 検索機能: キーワード、地域、カテゴリーなどでの検索(観光、グルメ、アクティビティなど)
ガイド依頼: 旅行者が、希望の地域、日程、予算、希望するアクティビティなどを指定してガイドを依頼 ガイド応募: 事業者が、ガイド依頼に対して応募 マッチング: 旅行者と事業者がお互いに合意してマッチング
マッチングしたユーザー同士でメッセージのやり取り 評価機能: サービス終了後に、お互いを評価
ガイド料金の決済: 信用カード、PayPalなどによる決済 キャンセルポリシー: キャンセル時の返金ルール設定 手数料設定: サービス利用時の手数料設定
英語対応
*Docker: コンテナ型仮想環境
*Db:PostgreSQL(renderを使うため)、Redis
*tailwind:UI
*render:デプロイ環境
*Rails: フロントエンド & バックエンド (Ruby on Rails)
*RuboCop:コード品質管理
*Visual Studio Code:テキストエディタ
- 新規ユーザー登録 (メールアドレス、パスワード、ニックネーム)
- ログイン / ログアウト
- パスワードリセット
- メールアドレス確認
- User (Devise で自動生成)
- Profile (1対1 で関連付け)
- devise: 認証機能全般
- devise-i18n: Devise のメッセージを日本語化 (オプション)
- Action Mailer: メール送信
- プロフィール表示
- プロフィール編集 (自己紹介文、画像、SNS リンク)
- Profile
- User (1対1 で関連付け)
- carriawave: プロフィール画像のアップロード
- ImageMagick (または MiniMagick): 画像のリサイズやフォーマット変換 (必要に応じて)
- 質問の投稿、編集、削除
- 回答の投稿、編集、削除
- 質問・回答へのコメント (今回は AnswerComment モデルで実装)
- 回答へのいいね
- 質問一覧、詳細表示
- キーワード、地域、カテゴリーなどでの検索
- Question
- Answer
- AnswerLike
- User (Question, Answer は User に belongs_to で関連付け)
- Spots (Question と Area は多対多、中間テーブル Localization を使用、ポリモーフィック関連)
- Ransack または pg_search: キーワード検索
- Kaminari : ページネーション
- ブログ記事の作成、編集、削除
- ブログ記事の一覧表示、詳細表示
- カテゴリ、エリアでの絞り込み
- キーワード検索
- 画像投稿 (複数枚、body 内に埋め込み)
- いいね機能
- コメント機能
- Blog
- BlogLike
- BlogComment
- User (Blog は User に belongs_to で関連付け)
- Category (Blog と Category は多対多、中間テーブル Categorizable を使用、ポリモーフィック関連)
- Area (Blog と Area は多対多、中間テーブル Localization を使用、ポリモーフィック関連)
- ActiveStorage::Attachment (Blog は has_many_attached :images で関連付け)
- ActionText::RichText (Blog は has_rich_text :body で関連付け)
- Active Storage: 画像のアップロード
- Action Text: リッチテキストエディタ (Trix)
- ImageMagick: 画像のリサイズや最適化
- Ransack または pg_search: キーワード検索
- Kaminari または will_paginate: ページネーション
- lozad.js: 画像の遅延読み込み (オプション)
- 以下のイベント発生時にメールで通知:
自分の質問への回答
自分の質問・回答へのいいね
自分のブログへのいいね
自分のブログへのコメント
- Notification
- User (Notification は User に belongs_to で関連付け、recipient_id と actor_id を使用)
- Blog, Question, Answer (Notification は notifiable_id, notifiable_type でポリモーフィック関連)
- Action Mailer: メール送信
- Sidekiq: メール送信の非同期化
- SendGrid (または他のメール配信サービス): メール配信 (必要に応じて)
- 事業者登録 (銀行口座情報、身分証明書、電話番号認証)
- 事業者アカウントと一般ユーザーアカウントの区別
- devise: 認証機能全般
- devise-i18n: Devise のメッセージを日本語化
- Action Mailer: メール送信
- SendGrid (または他のメール配信サービス): メール配信
- Sidekiq: メール送信の非同期化
- stripe: 支払い情報処理
- twilio-ruby: 電話番号認証 (SMS 送信)
- Active Storage: 身分証明書などのファイルアップロード
- 事業者用プロフィール編集 (銀行口座情報、身分証明書)
- 旅行プランの作成、編集、削除
- 旅行プランの一覧表示、詳細表示
- エリア、カテゴリーでの絞り込み
- キーワード検索
- Plan
- User (事業者に belongs_to で関連付け)
- Category (Plan と Category は多対多、中間テーブル Categorizable を使用、ポリモーフィック関連)
- Area (Plan と Area は多対多、中間テーブル Localization を使用、ポリモーフィック関連)
- Ransack キーワード検索
- Kaminari ページネーション
- 旅行リクエストの作成、編集、削除
- 旅行リクエストの一覧表示、詳細表示
- エリア、カテゴリーでの絞り込み
- キーワード検索
- Request
- User (利用者に belongs_to で関連付け)
- Category (Request と Category は多対多、中間テーブル Categorizable を使用、ポリモーフィック関連)
- Area (Request と Area は多対多、中間テーブル Localization を使用、ポリモーフィック関連)
- Ransack キーワード検索
- Kaminari ページネーション
- ガイドへのリクエスト送信 (旅行者)
- ガイドからのプランへの応募 (ガイド)
- マッチング成立処理
- マッチング一覧表示
- マッチング後のメッセージ送受信
- ガイドへの評価
- Application
- Matching
- Message
- Review
- User (旅行者・ガイドと Application, Matching, Message, Review を関連付け)
- Request (Application, Matching を関連付け)
- Plan (Application, Matching を関連付け)
検討
- 決済処理 (Stripe 使用)
- 決済履歴表示
- キャンセル時の返金処理 (Stripe 使用)
- PaymentLog
- User (旅行者と関連付け)
- Matching (決済対象のマッチングと関連付け)
- stripe: 決済代行サービス
- sidekiq: 非同期処理
- ユーザーの言語設定に応じた表示言語の切り替え
- 文言の日本語と英語の対訳
- i18n: Rails の国際化機能
- i18n-js: JavaScript での国際化対応 (オプション)
MVP:https://drive.google.com/file/d/1axkZ_jMgdmXJNdX6wBIuBc-ObnVgsc7X/view?usp=drive_link