質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Geolocation

Geolocation(ジオロケーション)は、携帯電話やインターネットに接続したコンピューターターミナルなど、オブジェクトの現実世界での地理的位置の情報を扱う技術であり、位置評価の実施や、実際に評価された位置を示す場合もあります。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2884閲覧

Rails:ホットペッパーグルメAPIを用いて現在地に基づくお店検索機能をつけたい

hikaru-udon

総合スコア6

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Geolocation

Geolocation(ジオロケーション)は、携帯電話やインターネットに接続したコンピューターターミナルなど、オブジェクトの現実世界での地理的位置の情報を扱う技術であり、位置評価の実施や、実際に評価された位置を示す場合もあります。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2021/10/26 23:03

前提・実現したいこと

ステップアップのため、学習としてWebAPIを使ったアプリを開発したく、ホットペッパーグルメAPIを用いて条件ごとにレストラン情報を検索するアプリを自作しようと考えています。(理想は食べログなどをまねたい)
ですが、まだまだ調査方法が拙く、RailsでホットペッパーグルメAPIを使用したアプリ例・参考コードを見つけることができず、どのように実装すれば良いか悩んでいます。WebAPIでの実装に詳しい方、またこのような機能の開発をしたことがある方にアドバイスいただきたいと思い、質問させていただきます。

具体的な課題

  • 最も実現したい機能としては「ユーザーの現在地情報を取得し、指定した範囲の周辺レストラン情報を一覧表示する」です。

###検討・試したこと
0. 自分なりに調べた結果、推定する手順としては、GeolocationAPIを用いて現在地情報(経度・緯度)を取得し、ホットペッパーグルメAPIに取得した情報を渡して検索するという流れだと思うのですが、具体的にディレクトリ、MVCのどこにどのように記述すればいいのかがわかりません。(この流れ自体もあっているかどうか)
(参照:
https://www.youtube.com/watch?v=0fFx9BrP_8g
https://qiita.com/rickbox/items/09d2d30b030950f520ec
https://blog.codecamp.jp/javascript-geolocation)

  1. ホットペッパーグルメAPIを利用する際のRailsでの記述方法が全くわかりません。
  2. 以下の記事を参考にJavascriptで現在地情報を取得する手段があることを理解できましたが、別の記事ではJavascriptを使わずにコントローラーに直接APIの情報を取得していることや、参照記事が5年以上前のものであることも踏まえ、可読性や効率の面でどのように記述するのが最適なのか混乱してしまいました。

(参照:https://syncer.jp/how-to-use-geolocation-api)

##まとめ
・RailsでのホットペッパーグルメAPIの記述・活用方法
特にこちらについてのアドバイスがいただきたいです。また手がかりとできそうな記事や調査方法(ググり方)なども助言いただけると大変嬉しいです!
そのほか解決に際してご質問があれば気兼ねなくお寄せください。何卒よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問の範囲が広すぎるのでアドバイスだけですが。

フロントを何で実装しようとしてるのかわからないですが、処理の流れとしては

  1. 現在地の座標を取得
  2. 座標を元に店舗情報を取得
  3. 店舗情報を表示

の流れかと思います。
1はRailsサイドではできないのでフロントエンドで取得する必要があります。(スマホならGPSなど)

3はViewとHelperなどを駆使して頑張ってください。

2はRailsで座標情報を受け取ってHotPepperのWebAPIにリクエストするのかと思いますが、
rubyで外部へHTTPリクエストをするGemは有名どころだとHTTPartyFaradayがあります。お好きものを選んで使い方を調べてください。
HotPepperのWebAPIは下記のURLで座標の周辺の店舗情報を取得できるようです。
https://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=`<APIKey>&range=<range>&lat=<緯度>&lng=<経度> <range>は1〜5で1が100m以内、5が3km以内(デフォルトは3で1km以内) <APIKey>は登録するともらえます。 <緯度><経度>`は1情報をRailsへリクエスト時に送信し、その情報を埋め込むイメージでしょうか

ここはMVCでいうとMで行うべきかとおもいます。

投稿2021/10/27 02:14

satoshih

総合スコア799

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hikaru-udon

2021/10/29 07:07

ご回答ありがとうございます!知識が浅く、抽象的な質問で申し訳ございません。。 ですが、おかげで実装の流れを正しく整理することができました。 1に関しては調べる限りではJavascriptで実装している例がいくつか見受けられるのでそちらで実装しようかと考えておりますが、「https://www.youtube.com/watch?v=0fFx9BrP_8g」こちらの動画内ではAPIを用いて郵便番号の入力による現在地(市区町村まで)情報の取得を、Railsのfrom_withを用いてビューとコントローラーのみで行なっています。この時にはGemは用いられていないのですが、APIの種類による違いなのでしょうか?もしご存知でしたらご意見いただければと思います。 また、よろしければ「フロントで受け取った現在地情報埋め込んでをホットペッパーAPIにリクエストする処理」をMVCのCではなくMで実装するべき理由もお伺いしたいです。よろしくお願いいたします。
satoshih

2021/10/29 07:39

この動画は `最低限の実装` で郵便番号から住所を検索して表示するサービスを作成しているため、Controllerに書いてるんじゃないかと思います。 店舗検索のAPIも郵便番号から住所を検索するAPIも考え方は一緒です。 Controllerはリクエストを受け取りViewを表示することが主な役割のため、ロジックはほとんど書かないです。 Controllerでロジックを書くと煩雑になりやすく、管理できなくなるためModelもしくはServiceクラスなどに役割ごとのクラスを作成しロジックを書きます。 例えば動画のサービスの場合、 PostalSearch クラスを作成し search( postal_code ) のようなメソッドを作成し戻り値をHashで返すなどです。コントローラーからはこのクラスの関数を呼んでその戻り値を元に表示するだけという感じになります。 エラー処理などもこのメソッド内で完結させるため、ControllerではAPIの仕様や振る舞いを意識せず(依存せず)に実装できるようになります。(依存性を低くすることで柔軟で強固なプログラムを作成できます。) 簡単に言えばMに実装していると他のControllerなどで住所を検索するとき楽に取得できますよね? キーワードは `Classの役割` と `疎結合` 、あとは `DRY(同じことは2度書かない)` です
hikaru-udon

2021/10/31 12:35

なるほど、DRY原則等の観点からということですね!納得しました。 Gemを用いた記述方法は基礎も含めて学習すべきかと感じましたので勉強してみます! アドバイスを参考に、Modelにて、APIに必要情報の要求・取得ができるHTTP通信の処理を書いたをインスタンスメソッドを作成し、コントローラーにて呼び出せるよう設計しようと思います。 丁寧にご回答いただき本当にありがとうございました。 学習を進めていく上で、再び壁にぶつかると思いますので、もし質問した際にはまたご助力いただけると幸いです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問