未知の領域でもAIがいれば怖くない!

未経験領域でもAIを活用すれば仕事できる件

日々、お客様の期待に応え、価値を創造するために働いている皆様は、自身の強み、業務経験を活かしていることと思います。

そんなある日、突然お客様から「このプロダクトを使いたいんだけど、やってもらえない?」というような話は少なくないと思います。そしてそのプロダクトは往々にして新しいものだったり、流行りのものだったり。

しかしながら、世の中の全てのエンジニアの方々が新しいもの、流行りのものに精通し、使いこなした経験を持っているわけではありません。もちろん、まったく触れたことのない場合も大変多いことだと思います。

そんな時、歴戦のエンジニアの皆さんなら学習しながら使えるようになって自身の血肉、経験に変えていけるものだと思います。とはいえ、学習コストは低くないし、昨今のお客様のニーズにはスピード感が求められることが当たり前になっています。

そこで、AIの出番です!!

私がぶち当たった話

ここで、一旦私の経歴や業務経験をお話ししておきます。

職種:色々やるエンジニア
職歴:クリエーションラインで3社目
業務経験:
- 大規模システムの性能試験/評価業務を約10年
- インフラ構築(オンプレミス)を約1年
- PHPプログラマーを約1年
- クラウドインフラエンジニアを約1年
- devOpsエンジニアを約8年
スキル:
PHP(ほぼ忘れた)、Golang、Python、shellscript
RDB全般(Oracle、Mysql、postgressなど)
Kubernetes、Terraform、ansibleなどなど、、、

専門分野が何かと言われたら困るタイプのエンジニアです。
そんな私が、昨今でぶち当たった話をしていきたいと思います。

クラウドサービスは流れが早くて、知らないものが山ほどある

弊社はクラウドに精通したイメージをお客様に持ってもらっているので、私も業務でクラウド関連の話を頂くことがあります。
その中には、私の経歴からRBD関連の話などももちろんあるのですが、今回はDatabricksの例を挙げさせていただきたいと思います。

「Databricksを使いたい」

お客様に言われた時、Databricksってなんだっけ?と思いました。今までなら、公式ドキュメントや先達たちの記事を参考に調査、学習を行いますが、スピーディな対応が必要だったので、学習、理解、習得をスピーディに進める必要がありました。

そこで、AIの出番です

AIに聞いてみた。「Databricksってなに?」

ここでは、ChatGPTに「Databricksって何?」というプロンプトをいきなり与えてみた結果を共有します。

Databricks は 大規模データ分析(ビッグデータ)と機械学習を効率的に行うための統合プラットフォーム です。簡単に言うと、データの保存・加工・分析・AI モデル開発をひとまとめにできるクラウドサービスです。

🔍 Databricks のポイント
1. レイクハウス(Lakehouse)アーキテクチャ
従来はデータレイクとデータウェアハウスが別々でしたが、Databricks は両方の良さを統合した「レイクハウス」を提供します。
- 大量のデータを安く保存できる(データレイクの利点)
- 高速なクエリや分析ができる(DWH の利点)
- データの一貫性・品質管理がしやすい

2. Delta Lake による高品質データ管理
Databricks の基盤技術である Delta Lake は
- ACID トランザクション
- バージョン管理(過去状態に戻せる Time Travel)
- スキーマ管理
など、企業レベルのデータ品質を保証します。

3. Notebook でデータ処理から機械学習まで一気通貫
Python、SQL、Scala、R を Notebook 上で実行でき、データの前処理から可視化、AI モデル開発までワンストップでできます。

4. Apache Spark ベースで高速処理
Spark クラスタを自動で構築・管理し、大量データ処理を高速に実行できます。
→ エンジニアがクラスタ運用に悩まなくて済む。

5. MLflow での機械学習ライフサイクル管理
- モデルの実験管理
- モデルのバージョン管理
- デプロイ
など、機械学習プロジェクトを組織的に運用しやすくなります。

6. 企業向けのガバナンス・セキュリティ
Unity Catalog により
- データアクセス権限管理- 監査ログ
- データ系資産のカタログ化
が実現でき、企業レベルのガバナンスに強いです。

まとめ(超ざっくり)
Databricks = データレイクの柔軟性 + DWH の性能 + AI/ML の統合環境
データとAIを一体的に扱うためのプラットフォーム。

ふむふむなるほど。

Databricksの公式を読むよりはとっかかりやすい感じにまとめてくれました。
とっかかりとしては、とても入りやすい形になってます。

また、Catalogの作成、ETL pipelineの作成、ダッシュボードの作成についてもAIに支援してもらい、爆速で動く物を作ることができました。

でも、全て鵜呑みはダメです

しかし、問題もありました。

ダッシュボードについて、何か違和感が。。。回答と実際に私が目にしている物が一致しない。

原因は、私が見てるもはAI/BIダッシュボードと呼ばれるDatabricksが標準で使用を推奨しているもの。
AIが話しているのはレガシーダッシュボードを説明していました。

databricks 左側メニュー

私が見てたのはトップページから飛べる上記のDashboardだったので、AIの回答通りに作業ができず、違う物を相手にしてると気づくまでフラストレーションが溜まりました。


位置情報?距離計算?どうやるうだろう?AIに教えてもらおう!

クラウド関連の話ではないですが、Pythonのスクリプトで位置情報や物体との距離計算などをすることになりました。
が、私にはその様な経験も知識もありません。
1から勉強する、ググるのが今までの流れでしたが、この時はAIを利用してみました。

まず、位置情報はlatitude(緯度)、longitude(経度)で与え、geojsonで地図情報を与えて現在位置や、道路の幅などを得る方法が知りたい。さらに今いる位置が道路の中心からどのくらい離れてるかを計算したい。
ソースコードのサンプルが欲しい。
ということで、プロンプトに以下を入れてみます。

pythonでgeojsonで地図情報、latitude(緯度)、longitude(経度)で現在位置を取得して道路の車線中心からどのくらい離れたかを計算したい。サンプルをください。

これに対する回答です。


以下は Pythonで GeoJSON(道路の車線中心線)と現在位置(緯度・経度)を使って、「車線中心からどれくらい離れているか」を計算する最小構成のサンプルです。
実務でよく使われる GeoPandas + Shapely + pyproj を使います。
方針(重要)
GeoJSONの車線中心線 → LineString
現在位置 → Point
緯度経度(EPSG:4326)のまま距離計算すると誤差が大きい
👉 メートル系の投影座標(例: UTM)に変換してから距離計算
必要ライブラリ
pip install geopandas shapely pyproj

サンプルGeoJSON(車線中心線)
例:直線の車線中心(東京付近)
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"lane_id": "lane_001"
},
"geometry": {
"type": "LineString",
"coordinates": [
[139.7670, 35.6810],
[139.7680, 35.6815],
[139.7690, 35.6820]
]
}
}
]
}
Pythonコード例
import geopandas as gpd
from shapely.geometry import Point
from pyproj import CRS
# ---------------------------
# 1. 現在位置(緯度・経度)
# ---------------------------
current_lat = 35.6812
current_lon = 139.7685
current_point = Point(current_lon, current_lat)
# ---------------------------
# 2. GeoJSON(車線中心線)を読み込む
# ---------------------------
lanes_gdf = gpd.read_file("lane_center.geojson")
# 現在位置をGeoDataFrame化
point_gdf = gpd.GeoDataFrame(
geometry=[current_point],
crs="EPSG:4326"
)
# ---------------------------
# 3. 距離計算用に投影座標系へ変換
# (東京周辺 → UTM Zone 54N)
# ---------------------------
utm_crs = CRS.from_epsg(32654)
lanes_utm = lanes_gdf.to_crs(utm_crs)
point_utm = point_gdf.to_crs(utm_crs)
# ---------------------------
# 4. 車線中心線との最短距離を計算
# ---------------------------
lane_line = lanes_utm.geometry.iloc[0]
current_pt = point_utm.geometry.iloc[0]
print(f"車線中心からの距離: {distance_m:.2f} m")

出力例
車線中心からの距離: 1.37 m
👉 現在位置が車線中心から約1.4mずれていることが分かります。

応用アイデア
最近傍の車線を探したい場合
lanes_utm["distance"] = lanes_utm.distance(current_pt)
nearest_lane = lanes_utm.sort_values("distance").iloc[0]
print(nearest_lane["lane_id"], nearest_lane["distance"])

車線幅(例: 3.5m)を考慮
lane_width = 3.5 # m
if distance_m <= lane_width / 2:
print("車線内")
else:
print("車線外")

注意点(実務で重要)
- GPS誤差(±1〜5m) を必ず考慮する
- 複数車線・曲線道路では 最近傍LineStringの選択 が重要
- 日本全国対応なら 地域ごとにUTMゾーンを切り替える or 平面直角座標系(JGD2011)

もし次に
リアルタイムGPSログの処理
複数車線(左右どちらか)判定
進行方向を考慮した車線マッチング
をやりたいなら、そのサンプルも出しますよ。

シンプルながら概ね良さげなコードを出してくれました。
応用アイディアも出して色々教えてくれます。

ただ、そもそも位置情報の取り扱いがわかってないので、わかりやすい説明も求めてみます。

座標の取り扱いなどに詳しくないので、わかりやすく説明をお願い

すると、詳細な説明をしてくれます。

了解です。
「なぜその処理が必要なのか」を噛み砕いて説明します。数式や難しいGIS用語は最小限にします。

何をしたいのか(ゴール)
あなたがやりたいことは、シンプルに言うと:
今いる場所(緯度・経度)が、道路の真ん中(車線中心)から何メートル離れているかを知りたい
です。

まず超重要な前提(ここが一番つまずきやすい)
緯度・経度は「距離」じゃない
- 緯度・経度は 角度(度)
- 0.00001°何メートルかは場所によって変わる
❌ そのまま引き算するとダメ
メートルの世界に変換してから距離を測る

全体の流れ(これだけ覚えればOK)
① 緯度・経度で位置を表す
② 道路の線(GeoJSON)を読む
③ メートルで測れる座標に変換
④ 点と線の最短距離を計算

① 緯度・経度とは何か
緯度(latitude) : 北・南(Y方向)
経度(longitude) : 東・西(X方向)
例:
lat = 35.6812 # 緯度
lon = 139.7685 # 経度
これは
📍「地球の表面のどこか」を示す 住所 のようなものです。

② 車線中心線(GeoJSON)とは何か
GeoJSONの中身はこうです:
"coordinates": [
[139.7670, 35.6810],
[139.7680, 35.6815],
[139.7690, 35.6820]
]
これは
点 → 点 → 点 を線でつないだものZ
つまり
🛣️ 道路の真ん中をなぞった線
③ なぜ「座標変換」が必要なのか(超重要)
ダメな例(やってはいけない)
distance = point.distance(line)
緯度・経度のままだと:
- 単位は「度」
- 結果が 何mか分からない
正しい考え方
地図の世界には2種類あります:
地球座標:緯度・経度 単位は度
   平面座標:UTMなど 単位はメートル
  👉 距離を測るなら平面座標
 イメージ
  地球(丸い) → 紙の地図(平ら)に変換
  これを 投影(projection) と言います。

④ UTMって何?
 UTMは:
  - 地球を縦に分割した地図
  - 日本(東京付近)は Zone 54N
  - 単位は メートル
 なので:
  EPSG:4326 # 緯度・経度 -> EPSG:32654 # メートル
⑤ 実際のコードを1行ずつ解説
  import geopandas as gpd
  from shapely.geometry import Point
  📦 地図を扱うための道具箱

 現在位置を点にする
  current_point = Point(lon, lat)
  📍「今ここ!」を点で表現

 GeoJSONを読む
  lanes = gpd.read_file("lane_center.geojson")
  🛣️ 道路の線を読み込む

 座標変換(ここがキモ)
  lanes_utm = lanes.to_crs("EPSG:32654")
  point_utm = point_gdf.to_crs("EPSG:32654")
  🔄
   緯度・経度 → メートル
   同じ座標系にすることが超重要
   緯度・経度 → メートル
  同じ座標系にすることが超重要

 距離を測る
  distance = point_utm.geometry.iloc[0].distance(
   lanes_utm.geometry.iloc[0]
  )
  これは:
   点から線への 最短距離
   単位は メートル
  結果の意味
   1.37 m
  これは:
   車線中心から 横に1.37mズレている
  と言う意味です。

 よくある勘違い
  Q. 進行方向は考慮される?
  ❌ されません
  → 純粋な横方向の最短距離
  Q. GPSがズレたら?
  ✔ 普通にズレます(±1〜5m)
  だから実務では:
   車線幅 ± GPS誤差
  を考慮します。

超ざっくりまとめ(これだけ覚えればOK)
 緯度・経度のまま距離を測らない
 必ず「メートルの座標」に変換
 点と線の距離=車線中心からのズレ
 UTM(EPSG:32654)は日本で便利

もし次に
 👉 「右にずれている / 左にずれている」判定
 👉 複数車線の中から正しい車線を選ぶ
をやりたいなら、図付きで説明しますよ。



と、こんな感じに位置情報や距離計算についての注意すべきことを踏まえて理解を深めることができました。

こういった形で、AIに教えてもらって実装を無事に進めると共に、位置情報を取り扱う経験、知識をえることができました。


まとめ

今回は、"クラウドサービスの使い方"と"位置情報、距離計算"という私の経験上扱ったことのない技術スタックについても、AIがいれば学習コストを抑えて素早く学習して、アウトプットを出すことができる。という話の実例を紹介させて頂きました。

お客様のやりたいことを叶えるために、自分の持ってる経験、技術だけでなく、新しい物でも果敢に挑戦しなければならない事はたくさんあると思います。
そんな時もAIがいれば爆速で物事が進められます。
また、そもそも経験の浅いエンジニアには世の中の先達が残した知識を簡単に探して教えてくれる大変頼りになるトレーナーの様な存在と言っても良いのではないでしょうか?

ただし、AIに任せて生成したコードを鵜呑みにしていると、間違いやバグが発生しても気づけずに後で大きな障害になる可能性もあります。
なので、私はあくまでも便利なツール、コーディングパートナーのような存在としてAIを捉えています。

AIを活用しつつ自分の能力も高めていくために、今後もAIの活用方法など模索していきたいと思います。

※ このブログに載せている生成AIと実際に使用した生成AIは別ものです。ブログ執筆用にそれらしいプロンプトとその回答を載せています。

新規CTA