アクティブシートから特定の書式のセルの数をカウントするマクロ

つくるもの

作業するときに、エクセルでメモを残しながらやっている。 セルの書式毎に「疑問」とか「解決済み」とかタグをつけながらやっている。 発散してくると、「疑問点何個残ってるんだっけ?」となるので集計したい。

いつもの作業イメージ

いつもの作業イメージ

マクロの完成イメージ

マクロの完成イメージ

コード

'
' アクティブシートから特定の書式のセルの数をカウントするマクロ
'

Sub CountCellsByCellStyleInActiveSheet()
    '変数定義
    Dim strA As String 'Aセルの意味
    Dim strB As String 'Bセルの意味
    Dim strC As String 'Cセルの意味
    
    Dim countColorA As Long ' Aセルの色を表す変数
    Dim countColorB As Long ' Bのセルの色を表す変数
    Dim countColorC As Long ' Cのセルの色を表す変数

    Dim countA As Long ' Aセルの数をカウントするための変数
    Dim countB As Long ' Bのセルの数をカウントするための変数
    Dim countC As Long ' Cのセルの数をカウントするための変数
    
    Dim cell As Range ' セルを表す変数
    
    Dim cellA As Range 'Aセルのカウント数出力場所
    Dim cellB As Range 'Bセルのカウント数出力場所
    Dim cellC As Range 'Cセルのカウント数出力場所
    
    '変数初期化
    countA = 0 ' セルの数の初期化
    countB = 0 ' セルの数の初期化
    countC = 0 ' セルの数の初期化
    
    ' **** config ***
    'A,B,Cの意味
    strA = "疑問"
    strB = "Todo"
    strC = "解決"
    
    'A,B,Cの色
    countColorA = RGB(255, 235, 156) ' Aのセルの色を変数に格納
    countColorB = RGB(255, 199, 206) ' Bのセルの色を変数に格納
    countColorC = RGB(198, 239, 206) ' Cのセルの色を変数に格納
    
    'A,B,Cのカウント結果出力場所
    Set cellA = Range("G1")
    Set cellB = Range("I1")
    Set cellC = Range("K1")
    
    ' ***************
    
    For Each cell In ActiveSheet.UsedRange
        ' 背景色がAのセルの場合、カウントする
        If cell.Interior.Color = countColorA Then
        countA = countA + 1
        ' 背景色がBのセルの場合、カウントする
        ElseIf cell.Interior.Color = countColorB Then
        countB = countB + 1
        ' 背景色がCのセルの場合、カウントする
        ElseIf cell.Interior.Color = countColorC Then
        countC = countC + 1
        End If
    Next cell
    
    '見出しの分だけcount結果を引き算
    countA = countA - 1
    countB = countB - 1
    countC = countC - 1
    
    ' カウント結果をセルへ書き込み
    cellA.Value = countA
    cellB.Value = countB
    cellC.Value = countC
    
   
    ' カウントしたセルの数をメッセージボックスで表示
    MsgBox "セルを集計しました" & vbCrLf _
            & strA & ": " & countA & vbCrLf _
            & strB & ": " & countB & vbCrLf _
            & strC & ": " & countC

End Sub

感想

VBAカスタマイズがなかなか楽しい。

CMakeLists.txtの再帰的検索とサブディレクトリの追加

はじめに

CMakeを使用したプロジェクトのビルド設定では、CMakeLists.txtファイルを用いてプロジェクト構成を定義する。特に、大規模なプロジェクトや階層構造が深いプロジェクトの場合、カレントディレクトリとそのサブディレクトリ内にあるすべてのCMakeLists.txtファイルを検索し、それらをプロジェクトのサブディレクトリとして追加する方法が役立つらしい。

以下に再帰的にCMakeLists.txtファイルを検索し、サブディレクトリを追加する一例を示す。

実例と解説

cmake_minimum_required(VERSION 3.x)
project (your_project_name)

file(GLOB_RECURSE TEST_LISTS
        RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
        */CMakeLists.txt)

foreach(list ${TEST_LISTS})
    get_filename_component(dir ${list} PATH)
    add_subdirectory(${dir})
endforeach()

このCMakeLists.txtファイルは以下の処理を行っている。

  1. 必要な最低限のCMakeバージョンを指定
  2. プロジェクト名を指定
  3. カレントディレクトリから再帰的にCMakeLists.txtファイルを検索し、結果を変数に格納
  4. 検索したCMakeLists.txtファイルに対してループを実行
  5. 現在のループで処理されているCMakeLists.txtファイルのディレクトリ名を取得
  6. ディレクトリをサブディレクトリとして追加
  7. ループを終了

この方法を使用することで、ディレクトリ構造内のすべてのCMakeLists.txtファイルが自動的に処理され、プロジェクトのビルド設定が生成される。

もうちょっと具体的に解説

このCMakeLists.txtファイルは、以下の処理を行っている。 (チャットGPT-4さんの説明)

  1. cmake_minimum_required(VERSION 3.x)は、このプロジェクトで必要な最低限のCMakeバージョンを3.xに指定しています。これにより、古いバージョンのCMakeを使用している場合は、エラーメッセージが表示されます。

  2. project(your_project_name)は、プロジェクト名をyour_project_nameに指定しています。

  3. file(GLOB_RECURSE TEST_LISTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} */CMakeLists.txt)は、GLOB_RECURSEを使って、カレントディレクトリ(${CMAKE_CURRENT_SOURCE_DIR})から再帰的にCMakeLists.txtファイルを検索し、結果をTEST_LISTS変数に格納しています。RELATIVEオプションは、結果のパスをカレントディレクトリを基準にした相対パスにするために使用されています。

    1. file: CMakeの file コマンドは、ファイルやディレクトリに関する操作を実行するために使用されます。これには、ファイルの読み書き、ディレクトリの作成、およびファイルの検索などが含まれます。
    2. GLOB_RECURSE: file コマンドの GLOB_RECURSE オプションは、指定されたパターンに一致するファイルを再帰的に検索します。つまり、カレントディレクトリとそのサブディレクトリ内のすべてのファイルを検索対象とします。
    3. TEST_LISTS: 検索されたファイルの結果を格納する変数名です。この例では、TEST_LISTSという変数に検索結果が格納されます。
    4. RELATIVE: RELATIVE オプションは、検索結果のファイルパスを、${CMAKE_CURRENT_SOURCE_DIR} からの相対パスとして取得することを指定します。これにより、絶対パスではなく相対パスを扱うことができます。
    5. ${CMAKE_CURRENT_SOURCE_DIR}: 現在のソースディレクトリへのパスを表す変数です。CMakeLists.txtファイルがあるディレクトリを指します。
    6. /CMakeLists.txt: 検索するファイルのパターンを指定します。この場合、すべてのサブディレクトリにある CMakeLists.txt ファイルを検索対象とします。

    このコマンドを実行すると、カレントディレクトリとそのすべてのサブディレクトリから CMakeLists.txt ファイルを再帰的に検索し、相対パスTEST_LISTS という変数に格納します。この変数は、後続の foreach ループで処理され、各サブディレクトリがプロジェクトに追加されます。

  4. foreach(list ${TEST_LISTS})は、TEST_LISTSに格納されたすべてのCMakeLists.txtファイルに対してループを実行します。

    • foreach(list ${TEST_LISTS}): TEST_LISTS 変数に格納された各ファイルパスに対してループを開始します。ループ内では、list という変数に現在のファイルパスが格納されます。
  5. get_filename_component(dir ${list} PATH)は、現在のループで処理されているCMakeLists.txtファイルのディレクトリ名を取得し、dir変数に格納しています。

    • get_filename_component(dir ${list} PATH): get_filename_component コマンドは、ファイルパスから特定のコンポーネントを取得するために使用されます。この場合、PATH オプションを使用してファイルパスからディレクトリ部分を抽出し、dir という変数に格納しています。
  6. add_subdirectory(${dir})は、dirで指定されたディレクトリをサブディレクトリとして追加します。これにより、そのディレクトリ内のCMakeLists.txtファイルが処理されます。

    • add_subdirectory(${dir}): add_subdirectory コマンドは、指定されたディレクトリを現在のプロジェクトにサブディレクトリとして追加します。このコマンドは、${dir} で指定されたディレクトリにある CMakeLists.txt を処理し、そのディレクトリ内のプロジェクト構成を現在のプロジェクトにマージします。
  7. endforeach()は、foreachループを終了します。

このCMakeLists.txtファイルの目的は、カレントディレクトリとそのサブディレクトリ内にあるすべてのCMakeLists.txtファイルを検索し、それらをプロジェクトのサブディレクトリとして追加することです。これにより、ディレクトリ構造内のすべてのCMakeLists.txtファイルが自動的に処理され、プロジェクトのビルド設定が生成されます。

シェルスクリプト `if [ -s hoge.txt ]; then` の意味

疑問

下記のシェルスクリプトに出会ったが意味がわからなかったので調査しました。

if [ -s hoge.txt ]; then
    rm hoge.txt
fi

調査結果

このシェルスクリプトは、hoge.txt というファイルが存在し、かつサイズが0より大きい(空でない)場合に、そのファイルを削除する役割を果たします。以下、各行の詳細な説明です。

  1. if [ -s hoge.txt ]; thenhoge.txt というファイルが存在し、サイズが0より大きいかどうかを確認します。s オプションは、ファイルが存在し、かつサイズが0より大きい場合に真となります。
  2. rm hoge.txt:条件が真の場合に実行されるコマンドです。hoge.txt コマンドは、hoge.txt というファイルを削除します。
  3. fiif ステートメントの終わりを示します。

このシェルスクリプトは、hoge.txt ファイルが存在し、サイズが0より大きい場合に、そのファイルを削除する目的で使用されます。これは、例えばテストの結果をログに記録する前に古いログをクリアするために役立ちます。

補足

if [ -s file ] のような条件式は、ファイルの存在とそのサイズが0より大きいことを確認するために使われることがあります。ただし、スクリプトの目的や要件によっては、他の条件もよく使われます。以下に、よく使われるファイルに関する条件オプションをいくつか紹介します。

  1. e file:ファイルが存在する場合に真となります。 例:if [ -e test_log.txt ]; then
  2. f file:ファイルが存在し、通常のファイルである場合に真となります。 例:if [ -f test_log.txt ]; then
  3. d file:ファイルが存在し、ディレクトリである場合に真となります。 例:if [ -d test_directory ]; then
  4. r file:ファイルが存在し、読み取り可能である場合に真となります。 例:if [ -r test_log.txt ]; then
  5. w file:ファイルが存在し、書き込み可能である場合に真となります。 例:if [ -w test_log.txt ]; then
  6. x file:ファイルが存在し、実行可能である場合に真となります。 例:if [ -x script.sh ]; then

スクリプトの目的に応じて、これらの条件オプションを使い分けることが一般的です。-s オプションは、特定のケースで有用ですが、他のオプションと同様に、スクリプトの要件に応じて適切に使用されます。

参考

ChatGPTさんにききました。

command > /dev/null 2>&1 の意味

疑問

シェルスクリプトで下記のような記述に出会ったのでなんのことか調べてみた。

command > /dev/null 2>&1
# command は任意のコマンドのこと

調べた結果

Linuxコマンドので任意のcommandを実行し、その際の標準出力と標準エラー出力を捨てることを意味しています。

各部分の意味は以下のとおりです。

  • commandcommand を実行
  • >:標準出力(stdout)をリダイレクトします。ここでは、/dev/null にリダイレクトしています。
  • /dev/null:リダイレクト先。ここに送られたデータはすべて破棄されます。つまり、標準出力を捨てることになります。
  • 2>標準エラー出力(stderr)をリダイレクトします。
  • &1:標準出力へのリダイレクト先を指定します。この場合、標準出力(すでに /dev/null にリダイレクトされている)と同じ場所にリダイレクトされます。つまり、標準エラー出力も捨てられます。

このコマンド全体で、commandを実行し、
その際に発生する標準出力と標準エラー出力を両方とも捨てることができます。これにより、コマンド実行時にコンソールに何も表示されなくなります。

command > /dev/null 2>&1 コマンドは、command 実行時にエラーが発生しても、エラーメッセージが表示されないようになります。

このコマンドの構成要素は、標準出力と標準エラー出力/dev/null にリダイレクトしているため、コマンド実行時にコンソールに何も表示されません。これは、スクリプト実行中に不要なエラーメッセージを表示しないようにするために役立ちます。

参考

いい加減覚えよう。 `command > /dev/null 2>&1`の意味 - Qiita

ExcelVBAでQA表テンプレートを自動作成

作るもの

こんな感じのQA表テンプレートを作るためのマクロを実装

QA表シート
pulldown用のシート

マクロコード抜粋

Sub QA表作成()

    Dim NewSheet As Worksheet
    Dim ActiveSheetIndex As Long

    ' アクティブシートのインデックスを取得
    ActiveSheetIndex = ActiveSheet.Index
    ' 新しいシートを作成し、アクティブシートの次に配置
    Set NewSheet = Sheets.Add(After:=Sheets(ActiveSheetIndex))
    ' シート名を変更
    NewSheet.Name = "QA表"

    ' ヘッダー行を設定
    Range("B2").Value = "No"
    Range("C2").Value = "Status"
    Range("D2").Value = "Q"
    Range("E2").Value = "Q補足"
    Range("F2").Value = "A"

    ' テーブルを作成
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$2:$F$17"), , xlYes).Name = "テーブル1"

    ' テーブルの罫線を設定
    With Range("B2:F17").Borders
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

     ' セルの上揃えと左揃えを設定
    With ActiveSheet.ListObjects(1).DataBodyRange
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
    End With

    ' ヘッダー行の背景色を設定
    With ActiveSheet.ListObjects(1).HeaderRowRange.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.799981688894314
    End With
    
    With ActiveSheet.ListObjects(1).HeaderRowRange.Font
        .Color = RGB(0, 0, 0) ' 黒色に設定
    End With

    With ActiveSheet.ListObjects(1)
        .TableStyle = "TableStyleLight1" ' テーブルスタイルをシンプルなものに変更
        .ShowTableStyleRowStripes = False ' 行のストライプを削除
    End With

    ' Q, Q補足, A列の幅を設定
    Columns("D:F").ColumnWidth = 30.58

    ' 新しいシートを作成し、アクティブシートの次に配置
    Set NewSheet = Sheets.Add(After:=Sheets("QA表"))
    ' シート名を変更
    NewSheet.Name = "_pulldown_"

    ' プルダウン用の値を設定
    Range("A1").Value = "Open"
    Range("A2").Value = "Closed"

    ' QA表シートに戻る
    Sheets("QA表").Select

    ' Status列のデータ検証を設定
    With ActiveSheet.ListObjects(1).ListColumns("Status").DataBodyRange.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=_pulldown_!$A$1:$A$2"
        .IgnoreBlank = True
        .InCellDropdown = True
    End With

    ' Status列の条件付き書式を設定(Open)
    With ActiveSheet.ListObjects(1).ListColumns("Status").DataBodyRange.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Open""")
        .Font.Color = -16383844
        .Interior.Color = 13551615
    End With

    ' Status列の条件付き書式を設定(Closed)
    With ActiveSheet.ListObjects(1).ListColumns("Status").DataBodyRange.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""Closed""")
        .Interior.ThemeColor = xlThemeColorDark1
        .Interior.TintAndShade = -0.249946592608417
    End With

    Range("A1").Select
End Sub

感想

マクロの自動記録 + 手直しでできた。
わからないところはChatGPT先生にきいた。

改訂履歴

  • 2023/03/19: コードのリファクタリングとコメント追加
  • 2023/03/20: 表のセルの上揃えと左揃えを追加

シェルワンライナー160本ノック: 問題3

問題

下記コマンドで100万個ファイルを作る

$ mkdir ./tmp
$ cd ./tmp 
$ seq 1000000 | xargs -P 2 touch

このファイルを先頭に0つけて7桁のファイルにするようにする

答え

$ time ls -U | xargs -P2 rename 's/^/0000000/;s/0*([0-9]{7})/$1/'

解説

まず rename コマンドは正規表現にマッチしたファイルを同じく正規表現で置換した結果にリネームするというやつ。

ls -U はlsをソートせずに表示するやつ。ソートしない分速いらしい。

ここから肝心の正規表現について解説していく。

先頭に0つけて7桁にするには下記ステップを踏めばOK

(1)とりあえず全ファイルの先頭に0000000 をつけちゃう

(2)0*繰り返しのあと数字7桁のみを切り出しちゃう

上記(1)(2)を正規表現で書くと…

#(1)
s/^/0000000/
#(2)
s/0*([0-9]{7}/$1/
#0* : 0の0こ以上の繰り返し
#() : キャプチャグループ。カッコの中の正規表現にマッチするやつを後で$1で参照できるようにする
#[0-9]{7} :任意の数字7桁にマッチ。詳しく下記で
#[0-9]: 範囲指定の正規表現 0-9の任意の数字にマッチ
#{7}: 直前の正規表現の繰り返し回数
#つまりまとめると⇒ 末尾の7桁を残してそれより頭についている0は削除。

感想

chatGPTで質問すれば、わからないところすぐ教えてくれるしすごい。

新しい職場でlinuxごりごり使いそうなので、シェルを使いこなせるといいかなと思ってやり始めたが、「AIに駆逐されるのでこの勉強も不要なのか?」と思いつつ、コツコツやってみる。

イギリス旅行

イギリス旅行にいきました

※まずは、脳みそのことを吐き出します。 ※気が向いたら、写真やらをつけながら校正するかもです。

はじめに

2023/02/16 - 2023/02/23の期間でイギリス旅行へいった。 転職に伴う有休消化のため、行くしか無い。ということで。

雑多につらつらと

  • 飛行機について
    • 費用と経路
      • 結局トータルで26万円
      • 往路:セントレア→羽田→ヒースロー(いずれもANA
      • 復路:ヒースロー→フランクフルト→羽田→セントレア(羽田まではルフトハンザ、羽田からはANA
    • 予約の方法について
      • expediaで検索して目星をつけた後に、ANAのHPで直接確認したが、そちらの方が一万円ほど高かったので、結局expediaで予約。
    • オンラインチェックインについて
      • 復路ルフトハンザのチェックイン
        • 事前座席指定は有料。安くても5000円ぐらいからだったため、23h前から可能なオンラインチェックイン時の座席指定を利用することにした。
        • ルフトハンザの公式HPからだとなぜかオンラインチェックイン時に座席指定ができなかった。且つ、オンラインチェックイン自体もエラーで弾かれてできなかった。(途中までは進むが最後のステップでエラーとなってしまう)
        • 結局、ルフトハンザから届いたオンラインチェックイン開始した旨を通知するメールのリンク経由から実施できた。
        • ブラウザのせいなのか、途中からドイツ語になってしまったが、UIの感じでノリで理解できる。
    • トランジットのこと
      • 荷物について
        • 往路は、今回、セントレアで預けてから目的地まで直接届けてくれた。
        • 復路は、羽田で荷物受け取って税関とおって、再度国内線の受付で再度預ける必要があった。
        • ANAもルフトハンザも同じアライアンス(スターアライアンス)のため
      • 往路時の羽田でのトランジット
        • 国内線(ターミナル2)から国際線(ターミナル3)への乗り継ぎが必要だった。
        • 事前の調査ではゲートを出なくても乗り継ぎ用のバスがでているとのことだったので、案内に従って進んだが、コロナためか現在は運休中だった。「あらぁ」と思っていると掃除のおばちゃんが声を掛けてくれて、一度ゲートを出た後に9番乗り場からシャトルバスがでてるのでそれに乗ればよいよ。とのこと。頻繁に出ているようで、向かうとすぐにバスが来て出発できた。
      • 復路時のフランクフルトでのトランジット
        • ターミナル1のZに着く、 同じターミナル1のBに向かう必要があった。
        • トランジットの時間は85min.しかなかったため少し不安だったが、なんの問題もなかった。
        • 降りるとBはこちらというような案内があるためそれに従って進む。途中で階段を降りるとシャトルバスが待っていたためそれに乗り込めばBに着いた。おそらく降りてから15min.ぐらいで、目的の搭乗口へ着けた。
  • 1日目:移動、ロンドン着
    • 名古屋→羽田で1h20m、羽田→ロンドンで17hをかけて、15:35へロンドン着
    • 空港から市街までは地下鉄を利用した。1hぐらいでついた。街並みを見ながら段々と都会になっていく様子を見られて良い。
    • まずはホテルへチェックインした。受付の若いのお姉さんの喋りが早くて、全然聞きとれず、「これは厳しくなりそうだぁ」と思った。
    • 利用したホテルはこちら:メルボルンハウス
      • https://www.expedia.co.jp/London-Hotels-Melbourne-House.h1381713.Hotel-Information
      • 費用は2泊で¥42,388。高い。。
      • 3日目でブライトンに行く予定だったので、電車が出ているということでビクトリア駅にした。
      • ただ、結局ビクトリア駅発でない電車を使ってブライトンに行ったためあまり意味はなし。。。
      • 周りは結構ホテルが多かった印象。あまり騒がしくなく立地的には良かったと思う。
    • とりあえず、ロンドンっぽいところに行くか。ということでタワーブリッジへ向かった。
    • 晩ごはんはハンバーガー。一緒に頼んだIPAがめちゃくちゃうまかった。また飲みたい。イギリスで展開されているチェーンのようなので、機会がある方はぜひ行くことをおすすめする。
  • 2日目:ロンドン観光
    • 早く目が冷めたので、ビッグベンのあたりをお散歩した。
    • そのまま、オープンと同時にウェストミンスター寺院へ。
      • 大きくてびっくりした。イタリア、ドイツ、ベルギーなどで見てきた教会とは規模がまた違うな。という印象。
      • 入場料はなかなか高いが、一見の価値あり。日本語音声ガイドもあるのでじっくり楽しめる。
    • その後、10時半過ぎにバッキンガム宮殿へ到着、11時からの衛兵交代を見た。
      • 結構人が集まっていた。
      • ある程度見て満足したので、全部は見ずに昼ごはん探しに移動。
    • 昼ごはんはこちら:The Kati Roll Company
    • 大英博物館に向かったら、休館日だった。 (後でHPを確認したらストライキだった模様)
    • 代わりにナショナル・ギャラリーへ。
    • 疲れたので、カフェで休憩し、一旦宿にもどった。
    • 晩ごはんは宿の近くのこちら:O'Sole Mio
      • https://goo.gl/maps/ffABC4LdApC1aGHz5
      • ボロネーゼとガーリックパンみたいなのを頼んだ。
      • 量が多かったので、パンは持ち帰った。
        • "Can I have box to take away?"で持ち帰り用に包んでもらえた。
    • ミュージカル「オペラ座の怪人」を鑑賞
      • https://goo.gl/maps/ZBEkYBsmtyo76j7DA
      • 事前に映画で予習していたので、英語聞き取れずとも楽しめた。
      • 日本人の方が出ていて、かっこいいなぁ。と感じた。
    • バスで、宿まで戻って、終了。
      • ロンドンでの移動は地下鉄、バスあるが、個人的にはバスのほうが好みだった。
      • 街の景色を見れるところが良い。
      • 地下鉄は、空気が悪くてちょっと苦手だった。
  • 3日目:ブライトン
    • ロンドン→ブライトンへ移動
      • TrainLineのサービスを使って予約した。路線はThameslink。
      • 90mぐらい。朝7:30ぐらいの電車に乗ったので空いていた。
    • 宿にバックパックを預けた:カッパドキア ゲスト ハウス
    • 朝食を食べた:Regency Restaurant
    • 街を散策
    • サッカー観戦(ブライトンvsフラム)へ: フェルマースタジアム(American Express Community Stadium)
      • https://goo.gl/maps/P1ADabNYsto6PHU57
      • 「三笘ユニ買っちゃうぞー」と思って行ったが、ショップには見当たらず。。。多分売り切れ?
      • ビールを買って、スタジアム周りを散歩したりしながら時間を潰した。
      • 入場してからは、スタンド裏のフードショップ前にテレビがあり、そこでアーセナル戦が流れてたので、そこでみんなで鑑賞。
        • 「おぉ!」「あぁ~」などみんなでワイワイ見ていて、すごい楽しかった。
      • 本ちゃんの試合はまぁしょっぱい試合で、Fワードが飛び交っていた。それでも生でプレミア観戦できて嬉しかった。
    • 戻って晩ごはん:China Garden
  • 4日目:リバプールへ移動
    • 少し早起きしてブライトンで朝ごはん:GAIL's Bakery Brighton
    • ブライトンからロンドン ユーストンへ移動
    • ユーストン駅近くで昼ごはん:Cappadocia Cafe & Bistro
    • ユーストンリヴァプール
      • AvantiWestCoastを利用
      • 公式HPから予約した。
      • 電車遅れた。
        • 電車に乗り込んでも30m出発せず。駅のシグナルトラブルとのことで、ホームに追い出される。
        • どうなるんだぁ。。。と思っていたら、一本後の電車へシフトせよ。とのこと。
        • シフトした先で、もともとその電車に乗る予定の人が既に乗っており、指定席がバッティング。
        • 皆さん、一本シフトされたんだよ。と話して、移動してもらっていた。
        • その間、車内でのアナウンスは無し。その辺が、「まじかよ」という感じ。
        • 結局周りの顔ぶれをみると結構変わっている状態のまま1h遅れで出発した。
        • 出発した際はみんな「ふぅー!」とか言ってて面白かった。
      • リバプール着いたらまずは宿へ:ibis Styles Liverpool Centre Dale Street
      • ibis stylesはホテルチェーンの模様。
        • 2泊で¥16,772。安い。ロンドンが高すぎるだけか。
        • ロンドンより広いし、良かった。wifiも早かった。
      • 晩ごはんへ:Etsu
        • https://goo.gl/maps/poTXpi6yo6a4rL8w5
        • 喉が痛くて、風邪っぽかったので日本食へ。(弱っているときは馴染みの味を求める。)
        • 日本人の方が経営しており、すごく居心地がよかった。
        • その日のおすすめのビーフカレーを頂いた。とても美味しかった。
        • デザートもどらやきを頂いた。これもすごく美味しかった。
        • 日本語が聞こえることの安心感を強く感じた。
        • お店の方も丁寧に接客してくださって、最高だった。
        • 日本人で機会がある方は是非行ってほしい。
        • 自分が「ロンドンはゴミゴミしているので、リバプールの方がいいですね」と行ったら、お店の方が「あら、私はロンドンのが好きで。。。」っと仰っていて面白かった。
  • 5日目:リバプール観光
    • 風邪が悪化。多分この日が一番体調が悪かった。
    • 朝ごはん:Rococo
      • https://goo.gl/maps/Tzj3AhUHKuQNSHrt5
      • パニーニを食べた。
      • 2階にあるのだが、思ったより中は広くてびっくり。飲み物はその場でカウンターから受け取って、食べ物は番号札を持って席で待っていると届けてくれる。
      • レジのお姉さんが、「3階もあるから、使っていいよ。」と教えてくれて窓際の席で通りを眺めながらゆったりできてよかった。
      • 味も美味しかった。
    • ビートルズを学びに:The Beatles Story Exhibition/Museum
    • 遅めのお昼ごはん:AKA SUSHI Liverpool
    • ホテルに戻って、ゴロゴロして英気を養っていた。
      • 晩ごはんは食欲もなかったので、スーパーでリンゴとオレンジジュースを買って済ませた。
  • 6日目:マンチェスター観光
  • 7日目:ロンドンへ移動
    • 電車でロンドンへ
      • AvantiWestCoastを利用
      • 10min.ほど遅れたが、無事にロンドンに着いた。
      • 結構頻繁に遅れる印象なので、AvantiWestCoastは要注意だなと言う認識を持った。
    • 宿でチェックイン:Lancaster Hall Hotel
    • まずはお昼ごはん:Frankie & Benny's
      • https://goo.gl/maps/MJQosxfJS3AJikGu8
      • バーベーキューチキンを頼んだのだが、めちゃくちゃ美味しくてびっくりした。
      • チキンの下味がうまかった。
    • 大英博物館
      • https://goo.gl/maps/NNYwid4q5eBf6TUXA
      • 想像の数倍すごかった。
      • ここに来るだけでもイギリスに行く価値があると感じた。
      • 世界各地に関する展示物があり、大地球博物館という感じ。
      • 特にエジプト関連の展示は、日本に住んでたら見れないものばかりですごく面白かった。
    • お土産めぐりを実施
      • 主にピカデリーサーカス周りで定番なものを買い漁った。
      • ただ、後で空港のショップで全て売っていた。笑
      • 地下鉄ヴィクトリアラインを使ったんだけど、すごくきれいだった。割りと新しい路線なのかも。
    • 晩ごはんはスーパーで果物買って済ませた。
      • もうあまり食欲がなくなってた。
  • 8日目:日本へ帰る
    • ヒースロー空港
    • 荷物を預ける。
      • このとき「ヴァクシネーション」と言われて意味不明だった。
      • 「vaccination」ワクチンのことで、接種証明見せてということだった。注射を打つジェスチャー、covid-19などの単語で理解して、ハイハイと接種証明アプリ画面を見せてOK
    • なんやかんやで、日本へ着。
    • 10時過ぎに羽田について、名古屋へは17時発で時間があったので、念願のサウナ北欧へ。
    • 19時頃名古屋について、旅行終了。
  • ロンドン感想
    • 急遽、行くなら今しかないと思って決めた旅行だったが、結果的には行って良かった。
    • 今回は1人で行ったので、今度海外行くときは奥さんと一緒に行って、色々思い出作れるといいなと思った。
    • 良かったところ
      • ahamoはそのまま海外ローミング使える。googleマップで迷わないし、美味しい店はすぐ見つかる。支払いはクレカのタッチ決済でほぼ全て完結する。といった感じで、自分が学生のときより海外旅行はめちゃくちゃ快適になっているなぁと感じた。
      • ご飯は大体美味しかった。The Britishみたいなものはあまり食べてないが、「イギリスはメシまずい。」は過去の話かと。
      • 人はみんな優しかった印象。
        • 海外の方が、人として空気を共有しているような感覚を得る気がする。
        • アイコンタクトとか、笑顔とか、なんか血が通ったコミュニケーションが多い気がする。
    • 良くなかったところ
      • 街並みは綺麗だが、街はゴミが沢山落ちていて汚い。地下鉄も汚い。
        • 日本はやっぱきれいだよぁと思う。東京でもきれいだし。電車の清潔さが全然違うんだよな。と感じた。
      • 歩きタバコしているひとが沢山いる。まぁそういう文化なので割り切るしか無いが。