2026/08/06(木)まくわうり

投稿日:

ぜいたくは敵だ!メロンは高いのでまくわうりを食べよう。

まくわうりの選び方

てっぺんにリング状の亀裂が入ってるやつがいいらしい。参考までにこの亀裂の部分は甘い。

まくわうりの食べ方

  1. 半分に切り、ワタを取る。ワタは素手でえぐると簡単に取れる。
  2. 半分に切ったのを更に半分に切り、食べる分だけ皮をむく
  3. 適当にスライスして食べる

食べた感想

見た目は梨っぽく、食感は梨とメロンの中間、甘みは甘みの薄いりんごくらい控えめで、軽い酸味があり、手ごろなおやつとしてはアリという感じだった。何せハネージュメロンより安い。200円(税抜き)は異常な価格である。

丸かじりも試したが、皮が分厚く、トマトの皮を3倍厚にしましたみたいなパツパツの食感だったので、丸かじりはよくなかった。ただ多少皮を剥き損ねた程度なら別に食べてしまっても気にならない程度なので、皮むきは多少雑でも問題なかった。

備考

ワタは今回捨てたが、実はワタに甘みがあるらしく、ワタを絞って出た汁を振りかけると美味しくなるらしい?

結構デカく可食部も多いので非常にお得な食べ物だ。8月1日に買って、冷蔵庫に入れて今8月6日だが、まだ全然いけるので日持ちもいい。

こちらも前の記事のすもも同様に八百屋「脱力系八百屋 ちょっとどころじゃないです」で購入している。

あとがき

購入時に「脱力系八百屋 ちょっとどころじゃないです」の角印が入ったクーポンを貰ったが、しっかりとした書式で書かれていてちょっと感動してしまった。

脱力系八百
屋🧅🧅🧅🧄
ちょっとど
ころじゃな
いです之印

いいのか、こんな腑抜けた名前の八百屋がこんなにしっかりした角印を持っていて…!!(どんなケチの付け方だ)

また、角印の最後の二文字が読み取れず何かと思ったが、これは空白を埋めるために使われる「之印」という文字の篆書体のようだ。これは法人角印の印影プレビュー | 印鑑の匠ドットコムで実際に字体が確認できる。

そういえばこの八百屋、4月か5月ごろに一瞬消滅していたような気がしていたのだが、ただの気のせいだった。

恐らく原因は看板がなくなったことだと思う。

今年の元旦時点では看板があったので、恐らく春のどこかで看板を外したのだと思う。なぜ外したのかは不明だが、看板があった位置にガス給湯機が見えるので、邪魔だったのかもしれない。

この時の写真でも看板の上から少し見えるので、看板の設置前から給湯機はあったことが分かるが、定期点検で邪魔だったとか、燃焼時にガスが溜まるとか、そういった事情が出てきて外したというのはありそうだ。或いは脱力系を公に名乗りづらくなったのかもしれない。地味にインスタからも脱力系の文字が外れて「ちょっとどころじゃないです」だけになってるし…。

脱力系なので元旦のお休みの告知は小さい段ボールがシャッターに貼ってあっただけだったのも印象的だ。

2026-08-06 1時追記

写真を漁っていたら2月23日時点でも看板があることを確認できた。

2026/08/05(水)すもも

更新日:
投稿日:

桃が高すぎるときはすももを食べよう。

すももの選び方

数日でダメになりそうなくらい柔らかいやつがいい。硬いのは酸っぱい。

すももは皮をむかずにそのままかじって食べられるのも便利だ。桃も丸かじりできるがデカすぎるので、丸かじりはちょっと微妙である。

酸っぱいすもも 甘いすもも

甘いすももは、ほのかに酸味のある桃という感じで非常においしいのに安いので買いである。

酸っぱいすももも歯ごたえがあり、酸っぱいリンゴみたいな感じなので、人によっては悪くないかもしれない。

今回のすももはいつも利用している八百屋「脱力系八百屋 ちょっとどころじゃないです」で購入している。

2026/08/05(水)ミニまな板を買った話

投稿日:

去年まな板を買い替えていた話から連続でまな板の購入話になるが、今年の1月23日にミニまな板を買っていたので、その話。

買ったもの

商品としては土佐龍のちっちゃいまな板 桧 CH-1001だ。

土佐龍のサイトから注文して届いたものには、Thank youカードやお手入れ方法、まな板本体とコースターがついていて、中々豪華だった。

普通のまな板とのサイズ比較

商品名通りしっかりとちっちゃく助かった。

小さい木のまな板を探していたのだが、薄くて軽くて小さい木のまな板で、国産というのがなかなか見つからないでいたが、そんな中で出会えた品だったので、かなり期待を満たしてくれた。

ついでのコースター

まな板は三枚の板をくっつけていたが、コースターは一枚板だったので驚いた。しかもバーコードがついてる。もしかして端材で作ったオマケではなく列記とした製品なのだろうか?

まな板を実際に使ってみたところ

夜食に板わさを作るとか、果物を切るとか、ちょっとした用途にはピッタリなサイズだったので、購入から今日に至るまで日々の軽食作成に利用している。

収納してみたところ

包丁立ての隙間を利用しているが、見事に収まって感動した。手作り品なのであまり厳密なサイズには期待していなかったが寸法通り厚み10mmで、きっちり収まった。

あとがき

高知の品というので、前々から高知に行くのに興味もあり、可能なら現地で買ってみたかったが、場所が場所だったので諦めてしまったが、今調べたところ須崎市営巡航船が一日3本だけ、存在し、公共交通を駆使すれば到達可能らしいことが分かった。

三宮からジャンボフェリーの夜行で高松へ、始発特急しまんとで伊野へ向かい、2時間待ち10時21分のドラゴンバスで宇佐へ移動、徒歩2分で埋立まで移動し、14:50の最終船で須ノ浦まで行き、徒歩1時間強でいけるようだ。ちょっと現実味がなかった。

最寄りの坂内まで行ければ徒歩17分に出来るものの、これには始発船に乗る必要があるため、宇佐で一泊すれば行けそうではある。幸い宿はあるようだが、行ったところで帰りは須ノ浦まで歩かないと帰れないっぽい上、埋立まで戻ってきても帰りの交通が存在しない(宇佐→伊野駅は宇佐13:21発が最終)ようなので、もしやるとしたら中々時間と体力とお金のかかる旅程になりそうだ。

つまりまとめると、公共交通を駆使して土佐龍に行くにはこうなると思われる。まな板を買いに行くレベルの話ではなかった!

  1. 伊野駅まで移動
  2. 伊野駅発のバスで宇佐まで移動
    • 10:23, 15:38, 18:05発のいずれか
  3. 宇佐で宿泊
  4. 翌朝、埋立に移動(徒歩2分)
  5. 埋立7:10発の船で坂内まで移動
  6. 8:11坂内着
  7. 徒歩17分で土佐龍着
  8. 買い物をする
  9. 徒歩1時間強で須ノ浦に移動
    • 13:57, 16:27発のいずれか
  10. 船で埋立に戻る
  11. 宇佐で宿泊
  12. 宇佐発のバスで伊野駅まで移動
    • 6:11, 7:55, 13:21発のいずれか
  13. 帰る

2026/08/05(水)去年まな板を買い替えていた話

投稿日:

2023年の今年やってよかったことで買ったまな板だが、去年の9月1日にピザカッターを入れたときに壊してしまったので実は買い替えていた。

その時のことを書けていなかったので残しておく。

買ったときの写真

前買ったときのと同じ三重県名張市のウメザワ製だが、無地でなくなり左上に焼き印が入っている。

また前買ったものは裏側に反り防止の角柱が入っていたが、今回のものにはなかった。

現状の姿

一年弱ほど使っているのでそこそこ使い込んでいる感じだ。2025年第一四半期の振り返りと比べると使用期間の割に傷んでいるような気もするが、これは自炊頻度が増えたと思っているので、使用頻度の差かもしれないし、前使っていたのと違い表裏がはっきりわかるため、同じ面を集中的に使い続けた結果かもしれない。

あとがき

ピザカッターは木のまな板の上で使うと壊れることを実践で学べた。

恐らく木の床や、クッションシート床、その他一般的な床、壁など、刃物を叩きつけたら壊れるような場所で使うべきではないだろう。

このことからピザカッターは使わないことにして、以後は包丁を使うことにして、ピザカッターそのものは処分した。もし使うとしても当て布をするなどで保護した方がいいかもしれない。

しかし家計簿をつけていたお陰で当時の写真を特定できたので家計簿は便利である。私は過去の購入写真を引き出すのに度々家計簿を使っている。これは購入した店を覚えていれば、そこから引けるからである。

家計簿はこんな感じでエクセルで管理していて、この時のことだとライフでフィルタ→雑貨でフィルタでまな板らしい価格の日から写真のアーカイブを引いて当てることができた。大変便利だ。

何故それを覚えているかという話だと、世の中では家計簿の自動記帳とかがブームだと思うが、私の場合は手書きしているし、買い物したことは割と覚えているからだ。

2026/08/04(火)PHPとPerlでは配列変数を変数に代入してもシャローコピーされない

私は今までプログラミング言語の鉄則として、プリミティブを代入すれば値が、オブジェクトを代入すれば参照が渡され、オブジェクトの実体を渡す場合にはディープコピーが必要だと考えていたが、PHPでは違うことに気が付き、常識を打ち破られたので備忘録として残す。

調べている中でPerlでもPHPと同じ振る舞いをすることに気づいた。

言語別の比較

以下は言語別に配列変数を別の変数に代入し、代入側変数を操作したときに、元の変数に影響を与えるか、つまり参照代入になるか調べた結果だ。

❌通常代入=プリミティブと同じ、✅参照代入=いわゆるポインタ渡しされる、という意味合いで書いている。頭の絵文字は視認性のために付けているだけで、特に意味はない。

言語 PHP Perl Ruby Python JavaScript C#
配列 ❌通常代入 ❌通常代入 ✅参照代入 ✅参照代入 ✅参照代入 ✅参照代入
連想配列 ❌通常代入 ❌通常代入 ✅参照代入 ✅参照代入 ✅参照代入 ✅参照代入
クラス ✅参照代入 ✅参照代入 ✅参照代入 ✅参照代入 ✅参照代入 ✅参照代入

PHPは公式ドキュメントにもそう書いてあった。

配列への代入においては、常に値がコピーされることに注意してください。 配列をリファレンスでコピーする場合には、 リファレンス演算子を使う必要があります。

PHP: 配列 - Manual

そもそもPHPではオブジェクトと配列が別の概念として書かれているので、扱いが異なるのかもしれない。

各言語による処理結果

PHP

PHP 8.5.8で確認。

<?php
$arr1 = array('1', '2');
# ARR1 1, 2
echo "ARR1 {$arr1[0]}, {$arr1[1]}\n";

$arr2 = $arr1;
$arr2[0] = '3';
# ARR2 1, 2
echo "ARR2 {$arr1[0]}, {$arr1[1]}\n";
# ARR3 3, 2
echo "ARR3 {$arr2[0]}, {$arr2[1]}\n";


$hash1 = array(
    'hoge' => 'a',
    'fuga' => 'b'
);
# HASH1 a, b
echo "HASH1 {$hash1['hoge']}, {$hash1['fuga']}\n";

$hash2 = $hash1;
$hash2['hoge'] = 'z';
# HASH2 a, b
echo "HASH2 {$hash1['hoge']}, {$hash1['fuga']}\n";
# HASH3 z, b
echo "HASH3 {$hash2['hoge']}, {$hash2['fuga']}\n";


$cls1 = new stdClass();
$cls1->hoge = 'A';
$cls1->fuga = 'B';
# CLS1 A, B
echo "CLS1 {$cls1->hoge}, {$cls1->fuga}\n";

$cls2 = $cls1;
$cls2->hoge = 'Q';
# CLS2 Q, B
echo "CLS2 {$cls1->hoge}, {$cls1->fuga}\n";
# CLS3 Q, B
echo "CLS3 {$cls2->hoge}, {$cls2->fuga}\n";


# ARR1 1, 2
# ARR2 1, 2
# ARR3 3, 2
# HASH1 a, b
# HASH2 a, b
# HASH3 z, b
# CLS1 A, B
# CLS2 Q, B
# CLS3 Q, B

Perl

Perl v5.38.2で確認。

use strict;
use warnings;

my @arr1 = ('1', '2');
# ARR1 1, 2
print "ARR1 $arr1[0], $arr1[1]\n";

my @arr2 = @arr1;
$arr2[0] = '3';
# ARR2 1, 2
print "ARR2 $arr1[0], $arr1[1]\n";
# ARR3 3, 2
print "ARR3 $arr2[0], $arr2[1]\n";


my %hash1 = (
    'hoge' => 'a',
    'fuga' => 'b'
);
# HASH1 a, b
print "HASH1 $hash1{'hoge'}, $hash1{'fuga'}\n";

my %hash2 = %hash1;
$hash2{'hoge'} = 'z';
# HASH2 a, b
print "HASH2 $hash1{'hoge'}, $hash1{'fuga'}\n";
# HASH3 z, b
print "HASH3 $hash2{'hoge'}, $hash2{'fuga'}\n";


my $cls1 = bless {
    hoge => 'A',
    fuga => 'B'
}, 'StdClass';
$cls1->{'hoge'} = 'A';
$cls1->{'fuga'} = 'B';
# CLS1 A, B
print "CLS1 $cls1->{hoge}, $cls1->{fuga}\n";

my $cls2 = $cls1;
$cls2->{'hoge'} = 'Q';
# CLS2 Q, B
print "CLS2 $cls1->{hoge}, $cls1->{fuga}\n";
# CLS3 Q, B
print "CLS3 $cls2->{hoge}, $cls2->{fuga}\n";

# ARR1 1, 2
# ARR2 1, 2
# ARR3 3, 2
# HASH1 a, b
# HASH2 a, b
# HASH3 z, b
# CLS1 A, B
# CLS2 Q, B
# CLS3 Q, B

Ruby

Ruby 4.0.5で確認。

arr1 = ['1', '2']
# ARR1 1, 2
puts "ARR1 #{arr1[0]}, #{arr1[1]}"

arr2 = arr1
arr2[0] = '3'
# ARR2 3, 2
puts "ARR2 #{arr1[0]}, #{arr1[1]}"
# ARR3 3, 2
puts "ARR3 #{arr2[0]}, #{arr2[1]}"


hash1 = {
  'hoge' => 'a',
  'fuga' => 'b'
}
# HASH1 a, b
puts "HASH1 #{hash1['hoge']}, #{hash1['fuga']}"

hash2 = hash1
hash2['hoge'] = 'z'
# HASH2 z, b
puts "HASH2 #{hash1['hoge']}, #{hash1['fuga']}"
# HASH3 z, b
puts "HASH3 #{hash2['hoge']}, #{hash2['fuga']}"


class HogeCls
  attr_accessor :hoge, :fuga

  def initialize(_hoge, _fuga)
    @hoge = _hoge
    @fuga = _fuga
  end
end

cls1 = HogeCls.new('A', 'B')
# CLS1 A, B
puts "CLS1 #{cls1.hoge}, #{cls1.fuga}"

cls2 = cls1
cls2.hoge = 'Q'
# CLS2 Q, B
puts "CLS2 #{cls1.hoge}, #{cls1.fuga}"
# CLS3 Q, B
puts "CLS3 #{cls2.hoge}, #{cls2.fuga}"

# ARR1 1, 2
# ARR2 3, 2
# ARR3 3, 2
# HASH1 a, b
# HASH2 z, b
# HASH3 z, b
# CLS1 A, B
# CLS2 Q, B
# CLS3 Q, B

Python

Python 3.12.0で確認。

arr1 = ['1', '2']
# ARR1 1, 2
print(f"ARR1 {arr1[0]}, {arr1[1]}")

arr2 = arr1
arr2[0] = '3'
# ARR2 3, 2
print(f"ARR2 {arr1[0]}, {arr1[1]}")
# ARR3 3, 2
print(f"ARR3 {arr2[0]}, {arr2[1]}")


hash1 = {
    'hoge': 'a',
    'fuga': 'b'
}
# HASH1 a, b
print(f"HASH1 {hash1['hoge']}, {hash1['fuga']}")

hash2 = hash1
hash2['hoge'] = 'z'
# HASH2 z, b
print(f"HASH2 {hash1['hoge']}, {hash1['fuga']}")
# HASH3 z, b
print(f"HASH3 {hash2['hoge']}, {hash2['fuga']}")


class HogeCls:
    def __init__(self, _hoge, _fuga):
        self.hoge = _hoge
        self.fuga = _fuga

cls1 = HogeCls('A', 'B')
# CLS1 A, B
print(f"CLS1 {cls1.hoge}, {cls1.fuga}")

cls2 = cls1
cls2.hoge = 'Q'
# CLS2 Q, B
print(f"CLS2 {cls1.hoge}, {cls1.fuga}")
# CLS3 Q, B
print(f"CLS3 {cls2.hoge}, {cls2.fuga}")

# ARR1 1, 2
# ARR2 3, 2
# ARR3 3, 2
# HASH1 a, b
# HASH2 z, b
# HASH3 z, b
# CLS1 A, B
# CLS2 Q, B
# CLS3 Q, B

JavaScript

Node.js v24.16.0、Microsoft Edge 150.0.4078.105で確認。

const arr1 = ['1', '2'];
// ARR1 1, 2
console.log(`ARR1 ${arr1[0]}, ${arr1[1]}`);

const arr2 = arr1;
arr2[0] = '3';
// ARR2 3, 2
console.log(`ARR2 ${arr1[0]}, ${arr1[1]}`);
// ARR3 3, 2
console.log(`ARR3 ${arr2[0]}, ${arr2[1]}`);


const hash1 = {
    hoge: 'a',
    fuga: 'b'
};
// HASH1 a, b
console.log(`HASH1 ${hash1['hoge']}, ${hash1['fuga']}`);

const hash2 = hash1;
hash2['hoge'] = 'z';
// HASH2 z, b
console.log(`HASH2 ${hash1['hoge']}, ${hash1['fuga']}`);
// HASH3 z, b
console.log(`HASH3 ${hash2['hoge']}, ${hash2['fuga']}`);


class HogeCls {
  constructor(_hoge, _fuga) {
    this.hoge = _hoge
    this.fuga = _fuga
  }
}

const cls1 = new HogeCls('A', 'B');
// CLS1 A, B
console.log(`CLS1 ${cls1.hoge}, ${cls1.fuga}`);

const cls2 = cls1;
cls2.hoge = 'Q';
// CLS2 Q, B
console.log(`CLS2 ${cls1.hoge}, ${cls1.fuga}`);
// CLS3 Q, B
console.log(`CLS3 ${cls2.hoge}, ${cls2.fuga}`);

// ARR1 1, 2
// ARR2 3, 2
// ARR3 3, 2
// HASH1 a, b
// HASH2 z, b
// HASH3 z, b
// CLS1 A, B
// CLS2 Q, B
// CLS3 Q, B

C#

バージョンの基準が謎だが、Visual Studio 2022の標準的な環境で確認した。

var arr1 = new[] { "1", "2" };
// ARR1 1, 2
Console.WriteLine($"ARR1 {arr1[0]}, {arr1[1]}");

var arr2 = arr1;
arr2[0] = "3";
// ARR2 3, 2
Console.WriteLine($"ARR2 {arr1[0]}, {arr1[1]}");
// ARR3 3, 2
Console.WriteLine($"ARR3 {arr2[0]}, {arr2[1]}");


var hash1 = new Dictionary<string, string> {
    ["hoge"] = "a",
    ["fuga"] = "b"
};
// HASH1 a, b
Console.WriteLine($"HASH1 {hash1["hoge"]}, {hash1["fuga"]}");

var hash2 = hash1;
hash2["hoge"] = "z";
// HASH2 z, b
Console.WriteLine($"HASH2 {hash1["hoge"]}, {hash1["fuga"]}");
// HASH3 z, b
Console.WriteLine($"HASH3 {hash2["hoge"]}, {hash2["fuga"]}");


var cls1 = new HogeCls("A", "B");
// CLS1 A, B
Console.WriteLine($"CLS1 {cls1.Hoge}, {cls1.Fuga}");

var cls2 = cls1;
cls2.Hoge = "Q";
// CLS2 Q, B
Console.WriteLine($"CLS2 {cls1.Hoge}, {cls1.Fuga}");
// CLS3 Q, B
Console.WriteLine($"CLS3 {cls2.Hoge}, {cls2.Fuga}");

class HogeCls {

    public string Hoge { get; set; }
    public string Fuga { get; set; }

    public HogeCls(string hoge, string fuga) {
        this.Hoge = hoge;
        this.Fuga = fuga;
    }
}

// ARR1 1, 2
// ARR2 3, 2
// ARR3 3, 2
// HASH1 a, b
// HASH2 z, b
// HASH3 z, b
// CLS1 A, B
// CLS2 Q, B
// CLS3 Q, B

あとがき

PHPのクラスなんて連想配列の派生形だと思ってたら、PHPではクラスこそがオブジェクトということで大変驚いた。一般論としては文字列・数値・真偽型がプリミティブ、それ以外の配列や連想配列(ハッシュ)・クラス・構造体はオブジェクトとして考えていただけに強く常識を打ち破られた気持ちだ。

とはいえ、配列は構造体ではないはずなので、構造体から派生するクラスと配列が別になるという思想そのものもわからなくはない。わからなくはないけど気持ち悪い。

PHPも進化しているので将来的には見直されるかもしれないし、されないかもしれない。後方互換性をしょっちゅう切り捨ててる印象があるので、何があっても不思議がないのも、またPHPだと思う。そしてPerlは恐らく変わらないだろう。

しかしいわゆるLL、軽量プログラミング言語と呼ばれているPerl、PHP、Ruby、Pythonのうち、RubyとPythonは違う振る舞いを示したのも興味深かった。一体何があったのか…。