Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
kintoneで楽々交通費精算!駅すぱあとWebサービス連携ハンズオン
Search
kintone papers
August 02, 2018
Programming
3.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
kintoneで楽々交通費精算!駅すぱあとWebサービス連携ハンズオン
kintone papers
August 02, 2018
More Decks by kintone papers
See All by kintone papers
kintone-Introduction-20200917
kintonepapers
0
230
kintoneCafeFukuoka-20200124
kintonepapers
0
43
kintonecafe-kochi-vol11
kintonepapers
0
260
kintonecafeHimi-vol1
kintonepapers
2
76
CoderDojo Meetup Cybozu キッズ向け活動 LT
kintonepapers
0
150
Majikachi-meetup-tokyo06-kintone
kintonepapers
0
950
kintone-cafe-mie-vol2
kintonepapers
0
99
kintone-cafe-kagoshima-vol9
kintonepapers
0
96
kintonecafe-Hamamatsu-v16
kintonepapers
0
270
Other Decks in Programming
See All in Programming
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
550
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
650
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
440
act1-costs.pdf
sumedhbala
0
250
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
5.4k
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
8
3.4k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
430
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
120
Android CLI
fornewid
0
170
継続モナドとリアクティブプログラミング
yukikurage
3
640
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
530
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
150
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
230
Deep Space Network (abreviated)
tonyrice
0
230
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
180
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
57k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
660
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
660
Paper Plane (Part 1)
katiecoart
PRO
1
9.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Transcript
で楽々交通費精算! 駅すぱあとWebサービス 連携ハンズオン 2018.08.02 kintone devCamp 2018 株式会社ヴァル研究所 丸山ひかる
自己紹介 丸山ひかる 株式会社ヴァル研究所 テクニカルエバンジェリス ト 主な著書: 『はじめての駅すぱあとWebサービス』 hikaru.maruyama.54 @maruyamahiakru http://hiiiiiiihikaru.hatenadiary.com
None
本日のアジェンダ • kintoneで交通費精算アプリを作ろう - 概要 • 駅すぱあとWebサービスとは? • ハンズオン 1.
アプリテンプレートを読み込もう 2. 定期券を利用した運賃計算をしよう 3. 探索条件設定ボタンを追加しよう 4. 経路を再現する機能を追加しよう
kintoneで 交通費精算アプリを作ろう https://bit.ly/2mX5VaX
駅すぱあとWebサービス 駅データ、経路検索のWebAPI 駅すぱあとが持つ機能を WebAPIとして提供 • • • • 技術的なポイント RESTfu(風)
レスポンスはXML or JSON リファレンスはWebで公開 サンプルはGithubで公開 • • 利用シーン 乗換案内サービス 旅費交通費精算システム • • 選べる2つのプラン 無料で使えるフリープラン 全ての機能が使えるスタンダードプラン
駅データ、経路検索のWebAPI 駅すぱあとWebサービス 駅すぱあとが持つ機能を WebAPIとして提供 技術的なポイント 利用シーン • RESTfu(風) • レスポンスはXML
or JSON • 乗換案内サービス • 通勤費管理システム • リファレンスはWebで公開 • 旅費交通費精算システム • サンプルはGithubで公開 今回のハンズオンでは スタンダードプランの機能を利用します 駅すぱあとWebサービスのスタンダードプラン は 90日間無料でお試しできま す お申し込みはこちら↓ https://ekiworld.net/trial/index.php?case=6
本日のハンズオン内容 1. 自分の環境でアプリが動く状態にしよう 2. 定期券を利用した運賃計算をしよう 3. 探索条件設定ボタンを追加しよう 4. 経路を再現する機能を追加しよう 余裕のある人は4までやってみよう!
本日のハンズオン内容 1. 自分の環境でアプリが動く状態にしよう 2. 定期券を利用した運賃計算をしよう 3. 探索条件設定ボタンを追加しよう 4. 経路を再現する機能を追加しよう 余裕のある人は4までやってみよう!
1. 自分の環境でアプリが動く状態にしよう https://bit.ly/2v7wA9J ZIPファイルのダウンロード
1. 自分の環境でアプリが動く状態にしよう ZIPファイルのダウンロード handson/ ├── 1 │ ├── ekispert.js │
└── 交通費申請アプリ.zip ├── 3 │ ├── ekispert.js │ └── expGuiCondition │ │ │ ├── expCss │ └── expGuiCondition.css ├── expGuiCondition.js │ └── expImages └── 4 ├── ekispert.js ├── ekispertDetail.js └── 交通費申請詳細アプリ.zip ZIPファイルの中身の ディレクトリ構成です
1. 自分の環境でアプリが動く状態にしよう ZIPファイルの構成 handson/ ├── 1 │ ├── ekispert.js │
└── 交通費申請アプリ.zip ├── 3 │ ├── ekispert.js │ └── expGuiCondition │ │ │ ├── expCss │ └── expGuiCondition.css ├── expGuiCondition.js │ └── expImages └── 4 ├── ekispert.js ├── ekispertDetail.js └── 交通費申請詳細アプリ.zip 次の工程で 「交通費申請アプリ.zip」 を利用します
アプリテンプレートの読み込み 1. 自分の環境でアプリが動く状態にしよう
アプリテンプレートの読み込み 1. 自分の環境でアプリが動く状態にしよう 「交通費申請アプリ.zip」 を読み込みます
アプリテンプレートの読み込み 1. 自分の環境でアプリが動く状態にしよう
1. 自分の環境でアプリが動く状態にしよ う 挙動の確認 色々動かしてみて この動画と同じような挙動をしている か 確認してみてください https://bit.ly/2n0IOwo
1. 自分の環境でアプリが動く状態にしよう 補足 ブラウザの開発者ツール (WinならF12, macOSならOption + Command + i)
を 立ち上げた状態でアプリを動かすと・・・ なにやら画像が読み込まれていないというエラーが
1. 自分の環境でアプリが動く状態にしよう 補足 原因: 「HTML5インターフェースサンプル」では、 CSSから利用する画像を相対パスで読み込んでいる。 kintoneでは画像ファイルのアップロードができないため読み込みエラーとなる 対策: 画像ファイルを含むファイル群をホスティングして URL指定でkintoneからアクセスする
ハンズオン中は特に対策せず、このまま進めちゃいますね ! 実際にアプリを利用される際はご検討ください
本日のハンズオン内容 1. 自分の環境でアプリが動く状態にしよう 2. 定期券を利用した運賃計算をしよう 3. 探索条件設定ボタンを追加しよう 4. 経路を再現する機能を追加しよう 余裕のある人は4までやってみよう!
2. 定期券を利用した運賃計算をしよう 定期経路を割り当てる 通勤定期券が割り当てられた状態の金額を 出して欲しいですよね
2. 定期券を利用した運賃計算をしよう APIの仕様 経 路 探 索 API の リ
ク エ ス ト 例 : https://api.ekispert.jp/v1/json/search/course/ extreme? key=ajawaANhL9RWERyT&viaList=22905:22884& date=20180720&searchType=plain
2. 定期券を利用した運賃計算をしよう APIの仕様 https://api.ekispert.jp/v1/json/search/course/ extreme?key=ajawaANhL9RWERyT&viaList=22905:228 84&date=20180720&searchType=plain ブラウザから ア クセスしてみよう
2. 定期券を利用した運賃計算をしよう APIの仕様 ブラウザから ア クセスしてみよう https://api.ekispert.jp/v1/json/search/course/extreme? key=xxx&viaList=22905:22884&date=20180720&searc hType=plain JSONデータのレスポンスが見づらい?
kintoneアプリ内で実際に叩いているのはさっきのURLですが XMLデータの方が見やすいかもなので ここからはXMLデータで説明しますね ※データフォーマットが異なるだけで中身は同じです https://api.ekispert.jp/v1/xml/search/course/extreme? key=ajawaANhL9RWERyT&viaList=22905:22884&date=2 0180720&searchType=plain
2. 定期券を利用した運賃計算をしよう APIの仕様 データフォーマット: XML or JSONが指定できます APIの機能: 交通費精算アプリの裏側では 駅簡易情報API(/station/light)
経路探索API(/search/course/extreme) などが利用されています https://api.ekispert.jp/v1/xml/search/course/extreme? key=ajawaANhL9RWERyT&viaList=22905:22884&date=20180 720&searchType=plain クエリパラメータ: key 駅すぱあとWebサービスのアクセスキー viaList 出発地、経由地、到着地 date 探索日(YYYYMMDD) searchType 探索種別
2. 定期券を利用した運賃計算をしよう APIの仕様 https://api.ekispert.jp/v1/xml/search/course/extreme? key=ajawaANhL9RWERyT&viaList=22905:22884&date=20180 720&searchType=plain 出発地、経由地、到着地をそれぞれカンマ「:」で区切ります。 「22905」は八王子駅の駅コード、「22884」は日本橋(東京都)駅の駅コードを 表しています。viaListには、駅コード以外にも、駅の名称、緯度経度、住所などを 指定することができます。
駅すぱあとWebサービスでは、ダイヤデータを使う探索(ダイヤによる探索)と、 平 日日中の平均的な所要時間を利用した探索(平均待ち時間による探索)の 二つ の探索方法があり、それをさらに細分化したものが探索種別となります。
2. 定期券を利用した運賃計算をしよう APIの仕様 https://api.ekispert.jp/v1/xml/search/course/extreme? key=ajawaANhL9RWERyT&viaList=22905:22884&date=20180720 &searchType=plain&assignTeikiSerializeData=VkV4QaECpzzHAQED pgEz7vsEk8EBpVjDwQGlWNXBAaVYjwWSwwEBA6UBNQSlWNXEA QECAQOkbQSlWI8HksUBpVjDAqVY1QMABAAFAMUBpVjVAqVYjw MBBAEFAAgBCgE*— f3a068ec4c8bda86d18d7209feb5f7637dc3bd8b--0--95
assignTeikiSerializeDataパラメータに 定期経路シリアライズデータを指定すれば 定期券を利用した運賃計算が行われます。
2. 定期券を利用した運賃計算をしよう 定期経路シリアライズデータの取得方法 定期経路シリアライズデータは、経路探索APIのレスポンスに付与されるの で 経路探索APIで通勤定期券の経路を検索します 例えば、下北沢ー新宿ー高円寺の通勤定期券を持っているとしたら、 以下のリクエストになります https://api.ekispert.jp/v1/xml/search/course/extreme? key=ajawaANhL9RWERyT&viaList=22723:22741:22671&searchT
ype=plain 駅情報API(/station)や駅簡易情報API(/station/light)で 駅 コードが取得できます
2. 定期券を利用した運賃計算をしよう ResultSet.Course.Teiki.SerializeData の値 が、定期経路シリアライズデータです 定期経路シリアライズデータの取得方法
2. 定期券を利用した運賃計算をしよ う ResultSet.Course.Teiki.SerializeData の値 が、定期経路シリアライズデータです 定期経路シリアライズデータの取得方法 「下北沢--小田急小田原線--新宿--JR中央線快速--高円寺」 の、定期経路シリアライズデータです VkV4QaECp4fHAQEDpgEz70EEk8EBpVjDwQGlWN
XBAaVYjwWSwwEBA6UBNQSlWNXEAQECAQOkbQ SlWI8HksUBpVjDAqVY1QMABAAFAMUBpVjVAqVY jwMBBAEFAAgBCgE*--55724d1aa013e2293e0cd5 1584e4ef2c62ce3724--0--95
2. 定期券を利用した運賃計算をしよう 定期経路を割り当てる 交通費申請アプリは 「通勤経路」項目の値をassignTeikiSerializeDataパラメータの値として 渡 すように実装しています。 先ほど取得した定期経路シリアライズデータを入力したのち、 今まで通りサブテーブルに明細を追加してみましょう
2. 定期券を利用した運賃計算をしよう 定期経路を割り当てる
2. 定期券を利用した運賃計算をしよう 定期経路が割り当てられた 金額が反映されました! 定期経路を割り当てる
2. 定期券を利用した運賃計算をしよう 補足 ハンズオンでは簡易的に、レコードに直接定期経路シリアライズデータを 入力していますが、 例えば従業員の名簿を管理しているアプリと連携すれば もっと便利になる予感が
2. 定期券を利用した運賃計算をしよう 補足 実際に定期経路シリアライズデータを利用した 定期経路割り当てを行う場合は、 定期経路の表示用文字列をセットで保存してください! 定期経路シリアライズデータが経路を 再 現できなくなった場合に必要になります。 詳しくはこちらをご確認ください
http://docs.ekispert.com/v1/dictionary/teiki-serialize-data/
本日のハンズオン内容 1. 自分の環境でアプリが動く状態にしよう 2. 定期券を利用した運賃計算をしよう 3. 探索条件設定ボタンを追加しよう 4. 経路を再現する機能を追加しよう 余裕のある人は4までやってみよう!
3. 探索条件設定ボタンを追加しよう 探索条件設定ボタン 例えばこんな感じで 有料特急の利用可否とか 乗り換え時間の設定とか 色々と経路探索を行う条件を 設定したいですよね
handson/ ├── 1 │ ├── ekispert.js │ └── 交通費申請アプリ.zip ├──
3 │ ├── ekispert.js │ └── expGuiCondition │ │ │ ├── expCss │ └── expGuiCondition.css ├── expGuiCondition.js │ └── expImages └── 4 ├── ekispert.js ├── ekispertDetail.js └── 交通費申請詳細アプリ.zip 次の工程で 「ekispert.js」と 「expGuiCondition」ディレクトリを 利用します 3. 探索条件設定ボタンを追加しよう ZIPファイルの構成
3. 探索条件設定ボタンを追加しよう ファイルの読み込み expGuiCondition.js を 選択 expGuiCondition.css を 選択
3. 探索条件設定ボタンを追加しよう 1. 元々置いてある ekispert.jsファイルを「×」ボタンで削除 2. /path/to/handson/3/ekispert.js フ ァイルを指定 ファイルの読み込み
3. 探索条件設定ボタンを追加しよう ファイルの読み込まれる順番に注意! 「ekispert.js」が最後に読み込まれるように ファイルの読み込み
3. 探索条件設定ボタンを追加しよ う このような状態になっていること を 確認したら、保存ボタンを クリックしてください ファイルの読み込み
3. 探索条件設定ボタンを追加しよう アプリの更新 最後にアプリを更新して 設定は完了です
3. 探索条件設定ボタンを追加しよう 挙動の確認 探索条件設定ボタンが 表示されました!
補足 handson/ ├── 1 │ ├── ekispert.js │ └── 交通費申請アプリ.zip
├── 3 │ ├── ekispert.js │ └── expGuiCondition │ │ │ ├── expCss │ └── expGuiCondition.css ├── expGuiCondition.js │ └── expImages └── 4 ├── ekispert.js ├── ekispertDetail.js └── 交通費申請詳細アプリ.zip このファイル群は一体何? 3. 探索条件設定ボタンを追加しよう
3. 探索条件設定ボタンを追加しよう 補足 「HTML5インターフェースサンプル」と呼ばれ る HTMLとJavaScript、CSSで 実装された画面をサンプルとして提供しているものです。 こ ちらのコードを使うことで短時間で簡潔に実装できます。 https://github.com/EkispertWebService/GUI
本日のハンズオン内容 1. 自分の環境でアプリが動く状態にしよう 2. 定期券を利用した運賃計算をしよう 3. 探索条件設定ボタンを追加しよう 4. 経路を再現する機能を追加しよう 余裕のある人は4までやってみよう!
4. 経路を再現する機能を追加しよう 経路の再現 承認者として ・定期券が適用されているか ・有料特急が適切に使用されている か など、確認したいですよね
handson/ ├── 1 │ ├── ekispert.js │ └── 交通費申請アプリ.zip ├──
3 │ ├── ekispert.js │ └── expGuiCondition │ │ │ ├── expCss │ └── expGuiCondition.css ├── expGuiCondition.js │ └── expImages └── 4 ├── ekispertDetail.js ├── ekispert.js └── 交通費申請詳細アプリ.zip 次の工程で 「ekispert.js」と 「交通費申請詳細アプリ.zip」 を利用します 4. 経路を再現する機能を追加しよう ZIPファイルの構成
アプリテンプレートの読み込み 1. 自分の環境でアプリが動く状態にしよう
アプリテンプレートの読み込み 1. 自分の環境でアプリが動く状態にしよう 「交通費申請詳細アプリ.zip」 を読み込みます
アプリテンプレートの読み込み 1. 自分の環境でアプリが動く状態にしよう
4. 経路を再現する機能を追加しよう このアプリのIDを あとで使います アプリテンプレートの読み込み
4. 経路を再現する機能を追加しよう 交通費申請アプリのフォーム修正
4. 経路を再現する機能を追加しよう 交通費申請アプリのフォーム修正 フィールドタイプ ルックアップ フィールドコード 経路の詳細 関連付けるアプリ 交通費申請詳細 コピー元のフィールド
レコード番号
4. 経路を再現する機能を追加しよう JavaScriptファイルの編集 1. /path/to/handson/4/ekispert.jsファイルを エ ディタ等で開きます (function($) { "use
strict"; // 駅すぱあとWebサービスのアクセスキ ー var ekispertAccessKey = // 交通費申請詳細アプリID var detailAppId = ''; 'ajawaANhL9RWERyT'; 2. 交通費申請詳細アプリの アプリIDを入力します 3. ファイルを保存
1. 元々置いてある ekispert.jsファイルを「×」ボタンで削除 2. 先ほど保存したekispert.js ファイルを指定 ファイルの読み込み 4. 経路を再現する機能を追加しよう
4. 経路を再現する機能を追加しよう アプリの更新 最後にアプリを更新して 設定は完了です
4. 経路を再現する機能を追加しよう 挙動の確認 各経路の詳細が 見れるようになりました!
4. 経路を再現する機能を追加しよ う 補足 この値は一体何に使われているのか ?
4. 経路を再現する機能を追加しよう 補足 経路を再現させるために、 経路探索API(/search/course/extreme)の レスポンスのJSONデータを保存する必要があります。 経路を再現できる「経路の再現/定期券・指定列車利用API(/course/edit)」では、 あくまでも一時的な再現を想定して作られています。 今回のように、承認者が経路を確認するような場面では JSONデータを丸々保存する方法が確実に経路を再現することができます。
※ダイヤ情報を保持する行為は駅すぱあとWebサービスの規約に違反しますので、 ダイヤによる探索での経路探索結果は保持することはできません。 ご注意ください。
ハンズオン お疲れ様でした
さいごに 本日作った内容は サンプルとしてGithubで公開する予定です。 https://github.com/hmaruyama/seisan-by- ekispert- for-kintone
さいごに ハンズオンで作ったアプリを さら にカスタマイズしたい場合は 駅すぱあとWebサービスのスタンダードプランは 90日間無料でお試しできます! https://ekiworld.net/trial/index.php?case=6 駅すぱあとWebサービス 開発者向けドキュメント http://docs.ekispert.com/v1/
HMTL5インターフェースサンプル ドキュメント https://github.com/EkispertWebService/GUI/wiki