はじめに
SoftwareDesign 2025年7月号「万能IT技術研究所」の記事を読んで、高度化PICSの仕組みの調査を継続しています。
高度化PICSに対応した交差点マップ
高度化PICSに対応した交差点の情報は公開されており、Googleマップにピンを立てて表示しました。
信GO!アプリ
スマホアプリ「信GO!」を使用して歩行者用の信号状態を表示します。青信号延長や押しボタン信号(横断要求)も可能です。
Androidアプリ
iPhoneアプリ
米子駅前交差点
高度化PICSに対応した交差点はあまり存在しないため、JANOG56に出張した帰りの経路で初めて信GO!アプリの動作を確認しました。
交差点IDの収集
BLEアドバタイズデータに交差点IDの情報が含まれていることを知り、帰宅後に最寄りの交差点IDを集めました。
BLEアドバタイズデータの記録
記事のサンプルコードを参考にしてBLEアドバタイズデータを記録しました。
確かに、交差点毎にIDの値は異なっていました。
BLEアドバタイズデータの再生
収集したBLEアドバタイズデータを使用してESP32(M5Stack AtomS3)で再現してみましたが、信GO!アプリは動作しませんでした。
BLEアドバタイズデータ(メッセージタイプ1)の中に位置情報(緯度、経度)が含まれていたので、現在地に偽装してみましたが、信GO!アプリの動作は変わりませんでした。
信GO!アプリの解析
信GO!アプリの抽出
Androidアプリの信GO!アプリを解析します。
MacOSのBlueStacks Airを使用してAndroidアプリをインストールします。
BlueStacks Airの設定を変更して、adbコマンドで接続できるようにします。
MacOSにadbコマンドをインストールします。
brew install --cask android-platform-tools
adbコマンドを使用してBlueStacks Airから信GO!アプリを抽出します。
adb connect 127.0.0.1:5555
(アプリがインストールされるディレクトリは変わる可能性があります)
adb shell pm list packages -f | grep pics
package:/data/app/~~M0KbIrLiQlPJmln4fcBeEw==/jp.co.signal.pics-9sOpmEU9POkv3-2b69AA7w==/base.apk=jp.co.signal.pics
adb pull /data/app/~~M0KbIrLiQlPJmln4fcBeEw==/jp.co.signal.pics-9sOpmEU9POkv3-2b69AA7w==/base.apk
base.apkが信GO!アプリ本体です。
アプリの解析
apkファイルの解析方法はいくつかあります(最初にAndroid Studioを試しました)が、結果的にjadxを使用して解析できました。
jadxをインストールして、jadx-guiを起動します。
brew install jadx
jadx-gui
base.apkを読み込むと自動でデコンパイルされます。
「Source code」のjp.co.signal.picsの配下を探っていきます。
交差点情報を取得するURL(getRemoteServerBasePath())を確認できます。
アプリの動作確認
アプリの動作はiOSを使用しました。
iOSからmitmproxy経由で通信内容を確認します。
MacOSにmitmproxyをインストールして起動します。
pip install mitmproxy
mitmproxy
iPhoneの設定はこちらを参考にしました。
iPhoneで信GO!アプリを起動すると、サーバと通信するログが表示されます。
(ログ下部のwww.j-signal.jpとのPOST通信:2回)
1回目のPOST通信はUserIDの登録で、DeviceIDを入力してUserIDを取得しています。
2回目のPOST通信が交差点情報の取得で、UserIDを入力して交差点情報を取得しています。
POST https://www.j-signal.jp/PicsApi/api/GetIntersectionDefinitions HTTP/2.0
accept: */*
content-type: application/json; charaset=utf-8
accept-encoding: gzip, deflate, br
user-agent: PICS/20310 CFNetwork/3826.500.111.2.2 Darwin/24.4.0
content-length: 62
accept-language: ja
{
"UserId" : "8000A8A4",
"LastUpdate" : "00010101091859"
}
HTTP/2.0 200
cache-control: no-cache
pragma: no-cache
content-type: application/json; charset=utf-8
expires: -1
server: Microsoft-IIS/10.0
x-aspnet-version: 4.0.30319
x-powered-by: ASP.NET
date: Thu, 14 Aug 2025 03:10:36 GMT
content-length: 349750
{"Intersections":[{"IntersectionId":"FF0000F9","Latitude":35.675837,"Longitude":139.751291,"Radius":20.0,"GenerationNumber":0,"Name":"デモ交差点","Kana":"でもこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000F9.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"FF0000FA","Latitude":36.000000,"Longitude":139.000000,"Radius":1.0,"GenerationNumber":0,"Name":"恒温槽交差点","Kana":"こうおんそうこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000FA.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"FF0000FB","Latitude":36.055503,"Longitude":139.651688,"Radius":1.0,"GenerationNumber":0,"Name":"立会エリア交差点","Kana":"たちあいえりあこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000FB.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"FF0000FD","Latitude":36.054640,"Longitude":139.652658,"Radius":10.0,"GenerationNumber":0,"Name":"S棟展示室交差点","Kana":"えすとうてんじしつこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000FD.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"00B94D8D","Latitude":35.666354,"Longitude":140.164458,"Radius":28.0,"GenerationNumber":1,"Name":"四街道消防署前交差点","Kana":"よつかいどうしょうぼうしょまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/12/00B94D8D.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"四街道
駅・県立盲学校方向","Kana":"よつかいどうえきけんりつもうがっこうほうこう"},{"Name":"中央公園・四街道小学校方向","Kana":"ちゅうおうこうえんよつかいどうしょうがっこうほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB181","Latitude":34.972395,"Longitude":138.387644,"Radius":17.0,"GenerationNumber":1,"Name":"静岡駅前交差点","Kana":"しずおかえきまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB181.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"静岡駅前・中央郵便局間南北方向","Kana":"しずおかえきまえ・ちゅうおうゆうびんきょくかんなんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB182","Latitude":34.971808,"Longitude":138.386611,"Radius":30.0,"GenerationNumber":1,"Name":"静岡中央郵便局前交差点","Kana":"しずおかちゅうおうゆうびんきょくまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB182.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"静岡駅前・中央郵便局間南北方向","Kana":"しずおかえきまえ・ちゅうおうゆうびんきょくかんな
んぼくほうこう"},{"Name":"紺屋町・黒金町間東西方向","Kana":"こうやまち・くろがねちょうかんとうざいほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB183","Latitude":34.974836,"Longitude":138.385639,"Radius":27.0,"GenerationNumber":1,"Name":"江川町交差点","Kana":"えがわちょうこう
さてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB183.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB184","Latitude":34.976041,"Longitude":138.382513,"Radius":33.0,"GenerationNumber":1,"Name":"県庁前交差点","Kana":"けんちょうまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB184.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB186","Latitude":34.979620,"Longitude":138.387656,"Radius":34.0,"GenerationNumber":1,"Name":"水落交番西交差点","Kana":"みずおちこうばんにしこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB186.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB188","Latitude":34.976871,"Longitude":138.380450,"Radius":24.0,"GenerationNumber":1,"Name":"日
赤前交差点","Kana":"にっせきまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB188.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB18A","Latitude":34.977476,"Longitude":138.386963,"Radius":24.0,"GenerationNumber":1,"Name":"鷹匠2丁目交差点","Kana":"たかじょうにちょうめこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB18A.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB18B","Latitude":35.120153,"Longitude":138.919258,"Radius":25.0,"GenerationNumber":1,"Name":"大社前交差点","Kana":"たいしゃまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB18B.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"東西方向","Kana":"とうざいほうこう"},
(省略)
交差点情報に位置情報も含まれており、BLEアドバタイズデータの位置情報を偽装しても信GO!アプリの動作が変わらない理由がわかりました。
さいごに
交差点情報の取得方法が分かり、交差点IDの情報もすべて取得できたので、交差点ID集めの旅はこれで終了です。
交差点の画像データ(のURL)や「安全運転中央研修所デモ用交差点」などのデモ用の情報も含まれていました。

{"IntersectionId":"FF0000F8","Latitude":36.387334,"Longitude":140.592120,"Radius":15.0,"GenerationNumber":1,"Name":"安全運転中央研修所デモ用交差点","Kana":"あんぜんうんてんちゅうおうけんしゅうじょでもようこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000F8.html","StartDate":"20250313","EndDate":"20250331","DemoFlg":0,"PedestrianSignals":[{"Name":"トラフ体験方向","Kana":"とらふたいけんほうこう"},{"Name":"アイナビ体験方向","Kana":"あいなびたいけんほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]}
IoT技術(BLE)が社会実装されている良い事例勉強となりました。









