ITお絵かき修行

3歩歩いても忘れないために

Strava V3 APIの認可方式(OAuth2)を試す

www.strava.com

Stravaでは開発者用APISDKが公開されており、自分の記録などをAPI越しに覗くことができる。ただ2018/10/15よりAPIの認可方式が変更となった。
https://developers.strava.com/docs/changelog/

今までは有効期限なしのアクセストークンを用いた認可方式だったが、今後は短命なアクセストークンを使用したOAuth2ベースの認可方式へ変更となる。(2019年10月で完全移行の模様。移行ガイドも提供されている)

Prior to this date, anytime an athlete granted access to an application, that app received an access token with no expiration date (also called “forever tokens”). Starting on October 15, 2018, the OAuth endpoints should be used to obtain short-lived access tokens and refresh tokens instead. While the forever tokens will continue to work through October 15, 2019, all applications should be migrated to the new refresh token pattern as soon as possible.

https://developers.strava.com/docs/oauth-updates/

OAuth2の勉強がてら、REST形式のAPIを使って「自分のアクティビティデータ」を閲覧するところまでやってみた。

■目標
1.自分のアスリートデータ(≒プロフィール情報)を取得
2.自分のアクティビティデータを取得

■前提
1.OAuth2とは
OAuth 2.0 の仕組みと認証方法 | murashun.jp
OAuth 2.0 全フローの図解と動画 - Qiita

2.Strava側のAPI利用設定(必須)
https://www.strava.com/settings/api
f:id:hhhhhskw:20181106124019j:plain

●現在の認証回り設定(参考)
f:id:hhhhhskw:20181106011843j:plain
f:id:hhhhhskw:20181106012350j:plain

■仕様
http://developers.strava.com/docs/authentication/

■使用するもの
・ブラウザ
curl (※Windows10ではデフォルトで使えたのでびっくりした)

■実際にやってみた
1.OAuth2認証開始
下記URLをブラウザより実行する。

https://www.strava.com/oauth/authorize?client_id=[[自分のクライアントID]]&response_type=code&redirect_uri=http://localhost.com/&approval_prompt=auto&scope=activity:read_all

各属性の説明は下記参照。上記例のscope属性では「activity:read_all」としている。
https://developers.strava.com/docs/oauth-updates/

2.Stravaにログインしていない場合はログインしたうえで、事前に設定したアプリケーションに対して認証を求められるので、「許可する」。
f:id:hhhhhskw:20181106011730j:plain

3.許可すると、白紙のページ(http://localhost.com)にリダイレクトされる。レスポンスURLのパラメータより、認可コード(code=aabef407793b0f2e3167c741fd1034a94c0057fd)を取得する。

http://localhost.com?state=&code=aabef407793b0f2e3167c741fd1034a94c0057fd&scope=read,activity:read_all

4.3.の認可コードを使用し、認可サーバにアクセストークンを発行してもらう。

curl -L -X POST https://www.strava.com/oauth/token?client_id=[[自分のクライアントID]]-d client_secret=[[自分のクライアントシート]] -d code=aabef407793b0f2e3167c741fd1034a94c0057fd -d grant_type=authorization_code

各属性の説明は下記参照。grant_type属性は「authorization_code」。
https://developers.strava.com/docs/oauth-updates/

レスポンス例(JSON)は下記。ここでアクセストークンを取得できる。

{"token_type":"Bearer","expires_at":1541367065,"refresh_token":"1c1ae1800520120854ab133249290465f0808e6b","access_token":"73ae3af1e62a1b8e7409f5095a830badfc7f6136","athlete":{"id":[[自分のID]],"username":"[[名前]]","resource_state":2,"firstname":"[[名]]","lastname":"[[]]" (※中略)}}

5.アクセストークン("access_token":"73ae3af1e62a1b8e7409f5095a830badfc7f6136")を使って、まずはアスリートデータを取得する。

curl -L https://www.strava.com/api/v3/athletes/[[自分のアスリートID]]?access_token=73ae3af1e62a1b8e7409f5095a830badfc7f6136

自分のアスリートIDは「Myプロフィール」ページのURL末尾の数値を参照。

実行結果は下記の通り。

{"id":[[自分のアスリートID]],"username":"[[氏名]]","resource_state":2,"firstname":"[[名]]","lastname":"[[]]" (※中略)}

6.次にアクティビティデータを取得する。取得したいアクティビティのIDは各ページのURL末尾の数値を参照。

curl -L https://www.strava.com/api/v3/activities/[[アクティビティID]]-H "Authorization: Bearer 73ae3af1e62a1b8e7409f5095a830badfc7f6136"

OAuth2のアクセストークンの渡し方は上記の通り「HTTPヘッダ」でも可。推奨は「リクエストパラメータ」だった気がする。
実行すると走行実績やGPS情報などが詰まったJSONデータが返却される。中身を確認するとアクティビティ名や走行距離、経過時間etcが記述されている。JSONのサイズは100KB程度だった。

{"resource_state":3,"athlete":{"id":[[自分のアスリートID]],"resource_state":1},"name":"BRM923富士いち200","distance":199395.0,"moving_time":32319,"elapsed_time":37836,"total_elevation_gain":1912.0,"type":"Ride","workout_type":10,"id":1859941481,"external_id":"garmin_push_3036271068","upload_id":1992936743,"start_date":"2018-09-22T22:28:25Z","start_date_local":"2018-09-23T07:28:25Z","timezone":"(GMT+09:00) Asia/Tokyo","utc_offset":32400.0,"start_latlng":[35.05,138.91],"end_latlng":[35.05,138.91],"location_city":null,"location_state":null,"location_country":"","start_latitude":35.05,"start_longitude":138.91,"achievement_count":7,"kudos_count":0,"comment_count":0,"athlete_count":1,"photo_count":0,"map"{"id":"a1859941481","polyline":"ib|tEqbynYVXEJEBc@CyDoAUOSUWw@GgFMeAJwAPo@UwA?Kx@mIt@aE^eCj@oE]g@iCoAe@uAsAuOo@{Gs@eCmCoGcAsBo@q@mDwCkAkB]iAc@cC[gCa@cCe@eCM_@iAmBwFeIeAeBm@wBg@kCe@_GOmAk@KoBP}GxAgIxAqBR[@eA_Bk@sGq@{GQeCHqCMmA_@k@s@AeBVoBt@kBb@mBXqBFuBCaFYwAJqA~@_@z@sC`Iq@bCGd@n@vFKvCSfA@x@X~DLrCDpCAlCInCQrCWpCy@nGmAhGOb@[n@}EvHgAlB (※中略)

***

7.トークンの有効期限が切れた場合は認可サーバに再度アクセストークンの発行を依頼する。この時最初に発行された「リフレッシュトークン」を提示する。grant_typeは「refresh_token」。

curl -L -X POST https://www.strava.com/oauth/token?client_id=[[自分のアスリートID]]-d client_secret=[[自分のクライアントシート]] -d code=aabef407793b0f2e3167c741fd1034a94c0057
fd -d grant_type=refresh_token -d refresh_token=1c1ae1800520120854ab133249290465f0808e6b

返却値からアクセストークンを再度取得する。

{"token_type":"Bearer","access_token":"edf4dd1136f5dc2b655d275da1ccc87f735a7e9e","expires_at":1541513430,"refresh_token":"1c1ae1800520120854ab133249290465f0808e6b"}


・その他使い方は公式ドキュメントを参照。
Strava Developers


■感想
・OAuth2認証プロセス自体は割と直感的で、Stravaから提供されているドキュメントも必要十分だと感じた。
・走行積算距離の計算など、目的別APIみたいな感じでも提供してほしいなーと思った。(まだ調べられてないだけかもですが)
・次はSDKを触ってみる。

■参考
Get a Strava API access token with write permission | Yi Zeng’s Blog
Getting Started With The Strava API: A Tutorial – Tilde Ann Thurium – Medium
↑2つ目の認可方法は以前のものなのでNG

アレクサにお手をしてもらいたかった

AmazonEchoPlusを買ったので。
内容自体は公式のHelloworldレベルなので内容は全く無い。出オチ。

■ソース

'use strict';
const Alexa = require('alexa-sdk');

const APP_ID = '(※環境変数か直書き)';

const HELP_MESSAGE = 'すみません、よく聞き取れませんでした。もう一度お願いします。';
const HELP_REPROMPT = '何か御用ですか?';
const STOP_MESSAGE = 'お疲れさまでした。';

const phrases = [
    'それがあなたたちのやりかたですか。',
    '夜道には気を付けてくださいね。',
    'すみません、よく聞き取れませんでした。もう一度お願いします。ははっ。',
];

const handlers = {
    'LaunchRequest': function () {
        this.emit('OteIntent');
    },
    'OteIntent': function () {
        const sources = phrases;
        const sIndex = Math.floor(Math.random() * sources.length);
        const randomFact = sources[sIndex];
        const speechOutput = randomFact;

/*        this.response.cardRenderer(SKILL_NAME, randomFact); */
        this.response.speak(speechOutput);
        this.emit(':responseReady');
    },
    'AMAZON.HelpIntent': function () {
        const speechOutput = HELP_MESSAGE;
        const reprompt = HELP_REPROMPT;

        this.response.speak(speechOutput).listen(reprompt);
        this.emit(':responseReady');
    },
    'AMAZON.CancelIntent': function () {
        this.response.speak(STOP_MESSAGE);
        this.emit(':responseReady');
    },
    'AMAZON.StopIntent': function () {
        this.response.speak(STOP_MESSAGE);
        this.emit(':responseReady');
    },
};

exports.handler = function (event, context, callback) {
    const alexa = Alexa.handler(event, context, callback);
    alexa.APP_ID = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

■テスト結果
動作確認はコンソール上で実施できる。リクエスト内のJSONをいじってテストすることも可能。
f:id:hhhhhskw:20181008234636j:plain

■EchoPlus/アレクサ使った所感とか(1週間程度)
BlueToothスピーカーとしてはまぁまぁ。筐体が少し大きい(感覚的には900mlペットボトル)ので低音も一応出る。
→接続先デバイスの名前とかを読み上げてくれるのでセットアップ/繋ぎ変えが簡単で良かった。

・自動生成された音声が不自然な時がたまにあるので、SSMLタグでの声色調整スキルが必要だと感じた。

・アレクサに命令するには「アレクサ、〇〇を開いて××をして」のようにユーザがキーワードを覚えて組み合わせる必要があるのでちょっと億劫。
→用事次第だが、やらなくてもいいことであればあまり定着しなさそう。このあたりがVUIを意識するということ?

VUIと例外処理の設計実装、会話(セッション連携)辺りが使えるようになってからが本番だと感じた。。

BRM429宇都宮400km北関東(ランドネきたかん)参加メモ

BRM429宇都宮400km北関東(通称「ランドネきたかん」)に参加した。
自転車で宇都宮市水戸市前橋市高崎市を回るブルベで「東回り」「西回り」がある。自分は「西回り」で参加した。

■AJ宇都宮公式
BRM429宇都宮400km北関東 – AJ宇都宮

宇都宮市公式
www.city.utsunomiya.tochigi.jp

■コース全体図
http://www.city.utsunomiya.tochigi.jp/_res/projects/default_project/_page_/001/015/734/course2018.pdf

1.前日

スタート時間(8:00)に始発電車で辿りつける自信が無かったのでいつも通り前泊した。
せっかくなのでコースの下見も兼ねて森林公園に行こう…としたのだがタイヤをざっくり切ってしまうレベルのパンクをしてしまい心が折れたので、近くのTREKストアでパンク修理等々してこの日はお開きにした。
www.bp-o2.com

2.当日

Garminをホテルに忘れたり道に迷ったりしつつ、ろまんちっく村に到着。
f:id:hhhhhskw:20180503185801j:plain

参加者多かった。反射ベストの配給があったので、皆おそろいの反射ベストを着ている*1
f:id:hhhhhskw:20180503190000j:plain

(1)スタート うつのみやろまんちっく村(8:25 ※第6ウェーブ) ~ PC1 セブンイレブン佐野富岡町店(10:41)

市街地~郊外部を淡々と走るだけだった。スタート時からアームウオーマーをつけっぱなしで走っていたがこの時点(20℃くらい?)まではまだそれほど暑さを感じなかった。
セブンイレブンがおにぎり100円セールをしていたので「おにぎり全部制覇するならどういう順・ペースで食べればいいかな…」など無駄なことを考えながら走っていた。

(2)PC1 セブンイレブン佐野富岡町店(10:41) ~ PC2 ファミリーマート高崎吉井町店(13:47)

この時間からもう暑かった。ただ最高気温(予報)は25℃程度であり、からっとした天気だったので13時~16時あたりは負荷を上げずに走り、その後挽回しようと決めて走った。
途中の「あしかがフラワーパーク」の渋滞は予想していたより相当凄かった。。

(3)PC2 ファミリーマート高崎吉井町店(13:47) ~ PC3 セブンイレブン前橋富士見皆沢店(16:35)

赤城山ヒルクライムのコースを経由しPC3へ。
まえばし赤城山ヒルクライム大会 | 公式ウェブサイト
f:id:hhhhhskw:20180503193111j:plain
この辺が暑さのピークだった。36kmを3時間くらいかけて走っていたので、予想していたとはいえ相当ペースが落ちた。時間貯金が2時間切っていたので焦り始める。

(4)PC3 セブンイレブン前橋富士見皆沢店(16:35)~ PC4 セブンイレブン藤岡町藤岡店(20:36)

ヒルクライムの後の下りから栃木方面へ戻る。夜になっても「あしかがフラワーパーク」の渋滞は凄かった。。
この辺りから右ヒザの痛みが出てきており、PC4に着いた時にはいいDNFポイント*2を調べていた。
f:id:hhhhhskw:20180503193421j:plain

(5)PC4 セブンイレブン藤岡町藤岡店(20:36) ~ PC5 セブンイレブン桜川飯塚店(23:29)

右ヒザの痛みは限界に来ていたが、丁度サイクリングロードに差し掛かったのでスローペースで騙し騙し走る。「栃木・群馬・埼玉の三県境」という超激アツ観光スポットに寄る予定だったのだが残念ながらパスした。

またここから東回りの参加者とのスライド区間が始まり、色々エール?を送り合いながら走ったので走る気力が出てきた。

(6)PC5 セブンイレブン桜川飯塚店(23:29) ~ PC6 ミニストップ水戸駅南店(2:10)

痛みが限界を超えたので、痛み止めを飲んで走った。が、ここから「きのこ山」を越えるヒルクライムが始まり、左ヒザにも痛みが出てきた。
ただきのこ山さえ越えてしまえば普通の郊外の道なので割と調子よく走れた。結果として時間貯金を1時間ほど増やすことができた。

(7)PC6 ミニストップ水戸駅南店(2:10) ~ PC7 セブンイレブン芳賀祖母井店(5:04)

両ヒザの痛みのおかげか全く眠くならずに走れた。最低気温は10℃程度だったが、夏ジャージにウインドブレーカーがあれば十分暖かかった(と当時は感じていた)。ただ夜霧が立ち込めている所(茂木~市貝付近)の寒さは結構厳しかった。

(8)PC7 セブンイレブン芳賀祖母井店(5:04) ~ ゴール うつのみやろまんちっく村(7時前)

市街地に入り、俗にいう「信号峠」が厳しくなる。ろまんちっく村に着くとサイクルピクニックの準備が始まっており、出発時とは違いとてもキラキラした空間になっていた。*3

f:id:hhhhhskw:20180504004356j:plain

※右端見切れているところに悪魔おじさんさんの自転車がいる
f:id:hhhhhskw:20180504004414j:plain

■リザルト
・スタート~PC4 ※最初の7kmくらいはGarminファームアップ中だったので記録なし
f:id:hhhhhskw:20180503235851j:plain

・PC4~ゴール
f:id:hhhhhskw:20180503235903j:plain

■感想
・おそろいの反射ベストの集団、と書くと字面は不審な感じがするがすごく一体感を感じた
・天気が良く(ずっと晴れ・最高気温:25度・風弱め)、郊外部の道路が中心のコースだったので走りやすかった。
・東西スライド区間たのしいです

3.後日

2日安静にしたところヒザは動くようになったが、若干の痛みは残っている。また風邪をひいてしまったので自分のGWは完全に終了してしまった。。それでも400kmを走りきれたので満足している。
f:id:hhhhhskw:20180504004341j:plain

*1:散開した後なのでアレだが人口密度的にはこの2倍はいるイメージ

*2:交通の便が良く輪行しやすい始発駅・Googleレビューの高い24h開いてるネカフェ、健康ランドetc

*3:場違いなのではと不安になるレベル

BRM414神奈川200km白河 参加メモ+α

ブルベという自転車で長距離を走るイベントに参加した。
ブルベ自体は今年(2018年)から始めており、今年に入って3回目の参加となる。

■BRM414神奈川200km白河(2018/4/14 福島)
www.aj-kanagawa.org

1.前日

スタート時間(8:00)に始発電車で辿りつける自信が無かったので前泊した。
せっかくなので新白河周辺をぐるっと回ってきた。
f:id:hhhhhskw:20180503165757j:plain

桜は散り始め、という時期だったが所々満開の桜もいた。
f:id:hhhhhskw:20180503165817j:plain

f:id:hhhhhskw:20180503165852j:plain

f:id:hhhhhskw:20180503174645j:plain

白河の関跡へ

f:id:hhhhhskw:20180503165931j:plain

f:id:hhhhhskw:20180503165920j:plain

わかる人にはわかるアングル*1
f:id:hhhhhskw:20180503165907j:plain

f:id:hhhhhskw:20180503170026j:plain

f:id:hhhhhskw:20180503165944j:plain

f:id:hhhhhskw:20180503165957j:plain

一番上にはお堂があった。ノートはあったが流石に聖地巡礼系の書き込みはなかった…
f:id:hhhhhskw:20180503170010j:plain

続いて「境の明神(那須)」の県境へ

f:id:hhhhhskw:20180503170050j:plain

例のアングル*2
f:id:hhhhhskw:20180503170113j:plain

日も傾きかけていたので早々にホテルへ。白河駅付近のホテルを利用した。
白河駅周辺は電柱が地中化されており、いい感じの雰囲気だった。
f:id:hhhhhskw:20180503170126j:plain

2.当日

■ルート
ridewithgps.com

スタート地点は「新白河駅西口(高原口)」。
ここから北上し、郡山市福島市の南を経由し、福島の山中を走って新白河まで戻ってくる。

(1)スタート 新白河駅西口(高原口)~PC1 セブンイレブン松川駅前店

全体的に下り基調かつ信号が少なかったので気持ちよく走ることができた。
ただ二本松あたりの市街地は通行量が多く少し危なく感じる場面もあった。
巡航速度が30km/hいかないくらいだったので余裕をもってPC1に着くことができた。

f:id:hhhhhskw:20180503173939j:plain

(2)PC1 セブンイレブン松川駅前店 ~ PC2 セブンイレブン郡山谷田川店

この頃からアップダウンがあったがほとんどの区間が平坦で走りやすい道だった。

途中「福島市飯野 花やしき公園」というところがとても桃源郷感があった。*3

f:id:hhhhhskw:20180503174007j:plain

f:id:hhhhhskw:20180503174519j:plain

f:id:hhhhhskw:20180503174621j:plain

(3)PC2 セブンイレブン郡山谷田川店 ~ ゴール 新白河駅西口(高原口)

最後に獲得標高300~400mくらいのヒルクライムをこなすとあとは新白河市街へ向けて走るだけ。市街地に近づくにつれて道幅とトラックに気を使う必要があったが、無事にゴールすることができた。

■リザルト
f:id:hhhhhskw:20180503172317j:plain
グロス換算でも23km/hくらいで走れていたので、とても気持ちよく走ることができた。
また天気にも恵まれていた(曇り時々晴れ・ゴールに着いた途端に雨)のでとても平和に終わった。

帰りは安く取れたやまびこのグリーン車に乗車。
たまたま有名なバンド?のメンバーも同じ車両に乗りあわせていて、行く駅行く駅に追っかけの方々がいらっしゃったので女性の執念(パワー)を感じながら帰宅した。*4
f:id:hhhhhskw:20180503180253j:plain

*1:こみっくがーるず 新白河 聖地巡礼』の検索結果をご参照ください

*2:こみっくがーるず 新白河 聖地巡礼』の検索結果をご参照ください

*3:福島市飯野 花やしき公園』の検索結果は本当に桃源郷感ありますいいカメラ欲しい

*4:駅に着くと追っかけの方々が一糸乱れず全員バンドマンについて一列でエスカレーターで下っていったのでさながら軍隊のようでした

東京湾一周(時計回り)

自転車乗りの登竜門?的な「東京湾一周(ワンイチ)」を年末に済ませてきた。

f:id:hhhhhskw:20171228222523j:plain

横浜 ⇒ 日本橋 ⇒ 千葉(内房線沿い) ⇒ 富津岬 ⇒ 浜金谷 ⇒(フェリー)⇒ 久里浜 ⇒ 横浜 という感じの時計回りコースを走った。
アクアラインは自転車走行不可なので、東京湾フェリーを使ってワープする。40分足らずで着くので船旅というほどではないが、いい気分転換になった。
www.tokyowanferry.com

■横浜~日本橋
6時前に横浜を出発。日が昇りきる前に国道15号線を北上し日本橋へ。

早朝の銀座。ゴミ清掃車が走っていても、酔っ払いの集団がいても銀座のオーラで満ちていた(気がする)
f:id:hhhhhskw:20180104230659j:plain

日本橋で記念撮影。*1
ここから永代通り葛西橋通りを経由して浦安・船橋方面へ向かい、その後千葉(市川方面)へひたすら走る。
f:id:hhhhhskw:20180104231508j:plain

日本橋~千葉(市原)
国道14号線はボーナスステージ(広い路側帯・きれいな路面)だったが、その後の国道16号線は路面が荒れており、かなり神経を使って走った。
市原が果てしなく続いた後(体感)、木更津・袖ヶ浦といったアクアライン出入口付近へ到達する。

■千葉(市原)~富津岬
東京湾一周を謳っているのでなるべく東京湾沿いを走りたい、という理由から富津岬へ。

こんな感じの松林を抜けると…
f:id:hhhhhskw:20180104232736j:plain

なんだこれは
f:id:hhhhhskw:20180104232810j:plain

「明治百年記念展望塔」という展望台らしい。
明治百年記念展望塔 | 富津市

登った
f:id:hhhhhskw:20180104232844j:plain

岬の先っぽに来た感じがある。これはいい
f:id:hhhhhskw:20180104233452j:plain


富津岬~浜金谷
f:id:hhhhhskw:20180104235218j:plain
先人のブログを見るとアップダウンがある的なコメントがあったが、正直どこがアップダウンに該当するのかがわからなかった…そのくらい平坦な道を走ると浜金谷のフェリー乗り場へ着く。出航10分前に到着したので急いでチケットを買って乗船。

■浜金谷~久里浜
船酔い防止のため寝ていたので割愛。そんなに揺れないので神経質になるほどではないが念のため

久里浜~みなとみらい~横浜
トンネルだらけの国道16号線を北上し、八景島シーパラダイス前を抜けて国道357号線で北上。
せっかくなのでみなとみらいでクリスマスっぽい写真を撮ろうとしたが人がゴミのよう多すぎたので断念。カップルで爆発している観覧車だけ撮って撤収・帰宅した。
f:id:hhhhhskw:20180104235015j:plain

帰宅したのは18時前。途中で寄り道しまくったうえでの全所要時間は12時間程度。実際にペダルをこいでいたのは8時間程度だった。


■感想
・想像以上にド平坦だった。景色もどんどん変わるので確かに初心者にもオススメだと感じた。
・当日は北風が吹いていたので割と追い風基調で走ることができた。当日の天気予報(風向き)、日照時間を確認しておいたのがよかった。


■2018年の目標
・四国一周 四国一周サイクリング|疾走感、出会い、観光、食を楽しもう!
・CtoC (直江津へ)
・技術ネタでのブログ更新継続(せめて月1回)

今年もよろしくお願いします。

*1:そろそろ鉄下駄ホイールから卒業したい…!

ヤビツ・オギノパン・高尾

紅葉鑑賞とオギノパンが目当て。ついでに初ヤビツを済ませてきた。
走行距離が140km*1、獲得標高が2,616mだった。
f:id:hhhhhskw:20171206225349j:plain

■ヤビツ峠
山道に入るまでの生活道路が一番きつかった気がする。。
紅葉のヒルクライムを楽しむことができた。
f:id:hhhhhskw:20171206225956j:plain

裏ヤビツ側の方が紅葉はきれいだった
f:id:hhhhhskw:20171206230025j:plain


■宮ケ瀬湖
帰ってから人造湖であることを知った。紅葉と水面のコントラストがふつくしかった
f:id:hhhhhskw:20171206230145j:plain

f:id:hhhhhskw:20171206230208j:plain

■オギノパン

神奈川の学校給食にでるらしい。うらやましい。
f:id:hhhhhskw:20171206230407j:plain

右はゆず味
f:id:hhhhhskw:20171206230428j:plain


高尾駅
駅舎はアレだが普通に都会だった。あまり紅葉も見られなかったので高尾山口まで行くべきだったか…
f:id:hhhhhskw:20171206230622j:plain

f:id:hhhhhskw:20171206230638j:plain

帰りは多摩サイを下って帰宅。
地味に初多摩サイだった。まあまあ走りやすい道だったが、二子玉川より南は交通量が多いので割を気を遣う道だった。

*1:途中でスマホの電池が切れてしまったので、トータルでは150km以上は走っているはず。。

沖縄本島だいたい一周サイクリング

11月の連休(2泊3日)を利用して沖縄本島で自転車(ロードバイク)を乗り回してきた。基本的なコース取りは「ツール・ド・おきなわ」の「本島一周サイクリング」コースを参考にした。
沖縄らしい食事は空港での「ミニラフテー丼+ミニ沖縄そばセット 1080円」のみ、という脳死グルメっぷりだったが気にしない
www.tour-de-okinawa.jp

■1日目 那覇空港恩納村

羽田空港まで自走して那覇空港へ。
まさかのStrava起動忘れ。だいたい40km程度だった。
空港着が18時だったので初めての沖縄ナイトライドとなったが、郊外部の街灯の少なさに精神を削られつつ北上した。(自称1200ルーメンの中華ライトとVOLT400の2灯でギリギリ行けそうと感じるレベル・終始「何か出てきそう」感があったので怖かった)

■2日目 恩納村屋我地島~辺戸岬~東村~名護

宿からの1枚。沖縄の朝て感じ
f:id:hhhhhskw:20171206223459j:plain


本日の行程。この日は終日北風が吹きつけていたので、辺戸岬に向かうまでの平地が非常につらかった。。

屋我地島へ続く橋からの景色は素晴らしかった(※若干渋滞してたので写真なし)

本部循環線(R449・R505)で海沿いを北上。すでに風がっょぃ
f:id:hhhhhskw:20171206223546j:plain

■辺戸岬
辺戸岬。よくわからない石碑しかない…という感じだった。この時点で14時を回っていたので焦りつつ東村へ。ここから山(ジャングル)の中を走る。
f:id:hhhhhskw:20171206223821j:plain
f:id:hhhhhskw:20171203223704j:plain

■アダ・ガーデンホテル
圧倒的な御殿感があった。ここから東村までのアップダウンがきつい。
f:id:hhhhhskw:20171203223637j:plain

■カナンスローファーム
次のゆるふわライド(予定)で行きたい。東村に近づくにつれ「自販機がある!」「お店がある!」「タクシー走ってる!」と文明の発達を感じることができる
f:id:hhhhhskw:20171203223528j:plain

ここからわんさか大浦パーク前を抜けて名護へ…と思っていたのだが、釘ふみパンクしてしまった。昨日のナイトライドのトラウマもあり、国頭方面へ抜けて名護へ向かうショートカットをしこの日は終了。

■ヤンバルサイクル
チューブと補給食を購入。土日も20時まで開いていたので非常に助かった。
f:id:hhhhhskw:20171203225134j:plain

■3日目 名護~海中道路(海の家あやはし館)~ムーンテラス東崎~那覇空港


■海の駅あやはし館
f:id:hhhhhskw:20171203230002j:plain
闘牛がいた。小さい子が乗せてもらえるくらいおとなしかった。
f:id:hhhhhskw:20171203231056j:plain
フォトジェニック(言いたいだけ)
f:id:hhhhhskw:20171206223901j:plain
海中道路の追い風はすごく気持ちよかった。今度は伊計島まで行きたい。
f:id:hhhhhskw:20171206223936j:plain

3日目は100kmいかない程度だったので楽だった。
21時半に羽田に着いた後、家に帰るまでにスローパンクしたり自転車の検問があったり夜食を買い食いしたおかげで深夜1時に家に着いた。。

総括

・初めて1日で200km以上走れたのでとても満足
・沖縄の郊外でのナイトライドはちょっとすごく怖いので可能なら避けたい