旅する医用工学者

臨床工学技士国家試験,第1種ME技術実力検定試験,第2種ME技術実力検定試験のまとめBlogです.受験勉強や学校の授業の予習・復習にお役立てください.内容の正確性には留意していますが,これを保証するものではありません.

Arduino Nano互換ボードでパルスオキシメータ製作

【注意】本記事にて製作したデバイスは診断を目的としたものではありません。COVID-19が疑わしき場合は、保健所およびかかりつけの医療機関等にご相談願います。

Notice: This pulse oximetry system is NOT for patient diagnose. In case of suspected COVID-19, you should contact health and medical services.

 

 COVID-19のパンデミックの中、パルスオキシメータに対する注目が高まったのは記憶に新しいと思う。理由は至極単純、肺炎になればSpO2が低下する、すなわちSpO2が重症度の目安として使えそうだというのだ。

 仕事柄、職場に行けばパルスオキシメータなんぞ自由に使える。しかし、問題は自宅で悪化したときだ。今、我が家にはパルスオキシメータなどない。家庭用の安物は精度や確度に難があるとの報告もあった。

 かといって、職場に出入りしている業者さんやメディカルスタッフ向けの通販経由で医療用のパルスオキシメータを買ってしまうと、本当に必要な施設への供給を妨げることになってしまう。メディカルグレードでないにせよ、自宅療養やホテル療養の患者様に貸し出されているとのことなので、既製品を購入するのは躊躇われる。

 さらに、パルスオキシメータというのは家庭用でさえ最低でも1万円程度、そこそこのグレードでは2~3万円程度と結構値が張るのだ。したがって、おいそれとは購入できない。医療現場のため、自分のお財布のため、ちょっと我慢しよう……と思わなくもないが、あったら万一の際に便利だ。

 

 だったら、作ればいいよねっ?!

 

……というわけで、パルスオキシメータを作ることにした。

 ブレッドボードにArduino NanoとMAX30102とSSD1306OLEDディスプレイを載せ、ジャンパワイヤでI2C接続する。たったこれだけのいたってシンプルなシステムだ。

 今回私が使ったのは正確には本家Arduino Nanoではなく、Arduino Nano互換ボードだ。しかし、本家Arduino Nanoと遜色ないレベルでありながら価格も手頃だ。適当にAmazonやら秋月やらRS componentsやらで購入すればよい。参考までに、私が使用したKKHMF製のArduino Nano互換ボードおよび各パーツのAmazonリンクを付しておく。

 

 

 

  今回、私が利用したKKHMF製ボードにおける使用ピンは5V, GND, A4=SDA , A5=SCLだ。 一応、各ピンの用途を説明しておこう。5Vは電源線、GNDはGroundの略で接地(アース)線を、SDAはSerial Dataの略で信号線を、SCLはSerial Clockの略でクロックラインを意味するものだ。

 5Vの電源線は当然のごとく電源供給のためのラインだ。これがないとI2C接続されたデバイスは当然動作しない。

 GNDは0Vの電位基準であるとともに、回路を構成する帰線でもあるため、当然だがこれも接続しないとうまく動作しない。

 シリアル形式のデジタル伝送においては、クロックラインに送られるクロックパルスに同期して信号線の信号を読み書きするのだ。

 

f:id:medicalengineer:20210504221153p:plain

pulseoximeter schema

 さて、接続ができたら、母艦となるPC(今回はRaspberry Pi 4を使用)上のArduino IDE上でソースコードを打ち込む。正確にはArduino言語なのだが、ほとんどC言語と同じような感覚でコーディングできる。どうでもいいけど、Cは直感的なコーディングができるから初学者にとってはわかりやすくていいと思う。参考のため、ソースコードを記しておこう。



// ************************
// Arduino Pulse Oximeter
// ************************


// Include libralies
#include <wire.h>
#include <adafruit_gfx.h>
#include <adafruit_ssd1306.h>
#include <max30105.h>


// Definition for OLED
Adafruit_SSD1306 display(-1);
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels


// Definition for MAX30102
MAX30105 particleSensor;
#define MAX_BRIGHTNESS 255


// Constants for threshold and initial value
const uint32_t THRESHOLD_FINGER_DETECT = 7000;
const int32_t THRESHOLD_PULSE_UP_EDGE = 120;
const int32_t MIN_INIT = 9999999;
const int32_t MAX_INIT = 0;


// Limitation of HR and SpO2
const uint32_t LOWER_LIM_HR = 30;
const uint32_t UPPER_LIM_HR = 180;
const uint32_t LOWER_LIM_SPO2 = 70;
const uint32_t UPPER_LIM_SPO2 = 100;


// Valuables to pulse detect
long l_time = millis();
int32_t prev_irValue = 0;
int32_t prev_diff = 0;
int32_t diff;
long pulse_interval = -1;


// Constants and valuables for moving average
const int FRAME_REF = 20;
const int FRAME_SPO2 = 5;
const int FRAME_HR = 1;

long sum_ir;
long sum_red;
long sum_spo2;
long sum_hr;
int cnt_ref = 0;
int cnt_spo2 = 0;
int cnt_hr = 0;

long data_ir[FRAME_REF];
long data_red[FRAME_REF];
long data_spo2[FRAME_SPO2];
long data_hr[FRAME_HR];

long irValue_dc = 0;
long redValue_dc = 0;
double spo2_avg = 0;
double hr_avg = 0;


// Keep minimum and maximum value
int32_t min_irValue = MIN_INIT;
int32_t max_irValue = MAX_INIT;
int32_t min_redValue = MIN_INIT;
int32_t max_redValue = MAX_INIT;


void setup() {
// put your setup code here, to run once:
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Starting System");
display.println("Please Wait");
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Pulse");
display.println("Oximeter");
display.display();
delay(2000);


// Initialize sensor
particleSensor.begin(Wire, I2C_SPEED_FAST); //Use default I2C port, 400kHz speed
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running


byte ledBrightness = 0x1F; //Options: 0=Off to 255=50mA
byte diffmpleAverage = 8; //Options: 1, 2, 4, 8, 16, 32
byte ledMode = 2; //Options: 1 = Red only, 2 = Red + IR, 3 = Red + IR + Green
int diffmpleRate = 400; //Options: 50, 100, 200, 400, 800, 1000, 1600, 3200
int pulse_intervalWidth = 411; //Options: 69, 118, 215, 411
int adcRange = 4096; //Options: 2048, 4096, 8192, 16384

 

// Initialize array for moving average
// For irValue and redValue
int i_ref;
for (i_ref = 0;i_ref < FRAME_REF;i_ref++){
data_ir[i_ref] = 0;
data_red[i_ref] = 0;
}
sum_ir = 0;
sum_red = 0;

// For SpO2
int i_spo2;
for (i_spo2 = 0;i_spo2 < FRAME_SPO2;i_spo2++){
data_spo2[i_spo2] = 0;
}
sum_spo2 = 0;

// For HR
int i_hr;
for (i_hr = 0;i_hr < FRAME_HR;i_hr++){
data_hr[i_hr] = 0;
}
sum_hr = 0;

// Set initial values
prev_irValue = particleSensor.getRed();
l_time = millis();
}

 

void loop() {
// put your main code here, to run repeatedly:
long irValue = particleSensor.getRed(); //Reading the IR value
long redValue = particleSensor.getIR(); //Reading the Red value


// Finger detect
if(irValue < THRESHOLD_FINGER_DETECT || redValue < THRESHOLD_FINGER_DETECT) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Put your");
display.println("finger");
display.display();
return;
}


// Moving average
if(cnt_ref == FRAME_REF){
cnt_ref = 0;
}

// For irValue
if(data_ir[cnt_ref] != 0){
sum_ir -= data_ir[cnt_ref];
}
data_ir[cnt_ref] = irValue;
sum_ir += data_ir[cnt_ref];
irValue_dc = sum_ir / FRAME_REF;

// For redValue
if(data_red[cnt_ref] != 0){
sum_red -= data_red[cnt_ref];
}
data_red[cnt_ref] = redValue;
sum_red += data_red[cnt_ref];
redValue_dc = sum_red / FRAME_REF;

// Increment
cnt_ref++;


// Keep minimum and maximum values to calculate irValue_ac and redValue_ac
if(irValue < min_irValue){
min_irValue = irValue;
}
if(irValue > max_irValue){
max_irValue = irValue;
}
if(redValue < min_redValue){
min_redValue = redValue;
}
if(redValue > max_redValue){
max_redValue = redValue;
}

 

// Calculate HR and SpO2 if pulse was detected
diff = prev_irValue-irValue;
if(prev_diff < THRESHOLD_PULSE_UP_EDGE && diff > THRESHOLD_PULSE_UP_EDGE){
// Calculate pulse interval
pulse_interval = millis() - l_time;
l_time = millis();


// Calculate HR
double hr = 60000 / pulse_interval;


// Calculate AC components
int32_t irValue_ac = max_irValue - min_irValue;
int32_t redValue_ac = max_redValue - min_redValue;


// Calculate R
double r = (double(redValue_ac) / redValue_dc) / (double(irValue_ac) / irValue_dc);


// Calculate SpO2 from r
double spo2 = (-45.060 * r * r + 30.354 * r + 94.845);


// Initialize minimum and maximum values
min_irValue = MIN_INIT;
max_irValue = MAX_INIT;
min_redValue = MIN_INIT;
max_redValue = MAX_INIT;


// Moving average for SpO2
if(cnt_spo2 == FRAME_SPO2){
cnt_spo2 = 0;
}
if(data_spo2[cnt_spo2] != 0){
sum_spo2 -= data_spo2[cnt_spo2];
}
data_spo2[cnt_spo2] = spo2;
sum_spo2 += data_spo2[cnt_spo2];
spo2_avg = sum_spo2 / FRAME_SPO2;
cnt_spo2++;


// Moving average for HR
if(cnt_hr == FRAME_HR){
cnt_hr = 0;
}
if(data_hr[cnt_hr] != 0){
sum_hr -= data_hr[cnt_hr];
}
data_hr[cnt_hr] = hr;
sum_hr += data_hr[cnt_hr];
hr_avg = sum_hr / FRAME_HR;
cnt_hr++;


// Show SpO2 and HR
if(hr_avg >= LOWER_LIM_HR && hr_avg <= UPPER_LIM_HR && spo2_avg >= LOWER_LIM_SPO2 && spo2_avg <= UPPER_LIM_SPO2){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print(" HR ");
display.println(hr_avg,0);
display.print("SpO2 ");
display.println(spo2_avg,0);
display.display();
}
}
prev_irValue = irValue;
prev_diff = diff;
}

 

 コーディングが終わったら、早速Arduinoボードに書き込もう。書き込んだら
早速性能評価だ。おもむろに電源を入れ(単純にUSBケーブルを接続するだけで良い)、立ち上がりを待つ。計測がうまくいけば、程なく心拍数とSpO2の値がモニタに表示される筈だ。

 今回私が組み上げたものは、心拍数の計測値が不安定で、ごくわずかな体動でも150を超える値を吐いてくる。移動平均のフレーム数や立ち上がり検出の閾値といったパラメータを調整するなり、微分を実装するなり、改善の余地がありそうだ。しかし、SpO2は結構良かった。職場のメディカルグレードのパルスオキシメータで正確さ(確度)を確認してみたところ、この自作パルスオキシメータは、メディカルグレードのパルスオキシメータとほぼ同じ値を示した。なかなか良いじゃないか、これ。

f:id:medicalengineer:20210504221156j:plain

 医用工学に足を突っ込んだばかりの学生でも、これならきっと簡単だ。パルスオキシメータはCOVID-19パンデミックが収束したとしても、様々な用途がある便利なアイテムだ。ぜひともトライしてみてほしい。

A-aDO2(肺胞気動脈血酸素分圧較差)に関する物質収支の考え方

 A-aDO2(肺胞気動脈血酸素分圧較差)とは

 肺胞から血液への酸素の拡散能が低下すると、肺胞に酸素が届いていても血液に酸素が受け渡されず、全身の酸素需給が悪化する。そこで、肺胞から血液への酸素の拡散能を反映する指標として、肺胞気酸素分圧と動脈血酸素分圧の較差(A-aDO2)を考えてみよう。

 

 まずは単純に

A-aDO2=肺胞気酸素分圧-動脈血酸素分圧

と定義しよう。もちろん、肺胞から血液に酸素が移動できないと肺胞酸素分圧は上昇し、動脈血酸素分圧は低下するため、肺胞から血液への酸素の拡散能が低下すると、A-aDO2は開大する

 

 肺胞における物質収支計算


 さて、A-aDO2を実際に計算してみよう。動脈血酸素分圧は採血すれば簡単にわかるが、肺胞気酸素分圧はそう簡単にはわからない。酸素が肺胞から血管に拡散してしまう(ただし拡散能は低い)ため、肺胞気酸素分圧は吸入気酸素分圧よりも低下してしまうからだ。すなわち、

肺胞気酸素分圧=吸入気酸素分圧-肺胞から毛細血管に移動した酸素量

である。


 そこで、動脈血二酸化炭素分圧(採血すれば簡単にわかる)を利用して推定してみよう。酸素と異なり、二酸化炭素は拡散能が高く、肺胞毛細血管の二酸化炭素分圧と肺胞気の二酸化炭素分圧はほぼ等しく(平衡状態)なっている。また、通常の代謝では、酸素1molの消費に対して、二酸化炭素0.8mol程度が排出されている。生物学では、消費した酸素の物質量に対する排出された二酸化炭素の物質量の比のことを呼吸商(RQ)といい、通常の代謝状態ではRQ≒0.8である。もちろん、呼吸商の定義から、

組織で消費された酸素量=動脈血二酸化炭素量÷呼吸商

である。

 

 ここで、定常状態であれば、組織で消費された酸素量は、肺胞から毛細血管に移動した酸素量と等しいため、

肺胞気酸素分圧=吸入気酸素分圧-肺胞から毛細血管に移動した酸素量

すなわち

肺胞気酸素分圧=吸入気酸素分圧-動脈血二酸化炭素÷呼吸商

であることがわかる。


 あとは、肺胞気酸素分圧がわかればよい。ここで、肺胞気は湿度100%であり、水蒸気で飽和しているため、大気圧(760mmHg)から飽和水蒸気圧(37℃では47mmHg)を引いた分圧が吸入気の空気分圧となる。この値に吸入気酸素濃度FIO2をかけてやれば、吸入気酸素分圧がわかる。
ゆえに、
A-aDO2=(760-47)×FIO2-(PaCO2÷RQ)-PaO2
が示された。

 

f:id:medicalengineer:20210204000611j:plain

A-aDO2





 

地方発着 0泊3日弾丸台湾旅行

2019年も残り数日となったところで、また台湾に行ってしまった。

だって安かったんだもん。

 

とりあえずいつものように地元から高速バスに乗って東京へ。もはやプライベートで海外旅行するときは東京まで高速バスで出るのが定番となってしまった。

f:id:medicalengineer:20210810225700j:image

今回もWILLER EXPRESSの定番シート、リラックスを利用。
f:id:medicalengineer:20210810225709j:image

高速バスは途中のサービスエリアやパーキングエリアで休憩を挟みながら東京駅へ向かう。実は、この往路の高速バスが今回の旅程で最も長時間乗り続ける乗り物だったりする。「海外旅行の最大の関門は国際線の飛行機」という常識は、私にはもはや通用しない。最大の関門は成田空港までの移動だ。それは時間的にも、費用的にもだ。そもそも私の場合、海外旅行の費用の大部分が、日本国内でかかる費用なのだ。いろいろと頭がおかしいと言われそうだが、細かいことは気にしていられない。海外を楽しめればそれでいいんだよ。

都内の首都高で渋滞に巻き込まれながらも、バスは7時間かけて東京駅に到着。
f:id:medicalengineer:20210813222409j:image

年の瀬でごった返す東京駅を足早に駆け抜ける。目指すは東京駅八重洲口から少し歩いたところにある京成バスのバス乗り場だ。ここから東京シャトルに乗って成田空港第3ターミナルへ。短時間で高速バス同士の乗り換えも面白いものだ。
f:id:medicalengineer:20210810225704j:image

時間に余裕をもって空港に着いたわけだし、早めにチェックインしてしまおう……とはいかない。何故ならば、チェックイン開始時刻は出発時刻の3時間前と決まっており、それ以前はシステムが受け付けてくれないからだ。

f:id:medicalengineer:20210810225447j:image

チェックインは乗客自身で行うようになっている。セルフサービスはLCCの基本だ。PAXの立場としても、カウンターでの受付よりも気楽でいい。
f:id:medicalengineer:20210810225821j:image

シートアサインは比較的前方のウィンドウサイド。早めにチェックインしたのが功奏したか、有料オプションを何一つ使わずにこのいいポジションをアサインしてもらえた。いや、たぶん単なる偶然だと思うけど。チェックインが済んだら、T2へ移動し、IASS EXECUTIVE LOUNGEでゆったりする。

f:id:medicalengineer:20210810225818j:image

ついでに、ここでスマートフォンのSIMを入れ替えておく。私が使っているのはシンガポールの通信大手StarHubが展開しているStarHub Happy  Prepaid SIMを利用している。これはシンガポール出張の際に現地StarHub Shopで手配したものだ。シンガポール国内でデータ通信を格安で利用できる。しかも、特定の国々(日本、台湾、アメリカ等)では、シンガポール国内と同じレートでデータローミングができるプランがあるのだ。もはや弾丸海外トラベラー必携のアイテムと言っても過言ではない。

 

www.starhub.com

ラウンジでゆったりしたあとは、T2内で軽く晩御飯を済ませる。T3へ戻り、チェックインの列を横目にパスポートコントロールへ。

f:id:medicalengineer:20210810225450j:image

パスポートコントロールを通過、ボーディングゲートへ向かう。T1やT2と違って、T3には免税店もそれほど多くはない。だが、割り切った格安旅行ならばそれで十分だ。どうせ免税店でブランド品なんて買うつもりはないでしょ?どうでもいいけど、このT3利用をもって、この1年間に成田のT1からT3まで全て利用したことになる(6月と11月に出張でT1利用(インター&ドメ)、9月にプライベートでT2利用(インターのみ)、今回のT3利用(インターのみ))。東京在住じゃないのに、どれだけ成田から海外行ってるんだよ……?

f:id:medicalengineer:20210810230125j:image

ボーディングブリッジを使わず、ランプバスでシップへ向かい、タラップを上ってMM627便に搭乗。

f:id:medicalengineer:20210810225952j:image

深夜発のインターは実に面白い。たとえ近距離便だとしても旅の高揚感が抑えきれない。はやる心を抑えて、いよいよMM627便に搭乗だ。A320の軽快なエンジン音を聞きながらテイクオフ。天候が良いのか、千葉の街の灯りがはっきりと見えた。離陸後20分程して機内が減光され、さらに10分程してベルト着用サインが消灯。どうやら水平飛行に入ったようだ。上空で腕時計の針を1時間巻き戻す。国際線ならではの楽しみだ。フライトタイムは4時間半。それにしても成田から桃園は近いものだ。だって4時間半のフライトだもん。何度も言うようだが、地元から東京駅までの高速バスが7時間、成田空港から桃園空港までのフライトが5時間ってどういうことだよ……

キャプテンから機内アナウンス。桃園空港の天候が優れず、状況によっては那覇に降りるかもしれないとのこと。万一那覇に降りたらせっかくの台湾旅行が台無しだが、それはそれで興味がある。著者はまだ沖縄に行ったことがない上に、パスポートコントロールを通過したのに国内に降りるとどういう扱いになるのか興味が尽きない。

着陸30分前のアナウンスが入る。程なくしてベルト着用サインが点灯、機内が明るくなり、ファイナルアプローチのアナウンスも入る。

台湾の街の灯りが見えてきて、桃園空港にランディング。とりあえず天候の問題はクリアできたようだ。那覇に心惹かれる部分はあったが、折角インターのチケットを取ったのだ。やっぱり海外を満喫したい。

シップは桃園空港B9にスポットイン。LCCは桃園空港ではT1とT2の境界付近の搭乗口を利用することが多い。チェックインバゲージがなければ、どちらへ出ても問題はない筈なのだが、今回は案内に従ってT1へ向かうこととした。このままパスポートコントロールを抜けてしまってもいいのだが、深夜に制限エリア外に出てもあまりいいことはない。まだ現地時間で深夜2時だ。しばらくは空港内で過ごすのが得策だろう。國光客運(Kuo-Kuang Bus)1819系統の高速バスは24時間運行なので、これに乗れば台北市内まで行こうと思えば行けるのだが、1時間もせずに着いてしまう。当然、夜の3時に台北車站(Taipei Main Station)に降ろされても困る。そこで、空港の制限エリア内で時間を潰すという選択をした。桃園空港はパスポートコントロールに行く手前で、Rest areaがあり、時間を潰すことができるのだ。今回はここで4時半頃まで待つことにしよう。

4時半前にRest areaを出発。いよいよ台湾入国だ。

f:id:medicalengineer:20210810230248j:image

パスポートコントロールを通過する。この時間帯は並んでいる人もおらず、通過はかなりスムーズだ。というか、一般レーンがクローズされていたせいか、"Diplomat, Official, Crew"レーンに通された。なんだこの特別感は……いや、一般レーンと同じだけど。制限エリア内で外貨両替を済ませてから、制限エリア外へ。既にStarHub Prepaid SIMを仕込んでいるわけだから、わざわざSIMカードを手配する必要もない。そのままバスターミナルへ向かおう。

5時00分発の國光客運1819系統の高速バスに乗る。もう何度も乗った國光客運1819系統、勝手はわかっている。
f:id:medicalengineer:20210810230007j:image

早朝で道路がすいていたこともあってか、僅か35分で台北車站に到着した。さて、台北に到着したことだし、朝ごはんでも食べようか……よし、目指すは華山市場のフードコートだ。MRT(地下鉄)に乗っても良さそうだが、まだ早いので、とりあえず歩いて向かうことにしよう。台北駅から華山市場までは歩いて20分程度だ。華山市場に到着すると、早朝にもかかわらず、長い行列ができている。とりあえずこの大行列に並ぼう。お目当ては華山市場2階のフードコートにある阜杭豆漿(Fu Hang Dou Jiang)という朝食のお店だ。ここではもはや定番と言ってもいいくらいの有名メニュー、鹹豆漿をいただく。鹹豆漿(Xian Dou Jiang)とは、温めた豆乳を酢で固めた料理で、これがなかなか美味しいのだ。

f:id:medicalengineer:20210812222207j:image

Ikari Coffeeという洒落たカフェがあったので、思わず入ってしまった。
f:id:medicalengineer:20210812222204j:image
洒落た内装の店内でカフェラテをいただく。美味しいカフェラテでナイトフライトの疲れを癒すことにしよう。

f:id:medicalengineer:20210812222200j:image

カフェラテを飲んでゆったりとしたら、台北市内散策再開だ。まずは華山1914文化創意産業園区へ。台湾の歴史とアートが融合した素敵なエリアだ。

f:id:medicalengineer:20210812222340j:image

歴史を感じる赤レンガ造りの建物が美しい。

f:id:medicalengineer:20210813175551j:image

季節柄もあって、いい感じにクリスマスのデコレーションがなされている。

f:id:medicalengineer:20200202132018j:image

ムーミンのキャラクターショップもあった。

f:id:medicalengineer:20200202132053j:image

何故か只見線新潟県小出駅福島県西若松駅)の写真展もやっていた。日本から台湾に来てまで只見線というのも興味深い。
f:id:medicalengineer:20210812222337j:image

ウイスキーの商品名のオブジェクトが青空に映えていた。

f:id:medicalengineer:20200202132025j:image

街中を散策がてら、仁愛敦南円環(Renai Dunnan Traffic circle)へ。日本では考えられないような巨大なラウンドアバウトだ。

f:id:medicalengineer:20210813173248j:image

あまりにデカすぎて、地上から撮影してもラウンドアバウトだとは認識できない。デカすぎてラウンドアバウトなのに信号機が稼働している。日本国内ではラウンドアバウトが交通量が比較的少ない道路同士の交差点に採用されているのとは対照的だ。

f:id:medicalengineer:20210813173340j:image

仁愛敦南円環のすぐそばに誠品書店(eslite)敦南店がある。代官山のTSUTAYAのモデルになったともいわれるお洒落書店の代名詞。
f:id:medicalengineer:20200202132049j:image

さらに東を目指して歩いて行くと、台北市役所(台北市政府)がある。

f:id:medicalengineer:20210811232615j:image

台北市役所付近から南を望むと、台北101がそびえ立つのがはっきりと見える。いや、高すぎて最上部は霧で霞んでしまっていたけど。

f:id:medicalengineer:20200202132034j:image

結局、台北駅から台北101まで歩いてしまった。特に遠くまで歩いてやろうとか意識したわけではないのだが、気がついたら結構な距離(約5.6km)を歩いてしまっていた。思いのままに気ままな散策。これぞ一人旅の醍醐味だ。

さて、台北の見どころはまだまだある。流石にこれからまた歩き回るのも大変なので、今度はMRTに乗って移動しよう。乗換えで忠孝新生(Zhongxiao Xinsheng)駅に降りた。地下空間に広がるこの開放感あふれるプラットホームは、なかなか素敵な都市デザインだ。

f:id:medicalengineer:20210811232743j:image

『台湾の原宿』といわれる西門町(Ximending)へ。さて、ここからは食べ歩きを楽しもう。まずは阿宗麺線(Ay-Chung Flour-Rice Noodle)で麺線だ。

f:id:medicalengineer:20210813224858j:image
麺線は台湾のそうめんのようなもので、阿宗麺線の麺線は鰹だしの利いたスープに滑らかな麺線とモツが入っていて、優しい味わいだ。そのままでも勿論美味しいのだが、テーブルに置いてある黒酢やチリソースなどで味変もでき、色々な味を楽しめるので、リピーターにもお勧めだ。

続いてはタピオカミルクティーの幸福堂(Xing Fu Tang)だ。台湾に来たからにはタピオカミルクティーだ。パスポートが必要な本気のタピ活。
f:id:medicalengineer:20200202132022j:image

並んでいて待ち時間もそこそこあったけど、待つだけの甲斐はあった。なかなか美味しい。
f:id:medicalengineer:20200202132030j:image

そうこうしているうちに日が暮れた。夜の西門町は活気があって楽しいところだ。

f:id:medicalengineer:20210812222500j:image

MRT西門(Ximen)駅6番出口付近は、日本でいうところの渋谷駅スクランブル交差点のようなもので、若者たちでごった返している。

f:id:medicalengineer:20210813182614j:image
f:id:medicalengineer:20210812222457j:image

MRT東門(Dongmen)駅に移動し、東門駅付近の永康街(Yongkang Street)を散策。台湾茶と焼菓子の専門店、小茶栽堂に立ち寄る。スタイリッシュでお洒落なショップだ。小茶栽堂のマカロンヌガーは、カラフルでかわいらしくて美味しいので、台湾土産にお勧めだ。

f:id:medicalengineer:20210813175725j:image

まだ台北を楽しみたい気持ちもあるが、今回は気軽な日帰り旅行だ。早めに帰る準備をしよう。MRTに乗って台北車站(Taipei Main Station)に出て、晩御飯。日本でもお馴染みの台湾グルメ、魯肉飯の定食をいただくことにした。

f:id:medicalengineer:20210813175715j:image

台北車站から國光客運1819系統の高速バスに乗って桃園空港へ。
f:id:medicalengineer:20210813175721j:image

バス車内では、コンビニで買った烏龍茶を楽しむ。

f:id:medicalengineer:20210813175433j:image
地方在住者の弾丸台湾旅行であれば、桃園空港には早めに到着すべきだ。何故ならば、桃園空港の国際線制限エリアにはAirport Experience Zoneという簡易ラウンジがあり、そこでは無料でシャワーを浴びることもできるからだ。1日の汗を流し、着替えを済ませ、ナイトフライトに備えよう。

シャワーで1日の汗を流したら、あとは日本へ帰るだけだ。長い廊下を歩いてボーディングゲートへ。

f:id:medicalengineer:20210813182544j:image

台湾への名残を惜しみつつ、B9ゲートからMM620便に搭乗。

f:id:medicalengineer:20210811232946j:image

成田に向けてテイクオフ。フライト時間は短いので、軽く仮眠といったところ。LCCの短距離国際線は気楽でいい。LCC機内食もないので、離陸したらすぐに寝てしまっても構わない。さらに、入国書類なんざ機内でもらわなくても、パスポートコントロール入口に山ほど置いてあるし、旅慣れてくると日本入国用の税関申告書は手元にあるというケースも多いだろう。なんなら税関のWebサイトからダウンロードして印刷することだって可能だ。夜の短距離国際線は、いかに睡眠時間を確保するかが勝負なのだ。

気がついたら雲のむこうから朝日が昇ろうとしていた。なんて美しい景色なんだろう。
f:id:medicalengineer:20210811232949j:image

機内が慌ただしくなってくると、いよいよ成田空港に着陸だ。

T3に到着。早いところパスポートコントロールを通過してしまおう。

f:id:medicalengineer:20210812222607j:image

パスポートコントロールを通過したら、T3からそのまま東京駅方面へ向かうバスに乗ってもよいのだが、ここは敢えてT2に向かう。

f:id:medicalengineer:20210812222600j:image

T2のIASS EXECUTIVE LOUNGEをアライバルラウンジとして利用させてもらい、しばし荷物整理とスマートフォンのSIMの入れ替え。落ち着いたら、バスで東京駅へ向かう。空港を出て、バスのシートで仮眠をとろう。気がつくと東京駅のすぐそばだった。成田空港から約1時間、東京駅八重洲口に到着だ。さて、帰りの高速バスは夕方だ。このあたりで少し遊ぶことにしよう。

まずは東京駅丸の内側へ。晴れ渡った青い空と緑の芝生に東京駅の赤レンガ駅舎が映える。
f:id:medicalengineer:20210812222557j:image

丸ノ内線半蔵門線東横線京浜東北線を乗り継いで桜木町へ。弾丸海外旅行にハマる前は、東京や横浜は「遊びに行く目的地」であり、来るたびにワクワクが止まらなかったものだが、弾丸海外旅行をするようになってからはもはや「帰ってきた」感覚でしかなくなってしまった。まあ、それでも楽しいことに変わりはないからいいんだけど。
f:id:medicalengineer:20210812222604j:image

汽車道を歩いてみなとみらい地区を満喫。

f:id:medicalengineer:20210813182849j:image

横浜赤レンガ倉庫ではクリスマスイベント開催中だった。
f:id:medicalengineer:20210813182846j:image

そのまま山下公園まで散策。年の瀬の山下公園はいいものだ。
f:id:medicalengineer:20210813182853j:image軽く横浜周辺で遊びまわったのち、地元へ帰る高速バスへ。

自宅の出発から帰着までを振り返ると、国内にいた時間の方が長いくらいの旅程だった。もはや海外旅行なのかと問い詰めたいところだが、自分自身としては大満足だ。

とにかく激安、弾丸海外旅行を是非ともお勧めしたい。

 

地方発着 4万円未満で行く格安週末台湾旅行

9月に思いがけず3連休がとれたので、ふと国際線航空券を調べてみたら思いのほか安かったので衝動買いしてしまい、海外に弾丸旅行することになってしまった。ここまでの顛末は、以前の記事にまとめてある。

 

medicalengineer.hatenablog.jp

0日目

さて、待ちに待った出発の日だ。勤務終了後、夜行バスで東京に向かう。自宅最寄り駅22時近くの電車に乗って、市内中心部のバス乗り場へ。23時少し前に東京行きの夜行バスに乗車、翌日の台湾に思いを馳せながら仮眠。

f:id:medicalengineer:20191013005557j:image

ピンクのバスでお馴染み、WILLER EXPRESS のリラックスシート。カノピー付きだから、アイマスクなしでも眠れる。

f:id:medicalengineer:20191013005651j:image

 

1日目

翌朝5時過ぎにはバスタ新宿に到着、そのまま中央線に乗って東京駅へ。東京駅近くで軽く朝食を済ませ、東京シャトルで成田空港へ。事前予約していたので900円で東京駅から成田空港まで移動できる。

f:id:medicalengineer:20191013005416j:image

1時間程度で成田空港に到着。第2ターミナル(北)バス停でバスを降りてすぐの入口からターミナルビルに入ると、目の前がこれから搭乗するSCOOTのチェックインカウンターだった。チェックイン開始時刻には早々とチェックインを済ませる。パスポートを提示して、荷物の確認。預入荷物はなく、キャビンバゲージのみ。キャビンバゲージの重量チェックは楽々とクリアし、バックパックにチェック済の証明タグをつけてもらう。そして、搭乗便のボーディングパスを受け取る。

 

ボーディングパスを受け取ったら、IASS EXECUTIVE LOUNGE 2で休憩。本来は有料なのだが、ゴールドカード保有者かつ当日のフライト搭乗者なら無料で使える。利用航空会社に制限はないので、LCC利用者にとっては結構ありがたい。ラウンジ内ではアルコール飲料1ドリンク(ビールorハイボール)とおつまみ(柿ピー)、ソフトドリンクバーを無料でいただける。航空会社のラウンジのような豪華さはないが、LCC利用の格安弾丸旅行でそこまで求める必要もなかろう。空港で旅立ち前のひと時を優雅に過ごせるのは、なかなか心地よいものだ。うん、ラウンジは旅のセーブポイントなんだよ。

f:id:medicalengineer:20191013005338j:image

ここでスマートフォンのSIMを入れ替える。これから先は、シンガポールで利用したSTARHUB PREPAID SIMを使うのだ。Wi-Fi環境下で専用プロファイルをインストールすれば、面倒なAPN設定も自動で済ませることができる。台湾に行くのにシンガポールのSIMを使うのは不思議に思われるかもしれないが、STARHUB PREPAID SIMのHAPPY ROAMサービスを使えば、シンガポール国内と同じ料金でアメリカ、イギリス、オーストラリア、中国、香港、台湾など、日本人旅行者がよく行くであろう国々でローミングができてしまうのだ。しかも、データ料金は割安なのだ。今回は3日でSGD 5(約400円)のプランを利用した。

 

いつまでもラウンジでゆっくりしている訳にもいかないので、荷物の最終確認を済ませて、ラウンジを出発した。そして、フライトインフォメーションを確認してから、パスポートコントロールへ。すいていれば5~10分程度でクリアできるが、混んでいるとかなり時間がかかるので、パスポートコントロールは早めに通過しておいたほうがよい。

f:id:medicalengineer:20191013153155j:image

TR899便台北経由シンガポール行きに搭乗。陽気なボーディングミュージックが機内に流れ、旅立ちへの期待感が高まる。ANAのAnother Skyも上品で好きだけど、こういった陽気な感じがLCCらしくて好感が持てる。シートのカバーにはシンガポールF1グランプリのデザインが施されていた。

 

タキシング中は、英語、日本語、中国語による機内アナウンスやセーフティインストラクションが流れ、国際線の雰囲気が漂う。12時32分、TR899便は成田空港を離陸。運航機材はB787-9だから、機内はけっこう快適。機体そのものが大きいため、シートピッチも広く、そこまで乾燥しているわけでもない。日系LCCpeachと比べ、機内の清掃は甘いようだが、そもそもLCCにそこまで期待してはいけない。

f:id:medicalengineer:20191012232019j:image

LCCだからといって安全性に問題があるわけではない。むしろ、LCCだからこそ、一度でも重大事故をやらかそうものなら即座に経営危機に陥ってしまうため、安全に関する部分の妥協は許されない。大手航空会社同様に、航空当局の規制に則った運航および整備が行われる。

 

SCOOTは離着陸時には小さなサブバッグすら前席の下もしくはオーバーヘッドビンへの収納を指示されるうえ、イヤフォンやヘッドフォンの使用も禁止されている。日系の大手航空会社でさえ、ここまで厳しい安全対策は行っていない。

 

無事に桃園空港に着陸。シンガポールまで乗り通す乗客を含め、全員がいったん降機する。シンガポールまで乗り通す場合は、トランジットゲートを通過し、再度搭乗口に向かう必要があるのだ。著者は台北が最終目的地なので、そのままCIQへ。

f:id:medicalengineer:20191013112331j:image

毎度のことであるが、イミグレーションが長蛇の列。でも、意外と列の進みは早いので、すんなりと入国できるはずだ。イミグレーションとバゲージクレームを通過したら、非制限区域に出る直前に両替所がある。2泊3日の弾丸旅行で、クレジットカードを利用する前提であれば、5000円くらい両替しておけば十分だ。

 

非制限区域に出たら、さっそく台湾をエンジョイしよう。桃園空港から台北までは桃園メトロで35分程度だ。國光客運(Kuo Kuang Bus)が運行する1819路(1819系統空港バス)でも、1時間程度だ。だが、いつもそればかりでは面白くない。たまにはどっぷりとローカルにまみれてやろうじゃないか。桃園市内を軽く楽しめるうえ、運賃は桃園メトロや國光客運1819路よりも安くつく。

 

<参考:桃園空港~台北駅 運賃一覧>

桃園メトロ:桃園空港~台北駅 NTD150

國光客運1819路:桃園空港~台北駅 NTD 140

U bus 706路+台鉄 計:NTD 82~114

 U bus 706路:桃園空港第1ターミナル~台鉄桃園駅 NTD 48

 U bus 706路:桃園空港第2ターミナル~台鉄桃園駅 NTD 44

 台鉄:桃園駅~台北駅(Easy Card利用) NTD 38

 台鉄:桃園駅~台北駅(区間車利用) NTD 42

 台鉄:桃園駅~台北駅(莒光号指定席利用) NTD 51

 台鉄:桃園駅~台北駅(自強号指定席利用) NTD 66

 

統聯客運(U bus)が運行する706路(706系統)の 桃園火車站(台鉄桃園駅)行きに乗る。第1ターミナルから乗るよりも、第2ターミナルから乗ったほうが若干安い。桃園空港のターミナル間は、Skytrainもしくは桃園MRTで無料で移動できる(ただし桃園MRTはEasyCardによる乗車に限り無料)。今回は桃園MRTで第2ターミナルへ移動してからU bus706系統に乗車した。

 

f:id:medicalengineer:20191012232131j:image

U bus 706系統は普通の路線バスのような車両で運行されるが、空港を出るとすぐに高速道路に入り、桃園市街地を目指す。日本の感覚からすると驚くかもしれないが、座席にはシートベルトが装備されており、高速道路を走行する前提で車両が設計されているのがわかる。
f:id:medicalengineer:20191012232127j:image

高速道路を降りて桃園市街へ入ると、こまめにバス停に止まりながら客扱い。夕刻だったため、渋滞に巻き込まれ、予定よりも遅れて台鉄桃園駅に到着。

f:id:medicalengineer:20191012232246j:image

乗る予定だった列車がディレイ食らってた。旅に遅延はつきものさ。
f:id:medicalengineer:20191012232250j:image

莒光号(Chu Kuang Express)516次列車が桃園駅に入線。この列車の指定席を取っている。
f:id:medicalengineer:20191012232242j:image

車内は日本の国鉄時代の列車を彷彿とさせる雰囲気。4アブレストのリクライニングシートでシートピッチも広く、機関車牽引列車独特の静かさも相まって、乗り心地はなかなかのもの。

f:id:medicalengineer:20191012232355j:image
40分ほどで台北駅(台北車站)に到着。台北駅は台鉄も高鉄もすべて地下に線路がある。
f:id:medicalengineer:20191012232358j:image

台北メトロに乗って西門駅に移動。西門(Ximen)は台湾随一の繁華街で、東京でいうところの渋谷や原宿に相当する若者の街でもある。今晩の宿、卡楽町旅店(Colormix Hotel & Hostel)へ。 

f:id:medicalengineer:20191012233955j:image

リーズナブルなシングルルームをチョイス。ロフトベッドとTVだけのシンプルなお部屋で、清掃も行き届いていて、宿全体が清潔に保たれている。
f:id:medicalengineer:20191012233948j:image

部屋にあるTVはCNNの英語放送が入るので、中国語がわからなくても退屈することはなかった。

 

荷物を整理したら、さっそく西門の街へ繰り出そう。西門エリアは海外からの観光客も多く、英語や日本語が通じる店が多い。

f:id:medicalengineer:20191012234409j:plain

日本ではまずお目にかかれない、Superdry Store.もある。
f:id:medicalengineer:20191012234403j:image

極度乾燥(しなさい) なんていう怪しげな日本語のブランド名なのだが、もとはといえばアサヒビールのSUPERDRYにインスパイアされて立ち上げたんだとか。そのせいで日本には店舗が存在せず、ブランドwebサイトにすら日本国内からはアクセスできない。

 

せっかく西門に来たのだから、台湾グルメを満喫しよう。まずは阿宗麺線(Ay Chung Flour Rice Noodle)へ。温かい米粉入りそうめんみたいなもので、優しい味わいで美味しかった。
f:id:medicalengineer:20191012233952j:image

阿宗麺線をエンジョイしたあとは、フライドチキンで有名な豪大大鶏排(HOT-STAR Large Fried Chicken)へ。
f:id:medicalengineer:20191012233931j:image

ここの名物は巨大フライドチキン。人の顔よりも大きなフライドチキンを、注文が入ってから揚げてくれるスタイル。出来上がりまで10~20分ほど待つが、揚げたては熱々でなかなか美味しい。
f:id:medicalengineer:20191012234004j:image

この特大フライドチキンを食べ終えるのに15分近くかかった。食後のドリンクとして、清心福全(Ching Shin Fu Chuan)でウーロン茶を購入。台湾のドリンクスタンドでは、甘さと氷の量を選択できる。砂糖抜き、氷は少なめでオーダー。食後に最適な、さっぱりとした味わいだった。
f:id:medicalengineer:20191012233925j:image

美味しいウーロン茶を堪能した後は、宿でゆったりと寝ることにしよう。

 

2日目

台湾旅行2日目は、早朝からメトロに乗る。台湾に来たからには是非とも食べたい、名物朝食のためだ。

f:id:medicalengineer:20191012234526j:image

MRT板南線の善導寺駅で降りて、華山市場へ。凄く並んでるが、臆せずにこの待機列につく。これが台湾で有名な朝食屋さん、阜杭豆漿(Fu Hang Dou Jiang)への列なのだ。
f:id:medicalengineer:20191012233921j:image

この時間帯の華山市場2階のフードコートは、阜杭豆漿のお客さんばかり。ほかのお店はまだ開店すらしていない。
f:id:medicalengineer:20191012233928j:image

豆漿をはじめとした、台湾の朝食をエンジョイ。
f:id:medicalengineer:20191012233945j:image

お手頃なお値段にもかかわらず、一品一品のボリュームがあり、大満足。

 

朝食を堪能した後は、フランス資本の巨大スーパーマーケット、Carrefourでショッピング。職場へのお土産を購入。
f:id:medicalengineer:20191012233935j:image

Carrefourでのショッピングの後は、西門の歴史ある喫茶店、蜂大珈琲(Fong Da Coffee)にて軽くコーヒーブレイク。

f:id:medicalengineer:20191013074701j:image

蜂大珈琲店内でLonely Planetを片手に台湾産のコーヒーをいただきながら、お昼をどうするか考える。どうも、老山東牛肉家常麵店(Lao Shan Dong Homemade Noodles)が美味しいらしい。西門にお店があるとのことで、徒歩圏内だ。よし、そこに決定だ。
f:id:medicalengineer:20191012234008j:image

看板メニューの牛肉家常麵をオーダー。さっぱりとしたスープに、モチモチとしたきしめんのような平麺、そして柔らかく煮こまれた牛肉がマッチしていて、すこぶる美味しかった。Lonely Planetよ、ありがとう。

 

牛肉家常麵をエンジョイした後は、MRT市政府駅からすぐの貢茶(Gong Cha)台北信義(Taipei Xinyi)店にてタピオカドリンクをいただく。
f:id:medicalengineer:20191012233939j:image

新宿やそこらの貢茶に並ぶのとはわけが違う、本気のタピ活だ。パスポートが必要な本気のタピ活、是非ともおすすめしたい。
f:id:medicalengineer:20191012234001j:image

台北はエネルギッシュな街だ。特に夕暮れ時、雑然とした街並みに車とバイクが走り回る様子を眺めると、それを実感する。

f:id:medicalengineer:20191013005830j:image

MRT中山國小駅近くの小品雅厨で晩御飯。しゃれた内装のごはん屋さんだ。

f:id:medicalengineer:20191013004027j:image

ちょっと高めだけど、けっこう美味しい。特に、トマト入りスクランブルエッグが絶品だった。そして、野菜を使ったメニューが豊富なのが嬉しい。
f:id:medicalengineer:20191013004030j:image

美味しい晩御飯を堪能した後は、MRTで台北駅に戻って、台北駅周辺で最後のショッピングとしよう。

 

台北駅で有名な鳥人間。

f:id:medicalengineer:20191013004007j:image

そして目玉焼き……
f:id:medicalengineer:20191013004003j:image

……っていうか、この目玉焼きって……まさかお前の卵なのか?!
f:id:medicalengineer:20191013004011j:image

そんな目で卵を見られても……というか、目玉焼き美味しそうだなおい。

 

台北駅のすぐそばにある新光三越(Shin Kong Mitsukoshi)へ。

f:id:medicalengineer:20191013010058j:image

夜空にはためく台湾の旗とライトアップされた荘厳な姿の台北駅。
f:id:medicalengineer:20191013010205j:image

台北駅のホールは吹き抜けで素敵な雰囲気。
f:id:medicalengineer:20191013010208j:image

代官山のTSUTAYAのモデルになったともいわれる、オシャレ書店の代名詞、誠品書店(eslite)へ。
f:id:medicalengineer:20191013010202j:image

これから台北を後にして、明日早朝には帰国するというのに、台北のガイドブックを購入してしまった。

www.victionary.comさて、早いものでもう明日は帰国だ。台北駅前のMain innでシャワーを浴びて仮眠だ。真夜中の2時20分発の空港バスで桃園空港に向かうのだ。フロントのスタッフに、1時半に起こしてくれるようにお願いした。こういうバックパッカー向けの宿泊施設のスタッフは、ほぼ英語に対応できるので、中国語がほとんど理解できない著者にとっては大変ありがたい。

f:id:medicalengineer:20191013004446j:image

ベッドまわりはスタイリッシュに出来ていて、しかも使いやすい。

f:id:medicalengineer:20191013004339j:image

 

3日目

1時半過ぎ、宿のスタッフさんが起こしに来てくれた。2時過ぎの空港行きのバスに乗るため、荷物をまとめて出発だ。

 

この日は台湾に台風が接近しており、台北市内は凄まじい雨だった。宿から台北駅まで、たかだか10分もかからない距離だが、足元どころか下半身がずぶ濡れになってしまった。帰りのTR898便、フラキャンにならなければよいのだが……

f:id:medicalengineer:20191013000959j:image

國光客運1819路の車内は4アブレストのリクライニングシート。
f:id:medicalengineer:20191013001002j:image

重陽駅で客扱いを済ませたのち、短時間ながら仮眠をとれるようにという配慮だろうか、車内が消灯された。

 

台北駅を出発して約1時間で桃園空港に到着、TR898便にチェックイン。台風は近づいているものの、どうやら飛ぶらしい。

f:id:medicalengineer:20191013003904j:image

チェックイン後、速やかにパスポートコントロールを通過し、制限区域へ。

f:id:medicalengineer:20191013171354j:image

制限区域にあるAirport Experience Zoneでは、ゆったりとしたソファやシャワーを使えるので、弾丸旅行にはありがたい。

 

Airport Experience Zoneでゆっくりとした後は、TR898便に搭乗だ。さらば台湾!

f:id:medicalengineer:20191013162253j:image

窓側のシートアサインだった。
f:id:medicalengineer:20191013162256j:image

機窓には種子島屋久島が見えた。

f:id:medicalengineer:20191013001043j:image

11時前に成田空港に到着、日本に戻ってきた。CIQを通過し、再びIASS EXECUTIVE LOUNGE2へ。実はアライバルラウンジとしても使えるので、到着後に荷物整理をしながら、フリードリンクを楽しむことができるのだ。その後、16時半頃に東京駅を発車するバスに乗って帰宅した。

 

この弾丸旅行では、往復の航空券、諸税・手数料、成田空港までの往復交通費、現地交通費、宿泊費、食費、お土産など、全て含めても4万円を切っている。旅の価値は値段では決まらない。格安の弾丸旅行でも、十分に満足度の高い旅行に仕上げることも可能なのだ。この旅行にかかった費用を参考までに。

 

<旅費>

TR899 成田~桃園:JPY 3890

TR898 桃園~成田:JPY 3890

諸税:JPY 5341 (2090 SW, 520OI, 1000TK, 1731 TW)

支払手数料:JPY 1600 (JPY 800×2)

Colormix Hotel & Hostel:JPY 2919 (Include tax)

Main inn:JPY 1655 (Include tax)

WILLER EXPRESS 往路:JPY 2500

WILLER EXPRESS 復路:JPY 3300

JR中央線 新宿~東京:JPY 194(ICカード運賃)

東京シャトル 東京駅~成田空港:JPY 900(事前予約運賃)

THEアクセス成田 成田空港~東京駅:JPY 1000

U bus 桃園空港第2ターミナル~台鉄桃園駅:NTD 44

台鉄莒光号 桃園~台北:NTD 51

國光客運 台北駅~桃園空港:NTD 140

 

 

国際線航空券を衝動買いした話

あれはシンガポール出張から帰ってきたばかりの、7月上旬のことだった。旅好きの私は、当然のことながら、こう思うのだった。

 

ああ……仕事とはいえ、海外出張楽しかったなぁ……また行きたいなぁ……

 

もちろん、行きたいと思えば、時間とお金があれば行ってしまうのが私の常。思い立ったが吉日とばかりに、LCCのサイトを探す。LCCなら、うまく予約できれば、近隣のアジア諸国まで片道1万円程度で買えてしまう。

 

んっ……?シンガポールまで片道2万円程度?!これって安くないか?!

 

ただ、シンガポールはついこの間、仕事で行ってきたばかりだ。でも、このお値段だったら破格だ。どれどれ、詳細を見てみよう。このフライト、成田から台北を経由してシンガポールに向かうのか。ならば、成田~台北間のお値段はどうなんだろう?きっと、シンガポールまで行くより安いはずだから……

 

えっ、往復14,721円?!

 

……ポチっとな。

 

こら、そこ!「国際線の航空券を衝動買いしたぞコイツは?!」とか言わない!

 

だってほら、安かったんだもん。

 

そして、判明する新たな事実。

 

どうやら、租税やら空港施設利用料込みで往復14,721円らしい。

 

……安すぎるでしょ、常識的に考えて。

 

旅程票の運賃明細を見てみると、成田~台北の片道運賃は、3,890円とのこと。なんだよこれ、地方在住の私が東京出るのに使ってる新幹線の運賃よりはるかに安いじゃないか。というか、三鷹とか横浜あたりから成田エクスプレスに乗って成田空港に出るよりも安いってこれ。

 

だったら新幹線に乗るのさえも憚られる。よし、高速バスで移動してやろうじゃないか!

 

えっ、東京に向かう夜行バスが2,500円、東京から帰ってくる昼行バスが3,300円で手配できたんですけど?!

 

もうこうなったら、とことん激安で旅行してやろうじゃないか。

Let's travel on a shoestring budget!!

もう現地の宿泊は格安ホテルでいいや。

 

早速台北の格安ホテルを予約。2か月半前だから、西門町の格安ホテル ColorMix Hotel & Hostel のシングルルームを2,919円で予約できた。

 

帰国便は6時40分発、チェックインは3時40分から5時40分までだから、深夜バスで台北市内から桃園空港に向かわなければいけないわけだ。ならば、2時台の國光客運の空港連絡バスで空港に向かえばよさそうだ。

 

2時までは台北市内のカフェや誠品書店なんかで時間を潰してもよさそうだし、思い切って桃園空港で夜明かししてもよさそうだ。過去には空港泊をはさんで弾丸海外旅行だってしたものだ。

 

しかし、この旅は帰国して終わりではない。帰国フライトより、帰国フライト後の陸路移動のほうがはるかに所要時間が長いのだ。しかも、帰国翌日は通常勤務日だ。

 

誰だよこんなアホなスケジュール組んだヤツは?!自分だよ!!

 

さすがに翌日から通常勤務では、無茶はできない。最低でも、ベッドで仮眠をとる必要がありそうだ。1時半頃までは仮眠をとって、それから帰国の途に就くことにしよう。どうせ仮眠だから、わざわざ個室をとる必要なんてない。適当に台北駅前のドミトリー Main inn を1,655円で予約した。

 

これでだいたいの旅程が固まってきたぞ。まとめるとこんな感じだ。

 

0日目

勤務終了後 自宅出発

23時頃 夜行バスで新宿へ

 

1日目

5時頃 バスタ新宿

7時半頃 東京シャトルで東京駅発

8時半頃 成田空港着

12時頃 成田空港発

15時頃 桃園空港着

16時頃 桃園空港発、台鉄桃園駅経由で台北

18時半頃 台北駅到着

以後、自由観光

(Colormix Hotel & Hostel 泊)

 

2日目

終日自由観光

(Main inn 泊)

 

3日目

2時頃 國光客運で台北駅発

3時頃 桃園空港着

6時頃 桃園空港発

11時頃 成田空港着

12時頃 THEアクセス成田にて成田空港発

13時頃 東京駅着

16時半頃 高速バスで東京駅発

22時半頃 帰宅

 

この旅程で、成田~桃園の往復航空券、諸税・手数料、成田までの往復交通費、桃園~台北の往復交通費、2泊分の宿泊費を全て含めても、約3万円。現地での観光費用や食費を含めても、4万円程度で十分に事足りるだろう。よし、せっかくの格安弾丸台湾旅行、思いっきり堪能してきてやろうじゃないか!

iPadで機械学習を学ぶ Vol.1

ちょっと仕事絡みで機械学習の基礎を身に付けねばならなくなった。

当然、機械学習を学ぶためには、自分でコードを書いて原理を覚えねばならない。

コードを書くには、パソコンもしくはそれに類するマシンが必要である。

自宅にはデスクトップのWindowsマシンもあるし、ラップトップならMacbook Proも自宅と職場の間を行き来している。

機械学習といえばPythonでコーディングするのが流行りで、WindowsでもMacでもPythonの開発環境を整えるのは簡単だ。

しかし、ちょっとした空き時間に勉強するならば、どこでも使える環境が大切だ。

どこでも使えるようにするならば、Macbook Proを使えばよさそうだが、Macbook Proはちょっと重い。

そんな私が、普段出先で使っているツールといえばiPhoneiPadだ。

所詮スマートフォンタブレットなのだが、iPhoneiPadのようなiOSバイスには、Pythonista3 という素晴らしいAppがある。

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,200

これはiOS上でPythonのコードを書いて実行できるAppで、なかなか便利な代物だ。

1,200円とちょっと躊躇してしまいそうな値段設定だが、これで機械学習の能力が身につくのなら安いものだ。

ちなみに、コードを書くときはソフトウェアキーボードよりは外付けキーボードのほうが圧倒的に作業効率が良い。

著者はiPadLogicool製のキーボードケースを装着して使っており、作業しやすいうえに軽量でそこそこカッコよく、結構気に入っている。

 

Pythonista3をインストールしたら、軽くPythonで遊んでみよう。

一般的な環境でいうところのinteractive shellは、Pythonista3ではConsoleというものになっている。

Pythonista3のConsoleを出すには、適当なファイルを開いた画面から、右から左に一度スワイプしてやればよい。

早速、Pythonista3のConsole上に、

print("Hello, World!")

と打ってみよう。

これがPythonにおける『Hello, World!』だ。

 

さて、ここまで来たら、本格的にPythonista3を使った学習環境の構築だ。

まずは、Pythonista3上でpip等のコマンドを使えるようにするために、StaShをインストールする。

Pythonista3のConsoleに

import requests as r; exec(r.get('http://bit.ly/get-stash').text)

とタイプしてReturnキーを押せばよい。

 

機械学習の入門書として様々な書籍が刊行されているが、ここでは、O'Reilly Japanの名著『ゼロから作る Deep Learning』を教科書として、これを丁寧にトレースしてみることにしよう。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

基本的には、このテキストの流れに沿ってコードを打ち込み、実行してゆけばよい。

何故。そのような動作をするのか、数学的な概念を理解しながらコードを書いてゆこう。

とりあえず第1章は簡単だ……と思いきや、そうはいかない。

『1.6.3 画像の表示』では画像『lena.png』という画像を読み込むのだが、その画像をカレントディレクトリに放り込むところで少し苦労する。

この本を学習するにあたって必要なデータ類をアップしているリポジトリがある。

github.com単純にこのリポジトリから画像やら何やらをダウンロードして、iCloud Driveに放り込めばよさそうなものだが、そうはいかない。

iOSのシステム上の制約がいろいろとあるせいで、iCloud Driveなんかだと、必要なデータをiPad上のPythonista3ディレクトリに放り込めないのだ。

なんとか力尽くで放り込んだとしても、第3章のMNISTデータの読み込みでつまづく。

そこで、この問題を解決してくださったpoipoides様の記事を参考にして、

poipoides.hatenablog.com以下のようにStaSh上にタイプする。

wget -o samples.zip https://github.com/poipoi/deep-learning-from-scratch/archive/master.zip
unzip samples.zip

すると、iPad上にpoipoides様がモディファイしてくださったライブラリがダウンロードされ,展開されている筈だ。

今後はこれを有難く使わせていただこう。

放射線の生体影響

放射線の生体影響

放射線は生体に様々な影響を及ぼす。放射線によって障害を受けることもあれば、放射線によって悪性腫瘍を治療することもある。だが、悪性腫瘍の放射線治療で用いられる放射線のもつ熱量は、カップ数杯のコーヒーの熱量にすぎない。たかだかその程度の熱作用のみで悪性腫瘍が治癒するとは考えにくい。では、何故放射線は生体に多大な影響を及ぼすのであろうか?

そもそも、放射線はそのエネルギを用いて、原子や分子を電離・励起する作用を有する。これによって細胞内のDNAがダメージを受けることが、放射線の生体影響の要因のひとつだ。ちなみに、放射線がDNAにダメージを与える様式にも 2 種類あり、DNAが放射線によって切断される直接作用と、放射線によってラジカル化した水分子がDNAにダメージを与える間接作用とがある。また、DNAダメージ以外にも、組織の変性等、他の機序による生体影響があることも忘れてはならない。

 

確定的影響と確率的影響

放射線が人体に与える影響は、確定的影響確率的影響とに大きく分類される。確定的影響においては、障害の重篤度が線量に依存し、発症のしきい値がある。主たる影響は皮膚炎や白内障などであり、危険度の尺度は吸収線量である。一方、確率的影響においては、障害の発現頻度すなわちリスクが線量に依存し、現在の研究ではしきい値はないとされている。主たる影響はがんや遺伝的な影響であり、危険度の尺度は等価線量である。死に至る放射線障害としては、中枢神経死、胃腸死、骨髄死などの病態がある。中枢神経死は痙攣や振戦、昏睡等の中枢神経の障害によって 1 日以内に死亡するものである。胃腸死および骨髄死については後述することにしよう。

 

放射線感受性と Bergonie - Tribondeau の法則

細胞はその分裂頻度が高いほど、将来の分裂回数が多いほど、形態および機能的に未分化なものほど、放射線感受性(放射線からのダメージの受けやすさ)が高い。これを、発見した 2 人の名をとって Bergonie - Tribondeau (ベルゴニー・トリボンドー)の法則という。

Bergonie - Tribondeau の法則
1. 細胞分裂頻度の高いものほど放射線感受性が高い
2. 将来行う細胞分裂回数が多いものほど放射線感受性が高い
3. 形態的・機能的に未分化なものほど放射線感受性が高い

 

ちなみに、間違えて覚えられることが多いが、Bergonie - Tribondeau の法則は同一の細胞再生系に対してのみ適応できる法則であり、多種の組織間の放射線感受性を比較するための法則ではない

具体的な例を考えてみよう。例えば、原爆の被爆者に最初に現れた症状は下血である。健常なヒトの場合、小腸の絨毛表面を覆っている上皮細胞は腺窩の底部付近の幹細胞が分裂して内腔に押し上げられ、順次分化し、最終的には絨毛先端部から脱落する。この幹細胞は 分裂頻度が高いうえに 将来の分裂回数も多く、さらに未分化なために感受性が高い。したがって、放射線に被曝した場合、上皮細胞が絨毛先端部から脱落しても腺窩で新生しなくなり、粘膜下の腸管壁が自己消化されて下血を惹起するのである。前述した胃腸死の機序がこれにあたる。

さて、LD50/60 (60 日後の半数致死線量)に相当する約 4 Gy の被曝では、主たる死因は白血球減少による感染症、もしくは血小板減少による出血である。骨髄中の造血幹細胞は、全ての種類の血球細胞、すなわち赤血球、白血球、血小板、リンパ球に分化することが可能であることからもわかるように、 放射線に対して感受性が高い。したがって、造血幹細胞が損傷することにより、血球成分の減少を惹起する。前述した骨髄死の機序がこれにあたる。1 ~ 2 Gy の被曝では、中程度の白血球および血小板の減少がみられる。なお、現在では、骨髄移植によってこの障害に対しては治療が可能である。

 

以上のように、放射線が生体に対して与える影響には様々な機序がある。この記事では触れなかったが、被曝する線種によっても、その影響は異なる。本来であれば、線種による生体影響の違いについても解説せねばならないところだが、それに関しては簡単な放射線物理学の知識が必要になるため、別の機会に譲ることとしよう。また、放射線によるDNA損傷については、分子生物学的な説明が必要なのだが、分子シグナリングや細胞周期チェックポイントといった本格的な分子生物学に手を出さねばならないので、初学者には敷居が高い。かくいう著者自身だって、そのあたりのシグナリング経路を記憶しているかと言われればそうではない。学校で習ってから、既に10年以上が経過してるのだ。やはり、こちらに関しても別の機会に譲ることとしよう。