<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Yuren&apos;s Blog - すべての記事</title><description>書くことは思考の一形態であり、公開と共有は副産物に過ぎません。真の意味は、自己の知識体系における帰属とつながりにあります。</description><link>https://yurenju.blog/</link><language>ja</language><item><title>シャッターを切ったあとの物語</title><link>https://yurenju.blog/ja/posts/2026-03-21_shutter-afterstory/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2026-03-21_shutter-afterstory/</guid><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;cloud-chair.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1600&quot; height=&quot;1111&quot; src=&quot;/_astro/cloud-chair.DwHDKzfg_ZFFfJ.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;最近、コダックのハーフフレームのトイフィルムカメラを試しに買ってみたところ、現像された写真から蘇る記憶が驚くほど鮮やかだった。すっかり忘れていた瞬間が、左右二コマ並んだ構図はまるで見開きの漫画のように物語を紡ぎ、シャッターを切ったあの瞬間へと引き戻される。&lt;/p&gt;
&lt;p&gt;デジタルカメラやスマートフォンが捉えるのは、いつも「いま」だ。撮ったその場で写真を確認できるけれど、その瞬間はまだ「思い出」にはなっていない。しばらく経ってから写真を見返したとき、はじめて「いま」は「思い出」へと沈殿する。しかしSNSの時代、すべての写真がそうして思い出になれるわけではない。&lt;/p&gt;
&lt;p&gt;一方、フィルム写真には「いま」が存在しない。シャッターを切ってフィルムに焼き付けた像は、一本撮り終えて現像するまで見ることができない。その間に、記憶は少しずつ薄れていく。けれどそのいくつかは、夢のなかで静かに整理され、醸され、発酵していく。やがて現像された写真を手にしたとき、もう忘れたと思っていたものが、脳の奥深くからふいに姿を現す——撮ったときに想像していたよりも、ずっと温かく、ずっと鮮やかに。&lt;/p&gt;
&lt;p&gt;フィルム写真には、「いま」がない。いつも時間をかけて醸され、初めて像を結んだときには、もう美しい思い出になっている。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;sakura-and-door.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1600&quot; height=&quot;1111&quot; src=&quot;/_astro/sakura-and-door.CTvpRRq9_Z5Dshk.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;bicycle-and-bench.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1600&quot; height=&quot;1111&quot; src=&quot;/_astro/bicycle-and-bench.BruBytGf_Z1FfaM.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>OpenClawが開いた扉</title><link>https://yurenju.blog/ja/posts/2026-02-06_the-door-opened-by-openclaw/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2026-02-06_the-door-opened-by-openclaw/</guid><pubDate>Fri, 06 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;openclaw-logo.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;774&quot; height=&quot;427&quot; src=&quot;/_astro/openclaw-logo.DVrFFRTQ_JmPhF.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;「OpenClawは他のAI Botと何が違うの？」&lt;/p&gt;
&lt;p&gt;この質問に答えるには、私がOpenClawに最初にお願いした仕事から始めるのがいいでしょう。それは&lt;strong&gt;お気に入りのカフェを探すこと&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;私はコーヒーに特定のこだわりがあり、Google マップで一軒一軒カフェを開いて、メニューにコーヒーの産地情報や精製方法が記載されているかを確認しないと、好みのカフェを絞り込めません。だからこれはずっと悩みの種でした。他のBotもGoogle マップの店舗写真を閲覧する機能には対応していませんでした。&lt;/p&gt;
&lt;p&gt;そこでOpenClawをセットアップした後、最初の質問も近くのカフェについてでした。次に、店内の写真やGoogleレビューを見られるか聞いたところ、その返答がとても面白かったのです。&lt;/p&gt;
&lt;p&gt;「現在は基本情報のみを返しており、写真やレビューの内容は含まれていません。」&lt;/p&gt;
&lt;p&gt;「必要であれば、このskillに写真とレビュー機能を追加できますが、コードの修正に少し時間がかかります。やりますか？」&lt;/p&gt;
&lt;p&gt;この返答を見て、私は本当に驚きました。これまでChatGPTやGeminiを使っていた時、カスタマイズの余地は限られていましたし、自分のプログラムを修正して問題を解決できるBotに出会ったことはありませんでした。まるでBotがはんだごてを手に取り、自分の機械の胸部を開いて配線をやり直しているかのようです。&lt;/p&gt;
&lt;p&gt;最終的に彼と話し合った結果、こんな成果が生まれました。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;bernard-cafe-scout.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;839&quot; height=&quot;1390&quot; src=&quot;/_astro/bernard-cafe-scout.CW-WyqDy_MwO64.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;話を戻すと、「OpenClawと他のAI Botとの違い」を聞かれたら、私はこう答えます。OpenClawは「ソフトウェアエンジニアのパートナーがいて、しかもそのパートナーにパソコンを渡した」ようなものだと。パソコン上の既存のツールを使って問題を解決するだけでなく、最も重要なのは&lt;strong&gt;ツールを作ったり修正したりできる&lt;/strong&gt;ことです。手持ちのツールでGoogle マップの画像が見られないなら、プログラムを修正して画像閲覧機能を追加してしまうのです。&lt;/p&gt;
&lt;p&gt;現在の多くのAIチャットボットはツールを提供する形式がほとんどで、それらのツールは誰かが事前に用意しなければ、ユーザーは特定のサービスにアクセスできません。しかしOpenClawは、誰もツールを提供しなくても自分で作り出します。Claude Codeのようなツールも確かにツールを作れますが、その目的はあなたと一緒にソフトウェアを協働開発することです。&lt;/p&gt;
&lt;p&gt;一方、OpenClawがツールを作る目的は、より汎用的にあなたの問題を解決することです。&lt;/p&gt;
&lt;p&gt;その後、私は自分のいくつかの悩みを解決し始めました。たとえば、私は各国のニュースを読む習慣がありますが、読むスピードのために、普段は中国語版のある海外ニュースサイト、たとえばニューヨーク・タイムズ、ドイチェ・ヴェレ、RFIなどを探さなければなりませんでした。しかしOpenClawを使い始めてからは、各国の原文ニュースサイトでRSSを提供しているメディアを調べてもらい、私への理解に基づいて興味がありそうなニュースを選んで中国語に翻訳し、毎朝音声のニュースブリーフィングを作成してもらうようにしました。これで朝起きたらニュースを聴けるようになりました。&lt;/p&gt;
&lt;p&gt;さらに評価の仕組みも付けて、次回のニュース選定の参考にしてもらっています 😁&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;bernard-daily-news.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1288&quot; height=&quot;1417&quot; src=&quot;/_astro/bernard-daily-news.CXWOmuSN_Z2llxwL.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;もちろん、ここで部屋の中の象に触れないわけにはいきません。OpenClawは本当にそんなに危険なのでしょうか？&lt;/p&gt;
&lt;p&gt;これは想像しやすいでしょう。ソフトウェアエンジニアにパソコンを1台渡して（管理者権限がなくても）、その人が何をできるか、どれほど危険かを考えてみてください。エンジニアの友人にエンジニア界隈のやらかしを聞いてみてください。うっかりデータベースを削除したり、gitをめちゃくちゃにしたり、ルートディレクトリを消したり……このBotにもそういったことをやらかす可能性があります（モデル自体に多くの保護措置があるとしても）。&lt;/p&gt;
&lt;p&gt;OpenClawの危険度はおおよそそのレベルに加えて、Prompt Injectionによって乗っ取られ、別のことをさせられる可能性もあります。私の例で言えば、もし誰かがRSSフィードやコメントに悪意のある内容を仕込んだ場合、この種の攻撃をうまく防げるとは確信が持てません。&lt;/p&gt;
&lt;p&gt;だから、セキュリティの問題はかなり深刻だと言えます。特に独立した環境を用意せず、自分のパソコンの中で動かしている場合は、なおさらです。&lt;/p&gt;
&lt;p&gt;しかし、それでもOpenClawが創造性と楽しさに満ちた実験であることは否定できません。AnthropicやOpenAIの実験の仕方を見ると、比較的慎重で、制御可能な範囲内でより多くのことを達成しようとしています。一方、OpenClawはその逆を行っています。もしAI Botに1台のパソコンを渡したら、どれだけ面白いことになるだろう？&lt;/p&gt;
&lt;p&gt;それはまるでシヴァの踊りのように、破壊の始まりであり、同時に再生の時でもあるのです。&lt;/p&gt;</content:encoded><category>技術</category></item><item><title>富士山と夕陽</title><link>https://yurenju.blog/ja/posts/2026-01-23_layers-of-context-and-me/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2026-01-23_layers-of-context-and-me/</guid><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;『入国ロビー』という本では、異邦人から地元の人になるための鍵は、何かにつけて故郷と比較しなくなることだと書かれている。食べ物はどちらが美味しいか、街並みはどう違うか、空気の匂いの違いなど。これまで異邦人になったことのなかった私だが、最近は富士山をきっかけに地学を復習するようになった。&lt;/p&gt;
&lt;p&gt;住まいの近くには高い建物が少なく、天気の良い日は視界がとても開ける。昨年の秋のある日、住居の外の廊下から富士山が見えることに初めて気づいた。それまで気づかなかったのは、秋冬の気候になってようやくそこまで遠くを見通せるようになるからだ。その日以来、毎日出かけるたびにガチャガチャを回すような新鮮な気持ちで、ふと遠くに富士山が見えることがある。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;fujisan.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/fujisan.lvM743dQ_Z7ajq.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;ガチャガチャよりも驚いたのは、毎日の夕日が沈む位置が、少しずつ富士山に近づいていることだった。地学で習った地球の傾斜角のことを思い出した。その角度のせいで、夕日の位置は毎日変わるのだ。特に富士山という目印があると、その変化がより明瞭になる。&lt;/p&gt;
&lt;p&gt;ということは、いつか夕日がちょうど富士山の頂上に沈む日があるのでは？調べてみると、「ダイヤモンド富士」という専門用語があった。&lt;/p&gt;
&lt;p&gt;毎日天気が良いわけではないが、夕日の移動を確認できるのは確かに心躍るものだった。これは台湾ではなかなか感じられない体験だ。季節感と同じように、高緯度の国では四季がはっきりしているため、日没の軌道の観察もより鮮明になる。ただ、良いことばかりではない。最近の天気予報は快晴だったが、正午の雲一つない空の下、気温はわずか4度だった。&lt;/p&gt;
&lt;p&gt;秋にはのんびりと屋外の席で熱いお茶を飲みながら本を読めるが、冬になると風が強くて頭が痛くなる。住まいの掃き出し窓の向きは太陽の光が入らないのだが、ある日、遠くのビルの外壁が太陽の光を室内に反射してくれることに気づいた。その光の当たる場所に手足を寄せて、わずかな反射光を必死に浴びようとした。&lt;/p&gt;
&lt;p&gt;これも異邦人としての姿だ。短期間では、ふとした瞬間に故郷と比較してしまう心理から逃れられない。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;taipei-101-sunrise.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/taipei-101-sunrise.DgxD2sJJ_ZGwezq.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;しかし最近、古い写真を見返していたら、台北101の日の出の写真を見つけた。&lt;/p&gt;
&lt;p&gt;それは台湾で新居に引っ越したばかりでまだ馴染めず、寝つけなかった明け方、思いがけず美しい日の出に出会えた時のものだった。よく思い返すと、あの時も日の出が日に日に台北101に近づいているのではないかと考えていた。写真を次々とめくっていくと、日の出と日没の景色にいつも心惹かれていたことに気づいた。アルバムには様々な国のマジックアワーが収められていた。ギリシャからトルコ、砂漠から海まで。&lt;/p&gt;
&lt;p&gt;異邦人か地元の人か、自己のアイデンティティは必ずしもそう二分する必要はない。撮影したすべてのマジックアワーがそうであるように、一枚一枚の写真が自分を形作る断片なのだ。人の自己認識は二つの時点の比較だけで形成されるのではなく、それぞれの断片に刻まれた記憶と感情が重なり合って、初めて完全でありながらもまだ続いていく物語となる。&lt;/p&gt;
&lt;p&gt;振り返ってみれば、「ダイヤモンド富士」の絶景を待ちわびていたあの二日間は曇りだった。前後に撮れた写真は、ちょうど山頂の左側と右側だった。&lt;/p&gt;
&lt;p&gt;たとえ逃しても、この経験、この面白いエピソード、そして過去の暮らしとのつながりは、シャッターを切って大切に残す価値がある。他の貴重な思い出とともにアルバムに収め、異邦人と地元の人という截然とした境界から解放され、既存の枠にとらわれない自分だけの視点を紡ぎ出す。&lt;/p&gt;
&lt;p&gt;これらの美しい文脈の断片を、一層また一層と重ね合わせて、今ここにいる唯一無二の自分を形作っていく。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;fuji-diamond.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1024&quot; src=&quot;/_astro/fuji-diamond.M-WtcLXp_20m9DF.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>言葉は概念を切り分けるハサミ</title><link>https://yurenju.blog/ja/posts/2026-01-17_language-as-scissors/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2026-01-17_language-as-scissors/</guid><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近、日本語を学んでいて、言語間の興味深い違いに気づいた。日本語の「爪（つめ）」という言葉は、動物の爪も人間の爪も同じように指す。しかし中国語では、この二つは別々の概念として分かれており、混同することはできない——「爪子（動物の爪）」は「爪子」であり、「指甲（人間の爪）」は「指甲」なのだ。&lt;/p&gt;
&lt;p&gt;これはソシュールの「言語は概念を切り分けるものである」という考え方と通じるところがある。言語が生まれる前、世界は概念の混沌だった。誰かを指差すとき、それが指すものは「人」かもしれないし、「女性」かもしれないし、「姉」かもしれないし、「母」かもしれない。こうした曖昧な境界線は、言語が生まれてようやく明確になった。「姉」という役割が、初めてはっきりとした輪郭を持つようになったのだ。&lt;/p&gt;
&lt;p&gt;しかし、役割や概念がどう切り分けられるかは、言語によって異なる。たとえば英語では「Sister」という一語で、父母を同じくする女性の親族を表すが、中国語では「姐姐（姉）」と「妹妹（妹）」に分かれる。そしてこれらの言葉が生まれたとき、文化もまた生まれる。長幼の序を重んじるからこそ、区別が存在する。&lt;/p&gt;
&lt;p&gt;言語がハサミだとすれば、概念は布地。異なるハサミで裁断された異なる形——それが文化なのだ。&lt;/p&gt;
&lt;p&gt;言語が概念をどう切り分けるかを観察すれば、その文化が何を大切にしているかが見えてくる。日本語は「木漏れ日」という言葉を生み出した——木の葉の隙間からこぼれ落ちる細かな陽光を表す言葉だ。秋から冬にかけて、家の近くの駅前には銀杏の木が立ち並び、昼食の後はよくその通りを散歩する。橙黄色に染まった銀杏の木の下に座れば、葉の隙間から差し込む陽光を感じることができ、葉と葉が触れ合うかすかな音が聞こえる。冷たい空気の中で、冬の太陽の余韻を楽しむひととき。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ginkgo.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/ginkgo.BQrjK5aJ_1DsVhx.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;一本の道を隔てた向こう側には桜並木がある。春の終わり、この通りを歩くと、まるで大雪が舞い散るかのような「桜吹雪」を見ることができる。歩いていると時折、花びらがそっと頬を撫でていく。車が通り過ぎるとき、巻き上げられるピンク色の渦。そのどちらもが、この言葉の持つ情景を体現している。&lt;/p&gt;
&lt;p&gt;しかし、人として生きる中で最も面白いのは、さまざまな文化に触れられること。長い時間をかけて咀嚼し消化した後、自分なりの立ち位置を見つけようとすること。言語はただのハサミに過ぎず、文化は裁断された布地に過ぎない。しかし最終的には、仕立て屋が必要なのだ——服を仕立てる人が。かつての私たちは、一つのハサミしか持っていなかった。しかしこの世界を十分に長く探索すれば、より多くの道具と素材が手に入る。ただ、日々の忙しさに追われているとき、目の前の問題を解決するのに精一杯で、他の選択肢に気づくのは難しい。&lt;/p&gt;
&lt;p&gt;立ち止まって思索を巡らせて初めて、生まれ育った文化のどこが好きでどこが嫌いかが少しずつ見えてくる。そのとき初めて、一歩引いて、実際に手元にある様々な布地と、色とりどりの針と糸とハサミを眺めることができる。&lt;/p&gt;
&lt;p&gt;自分だけの仕立て屋になるとき。自分でも好きだと思える姿を、縫い上げていこう。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>消えゆくプロジェクトの侘び寂び</title><link>https://yurenju.blog/ja/posts/2026-01-16_wabi-sabi-of-loss/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2026-01-16_wabi-sabi-of-loss/</guid><pubDate>Fri, 16 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;ginkgo-tree-chair.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1638&quot; height=&quot;2048&quot; src=&quot;/_astro/ginkgo-tree-chair.-VDLNl2i_1bIPdu.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;前のプロジェクトの組織からアカウントを削除された。一つの時代の終わりだけど、新しい時期の始まりでもある。&lt;/p&gt;
&lt;p&gt;最近、侘び寂びに関する本を読んでいた（あなたが想像するようなインテリア風の「侘び寂びスタイル」ではないかもしれない）。その中に、物事の誕生と消滅を観察し、その状態の移ろいの美しさを感じ取ろうとする一節があった。本の中で挙げられていた例は、古代の旅人が荒野で一夜を過ごすために灯心草を刈り取って束にし、翌朝、仮の宿を縛っていた縄を解くと、その野営地はそのまま解き放たれていくというものだった。&lt;/p&gt;
&lt;p&gt;荒野の地面に円く散らばった灯心草は、やがて風に吹かれて散り、土の中の微生物に分解されて朽ちていく。このような美こそが侘び寂び——「死と再生」である。&lt;/p&gt;
&lt;p&gt;灯心草が旅人に刈り取られたとき、植物としての命は終わるが、仮の宿という新しい形に生まれ変わる。翌日、縄が解かれると野営地は再び崩れ去り、やがてその残骸は次なるものの礎となっていく。&lt;/p&gt;
&lt;p&gt;人生も同じだ。一つのことが終わると、その痕跡は少しずつ消えていく。しかし朽ちた後に残る養分は、必ず別の何かの芽生えを育んでいる。そのような移ろいを味わえるなら、それもまた一つの侘び寂びだ。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>季節のあいだ</title><link>https://yurenju.blog/ja/posts/2025-11-16_between-seasons/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-11-16_between-seasons/</guid><pubDate>Sun, 16 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「東京に来てからどんな感想を持ってる？」&lt;/p&gt;
&lt;p&gt;何人かの友人が、異なる時期にこの質問をしてきた。来日したばかりの頃、数ヶ月経った頃、そして最近も。この質問は時折ふと浮かび上がり、私自身もよく自問する。この問い（とその答え）は、かつて台湾東海岸の小石の浜辺で聞いた波音のようだ。波が次々と打ち寄せ、引いていく白い波しぶきが小さな丸い石を巻き上げる。転がる石の音が、流れるようなリズムを奏でていた。&lt;/p&gt;
&lt;p&gt;「季節感、かな」と私は答える。&lt;/p&gt;
&lt;p&gt;日本で過ごす時間の中で、時の流れは目に見える痕跡を残していく。四季の移ろいはそれぞれ異なる形で現れ、年輪のように密度の違う刻印を残していく。&lt;/p&gt;
&lt;p&gt;春には、住まいの近くの道の両側に桜が咲き誇る。小さなトラックが走り抜け、ピンク色の花びらが舞い上がる。紫陽花が至る所で咲き誇る蒸し暑い夏、汗だくになって祭りの神輿を担いだ。肩のあざがまだかすかに痛む頃、蝉の声は次第に静まり、デパートのトイレの水道からはお湯が出るようになった。&lt;/p&gt;
&lt;p&gt;マンションの入り口から眺める景色の中で、これまで気づかなかった遠くの景色——秋になると、富士山が時折雲の間から姿を現すようになった。&lt;/p&gt;
&lt;p&gt;この数日、盛岡の南昌荘を訪れた。紅く染まった紅葉と日本建築が、まるで時間を止めてしまったかのようだ。手足がこの季節の寒さを感じ始め、斜めに差し込む陽光の中で、無意識にその温もりを求めて手足を伸ばしてしまう。&lt;/p&gt;
&lt;p&gt;日本で過ごす日々の中で、季節感は波のリズムのように次々と私に押し寄せてくる。これらの記憶を丁寧に畳み、書き留め、大切に保管すれば、いつかそれは自分だけの年輪となり、この土地で生きた証を刻んでいくだろう。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;sakura.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/sakura.DdC-4px9_Z1Fotfo.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;hydrangea.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/hydrangea.Ch8rPHU7_Z8Jbnb.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;mitaka-festival.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/mitaka-festival.xtIq3fMf_Z1vhReS.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;fujimt.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/fujimt.V8nX2A4J_Z2fuViw.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;autumn-leaves.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/autumn-leaves.0XGgW-IT_ZdLOGq.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>書くことは遅れてやってきた理解</title><link>https://yurenju.blog/ja/posts/2025-11-03_writing-belated-understanding/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-11-03_writing-belated-understanding/</guid><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;writing-belated-understanding.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/writing-belated-understanding.C5NIaUWL_Z13lzfK.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;数ヶ月前、友人と紙とペンで書くことと、キーボードで打つことの微妙な違いについて話した。それからというもの、徐々にノートとボールペンを使ってメモを取るようになった。私には手書きを「取り戻す」という感覚すらない。なぜなら、そもそも始めたことがないからだ。高校生の頃に初めてノートパソコンを手に入れてから、手で文字を大量に書くことはほとんどなくなった。&lt;/p&gt;
&lt;p&gt;このことは、数年前のある夜、母と私を育ててくれた何人かの叔母たちを食事の後ホテルまで車で送った時のことを思い出させる。彼女たちはずっと私の成長を見守ってくれていたので、話題は自然と子供の頃のことに戻っていった。私はもともと学校に上がる前は台湾語が流暢だった。台湾語は台湾人の大多数が話す母語である。しかし小学校に入学してから、教育環境が中国語(国語)を重視していたこと、あるいはクラスメートたちが主に中国語を使っていたことから、私の台湾語は徐々に下手になっていった。中国語は1949年以降、台湾の公用語となった言語である。&lt;/p&gt;
&lt;p&gt;「あんた、外省人の子供じゃないの?」と、台湾語しか話さない親戚がよく私に冗談を言っていた。そしてこの「冗談」は徐々に親戚の間に広まっていった。台湾では「外省人」とは、1949年前後に中国から台湾に移住してきた人々とその子孫を指す。彼らは歴史的に中国語の優位性と結びつけられ、場合によっては台湾本省人とは異なる文化的アイデンティティを持つ集団とされてきた。台湾本省人である自分がそう間違えられることには、微妙な社会的含意があった。彼女に悪意はなく、ただの冗談だったのだが、次第に私は台湾語を話すのが嫌になり、その親戚の家に行くのも避けるようになった。なぜなら、少し話すとまたあの「外省人の子供」という言葉が出てくるからだ。&lt;/p&gt;
&lt;p&gt;それ以来、私の台湾語は上達することはなかった。&lt;/p&gt;
&lt;p&gt;もちろん、私の英語も大して上手ではなかった。幸いなことに、大人になってから家庭教師の先生が面白く教えてくれたおかげで、最終的には少なくともコミュニケーションが取れる程度にはなった。これで言語は学べるものなのだと実感した。そして今はまた日本語を学び直している。難しいけれど、少しずつ進歩している気がする。&lt;/p&gt;
&lt;p&gt;台湾語が下手なことに加えて、もう一つよく言われていたのが「字が汚い」ということだった。だから高校生の頃、自分専用のノートパソコンを初めて手に入れてから、無意識に手書きを避けるようになった。それから二、三十年にわたってキーボードで様々なメモや文章を書く人生が始まった。タイピングはすでに内面化された思考方法となり、意識とともに徐々に展開していく、自分自身との対話の方法となっている。&lt;/p&gt;
&lt;p&gt;しかしこの数年、ノートを取ることや書くことについて様々な研究をした結果、紙とペンで書くことが思考に与える影響について、多くの人が言及していることを知った。これが、再び紙とペンで書くことを検討し始めた理由だ。&lt;/p&gt;
&lt;p&gt;最終的に、私は新しいおもちゃを買った──電子ペーパーノート、デジタルと手書きの間に架け橋を作る製品だ。&lt;/p&gt;
&lt;p&gt;それを使って数週間日記を書いてみると、日記の文章量がどんどん長くなっていった。まるでこの数十年間書いてこなかった分量が、ゆっくりと染み込んできたかのようだ。もちろん、私は三日坊主な性格なので、これを続けられるかどうかは長期的な観察が必要だ。&lt;/p&gt;
&lt;p&gt;しかし少なくとも今は、書くことを「取り戻す」感覚を楽しんでいる。書いている時の連続感は、確かに考えを行間で咀嚼し、整理し、熟成させてくれる。キーボードで打つ時のリズミカルで区切られた感覚とは異なるが、どちらも異なる思考方法なのだ。&lt;/p&gt;
&lt;p&gt;振り返ってみると、幼い頃の私はその時点で抵抗する方法を見つけられなかった。「拒絶」だけが唯一の出口のように思えた。書くことを拒絶し、台湾語を話すことを拒絶する。&lt;/p&gt;
&lt;p&gt;しかし今、年を重ねた私は、これがゼロサムゲームではないことを理解している。誰かが勝てば誰かが必ず負けるという対立関係ではない。そうではなく、自分に合った切り口を見つけ、得意なことと不得意なことの間で、自分だけの位置を見つけることができるのだ。&lt;/p&gt;
&lt;p&gt;私の字は相変わらず雑だけれど、それでもこれらの筆跡の間には思考の痕跡があり、それが後に面白いアイデアへと変わっていく。最終的に、年を重ねた今の自分が、子供の頃の困惑した感情を解消してくれる。&lt;/p&gt;
&lt;p&gt;そしていつか、私は台湾語も取り戻せるかもしれない。その日が来た時、それは誰かの批判や賞賛のためではなく、ただ自分自身のために学ぶのだと願っている。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>御岳山の大口真神</title><link>https://yurenju.blog/ja/posts/2025-10-18_mitake-ookami/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-10-18_mitake-ookami/</guid><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;metake-jinja-with-mountains.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/metake-jinja-with-mountains.BlH0Azgf_ZhCB95.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;御岳山の宿の女将は、とても話好きな方だった。食事のたびに、御岳山のあれこれを熱心に語ってくれる。山の水がいかに美味しいか、部屋から東京湾や川崎まで見渡せること、自慢の柴犬がどれほど可愛いか、といったことを。&lt;/p&gt;
&lt;p&gt;私は拙い日本語で、女将の話を理解しようと努めた。そしてコミュニケーションと言語は別物なのだと実感した。彼女は少ない英単語と、たくさんの日本語と、身振り手振りで、なんと私に七、八割も伝えてくれたのだから。&lt;/p&gt;
&lt;p&gt;この御岳山に一泊することになったのは、偶然にもオリオン座流星群のことを知ったからだった。最近、夜空に関わる面白い縁が多くて、流星雨を見られる場所を探していた。最高の観測日は10月21日だったが、天気予報は曇り。以前、御岳渓谷にボルダリングの下見に来たことを思い出し、光害の少ない御岳山は星空観測に適していると思いついた。だから、ベストな日からは少し離れているけれど、この日に御岳山を訪れることにしたのだ。&lt;/p&gt;
&lt;p&gt;もちろん、流星雨は見られなかった(笑)。&lt;/p&gt;
&lt;p&gt;一番惜しかったのは、三脚を調整して三日月を撮影していたときのこと。突然、視界の端に明るい光の筋が夜空を横切るのが見えた。驚いたものの、よく考えるとそれが流星だったかどうかもわからない。今までも流星を見る機会があるたび、いつもこんな風に不意に目に入る程度で、今回もやはり幸運な日ではなかったようだ。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;nightsky.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/nightsky.Dlk8VBMM_Z1iLedB.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;それでも、満天の星空はそこにあった。窓際にソファを移動させて、オリオン座を見上げながら横になった。眠気が訪れ、うとうとしながら何度か目を覚まし、ゆっくりとベッドに戻って眠りについた。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ookami-by-akira-himekawa.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/ookami-by-akira-himekawa.D-cBkC6U_W5uwl.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;翌朝の食事のとき、女将が一枚の額装された絵を見せてくれた。水墨画風の六匹の狼が描かれている。また日本語で詳しく説明してくれたが、私は「任天堂」という言葉だけ聞き取れた。隣の部屋の客への説明を聞きながら、私も調べてみた。&lt;/p&gt;
&lt;p&gt;狼は「Ōkami」と呼ばれるのだということ。&lt;/p&gt;
&lt;p&gt;それはカプコンの『大神』というゲームの日本語タイトルではないか&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。やがて、いくつかのキーワードが聞き取れてきた。鹿や猪が農家の作物を食べてしまう害獣だが、狼はその害獣を食べてくれる。だからこの地域では狼が神として祀られているのだという。御嶽神社に祀られている「大口真神」は、狼が神格化された存在なのだ。&lt;/p&gt;
&lt;p&gt;だから御岳山には、ペットの犬(どちらも犬科)の健康を祈る人々がたくさん訪れるのだと納得した。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;paw.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/paw.Drb60L01_Z2pbOJA.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;その後、宿にある狼に関する作品をいくつか眺めた。本当に『大神』の世界観があった。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ookami-3.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/ookami-3.CM2zCeY-_Z1jHvIA.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;こういう偶然って、本当に面白い。&lt;/p&gt;
&lt;p&gt;これらの記憶は、もともとは自分の頭の中にばらばらに置かれていただけだった。でも、特に新鮮で印象的なことは、夜空の特別明るい星のようなもの。だからその星に名前をつける。そして興味深い記憶が積み重なっていくと、ときにはそれらの記憶が思いがけず繋がり、繋がった星々は星座になる。&lt;/p&gt;
&lt;p&gt;ただ、誰もがそれぞれ自分だけのオリオン座を持っている。流星がなくても、それはとても素敵なことだ。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;後で調べてみたところ、『大神』は御岳山の神話を参考にしたのではなく、狼に関する幅広い神話を参考にしているようだが、こうして自分が面白いと思った記憶同士を繋げるのは、やはり楽しい。あの六枚の絵は、任天堂『ゼルダの伝説』の公式漫画を手がける姫川明（姫川明輝）の作品だった。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>生活</category></item><item><title>壁にマスキングテープで作った額縁</title><link>https://yurenju.blog/ja/posts/2025-09-27_wall-frame-of-memories/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-09-27_wall-frame-of-memories/</guid><pubDate>Sat, 27 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;frame.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/frame.DJ1COMjK_Z27tRON.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;壁にマスキングテープで額縁を作ってから、もうしばらく経った。&lt;/p&gt;
&lt;p&gt;最近、朝はよく『Jazz Impressions of Japan』の「Fujiyama」を聴いている。静かで穏やかなこの曲は、夢のメッセージをまだ咀嚼しようとしている目覚めの時間に、コーヒーを淹れながら香りと音楽に身を委ね、思考を整理できる状態へと導いてくれる。&lt;/p&gt;
&lt;p&gt;ソファに座って顔を上げると、そこに額縁がある。&lt;/p&gt;
&lt;p&gt;何を飾ろうかとずっと考えていた。自分とつながりのあるものがいいと思っていて、先日カフェで吉祥寺の小さな画展のポストカード広告を見つけて足を運んでみたけれど、しっくりくる作品には出会えなかった。結局のところ、何が合うのかも分からない。きっと、実際に一枚の絵を掛けるまで、決心はつかないのだろう。&lt;/p&gt;
&lt;p&gt;九月になって、過去の私がカレンダーに銀座の靖山画廊の個展を見に行くようリマインドしていたことを思い出した。&lt;/p&gt;
&lt;p&gt;来日して間もない頃、SOMPO美術館でゴッホの『ひまわり』を見に行ったとき、偶然にも芸術家・石神雄介の作品『星を見た日』に出会った。その作品は、子どもの頃に見た無数のホタルが、まるで瞬く銀河のように輝いていた光景へと私を連れ戻してくれた。その印象があまりにも強烈だったので、&lt;a href=&quot;https://artsticker.app/posts/358740&quot;&gt;ArtStickerのウェブサイト&lt;/a&gt;でこの興味深い体験をシェアした。そこで初めて、石神雄介が九月に個展を開くことを知った。&lt;/p&gt;
&lt;p&gt;画廊で幸運にも石神雄介さんご本人にお会いすることができた。私のコメントを覚えていてくださったことに驚き、とても嬉しかった。芸術家と直接対話できる機会は、本当に貴重なものだ。芸術家が伝えたいことは作品を通じて届けられるが、それは鑑賞者自身の経験によって異なる形で受け取られる。そしてより多くの場合、絵画は鑑賞者自身の記憶や思いを呼び覚ますのだ。『星を見た日』は車の中から流星群を眺める情景を描いているが、私を子ども時代へと誘い、兄と一緒に銀河のような無数のホタルを見た記憶を呼び起こしてくれた。&lt;/p&gt;
&lt;p&gt;芸術家が描き出す情景と、鑑賞者が感じ取って呼び起こされる記憶は、まるで夢のように重なり合い、融け合い、展示空間でひとつの唯一無二の鑑賞体験を形作る。興味深いのは、芸術家とこうした思いを交わすとき、ひとつの事柄についての異なる視点が、私たちそれぞれの人生における未来の創作の源になるかもしれないということだ。&lt;/p&gt;
&lt;p&gt;壁のあの額縁は、最終的にふさわしい姿に生まれ変わった。夜に滲む光の粒は、子どもの頃に見た光景のようでありながら、遠くに照らされた山の稜線、車のテールランプが引く赤い軌跡といった、記憶にはない断片が、まるで夢のように奇妙でありながら自然に溶け合っている。&lt;/p&gt;
&lt;p&gt;それは窓のようでもある。だが、そこから見えるのは時空を超えてつながれた夢の風景だ。子どもの頃の私、大人になった私、そして出会ってきたさまざまな人や物事が、この夢の中で織りなされている。&lt;/p&gt;
&lt;p&gt;これが『追憶の宮殿(瞬く大気)』という作品、芸術家・石神雄介によるものだ。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;painting.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/painting.CfE8_IYO_CrMBi.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>Claude Codeに受け入れテストを自動実行させる</title><link>https://yurenju.blog/ja/posts/2025-07-22_claude-acceptance-test/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-07-22_claude-acceptance-test/</guid><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ここ数ヶ月、CursorとClaude Codeを使って開発を続けており、LLMアシスタントがどこまで可能かの限界を押し広げてきました。その過程で、多くの開発者が直面する共通の問題に遭遇しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;開発速度は速いが、品質にばらつきがある。うまくいくときは驚くほど良いが、失敗するときも同様に驚かされる&lt;/li&gt;
&lt;li&gt;要件が不明確な場合、LLMが独自に詳細を補完するが、それが必ずしも意図したものではない&lt;/li&gt;
&lt;li&gt;LLMがあまりにも速く多くのコードを生成するため、開発者の認知負荷が高まり、内容を確認する際にすべてを受け入れたくなる衝動に駆られる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;様々な試行錯誤の結果、ソフトウェア開発者として、LLMとの適切な協働方法を見出しました。それは受け入れテストに立ち返ることです。長期間のAI協働作業を経て、LLMとの協働は実際の人間のエンジニアとの協働と多くの共通点があることがわかりました。要件が明確であればあるほど、議論を重ねるほど、期待に沿った成果物が得られます。&lt;/p&gt;
&lt;p&gt;要件を明確にする方法を考えたとき、キャリア初期に学んだCucumberフレームワークとGherkin構文を思い出しました。Cucumberは振る舞い駆動開発(BDD)ツールで、人間と機械の両方が読める文書を受け入れ条件として記述します。例えば、Todoアプリケーションを開発する場合、仕様の一つとしてEnterキーを押して項目を送信する機能があります。Gherkin構文を使えば、次のように記述できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light vitesse-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#121212;color:#24292e;--shiki-dark:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;gherkin&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;  Scenario&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt; Add todo item&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    When &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I enter &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;Buy milk&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt; in the input field&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    And &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I press the Enter key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    Then &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I should see &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;Buy milk&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt; in the list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    And &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;the input field should be cleared&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;しかし、これをどのように実行可能なテストに変換するのでしょうか。通常、仕様とテストロジックを橋渡しするグルーコードを記述する必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light vitesse-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#121212;color:#24292e;--shiki-dark:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; Given&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; When&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; Then&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt; require&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;@cucumber/cucumber&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; expect&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt; require&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;@playwright/test&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;// ブラウザを操作するためのページオブジェクトがあると仮定&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;When&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;I enter {string} in the input field&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209;--shiki-dark:#BD976A&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // 入力フィールドを見つけてテキストを入力&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;input[type=&quot;text&quot;]&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;  await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;When&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;I press the Enter key&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // 入力フィールドでEnterキーを押す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;input[type=&quot;text&quot;]&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;  await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;press&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;Enter&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;Then&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;I should see {string} in the list&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209;--shiki-dark:#BD976A&quot;&gt;expectedText&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // Todo項目がリストに表示されることを確認&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; todoItems&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;.todo-item&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; itemTexts&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; todoItems&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;allTextContents&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;  expect&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;itemTexts&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;toContain&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;expectedText&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;Then&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;the input field should be cleared&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // 入力フィールドがクリアされたことを確認&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;input[type=&quot;text&quot;]&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;inputValue&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;  expect&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;toBe&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以前、いくつかのサイドプロジェクトでCucumberを使用したことがありますが、本番環境のプロジェクトでは一度も使ったことがありません。主な理由は、このような仕組みの導入が容易ではないからです。チームがTDDを受け入れることさえ珍しいのに、仕様から自動テストへの橋渡しをするのは言うまでもありません。&lt;/p&gt;
&lt;p&gt;また、私が主にスタートアップチームで働いていたことも関係しています。スタートアップでは通常、仕様からテストまでのサイクル計画を実践する時間的余裕がありません。&lt;/p&gt;
&lt;p&gt;しかし、最大の障壁はグルーコードの記述でした。各文を個別のアクションに分解して記述するため、一つのテストシナリオが多くの小さな断片に分割されます。また、Gherkinを記述する際も注意が必要で、同じ機能の文は同じように書かないと、グルーコード内で統合できません。例えば、&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light vitesse-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#121212;color:#24292e;--shiki-dark:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;gherkin&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;When &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I click the button &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;When &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I go to click the button &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これらは二つの異なるテストロジックの断片に分割されてしまいます。同じことをする際は、記述を完全に一致させる必要があります。&lt;/p&gt;
&lt;p&gt;要するに、Cucumberの使用は新鮮で興味深い体験でしたが、様々な障壁により本番プロジェクトで使用したことはありませんでした。&lt;/p&gt;
&lt;p&gt;しかし、LLMがソフトウェア開発に参入した時代では状況が変わりました。LLMはGherkinで記述された仕様を直接読み取り、&lt;strong&gt;グルーコードなしで直接実行できる&lt;/strong&gt;からです。&lt;/p&gt;
&lt;p&gt;LLMは仕様を直接読み取って理解でき、Model Context Protocol(MCP)を通じてCursorやClaude Codeがブラウザやモバイルエミュレータを操作して開発を支援できます。つまり、Gherkinで期待される動作を記述すれば、LLMはMCPを通じて開発成果が受け入れ基準を満たしているかを自己確認できるのです。&lt;/p&gt;
&lt;p&gt;Gherkin構文は優れた橋渡し役となります。これは人間とLLMの両方が理解できる標準構文であるため、開発前にこの仕様を通じて実装内容を確認し、開発完了後にLLMがこの仕様を読み取り、MCPを使ってブラウザやモバイルを操作して受け入れテストを実行できます。詳細なデモンストレーションは、以下のYouTube動画をご覧ください。&lt;/p&gt;
&lt;p&gt;!youtube[WvGY_Jcm_kY]&lt;/p&gt;
&lt;p&gt;これにより、LLMとのコミュニケーションツールとして使えるだけでなく、受け入れ条件を満たしていないことを発見した場合、LLMが観察して実装を修正することもできます。&lt;/p&gt;
&lt;p&gt;興味があれば、GitHubで試してみてください。&lt;a href=&quot;https://github.com/yurenju/llm-bdd-coding-demo&quot;&gt;yurenju/llm-bdd-coding-demo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;bdd--tdd&quot;&gt;BDD + TDD&lt;/h2&gt;
&lt;p&gt;BDDは、より明確な仕様と受け入れ条件により、期待通りの成果が得られない問題を軽減できますが、開発者の&lt;strong&gt;認知過負荷&lt;/strong&gt;の問題は解決できません。段階的なTDDを組み合わせることで、この問題を緩和できます。&lt;/p&gt;
&lt;p&gt;BDDを使用すると、開発仕様と受け入れ基準を明確に定義できますが、LLM開発で頻繁に遭遇するもう一つの問題があります。それは、LLMがあまりにも速くコードを生成することです。一度に生成される内容が認知負荷を超えると、誘惑に負けて&lt;strong&gt;確定&lt;/strong&gt;ボタンをそのまま押してしまいますが、注意深く見ないと意図しない内容が生成されることがあります。&lt;/p&gt;
&lt;p&gt;この認知負荷を解決するため、最近はBDD + TDDをテストしています。BDD部分は前述のようにGherkinを受け入れ基準として使用します。しかし、LLMにコンポーネントを分解してもらい、各コンポーネントの開発時に以下の順序を守るよう依頼します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まずインターフェース、空のクラス、または空の関数を記述し、&lt;code&gt;throw new Error(&apos;not implemented yet&apos;)&lt;/code&gt;のような未実装エラーをスローする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;テストの記述のみ&lt;/strong&gt;を書いてもらう。つまり、自動テストの&lt;code&gt;describe(&apos;記述&apos;)&lt;/code&gt;と&lt;code&gt;it(&apos;記述&apos;)&lt;/code&gt;だけで、テストロジックは実装せず、確認させる&lt;/li&gt;
&lt;li&gt;この段階で、どの程度のテストを書くつもりか把握でき、テストの粒度について直接コミュニケーションを取ります。通常、テスト項目を大幅に削減します。一般的に細かすぎるからです&lt;/li&gt;
&lt;li&gt;テスト項目を確認した後、テストロジックを記述してもらう&lt;/li&gt;
&lt;li&gt;テストを実行する。この時点で新しく追加されたテストはすべて失敗すべきです(レッドフェーズ)&lt;/li&gt;
&lt;li&gt;実装を開始してもらい、実装後にテストを実行します。理論的には、書いたテストがすべてパスするはずです(グリーンフェーズ)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;このような開発フローでは、各段階の成果物が認知負荷の範囲内に収まり、成果物を適切に確認できます。そして、「何が正しいか」が明確になった後は、BDDフローと同様に、明確な完了条件があればLLMは優れた成果を出せます。&lt;/p&gt;
&lt;p&gt;このような開発フローに興味がある方は、以前書いた&lt;a href=&quot;https://github.com/yurenju/cursor-tdd-rules&quot;&gt;yurenju/cursor-tdd-rules&lt;/a&gt;を参照してください。Claude Codeで使用する場合は、若干の修正が必要です。&lt;/p&gt;
&lt;p&gt;ただし、これらはまだ発展途上の協働開発方法であることを忘れないでください。ツールや使用技術は急速に更新されており、すぐに適用できなくなる可能性もあります。&lt;/p&gt;
&lt;p&gt;このような開発方法を使用する主な目的は、自分の認知負担を軽減し、プロジェクトを自分のコントロール下に置きながら、できる限りLLMを活用して目的を達成することです。同時に、境界と目標を明確にすることで、LLMとより良くコミュニケーションを取り、自分の目標が何であるかを伝えられます。&lt;/p&gt;
&lt;p&gt;この過程で、開発初期から自分が何を望んでいるかがより明確になると感じています。LLMとの協働も人間との協働も、秘訣はほぼ同じです。より頻繁なコミュニケーションと要件の確認です。&lt;/p&gt;
&lt;p&gt;おそらく人間との協働とそれほど大きな違いはなく、自分のコミュニケーション能力を強化することが重要なのでしょう。&lt;/p&gt;</content:encoded><category>技術</category></item><item><title>AIにコードを書いてもらったら、理解してもらえない？</title><link>https://yurenju.blog/ja/posts/2025-04-23_ai-coding-doesnt-understand-me/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-04-23_ai-coding-doesnt-understand-me/</guid><pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近、会社の新しいプロジェクトのサブプロジェクトで、新しい開発方法を実験しました。できるだけ多くのコードをAI（Cursor）で書き、人間の介入を最小限に抑えることで、未来のソフトウェア開発モデルを理解しようとしています。&lt;/p&gt;
&lt;p&gt;AIの助けを借りて開発サイクルを大幅に短縮できることを期待していました：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;reduce-development-cycle.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;952&quot; height=&quot;620&quot; src=&quot;/_astro/reduce-development-cycle.DfsiRO6k_4RYfV.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;もしあなたも少し大きなプロジェクトでこれを試したことがあるなら、初期の結果がどうだったか想像できるでしょう：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;expected-and-actual.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;952&quot; height=&quot;620&quot; src=&quot;/_astro/expected-and-actual.DN7tC4id_G5Qat.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;AIに少し多くのことをやらせようとすると、期待通りに動かないことがよくありました。一度で完了できる作業は、通常、簡潔で明確で曖昧さのないタスクです。これらは通常うまくいきます。&lt;/p&gt;
&lt;p&gt;もちろん、これでAIを使った開発をやめるわけではありません。今では80〜90%のコードをAIで開発しています。対話を通じて大量の開発を行っています。AIには深い技術力があるので、私は真剣に監督者として、彼の仕事が期待通りに完了するようにしています。&lt;/p&gt;
&lt;p&gt;しかし、どうすればこの段階に到達できるのでしょうか？プロジェクトにAIを導入する前に、チーム内で通常どのようにソフトウェアプロジェクトを開発しているかを振り返る必要があります。&lt;/p&gt;
&lt;h2 id=&quot;従来のソフトウェア開発の議論&quot;&gt;従来のソフトウェア開発の議論&lt;/h2&gt;
&lt;p&gt;従来のソフトウェア開発プロセスでは、チームは製品の観点から戦略的な議論を行い、エンジニアリングチームが技術的なソリューションについて議論します。会議と文書化を経て、最終的に合意に達した後、反復的な開発を通じて製品が徐々に開発されます。&lt;/p&gt;
&lt;p&gt;ソフトウェア開発プロセスで重要なのは、チームの&lt;strong&gt;合意&lt;/strong&gt;と&lt;strong&gt;コンテキスト&lt;/strong&gt;です。数語でAIに理想的なシステムを作成することを期待するだけでは、最も重要な合意とコンテキストを伝えることができません。&lt;/p&gt;
&lt;p&gt;AIはあなたの心を読むことはできません。短い会話からこれらのコンテキストを知ることはできません。&lt;/p&gt;
&lt;p&gt;チームは会議と文書を通じて合意を形成し、コンテキストを整理できます。では、AIにこのような情報をどのように提供すればよいのでしょうか？いくつか試してみることができます。&lt;/p&gt;
&lt;h2 id=&quot;ルールで方向性を定義する&quot;&gt;ルールで方向性を定義する&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;rule-for-right-track.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/rule-for-right-track.Ccz50Og7_Z11rC5v.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Cursorではルールを定義できます。質の高いルールを書くには多くの時間をかけて検討し改善する必要がありますが、ルールはAIに大まかな方向性を示し、チームのスタイルにより近づけることができます。&lt;/p&gt;
&lt;p&gt;たとえば、テストを書くべきか？どの程度まで書くべきか？どのようなgit commit messageを好むか？コンポーネントの記述規則、命名規則、採用する技術スタックは何か？これらを説明しないと、彼はしばしば好き勝手にします。チームに加わったばかりで、開発文化にまだ適応していないソフトウェアエンジニアのようなものです。&lt;/p&gt;
&lt;h2 id=&quot;仕様specを分割し段階的に進む&quot;&gt;仕様（Spec）を分割し、段階的に進む&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;rules-specs-impl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/rules-specs-impl.DIlftk9A_6AljF.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;実装前に機能仕様を書きます（もちろん彼に書いてもらいます）。仕様を十分に読んで議論し、彼がやりたいことがあなたがやりたいことと同じであることを確認してから、実装を依頼します。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;rule-spec-workflow.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/rule-spec-workflow.D4vnUEhT_ZpHewc.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;機能仕様をすべて自分で書く必要はありません。私たちの場合、通常、プロジェクト管理サービス（Asanaなど）でタスクを作成した後、私がそのタスクで何をすべきかを伝え、仕様を書いてもらいます。その後、展開された仕様について議論し更新し、仕様が完成したら新しいChat Contextを開いて、その仕様に従って実装してもらいます。&lt;/p&gt;
&lt;p&gt;仕様の質が良くないと感じたら、specを生成するruleを修正し、チームが今後specを生成する際により良い文書品質が得られるようにします。&lt;/p&gt;
&lt;p&gt;仕様の長さはチームの習慣によって異なりますが、短い方が読みやすく、私たちの意図に沿って開発しやすくなります。これは目標をより良く達成するのに役立ちます。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;feature-specs.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/feature-specs.C9NK3AYu_Z1e9vYV.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;前述したように、コンテキストや合意がないと、望む製品を作ることは非常に困難です。Ruleを通じてコンテキストと合意を確立することに加えて、この問題を回避する別の方法は、目標を設定した後、すべての仕様を一度に書かずに、完成しようとしている機能の仕様だけを書くことです。&lt;/p&gt;
&lt;p&gt;彼が書いたspecに基づいて進む方向を修正するため、specを書いて実装するたびに偏差を修正できます。これにより、プロジェクトがアイデアから実際の製品への道を予想される方向に進むことができます。&lt;/p&gt;
&lt;h2 id=&quot;仕様には受け入れ条件が必要&quot;&gt;仕様には受け入れ条件が必要&lt;/h2&gt;
&lt;p&gt;仕様の内容はチームごとに異なりますが、受け入れ条件（Acceptance Criteria）を含めることをお勧めします。この受け入れ条件は、AIに何が完了したかを明確に伝えるためのものです。このような明確な条件により、AIはどの程度まで完成させる必要があるかをより具体的に知ることができます。&lt;/p&gt;
&lt;p&gt;受け入れ条件にはさまざまな方法があります。エンジニアの観点から見ると、単体テストや統合テストなどの自動化されたテストや検証で代替できます。また、Webアプリケーションを開発している場合は、&lt;a href=&quot;https://github.com/microsoft/playwright-mcp&quot;&gt;microsoft/playwright-mcp&lt;/a&gt;を使用してAIにブラウザを開いて現在の結果を確認するように指示し、Webページを操作して検証させることができます。&lt;/p&gt;
&lt;p&gt;現在の成果をより適切に判断できれば、完成度を判断し、後続のアクションを取ることがより簡単になります。&lt;/p&gt;
&lt;p&gt;自動検証ができない場合は、手動テストの方法をリストアップしてもらい、開発者が自分で検証してから結果を伝えることもできます。もちろん、彼が自分で検証し、自分で修正できる方が良いです。&lt;/p&gt;
&lt;h2 id=&quot;これまでのところ&quot;&gt;これまでのところ…&lt;/h2&gt;
&lt;p&gt;私たちもこのような開発モデルを試している最中で、このプロセスで調整が必要な部分が多くあります。現在、rules -&gt; spec -&gt; implementationというワークフローはまずまずうまく機能していると感じています。specを書く際にAIと議論し、計画を更新する機会があるため、作業を開始する前に、私たちが完成させたい形に調整できます。&lt;/p&gt;
&lt;p&gt;しかし、Cursorがルールを守るのがあまり得意でないという問題にも直面しています。時間が経てば、これらの問題は徐々に修正されるか、より良い実践方法が蓄積されるはずです。しかし、その日が来るまで、私たちは頻繁にルールを修正する必要があります。現在、ルールが長すぎると忘れがちになり、明確で短い方が良いと感じています。また、ルールの記述も重要です。なぜなら、AIが特定のルールを適用したいと思うタイミングに影響するからです。&lt;/p&gt;
&lt;p&gt;また、最近多くの人がVibe Codingについて話しています。これは、ほぼ直感的な方法で対話を通じて開発し、実装の詳細をあまり気にしないというものです。&lt;/p&gt;
&lt;p&gt;しかし、実際には「直感」の大部分は、ある分野で深い背景知識と経験を持っているために、労せずして「直感」で完成させることができるように見えるだけです。実際には誰もができることではなく、表現力も関係しています。&lt;/p&gt;
&lt;p&gt;この段階に達するには、操作する人がその製品の分野について十分に深い見解を持ち、十分に繊細で明確な表現力を備えている必要があります。&lt;/p&gt;
&lt;p&gt;私は、誰もが自分の視点から、AIと一緒にソフトウェアプロジェクトを協働開発する方法を見つけるべきだと思います。ソフトウェアエンジニアであり好奇心旺盛な人として、また長年の執筆で一定の表現力を蓄積してきたため、私に適した方法でAIと協働し、ニーズをより正確に記述し、作業を分割し、受け入れ条件とソフトウェア開発の好みを設定し、自動化テストの方法を使用してAIがより良い仕事をできるようにします。&lt;/p&gt;
&lt;p&gt;私は自分の視点から出発し、自分が何が好きで何が得意かを理解し、AIとのワークフローをカスタマイズしました。この相互作用の中で、コードを書くことよりも製品を作ることの方が好きだということに気づきました。AIと対話することで、この2つをより明確に分離し、自分自身を理解する機会が得られました。&lt;/p&gt;
&lt;p&gt;そして、誰もが異なります。私のアドバイスは、自分が何が好きで何が得意かを振り返り、AIと協働する適切な方法を見つけることです。自分自身を理解することに近道はなく、誰もが多くの時間をかけて探求する必要があります。&lt;/p&gt;
&lt;p&gt;もしあなたの興味が自分でコードを書くことであり、そのプロセスが幸せをもたらすなら、AIを使わない方があなたにとって最善かもしれません。&lt;a href=&quot;https://www.youtube.com/watch?v=pVr3sEeus6E&amp;#x26;t=1245s&quot;&gt;浦沢直樹のインタビュー&lt;/a&gt;では、AI絵画についての見解が述べられています。彼は言います：「私は絵を描くことがとても楽しいと思っていて、私のように仕事の中で楽しみを見つけられる人にとって、AIに任せてしまうのはもったいないと思いませんか？」&lt;/p&gt;
&lt;p&gt;大衆が追求しているものが、必ずしもあなたに適しているとは限りません。自分がどのような人間で、何に情熱を持っているかを振り返り、自分自身の視点で次のステップを踏み出す必要があります。&lt;/p&gt;
&lt;p&gt;AIが人の言葉を理解できなくても構いません。あなた自身を理解しようとすることの方が重要です。&lt;/p&gt;</content:encoded><category>技術</category></item><item><title>Claude Desktop内で直接トークン取引を行う</title><link>https://yurenju.blog/ja/posts/2025-03-13_uniswap-mcp/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-03-13_uniswap-mcp/</guid><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;対話型AIツールは当初、外部情報へのアクセスが一切できませんでしたが、後に検索機能などの外部ツールが徐々に追加されるようになりました。しかし、「検索」という機能は範囲が広く、天気予報や株価照会といった特定の機能に対しては、ネット検索でも実現可能ですが、やはり直接APIを統合して天気や株式市場の機能を追加する方が効率的です。&lt;/p&gt;
&lt;p&gt;振り返ってみると、インターネット上のサービスは数え切れないほど存在し、全てをAPIで接続することは不可能です。さらに、一部のツールはHTTP APIの形式ではなく、ローカルコンピューター上でのみ利用可能なツールです。例えば、プログラミングの際、エディターがブラウザの正確な画面、構造、開発者デバッグ情報にアクセスできることが望ましいですが、これらはHTTP APIの形式では接続できません。&lt;/p&gt;
&lt;p&gt;MCPは、AIがツールの使用方法を理解するためのオープン標準です。例えば、タスク管理を支援してもらいたい場合、AsanaのMCPを使用してAPI経由でタスク管理サービスに接続すれば、プロジェクト全体の計画、必要なデータの作成、さらにはタスクの依存関係の管理などを支援してもらえます。&lt;/p&gt;
&lt;p&gt;先ほど例に挙げた開発支援のためのブラウザ操作も、&lt;a href=&quot;https://github.com/executeautomation/mcp-playwright&quot;&gt;mcp-playwright&lt;/a&gt;を使用することで、ブラウザを操作し、コンソールを直接読み取ってエラーを判断し、自動修正することが可能です。&lt;/p&gt;
&lt;p&gt;ちょうど仕事で関連するタスクがあり、関連事項を調査する必要があったため、ProtocolinkとMoralisを使用してUniswapのMCPを作成し、Claude Desktop内で直接取引できるようにしました。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;uniswap-mcp.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1704&quot; height=&quot;1344&quot; src=&quot;/_astro/uniswap-mcp.CdheqHGK_18vyDW.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;デモは&lt;a href=&quot;https://www.youtube.com/watch?v=7fRmwQYaBLg&quot;&gt;こちらのYouTubeリンク&lt;/a&gt;でご覧いただけます。&lt;/p&gt;
&lt;p&gt;完成後、ここ10年のメッセージングアプリの発展について考えさせられました。最初期はLINE MINI AppとTelegram Mini Appsが普及し始めましたが、後に大部分の機能は外部Webページで実装され、ごく一部の簡易UIのみがメッセージング会話内に埋め込まれるようになりました。私も同じアプローチを取るでしょう。結局、外部サイトでの実装の方が簡単で、最も必要なユーザー認証部分だけをLINE内で処理すれば良いのですから。&lt;/p&gt;
&lt;p&gt;数か月前、VercelのAI SDK 3.0を見た時、将来のソフトウェアユーザーインターフェースが大きく変わる可能性があることを実感しました。その発表には、天気を尋ねた後、直接天気表示インターフェースを生成できるツールが含まれていました。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;vercel-ai-sdk.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1653&quot; height=&quot;757&quot; src=&quot;/_astro/vercel-ai-sdk.B-R26kZc_1WPIDt.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;最初は完全に動的なUI生成だと思いましたが、ドキュメントを詳しく読むと、実際には&lt;a href=&quot;https://sdk.vercel.ai/docs/ai-sdk-ui/generative-user-interfaces#create-ui-components&quot;&gt;UIを事前定義する&lt;/a&gt;必要があることが分かりました。&lt;/p&gt;
&lt;p&gt;まだそこまで実現していないとしても、ある想像の余地が開かれました。将来、UIコンポーネントが受信データのコンテキストに基づいて動的に適切なUIインターフェースを組み立てられるようになったら、どのような体験になるでしょうか?今後のユーザーインタラクションが現在とまったく異なるものになったら?音声対話の後、完全に動的に適切なユーザーインターフェースが生成されるようになるのでしょうか?&lt;/p&gt;
&lt;p&gt;私たちの業界では、どのような影響が生じるのでしょうか?&lt;/p&gt;
&lt;p&gt;未来を投影したり想像したりすることは興味深いことだと思います。未来は混沌としていながらも面白そうですが、面白い要素の方が多くあってほしいと願っています。&lt;/p&gt;
&lt;h2 id=&quot;あとがき&quot;&gt;あとがき&lt;/h2&gt;
&lt;p&gt;このuniswap-mcpは研究目的のためだけに作成されたもので、コードの99%は全てCursorによって書かれました。私たちは皆、環境変数を通じて秘密鍵をプログラムに渡すべきではないことを知っていますが、それでも興味がある方のために、以下にソースコードを公開します。テストと研究目的でのみご使用ください。また、多額の資金を入れないようにしてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yurenju/uniswap-mcp&quot;&gt;https://github.com/yurenju/uniswap-mcp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>技術</category></item><item><title>Perplexity Cometブラウザのリリース前に</title><link>https://yurenju.blog/ja/posts/2025-02-25_before-perplexity-comet/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-02-25_before-perplexity-comet/</guid><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;perplexity-comet-browser.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1966&quot; height=&quot;745&quot; src=&quot;/_astro/perplexity-comet-browser.BynsB0Tb_Z1LJI8J.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Perplexityが新しいブラウザ「Comet」をリリースしようとしている。実際にどのようなブラウザになるかはまだ分からないが、想像してみるだけでも興味深い。このブラウザが人間とAIが協力してウェブを利用するものだとすれば、例えば何か資料を探したいときに、AIが各種検索エンジンで検索し、情報を読み取って整理してくれる。Google ドキュメントやNotionを編集する必要があれば、直接ウェブページを開いて文書を更新してくれる。もしそうなれば、かなり大きな変化になるだろう。&lt;/p&gt;
&lt;p&gt;以前、なぜ人型ロボットを作るのかという理由を聞いたことがある。それは、世界全体が人間を基準に設計されているからだ。階段、ドアノブ、洗濯機、テレビのリモコンなど、すべてがそうだ。新しい創造物が別の形態であれば、何百年、何千年と積み重ねられてきたこれらのインフラを操作することができない。&lt;/p&gt;
&lt;p&gt;このブラウザも、それに似ているように思える。従来のウェブサービスは、機械がアクセスしようとすると、新しいAPIを開発する必要があった。さらに、様々な自動化クローラーに対抗するため、reCAPTCHAのような人間検出システムまで設置されていた。&lt;/p&gt;
&lt;p&gt;しかし、これからのブラウザが人間とAIが協力してウェブを利用するものであれば、一気に多くのインフラが利用可能になる。自動化操作の障壁はもはや存在せず、人間の介入が必要な場合にAIが協力を求め、それが完了すれば再び作業を続ける。こう想像すると、未来の世界はまったく異なるものになる。以前はウェブサービス間の統合が難しいと思われていたことが、一気に簡単になる――同時に、私たちは多くの新しい問題も解決しなければならないだろう🤣&lt;/p&gt;
&lt;p&gt;未来はやはり混沌としていて面白い。混沌よりも面白さの要素が多いことを願っている。&lt;/p&gt;</content:encoded><category>技術</category></item><item><title>ネクター・コーヒー</title><link>https://yurenju.blog/ja/posts/2025-02-24_nectar-coffee/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-02-24_nectar-coffee/</guid><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;nectar-coffee.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/nectar-coffee.BGpzhQdv_Z209G3w.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;雪山トンネルを抜けて頭城へ向かう道を車で走りながら、私たちはいつも、生活の中のささやかなことを語り合う。窓から斜めに差し込む光が、籐の椅子をどう照らしていたかについて話すこともあれば、宜蘭の花屋の店主のポッドキャストについて話すこともある。そして時には、世界中で私たちだけが悩んでいるような、小さな悩み事について語り合う。&lt;/p&gt;
&lt;p&gt;たいていは結論が出ないまま、私たちはもうエレベーターに乗って屋上まで上がり、オーナーのNatalieに挨拶を交わし、ネクター・コーヒーで椅子を引いて座っている。話題はまだ終わっていないのに、今度は今日どのコーヒーを飲もうか迷い始める。あの私も飲みたかった限定コーヒーの10個の丸印は、もう他のお客さんの名前で埋まってしまっているだろうか。それとも、密かに喜びながら最後の丸に自分の名前を書き込むことができるだろうか。&lt;/p&gt;
&lt;p&gt;話題はまだ終わらない。オーナーも議論に加わって、さらに収拾のつかない方向へと話を広げながら、目を見開いて口が閉じられないほど美味しいコーヒーを運んでくる。そして話題は枝葉を広げながら、家に帰る直前まで続いていく。&lt;/p&gt;
&lt;p&gt;いつも答えは出ないから、ネクター・コーヒーは当初、私たちの目的地のようだったのに、いつも旅の一部になってしまう。&lt;/p&gt;
&lt;p&gt;先月ネクター・コーヒーを訪れた時、Natalieに私が東京で働くことになったことを話した。驚きつつも、私たちは生活についてたくさんの考えを交わし合った。人生とは流動的で、正解も不正解もない選択の連続だ。私たちが分かれ道でする一つ一つの選択に、やり直しのチャンスはない。後悔や悔恨に囚われるより、すべての分岐点の結末を見通せる全知の目など誰も持っていないことを受け入れる方がいい。その時の自分が、最善の決断をしたのだと自分に言い聞かせる。&lt;/p&gt;
&lt;p&gt;あとは、旅の途中の景色を楽しむことを学ぶだけだ。&lt;/p&gt;
&lt;p&gt;最近、ネクター・コーヒーが告知を出した。最終営業日は1週間後だという。Natalieが自分自身の決断を発表したことを嬉しく思うし、この屋上のカフェで過ごした一つ一つの時間をとても楽しんだ。私たちは一緒にシンギングボウルを試したこともあった。コーヒーの味が持つ音楽性や色彩について語り合ったこともあった。亀山島を遠くに望む風光明媚なテラスで、友人がお酒を飲みながら苦い顔でビデオ会議をしているのを見たこともあった。私はここで、友人がGRフィルムカメラのシャッターを切るのを羨ましく眺めていた。そして私たちは、『PERFECT DAYS』がもたらした感動について語り合った。&lt;/p&gt;
&lt;p&gt;最初、雪山トンネルを車で抜けていく時、ネクターは目的地のように思えたけれど、それだけではなかった。黄昏時に手を振って別れを告げる時には、それはもう目的地から、私と友人たちが大切にする美しい旅の一部へと変わっていた。&lt;/p&gt;
&lt;p&gt;吉祥寺のカフェに入り、丸印の描かれたポイントカードを受け取った時、思わず微笑んでしまった。今この瞬間、ネクター・コーヒーは私と一緒に新しい旅に踏み出したのだと分かった。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>SOMPO美術館の淡いブルーの夜空</title><link>https://yurenju.blog/ja/posts/2025-02-11_sompo-in-pale-blue/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-02-11_sompo-in-pale-blue/</guid><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;sompo-outside.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/sompo-outside.BfiHgES__1ruhcG.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;今日、SOMPO美術館でアジア唯一のゴッホ「ひまわり」シリーズ『花瓶の中の十四本のひまわり』を鑑賞してきた。けれど、思いがけず別のアーティスト、石神雄介の夜空に関する作品に出会い、幼い頃のいくつかの記憶がよみがえってきた。&lt;/p&gt;
&lt;p&gt;ひとつは、子どもの頃に参加したサマーキャンプでのこと。ある日、私たちのグループは山の上の学校に泊まることになった。その夜はかすかな虫の声だけが聞こえ、不思議なほど静かだった。学校側には風も雲もなかったのに、遠くの空では稲妻が次々と光っていた。まるで早送りボタンを押したかのように、稲妻は瞬時に蜘蛛の巣のように広がり、銀白色の複雑な線が交差して、一瞬で遠くの空を覆い尽くした。数秒後には轟音が響いてくるはずなのに、それは決してあの遠い夜空からは届いてこなかった。&lt;/p&gt;
&lt;p&gt;こうして、稲妻はサイレント映画のように、遠くの夜空で繰り返し閃き、交わり、そして消えていった。私が深い眠りに落ちるまで。&lt;/p&gt;
&lt;p&gt;もうひとつは、幼い頃に兄と南投で過ごした時のこと。夜、父の猟師の友人たちとムササビ狩りに出かけた。山の奥深くへ入ると、真っ暗闇で何も見えなくなり、猟師たちはもう子どもを連れて行けなくなった。そこで猟師のおじさんは、「ここで待っていなさい。狩りが終わったら戻ってくるから」と言った。&lt;/p&gt;
&lt;p&gt;私たち二人の子どもは、こうして山の奥の森の中に取り残された。本当に無謀なことだったけれど、人工的な光が一切ない場所だったのに、なぜか怖いとは思わなかった。最初は笑いながらおしゃべりをしていたけれど、しばらくすると兄も私も静かになり、夜の森がゆっくりと変化していくのを見つめていた。&lt;/p&gt;
&lt;p&gt;すると、周りが徐々に明るくなってきた。私たちは何千という蛍に囲まれていたのだ。まるで銀河の中にいるかのように、きらめく星の群れが私たちのそばに降りてきた。大気による散乱がなくても、それらの星は呼吸するように明滅し、恒星のように生命力を放っていた。その光景は心に深く刻まれ、一生忘れられない景色となった。&lt;/p&gt;
&lt;p&gt;東京都現代美術館の坂本龍一展にこんな一節があった。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;子どもの頃のある特定の午後を、あなたは何度思い出すだろうか。あなたの人生の一部となった、かけがえのない午後を。それがなければ、自分の人生を想像することさえできないような午後を。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;この二つの体験は、確かに私を形作っている。大人になった数十年の間、時折この夜の情景を思い出す。それは私が人として存在するための礎なのだ。だからこそ、私は夜空にまつわる様々な芸術作品に惹かれるのかもしれない。例えばEmilíana Torriniの曲「Nightfall」を聴くと、人は広大な星空の中の一つの流れ星のようなもので、星空を横切る時に誰かと出会うことは、得難い縁だと感じる。&lt;/p&gt;
&lt;p&gt;だから、この絵画『星を見た日』(The day we saw the stars)を目にした時も、同じように夜空、流星、そして夢のように透明な質感を持つ人物に引き込まれた。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;the-day-we-saw-the-stars.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/the-day-we-saw-the-stars.BqdNqV5H_2b1i4.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;この絵を見つめていると、心の中に「Nightfall」が響いてくる。歌詞に描かれているように、命はただ一瞬の輝きに過ぎない。流れ星が夜空を横切るように、夕暮れ時の光と影に優しく支えられながら飛び、この短くも美しい淡いブルーの夜空を駆け抜けていく。&lt;/p&gt;
&lt;p&gt;もし夜空で千載一遇の出会いがあったなら、頷いて微笑み、会釈を交わそう。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>ポイントカードと帰属意識</title><link>https://yurenju.blog/ja/posts/2025-02-03_point-card-belonging/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2025-02-03_point-card-belonging/</guid><pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;point-card-belonging.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/point-card-belonging.CWcfMUTZ_Z17XkAv.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;実家の寝室のカーテンのように完璧に光を遮らないせいか、最近は朝起きるとカーテンと窓の隙間から差し込む光が目に入る。ぼんやりとした意識の中で、もう家にはいないのだと思い出させてくれる。けれど、これには別の良さもある。一日の輪郭をより鮮明に感じられるようになった。まるで『PERFECT DAYS』で毎朝聞こえる寺院の掃き掃除の音のように。&lt;/p&gt;
&lt;p&gt;最近、友人たちと何度か帰属意識について話をした。ある場所を好きになるとき、もはや故郷や他のどこかと比べる必要がなく、ただ純粋に好きだと感じられたなら、それは一種の帰属だ、と。しかしこういった感覚は、その土地の住人になってから初めて表れるものだ。では、異郷に足を踏み入れたばかりの人はどうだろう？よそ者として、どうやって溶け込み始めればいいのだろう？&lt;/p&gt;
&lt;p&gt;やはり、ごみの分別から始めるしかないのだと思う。可燃ごみと不燃ごみの境界線を理解し、ペットボトルと「リサイクル可能なプラスチック包装・容器」は別物だと区別する。説明書を丁寧に読んで突然腑に落ちた瞬間、心の中で嬉しくなった。それがきっと、溶け込むための第一歩なのだろう。&lt;/p&gt;
&lt;p&gt;数日前の夜、また吉祥寺に戻った。友人が勧めてくれたカフェのことを思い出した。以前、夕食前にそこでコーヒーを飲んだことがあって、その雰囲気がとても気に入っていた。前回訪れたときは、年配のご夫婦が愛犬を連れて一緒にコーヒーを飲んでいた。夕暮れ時、窓の外では人々がのんびりとこの通りを散歩していた。店内ではコーヒー豆とカフェオリジナルの服を売っていて、そこには「Light Up」と書かれていた。みんなが吉祥寺を好きになる理由が分かる気がした。&lt;/p&gt;
&lt;p&gt;そんなことを考えているうちに、すっかり暗くなって、街灯も灯り始めていた。時計を見ると、閉店まであと30分。やはりコーヒーをテイクアウトすることにした。&lt;/p&gt;
&lt;p&gt;コーヒーを注文したとき、店員さんが突然何か尋ねてきた。一瞬、キーワードが聞き取れなくて、とっさに「はい」と答えた。すると彼は小さなカードを取り出し、最初のマスに丁寧にコーヒーの種類と日付を書き込んだ。ポイントカードだった。&lt;/p&gt;
&lt;p&gt;もしかしたら、ポイントカードも溶け込むための一歩なのかもしれない。これは、私がここに10回通ってコーヒーを飲む可能性があることを意味している。スタンプを集めて一度の割引を手に入れる。そしてその割引は、バッジのように、私がこの街とより深く繋がったことを祝福してくれるだろう。&lt;/p&gt;
&lt;p&gt;一体、何枚のポイントカードがあれば帰属意識が生まれるのだろう？いつか朝、カーテンから差し込む陽の光と掃き掃除の音を感じながら、もう実家のカーテンの遮光性を思い出すこともなくなったとき、ようやく「家」という感覚を、別の街へと広げられるのかもしれない。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>完璧な答えの中に宿る問い―『言の葉の庭』と『PERFECT DAYS』の間にある疑問と解答</title><link>https://yurenju.blog/ja/posts/2024-12-31_perfect-answers-with-questions/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2024-12-31_perfect-answers-with-questions/</guid><pubDate>Tue, 31 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;Shinjuku Gyo-en.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;724&quot; src=&quot;/_astro/Shinjuku%20Gyo-en.CNPe3EqT_CfwK6.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;今日、Chialinと話していて、なぜ私が『言の葉の庭』以前の新海誠を好きなのか、その理由に思い至った。おそらくあの頃の彼は、とても繊細で、誰もがあまり気に留めないようなことを表現しようとしていたからだ。例えば、幼い頃の心の中にあった、ある種の感情。その時はうまく理解できず、大人になった今でも、ふとした瞬間に思い出すと、あの頃の情景に囚われてしまう。&lt;/p&gt;
&lt;p&gt;『言の葉の庭』の青年は、自分より年上の異性に惹かれ、『秒速5センチメートル』の小学生は、自分の気持ちを理解する前に、好意を抱いた相手と、想像もできないような遠い場所へ引き離され、『雲のむこう、約束の場所』では、約束を交わした後、音信不通のまま、成人を迎える。&lt;/p&gt;
&lt;p&gt;これらのことは、大人になってから振り返れば、微笑みながら青春の思い出として受け止められるかもしれない。けれど、幼い頃の自分にとっては、まったく理解できないことで、心の中の感情や葛藤は、その時の人生における最も衝撃的な記憶だった。&lt;/p&gt;
&lt;p&gt;この数日、記事を整理していて、かつての自分への評価を見つけた。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;今回、ついに決心して、bloggerとmediumに書いた記事をすべて整理した。実際の引っ越しと同じように、このプロセスはいつも雑然として苦痛だが、十数年前に何気なく書いた記事を手に取ると、幼稚な自分が嫌いになると同時に、あんなにも無頓着でいられた彼を羨ましく思う。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;実は、幼い頃の疑問のいくつかは、今でもまだ答えが出ていない。ふと思い出すことがあっても、どんな気持ちで向き合えばいいのかわからない。&lt;/p&gt;
&lt;p&gt;新海誠の初期作品は、幼い頃に刻まれた衝撃と困惑を、数年の歳月を経て沈殿させた後、再び映画を通して伝えているようだ。そして、今もなお困惑している人々は、そんな繊細な心情に惹かれ、心を動かされる。&lt;/p&gt;
&lt;p&gt;一方、『PERFECT DAYS』は、また別の側面の感情を表している。長年の思索を経て、毎日繰り返される日常の洗礼の中で見つけ出した、平凡で単調だけれど、この上なく美しい道。その小道を歩みながら、生活の中の美しいものを再発見していく。時折、過去の記憶を思い出して涙を流すこともあるけれど、また繰り返される日常に戻れば、気持ちを奮い立たせ、日々の生活の中にある美しい部分を見つけ続けることができる。&lt;/p&gt;
&lt;p&gt;新海誠の困惑と、ヴィム・ヴェンダースの確信は、興味深い対比をなしている。前者は幼い頃の感情に囚われ、説明できない状況の中で、細部を超越した情景描写を通して観客を自らが築いた想像の世界へと投影し、その困惑を共有する。一方、ヴェンダースは確固たる答えを示しつつも、同時に自身の困惑も表している。&lt;/p&gt;
&lt;p&gt;疑問であれ答えであれ、それは探求の一つの形だ。彼らはすでに、自分なりの答えの道を十分に歩んできた。私も、自分自身の疑問に答えようとすることが多い。決断を下すたびに、その選択が良いのか悪いのかわからない。&lt;/p&gt;
&lt;p&gt;結局のところ、良い悪いなどないのかもしれない。それはただ、前へ進み続ける道なのだ。疑問と答えの間で、何度も自分を再定義し、丁寧に磨き上げて、自分がなりたい姿へと刻んでいく。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>夢、白日夢、そして宙ぶらりんのこと</title><link>https://yurenju.blog/ja/posts/2024-12-23_dreams-and-daydreams/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2024-12-23_dreams-and-daydreams/</guid><pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;ceiling-tree-shadows.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/ceiling-tree-shadows.o0hHMLl-_ZHbUpu.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;夢は記憶を定着させる過程で生まれる副産物だという説がある。人が深い眠りに落ちると、その日に得た喜怒哀楽のさまざまな体験が脳内で整理され、新しく形成された記憶の一部が長期記憶として収納される。その作業で舞い上がった塵のようなものが、夢になるのだという。&lt;/p&gt;
&lt;p&gt;一方、目覚めている時にぼんやりする瞬間にも、私の思考はふと漂い出すことがある。例えば朝起きて、まだ灯りをつけていない居間に座り、斜めに差し込む陽光がカーテンに映るのを眺めながら、昨日の誰かとの会話で感じたぎこちない感情を思い出す。あるいはコーヒーを淹れて蒸らしを待つ三十秒の間に、コンビニの店員の心遣いをふと思い浮かべる。&lt;/p&gt;
&lt;p&gt;目覚めている時の思考の漂いを、『空間の詩学』では「白日夢」と呼んでいる。この過程で私の思考は整理され、無意識のうちに次はどうすべきかをひそかに決めている。一見ランダムに見えるこの漂いも、よく見れば、言葉にできないけれど心にかかっていることばかりだ。&lt;/p&gt;
&lt;p&gt;夢と白日夢は循環のプロセスだ。夜の夢は脳が記憶を整理することで生まれ、昼の白日夢は価値観を再構築する。その再構築された価値観が、また夜の夢の新しい素材になるのかもしれない。&lt;/p&gt;
&lt;p&gt;こうして何度も自分の記憶を折りたたんで収納していくうちに、自己成就的な解答の書が形作られていく。それは気軽にページをめくれるものではないけれど、未来にさまざまな出来事が起きた時、心はすぐにその出来事にふさわしい感情の反応が書かれたページを開いて、嬉しい時には嬉しく、悲しい時には悲しむことを教えてくれる。&lt;/p&gt;
&lt;p&gt;この書を書き換えるのは容易ではない。けれど、自分自身を繰り返し振り返り、書くことやその他の方法で自分の感情反応や反射的な行動を客観視することで、少しずつ、衝動的な行動や理由のない悲しみを理解できるようになる。自分の肩を優しく叩いて、いいタイミングを見つけて自分自身と和解する。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>2024年 年賀状</title><link>https://yurenju.blog/ja/posts/2024-12-08_new-year-card/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2024-12-08_new-year-card/</guid><pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;New Year card.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;5651&quot; height=&quot;5651&quot; src=&quot;/_astro/New%20Year%20card.5MaLBs7F_Z2vGPIk.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;昨日、友人から年賀状が届いた。年の瀬にこうして手に取ると、今年の出来事がすべて静かに沈殿していくような感覚がある。ページを繰るように振り返りたくなる。でも、もう少し遠くから――一昨年から始めてみよう。&lt;/p&gt;
&lt;p&gt;2022年は、私にとって大きな転換点だった。心身ともに疲れ果てて職場を離れ、そして今年、また職場に戻った。この二年間、自分や友人たちに何度も問いかけてきた。彼らは何を「好き」なのか、と。その「何か」は様々だ。仕事かもしれないし、住む空間かもしれない。絵を描くような趣味かもしれないし、子どもへの献身かもしれない。&lt;/p&gt;
&lt;p&gt;それは、自分の心の迷いを映し出していた。私は本当に何が好きで、何を求めているのだろう。仕事から始まり、様々な趣味や得意な技術まで――得意なことが必ずしも好きなこととは限らず、その逆もまた然り。そして好きなことが、長く続けられることとも限らない。好きなこと、得意なこと、長く続けられること。この組み合わせはいつも人を惑わせる。&lt;/p&gt;
&lt;p&gt;この数年、最も多くしてきたことは、探索することと、人生の目標を設定して達成することだった。その一つが、熊野古道を歩くことだった。この古道には五年前にも訪れたことがある。けれど二日目に道に迷い、結局は民宿の主人の車で終点まで送ってもらうことになった。以来、それは心に残る悔いとなっていた。&lt;/p&gt;
&lt;p&gt;そして2023年、また友人たちと熊野古道を訪れた。季節の終わりに桜を追いかけながら、前回果たせなかったことを共に体験した。大雨の中で私を受け入れてくれたカフェの主人を訪ね、民宿で飼われているペットの羊と写真を撮り、道中では民宿の主人が用意してくれたお弁当を楽しんだ。&lt;/p&gt;
&lt;p&gt;熊野本宮大社に辿り着いたとき、感動で涙があふれるだろうと思っていた。でも、そうはならなかった。人生の達成リストに一つチェックを入れた瞬間、そこにあったのは淡々としながらも長く漂う複雑な感情だった。喜びの中に、少しの迷いが混じっている。でも、志を同じくする友人たちと一緒にこれを成し遂げられたことは本当に幸せだった。もし一緒に熊野本宮大社に辿り着いていなければ、この複雑に織りなす感情を一生味わうことはなかっただろう。&lt;/p&gt;
&lt;p&gt;この数年の様々な試みを通して、少しずつ自分が何者なのか分かってきた気がする。まるで小説を読み進めるように。ただ、その小説の主人公もまだ道の途中にいる。いくつかの謎が解けても、結末はまだ見えない。神倉書斎での滞在体験のように。旅行も、ボルダリングも、頭城の甘露咖啡でのとりとめのない話題も、私にとってはすべて自己探求なのだ。&lt;/p&gt;
&lt;p&gt;2024年も終わろうとしている今、もう一度自分に問いかけてみる。私は一体どんな人間で、何が好きなのか。まだ簡単な答えは出せない。でも、二年前よりは確実に自分のことが分かってきた。&lt;/p&gt;
&lt;p&gt;この年賀状を受け取ったとき、本当に心が温かくなった。友人のことも、とても嬉しく思った。彼にはもう一つの計画があることを知っている――自分でデザインしたTシャツを作ることだ。このデザインされた年賀状と、自分の興味を融合させた創作を見ていると思う。私たちは皆、自己を探す道の途上にいるのだと。その自己の輪郭はいつもぼんやりしている。けれど創造と実践を重ねる中で、私たちは少しずつ理想の輪郭に近づいていく。自分の体験に従って未来の輪郭を変えていくのか、それとも今の自分を変えて理想の輪郭に合わせていくのか。&lt;/p&gt;
&lt;p&gt;そして、2025年という新しい章が始まろうとしている。次のページはまだ白紙のままだ。心の中に大まかな筋書きがあるかもしれないし、ないかもしれない。でもそれは、新しい旅を始めることの妨げにはならない。旅の途中、私たちは驚天動地の波に遭遇するかもしれないし、ただ道端の淡い青の花草を穏やかに眺めるだけかもしれない。&lt;/p&gt;
&lt;p&gt;どちらにせよ、世界のどこかの街や村で再会したとき、また互いの物語を分かち合おう。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>尾道、カフェと花火大会</title><link>https://yurenju.blog/ja/posts/2024-08-04_onomichi-fireworks-and-cafe/</link><guid isPermaLink="true">https://yurenju.blog/ja/posts/2024-08-04_onomichi-fireworks-and-cafe/</guid><pubDate>Sun, 04 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;カバー写真&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/cover_onomichi-cafe-fireworks.CtCXoKLQ_a33NP.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;「30分前にあなたがカフェの前を通るのを見ましたよ」と、カフェのオーナーがカウンターを拭きながら笑顔で私に言った。&lt;/p&gt;
&lt;p&gt;この言葉を聞く前の私は、前週まで岡山のコワーキングスペースで仕事をし、金曜日になってようやく電車で尾道へ、旅の中の小旅行をしに来たばかりだった。猛暑の昼時にレストランを探していた時、このカフェの前を通りかかり、いいカフェの香りを感じ取った。そして当然のように昼食を済ませた後、このカフェを訪れることにした。&lt;/p&gt;
&lt;p&gt;大きな木製のガラス戸を引けば、小さくて洗練されたカフェの中に入れる。中には肩を寄せ合うような4つの席がある。入り口には、純白のパッケージに異なる色で産地を示したコーヒー豆が整然と並び、最も控えめな方法で店を彩っている。中に座っていると、不思議な感覚に包まれる。大きな窓から差し込む開放感が、4席とカウンターだけという狭さを打ち消している。しかし肩を並べ、向かい合うこの席の配置は、まるで「一席 / Alone Together」のように、対話もこのカフェを構成する重要な要素となっているのだ。&lt;/p&gt;
&lt;p&gt;オーナーは英語がかなり上手で、隣の客も常連のようだった。オーナーが紹介してくれたところによると、この客は尾道で生ビールを売っている別のオーナーで、明日の花火大会の夜、二人でカフェの前で生ビールと食事を販売するという。日本語を数単語しか理解できない私には彼らの会話がよく分からず、ほとんどをカフェのオーナーが通訳してくれた。しかし、親しげに話す二人の雰囲気から、彼らが仲の良い友人だということが伝わってくる。お互いの店を訪れ合い、必要な時には助け合う、そんな関係性がとても興味深く感じられた。傍らで空中に漂う数少ない理解できる日本語(花火のHanabiなど)を必死に拾おうとする私も、まるで地元の賑やかな祭りの準備に参加しているような気分になった。&lt;/p&gt;
&lt;p&gt;花火大会は、夏に日本を訪れれば必ず出会う華やかな光景だ。肩がぶつかり合うほどの混雑は私の好みではないが、熱気に満ちた屋台と浴衣姿の人々が作り出す夏の風情は、やはり体験する価値がある。それも私が再び尾道を訪れた理由の一つだった。ただ明日は、ロープウェイで山の上の千光寺へ行って花火を見るつもりだった。この海沿いのカフェからは少し距離があり、その時にまた生ビールを買いに来られるかどうか分からない。とにかく短い雑談の後、私は店を出た。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ロープウェイ&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/cable-car.gLSKoGZL_Z4A23K.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;「また明日来ます」と、去り際にオーナーに告げた。旅行中に自分に合うカフェを見つけるのは難しい。たまにこうしたカフェに出会えた時、それは砂漠でオアシスを見つけたような貴重さがある。&lt;/p&gt;
&lt;p&gt;私にとって日本は、親しみやすさと同時に、どこか隔たりのある場所だ。至れり尽くせりのサービスに温かさと親しみを感じる一方で、社会のさまざまな面から、人と人との間には少し距離があることも感じられる。日本語を学び始めたばかりの私には、なおさらそうだ。一人旅は、そうした感覚をさらに増幅させる。言葉と人間関係の隔たりは、旅の孤独の中で、まるで自分の境界線を探しているかのようだ。&lt;/p&gt;
&lt;p&gt;寂しく聞こえるかもしれないが、実は私はこの感覚を楽しんでいる。しかし旅の途中でこうした隔たりを破ってくれるカフェに出会えると、やはり嬉しくなる。一人旅の中で、ふと現れるちょうどいい距離感のつながりが好きなのだ。&lt;/p&gt;
&lt;p&gt;翌日、朝の気温がまだ心地よく散歩に適している時間帯に、私は再び同じカフェへコーヒーを買いに向かった。&lt;/p&gt;
&lt;p&gt;「お話ししてもいいですか?」と隣の客が簡単な英語で尋ねてきた。彼は救急救命医だった。今日は休日で、大阪で花火を見てから尾道に戻ってきたばかりだという。大阪の花火大会は人がとても多くて、尾道も同じくらい混雑するだろうと教えてくれた。朝、私と同じようにカフェに立ち寄り、水筒いっぱいのエネルギー(コーヒー)を持って義父の診療所を手伝いに行くのだという。私たちは同じだった。一杯の美味しいコーヒーで一日を始めたかったのだ。&lt;/p&gt;
&lt;p&gt;このカフェは地元の人々の交流の場のようで、私のような旅行者だけでなく、常連客が次々と訪れる。旅の途中でさまざまな人々に出会い、同じ時空間で日常の小さな出来事を分かち合える、そんな瞬間が私は好きだ。&lt;/p&gt;
&lt;p&gt;医師が去った後、オーナーは彼が英語を勉強していて、英語で会話する機会を積極的に探しているのだと教えてくれた。私も数週間前に日本語を学び始めたばかりで、新しい言語を学ぶ難しさは本当によく分かると話した。オーナーには気軽に雑談できる雰囲気があり、気がつけば私たちは言語学習から人生における「失敗」の重要性まで話が及んでいた。私はさまざまなスタートアップでの仕事経験について触れ、彼も以前コーヒー焙煎事業を営んでいたことなどを話してくれた。英語でこれほど深い話題について話せることに驚いた。そしてこうした交流を通じて、普通の旅行者から、尾道という場所や地元の人々とより深いつながりを徐々に築いていけることを感じた。&lt;/p&gt;
&lt;p&gt;カフェを出る前、オーナーは堤防沿いのカフェ近くに花火が見える席を何席か確保しているので、もし山の上の千光寺で適切な場所が見つからなければ、その席で花火を見てもいいと言ってくれた。少し感動した。彼にとって私はまだ2回しか会ったことのない客に過ぎないのに、席を取っておいてくれるなんて。そして私も、地元の人々とこうしたつながりを築ける機会をとても大切に思った。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;商店街の祭り会場&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/festival.CTsmeXts_18rRcU.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;その夜、台北101の年越し花火に匹敵するほどの人混みの中、遠くから餃子を準備しているカフェのオーナーと、昨日会った生ビールのオーナーの姿が見えた。手を振った。&lt;/p&gt;
&lt;p&gt;今回の旅で私に寄り添ってくれた一冊の本『入境大廳(到着ロビー)』の中で、著者は故郷について非常に的確な表現をしている。故郷とは何重ものセーフティネットがあり、どんな困難からもあなたを受け止めてくれる場所だという。一方、異郷にいる人は小さな問題に遭遇しただけでも、それを解決するために莫大なエネルギーを費やさなければならない。&lt;/p&gt;
&lt;p&gt;尾道は私の故郷ではなく、当然ながら親しみのあるセーフティネットがあるわけではない。しかし今回、尾道の花火大会に参加してから、地元の人々とのつながりは、確かにこの場所への感じ方を少しずつ変えていった。&lt;/p&gt;
&lt;p&gt;花火大会で餃子を売るカフェのオーナー、昨日出会った生ビールを売るカフェの常連、大阪から戻って診療所へ急ぐ救急医。こうした人々との会話や交流を通じて、自分も徐々にこの場所に溶け込み、尾道とそこで生きる人々が作り出す奥行きを感じられるようになった。&lt;/p&gt;
&lt;p&gt;そして花火が真夏の尾道の夜空に咲く時、すべての人が思わず口を開けて、あちこちから驚嘆の声を上げる。同じ時間と空間の中で、私たちが同じ華やかさを共有している時、旅の中でのこうしたつながりを通じて、私も尾道との間に自分なりの親しみを得たのだ。&lt;/p&gt;
&lt;p&gt;まるで宇宙を一人で旅している時、偶然別の宇宙船に出会い、お互いの軌道が最も近づいた瞬間、丸い窓越しに、相手もガラスに顔を押し付けて嬉しそうに手を振っているのが見えるような。&lt;/p&gt;
&lt;p&gt;こんにちは、ありがとう、またね。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;咲き誇る花火&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/fireworks.Kyza1ie4_Z2up4Bi.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>生活</category></item></channel></rss>