僕は発展途上技術者

モノリス vs マイクロサービス

額縁に入れて飾りたい

ChatGPTの訳 基本的なプログラミングツール、例えばカプセル化や名前空間を使用して壮大なモノリスを作る能力がないなら、分散マイクロサービスの群れで状況を改善する能力もありません。あなたのスパゲティコードは、ただ5枚の異なるプレート上に存在するだけになるでしょう。

microservices で開発できるためにスキルを上げましょう、って言っているのではなくて、DHHほどのスーパープログラマでないほとんどの人は monolith で作ったほうが良いよということなのだと思います。

Scratch Day in Tokyo 2023 Show & Tell 振り返り

これまで何回か振り返りを残しているので、1週間経ってしまいましたが記憶が残っているうちに今年の Scratch Day in Tokyo でおこなわれた Show & Tell を振り返ります。

これまでの振り返りは以下の通り。

Keep(来年も続けたいこと)

  • MC御家さん、場を盛り上げてくれるし(ネコ大砲では盛り上げすぎでしたが :) )、うまく質問をひろってくれる上に、今年はタイムキーピングまでもやってくださった。なくてはならない存在です。
  • 会場からどんどん質問が出る。誰もが登壇者と同じ Scratcher であるからならでは。
  • CoderDojo吉祥寺の山浦さん発案の登壇者専用名札。だれが登壇者かわかりやすいし、これを渡す過程でだれが会場にすでに来ているかがわかって出欠チェック代わりになる。
  • それぞれの部の全作品を、別タブで開いておいたので、進行はスムーズだった。
  • 応募作品はすべて採用

Problem(問題点)

  • 動画で配信する旨を直前に登壇者に伝えることとなってしまい、一部の作品でタイトルやクレジットの表記の調整をお願いすることになったり、配信内容を調整する必要が生じてしまった。
  • これまで応募者がどんな人であるかということは全く問わず、基本的に応募作品はすべて採用という方針を取ってきて、例年様々な年齢、男女の作品が発表される結果となってきてはいたのですが、今年は確かにかたよりがあると思いました。
  • 年々作品のレベルが上がってきており、前回開催から4年が空いてますますプロ顔負けの作品が多くみられたのですが、そうなってくるとまだ Scratch をはじめてまだ少しなんだけど、といったこどもたちの発表がしづらい雰囲気になってしまっている気がする。

Try(来年改善したいこと、やってみたいこと)

  • 動画で配信する旨は応募フォームにちゃんと書くようにします。また、細かくなってしまいますがその際に注意すべきこと(使用する素材やBGMの使用許可の確認)も併記します。
  • 過去の振り返りを読み返してみると、ほぼ毎回のように書いているのに実現していないどんな作品でもOKというもっと誰でも参加しやすい別枠の Show & Tell を用意します。 動画配信はなし、会場だけで楽しむ場とします。
  • 振り返った内容を活かせるよう、来年の Scratch Day が近づいたら、このブログ記事を読み返すこと。
  • タイマーは御家さんが用意してくださったアプリを使っていたけど、そこは Scratch 製のものを使いたい。

ChatGPTによるGeoJSONの作成から修正まで:実体験からの感想

シンギュラリティなんてSFの話だと思っていたが、ん、これもしかして本当にその日は来るかもと思った実体験を紹介します。ChatGPTがすごいという話をよく聞きますが、一方でひっかけ問題にはやっぱりひっかかったとか、某社の創業者の名前を間違えたとかまだまだ信用できないという評価もあります。

いやいや、そんなググったら一発でわかるような問題を聞いてどうするんだと思います。位置情報をJSON形式で記録でき、地図アプリとかに表示するときに便利なGeoJSONというファイルフォーマットがあります。

観光地のサンプルをいくつかリストして、このGeoJSON形式のファイルとして生成したいと思ったのでChatGPTに頼んでみました。「日本の観光地を10個含んだ geojson を作って」

その後この GeoJSON ファイルを使用する地図アプリの都合上、properites のキーの名前が都合が悪かったので、変えるようにお願いします。

ばっちり修正してくれて、この時点で驚きました。しかし表示してくれたサンプルには2つしか実際のデータがなくて、残りは ... でごまかされていたので以下のように指示しました。 「...の部分は省略せず、サンプルでいいので実際のデータで表示して。」

追加要望も難なく受け付けてくれます。

きちんと丁寧に指示すれば、かなりややこしい要望にも応えてくれます。

しかし、写真のURLは実在しないものででっちあげでした。「写真のURLは実在のものを使って」とお願いしたところ残念ながら断られてしまいました。

しかしここまでの成果で上出来です。実際に自分で作業してこの結果を得るのは、さして難しいことではないとはいえ、小一時間はかかるのではないでしょうか?それがものの数分で終わってしまいました。

昭和の話をします。いや、僕が働き始めたときはもう平成だったので平成時代の話です。社会人1年目、2年目の頃というのは、議事録をまとめたりとか、何らかの報告書の草稿を書いたりとか、あるいは顧客への謝罪メールの下書きを書かされ全部書き直せとか言われたりといった雑用をまかされます。

そうした泥臭い経験を積み重ねることで社会人として成長していくと思うのですけれど、そうした雑用レベルのタスクが今後どんどんAIに置き換えられてしまうとすると、これから学ぼうという人たちの成長の機会が奪われてしまうのではないかと思ってしまうのですが、それが杞憂に終わるといいなと思います。

いまさら Lirbon を紹介する

Amazonのページで本を検索すると、最寄りの図書館にその本があるかどうかをAmazonのページに表示してくれる Libron を更新しました。10年以上メンテしているので僕には今さらなのですけど、時を経てこのツールを知らない人もでてきたと思うのでいまいちど紹介したいと思う。

どんなツールなのかはこのアニメーションgifを見てもらうのが一番てっとり早い。

Libronの使い方

このAmazonのページから別のページに移動する必要がなく、ページ上にその本が図書館にあるかどうかを表示してくれるところが、Libronを人に見せると「どうやってるの?」と驚かれるポイントだ。Chromeの拡張機能を使うとこれが実現できる。

Amazonの本のページのURLには、ISBNコードという各書籍にわりふられたユニークな番号が含まれており、各図書館の検索ページでこの番号を検索すればその図書館に本があるかどうかがわかる。この作業を超高速にプログラムが裏でやってくれて結果を表示するということをLibronはやっている。

さて、全国には7400以上の図書館があり、図書館の検索ページの仕様はおおまかには似通ってはいるのだが、微妙に少しずつ違っている。最初は地道に、僕が住んでいる調布市を中心に少しずつ対応範囲を広げていったが、他県で対応してくれる協力者が現れていったとはいえ10県くらいで発狂しそうになった。

そんなときに登場したのが https://calil.jp という画期的なサービスで、この気の遠くなる地道な作業に本気で取り組み事業化している。図書館に蔵書があるかどうかの結果をAPIとして提供しており、LibronはカーリルAPIを利用する形に変更した。

2010年よりAmazonのページは何度となく細かな部分が変わっており、その都度ちまちまと修正してLibronを対応させてきた。12年間メンテし続け今でも動いているということは、12年後も高い確率で動いているということだ。この間類似のツールはいくつかでてきたが、それらにはない老舗の利点と言える。

今Amazonで本のタイトルを検索すると、実はKindleのページがヒットする。そこから、同じタイトルの単行本のページに移動しないと蔵書検索して結果を表示できなかったのだが、今回のアップデートでKindleのページでも先回りし、図書館にその本があるかどうかを調べられるようにした。

Libronを外国の人にデモする機会があり、そのときに「How slick!」というコメントをもらった。聞き慣れない単語だなと思ってそのとき調べたら、「(表面が)ツルツルした」「滑らかな」という意味から転じて、「洗練された」とか「巧妙な」という意味があるらしい。

以来、僕はこのslickさをソフトウェアやプログラムを作るときの大事なポイントに置いている。AmazonのKindleのページから単行本のページにはボタンをマウスでクリックすれば移動できるが、そのボタンのリンク先の情報をプログラムを書いて自動で取得すればその1クリックの手間を省くことができる。

そうしたちょっとした手間の省略を積み重ねることで便利なシステムやソフトウェアができあがる。最近になって耳にするDXというキーワードも、なんてことはない、この手動でおこなっているひと手間ひと手間を自動化していって、ピタゴラスイッチのように連携してうまく動くようにすることに過ぎない。

Chromeの拡張機能というのは、このようにとても便利でパワフルなものだが、裏を返すとなんでもできてしまう、それこそパスワードの欄に打ち込まれた文字をどこかのサーバーに送るなんていう悪行も可能だ。拡張機能を使うときはその作者、開発者を信頼して使うしかない。

Libronの場合も僕を信じてください、と言うしかないのだが、加えて、拡張機能のソースコードは https://github.com/champierre/libron で公開しており、見る人が見れば、この中で不正なことをしているかどうかはわかるようになっている。

また、もし僕が飽きてしまったり、やる気がなくなっても、あるいは明日急にトラックに轢かれてしまっても、このソースコードを誰でも引き継ぐことができる。

IPv6 パススルー有効かどうかの見分け方

自宅は集合住宅で、はじめから各部屋にLANポートが付いていて、契約すればNTT-MEが提供しているインターネットサービスを利用できるようになっている。

このほど、IPv6接続サービスを提供開始しました、というお知らせが来た。動画や大容量のデータでも快適に利用できると謳っているので、申し込もうと思いホームページを確認してみたのだが良くわからない。そこでカスタマーサポートに確認したら、別に申し込みは不要で、IPv6で接続するにはルーターの設定を IPv6 > パススルー有効 にすればいいだけですよ、と教えてもらったのでさっそく設定してみた。

ちょうどつい昨日、無線ルーターを TP-Link Archer AX73/A に変えたばかり。管理画面から IPv6 のメニューを探しだし、パススルー(ブリッジ)を有効にした

設定を変更する前と後で特段速度は変わらないし、ちゃんと設定が有効になっているのか不安だったのでちょっと調べてみたところ、「あなたの IPv6 をテストしましょう。」というサイトで確認できるとのこと。

こちらが IPv6 パススルーを有効する前↓

こちらが IPv6 パススルーを有効にした後↓

ちゃんと有効後は IPv6 で接続できていることが確認できました。

速度を計測するときよく使う https://fast.com にアクセスして詳細情報をみると、パススルー有効後は IPv6 のアドレスが表示されるようになるのでここでも確認できます。

IPv6 パススルーを有効にすると、v6 とはいえ生のIPアドレスが外にみえてしまう(IPv4 の場合は通常は NAT 越しになるためプライベートアドレスは外には見えない)ので、セキュリティ的に大丈夫かよ?と思ったのだが、SPIファイアウォールとともに使えばまあ大丈夫、とのことらしい。

さて、IPv6 パススルーを有効にすると動画などが快適に見られるようだが、果たしてその効果はどうなんだろう? Netflix や Amazon Prime などストリーミングサービスを観ているとき、たまに切れることがこれまではあったので、それが少なくなることに期待したい。

CSV形式のオープンデータをブラウザの地図上でかんたんに確認できるglnmapsというツールを作りました

AEDの設置場所や避難場所などのデータを各自治体が積極的に公開するようになってきました。これらはオープンデータと呼ばれており多くはCSVファイルでダウンロードできます。こうしたデータをサクッとローカル環境で確認したいなと思っていたので、ローカル環境で無料で使えるGeolonia Maps上にかんたんに表示できるツールを作ってみました。

» https://github.com/champierre/glnmaps

各プラットフォームで動くバイナリを用意できるよう、Denoで開発しました。

glnmaps(Geo*LoN*ia Maps) とは?

glnmaps(GeoLoNia Maps)は、各自治体が公開しているCSV形式のオープンデータをブラウザの地図上で確認できるツールです。 技術的な知識がなくても、誰でも簡単に使える平易なツールをめざしています。 ソースは1個のHTMLファイルとしてダウンロードできるので、それをホスティングして公開することも簡単です。

使用しているGeolonia Mapsは、https://.test 及び、http://127.0.0.1:<ポート番号> や http://localhost:<ポート番号> などのローカル環境で使用した場合や、GitHub Pages(https://.github.io)上では無料で使用できるので、開発やオープンソースのプロジェクトで利用することができます。

参考: Geolonia Mapsの開発環境での利用について

使い方

1. オープンデータとして公開されているCSVファイルを用意

各自治体のホームページなどで公開されているオープンデータのCSVファイルをダウンロードします。データカタログ横断検索システムで探すのも用意でしょう。

サンプルとして東京都調布市が公開している公共施設のデータセットを用意しておきました。

東京都 調布市 公共施設 データセット

※ オープンデータを管理するにはdimを使うと便利です。サンプルのdim.jsonをダウンロードして、

dim install

と実行すれば上記サンプルを含めたデータセットを簡単に用意できます。

参考: そろそろオープンデータを無秩序に管理するのは卒業したいので📦データを管理するパッケージマネージャを開発した【ツール開発】

2. glnmapsを使って地図に表示

glnmaps <CSVファイルのパス>

を実行するだけです。

glnmaps is running. Access it at: http://localhost:3000/

というメッセージが表示されたら、ブラウザを開き http://localhost:3000/ にアクセスしてください。

glnmaps.gif

3. ソースをダウンロード

「ソースをダウンロード」のリンクをクリックすると、ソースのファイル(index.html)をダウンロードすることができます。

Chromeの拡張機能「Web Server for Chrome」などを使い、ローカルのWebサーバーでアクセスできるようにしたり、ホスティングサーバーに配置して公開することもできます。

web_server_for_chrome.gif

インストール

1. glnmapsのバイナリをダウンロード

aarch64-apple-darwin

curl -L https://champierre.github.io/glnmaps/binaries/aarch64-apple-darwin-glnmaps -o /usr/local/bin/glnmaps

x86_64-apple-darwin

curl -L https://champierre.github.io/glnmaps/binaries/x86_64-apple-darwin-glnmaps -o /usr/local/bin/glnmaps

x86_64-pc-windows-msvc

curl -L https://champierre.github.io/glnmaps/binaries/x86_64-pc-windows-msvc-glnmaps -o /usr/local/bin/glnmaps

x86_64-unknown-linux-gnu

curl -L https://champierre.github.io/glnmaps/binaries/x86_64-unknown-linux-gnu-glnmaps -o /usr/local/bin/glnmaps

2. 実行できるようにアクセス権を変更

chmod a+x /usr/local/bin/glmaps

20歳の自分に人生のアドバイスができるとしたら、どんなメッセージを送りますか?

友人からこんな依頼を受けました。

20歳の自分に人生のアドバイスができるとしたら、どんなメッセージを送りますか?

という質問に答えてくれ、と。

キャリアコンサルティング論の講義のために参考にしたいということなので、想定されている回答とは違いそうなのだが、まっさきに頭に思い浮かんだのは、

若いときに、将来の自分から借金してでも、モノとかではなく体験とかにもっとお金を使うべきだった

ということ。ちょうど2月くらいに以下のように思ったのでした。

詳しくは、将来の自分は今より稼いでいるという想定で、若いときには体験にお金をもっと使うべきと主張する、下記の DIE WITH ZERO という本に書いてあります。

PoseNet2Scratch を使っていつでもどこでも「キラーン!」と賢くなる

MakerFaire 2020 ではやっていた「キラーン!」シール。

↓「キラーン!」シールについて知らない方はこちら

メイカーフェアで来場者を賢くした :: デイリーポータルZ

僕はもらいそびれてしまって悔しかったので、身体の各部分の座標を取得できるScratchの拡張機能 PoseNet2Scratch を使って作ってみました。これでどこでもいつでも賢くなれます。RubyKaigi に向かう途中、作ったので新幹線の中でキラーン!

この機会に PoseNet2Scratch を Xcratch に対応させたので、以下のリンク先より、誰でも賢くなれます。キラーンのサイズや位置は適宜直してください。

↓リンク先をクリックしたら、緑の旗ボタンを押してください。

https://xcratch.github.io/editor/#https://champierre.github.io/posenet2scratch/kashikokunaru.sb3

「統一教会」や「原理」といえば、思い出す大学生のときの思い出

この話は妻には笑い話として、こども達にはこういうのには気をつけないといけないよという警告として何度か話したことはあるのだが、当時は「そんなのに騙されるの馬鹿だなあ」と言われそうなのが嫌だったみたいな感覚があって親にも友達にも相談することがなかった。

1991年3月、入学手続きのための書類を手に僕は井の頭線駒場東大前の駅を降りた。一通りの手続きを終えると、サークルや各種運動部の勧誘を受ける中、今でははっきり覚えていないのだけれど、確か二人組の男性の学生に声をかけられた。曰く「僕らのサークルは人生の目的を探求するサークルで一度話を聞いてみないか、うんぬん」といった内容で、いま思うとどうしてこんな話にひっかかってしまったのか本当にわからないのだけれど、なぜか好奇心からかその人達について行ってしまった。駒場東大前の駅前の商店街のなかの小さな雑居ビルの、たしか階段をあがっていった2階かなんかのやや広めの部屋に連れて行かれ、そこで20人くらいだか僕と同じ新入生の学生が集められていた。スーツを来た、学生なんだかそれよりやや年上の人が登場して、小一時間くらいなんだかありがたいようなそうでないような講釈を聞かされた。その講釈が終わったあと、サークルの新歓合宿があるからぜひ参加しないかと誘われるのだ。教養課程では、第2外国語でどの言語を取るかによって、40人くらいのクラスごとに分けられており、そのクラスの人たちの親睦を深めるためということで別に新歓合宿があることが決まっていて、その合宿の日程とかぶるから参加するのは無理だと僕は言うと、クラスの新歓合宿なんか参加してもあまり意味がない、ぜひそのサークルの合宿の方に参加すべきだとやや強く勧められたように思う。

原理研という統一教会系のサークルがあって、その勧誘をおこなう女子学生、いわゆる原理ギャルには気をつけるように、といった注意惹起を学内で聞くようになるのは、入学したあと4月になってから。同じクラスの学友からだったり、部活動の同期や先輩から聞くようになるのだが、3月のこの時点ではそうした情報はまだあまり耳にしていない段階だったのだ。クラスの新歓合宿に参加すれば、2年生の学生も何人か同行してくれていることもあって、そうした情報が入ることが予想されるので、それを阻止するためにサークルの方の合宿に参加させたかったのかな、と今では推察される。幸福の科学やらオウム真理教やら、当時はいろいろあって、各種団体がいろいろな形のサークルを隠れ蓑にしていたというから、そのサークルがいったいどこの組織に属するものだったかは今となってはわからない。ひょっとして本当に「人生の目的」を探求するためのサークルだったのかもしれない、いや、なさそうだけど。。 ともかく、僕は良くわからず合宿の前金だとかいう5000円を置いて帰り、しばらく一人自分で考えたあと、やっぱり怪しいけど、5000円取り戻しに行くのはリスクありそうだし、なんだか恥ずかしくて誰にも相談できず、そのサークルとはその後いっさい関わることはなかった。

限りなく怪しいが、断定はできない話ではあるのだけれど、「統一教会」というワードを聞くようになった最近、このときの思い出が鮮明に思い起こされる。

Rails 7アプリ on Heroku でPostGISを使い、外部APIを使わず緯度経度から県名を導く

PostGISを扱う練習として、HerokuでRails 7アプリからPostGISを使えるように設定し、緯度経度を与えたときに、その場所を含む県名を取得して表示するようなサービスを作ってみました。

DockerでRails 7アプリを動かす

第一歩として、ローカル環境でRails 7のアプリを動かします。Docker DesktopなどをインストールしていてDockerのセットアップが済んでいることが前提です。

ryanwi/rails7-on-docker

にあるコードをgit cloneし、READMEにある通り、セットアップをおこなって動かします。

http://localhost:3000 にアクセスすれば、以下のようにトップ画面が表示されます。

PostGISを有効にする

以下の3箇所を修正してローカルのDocker環境でPostGISを有効にします。

Gemfileに以下を追加します。

gem 'activerecord-postgis-adapter'

config/database.ymlのadapterをpostgisに変更します。

default: &default
  adapter: postgis

docker-compose.ymlでdbホストのイメージを変更します。

  db:
    image: mdillon/postgis

またPostGISを有効にするためのマイグレーションファイルを作成します。

docker-compose exec web rails g migration AddPostgisExtensionToDatabase

で生成したマイグレーションファイルの中身は

class AddPostgisExtensionToDatabase < ActiveRecord::Migration[7.0]
  def change
    enable_extension 'postgis'
  end
end

とします。

これらの変更をおこなった上で、再度docker-compose buildから環境の再構築をおこなうのですが、その前にdocker volume rmで、最初に作ってしまったデータベース用のdockerボリュームを削除しておきます。

docker volume rm rails7-on-docker_pg_data

これを行った上で、docker-compose buildから環境の再構築をおこないます。

再構築が終わり、再びdocker-compose upでコンテナを起動したら、

docker-compose exec db bash

の後、

psql -U postgres railsondocker_development

でpostgresに接続後、SELECT postgis_version(); を実行して、以下のようにpostgisのバージョン情報が出力されれば、PostGISの設定が有効となっています。

postgres=# SELECT postgis_version();
            postgis_version            
---------------------------------------
 2.5 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

Herokuで動かす

ここまでのコード変更は自分のGitHubリポジトリにコミット済みであることが前提で、Herokuで動かす手順は以下の通り。

GitHubリポジトリに接続し、

Automatic Deploysを有効にします。

config/database.ymlのproductionの部分を以下の通り書き換え、

production:
  <<: *default
  url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>

git pushすると、自動的にHerokuにデプロイされます。

最初、db:migrateが必要なので、

heroku run rails db:migrate -a <アプリ名>

を実行します。

heroku pg:psql -a <アプリ名>

でHerokuのDB(postgres)に接続し、ローカル環境のときと同様、SELECT postgis_version(); を実行して、PostGISの設定が有効となっていることを確認します。

緯度経度情報を保存するPointモデルを作成

緯度と経度、そして県名を保存できるPointモデルを操作するscaffoldを作成します。

docker-compose exec web rails g scaffold Point 'lat:decimal{10,2}' 'lng:decimal{10,2}' prefecture:string

migrationを実行します。

docker-compose exec web rails db:migrate 

県のポリゴンデータ

県のポリゴンデータを作成するための準備として市区町村のポリゴンデータをPostGISに取り込みます。

国土交通省の国土数値情報ダウンロードのページから「全国」のデータをダウンロードし解凍します。(令和3年のデータファイルはN03-20210101_GML.zip)

国土数値情報 | 行政区域データ

解凍したフォルダN03-20210101_GMLはアプリ直下のdbフォルダの下に置いておきます。

docker-compose.ymlを以下のように編集し、docker-compose buildで、コンテナを再構築し、上記フォルダにコンテナからアクセスできるようにしておきます。

  db:
    image: mdillon/postgis
    env_file:
      - .env/development/database
    volumes:
      - .:/usr/src/app <-- この行を追加
      - db_data:/var/lib/postgresql/data
docker-compose exec db bash

にdbホストに接続し、シェープファイルからSQLファイルを生成するためのコマンドshp2pgsqlを使って

shp2pgsql -c N03-20210101_GML\\N03-21_210101.shp shapes > shapes.sql

で全国の市区町村のポリゴンデータをPostGISに取り込むためのSQLファイルを作成します。

次に

psql -U postgres railsondocker_development < shapes.sql

を実行して、ポリゴンデータをshapesテーブルに取り込みます。

次に

psql -U postgres railsondocker_development

でpostgres接続後、

CREATE TABLE prefectures AS 
SELECT 
n03_001 AS pref_name,
ST_Multi(ST_Union(geom)) AS geom
FROM shapes
GROUP BY n03_001;

を実行して、各都道府県に属する市区町村のポリゴンデータを結合して、都道府県ごとのポリゴンデータをprefecturesテーブルに抽出します。

できあがったprefecturesテーブルをsqlファイルにエクスポートします。

pg_dump -U postgres --table prefectures railsondocker_development > prefectures.sql

Heroku 上では、このprefectures.sqlだけを読み込みます。

heroku pg:psql -a <アプリ名> < prefectures.sql

ポリゴンデータから緯度経度が所属する都道府県を導く

緯度、経度を入力し、Pointのデータを保存したときに、どの都道府県のポリゴンデータにその緯度・経度が含まれるかを調べ、その結果をprefectureにセットします。

以下の通り、Pointモデルのbefore_saveにその処理を定義します。

class Point < ApplicationRecord
  before_save :set_prefecture

  private
  def set_prefecture
    # 県名を取得
    res = ActiveRecord::Base.connection.select_all("SELECT pref_name FROM prefectures WHERE ST_Within(ST_GeomFromText('POINT(#{lng} #{lat})'), geom);")
    self.prefecture = res.first["pref_name"]
  end
end

Pointの入力フォームでprefectureを入力する必要はないので、その部分を削除します。

http://localhost:3000/points/new に削除し、たとえば以下のように緯度、経度を入力します。

Create Pointボタンをクリックすると、以下のようにその緯度、経度が属する都道府県が保存され、表示されます。

このとき、Geocodingなどの外部APIにアクセスしていないので、高速に検索できています。

参考リンク

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ