LoginSignup
17
15

More than 1 year has passed since last update.

ChatGPT に Svelte + Leaflet による地図アプリを作成してもらった

Last updated at Posted at 2023-03-14

はじめに

地図アプリってどうやって作成すれば良いんだろう?って思ったことありませんか?今の時代、そんな時には ChatGPT を使えば良いのです。
という安易な発想で地図アプリを作成してみます。

ChatGPT に聞いてみた

image.png

ついでに artifacts.json のサンプルも作ってもらっちゃいましょう:stuck_out_tongue_winking_eye:

image.png

実際に作ってみる

  1. まずは、以下の手順を参考にして開発環境を作成します。

    https://qiita.com/fsd-tetsu/items/8017b66d24dddc53b052

  2. Leaflet をインストールします。

    ターミナル
    npm i leaflet
    
  3. SvelteKit を使うのでファイル名の対応関係は以下になります。

    App.svelte → src/routes/+page.svelte

  4. ChatGPT の出力内容をコピペします。

  5. 最終的なフォルダ構成はこんな感じです。

    ターミナル
    /workspaces/relics-map-svelte (main) $ tree -I ".gitignore|.svelte-kit|node_modules".
    .
    ├── LICENSE
    ├── README.md
    ├── jsconfig.json
    ├── package-lock.json
    ├── package.json
    ├── playwright.config.js
    ├── src
    │   ├── app.d.ts
    │   ├── app.html
    │   ├── index.test.js
    │   └── routes
    │       ├── +page.svelte       ←修正したファイル
    │       ├── Map.svelte         ←追加したファイル
    │       └── artifacts.json     ←追加したファイル
    ├── static
    │   └── favicon.png
    ├── svelte.config.js
    ├── tests
    │   └── test.js
    └── vite.config.js
    

結果

あれ?おかしい:thinking:
image.png
タイルがバラバラになっちゃってます。。。

原因

Leaflet の CSS を適用していなかったのが原因でした。

修正

というわけで、以下の様に CSS をインポートします。参考: https://ja.vitejs.dev/guide/features.html#css

src/routes/Map.svelte
<script>
  import { onMount } from 'svelte';
  import L from 'leaflet';
  import artifacts from './artifacts.json';
+  import css from 'leaflet/dist/leaflet.css';

  let map;

  onMount(() => {
    map = L.map('map').setView([35.658068, 139.751599], 13);
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
      attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',
      maxZoom: 18,
    }).addTo(map);

    artifacts.forEach(artifact => {
      const { name, description, lat, lng } = artifact;
      const marker = L.marker([lat, lng]).addTo(map);
      marker.bindPopup(`<h3>${name}</h3><p>${description}</p>`);
    });
  });
</script>

<div id="map" style="height: 100vh;"></div>

修正後の結果

ちゃんと表示できましたー!
image.png

さて、ここからが本題です。プロットされてるかどうかも確認します。
マウススクロールで縮小して、東北方面にドラッグしてみると、、、
image.png
ちゃんとプロットされてましたー!

まとめ

ChatGPT を使って地図アプリを作成してみました。完璧とはいきませんでしたが、自分で調べて作成する場合を想像して比べてみると1時間ぐらいは短縮できたはずです。

また、結構曖昧な質問をしたにもかかわらず、SvelteLeaflet という条件に問題なく答えてくれていることに驚きです。(最近は ChatGPT を使い慣れたせいか、この驚きが薄れてきているのを感じています。)

さらに質問すれば拡張の方法もきっと教えてくれるでしょう。

ChatGPT ってすごいですね!:smiley:

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15