DAHON K3 のタイヤをビッグアップルに交換した

先月買ったDAHON K3ネタです。

今回はDAHON K3としてはド定番のカスタムです。標準タイヤからシュワルベのビッグアップル14インチに変更するというものですね。

やるかやらないか悩んでいたものの標準タイヤで1ヶ月ほど過ごしてみて10kmぐらい移動するとやっぱり辛いなってことで交換することにしました。

いわく、乗り心地は大幅に改善し、標準でも思ったより良く走るK3がさらによく走るようになるという噂。交換しない理由はないって話なのでこの話に乗っかることにしました。

タイヤ交換なんてやったことない上にネットで情報収集したところ、どうやら個体差でいろんなものに干渉する可能性、特にリアディレイラーに干渉すると調整が結構大変みたいな話なので購入した店舗にお願いしようかと思ってたんですが、せっかくなので一度自分でやってみようかなと。

で、ダメだったら店に泣きつこうということでやっていきます。

準備

というわけで自分でやるにあたって色々と購入する必要があるわけですが、このタイミングでタイヤ自体の入手が結構大変ということを知りました。どうやら人気で品薄だそうで。

困ったもののいろんなショップを探しまくってなんとかゲット。

売っているところでも定価以上になっていることが多い中、定価で購入できました。これ、手に入る時に予備を買っておいたほうがいいですよ。

続いてチューブです。タイヤに合わせてチューブ買う必要があるんですが、最初何も考えずにシュワルベのチューブを買ったんですね。そうしたらバルブ(空気入れるところ)が英式で、仏式のK3のホイールにつけようとするならバルブ穴の加工が必要ということでキャンセル。たまにセットで売ってるものあるのですが要注意です。自分が無知だっただけですが。

調べたところ標準チューブのままでも一応いけるみたいですがあまり良くないってことらしく、こちらのパナレーサーのチューブが鉄板てことで購入。

あとは作業用にタイヤレバーてのが必要ってことだったのでこちらも購入。初めて使ったので他と比べられないんですけど硬くて良かった気がします。

というわけで届いたものたち。

f:id:Keisuke69:20220430213102j:image
f:id:Keisuke69:20220430213059j:image
f:id:Keisuke69:20220430213105j:image

 

あとは普通にタイヤ外したりするために六角レンチが必要になりますが今回はもともと持ってたやつでOKでした。ちなみにもともと持ってるのはこちら。大きいものから小さいものまで揃ってるので便利。

交換作業

まずタイヤを外していくのですが作業は自転車をひっくり返して行います。

f:id:Keisuke69:20220430205058j:image

まずは前輪から外します。

f:id:Keisuke69:20220430205245j:image

外すのは簡単で六角レンチでシャフトを外すだけです。

f:id:Keisuke69:20220430205242j:image

こんなやつ。

f:id:Keisuke69:20220430205638j:image

というわけで外せました。外すにあたってブレーキが干渉するので先にタイヤの空気を抜いてしまったほうがいいです。

f:id:Keisuke69:20220430205907j:image

隣にビッグアップルを並べて比較してみます。この時点でビッグアップルの太さがわかります。
f:id:Keisuke69:20220430205912j:image

大きさも同じ14インチでも一回り違います。てことはですね、スピードが増すことが期待できます。
f:id:Keisuke69:20220430205910j:image

続いて後輪です。後輪はチェーンやらがあるので前輪よりは苦労しました。

まずは後輪は前輪と違ってブレーキを緩めました。

この左側のところを緩めるとブレーキのワイヤーが緩みます。

f:id:Keisuke69:20220430213309j:image

そして外す。
f:id:Keisuke69:20220430213312j:image

あとは前輪と同じように六角レンチでタイヤを止めているものを外します。

後輪は前輪と違って両サイドからそれぞれ締められていますのでパーツが2個になります。

f:id:Keisuke69:20220430213435j:image

で、チェーンを外すのに四苦八苦したのですが、ここの部分を手でグイッと前に引っ張るとチェーンが緩むので比較的楽に外せました。

f:id:Keisuke69:20220430213609j:image

外したチェーンは適当にリアディレイラーに引っ掛けておいたのですが正しい方法は知りません。

というわけで外れたのですが外した後輪の写真を撮るの忘れてました。

さて、ここからはメインのタイヤ交換です。まずはホイールからタイヤを外します。

こんな感じでタイヤレバーを引っ掛けます。

f:id:Keisuke69:20220430213835j:image

スポーク1、2本をあけてもう一個タイヤレバーを差し込みます。そうしたら下の写真のようにテコの原理で手前にグイッと倒します。結構力がいるかもです。

f:id:Keisuke69:20220430213912j:image

あとは残りの一本を差し込んでつつーっと一周回せば外れます。

f:id:Keisuke69:20220430214022j:image

タイヤの片側がホイールから外れたら中にあるチューブを引っ張り出します。

f:id:Keisuke69:20220430214129j:image

バルブに止められている固定リング?を外してホイールから外します。タイヤも外します。

こんな感じで外せました。

f:id:Keisuke69:20220430214226j:image

f:id:Keisuke69:20220430214326j:image

次はビッグアップルをホイールにはめていきます。

まずは片側だけはめた状態にします。

f:id:Keisuke69:20220430214425j:image

そして交換するチューブを用意します。固定リングとキャップは外します。

f:id:Keisuke69:20220430214445j:image

f:id:Keisuke69:20220430214519j:image

ホイールのバルブ穴にバルブを通します。この時点で固定リングを止めてしまってもいいかも。

f:id:Keisuke69:20220430214604j:image

あとはグイグイ入れていくだけです。

チューブを入れ終わったらタイヤの残りの側をはめるのですが、これが一番苦労しました。

かなり硬くてはめるのが一筋縄ではいかず、写真を撮るのも忘れてしばらく格闘してました。

最終的にはタイヤレバーを使って外す時の逆ではめたのが自分的にはベストの方法でした。

が、残念ながら写真撮り忘れ…。

もしここの部分の詳細知りたいって人がいたら気が向いたらもう一度バラして写真撮ってお見せします。

あと、実際にはトラブルが発生しまして。四苦八苦しているときにグイグイやりすぎたりしたからか交換したばかりのチューブに穴が空いてしまうという。

2本しか買ってなくて予備がなかったのでひとまずこの日は標準チューブでしのぐことに。

で、その場でAmazonで注文して翌日届いて無事にチューブ交換も完了。ありがとうAmazon

完成

というわけで無事に交換完了。問題なく折り畳めます。

f:id:Keisuke69:20220430215834j:image
f:id:Keisuke69:20220430215831j:image

問題の干渉ですがとても幸運なことにブレーキはもちろんリアディレイラーの干渉もなし。これは有り難い。

インプレッション

といっても交換後にまだほとんど乗っておらず少し試した程度なので正直よくわかりません。

でも確かに地面の起伏が腕にビリビリ来てた感じはだいぶ軽減された気がします。これは期待大。

もう少し乗ってみての感想

続報です。

1時間ほど乗ってみました。結論からすると最高オブ最高です。

激しく地面の振動が伝わってた場所を走ってみたりしたのですがかなり緩和されてます。

タイヤが太くなったことで漕ぎ出しが重くなるって話も見かけてたのですがそれもあまり気にならず。

これは確かに変えない理由はないかも。ただし重量も少し増えるので輪行メインの人だとトレードオフかな。

DAHON K3 ここまでのカスタムまとめ

折りたたみ自転車のDAHON K3を購入したのは以前のブログでもお伝えしたとおり。

このDAHON K3、折りたたみ自転車の割によく走る。思ってたより全然走れる感じなので買ってからよく乗ってる。

まさに徒歩と車の中間くらいで行動範囲が広がったし運動にもなっていい。

 

で、ちょっと調べてみると結構カスタムできるみたいなので色々調べたりしつつ楽しむように。

というわけで、ここまでのカスタムだったりつけたパーツだったりをまとめてご紹介。

といっても僕はガチの自転車好きってわけでもなく、知識もあまりないので割と定番の内容ばかりになっている。

 

## センタースタンド

DAHONのK3にはカタログスペックとしての重量を減らすためかスタンドがついてません。

これは流石にないと不便なので取り付けてます。

センターか後輪の部分かというのはあるんですがバランス重視でセンターに取り付けてます。

概ね満足なんですがスタンドを立てた状態でペダルを回すと干渉します。

あと、これをつけると折りたたみ時にハンドルポストのクランプが干渉するので開きっぱなしにする必要があります。開きっぱなしにしても今のところ特に問題ありません。

 

## グリップ

これも大定番のやつですね。ErgonのGA3を使ってます。標準のやつだとちょっと乗ってたは手のひらが痛くなってたのですがこれに変えてからはそういったことはなくなりました。

Ergonのやつは種類がかなり多くてどれにしたらいいか悩んだんですが、スポーティになりすぎないものってことでGA3にしています。

これは変えて大正解。

 

## スマホホルダー

ちょっと遠出をしたときにナビ代わりにスマホを使おうとして困ったので購入。自転車用スマホホルダーは種類がいっぱいあるものの、今回は折りたたみってことで付けたまま折りたたみ可能、もしくは簡単に脱着可能なものってことで探しました。

結論としてはミノウラのiH-220-STDのSをつけてます。サイズを間違ってはいけません、Sの方ですよ!

でないとDAHON K3のハンドルバーのパイプ径と合わなくなってしまいます。

 

こちらは最初のセットアップには工具が必要です。自分のスマホのサイズにあわせてドライバーでネジを緩めて位置合わせをするのですが最初にやってしまえばあとは工具不要です。

ハンドル自体にはブラケットをつけてからこのスマホホルダーをつけます。このブラケットもサイズ合わせのためにカットする必要があります。取り付け自体はクランプ式で工具は不要。

というわけで自分は折りたたむときだけ外してます。ブラケットのみハンドルにつけたまま折りたたんでる感じで今のところ問題なし。

 

## トグス

これは親指置きです。ある方がいいといってたので取り付けてみましたが今のところ効果はそれほど感じず。今のところなくてもいいかなって感じ。

あと、一応グリップ外さずに取り付けられるってことになってますがかなり大変なので素直にグリップ外すのがいいと思います。

 

 

## 自転車置き場

自分の場合、折りたたんだ状態で自室に置くと決めてたのでその置き場です。

外を走ったタイヤとシートポストが床に設置するので汚れや傷が気になるところです。

最初は段ボールとか引いてたのですが以前に自室の壁を板壁にした際にあまった木材があったのでそれを使って置き場を作りました。

作ってから思ったのですが普通にスノコ買って色塗るだけでも良かったかもしれない。

 

## サドルバッグ

使ってるABUSのロック(BORDO 5700)

が重いのでリュックに入れるのが辛いなと思い購入。

探すにあたり、あまりでかくなくて、付けたまま折りたためて、ABUSのロックが入るものって条件だったんだけどあまりなくて。

トピークのはシートポストにも固定するのでそのままではたためなくなる。

というわけでオルトリーブのMICRO2に。0.5Lと0.8Lがあるんだけど0.8Lを購入した。こっちじゃないとABUSのロックが入らなさそうなので。

つけたばかりなので実際の使用感はわからないですが簡単に取り外せて良さそう。

 

つけた箇所の飛び出し具合や付けたまま折りたたんだ時の状態が気になる僕みたいな人もいると思うので参考写真を貼っておきます。

f:id:Keisuke69:20220417125702j:image

 

## 検討中のもの

よく言われてる定番もので検討中なのがこの辺り。

まずはタイヤ。これはド定番のやつですね。この自転車は小径なこともあり地面の振動を割とダイレクトに受けるんですがこの太くて厚いタイヤに変えると大分軽減するとか。

というわけで近いうちに変更しようと考えてます。

次は一部の方おすすめのペダルですね。

純正のは折りたためるタイプなんですがこの折りたたみがやや力が必要で少しストレス。

というわけで手軽に脱着できるタイプがあるってことでそれを検討してます。

 

よく言われてるのは輪行するときに取り外せると便利ってことなんですが輪行はあまりしないのでそこはどうかなーと。

単に折りたたむのと取り外すのどっちが楽かなという観点です。

取り外せたら防犯にもいいかもしれない。

 

次が泥除けです。K3には標準では泥除けがついてないのです。雨の日はもちろん雨上がりでも乗るのが躊躇われるのでつけたいところなんですが、これに関しては純正は形がイマイチ。

 

どうやら自分がK3を買った自転車屋さんはもっとイカした泥除けを作ってつけてもらえるってことなのでそれを考えてるんですが当然お値段が…て感じですね。

 

最後はサドルです。長距離乗るとお尻が痛い。サドルを変えれば変わる(かもしれない)ということでこの辺りが気になってるのですがいかんせん高いので悩んでます。

## まとめ

というわけで金額的に小者なやつから交換してる感じです。

次はタイヤかなーと思いつつもおすすめのカスタムがあったら是非Twitterとかで教えてください。

 

プライベート時間で技術に注力する気力がなくなりつつある件

久しぶりのポエムです。

最近こんなブログがバズっていてそれに関連して思うところもあったので書きます。 別にアンサーブログとかそういうのではなくて、前々からぼんやりと思ってるところがありそれがこのブログ記事によって刺激されたので吐き出すって感じ。

rabspice.hatenablog.com

自分自身も昔こういうことを書いたこともある

www.keisuke69.net

これを書いたときから2年も経っていて当時と今とでは置かれている環境も変わったので、まず最初に前提として自分の置かれている立場、状況について話をしておこう。

僕はいわゆるソフトウェアエンジニアに近い領域で仕事をしているエンジニアだ。と言ってもポジション的には取締役CTOだったりすることもあり、残念ながら毎日コードだけを書いて過ごせてるわけではない。 取締役とかCTOとか偉そうなポジション名であるものの、シードラウンドのスタートアップでまだ専任のインフラ担当もいないのでそのあたりをやることも多いし、会社全体に関わる組織的、営業的、事務的なことをやることも多々ある。

他方、プライベートの面では妻子(8歳と7ヶ月)がいる状況。また、仕事をしたりするにあたってありがたいことに自室もある。これは地味に大きいと思う。

その上で本題。

やりたいことがいっぱいあるのに時間がないと感じることがここ最近多い。特に特定の技術を深掘りするための時間を確保するのが難しいと感じている。その結果、表面的になぞるだけであたかも知ってるように錯覚することも多々あると自覚している。要は薄っぺらい。

いつからこうなったのか。

単に使える時間が減ったという単純な話ではない気がしている。

結局、時間の配分として技術のキャッチアップの優先度が下がっているのだろう。

1日の多くの時間は仕事だ。次に多いのは睡眠なのかな。 で、それ以外の時間を何に使うかとなったとき家のこと、家族に費やす時間の残りの時間で何をやるかということになる。

ここで漫画見たりってことのほうが多くなっているわけで。映画見たりとか。 じゃ、昔はどうだったかというと違ったなーということに最近気づいた。

昔は仕事とかの必要な時間を除いた余暇の時間にやりたいことの一つとして自然に技術のキャッチアップとかがあった。 今は正直に言ってそれがない。この業界に身を置く者としてやる必要があるからやっているという感覚に近い。つまり、それをやった結果、やりたいことがやれないという感覚になるのだ。

天才的なプログラマーでもない自分の場合、価値を提供し続けるためには新しいことを学び続ける必要があるという、ある種強迫観念的なものに苛まれている。

正直なところ、仕事は好きだ。時間と状況と体力さえ許せばずっとやってられる。やることは無限に生まれるし、やりたいことも無限にある。あれ、仕事が趣味なのかな。

時折、こういうことを吐き出すといろんな意見をもらう。コンテキストを共有しきれているわけではないので的外れな指摘も中にはあるがまあそれはそれだ。「CTOがこんなこと言っていたら〜」みたいなことを言う人もいるだろう。

新しい技術に限らず、ソフトウェア開発やそれに関わる色んなことが無意識の興味の対象でなくなってしまっているのかもしれない。ニュアンスが難しいんだけど完全に興味が失われているわけではないが、優先度も高くないという状況といったほうが近いかもしれない。

一方でプロダクトを作ること、テクノロジーを事業に活かすことについては依然としてとても好きではある。技術的な雑談も好きだ。

そのためには技術力が必要なこともわかっている。でもプログラミングが趣味とまでは言えない。だから決して強いエンジニアにはなれないだろうし、そうなろうとか思ってるわけではないのでそういう焦りはない。プログラミングが趣味の人は強い。なんせ自分の好きなことをやることが技術力の向上に直結するのだから。幸か不幸か自分はそういうタイプではないが、仕事に使うためのネタは常に新しいものに入れ替えておきたいし、武器は研いでおきたい。

そう思って最近は意識的に時間をとるようにしていたりするが、先のブログじゃないが「勉強」と思ってしまうと辛いってのもよくわかる。あとは同じ時間をかけても身になるかどうかってのもある。学習効率と言い換えてもいいのかもしれない。そういう意味では最近はこの学習効率が昔と比べてとても落ちている気もする。これはもしかしたら加齢によるものも影響していて脳とか集中力とかのピークを過ぎたからなのかもしれない。

とはいえ、勉強と思うと辛いというのはわかっていてもしがみつくしかないので勉強するしかない。

加えて自分が元来飽きっぽい性格だということもあり、2年もすればいろんなことに飽きてしまうことが多い。つまり新しいことをやり続けたい。そのためにも学び続けることが必要なのだ。

理想は仕事の中でそういうものに触れ続けて、キャッチアップし続けられることだろう。幸い、今の環境は前よりはそれに近いことはできていると思う。だが、十分であるかというとそうではないと感じている。

そういえば、ちょっと話はそれるがよく言われるアウトプットについても思うところが少しある。いろんなところでアウトプットするのが大事と言われているがみんなそんなにできているだろうか?意識的にやるのが良いと言われていたり、実際に若者にそんな相談をされたりしたときにはブログでも登壇でもなんでもいいのでアウトプットすることをおすすめすることもある。だがそんなにアウトプットするネタをみんな潤沢に持っているものだろうか。正直なところ僕にはそれほどない。

各種イベントでの登壇とかも前職では仕事の一貫だったのでよくやっていた。でも今はそれが仕事ではないのでめっきり減った。一方で個としてのプレゼンスはある程度持っていたほうがいいとも思っているのでたまにはやるようにしている。つまりこれもある意味努力の一貫だ。なお、ありがたいことにお声がけをいただけた場合は内容問わずスケジュールがバッティングしない限りお断りしないという基本姿勢は今も変わらずだ。

答えがあるような話でもないし、答えを出そうと思ってもいないのでこの辺でやめることにしよう。

とりあえず、ソーシャルなんてやってる時間は無駄なことは自分でもよくわかってる。

DAHON K3を買った

f:id:Keisuke69:20220329102013j:plain

自転車を買った。

といっても最近流行りの感じやつではなくて折りたたみ自転車だ。

きっかけ

きっかけは家族と行ったショッピングモールの自転車屋でたまたま見かけたCarryMeという折りたたみ自転車だ。

f:id:Keisuke69:20220329094926j:plain

https://pacific-cycles-japan.com/carryme/

こんなにコンパクトになる自転車が存在することを知らなかった。 その場で買って帰りたかったが98,780円(税込)もするのでさすがに躊躇った。 というのもこれまで自転車といえばドンキとかイオンとかで売ってる安いやつしか買ったことがないからだ。1万前後のやつだ。 そんな自分にとって10万近くもするのは高値に感じるし、そもそも10万円は大金だ。

さて、なぜ自転車が欲しくなったかというと、娘と自転車で出かけるためである。今の自分は自転車を持っておらずもっぱら歩きもしくは車だ。だが娘は自転車に乗って行きたいことも多い。そんなときに一緒に行けるように自転車を買おうかとも思ったが置き場所の問題があった。 そんな自分にとってこのCarryMeという製品のコンパクトさはたまらなく魅力的だったのだ。これなら乗らない時に自室の隅に立てて置ける、と。

というわけでその日からCarryMeを買うべくメルカリで物を売り始めた。 僕は仕事とか全く関係のないもので高額なものが欲しくなったときはそれを買う金を新たに作ってから買うという自分ルールを定めている。別にメルカリじゃなくてもスポットで業務委託とかもありなんだけど本業以外の仕事する時間的余裕はないのでもっぱらメルカリが多い。

そして順調に売れて1ヶ月ほどで目標額に達したのでいざCarryMeを買おうとしたら無情にも3月から値上げされていた。約3万も。 若干途方に暮れたがどうやら自転車屋によっては在庫品を旧価格で売ってることもあるっぽいことを知る。

いざ店に

Webで見たところ我が街横浜は山下町のGREEN CYCLE STATIONというショップに別注モデルが旧価格と同価格で売られているっぽいので見に行くことにした。

www.gcs-yokohama.com

こちらのお店はミニベロ、折りたたみ専門のショップとしてこの辺では有名だそうだ。ちなみに「ミニベロ」という単語自体知らなかった。 なお、意気込みとしては旧価格で売られてるCarryMeがあれば即買い、なければ悩むってスタンスだった。

そしてショップに行って一通り見たのだが、それ以上にこの店で売られていた「ブロンプトン」というメーカーの折りたたみ自転車がとても気になってしまった。

一度この店を後にし、カフェでコーヒーを飲みつつWebで情報収集して近隣の別の自転車屋に向かうことにした。向かった先は「LORO CYCLEWORKS YOKOHAMA」。馬車道にあるこの店も折りたたみ自転車専門店らしい。

www.loro.co.jp

この店にもCarryMeが置かれていた。しかもみんな旧価格だ。ただ、それよりも目立ったのが壁一面にあるブロンプトン。そう、ここでもブロンプトン

方針変更そして購入へ

ここにいたり、方針変更しCarryMe以外の自転車も検討することにした。

選ぶポイントは以下。

  • 折りたたみ時のコンパクト性(特に横幅と奥行き)
  • 重さ
  • 価格
  • 走行性

この辺の条件を店員さんに伝えてCarryMeも含めていくつか出してくれたのがこちら。

この時点でTyrellは1番走行性は高いものの、折りたたみ状態の大きさが少し大きく脱落。 代わりに急浮上したのがDAHONのDove Plusだ。これは二つ折りタイプなんだけど折りたたみ時のサイズがブロンプトンと同じくらいで圧倒的に軽い。ブロンプトンはタイヤが16インチでDove Plusは14インチなのでコンパクトさで言ったらブロンプトンなんだとは思う。だがブロンプトンは高い。22万円からと完全に予算オーバーだ。その分一生モノらしい。とはいえ高い。

一方でCarryMeはタイヤが8インチとこの中では1番小さい。そして重さは意外にもDAHONのほうが軽かったのだ。また、値段に関してもDAHONのほうが旧価格のCarryMeより安いということでぐぐーっと一気にDAHONが候補に。

だがしかし、自転車に疎い自分にはこのDAHONというメーカーは聞いたことがない。自転車で知ってるメーカーといえばブリヂストンくらいだ。そのあたりが少し不安だったがその場でググったり店員さんの説明を聞いて払拭された。

そして試乗する。この店では外を自由に試乗できる。

まず、CarryMe。予想通りというべきかなかなか乗り心地は悪かった。実は最初にこの自転車を見つけたときにも試乗したのだがその時は店舗内だったのであまりわからなかったのだが、地面の凹凸をかなりダイレクトに感じるし、ハンドルもかなりクイックな感じだ。あと坂道はきっと登れない。このタイヤの小ささなら仕方ないだろう。

続いてブロンプトン。うん、これは文句なしな感じ。

そしてDAHON。これもかなり良く感じた。ていうかCarryMeと比べるとどれも雲泥だ。 だがDAHONのDove Plusには変速がない。ここが悩ましい。

折りたたみはブロンプトンが圧倒的に楽。CarryMeは意外に手間だった。DAHONは4ステップくらい。だがこれはどちらも慣れの問題な気がする。

ただし、ブロンプトンはやはり自分には高すぎる。というわけでCarryMeかDAHON Dove Plusに絞られた。

そしてここで店員さんからある情報がもたらさられる。実はこの方、ブロンプトン3台にCarryMeも所有してるそうなんだがちょっとした振動で倒れてしまうそう。そして倒れるとハンドルの折りたたみ部に歪みが出て折りたためなくなるとのこと。そのため、普段は縦ではなく横にして保管してると。 それじゃ横幅重視の自分にとって意味ないじゃん!ということでDAHONに傾きつつあった。少し時間をもらって店のソファを借りていろいろと悩んでいたらほぼ同じサイズで変速つきのK3というモデルが存在することを知った。

www.dahon.jp

重さは1kgぐらい増え値段も1万くらい高くなるがそのくらいだ。旧価格のCarryMeと同じくらいの値段なので予算的にもバッチリだ。え、これ完璧じゃない⁉︎というわけで最終的にDAHON K3になった。

話が長くなった。

オプション

さてここからは新たに始まる自転車ライフのために購入した物たちを。

スタンド

K3には標準ではスタンドがついていない。きっとカタログスペックを少しでも軽くしたかったからかとうがった見方をしてしまう。 というわけでスタンドを購入。これは純正のやつ。

輪行袋

電車や屋内に持ち込む場合などのために購入。これも純正。

ライト

これは取り外しも簡単だしUSB充電だし。しかもケーブルとかは不要で本体を直接USBに突っ込めばいい。楽だ

グリップ

よく分からないけどみんな変更するってことなので購入。色々種類があって途方に暮れたが端っこがスッキリしてるこれを購入。

駐輪場に停めるには鍵が必要なので購入。これもなるだけコンパクトでそれなりの防犯性のあるものをってことでググって探した結果ABUSのやつに。それにしても自転車用の鍵って高いんだね。 そしてこれ思ってたより重い & どこに取り付けたら…?

バルブアダプター

自転車の空気入れのバルブに英式、米式、仏式なんていう種類があることを初めて知りました。 DAHON K3は仏式で家にある空気入れだとダメだったのでアダプターを購入

まとめ

といえわけで紆余曲折の結果DAHON K3を購入したので今よりもう少し行動範囲が広がりそう。 あと、ネットで見てるとカスタマイズも結構あるみたいなのでやるかやらないか。ちなみに自分はデフォルト厨です。

Kindle Paperwhiteが短期間に2回もダメになったのでiPad miniを仕方なく買った件

f:id:Keisuke69:20220320114352j:plain

ただの日記です。

僕は普段、基本的に全ての書籍・漫画は電子書籍で読んでいる。 実際にはKindleがほとんどだ。オライリーやManningの本のようにAmazon上で電子書籍が買えないものも電子版をKindleに入れて持ち歩いている。

このKindle電子書籍を読むためのデバイスとしてしばらくはFireを使っていた。

AmazonタブレットであるFireはタブレットとしては正直微妙なのだけど安いという大きなメリットがあった。でも当時のFireはとてももっさりしていて遅かった。何世代か買ったけど基本的には遅かった。娘もキッズモデルを持ってたけど遅くてよくイライラしてた。

余談だが、娘も妻も遅くて反応がない場合等思ったように動かない時に「バグった」という表現を使う。でもソフトウェアエンジニアの端くれである僕からするとこの発言は看過できない。機能としては正しく動いてるが仕様がおかしい場合等にもこの言葉を使うのだ。なので必ず「簡単にバグという言葉を使うな。バグというのはな…」みたいな話をするのだけど完全に「めんどくせ…」ってなっている。

話を戻す。Fireの遅さに不満を持ちつつもiPad高いしなーと思ってたのだが、当時ふるさと納税iPadを入手することができることを知り、そこでiPadを入手した。10インチくらいのやつ。 iPadにした理由は当初はApple Pencilによる手書きでノートやアーキテクチャ図書いたりすることを目論んでだった。それもあって10インチだった。

だが、それも結局はほとんど行わずKindleアプリで本を読むだけの端末になっていた。あと飛行機とかで動画見る用。ただFireと比べて動作は軽快だった。 一方で10インチくらいだったので電子書籍読む用としてはデカくて重い。それに不満を覚えつつも3年ほど使っていた。

そして、昨年の11月末のブラックフライデーのセールでKindle Paperwhiteを購入した。

決め手は以下だ。

  • 安い
  • 防水
  • コンパクトで軽量
  • 電池持ちがとても良い

特に防水には期待していた。というのも僕は普段本を読むのは風呂と電車が多いからだ。iPad時代は防水のケースに入れて風呂に持ち込んでいたが正直面倒だった。 Kindle Paperwhiteにするにあたって悩んだのは画面が白黒になることだった。でも雑誌以外は特に問題ないかと思ったのだ。

というわけでKindle Paperwhiteライフが始まったのだがとてつもなくもっさりしていること以外は快適だった。 やはり防水でそのまま持ち込めるのはいいし、軽量かつコンパクトなこともいい。あと電池が圧倒的に持つことも良かった。電子ペーパーも目に優しくて思った以上に良い。

なお、このもっさり感についてはこれでも旧モデルと比べてだいぶ改善されてるとのことなのでそれはそれで驚く。Fireの比ではない。

さて、そんなKindle Paperwhiteライフを送り始めて1か月ほど経った時だ。本を読もうと思ったら全然動かない。この待機画面?のままでうんともすんとも言わなくなってしまった。

f:id:Keisuke69:20220320110751j:plain

電源長押しの再起動はもちろんPCに繋いで認識するかとかも試したが全部ダメ。というわけでカスタマーセンターに連絡したらサクッと交換になった。連絡した翌々日くらいには新しい端末が届いた。 Amazonのこの潔さはいい。

そして使うこと2か月、またも同様の状況になってしまった。 その日の昼にはカフェでコーヒーを飲みながら優雅に本を読んでいたのに帰ってきたらうんともすんとも言わなくなっていた。

ただ、前回とは少し症状が違って定期的に画面が明滅してる状態だった。もちろん電源長押しでの再起動、PC接続もダメ。またAmazonのカスタマーセンターに電話した。

細かい会話の内容は覚えていないが要点はこんな感じだ。

  • 前回と同様の状況と思われる
  • 同様の事象が多数のお客様から報告されていて解決のために問題調査をしている
  • 端末を交換してもまたほどなく同様の状況になることが予想される
  • 問題が解決するまで待ってほしい。解決したらメールで連絡する

まさかそんなことに。ダメ元でどのくらい解決にかかりそうかと聞いてみたところわからないと。まあそりゃそうだろう。

でもあてもなく直るのを待つのも困る。本が読めない。iPhoneで読むことも考えたが画面も小さいしそれは嫌だ。

PaperwhiteがダメならOasisはどうなのかと思って聞いてみた。そっちに買い替えるのもありだと思ったからだ。 でも結果的にはOasisでも同様の問題が発生しているとのことだった。

そこでダメ元で返品対応ができないか聞いてみた。通常30日以内じゃないとダメなんだが今回は2回も発生しているので申し訳ない。内部で確認して連絡するとなった。

ちなみにしばらく明滅状態が続いて最終的にはこうなってる。これは最終的に電池が切れたということかな。

f:id:Keisuke69:20220320112519j:plain

ほどなく今回の場合は返品対応を受け付けると連絡が来た。これはとてもありがたい。 Amazonのこういう潔さはよい(2回目)

とはいえ、じゃあ代わりの電子書籍を読むための端末をどうしようかという問題は残る。 そこで今回は昨年秋にニューモデルが出たiPad miniを買うことにした。今回は前回と違ってサイズ感重視でminiにした。 防水と軽量さ、電池持ちについては諦めるしかない。 それにしても高い。電子書籍を読むためだけに6万近いのは痛い出費だ。

早速購入しようとAppleのサイトを見ると到着が4月になるとなってる。ちょっとググったところ店頭在庫も切れ気味とのこと。これは困った。

でもAmazonを見たら各色共に在庫がある模様。もう夜だったんだけど翌日には届くとのこと。というわけで購入した。

そして無事に到着してセットアップ。

f:id:Keisuke69:20220320113145j:plain

Kindleと動画見る用なのでとてもシンプルになった。だがやはりKindle Paperwhiteと比べると重い。そして防水…

防水に関しては諦めるしかないのでしばらくはジップロックに入れて簡易的な運用をすることにしよう。

それにしてもKindle Paperwhite がこんなことになったのは残念だ。

横浜・みなとみらい近辺で電源が使えるカフェまとめ(2023/01/17 update)

今回はいつもと趣向を変えてちょっとしたまとめを。

コロナ渦で基本的に家で仕事をすることが多くなって2年以上経過しているわけですが、最近はずっと家で仕事してるのも気が滅入ってくることもありちょっとした運動と気分転換がてら徒歩ででかけてカフェ行ってくるなんてことをしていたりします。

自分の将来の夢は自分が居心地のいいカフェをオープンすることです。その将来の夢に市場調査も兼ねています。という言い訳。

好みなのは海が見えるカフェです。自宅が横浜なので主に横浜駅、みなとみらい近辺で電源が利用できるカフェというのをメモがてらまとめます。なお、自分が行ったことがあるところだけなのでそれ以外にもいっぱいあると思います。

ちなみにカフェで仕事する場合はプライバシーフィルター必須なのとできれば壁際席で壁を背にするといいです。

随時更新していきます。

ROYAL's Cafe & Shop 馬車道

tabelog.com

関内のリッチモンドホテルにあるカフェ。電源 & WiFi完備。混んでないしいい。ここはコーヒー豆にこだわりがあるようです。

Blue Terminal

tabelog.com

大さん橋にあるカフェ。大さん橋なのでフェリーターミナルです。国際客船も発着するので空港とかに近い独特の雰囲気があります。 ここの海に面したカウンター席に電源があります。海はもちろん、ベイブリッジや船も見えます。そして空いてます。

タリーズコーヒー 横浜みなとみらいビジネススクエア店

海は見えないです。店舗自体は大きくはないのですが空いていることが多いのと電源の数が多いです。

ドトールコーヒーショップ パシフィコ横浜ノース店

これは新しいドトールで、ここも海は見えません。正面にはカハラホテルが見えているのと花がいっぱいの通りが見えてます。 人が少なめなのもいいです。電源があるのはカウンター席だけ。

横浜ブルク13 Cafe OASE

tabelog.com

ここは桜木町駅前のコレットマーレにあるカフェです。横浜ブルク13という映画館の奥に隣接しているカフェで穴場なのか空いていることが多いです。 海は見えないんですが高いビルではあるので窓際のカウンター席だと景色はいいかも。電源があるのはこのカウンター席だけです。

ジョナサン 山下公園

カフェというよりファミレス。山下公園のすぐ近く。ビルの隙間から一応海が見える。壁際の席であれば電源があります。

ジョナサン 横浜北幸

ここもジョナサン。各席に電源あり。

ジョナサン 馬車道

ここも各席に電源あり

ディスプレイモニタの多い喫茶店 by UNI COFFEE ROASTERY

tabelog.com

マークイズのB4Fにあります。横浜発のコーヒーロースタリーであるUNI COFFEE ROASTERYが手掛けるコンセプト店です。 店名のとおりディスプレイのある席が多くあるのが特徴。雰囲気もいいです。

ディスプレイのない席にも電源あります。

僕はここのコーヒーは酸味が強くあまり好みじゃないです。が、使い勝手がいいのでよく利用しています。

ベックスコーヒーショップ 相鉄フレッサイン横浜駅東口店

横浜駅東口からほど近いホテルの一階にあるカフェです。 1人席に電源ついてます。 1日に30分×4回まで無料でWiFiが利用可能です。 静かだからか勉強とか仕事してる人が多い気がしますね。

Aile de Ange(エールアンジュ)

tabelog.com

関内駅のほど近くに2022年1月にオープンしたばかりのカフェです。 電源だけでなくWiFiもあるみたいですが、こちらのほうは利用しませんでした。 店の雰囲気は明るくていい感じです。店内には横浜デザイン学院の学生によるアート作品が飾られてて買うこともできるみたいです。

UNI COFFEE ROASTERY

tabelog.com

横浜発のコーヒーロースタリー。元町にあります。 電源、WiFi、ペット可で席数も結構多く明るいキレイな雰囲気です。 ただ、電源に関してはすべての座席にあるわけではないこと、WiFiの接続情報についてはわからずでした。 でも雰囲気はとてもいいのでおすすめの一つ。

Urth Caffe

tabelog.com

ここはベイクオーターにあるカフェ。おしゃれ感あります。 海とみなとみらいの街並みが見える窓際の席が一人席になっていて電源もあります。 なお、ここのホットコーヒーのラージサイズは本当にラージなので注意。

番外編・電源は使えないけど雰囲気のいいカフェ

電源は使えないけど雰囲気がよくてよく使ってるところです。

ZEBRA Coffee & Croissant 横浜店

tabelog.com

マリン&ウォークにあるカフェです。ここはかなり気に入ってます。海に面しているし、店の雰囲気もいい。最近は混んできたのが残念。

M.M MARKET & CAFE

tabelog.com

とても雰囲気のいいカフェ。ハワイアン風味。ホテルビスタのビルで場所はカハラホテルの斜め前くらい。

ヘミングウェイ

tabelog.com

桜木町の駅からほど近いところにある海上カフェ。カフェと言いつつもガッツリご飯も食べれる。

ここはなんと言っても海上かつオープンエアであることがよい。そして店の雰囲気自体が抜群に好み。

まとめ

横浜、みなとみらい近辺にはどこにでもあるチェーン系に加えて小洒落たカフェも多いです。本当はもっと個性的な店を見つけたいところなのですがなかなか見つからないですね。 今後も時折更新していきます。

古いMacBook(スペースグレイ)を高値で売りたければステッカーを貼るな

タイトル通りです。

事の経緯はですね、2019年の7月に購入したMacBook Proをずっと使ってたんですが、2021年にM1 MaxなMacBook Proに買い替えたんです。

僕は大体2年に1回くらいのペースでそのときの1番盛り盛りにしたスペックのMacBook Pro(MBP)を買い直すというサイクルで回してます。

当時買ったMBPは初めてのスペースグレイでした。ちなみに新しいMBPもスペースグレイです。

エンジニアと言えばラップトップに好きなステッカーを貼って飾りつけるという固定観念があるので僕もいくつかペタペタ貼ってました。

f:id:Keisuke69:20220310190920j:plain

で、その古いMBPをようやく誰かに売ろうと思い表に貼ってあったステッカーを剥がしたんです。

ステッカーを剥がすにはステッカー剥がしでもいいですが中性洗剤なんかがいいです。よく紹介されてますね。 そして糊が残っても除光液なんかでさって拭いてあげれば綺麗さっぱり消えるはず。

消えるはずだったんです。いや、これまではそれで綺麗になってたんです。

なのに今回はならない。

f:id:Keisuke69:20220310191020j:plain

なんだかステッカーの形でうっすらと跡が残ってる。最初は糊とかが残ってるのかなと思い何度も何度も拭いてみたりしました。でも消えない。

よくみると糊とかが残ってるというより日焼けのような褪色してるような感じです。

そこで色々とググったりソーシャルで聞いたりしてみました。

その結果わかったのはMBPの筐体表面はアルマイト加工されていて、スペースグレイは(というかシルバー以外は)色が乗ってるそうです。

今回の問題はその色素が退色しているということです。 つまりですね、ステッカーを貼って覆われている箇所以外の部分の色素が紫外線等により褪色しているということなんです。

これは知人に教えてもらったページです。アルマイトについて書かれています。

東信工業のアルマイト表面処理|アルマイト着色・染色|アルマイト処理のスペシャリスト|東信工業

ステッカーを貼っていた部分ではなく貼っていなかった部分が問題だった! で、これに関してはもうそういうものだということで回復の手段はなさそうです。くっ…

使用上は全く問題ないのですがこれでは売るとなったら価格ダウンは免れません。

対策としてはですね、スペースグレイの場合はステッカーを直接貼るのは避ける事。これくらいしかなさそうです。ケースとか被せた上から貼るしかないですね。 こういうスキンシールが市販されてるので試してみるといいかもしれません。 自分もとりあえず買いました。

ケースは嫌だけどステッカーでドレスアップしたい人はシルバーを買うのがいいでしょう。シルバーは色が乗ってないそうで褪色の心配もなさそうです。

とりあえず現在使用してるやつにはまだ貼ってなくて良かった。

この記事が間違っていて実は回復策があることを期待しています。もしあればぜひ教えてください。喜んで訂正ブログ書きます。

Amazon Aurora PostgreSQLでPostGISを使う

f:id:Keisuke69:20180318142151j:plain

はじめに

仕事柄、地理情報を扱うですがこれまでは件数も少なく込み入った処理もなかったのでファイルで出力されたものを参照するくらいでした。ただ、これだと今後の拡張性とかちょっと込み入ったことをするのになかなか難しいなーと思っていたこともありPostGISを試してみることに。もう一つ大事なきっかけとしてこれまでFirestoreに地理情報を一部保存していたのですが、これもちょっと込み入ったことするには全く向いてなくてそのために回りくどいことをゴニョゴニョと実装する必要性に迫られていたのです。

この「ちょっと込み入ったこと」ってのは例えばある地点から何メートル以内の情報だけ抽出するとかそういうのです。

PostGISって何?

PostGISってのはすごーくざっくり説明すると、PostgreSQLで地理情報を扱えるようにするための拡張モジュールです。地理情報を扱える、つまり地理情報システム(GIS)としてPostgreSQLを使うためのものだと思ってください。

緯度経度の情報などを単なる文字列とか数値として格納して扱うこともできますが、そうではなく地理情報を格納するためのデータ型が追加されるのでいい感じに扱えるようになります。また、単に地理情報を格納できるようになるだけでなく非常に多くの関数が用意されていて、文字列とか数値として格納するだけだとアプリ側で頑張って計算する必要があったものも関数だけで簡単に扱えます。例えば先にあげた特定の地点の範囲内の情報をクエリするなんてのもSQLと組み合わせて簡単にできるようになります。

開発はPostgreSQLとは独立していて、カナダのRefractions Research Inc.というところが開発しています。もちろんOSSです。

というわけでPostGISが使えそうと思った僕は早速本を買ったのですが日本語の本はあまりなくて結果的にこの本を買いました。困ったときのManning Publications。どうでもいい話ですがオライリーよりManning Publicationsの本のほうが買ってるの多い。SpringとかRabbitMQ、かつてはMongoDBなんかも買った記憶がある。

Amazon Aurora ?

Amazon AuroraってのはAmazon Web ServicesAWS)が提供するRDBMSのマネージドサービスです。詳細はAWSのサイトに譲りますが、エンジンとしてMySQLPostgreSQLを選べます。そしてこのPostgreSQLが昨年の秋くらいにPostGISに対応したのです。

Amazon Aurora PostgreSQL が PostGIS 3.1 をサポート

というわけで、PostGISが使えるならAuroraを使うに決まってるということで今回はAuroraでPostGISを試していきました。

セットアップ

まず、Auroraを使うのでそのインスタンス作ったりを最初にやる必要があるのですが、それ自体は本題じゃないので割愛します。ぶっちゃけマネジメントコンソールで画面ポチポチしてれば起動されます。素晴らしい。

インスタンスができたら早速接続するのですがここも割愛します。これは単にPostgreSQLのクライアントで接続するだけなので何も難しいことはありません。ドキュメントとおりにやればOK。

さて、インスタンスを作っただけではPostGISは有効になっていないようです。PostGISを使いたい場合はエクステンションを読み込む必要があるとのこと。

というわけでやっていきます。読み込むのはこの4つでいいらしい。以下の4つを psqlでデータベースにつないだ状態で実行していけばいいです。

CREATE EXTENSION postgis;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;

読み込み終わったら有効になってるか確認してみます。

postgres=> select * from postgis_version();
            postgis_version            
---------------------------------------
 3.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

無事に有効になったようだ。

続いて rds_superuser ロールにエクステンションの所有権を移してあげる必要があるらしい。何を言ってるかさっぱりですね。このあたりはAWSのAuroraを使う場合に必要となる作業です。

まず、\dn で所有権のリストが確認できます。

postgres=> \dn
    List of schemas
    Name    |  Owner   
------------+----------
 public     | postgres
 tiger      | rdsadmin
 tiger_data | rdsadmin
 topology   | rdsadmin

このtigerとかそのあたりのオーナーを rds_superuser にしてあげる必要があるということらしい。と言ってもこれも簡単で先ほどと同じく以下を実行するだけです。もちろん psql等でデータベースに接続した上で、です。

ALTER SCHEMA tiger OWNER TO rds_superuser;
ALTER SCHEMA tiger_data OWNER TO rds_superuser; 
ALTER SCHEMA topology OWNER TO rds_superuser;

終わったら、もう一度 \dn を実行。

postgres=> \dn
      List of schemas
    Name    |     Owner     
------------+---------------
 public     | postgres
 tiger      | rds_superuser
 tiger_data | rds_superuser
 topology   | rds_superuser

無事に変更されたようです。

続いて rds_superuser ロールにオブジェクトの所有権を転送する。何を言ってるからわからないがドキュメントにそう書いてある。これもドキュメントのコピペで実行します。

postgres=> CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$;
CREATE FUNCTION
postgres=> SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser;')
  FROM (
    SELECT nspname, relname
    FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) 
    WHERE nspname in ('tiger','topology') AND
    relkind IN ('r','S','v') ORDER BY relkind = 'S')
s;
                                exec                                
--------------------------------------------------------------------
 ALTER TABLE tiger.loader_variables OWNER TO rds_superuser;
 ALTER TABLE tiger.loader_lookuptables OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.tract OWNER TO rds_superuser;
 ALTER TABLE tiger.geocode_settings OWNER TO rds_superuser;
 ALTER TABLE tiger.tabblock OWNER TO rds_superuser;
 ALTER TABLE tiger.county OWNER TO rds_superuser;
 ALTER TABLE tiger.bg OWNER TO rds_superuser;
 ALTER TABLE tiger.geocode_settings_default OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_gaz OWNER TO rds_superuser;
 ALTER TABLE tiger.state_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_lex OWNER TO rds_superuser;
 ALTER TABLE tiger.state OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_rules OWNER TO rds_superuser;
 ALTER TABLE tiger.direction_lookup OWNER TO rds_superuser;
 ALTER TABLE topology.topology OWNER TO rds_superuser;
 ALTER TABLE topology.layer OWNER TO rds_superuser;
 ALTER TABLE tiger.place OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_state OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_state_loc OWNER TO rds_superuser;
 ALTER TABLE tiger.secondary_unit_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.cousub OWNER TO rds_superuser;
 ALTER TABLE tiger.street_type_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.edges OWNER TO rds_superuser;
 ALTER TABLE tiger.place_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.addrfeat OWNER TO rds_superuser;
 ALTER TABLE tiger.county_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.faces OWNER TO rds_superuser;
 ALTER TABLE tiger.countysub_lookup OWNER TO rds_superuser;
 ALTER TABLE tiger.featnames OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_lookup_all OWNER TO rds_superuser;
 ALTER TABLE tiger.addr OWNER TO rds_superuser;
 ALTER TABLE tiger.zip_lookup_base OWNER TO rds_superuser;
 ALTER TABLE tiger.zcta5 OWNER TO rds_superuser;
 ALTER TABLE tiger.tabblock20 OWNER TO rds_superuser;
 ALTER TABLE tiger.loader_platform OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_lex_id_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.county_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.state_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.place_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.cousub_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.edges_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.addrfeat_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.faces_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.featnames_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.addr_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.zcta5_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.tract_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.tabblock_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.bg_gid_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_gaz_id_seq OWNER TO rds_superuser;
 ALTER TABLE tiger.pagc_rules_id_seq OWNER TO rds_superuser;
 ALTER TABLE topology.topology_id_seq OWNER TO rds_superuser;
(53 rows)

終わったらこれもテストしてみます。

postgres=> SET search_path=public,tiger;
SET
postgres=> SELECT na.address, na.streetname, na.streettypeabbrev, na.zip
FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;
 address | streetname | streettypeabbrev |  zip  
---------+------------+------------------+-------
       1 | Devonshire | Pl               | 02109
(1 row)

postgres=> SELECT topology.createtopology('my_new_topo',26986,0.5);
 createtopology
 createtopology 
----------------
              1
(1 row)

というわけで下準備は完了。

早速試してみる

では早速テーブルを作ってみます。といっても普通のテーブル同様に create table で作成するだけ。地理情報をもたせる列はgeometry型で、ジオメトリタイプとSRIDというものも指定する。 ジオメトリタイプというのは地図情報を扱うとよく目にするPOINT、 LINESTRING、 POLYGONとかってやつ。それぞれMulti〜ってのもある。ここではとりあえずPOINTでやってみた。

また、SRIDってのは空間参照IDというものらしく、ArcGISのページによると

空間参照 ID (SRID) は、特定の座標系、許容値、および解像度に関連付けられた一意の ID です。

とのこと。こっちのブログにはもうちょっと詳しく載ってる。

PostGISで使用されるSRIDについて | JURI★GIS

正直なところ現時点では知識不足で何を選択したらいいかわからないが、このブログいわく世界でメジャーと言われる測地系WGS84と地理座標系の4326を選択してみよう。

postgres=> CREATE TABLE sample1 (
  gid SERIAL PRIMARY KEY,
  geo GEOMETRY(POINT, 4326)
);

DBに存在するジオメトリなカラムの一覧も検索できる。

postgres=> SELECT * FROM geometry_columns;
 f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid  |      type       
-----------------+----------------+--------------+-------------------+-----------------+-------+-----------------
 postgres        | tiger          | county       | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | state        | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | place        | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | cousub       | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | edges        | the_geom          |               2 |  4269 | MULTILINESTRING
 postgres        | tiger          | addrfeat     | the_geom          |               2 |  4269 | LINESTRING
 postgres        | tiger          | faces        | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | zcta5        | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | tabblock20   | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | tract        | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | tabblock     | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | tiger          | bg           | the_geom          |               2 |  4269 | MULTIPOLYGON
 postgres        | my_new_topo    | face         | mbr               |               2 | 26986 | POLYGON
 postgres        | my_new_topo    | node         | geom              |               2 | 26986 | POINT
 postgres        | my_new_topo    | edge_data    | geom              |               2 | 26986 | LINESTRING
 postgres        | my_new_topo    | edge         | geom              |               2 | 26986 | LINESTRING
 postgres        | public         | sample1      | geo               |               2 |  4326 | POINT

作ったテーブルに試しにデータ入れてみる。

SQLで入れるにはST_GeomFromText()っていう関数を使う。これはwkt形式で記述されたテキストを変換する関数。POINTに入れる座標はlongitude(経度)、latitude(緯度)の順で指定する。とりあえず東京駅の座標を入れてみます。

各地の座標はGoogle Mapで調べられる。Google Mapで座標を知りたい場所を右クリックすると表示されるのでそれをコピーすればいい。ちなみにGoogle Mapはlatitude、longitudeで表示されているので注意。

f:id:Keisuke69:20220309115317p:plain

実際に入れます。

postgres=> INSERT INTO sample1 (gid, geo) values(1,ST_GeomFromText('POINT(139.7671677130547 35.681436619443254)', 4326));
INSERT 0 1

無事にインサートできたので、この時点でselectしてみるとこんな感じです。

postgres=> select * from sample1;
 gid |                        geo                         
-----+----------------------------------------------------
   1 | 0101000020E6100000BFC34DA38C7861401D67AD5039D74140
(1 row)

ジオメトリ型のカラムに入ってるデータはそのままだと上記のような値になってしまう。ここは出力を変換する必要があるんだけどその関数も用意されている。それについては後ほど。

また、冒頭で述べたある地点から指定した距離内のレコードだけをselectするとかも簡単にできる。ここでは1件しかまだ入れていないんだけど、試しにGoogle Map上では900mほど離れているコレド東京の座標(経度139.77458133855586、緯度35.68270896117478)を使って試す。指定距離内を検索するのはST_DWithinという関数でできる。

postgres=> SELECT * FROM sample1 WHERE ST_DWithin(geo, ST_GeomFromText('POINT(139.77458133855586 35.68270896117478)', 4326), 500, true);
 gid | geo 
-----+-----
(0 rows)

注意が必要なのはこの ST_DWithin という関数は距離を指定できるんだけどその単位はSRIDによって異なる。今回使った4326だとが単位でその値は実際にはメートルだそうだ。なので指定したい距離をメートルで普通に入れる。

500m以内で検索すると当然引っかからない。というわけで1000mにしてみる。

postgres=> SELECT * FROM sample1 WHERE ST_DWithin(geo, ST_GeomFromText('POINT(139.77458133855586 35.68270896117478)', 4326), 1000, true);
 gid |                        geo                         
-----+----------------------------------------------------
   1 | 0101000020E6100000BFC34DA38C7861401D67AD5039D74140
(1 row)

無事に検索できた。でもこれだとなんだかわからない。というわけでジオメトリ型をGeoJSONに変換する関数である ST_AsGeoJSON()` を使って出力する。

postgres=> SELECT gid, ST_AsGeoJson(geo) FROM sample1 WHERE ST_DWithin(geo, ST_GeomFromText('POINT(139.77458133855586 35.68270896117478)', 4326), 1000, true);
 gid |                        st_asgeojson                         
-----+-------------------------------------------------------------
   1 | {"type":"Point","coordinates":[139.767167713,35.681436619]}
(1 row)

うむ、いい感じ。

CSVファイルをインポートしてみる

さて、もうちょっとガッツリとデータを入れたいなと思ったので手持ちのデータをインポートしてみることに。なお、PostgreSQLに用意されている COPYCSVファイル中にwkt形式で書かれた情報があれば自動的にジオメトリ型に変換してくれるらしいが、自分は横着してTwitterで教えてもらったposticoを利用した。超絶簡単に取り込めた。

こんな感じのCSVファイルを取り込む。

gid,geo
06dmUFSUzYzTZA8NodFi, LINESTRING (142.3849795 43.7489348,142.3849795 43.7489348,142.3850022 43.7489459,142.3850022 43.7489459,142.3850022 43.7489459,142.3849791 43.7489387,142.3849791 43.7489387,142.384979 43.7489386,142.384979 43.7489386,142.3849791 43.7489387,142.3849791 43.7489387,142.384979 43.7489386,142.384979 43.7489386)
09MSZxBYpOujH17lhogX, LINESTRING (142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849739 43.7489202,142.3849739 43.7489202,142.3849739 43.7489202,142.3849739 43.7489202,142.3849736 43.7489202,142.3849736 43.7489202,142.3849735 43.7489203,142.3849735 43.7489203,142.384973 43.7489204,142.384973 43.7489204,142.384967 43.7489213,142.384967 43.7489213,142.3849711 43.7489221,142.3849711 43.7489221,142.3849678 43.7489224,142.3849678 43.7489224,142.3849716 43.7489207,142.3849716 43.7489207)

このデータではidが文字列になってますが気にしないでください。実際には自分が定義したテーブルの型にあわせてもらえればと思います。

このLINESTRING(lon1 lat1, lon2 lat2)ってのがwkt形式です。経度と緯度の組み合わせを空白区切りで書いて、各地点をカンマ区切りで記す感じです。これはLINESTRING(つまり地点を結んだ線の表現)の場合ですがPOLYGONとかも同じような感じで記述します。

wkt形式ってのは Well-known textのことで ベクタ形式幾何学オブジェクトを投影法 (地図)を基に変換し地図上に表現させるマークアップ言語であるWikipediaに書いてありました。

なお、注意点というか当たり前ではあるんだが地理情報がPOINTとLINSTRINGとかPOLYGONとMULTIPOLYGONで混在しているとダメなのでそれだけ気をつけてください。まあ同じ列に異なる型の値が入らないってだけなので当たり前の話なんだけどね。

最後にこれはPostgreSQLPostGISも関係ないんだけど今回CSVインポートに使ったGUIPostgreSQLクライアントツールであるposticoではなぜか上記のCSVだとうまく認識されず、wktの中身がカンマ区切りで認識されてしまった。LINESTRING全体をダブルクオーテーションでくくったりしたけどダメ。でも似たデータのほうは問題なく認識される。何が原因かはわからなかったけど今回は列の区切り文字をカンマではなくセミコロンにすることで対応しました。つまりComma Separated ValueではなくSemicolon Separated Valueになってしまった。だが特に支障はない。

インデックスを作成する

もちろん普通にインデックスを作成することもできる。通常の列に対するインデックスは普通のDBと同じように作ればいい。

PostGISの場合にはジオメトリ型の列を対象にした空間インデックスも作成が可能になっていて、この場合はGiSTインデックスを作成することになる。GiSTってのはGeneralized Search Treeという意味らしい。詳細はこちら。

汎用検索ツリー - Wikipedia

とにもかくにもGiSTインデックスを作るにはこんな感じでDDL分を実行すればいい。

CREATE INDEX ix_sample1_geo ON sample1 USING GiST (geo);

まとめ

というわけでAWSのAurora PostgreSQLを使ってPostGISを試してみた。試してみた結果、どうしようかなーと思っていた実際のワークロード上の課題もPostGISを使うことで簡単に解決できそうなことがわかったので実際に導入してみようと思う。

ちなみに、試すにあたってはこのブログに書いた内容の後にPostGISをバックエンドにしたAPIをいくつか実装した。

AWS Amplifyを使ったReact NativeなアプリをBitriseでビルド

はじめに

今回、React Nativeで開発しているとあるアプリでAWS Amplifyを使ったのですがBitriseでビルドしたりチーム開発で使うにあたってちょっと困ったりしたのでメモ。

前提

もともと自分は以前にこちらの記事でも書いたようにAWS Amplifyについてはそんなにポジティブではないです。なのでこの記事以降も基本的にはあまりwatchしてきませんでした。なので今回ちょっと苦労したのはAmplify弱者だったことも理由かも知れない。

www.keisuke69.net

ただし、Amplify Consoleはいいぞ。これはプロダクションでも2,3使ってる。

また、React Nativeで開発したアプリはAndroidiOSともにBitriseを使ってビルドをしています。これはリポジトリの特定ブランチにpushされたことをトリガーに毎回自動的に実行され、常に最新のビルドが確認可能という状況にしています。 なお、App Storeへの配布まではまだ自動化していないです。

なぜAmplifyを使ったか

先の自分のブログ記事にもあるように基本的にAmplifyはAppSyncとの組み合わせ以外で積極的に使う理由はないと思っています。

ではなぜ今回AWS Amplifyを使ったかというとS3に対してマルチパートアップロードを実装するにあたり、素のAWS SDKを使って実装するより楽に実装できそうだったからです。具体的にはこのあたりに書かれています。JavaScriptの場合です。

docs.aws.amazon.com

マルチパートアップロードを行おうと思うといろんなお作法が必要になってくるんですね。さらに一時停止とか再開とかそういうのも。

それがAWS Amplifyではユーティリティが用意されていてかんたんに実装できるんですね。このあたりの話です。

aws.amazon.com

この発表はAmplify for JavaScriptとなっていますが、React Nativeでも使えます。ドキュメントはこのあたり。

https://docs.amplify.aws/sdk/storage/transfer-utility/q/platform/ios/#upload-a-file

圧倒的に楽そう。ということでAWS Amplifyを使うことにしたのです。

Bitriseでビルドする

AWS Amplifyを使った実装自体はそんなにこれといった話はないのですが、いざある程度出来上がったのでリポジトリにpushしてBitriseでのビルドパイプラインに載せます。

そうすると、aws-exports.jsというファイルがなくてビルドでエラーになります。実はこれはBitriseだけの話ではなく、Amplifyを初期セットアップしたときのままGitとかで管理していて他の環境でcloneしたときにも同様の問題はおきます。

原因はこのaws-exports.jsというファイルが.gitignoreに追加されていてコミットされていないからです。

ではこのファイルは何なのかというと、AmplifyのEnvごとのAWSリソースのリソース名とかが記述されたファイルです。つまり、アップロード先のS3バケットの名前とかが書かれている。ではなぜこのファイルが標準では.gitignoreに追加されていてコミットされないようになっているのか。当初、リソース名が記載されている、つまりクレデンシャル自体の記述はないもののいわゆる秘匿情報みたいなものとして扱われていて事故防止のためかと思いました。

ですが、同じように利用するAWSのリソース名のような情報が記載されているamplify/team-provider-info.json.gitignoreに含まれていません。どうやら、AmplifyにはenvというGitのブランチのような機能があり、aws-exports.jsはこのenvが切り替わるたびに中身が自動的に書き換えられるみたいなんですね。だからコミットの対象外にされているだけのようです。

というわけで今回の問題の対処はリポジトリには含まれていないにも関わらずソースコード内からは参照されるaws-exports.jsをcloneしたあとにどうやって生成するかになります。

ではどう対応するか

Amplifyをチーム開発する場合にどう使っていけばいいのかの知見がなくて、このあたりよくわかっていませんでした。またaws-exports.jsenvの内容が記載されているということで当然ながら開発時と本番では接続するAWSアカウントも違えばAWSリソースも異なるのでその切替も必要になるのでどうしたものかと悩んでたものの、Twitterで聞いたところいろんなアイデアが得られました。

いくつかやり取りした結果、aws-exports.jsの中身が単なるAWSリソース情報がベタ書きされていて、オブジェクトをexportしているだけのものであるということから同様の値を環境変数で設定し、それを読み取って自分でオブジェクトとして組み立ててAmplify.configure()に渡す形で実装を変更しようかなと考えました。これなら開発と本番(≒Bitriseでビルドしたもの)で切り替えるのも容易かなと思ったわけです。

とはいえ、Amplifyのためにこんな実装入れるのもなーとか思ったり、セットする環境変数の数も多いしなーということでなかなか前向きではなかったんですね。

ここでそもそもチーム開発しているときにこの辺どうやればいいのかを調べたところ、どうやらリポジトリをcloneしてamplify pullをすればこのあたりのファイルも生成されるということがわかりました。

ですが、これをやるにはAWSのクレデンシャルやらが必要なのでamplify initやらをしなければいけないのかな?と思っていたところどうやらAmplify CLIのヘッドレスモードだと大丈夫そうということでこの方向でやることにします。

Bitriseでどうやるか

とりあえずリポジトリをcloneしたらAmplify CLIを使ってpullすればいいということでこれをBitriseのWorkflow上で実現していきます。

まず、その前にプロジェクト上で開発と本番それぞれのenvを作成しておきます。自分の場合、もともと開発初期のセットアップ時にdevというenvを用意していてこれが開発用のAWSアカウントに紐付いていました。AWSリソースもこの開発用AWSアカウント上で作られています。

なので、まずは本番環境用のenvとしてprodというものを作っておきます。このときAWSアカウントごとわけられるのか気になったのですが、結果的には問題なくできているようです。実際にはamplify env add prodをするときにAWSアカウントを聞かれたので本番環境のAWSのアカウントで作成したクレデンシャル情報(Acesss KeyとSecret Access Key)を指定することができたんですね。で、envを作成したらamplify pushをして反映しておきます。実際に本番環境のAWSアカウント上に各種リソースが作成されたことが確認できました。

というわけでようやくここからBitriseの設定をしていきます。

実際にはWorkflowでビルドのステップの前にscriptのステップを追加し、ここでenvの情報をpullするという処理を入れます。というわけで実際に入れた処理がこちら。

#!/usr/bin/env bash
set -e
set -x

npm install -g @aws-amplify/cli

AMPLIFY="{\
\"appId\":\"<appId>\",\
\"envName\":\"prod\",\
\"defaultEditor\":\"code\"\
}"

AWSCLOUDFORMATIONCONFIG="{\
\"configLevel\":\"project\",\
\"useProfile\":false,\
\"accessKeyId\":\"<AWS_ACCESS_KEY_ID>\",\
\"secretAccessKey\":\"<AWS_SECRET_ACCESS_KEY_ID>\",\
\"region\":\"ap-northeast-1\"\
}"

PROVIDERS="{\
\"awscloudformation\":$AWSCLOUDFORMATIONCONFIG\
}"

REACTNATIVECONFIG="{\
\"SourceDir\":\"src\",\
\"DistributionDir\":\"build\",\
\"BuildCommand\":\"yarn build\",\
\"StartCommand\":\"yarn start\"\
}"

FRONTEND="{\
\"frontend\":\"javascript\",\
\"framework\":\"react-native\",\
\"config\":$REACTNATIVECONFIG\
}"

amplify pull --amplify $AMPLIFY --frontend $fRONTEND --providers $PROVIDERS --yes

冒頭でAmplify CLIをBitriseの環境にインストールしています。ちなみにyarnでAmplify CLIをインストールしようとすると変なエラーに悩まされることが多いのでnpmで入れたほうが無難。自分はこれで数時間溶かしました。

各値は各々の環境の値で置き換えてください。

補足すると、AMPLIFY内で指定しているappIdはAmplifyのプロジェクトのappIdAWSのマネージメントコンソールやteam-provider-info.jsonに記載があるのでそちらを指定。PROVIDERおよびAWSCLOUDFORMATIONCONFIGで指定してるaccessKeyIdsecretAccessKeyIdAWSアカウントのクレデンシャル情報ですね。あとはFRONTENDのところで今回はReact Nativeのプロジェクトなのでframeworkreact-nativeと指定しています。ただ、このあたりはドキュメント読んでも正直よくわからない。

最後のamplify pullコマンドで上で指定した値をすべてパラメータとして渡した上で--yesというオプションを付与して実行します。この--yesをつけることでプロンプトが表示されなくなるというものです。

とはいえ、このパラメータはちょっと面倒すぎるしもうちょっと説明が欲しいところ。面倒くさいぞAmplify CLI!

このscriptステップをBitriseのWorkflow上の適当な位置に追加します。自分はこんな感じでCocoapodのインストールが終わったあとに追加しましたがXCodeでのArchiveより手前であればどこでも大丈夫かと思います。

f:id:Keisuke69:20220209103713p:plain

まとめ

というわけでAWS Amplifyを使ったアプリをBitriseのようなCI/CD環境でビルドしようとするとそのままだとaws-exports.jsが存在しないためビルドに失敗します。そのため、ビルド前にamplify pullをして環境にあったaws-exports.jsを生成する必要があります。今回これはCI/CD環境でのビルドの話として書いたけど、これはチーム開発で別の人がリポジトリをcloneしたときに必ず発生する問題かと思います。

率直な感想としてやっぱりAmplifyは面倒だなと感じました。簡単にしようとして余計なことしてくれてる感じ。やっぱりそんなに便利には感じないな。

今回使った理由がS3のマルチパートアップロードのユーティリティを使いたいがためだけというものだったので余計にそう感じました。というかこのユーティリティをAWS SDK自体で用意してほしい。

成田空港での水際対策が凄かったけど体力的にはきつかったので記録しておく

f:id:Keisuke69:20170518110203j:plain

※ 当初、成田空港での検査を「PCR検査」と書いていましたが正確にはPCRが検査ではなく「抗原検査」でした。該当箇所は単に「検査」と修正しました。

はじめに

実は2022年の1月22日から10日ほど仕事でブラジルに行ってました。2年ぶりの海外出張です。 今回は仕事は仕事なんですがJICAの調査ミッションでもあるため公用旅券での渡航です。

f:id:Keisuke69:20220202112251j:plain

というか公用旅券なんていうものの存在を初めて知ったよ。 経路としてはJICAでブラジルに飛ぶ場合の規定ルートとされているカタールのドーハ経由です。これがかなり遠い。片道だいたい30時間くらい。 とはいえ行きは機上のの時間が長いくらいで、それはそれで疲れるもののブラジルはサンパウロに到着してしまえばサクッと入国して市街に行けるわけです。自分の場合、実際にはサンパウロからそのまま飛行機に乗ってベロオリゾンテというところまで行ったのですが。 問題は帰りです。 帰国時の成田空港での話は噂で色々聞いていたもののどうも実態がよくわからなかったのですが、晴れて体験してきたので思い出がてら記しておきます。 あくまでも2022年2月1日時点の僕の場合の話ですので違うケースがあるかも知れません。

ブラジル出国前後

さて、ブラジルはサンパウロから出国するにあたっては行きと同様に出発72時間前のPCR検査結果、いわゆる陰性証明書というのが必要になります。 これはサンパウロで手配して普通に取得しました。自分の場合、現地の旅行会社で日本語が通じるFTSツーリズモさんで手配しました。こちらで手配した場合は滞在先のホテルまで検体を取りに来てくれます。ただし、検体取りに来てくれるスタッフはポルトガル語だけで日本語はもちろん英語も通じません。

PCRテストの陰性証明書が取得できたらそれを航空会社へのチェックインのときに見せるだけですが、航空会社職員は何かのリストを紙で持っていて名前で照合してました。これが何かはわからない。 あとは普通に乗るだけですが、日本に入国する際に必要になるものとしてアンケート2種類と誓約書が必要になります。 アンケートは1種類は機内で配られたのですがもう一つは後で配られました。誓約書は事前に印刷しておくとスムーズかと思います。

受付

飛行機自体は17:30に着陸。機体から降りるのはすぐだったけど飛行機から降りたら列に並んで待機させられる。 一通り集まったら係の人に先導されてみんなでゾロゾロ移動して、しばらく歩いたら着席して待機させられる。ここはブロック分けされていて各ブロックにパイプ椅子が設置されている。隣の人と椅子が結構近いので感染力の強いオミクロンだとここで感染するんじゃないか?w 実際に隣のパキスタン人家族は咳き込んでたりしたので少し気にはなった。

なお、このあたりからは写真撮影禁止とのことだったので写真とかはない。

さて、ここでアンケートに回答したりその回答内容を係の人が確認したりされつつ、受付を待つ。なお、実績としてこの待機だけで既に1時間ほどかかった。

受付自体は誓約書などの書類の確認がメイン。アンケート結果とかを確認しつつ、いくつか滞在先などについて確認されたりもした。

検査

受付してからのオペレーションはスムーズ。

検査に進むのだが、このタイミングで採取容器が渡され番号が割り振られる。この番号はパスポートの裏にシールで貼られる。以降、この番号で呼び出し等が行われる。 そして、サクッと検査用の検体を採取。検査は唾液を採取するタイプ。なお、30分前から飲食禁止となっており喉が乾くかもしれないので、そうすると辛そう。 唾液の採取ブースは一人ひとり分けられていて左右も区切られている。正面の壁に唾液を促すために梅干しの写真が貼られていて微笑ましい。

唾液の採取が終わったら、また移動して待機期間中に使うアプリ「MySOS」への登録と説明がある。位置情報とビデオ電話で部屋にいることをチェックするというアプリ。

これが終わったらまた移動して書類やパスポートなどを確認した後、待機所の座席位置が案内される。ここまで大体2時間。だが、ここからが長かった。

待機

待機自体は広い場所にアルファベットでブロックに区切られていて、ちょっといいパイプ椅子が並べられていて番号が割り振られている。ちなみに自分はH4だった。

ここで自分の検査の結果が出るのを待つ。番号で呼び出されるんだけどこれが音声による案内のみ。日本語と英語。また、呼び出される順番は必ずしも番号順ではないのであとどのくらいかの目星もつかないのが辛かった。

なお、自販機で水とかちょっとした飲み物は買える。ここはキャッシュレスOKの自販機だった。SuicaとiDがあるのは確認した。ただし、水のペットボトルは途中で一度だけ配られる。

待機中は基本的にやることがないがPCやスマホの利用は禁止されていないのでそのあたりを使いつつ過ごすことになるんだけど、ちょっといいパイプ椅子でしかないのでPCの作業は首が痛くなる。そして椅子の周りに電源はない。

待機中は音声でアナウンスされるんだけど、番号のアナウンスがよく聞き取れないときもある。番号が表示されてると助かるんだがそういったものはない。したがってスマホやPCで映画とか見ていても呼び出しが始まったら一旦停止して耳を傾ける必要があった。

この待機中、待機所に関するアナウンスも流れていてかなり混雑していること、それゆえに希望には応えられない可能性が高いこと、テレビやアメニティがない場合もあるということが案内されていて不穏な雰囲気。

この待機がとにかく長い。自分の場合は最終的に6時間ほどかかった。これは小さい子どもがいるとかなり大変だと思う。

また、これだけ長いとお腹も空いてくるんだけど食べ物を買うような場所はない。一応不定期に食事(パン?)の配給があったようだが、不定期な上にくまなく全員にというわけでもないらしく、自分のいるブロックには回ってこなかった。このあたりは謎。

いずれにせよ、食べ物が取れることは期待しないほうがいいと思う。子どもなんかは空腹を我慢できなくなると思うので何か食べるもの、お菓子とかを機内持ち込みしておいたほうがいい。なぜならこの待機所のタイミングではまだ入国はしておらず、預け入れ荷物の受け取りもできないため。小さい子どもがいる場合はベビーカーも可能なら機内持ち込みしたほうがいい。赤ちゃんを寝かしておくような場所はない。

大人も可能ならば着陸前にしっかり食べておいた方がいい。また、待機が長時間化するにつれて諸々のバッテリーが無くなってくるのでこのあたりも要注意。自分はモバイルバッテリーでしのいだ。

係の人に聞いたところ3時間から4時間待つことも多いとのこと。なお、最後のほうはアナウンスで現在残っている人たちは全員陰性であること、待機所への配送に時間がかかっているという案内がされるようになった。したがって陽性だった人がどういう感じのオペレーションだったかはわからない。

そして、待つこと6時間、ついに自分の番号が呼ばれた。この時点で期待着陸からはすでに8時間経過している。自分の場合はこの時点で午前1時30分くらいだった。30時間のフライトのあとでこれは正直きつい。

入国

長い長い待機の後、自分の番号が呼ばれたらついに入国へとすすめる。ここは普通に検査結果が陰性だったことを示すピンクの紙をもらって進むだけ。

f:id:Keisuke69:20220202113632j:plain

入国手続きも通常と変わりない。ここは顔認証でさくっと。

入国が終わったらようやく預け入れ荷物を受取る。当然ながらここまでで8時間以上経過しているのでターンテーブルでぐるぐる回っているわけではなく、一箇所に集められているので自分の荷物を探してピックアップ。これバゲージロストしてたらさらに辛いな。荷物を取ったら税関へ。

なお、2年ぶりに海外に行ったんだけど税関申告書を紙じゃなくてアプリからもできるようになってた。紙に書く内容をアプリで入力してQRコードが表示されるのでそれを機械に読み取らせるだけ。早いけど結局出たところで待機なのであまりかわらないかも。

護送

荷物も受け取って無事入国したら今度は待機所までのバス待機で並ばされる。ちなみに自分の向かう待機所についてはこの時点ではまだ聞かされてない。先人の話では地方とかになるケースもあるって聞いていたのでドキドキしていたけど流石にここまで来たら近郊だと信じたい。

ここでバスに乗るのにまた待機。今度は立って30分ほど待機。お腹が空いていたのとこのあと食べられるかもわからないので、このバス待ちしてる場所のすぐ近くにあるあの吉野家で待ってる間にちゃちゃっと食べたかった。無理だけど。

f:id:Keisuke69:20220202113654j:plain

なお、自分はいつもは借りないグローバルWiFiを今回は借りていた。事前に問い合わせていたときには隔離のために返却が遅れる場合は延期分は無料でOK、返却は実費で宅配でってことだったのだけれどバス待ちの間に返却できました。係の人に言って待機中にグローバルWiFiのカウンターにある返却ボックスに入れてきました。

行き先はバスに乗る時に聞いたらようやく教えてくれた。自分の場合は池袋だった。最悪パターンの地方ではないもののまあまあ成田空港からは距離のある場所だ。でもこの時点ではホテルとかはわからず。ちなみに自分は今の家に引っ越す前に池袋に済んでいたので少しテンションがあがった。意味ないけど。

さて、2時20分くらいにバスは出発。本当はバスの中で寝たいところだけど時差のせいか気持ちが高ぶっているせいか全然寝れない。なお、バスはトイレないタイプなので事前にしておいたほうがいいかも。特に子ども連れの人は注意。

待機所到着〜入室

バスに乗って1時間ほど立って到着。この時点で自分の待機場所が池袋サンシャインシティプリンスホテルだということを知る。これは当たりかも知れない。

まずは荷物を先に出すのでその間バス内で待機。二人ずつ降ろされてスタッフの人に先導されて受付場所へ。ロビーみたいなところにパイプ椅子が並んでるのでここに座って待機。この時点でもう3時30分。

資料が配られて待機所に関する説明を受け、その後一人ひとりチェックインみたいなことをしてルームキーを受け取る。配られた資料の一部、滞在のしおりを参考までに晒しておく。

f:id:Keisuke69:20220202112920j:plainf:id:Keisuke69:20220202112926j:plain

その後、エレベータで自分の部屋のある階にあがるのだがこのエレベータも一人一人乗るようになっていて徹底されている。

また、この時点で本日分のお弁当配布は終了しているため、代わりにカップヌードルを用意しておいたとの案内があり、受け取る。これはありがたい。

結局、最終的に4時くらいに部屋に入室。着陸してから10.5時間後だ。これはなかなか大変。 ただ、待機所が池袋サンシャインシティプリンスホテルなので事前に聞いてる話からするとこれは大当たりだったと思っている。部屋はダブルベッドのシングルルームだし、待機所のアナウンスでは「ないかもしれないけどごめんね」って言われていたテレビにWiFiもあるし、アメニティとかも全部揃ってる。スリッパもある。また、一部の人からは暖房がなく寒いって聞いていたが、もちろん暖房もあった。

f:id:Keisuke69:20220202112551j:plain f:id:Keisuke69:20220202112548j:plain f:id:Keisuke69:20220202112620j:plain f:id:Keisuke69:20220202112624j:plain

さらに、プリンスホテルなのでポットにコップ、お茶なんかもある。ペットの水も6本ほど用意されていた。冷蔵庫もあり。

f:id:Keisuke69:20220202112607j:plain f:id:Keisuke69:20220202112604j:plain

ホテルのポットは使いたくないので自分の持ってるやつを使うけど暖かいものが何も取れないって聞いてたけどそんなことはなさそう。早速自分でコーヒーを入れた。 ちなみに自分はそれ対策にフリーズドライカップとカトラリーも持参してたがなくても平気だったかもしれない。

そんなこんなでカップヌードル食べたり、健康観察アプリの登録したりして5時30分くらいに就寝。

最後に感想など

日本の水際対策は思っていたよりしっかりちゃんとやっていてすごいなと思う反面、体力的にはかなりきついし、時間的にもかなりかかる。長時間のフライトの直後でこれは高齢者や子どもなど体力があまりない人にはかなりキツそう。

また、待機期間が明けてもホテルから直接自宅へ帰れるわけではなく、一旦成田空港まで戻ってからの帰宅になるらしい。もちろん公共交通機関は使えず、自家用車かハイヤーだ。

一方でブラジルで見た街の様子や、実際にオミクロン株に感染した知人の話を聞く限りここまでして守るものって何だろうかというのも正直な感想としてある。ブラジルでは入国時の隔離はない。高齢者などもいるから自分の置かれた状況だけでは一概に言えないのはわかるし、いろんな視点・観点があるのでこれに関しては議論をするつもりはない。

また、我々も大変だけどこのオペレーションをしているスタッフの人たちの負担も相当なものだろう。実際に待機所では長期間の待機に苛立ちをスタッフにぶつけている人もいた。

とにもかくにも早く正常に戻って欲しいと願うばかり。

©Keisuke Nishitani, 2023   プライバシーポリシー