- 投稿日:2021-01-06T23:41:00+09:00
「エンジニアに向いている人」はGitHub user内にどれぐらいいるのか
注意
- この記事はとあるツイートを話題にしていますが、筆者にツイート内容、およびツイートされた方を蔑む意図は一切ありません。
- 筆者は統計、およびプログラミングに関してはまだまだひよっこです。したがって誤った見解や拙いコードを書いている可能性がありますが、お気づきの際は是非コメントにてご指摘ください。
背景
あけましておめでとうございます!
正月休みもあけ仕事も始まりましたが、みなさまいかがお過ごしでしょうか。さて、正月早々、とあるツイートが反響を呼びました。
プログラミングスクール通ってるかどうかとかどうでもよくて、この年末年始にコード全く書いていない人はエンジニア向いてないんじゃないですかね、それぐらい好奇心が必要な職業だと思うけど
賛否両論あったこのツイートですが、内容はさておき、私はあることが気にかかりました。
「果たしてこの年末年始、コードを書いた人はどのぐらいいるのだろうか」
本記事では上記の疑問を検証していこうと思います。
レギュレーション
もちろんすべてのエンジニアに「この年末年始、コード書きましたか?」ときいてまわるわけにはいきません。そこで本記事では以下のレギュレーションに基づいて「年末年始にコードを書いた人(=エンジニアに向いている人?)」を判定していこうと思います。
- 「コードを書いた日は必ずgithubに草が生えている」と考える。すなわち「年末年始にコードを書いた人」とは「年末年始にgithubに草が生えている人」とする。また現状デフォルトブランチにマージされておらず未反映の分は考慮しない。
- 年末年始は12/30 ~ 1/3 の5日間と定義し、この間に1度でもcontributeした人の割合を測定する。
- githubのアカウントは1人1つとし、アカウントは必ず使われているものとする(すなわち未使用垢やサブ垢などは考えない)
方針
上記のレギュレーションにもとづき、より具体的な方針を決めていきます。
サンプル数はどのぐらい取れば良いか
githubを利用しているdeveloperの数は2020年時点で5600万人を超えており[1]、全員を調べるにはかなりの労力がかかります。
そこで本記事では「ある程度正しい結果」を得ることを目標におき、githubのuserの中から一部をサンプリングして、サンプルから得られた結果を全体のものとすることにしました。では、一体いくつのサンプルをとればその結果は「ある程度たしかである」といえるのでしょうか?
実は統計的には、母集団が100万人を超えていたとしても、384人分のデータがあれば、95%信頼できるデータがとれてしまうのです。[2]
本記事では400人分のgithub usersのデータをサンプリングして使うこととしました。実装方針
1. github APIでusers一覧を取得
GithubのUsers APIを使って, githubのuser一覧を取得します。
Github Users APIではuserは最大100件ずつの取得しかできないため、100件ずつ取得するリクエストを計4回投げます
また、idは17027045(筆者のgithubアカウントにふられたid)から取得し、これを「無作為抽出されたデータである」と考えます。(超初期のgithubアカウントはgithub開発者のものや、すでに使われていないものが多いのではないかと考えたため)2. 各userのcontributionsを解析
githubのcontributionのデータは以下のurlにアクセスすると取得することができます。
https://github.com/users/${user}/contributions上記で取得できるページの、いわゆる「草」の部分をx-rayというスクレイピング用のライブラリを用いて解析することにしました。[2]
実装
実装方針に基づき、
node.js
で以下のようなコードを作成しました。
http requestを投げる際にaxios
を、日付の比較の際にday.js
を、スクレイピングの際にx-ray
を使用しています。node.jsmain() async function main(){ const myGitHubId=17027045 //自分のgithubIdから400人分のgithub usersを取得 users = await getGitHubUsers(myGitHubId) //400人中年末年始にコードを書いていた人の数を集計 const appropriateEngineerNum = await getAppropriateEngineerNum(users) //結果 console.log(`エンジニアに向いている人は${users.length}人中, ${appropriateEngineerNum}人です`) } //since番目から400人分のgithub usersを取得する async function getGitHubUsers(since){ const axiosBase = require('axios'); const axios = axiosBase.create({ baseURL: 'https://api.github.com', headers: { 'Accept': 'application/vnd.github.v3+json', }, responseType: 'json' }) const users = [] for(let i = 1; i <= 4; i++){ response = await axios.get('/users', {params: {since: since + i*100, per_page: 100}}) users.push(...response.data.map(user => user.login)) } return users } //引数のusersのうち、年末年始にコードを書いていた人数を算出する async function getAppropriateEngineerNum(users){ const Xray = require('x-ray') const x = Xray() let appropriateEngineerNum = 0 for(user of users){ const contributionUrl = `https://github.com/users/${user}/contributions` const contributions = await x(contributionUrl, 'rect', [ { count: '@data-count', date: '@data-date' }]) const newyearHolidaysContributions = contributions.filter((contribution) => { return isNewyearHoliday(contribution.date) && contribution.count > 0 }) if(newyearHolidaysContributions.length > 0){ appropriateEngineerNum ++ } } return appropriateEngineerNum } //引数の日にちが年末年始かを判定する function isNewyearHoliday(dateStr){ const dayjs = require('dayjs') contributionDate = dayjs(dateStr) return dayjs('2020-12-29').isBefore(contributionDate) && dayjs('2021-01-04').isAfter(contributionDate) }結果
ということで、「年末年始にコードを書いていた人」は 全体の2%という結果になりました。補足
github profileのcotribution設定からは、private contributionの反映をオフにすることができます。したがって、この設定がオフになっており、かつプライベートリポジトリへのcontributionをした人はカウントされていません。
余談 ~「エンジニアに向いている人とは」~
最後に余談ではありますが、「どんな人がエンジニアにむいているのか」について私の見解をお話しします。
ツイッターやブログなどをみていると、「〇〇な人はエンジニアにむいていない」という意見が盛んに発信され、時に反発をうけているのを目にします。
私自身はこのどれもが「エンジニアに向いていない人」の条件となるとは思えません。なぜならまわりを見渡してみても「その条件を満たしてなくてもエンジニアとして働き、かつすごい技術を持っている方はたくさんいる」からです。(例えば上記の例に関しても、年末年始にコードを書いていなくともすごい技術力を持ったエンジニアはたくさんいます)。これらの意見を鵜呑みにし、自信を失ってしまうのはすごくもったいないことだと思います。しかしながらその一方で「〇〇な人がエンジニアに向いていない」という意見は「自分はエンジニアである以上〇〇だけは譲れない」というプライドをもっていることの裏返しだとも思うのです。またそこに対して「それは違う」と感じてしまうのも自分の中でまた別のプライドがある証ではないでしょうか。
そして私はそのエンジニアとしてのプライドを持っている人こそが「エンジニアに向いている人」だと思います。
私自身はエンジニアとして「新しい技術に興味をもち」, 「コードを書くことを楽しむ気持ちを忘れない」ことをプライドとしてもっています。2021年もこの気持ちを大切に日々鍛錬していきたいものです。
参考文献
[1] he 2020 State of the OCTO—VERSE
[2] x-rayを使ってgithubの草の情報を取得する
[3] SurvayMonkey ~アンケートの標本サイズ~
- 投稿日:2021-01-06T23:18:04+09:00
EC2(AmazonLinux2)でnode.jsを起動するまでの過程記録(nodemonを使う)
前提として行ったこと
①AWSへの登録
②EC2サーバーの新規立ち上げ
③RDBの新規構築
④ローカル環境で制作したフォルダの、EC2へのアップロード今回はnodemon を使いました。
これによってシステムの内容に変更があった時、再起動しなくても適応される(はず)。以下、EC2サーバー上で正しく動作させるために行ったことを記録する。
目次
・行ったこと
→パーミッション設定
→「npm start で起動するようにする」
→必要なもののインストール
→DB情報の書き換え
→エラー「Permission denied」
→nodemonのインストール
・おまけ(永久実行)
・参考文献行ったこと(失敗も含む)
パーミッション設定
編集したいファイルは、フォルダごと権限を777にした。
$sudo chmod 777 フォルダ名orファイル名
権限を変えるのは危ないので「ローカルで書き換えてアップロード」を繰りかえす方がいいかも。
(今回は個人製作でいじられても重大事件になるようなシステムではないので気軽に変えた)「npm start」で起動するようにする
package.jsonに以下を追加
"scripts": { "start": "nodemon ./bin/www" }これは絶対に必要ではない。
直接nodemon ./bon/www
と打ち込んでも実行できる。必要なもののインストール
npm install
$curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash -
$sudo yum -y install npmnode.js install
$sudo yum -y install nodejs
nodemon install
$sudo npm install -g nodemon
postgresql install
ここを見ましたexpress install
$npm -g install express
DB情報の書き換え
ローカル環境で開発した際、index.jsのソースコードの中に書いた接続情報は、ローカル環境でしか動作しない。
EC2サーバー上で正常に動作させるために、host: 'localhost' → host: '[AWSで作成したDBのエンドポイント]' ←変更 port: 5432 ←追加と書き換えた。
ここで
$npm start (もしくは$nodemon ./bin/www)
を実行したが、Permission denied
(権限エラー)で実行できず。エラー「Permission denied」
/node_modules/.bin/nodemon: Permission denied npm ERR! code ELIFECYCLE npm ERR! errno 126 npm ERR! ths-web-page@1.0.0 start: `nodemon ./bin/www` npm ERR! Exit status 126 npm ERR! npm ERR! Failed at the ths-web-page@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.wwwがあるフォルダまでのすべてのフォルダの権限をゆるくしてみる
権限エラーが出ていたので権限制限ゆるくしてみた。
※当たり前ですが会社のシステムとかで勝手に権限ゆるくするのは絶対にダメ!→まだ同じエラーが出ます。多分この操作は意味がなかった
nodemonをインストールする
$sudo npm install -g nodemon
このコマンドを打ったらインストールされ、
正常に$npm start (もしくは$nodemon ./bin/www)
を実行できた!!それにしてもなぜ権限エラーに??
おまけ(永久実行)
node.jsを、AmazonLinuxからログアウトした後もそのまま起動しておくには、
$sudo npm install -g forever
でインストールして
$sudo forever start ./bin/www
というコマンドを叩く。参考文献URL
Amazon EC2でnode.js,Expressアプリケーションを立ち上げる
Amazon Linux 2 に PostgreSQL 11 をインストールする
npm start の使い方
node.js バージョンアップコマンド
AWS EC2 AmazonLinux2 Node.jsをインストールしてnpmコマンドを使用できる様にする
- 投稿日:2021-01-06T22:51:06+09:00
3分でできる Node.js + TypeScript + Jest プロジェクトの雛形作成
こんにちは、mballです。
つい最近転職をしまして、がっつりTypeScriptを触るようになったので学習も兼ねて、備忘録を残したいと思います。
今回はタイトルの通り、一からNode.js + TypeScript + Jest のプロジェクトを作成する際の手順をご紹介します!初期設定
まずは
package.json
を作成します。$ mkdir node-typescript-test/ $ cd node-typescript-test/ node-typescript-test$ npm init -y node-typescript-test$ ls package.json次に、 Node.jsとTypeScriptに関わる必要なモジュールをインストールします。
node-typescript-test$ npm install typescript --save-dev node-typescript-test$ npm install @types/node --save-dev node-typescript-test$ npx tsc --init --rootDir src --outDir lib --esModuleInterop --resolveJsonModule --lib es6,dom --module commonjs node-typescript-test$ npm install ts-node --save-devそして、テストに必要なJestに関わるモジュールのインストールをします。
node-typescript-test$ npm i jest @types/jest ts-jest -D※
npm install
とnpm i
、--save-dev
と-D
は同義です。TypeScriptのドキュメントに沿って、コマンド実行しています。テストの設定
まずは、設定ファイルを作成します。
node-typescript-test$ touch jest.config.js作成した
jest.config.js
に設定を記述します。jest.config.jsmodule.exports = { "roots": [ "<rootDir>/src" ], "testMatch": [ "**/__tests__/**/*.+(ts|tsx|js)", "**/?(*.)+(spec|test).+(ts|tsx|js)" ], "transform": { "^.+\\.(ts|tsx)$": "ts-jest" }, }テストを実行する
テストを実行しやすいように
package.json
の記述を変更します。package.json{ "name": "node-typescript-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "jest" // ここを修正 }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@types/node": "^14.14.20", "ts-node": "^9.1.1", "typescript": "^4.1.3" } }次にテストに必要なフォルダとファイルを作成します。
node-typescript-test$ mkdir src/ node-typescript-test$ touch src/foo.ts node-typescript-test$ mkdir src/__tests__ node-typescript-test$ touch src/__tests__/foo.test.ts
jest.config.js
でrootDir
をsrc
ディレクトリに設定しているため、テストする元ファイルとテストのファイルは全てsrc
ディレクトリ配下に格納します。
また、testMatch
で指定しているようにテストのファイルは__tests__
ディレクトリ配下に格納してあげると良いです。
最後にテストが通ることを確認するため、作成したファイルに以下のコードをそれぞれ記述します。src/foo.tsexport const sum = (...a: number[]) => a.reduce((acc, val) => acc + val, 0);src/__tests__/foo.test.tsimport { sum } from '../foo'; test('basic', () => { expect(sum()).toBe(0); }); test('basic again', () => { expect(sum(1, 2)).toBe(3); });テストを実行してみます。
node-typescript-test$ npm testすると以下のように結果が表れ、無事テストが成功しました。
ドキュメントは正義
今回の実装をするにあたり、一次情報だけを参考にしました。原典至上主義に一歩近づけた気がします。
参考
- 投稿日:2021-01-06T19:09:56+09:00
Markdown正規表現全文検索ツール「Note-CLI」をリリースしました。
Markdown正規表現全文検索ツール「Note-CLI」をリリースしました。
以下かんたんな日本語版クイックスタートになります。
Markdown Indexing and Pcre Regular Expression Compatible Full Text Searching for Advanced Note Takers.
ノートテイキング上級者のためのMarkdownインデックスとPCRE正規表現対応の全文検索システム。
クイックスタート
# データベースへMarkdownファイルをインデックス indexing file ./note-cli.js --index --database notes.db.example --file notes.md.example # データベースで正規表現でキーワード検索 searching for keywords by regular expression ./note-cli.js --search --database notes.db.example --header "python" --content "hello.?world" --hide-sql # 出力結果 and you will get: [ { "id": 2, "header": "how to hello world in python", "content": "```py \n# how to hello world in python\n\nprint(\"hello world\")\n```\n\n", "entire_note": "# how to hello world in python\n\n```py \n# how to hello world in python\n\nprint(\"hello world\")\n```\n\n" } ]コンセプト Basic concept
There are great note taking tools over there, such as Evernote. But the reason I quit using Evernote was its poor searching capability (i.e. cannot search some special characters; cannot search with regular expression, of course) and also, lack of extensibility. That's where Note-CLI comes in.
I'm kind of person who likes to take a note on my favorite text editor (Atom editor, for my case). For note taking, I have a single Markdown format text file. In it, I do take notes about everything. Note-CLI does work for indexing chunks of Markdown content to a database file and enables you to search your Markdown notes with SQL query (and also regex).
巷には既に便利なノートテイキングツールが数多くあります。例えば僕はEvernoteの愛用者でしたが、Evernoteでは検索において特定の特殊文字を使えない、正規表現が使えない、など、欠点があります。オープンソースではないので、拡張性の低さもその一つです。そこにNote-CLIの活用場面があります。
僕は大抵のノートテイキングは、お気に入りのAtomエディタから、一つのMarkdown形式のファイル上で行います。そこにほぼ全ての知識があるわけです。Note-CLIはこのようなMarkdown形式で記述されたノートをパーシングしデータベースへインデックス、SQLおよび正規表現でのノートの検索を可能にします。
インストール Installation
git clone https://github.com/yuis-ice/note-cli.git cd note-cli chmod 755 ./note-cli.js # if needed npm i必要環境 Requirement
- node.js v13.10.1 (probably higher or other versions work)
- sqlite3-pcre
# node.js [nvm-sh/nvm](https://github.com/nvm-sh/nvm) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash bash nvm install v13.10.1 node -v # sqlite3-pcre sudo apt update sudo apt install sqlite3 sqlite3-pcre例 Examples
./note-cli.js --search --database notes.db.example --header "python" --content "hello.?world" --limit 1 --hide-sql --format md | bat -l md --paging=never # using [sharkdp/bat](https://github.com/sharkdp/bat) *image ./note-cli.js --search --database notes.db.example --header "python" --content "hello.?world" --limit 1 --hide-sql --format json | jq ".[].header" -r # using [jq](https://github.com/stedolan/jq/) ./note-cli.js --search --database notes.db.example --header "python" --content "hello.?world" --limit 1 --hide-sql --format html | jq ".[].entire_note" -r ./note-cli.js --search --database notes.db.example --header "python" --content "hello.?world" --limit 1 --raw-sql "$( cat raw-sql.sql.example )"コマンドラインオプション Command line options
$ ./note-cli.js --help Usage: note-cli [options] Options: -i, --index set command type: index -f, --file <file> (index) specify file to index (default: null) -s, --search set command type: search -r, --regex (search) enable regex extension for search (default: true) --header <keyword> (search) search by header (default: ".") --content <keyword> (search) search by content (default: ".") --note <keyword> (search) search by note (default: ".") --limit <number> (search) set limit for search (default: -1) -S, --raw-sql <sql> (search) use raw SQL query for search (default: null) -H, --hide-sql (search) disable showing sql query executed -F, --format <format> (search) output format (default: "json") --pcre-path <file> set sqlite3 pcre file path for search (default: "/usr/lib/sqlite3/pcre.so") -d, --database <file> specify database file for index/search (default: "./note-cli.db") --delete-database delete database -y, --yes no confirmation prompt -h, --help display help for command
- 投稿日:2021-01-06T16:54:19+09:00
Node.jsを勉強する⑤ - JSONファイルの書き込みと読み込み
はじめに
前回は、 npmモジュールの使い方についてまとめました。
今回は、JSONファイルの作成と読み込みを記事にします。教材
Udemy
The Complete Node.js Developer Course (3rd Edition)
https://www.udemy.com/course/the-complete-nodejs-developer-course-2/データをJSONファイルに書き込む
まずは、app.jsファイルを作成して、Javascriptのオブジェクトを作成します。変数personを定義し、代入しておきましょう。
app.jsconst person = { name: "Taro", age: 25 }次に、このデータをJSONファイルに変換してみます。
変換には、JSON.stringify()というメソッドを使います。データは変数のpersonJSONに代入しておきます。app.jsconst person = { name: "Taro", age: 25 } const personJSON = JSON.stringify(person)データがJSON化されたので、これをファイルに書き出します。ファイルの操作を行うには、fsモジュールを使います。requireを用いて、fsモジュールを使えるようにします。
また。ファイルを作成するには、writeFileSync(ファイル名, データ)を使います。今回は、info.jsonという名前のファイルを作成します。
app.jsconst fs = require('fs') const person = { name: "Taro", age: 25 } const personJSON = JSON.stringify(person) fs.writeFileSync('info.json', personJSON)以下のようなJSONファイルが作成されたら、完成です。
info.json{"name":"Taro", age:25}JSONファイルを読み込む
今度は作成したJSONファイルを読み込んで、consoleに出力してみます。
新しくread.jsを作って試してみます。readFileSync(ファイル名)を用いて、データを取り出しますread.jsconst fs = require('fs') //データを取りだす const bufferData = fs.readFileSync('info.json')ただし、この状態ではデータはバイト列なので、文字に変換する必要があります。
read.jsconst fs = require('fs') //データを取りだす const bufferData = fs.readFileSync('info.json') // データを文字列に変換 const dataJSON = bufferData.toString()最後に、データをJavascriptのオブジェクトに変換する処理をしてから、consoleに出力します。
read.jsconst fs = require('fs') //データを取りだす const bufferData = fs.readFileSync('info.json') // データを文字列に変換 const dataJSON = bufferData.toString() //JSONのデータをJavascriptのオブジェクトに const data = JSON.parse(dataJSON) console.log(data)コードを実行し、ターミナルに、以下のように出力されれば、完成です。
ターミナルnode read.js { name: 'Taro', age: 25 }
また、データをJavascriptのオブジェクトに変換しているので、以下のように要素を取り出すこともできます。
read.jsconst fs = require('fs') //データを取りだす const bufferData = fs.readFileSync('info.json') // データを文字列に変換 const dataJSON = bufferData.toString() //JSONのデータをJavascriptのオブジェクトに const data = JSON.parse(dataJSON) const name = data.name const age = data.age console.log(data.name + ' is '+ data.age + ' years old.')ターミナルnode read.js Taro is 25 years old.
- 投稿日:2021-01-06T15:31:04+09:00
園バス待ち中、忘れ物今取りに帰っても大丈夫?が目に見える仕組み!
幼稚園に子供を通わせて9年目、3児のママです。
幼稚園バスのあるあるだと思うのですが・忘れ物!まだ取りに帰っても間にあう?
・出かけにモタモタ。バス行っちゃった?
・急にトイレ!家に一度帰っても大丈夫かな?などなど、幼稚園バスの居場所がすぐにわかれば良いのにな~と思ったことが何度もあります。
知りたい時に幼稚園バスの居場所がわかると
・雨の日、寒い日、終わりが見えずに待ち続けるという事がなくなり
・忘れ物など、一度家に取りに帰る事が出来たら、園まで後から送っていかなくても済んだりメリットは沢山あると思います。
そこで、幼稚園バスの居場所をアプリのインストール不要!LINEからバスの位置情報を受け取れるサービスの開発をしていきたいと思います。
全体のイメージ
必要な技術など
・バスの位置を取得するGPSデバイス(今回はiphone)
・LINEで位置情報を取得する為のLINE Messaging API技術
・開発言語にはnode.jsを利用位置情報を取得する
MDN WEB Docsを参考に位置情報の取得を行いました。
index.htmlとmap.jsファイル2つのファイルを作りました。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>位置情報取得</title> <script src="map.js" defer=""></script> </head> <body> <button id="find-me">Show my location</button><br/> <p id="status"></p> <a id="map-link" target="_blank"></a> </body> </html>function geoFindMe() { const status = document.querySelector('#status'); const mapLink = document.querySelector('#map-link'); mapLink.href = ''; mapLink.textContent = ''; function success(position) { const latitude = position.coords.latitude; const longitude = position.coords.longitude; status.textContent = ''; mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`; mapLink.textContent = `Latitude: ${latitude} °, Longitude: ${longitude} °`; } function error() { status.textContent = 'Unable to retrieve your location'; } if (!navigator.geolocation) { status.textContent = 'Geolocation is not supported by your browser'; } else { status.textContent = 'Locating…'; navigator.geolocation.getCurrentPosition(success, error); } } document.querySelector('#find-me').addEventListener('click', geoFindMe);webブラウザで実装し、【Show my location】をクリックすると位置情報が取得でき
取得した位置情報のリンクをクリックすると地図が表示されました。位置あってる。
次に、取得したデータをデータベースへ保存
Firebaseを利用して、データを保存します
Firebase CloudFirestoreの使い方を初心者が解説してみた
今回は、このような形でデータベースを作成しました。
作成したデータベースにsetします。
setはデータベースのドキュメントの中身を上書きします。
参考にしたサイト
Firebase Cloud Firestoreのデータ更新 setとupdateの違いawait db.collection('map').doc('K9HEdPL7SQukhLGpIgLX').set({ Latitude: position.coords.latitude, Longitude: position.coords.longitude });特定のドキュメントに位置情報を更新する仕組みは構築できました。
次に、Firebaseの情報をLINEで取得
LINEの位置情報APIを利用して位置情報を送ります。
LINE 位置情報メッセージ
リッチメニューを作成して、リッチメニューを押したら位置情報を送るという仕組みにしました。return client.replyMessage(event.replyToken, { type: 'location', title: '位置情報', address: 'Aバス', latitude: text.Latitude, longitude: text.Longitude });LINEの位置情報メッセージを利用すると、地図が出るのでとても分かりやすいですね。
最後に
デプロイ
位置情報取得ボタンのhtmlファイルは契約しているサーバーへアップロード
左端に位置情報のボタンがあるシンプルなものです。LINE Messaging APIと連携をとっているnode.jsファイルはHerokuでデプロイしました。
実際に使ってみる
バスに乗って試す事は難しいので、今回は子供と使ってみました。
本来は15秒おきくらいに自動で位置情報を発信していきたいのですが、今回は手動でボタンを押したタイミングでの位置情報で実験をしていきます。イマドコサーチで親から子供の居場所をいつもは調べるのですが、今回は特別に逆パターン。
意外と子供から聞かれる
「ママいつ帰ってくるの?」これをLINEで解決してもらいます!
①まずはママがスマホを持ってスーパーへ出かける
②子供は好きなタイミングで【今どこ?】を押す
③帰宅後、LINEを見せてもらう結果
「ママずっと同じ場所にいた!」
子どものLINEを確認すると、全て同じ地図の場所にピンがありました。
念のため、薬局で位置情報を確認したのですが、薬局に位置が変わっている~!と私は感動しました。考察
実験をしてみて、子どものLINEでは居場所が変わらなかった
この件に関して、
Firebaseを確認したところ、最後にwebアプリ側から位置情報取得ボタンを押した緯度にちゃんとなっていました。
LINEを立ち上げっぱなしにしていた事により、最新のデータが取得できなかったのではないかな?と思います。ボタンを押したタイミングではなく、リアルタイムで最新情報を取得する
今度の課題たと思いました。