こんにちは。
今回は、いよいよ求職訓練で作成した中間制作物のお話です。
前回の記事では、Pythonにはさまざまな外部モジュールがあり、それらを組み合わせることで、単なるプログラミングの勉強にとどまらず、いろいろなものが作れることを書きました。
では、実際に私は何を作ったのか?
それが今回ご紹介する、
「ホテル検索プログラム」
です。
何を作ろうか?
中間制作物を作るにあたり、まず考えたのは、
「訓練で勉強した技術を、何か実用的なものに使えないだろうか?」
ということでした。
今回の訓練で学んだ技術には、
- 条件を選択して答えを導き出す対話型プログラム
- インターネットから情報を収集する仕組み
- 集めたデータを分析・絞り込む処理
などがあります。
これらを組み合わせて、個人でも企業でも楽しく使えるものを作れないか?
そう考えて思いついたのが、ホテル選びでした。
「安い・近い」だけで、本当にいいの?
ホテルを選ぶとき、皆さんは何を基準にしますか?
一般的には、
① 立地
目的地や駅などへのアクセス
② 価格
予算に合っているか
③ 設備
Wi-Fiや朝食の有無など
④ レビュー
実際に宿泊した人の評価
といったところでしょうか。
もちろん、これら4つをすべて満たすホテルを見つけるのは、なかなか難しいですよね。
そのため、実際には「目的地に近い」「宿泊料金が安い」といった条件だけでホテルを決める人も多いと思います。
でも……
それだけで本当にいいのかな?
そんな疑問が、今回の制作物の出発点になりました。
「楽天トラベル」や「じゃらん」で十分じゃない?
……と、ここで思われた方もいるでしょう。
私自身も、最初はそう思いました。
ホテルを探すだけなら、すでに便利な予約サイトがあります。
では、わざわざ自分でホテル検索プログラムを作る意味はあるのか?
そこで思い出したのが、営業時代の出張経験です。
「ホテルは僕が手配します!」
ある日の出張。
後輩から、
「来週の出張、ホテルは僕が手配します。」
と言われました。
「ありがとう。」
私は安心して任せることにしました。
そして、いざ現地へ到着。
「宿泊費は安い!」
「目的地にも近い!」
「コスパ最高!」
後輩としては、
「良い仕事をしたでしょう!」
と、きっと胸を張っていたことでしょう。
ところが……。

いざ泊まってみると、とんでもないことに!
ホテルに到着してみると、
「繁華街のど真ん中だけど、周りは怪しい店だらけ……。男性の私でも夜に出歩くのが怖いぞ!」
という場所だったり、
「目的地には近いけど、ホテルが山の上じゃん!」
「路地裏にあるけど、道が全然分からない!」
なんてこともありました。
さらに、出張先に連泊していると、
「急に寒くなった!」
「大雨が降ってきた!」
「そんな天気になるなんて聞いてないぞ!」
ということもあります。
九州から本州へ出張するような場合、季節や天候の違いを考えて準備する必要もあります。
そこで思ったのです。
ホテルって、単に「寝るだけの場所」ではないんじゃないか?
ホテルは、出張や旅行の期間中に過ごす、
「大事な拠点」
なのではないか、と。

そこで作ったのが、このプログラム
今回のホテル検索プログラムでは、できるだけ入力を簡単にしました。
利用者が入力するのは、
① 目的地(住所や駅など)
② 出発日(何日後か)
③ 何泊するか
この3つです。
すると、目的地を中心に半径2km以内のホテルを最大20件検索。
さらに、目的地とホテルを地図上に表示します。
ただホテルの一覧を出すだけではありません。
地図上の「目的地」マーカーをクリックすると、滞在中の天気予報や気温を確認できます。
そして「ホテル」のマーカーをクリックすると、
- ホテル情報
- 宿泊料金
- レビュー
- 楽天トラベルへのリンク
などを確認でき、そのまま予約サイトへ移動できるようにしました。
「どこにあるホテルなのか」が地図で分かるので、単純に価格や距離だけで選ぶよりも、現地での行動をイメージしやすくなると思います。
検索結果は、地図だけでなくホテル一覧をCSVファイルとして保存する機能も付けました。
裏側では、こんなことをしています
ここからは少しプログラムのお話です。
今回使用したのはもちろんPython。
標準モジュールとして、
- requests
- datetime
- csv
- tkinter
- PIL
- webbrowser
などを使用しました。
さらに、地図作成には「folium」、住所から位置情報を取得するために「geopy.geocoders」などの外部モジュールも利用しています。
そして、APIも活用しました。
- Nominatim
- 楽天API
- Weather API
などから必要な情報を取得し、それを組み合わせて一つのプログラムにまとめました。
簡単に言えば、
目的地を入力
↓
緯度・経度を取得
↓
天気情報を取得
↓
ホテル情報を取得
↓
地図にホテルと目的地を表示
↓
検索結果を表示
という流れです。
地図については、ホテルの宿泊費やレビューなどをもとにマーカーを設定し、目的地とホテルを分かりやすく表示するようにしました。
作ってみて、ちょっと残念だったこと
今回の制作で、思ったようにいかなかったこともあります。
当初は、ネット上からいろいろな情報を取得する「スクレイピング」をもっと活用したかったのですが、スクレイピングを禁止しているサイトも多く、BeautifulSoupやSeleniumを使うことができませんでした。
そのため、サイト運営会社が用意しているAPIを利用する形になりました。
また、ホテルの空室状況についても、通常の楽天IDでは取得できず、利用者自身に確認してもらう必要がありました。
「せっかくなら空室まで分かれば便利なのに……」
というのが正直なところです。
さらに、ホテル周辺の治安情報についても、県警の情報を取得して表示できないかと考えました。
しかし、こちらもスクレイピングが禁止されていたため、今回は地図を見ながら利用者自身に判断してもらう形になりました。
「何でも自動でできるわけじゃないんだな」
ということを、身をもって学んだわけです。
そして、ChatGPTが強力な助っ人に!
今回の制作で、もう一つ大きかったのがChatGPTの活用です。
Pythonを使って、最初から一人で全部作るとなると、正直かなり不安でした。
そこで、まず最初に「こんなものを作りたい」という完成イメージを考えました。
そのうえで、
「こういう機能が欲しい」
「こういう動きをさせたい」
とChatGPTに相談しながら、必要な関数を作っていきました。
すると、思っていたよりもスムーズに形になっていきました。
もちろん、AIに全部お任せというわけではありません。
出てきたプログラムを確認し、
「これは何をしているんだ?」
と自分でも考えながら修正していきます。
その繰り返しが、今回の制作では結構楽しかったです。
作ってみて思ったこと
今回、Pythonで一からプログラムを作るということで、最初はかなり不安でした。
しかし、
「まず完成イメージを作る」
↓
「必要な機能を考える」
↓
「ChatGPTに相談する」
↓
「自分で確認・修正する」
という流れで進めていくと、思った以上に楽しみながら作ることができました。
30年前にプログラマーをしていた私にとって、今回の制作は「昔の経験」と「今のAI技術」が出会ったような感覚もありました。
そして何より、
「自分で考えたものが、実際に動く」
というのは、やっぱり面白いですね。
中間制作物、無事完成!
こうして、私の中間制作物、
「ホテル検索プログラム」
が完成しました。
果たして、実際にどんな画面で動くのか?
そして、元営業の私が作ったホテル検索プログラムは、本当に実用的なのか?
……そのあたりは、また別の機会に、実際の画面を交えながらご紹介したいと思います。
今回の求職訓練で学んだことは、単にPythonの文法だけではありませんでした。
「何を作りたいのかを考え、それを実現するために必要な道具を探し、AIにも助けてもらいながら形にしていく。」
これも、今回の訓練で得た大きな収穫だったと思います。
さて、次は何を作ろうかな……。
……なんて考え始めると、また何か作りたくなってしまいますね(笑)。



コメント