2026年6月アーカイブ

水曜日。段原勤務だったので帰りに広島駅へ。

20260610_takenoya1.jpeg
これがよくない。吸い込まれるようにエレベーターに乗った俺は MINAMOA の 6階のレストラン街へ。その一番奥にある「竹乃屋 MINAMOA店」の立ち呑みコーナーを目指すのだった(笑)

以前もこのブログで書いたが、立ち呑みコーナーは焼酎が 99円なのである。ロックでもお湯割りでも 99円。5杯のんでも 495円。普通の居酒屋で 1杯の焼酎を飲むのと同じ金額で 5杯飲めるのだ。素敵じゃーん(笑)

そして、俺がこの店に吸い寄せられるもう一つの理由。それは「焼鳥が美味い!」である。そもそも竹乃屋は博多鶏皮串の店。だから他の焼鳥も美味い。ただ、酒の異常な安さに対して、焼鳥の値段は「普通」である。それがこの日、俺に「立ち呑み勝負敗退」の屈辱を与えることになるのである。

話を続ける。

何度かこの店を訪れ、すっかり俺にも「この店に来たら絶対頼んじゃう好物の串」ができた。それが「親鳥ふりそで」と「焼さば串」であり。どちらも一本税込み 209円である。いや、「焼さばって焼鳥じゃないじゃん!」という無粋なツッコミはやめていただきたい。俺はその好物の串を 2ずつと、これまた好物の「とりもも梅肉」焼鳥 1本、と一緒に 5本の串を注文。

20260610_takenoya2.jpeg
・・・がこの日は酒を飲みながらメッセージアプリで高校の同級生と弱い新井カープを嘆き、地元の飲み仲間と最近祖生で飲み会が開かれていないことを嘆いていると、なんか酒が進み、いつの間にかレモンサワー 1杯、芋焼酎ロック 2杯、芋焼酎お湯割り 2杯を飲み干していたのだ。
しかし、レモンサワーは 209円だけど、それでも飲み代は合計 605円である。5杯酒飲んで 605円。笑えるほど安い。

・・・が、結局この日のお代は 2,497円。完全な敗北である。
初めてこのブログを訪れた人は「え?なに?なんで急に敗北とか言い出してんの?」と不思議に思われたであろう。俺は立ち飲み屋を愛する立ち呑み戦士。俺には俺の譲れない立ち飲み屋で飲むときの「美学」がある。

それは「勘定が 2,000円を超えないこと!」・・・だ。

立ち飲み屋でだらだらと粘って大量の酒を飲んだり、あるいはバクバクと卑しく大量の肴を口にする、そのどちらも俺の「立ち呑み美学」では「格好悪いこと。立ち呑み戦士として負け」なのである。立ち飲み屋は「ぱっと飲んで、さっさと立ち去る」姿こそ美しい。その「大酒も飲んで無いし、バクバク食ってもない」証が 2,000円以内の勘定である。

20260610_takenoya3.jpeg
ついつい instagram やメッセンジャーでの会話が楽しくて長居してしまった。そのため、竹乃屋ではいつも肴は 5本の串と決めていたのに、「親鳥ふりそで」を 1本追加。さらに「心残り」「なんこつ」「とりハツ」と 3本もの串を更に追加注文してしまったのである。

しかし、メッセージのやり取りが楽しくて己の美学を蔑ろにしてしまうなんて・・・俺はいつの間に寂しい立ち呑み独居老人となってしまっていたのか!?

立ち飲み屋で 2,497円も飲み食いしてしまうなんて・・・俺は卑しい豚野郎です。デブ男です。女王様、そのムチでこの情けない敗者に罰を・・・
先日、仕事の関係で並木通りを歩いているときに「焼鳥全品39円」の看板が目に入った。

20260611_sankyu3.jpeg
その時は仕事中だったのであまりはっきりと確認する暇もなく通り過ぎたのだが、数日後、本屋に行こうと思って並木通りを横切ったときにそのことを思い出したのである。

記憶を頼りに探してみたが見つからず、結局、平和大通りに達する寸前、並木通りの本当に端っこにその店はあった。

「やきとりさんきゅう 並木本店」。名前も「39」である。

19時開店ということで、まだ一時間あったが、好奇心にかられて店を確認するため、小さな古ぼけたビルの2階へ。

廊下の先のどん詰まり。そこに確かに「さんきゅう」はあったが、ビルそのものの雰囲気も怪しいし、「焼鳥全品39円」では集まってくる客層もまともではないのでは・・・と不安になり、久しぶりに俺は「一人で入るのが怖い店に一緒に行ってあげる会」の理事をしている呑み仲間のMイさんを呼び出したのであった。

20260611_sankyu1.jpeg
そして、19時前にアリスガーデンで待ち合わせをして、いざ「さんきゅう」へ。
少し早く着いたので店の前で待っていると、本当に19時ぴったりに店の中からおじさんが出てきて、「準備中」の札を「営業中」に変えながら、俺たちの姿に気づき「おまたせしてすみません。どうぞ」と中に招き入れてくれたのだ。

あり?なんかまともな人だぞ。入れ墨だらけの若い男とか、完全なコミュ障のじいさんとか、まともじゃない店主を想像していたので驚くとともに、なんか「一串39円の店が開くのを待っている貧乏くさい熟年男性」という己の姿に少し羞恥を覚えたのであった。Mイさんもそうだったようで、「なんか開くのを待っていたのを店主に見られて恥ずかしいですね」と言うので、俺は激しく頷いたのであった(笑)

で、焼き鳥だが、本当に 39円だった。5本盛り合わせセットも当然 195円である。「マジか!?」と驚き、更に「さえずり」「ぼんじり」「なんこつ」を注文する。全部39円だ(笑)。
ただ、飲み物は普通の値段である(笑)。最初に注文した「りんご酢サワー」は 430円。糞不味かった(^^; いや、この店のりんご酢サワーが不味いのではなく、りんご酢サワーというものそのものが不味いのだ。絶対日頃であればこんな酸っぱいもの注文しないのだが、一串39円という値段に俺も相当動揺していたのだろう・・・

さっさとその酸っぱい飲み物を飲み干して、口直しに「雨後の月」の熱燗を一合。これは 630円。

20260611_sankyu2.jpeg
というわけで、この日の俺のお代は「串 8本と、サワーと日本酒。あ、わさび 30円も追加したわ」で 1,752円。あれ?計算合わんな?と気づかれた方、なかなかの数学脳ですな。そう、ここには「お通し」のお代が入っているのだ。350円也。

日本の居酒屋特有の商習慣「お通し」。いや、まあ、俺的には席のチャージ料くらいに思ってて「お通し文化」そのものには文句ないんだけど、「あのショボい切り干し大根の煮物が 350円!?」と一気にボラれた感が出て、39円串へのお得感も吹っ飛んでしまったのであった・・・。100円でもいいくらいのショボさだったもので・・・(^^;;;

ちなみに 39円の串は「スーパーで買ってレンチンして食べるパックの焼鳥」そのものである(^^;。そんなんわざわざ店で食べたくないって思う人もいるだろう。でも、スーパーで買うと、「ねぎま」「もも」「かわ」くらいしかないじゃん。39円で「ぼんじり」とか「なんこつ」とかも楽しめる(そこそこの味だけど(^^;)のはやっぱり良いね。350円のお通しさえなければ・・・(^^;
20260613_nodejp1.jpg

Electron でのアプリ開発のために Git インストール後、今度は Node.jp を・・・

実際に使うアプリを開発するので(実験目的ではないので)、Node.js LTS版(Long Term Support(長期サポート)版)をインストールする。


2.下の方にある Node.js 24.16.0 (LTS) のアイコンをクリック。


4.node-v24.16.0-x64.msi を実行。ひたすら「Next」で進み、「Install」実行。

5.新しく立ち上げたコマンドプロンプトで、Node.js 関係のコマンドにパスが通っていることを確認

Microsoft Windows [Version 10.0.26200.8524]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>where npm
C:\Program Files\nodejs\npm
C:\Program Files\nodejs\npm.cmd

C:\Windows\System32>where node
C:\Program Files\nodejs\node.exe

C:\Windows\System32>

通ってる。
※コマンドプロンプトには「環境変数を読み直す」機能はないので、新しいウィンドウを起動しような。

6.一応、バージョンも確認。

C:\Windows\System32>npm --version
11.13.0

C:\Windows\System32>node --version
v24.16.0

OK。いよいよ、Electron のプロジェクト作って簡単なプログラムを書いてみる。
なんか最近、ラーメンの話よりプログラム開発ネタの方が多いな。いかん、いかん。しっかりしないと痩せてしまう

・・・しかし、今回も技術的なメモ。Git のインストール。ほんとにインストールのメモだけで、中身はありませんけど(笑)

Spring Boot + Spring Batch で作ろうと思っていたアプリを(結局 Web 画面ベースだとローカルファイルのパスをサーバ側に渡せないことがわかったので)、Electron で作る方向に方針変更。まずは Electron のお勉強を。

というわけで、こちらのサイト


を参考に、Electron セットアップのために必要な Git(バージョン管理システム)をインストールします。

ちゅうわけで、コマンドプロンプトを起動(管理者権限でね)し、Git のインストール開始。

Microsoft Windows [Version 10.0.26200.8524]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32> winget install --scope machine --id Git.Git -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS=""icons,ext\reg\shellhere,assoc,assoc_sh"" /o:PathOption=Cmd /o:CRLFOption=CRLFCommitAsIs /o:BashTerminalOption=MinTTY /o:DefaultBranchOption=main /o:EditorOption=VIM /o:SSHOption=OpenSSH /o:UseCredentialManager=Enabled /o:PerformanceTweaksFSCache=Enabled /o:EnableSymlinks=Disabled /o:EnableFSMonitor=Disabled"
'msstore' ソースでは、使用する前に次の契約を表示する必要があります。
Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
ソースが正常に機能するには、現在のマシンの 2 文字の地理的リージョンをバックエンド サービスに送信する必要があります (例: "US")。

見つかりました Git [Git.Git] バージョン 2.54.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/Git-2.54.0-arm64.exe
  ██████████████████████████████  60.4 MB / 60.4 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

C:\Windows\System32>

で、次は、Node.js をインストールします。Electron は Chromium と Node.js でデスクトップアプリを作るためのフレームワークじゃけえね。
そういえばそうだった。ずいぶん昔悩んだことがあるのだがすっかり忘れていた。

ファイルをアップロードするのではなく、単純にフルパスだけ Controller に渡してやって、実際のファイルの読み込みは Javaで行いたかったのだが、そういえばセキュリティ上の対策でローカルファイルのフルパスはブラウザからサーバ側には渡せないんだった。

一応、ファイル名を取ってくる処理を Spring Boot + Thymeleaf で書いてみたので、備忘録で載せておく・・・が、ファイル名しか取れないんじゃ意味がないんだよな(^^;;;
(ちなみに、これだけなら Thymeleaf で書かなくても、普通の HTML でいいじゃん・・・というご意見はあるでしょうが、フルパス取れたら色々拡張していこうと思ってたのよね)

■resources/templates/SelectLogs.html

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org" lang="ja">

<head>
	<title>対象ログファイル選択</title>

	<script>
		document.addEventListener('DOMContentLoaded', function() {
			document.getElementById('fileInput').addEventListener('change', function(e) {
				// 選択されたファイルを取得
				const file = e.target.files[0];
				const displayArea = document.getElementById('fileNameDisplay');

				if (file) {
					// ファイル名を表示要素にセット
					displayArea.textContent = file.name;
				}
				else {
					// キャンセルされた場合などのリセット処理
					displayArea.textContent = 'ファイルが選択されていません';
				}
			});
		});
	</script>
</head>
<body>
	<form>
		<!-- ファイル選択ダイアログ -->
		<input type="file" id="fileInput" style="display: none;" />

		<!-- ダイアログを呼び出すボタン -->
		<button type="button" onclick="document.getElementById('fileInput').click();">
		ファイルを選択
		</button>

		<!-- ファイル名を表示する要素 -->
		<span id="fileNameDisplay">ファイルが選択されていません
	</form>
</body>

</html>

※注意
ちなみに、addEventListener な処理を頭(head の中とか)に書くと、まだ実際には body部の要素(例えば、'fileNameDisplay' って名前の span要素)が読み込まれていないので、document.getElementById('fileNameDisplay')って指定でエラーになって addEventListener されない。
この場合は、この 'change'イベントの addEventListener を 'DOMContentLoaded'イベント のaddEventListener で囲ってやれば、すべての読み込みが終了後に 'change'tイベント追加処理が実行されるので問題ない。
body の一番後ろに script を書けば良いんだけど、古い人間なので、script は head 内に書きたいのよね(笑)


■java/com/netandfield/test/controller/SelectLogsController.java

package com.netandfield.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/SelectLogs")
public class SelectLogsController {

	/**
	* 初期表示
	* @return
	* @throws Exception
	*/
	@GetMapping
	public String init() throws Exception {

		return "SelectLogs";

	}

}

ローカルファイルのパスをどうしても Java に渡す処理を Web技術(HTML,CSS,JavaScript)を使って書きたいのなら、Electronなどで「デスクトップアプリ」として作れってことみたい。

Spring Boot と Electron を組み合わせるというのはありだな。Electron でフロントエンドを作り、Spring Boot で Electronデータの画面とデータのやり取りをするだけの REST API を動かすって形で。
なるほど。しかし、これだと Thymeleaf の出番がない?(^^;;; そもそも Thymeleaf の勉強もしたくて、Spring Boot + Thymeleaf の業務システムを作ろう思ったのよね。

ま、ブラウザがサーバにフルパスを渡せられるようになったら「セキュリティ上、大変問題」ってのはわかるので、Electron の勉強するか・・・
Kato83 さんの Web サイト「Pulog プログラムのブログ 略してプログ」の中の「Spring BootでSpring BatchのChunkモデルを試す」というエントリーを参考に Spring Batch を勉強させてもらっているんですが、この記事が書かれたのが約 6年前ということで対象バージョンが古い。今は SpringBatch も 6 までバージョンが上がっていて、そのままソースを拝借したのでは動きません。
 
そこで、Spring Batch 6 に対応した修正を行ったので、ここで公開しておきます。
俺以上に Spring Batch 素人で、それでも「とりあえず動かしてみんとようわからん」という方向けです(笑)
 
プロジェクトの依存関係(Dependencies)とかは Kato83 さんのサイトを参考にしてください。
ちなみに、今回は com.netandfield.test フォルダの下に全ファイル配置しています。
(なので、Config用のクラスの中で、User や UserRepository の import は行っていません)
 
 
■BatchTest1/src/main/resourses/application.properties
 
spring.application.name=BatchTest1
spring.datasource.url=jdbc:h2:./.data/h2/db;MODE=MySQL
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
 
 
■BatchTest1/src/main/java/com/netandfield/test/User.java
 
package com.netandfield.test;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Entity(name = "`user`")
@NoArgsConstructor
public class User {
    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer id;
    public String firstName;
    public String lastName;
}
 
※注意
h2 データベースを MODE=MySQL で使っているせいか、テーブル名=user が MySQL の予約語 USER とかぶって expected "identifier" エラーとなってしまいます。
@Entity(name = "user") の user をバックスラッシュで囲んで、@Entity(name = "`user`") のようにしてください。
 
 
■BatchTest1/src/main/java/com/netandfield/test/UserRepository.java
 
package com.netandfield.test;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
}
 
 
■BatchTest1/src/main/java/com/netandfield/test/BatchTest1Application.java
 
package com.netandfield.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BatchTest1Application {

	public static void main(String[] args) {
		SpringApplication.run(BatchTest1Application.class, args);
	}

}
 
 
■BatchTest1/src/main/java/com/netandfield/test/BatchTest1Configuration.java
 
package com.netandfield.test;

import java.text.Normalizer;

import org.springframework.batch.core.job.Job;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.job.parameters.RunIdIncrementer;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.Step;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.infrastructure.item.ItemProcessor;
import org.springframework.batch.infrastructure.item.data.RepositoryItemWriter;
import org.springframework.batch.infrastructure.item.data.builder.RepositoryItemWriterBuilder;
import org.springframework.batch.infrastructure.item.file.FlatFileItemReader;
import org.springframework.batch.infrastructure.item.file.builder.FlatFileItemReaderBuilder;
import org.springframework.batch.infrastructure.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.FileSystemResource;
import org.springframework.transaction.PlatformTransactionManager;

import lombok.extern.slf4j.Slf4j;

@Configuration
@Slf4j
public class BatchTest1Configuration {

    @Autowired
    public UserRepository userRepository;

    /**
     * sample.csv ファイルを読み込む
     * @return バッチ処理用 Reader item
     */
    @Bean
    public FlatFileItemReader<User> reader() {
        return new FlatFileItemReaderBuilder<User>()
                .name("userItemReader")
                .resource(new FileSystemResource("sample.csv"))
                .delimited()
                .names("firstName", "lastName")
                .fieldSetMapper(new BeanWrapperFieldSetMapper<>() {{
                    setTargetType(User.class);
                }})
                .build();
    }

    /**
     * Reader から渡されたオブジェクトを保存する形に変換する
     * 今回はアルファベットの大文字変換と、半角カナを全角カナに変換している
     * @return 変換後に保存するアイテム
     */
    @Bean
    public ItemProcessor<User, User> processor() {
        return user -> {
            final var firstName = Normalizer.normalize(user.getFirstName().toUpperCase(), Normalizer.Form.NFKC);
            final var lastName = Normalizer.normalize(user.getLastName().toUpperCase(), Normalizer.Form.NFKC);
            final var transformedUser = new User(firstName, lastName);

            log.info("before converted : " + user);
            log.info("transformed user : " + transformedUser);
            return transformedUser;
        };
    }

    /**
     * Processor から渡されたオブジェクトを書き込む(保存処理をかける)
     * @return 保存処理用のリポジトリ
     */
    @Bean
    public RepositoryItemWriter<User> writer() {
        return new RepositoryItemWriterBuilder<User>()
                .repository(userRepository)
                .methodName("save")
                .build();
    }

    /**
     * 1つのバッチ処理の処理順やエラーハンドリング等の定義を行う
     * @return Jobを返却
     */
    @Bean
    public Job importUserJob(JobRepository jobRepository, Step step1) {
        return new JobBuilder("importUserJob", jobRepository)
                .incrementer(new RunIdIncrementer())
                .flow(step1)
                .end()
                .build();
    }

    /**
     * Jobの中に含まれるステップを定義する
     * @return ステップを返却する
     */
    @Bean
    public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new StepBuilder("step1", jobRepository)
                .<User, User>chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }

}
 
 
テストデータは、Kato83 さんのものをそのまま使っています。
 
■BatchTest1/sample.csv
 
ジョン, スミス
田中, 太郎
ジョセフ, ジョースター
Erik, Satie
 
 
これらのファイルを用意して、BatchTest1Application.java を Java アプリケーションとして実行します(俺は Eclipse 上で実行してるもんで)
 
これで、
 
2026-06-09T17:18:46.581+09:00 INFO 684 --- [BatchTest1] [ main] o.s.batch.core.step.AbstractStep : Executing step: [step1]
2026-06-09T17:18:46.648+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : before converted : User(id=null, firstName=ジョン, lastName=スミス)
2026-06-09T17:18:46.648+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : transformed user : User(id=null, firstName=ジョン, lastName=スミス)
2026-06-09T17:18:46.649+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : before converted : User(id=null, firstName=田中, lastName=太郎)
2026-06-09T17:18:46.649+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : transformed user : User(id=null, firstName=田中, lastName=太郎)
2026-06-09T17:18:46.649+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : before converted : User(id=null, firstName=ジョセフ, lastName=ジョースター)
2026-06-09T17:18:46.650+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : transformed user : User(id=null, firstName=ジョセフ, lastName=ジョースター)
2026-06-09T17:18:46.650+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : before converted : User(id=null, firstName=Erik, lastName=Satie)
2026-06-09T17:18:46.650+09:00 INFO 684 --- [BatchTest1] [ main] c.n.test.BatchTest1Configuration : transformed user : User(id=null, firstName=ERIK, lastName=SATIE)
2026-06-09T17:18:46.818+09:00 INFO 684 --- [BatchTest1] [ main] o.s.batch.core.step.AbstractStep : Step: [step1] executed in 236ms
2026-06-09T17:18:46.821+09:00 INFO 684 --- [BatchTest1] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [FlowJob: [name=importUserJob]] completed with the following parameters: [{JobParameter{name='run.id', value=1, type=class java.lang.Long, identifying=true}}] and the following status: [COMPLETED] in 248ms
2026-06-09T17:18:46.831+09:00 INFO 684 --- [BatchTest1] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
 
※一部抜粋
 
このような結果が得られます。やった(笑)
 
今日は兵庫県内をツーリング。
ハイエースに愛機 Ducati Monster S2R 1000 を乗せて、まずは 4時間かけて兵庫県たつの市御津町の「道の駅 みつ」へ。4時間かかった(^^;;;
そこで S2R をおろして、まず向かったのは姫路城である。ベタな観光地だが、一度は本物を見ておきたいからな、城好きとしては。

・・・すんません、本当はそんなに城好きじゃありません。日本人の一般教養として押さえておきたいだけで(笑)

20260606_himejijyo1.jpeg 20260606_mitsu1.jpeg 20260606_himejigokoku1.jpeg

話を戻す。
「道の駅 みつ」からは主に二つのコースがあって、バイパス(?)を抜けると 30分。2号線を走ると 40分みたいな感じ?(詳しくは自力で調べてください(笑)。Google Maps とかで)
とりあえず行きは時間の短いコースで行くことにする。「道の駅 みつ」の駐車場は 17:30には閉鎖してしまうようなので、それまでに確実に帰ってこないといけないからな。

すでに時間は 15時。現地に着くのは 15:30頃である。どうも姫路城は「開城時間:午前9時00分から午後5時00分まで(閉門は午後4時00分)」とのことなので、中を見ることはできそうにないが、まあ、外観だけでも拝めればね・・・と。

拝めました(笑)。
姫路城の真正面の交差点から、遠くて少し霞んでいるけど、白鷺城と呼ぶに相応しい美しい姿を拝めましたよ(笑)

うん、これで満足。今後姫路城の話題が出た時、「ああ、俺も本物見たことあるよ。」と言えるぞ(笑)。「え?実物見たことないの?実物見ないと、なかなかあの美しさは理解できないと思うよ」とか言える(笑)
もう、2ヶ月以上前の話。

朝、7時過ぎの電車で岩国に帰ったんだが、電車に乗る前に腹ごしらえ。
横川駅には立ち食いうどんはないので、横川商店街の「立喰い 辰屋」へ。

20260327_tatsuya1.jpeg 20260327_tatsuya2.jpeg 20260327_tatsuya3.jpeg

もう、俺が以前横川に住んでいた 40年近く前からある店だ。実際、もっと昔からあるんだろう。
十日市に仕事場を借りていたときは通勤に横川駅を使っていたのでたまに寄ることもあったが、部屋を解約してからはすっかりその機会もなくなってしまった。

実に 8年ぶりの訪店である。

あの頃はおじいちゃんとおばあちゃんが店を切り盛りしていたが、今は俺と同世代のおっちゃん一人である。あのおじいちゃんの息子さんなのか、まったく赤の他人なのか・・・

若干戸惑いながら、俺は「天ぷらうどん」を注文。それに「しゃけのおむすび」を一つ付ける。
8年前は 400円だった天ぷらうどんも、今では 550円だ。店主の代替わりもあり、本当に時の流れを感じるなあ。

ああ、このやわやわの蒸し麺とでっかい天ぷら。最高。
そしてスープ。ここのスープの味が好きなのよ。「駅麺家」とは微妙に違う味。このスープとどろどろに溶けた天ぷらをずずずずずと啜る快感(笑)

帰りに、前日余ったものであろう「おつとめ品」のおはぎを嫁さんへのお土産に購入。
ごっつい大将の口から「早めに食べてくださいね」と優しい言葉。やっぱ立ち食いうどんは人情だ(わけわからん〆ですまん(^^;)

このアーカイブについて

このページには、2026年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2026年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら