<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.farend.co.jp/">
  <id>https://www.farend.co.jp/</id>
  <title>ファーエンドテクノロジー株式会社 コーポレートブログ</title>
  <updated>2026-04-08T00:00:00Z</updated>
  <link rel="alternate" href="https://www.farend.co.jp/" type="text/html"/>
  <link rel="self" href="https://www.farend.co.jp/blog/atom.xml" type="application/atom+xml"/>
  <author>
    <name>FAR END Technologies Corporation</name>
    <uri>https://www.farend.co.jp/</uri>
  </author>
  <entry>
    <id>tag:www.farend.co.jp,2026-04-08:/blog/2026/04/poker-logic-and-probability/</id>
    <title type="html">コードから学ぶ意思決定：ポーカーで考える確率の話</title>
    <published>2026-04-08T00:00:00Z</published>
    <updated>2026-04-08T00:00:00Z</updated>
    <link rel="alternate" href="https://www.farend.co.jp/blog/2026/04/poker-logic-and-probability/" type="text/html"/>
    <content type="html">&lt;div class="tldr-box"&gt;
  &lt;ul&gt;
    &lt;li&gt;ポーカーの勝率はシミュレーションなどで計算され、それをもとに意思決定が行われている&lt;/li&gt;
    &lt;li&gt;判断は「今勝てるか」ではなく「長期的に得か」で考えられる&lt;/li&gt;
    &lt;li&gt;コードを通じて、“運”の中にもロジックがあることに気づいた&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;div class='ad_myredmine_square'&gt;
  &lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f0e99ebf"&gt;
    &lt;img srcset="/images/service/myredmine-add2@2x.png 2x" alt="My Redmine"&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;div style="float: left; margin: 0 0.5em 0 0;"&gt;&lt;img src="https://www.gravatar.com/avatar/c2ecd28c49b42ee59d534cea6e74beb0?s=112px&amp;d=mm" style="width: 56px; border-radius: 50%;"&gt;&lt;/div&gt;

&lt;p&gt;呂です。2年前から、友人に教えてもらったのをきっかけに、ポーカーを遊ぶようになりました。&lt;/p&gt;

&lt;p&gt;ポーカーは、プレイヤー同士でチップを賭けながら、より強い手を作るか、相手を降ろすことで勝敗を決めるゲームです。カード運の要素もありますが、ベットやフォールドといった判断によって結果が大きく変わるのが特徴です。最近では、日本でも競技としてのポーカーを目にする機会が増えてきたように感じます。&lt;/p&gt;

&lt;p&gt;参考：&lt;a href="https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%82%AB%E3%83%BC"&gt;https://ja.wikipedia.org/wiki/ポーカー&lt;/a&gt;&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="poker@2x.png 2x" alt=""&gt;
&lt;/div&gt;

&lt;p&gt;最初はボードゲームの延長のような感覚で、あまり深く考えずに遊んでいました。ただ、プレイを重ねるうちに、思っていた以上に“考えること”が多いゲームだと感じるようになりました。&lt;/p&gt;

&lt;p&gt;そこで気になったのが、「この判断はどう決まっているのか？」という点です。ポーカーでは、フォールド・コール・ベットといった選択を常に求められます。こうした判断の中でよく出てくるのが「equity（勝率）」という概念です。ただ、ここで一つ疑問が出てきました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;この“勝率”って、どうやって計算されているのか？&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;

&lt;p&gt;本記事ではポーカーそのものの面白さを紹介するというよりも、練習アプリのコードをきっかけに、「意思決定の仕組み」や「確率の考え方」について整理してみたいと思います。&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;1. コードの中の「勝率」&lt;/h2&gt;

&lt;p&gt;例えば、PyPokerEngine のサンプルコードでは、次のように勝率が使われています。PyPokerEngineはPythonで手軽にポーカーAIを組めるライブラリです。&lt;/p&gt;

&lt;pre style="background-color: #272822; color: #f8f8f2; padding: 1em; overflow-x: auto; border-radius: 5px; font-family: 'Source Code Pro', 'Consolas', 'Monaco', 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 0.95em; line-height: 1.4;"&gt;&lt;code&gt;&lt;span style="color: #75715e;"&gt;# examples/players/honest_player.py&lt;/span&gt;

win_rate &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;estimate_hole_card_win_rate&lt;/span&gt;(
    nb_simulation&lt;span style="color: #f92672;"&gt;=&lt;/span&gt;&lt;span style="color: #ae81ff;"&gt;1000&lt;/span&gt;,
    nb_player&lt;span style="color: #f92672;"&gt;=&lt;/span&gt;&lt;span style="color: #66d9ef;"&gt;self&lt;/span&gt;.nb_player,
    hole_card&lt;span style="color: #f92672;"&gt;=&lt;/span&gt;&lt;span style="color: #a6e22e;"&gt;gen_cards&lt;/span&gt;(hole_card),
    community_card&lt;span style="color: #f92672;"&gt;=&lt;/span&gt;&lt;span style="color: #a6e22e;"&gt;gen_cards&lt;/span&gt;(community_card)
)

&lt;span style="color: #f92672;"&gt;if&lt;/span&gt; win_rate &lt;span style="color: #f92672;"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;1.0&lt;/span&gt; &lt;span style="color: #f92672;"&gt;/&lt;/span&gt; &lt;span style="color: #66d9ef;"&gt;self&lt;/span&gt;.nb_player:
    action &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; valid_actions[&lt;span style="color: #ae81ff;"&gt;1&lt;/span&gt;]  &lt;span style="color: #75715e;"&gt;# call&lt;/span&gt;
&lt;span style="color: #f92672;"&gt;else&lt;/span&gt;:
    action &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; valid_actions[&lt;span style="color: #ae81ff;"&gt;0&lt;/span&gt;]  &lt;span style="color: #75715e;"&gt;# fold&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;出典： &lt;a href="https://github.com/ishikota/PyPokerEngine"&gt;https://github.com/ishikota/PyPokerEngine&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このコードでは、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;まず勝率（win_rate）を計算する&lt;br&gt;&lt;/li&gt;
&lt;li&gt;その値が「平均的な勝率（1 / プレイヤー数）」以上かどうかで判断する&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という、とてもシンプルなロジックになっています。つまり、&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;勝率を求めて、それを基準に行動を決めている&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;という構造が、そのままコードとして表現されています。&lt;/p&gt;

&lt;h2&gt;2. 勝率はどうやって計算されているのか&lt;/h2&gt;

&lt;p&gt;では、この &lt;code&gt;win_rate&lt;/code&gt; はどのように求められているのでしょうか。コードを追っていくと、意外なことが分かります。
この勝率は、数式で一発計算されているわけではありません。代わりにやっているのは、かなりシンプルな処理です。&lt;/p&gt;

&lt;h3&gt;やっていること&lt;/h3&gt;

&lt;ol&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;/li&gt;
&lt;/ol&gt;

&lt;p&gt;つまり、&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;「もしこの状況を何回も繰り返したら、どれくらい勝つか？」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;を実際に試している、ということです。&lt;/p&gt;

&lt;h2&gt;3. カードの枚数ベースで考える&lt;/h2&gt;

&lt;p&gt;例えば：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自分の手札：2枚&lt;br&gt;&lt;/li&gt;
&lt;li&gt;フロップ：3枚&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;この時点で、すでに5枚のカードが見えています。トランプは全部で52枚なので、残りの未知カードは52 - 5 = 47枚です。&lt;/p&gt;

&lt;p&gt;この47枚の中から、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ターン&lt;br&gt;&lt;/li&gt;
&lt;li&gt;リバー&lt;br&gt;&lt;/li&gt;
&lt;li&gt;相手の手札&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;が決まります。&lt;/p&gt;

&lt;p&gt;本来であれば、この47枚から考えられるすべての組み合わせを列挙すれば、完全な勝率を計算することができます。&lt;/p&gt;

&lt;h2&gt;4. でも、全部は計算しない&lt;/h2&gt;

&lt;p&gt;ただし、組み合わせは非常に多くなります。そのため、PyPokerEngine では次のような方法を取っています。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;すべてを計算するのではなく、ランダムに何度も試す&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;これが「モンテカルロ法」と呼ばれる方法です。&lt;/p&gt;

&lt;p&gt;例えば：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1000回シミュレーションする&lt;br&gt;&lt;/li&gt;
&lt;li&gt;そのうち600回勝つ&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;この場合、&lt;/p&gt;

&lt;p&gt;勝率 ≒ 600 / 1000 = 0.6&lt;/p&gt;

&lt;p&gt;となります。&lt;/p&gt;

&lt;p&gt;調べてみると、勝率の計算は必ずしもランダムなシミュレーションだけで行われているわけではなく、残りのカードのすべての組み合わせを列挙して、正確に求める方法もあるようでした。実際に PokerStove のようなツールでは、こうした組み合わせベースの計算によって、高い精度で勝率を算出できるとのことです。PokerStoveは数学的なアプローチで、膨大な組み合わせの中から正確な勝率（Equity）を導き出すためのツールです。&lt;/p&gt;

&lt;p&gt;出典：&lt;a href="https://github.com/andrewprock/pokerstove"&gt;https://github.com/andrewprock/pokerstove&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ただし、この方法は計算量が非常に大きくなるため、状況によっては現実的ではありません。そのため、PokerStove を含む一部のツールでは、全探索ではなくモンテカルロ法による近似計算を選択できる場合もあるようです。&lt;/p&gt;

&lt;h2&gt;5. equityと意思決定、そしてAIへ&lt;/h2&gt;

&lt;p&gt;ここまでを見ると、equityの正体はかなりシンプルです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;「今の情報を固定して、未来をランダムに埋めたときの勝率」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;です。&lt;/p&gt;

&lt;p&gt;この勝率は、それ自体がゴールではなく、あくまで「意思決定の材料」として使われます。例えば、次のような形です。&lt;/p&gt;

&lt;pre style="background-color: #272822; color: #f8f8f2; padding: 1em; overflow-x: auto; border-radius: 5px; font-family: 'Source Code Pro', 'Consolas', 'Monaco', 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 0.95em; line-height: 1.4;"&gt;&lt;code&gt;&lt;span style="color: #f92672;"&gt;if&lt;/span&gt; equity &lt;span style="color: #f92672;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;0.6&lt;/span&gt;:
    &lt;span style="color: #66d9ef;"&gt;raise&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;→ 勝率が60%以上なら強く出る&lt;/p&gt;

&lt;pre style="background-color: #272822; color: #f8f8f2; padding: 1em; overflow-x: auto; border-radius: 5px; font-family: 'Source Code Pro', 'Consolas', 'Monaco', 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 0.95em; line-height: 1.4;"&gt;&lt;code&gt;&lt;span style="color: #f92672;"&gt;if&lt;/span&gt; EV &lt;span style="color: #f92672;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;0&lt;/span&gt;:
    call&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;→ 長期的に得ならコールする&lt;/p&gt;

&lt;p&gt;ここで重要なのは、「今勝てるか」ではなく「繰り返したときに得か」で判断している点です。つまり、1回の結果ではなく、同じ状況を何度も繰り返したときにどうなるか、という視点で行動が決まっています。勝率（equity）はそのための入力値であり、最終的な判断は期待値（EV）という形で整理されます。&lt;/p&gt;

&lt;p&gt;最近では、AIを使った高度な戦略が一般的になっていますが、コードを見て感じたのは、その出発点は非常にシンプルだということでした。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;勝率を求める&lt;/li&gt;
&lt;li&gt;条件で分岐する&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;この基本構造は、人間が考えるときのロジックとも大きくは変わりません。AIはこの仕組みをより大量のデータと計算によって繰り返し、精度を高め、戦略として最適化していったものとも言えます。つまり、複雑に見えるAIの判断も、その根底には「確率をもとに意思決定する」というシンプルな構造がある、ということが見えてきます。&lt;/p&gt;

&lt;h2&gt;6. コードから学ぶということ&lt;/h2&gt;

&lt;p&gt;正直に言うと、私はまだポーカーに慣れているわけではありません。何を基準に判断すればいいのか、はっきりとした軸を持てているとも言えません。そんな中で見つけたのが、「コードから考える」という方法でした。ポーカーのロジックをコードで見ていくと、そこには感覚ではなく、確率や条件として整理された判断の仕組みがあります。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;少し個人的な話になりますが、私は文系出身です。数学がまったく苦手というわけではなく、関数や図形はむしろ好きな方でした。ただ一つ、どうしても苦手意識があったのが「確率」です。どこか曖昧で、つかみどころがなく、ポーカーも「運のゲーム」として距離を置いていました。&lt;/p&gt;

&lt;p&gt;ですが、コードとしてロジックを見るようになってから、その裏にある考え方が少しずつ見えるようになってきました。まだ完全に理解できたわけではありませんが、少なくとも「運」で片付けていたものの中に、考える余地があることには気づけた気がします。ポーカーは、直感だけでも、理論だけでも成立しないゲームです。だからこそ、まずはロジックから考えてみる。そして少しずつ、自分なりの判断を積み重ねていく。そのプロセス自体が、このゲームの面白さなのかもしれません。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto;"&gt;
&lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f4a89f0f"&gt;&lt;img srcset="/images/service/myredmine-add@2x.png 2x" alt="My Redmine"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;【スタッフ募集中】&lt;/strong&gt;&lt;br&gt;
「My Redmine」など弊社提供サービスのお問い合わせ対応を担当するカスタマーサポートスタッフを募集しています。&lt;br&gt;
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。&lt;a href="/recruit/"&gt;採用情報の詳細&lt;/a&gt; &lt;/p&gt;

&lt;hr&gt;

&lt;div style="margin-top: 2em;"&gt;
  &lt;span style="font-weight: bold; color: #f15a5a;"&gt;こちらの記事もオススメです！&lt;/span&gt;&lt;span style="color: #555;"&gt;&lt;/span&gt;
  &lt;table class="table table-condensed"&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/04/database-specialist-pass/"&gt;&lt;img src="/blog/2026/04/database-specialist-pass/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/04/database-specialist-pass/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/d80534c2d855441c53f16a3e24a8c39e?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt;  データベーススペシャリスト試験 合格と学習の振り返り&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;令和7年度秋期のデータベーススペシャリスト試験に合格し、過去問題を通じて自分の理解の曖昧さや苦手分野を可視化できました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/textbringer-plugin-dev-with-ai/"&gt;&lt;img src="/blog/2026/03/textbringer-plugin-dev-with-ai/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/textbringer-plugin-dev-with-ai/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/6f6cfc64c61460a6ce7190fdbfc3e66a?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt;  AIを活用してテキストエディタ「Textbringer」のプラグインを作った話&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;テキストエディタ「Textbringer」の機能を拡張するプラグインをClaude Codeで作りました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/redmine-list-id-gmail/"&gt;&lt;img src="/blog/2026/03/redmine-list-id-gmail/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/redmine-list-id-gmail/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/f8eafcecfdf9620cfe2729da0b9e2291?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineの通知メールをプロジェクトごとに自動で振り分ける（Gmail）&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Redmine 6.0では通知メールの「List-Id」ヘッダにプロジェクト識別子が含まれるようになりました。Gmailで通知メールをプロジェクトごとに自動振り分けする方法を紹介します。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;img src="/blog/2026/03/genuary/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/3cfda2b47a60ad184b9bd5b2bd7bfca9?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; p5.rbでGenuary 2026に参加してみた&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Genuary 2026をきっかけに、p5.rbで初めてジェネラティブアート制作に挑戦しました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;img src="/blog/2026/03/osc2026-osaka-tokyo-spring/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/c2ecd28c49b42ee59d534cea6e74beb0?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineで働き方を再定義 -OSC2026 Osaka &amp; Tokyo/Spring 出展を通して考えたこと-&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;OSC2026 OsakaとTokyo/Spring の出展を通して、Redmineの運用がうまくいくチームとそうでないチームの違いについて改めて考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
  &lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>tag:www.farend.co.jp,2026-04-02:/blog/2026/04/database-specialist-pass/</id>
    <title type="html"> データベーススペシャリスト試験 合格と学習の振り返り</title>
    <published>2026-04-02T00:00:00Z</published>
    <updated>2026-04-02T00:00:00Z</updated>
    <link rel="alternate" href="https://www.farend.co.jp/blog/2026/04/database-specialist-pass/" type="text/html"/>
    <content type="html">&lt;div class="tldr-box"&gt;
  &lt;ul&gt;
    &lt;li&gt;令和7年度秋期のデータベーススペシャリスト試験に合格し、過去問題を通じて自分の理解の曖昧さや苦手分野を可視化できました&lt;/li&gt;
    &lt;li&gt;実際に使った教材、学習を継続する工夫、本番での問題選択と振り返りまで、再現しやすい形でまとめています&lt;/li&gt;
    &lt;li&gt;学習では、まず午後Iを通過することを重視し、問題選択の基準づくりを進めました&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;div class='ad_myredmine_square'&gt;
  &lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f0e99ebf"&gt;
    &lt;img srcset="/images/service/myredmine-add2@2x.png 2x" alt="My Redmine"&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;div style="float: left; margin: 0 0.5em 0 0;"&gt;&lt;img src="https://www.gravatar.com/avatar/d80534c2d855441c53f16a3e24a8c39e?s=112px&amp;d=mm" style="width: 56px; border-radius: 50%;"&gt;&lt;/div&gt;

&lt;p&gt;前田 稔です。令和7年度秋期の &lt;a href="https://www.ipa.go.jp/shiken/kubun/db.html"&gt;データベーススペシャリスト試験&lt;/a&gt; に合格しました。この記事では、受験した背景、学習方針、実際に取り組んだこと、使った教材を振り返ります。&lt;/p&gt;

&lt;p&gt;IPAによると、データベーススペシャリスト試験は、データ資源管理やデータベース基盤の企画・要件定義・開発・運用・保守で中心的な役割を担う人を主な対象としています。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="image@2x.png 2x" style="border: 1px solid #ccc;"&gt;
&lt;/div&gt;

&lt;h2&gt;受験した背景&lt;/h2&gt;

&lt;p&gt;受験のきっかけは二つありました。一つは、社内でIPA試験に取り組んでいる方々がいらしたので、その姿勢に刺激を受けたことです。もう一つは、受験者層です。受験を考え始めた頃に見ていた &lt;a href="https://www.ipa.go.jp/shiken/reports/toukei.html"&gt;IPAの統計情報&lt;/a&gt; では、令和6年度秋期のデータベーススペシャリスト試験の受験者平均年齢は35.3歳でした。自分の年代と近く、受験を考えるきっかけになりました。&lt;/p&gt;

&lt;h2&gt;受験してよかったこと&lt;/h2&gt;

&lt;p&gt;今回の受験でよかったのは、自分の理解を見直す機会になったことです。学習を通じて、知っていること、理解していること、人に説明できることは、それぞれ別だと改めて感じました。過去問題では、用語を知っているだけでは対応しにくく、問われている内容の関係や前提条件を踏まえて説明できるかが問われます。そのため、自分の理解が曖昧な部分がはっきりし、苦手分野を整理して学び直すことができました。&lt;/p&gt;

&lt;p&gt;また、過去問題の事例には、概念データモデリング、業務要件の整理、設計判断など、実務にもつながる観点が多くありました。その点でも、学習そのものに意味があったと感じています。&lt;/p&gt;

&lt;h2&gt;学習方針&lt;/h2&gt;

&lt;p&gt;学習期間は約3ヶ月で、主に過去問題を中心に取り組みました。学習方針としては、まず午後Iを安定して通過できる状態を作ることを重視しました。そのために&lt;a href="https://warp.ndl.go.jp/web/20250114115748/https://www.ipa.go.jp/shiken/reports/seiseki_bunpu.html"&gt;IPAの統計情報(リンク先は国立国会図書館のアーカイブ)&lt;/a&gt;を活用しました。&lt;/p&gt;

&lt;p&gt;令和6年度秋期のデータベーススペシャリスト試験は、受験者10,120名、合格者1,744名で、合格率は17.2%です。午後I試験通過者（得点が60点以上）は3,247名なので、令和6年度秋期では、午後I通過者のうち最終合格者の割合は約54%でした。こうした数字を踏まえると、まず午後Iを通過できる状態を作ることが、自分にとって現実的な目標だと考えました。&lt;/p&gt;

&lt;p&gt;午後Iでは、知識そのものだけでなく、制限時間の中で問題を選び、何が問われているかを見極め、問いの構造や関係性を整理したうえで解答する力が重要だと考えていました。そのため、単に知識を増やすのではなく、午後Iで問われる内容に答えられる状態を作ることを意識しました。&lt;/p&gt;

&lt;h2&gt;実際の学習内容&lt;/h2&gt;

&lt;h3&gt;午前I対策&lt;/h3&gt;

&lt;p&gt;午前Iは、応用情報技術者試験の範囲を広く浅く押さえる方針で進めました。&lt;/p&gt;

&lt;p&gt;学習には主に &lt;a href="https://www.ap-siken.com/apkakomon.php"&gt;応用情報技術者試験の過去問道場&lt;/a&gt; を使いました。問題を解き、解説を読み、疑問があれば検索したりAIに確認したりして理解を補っていました。高得点を狙うというより、まず確実に通過することを優先していました。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="kakomon@2x.png 2x" style="border: 1px solid #ccc;"&gt;
&lt;/div&gt;

&lt;p&gt;私の場合は、主に昼休みなどのスキマ時間に取り組んでいました。出題範囲が広いため、本来はもう少し時間をかけてもよかったと思っています。計算問題は最後まで苦手意識がありましたが、少なくとも解き方を思い出せる程度には、過去問題を繰り返しておいた方がよいと感じました。&lt;/p&gt;

&lt;h3&gt;午前II対策&lt;/h3&gt;

&lt;p&gt;午前II対策では、後述する『情報処理教科書 データベーススペシャリスト』の購入者特典を活用しました。午前IIの過去問題が重複を除いた形で整理されており、書籍の流れに沿って取り組みやすかったためです。&lt;/p&gt;

&lt;h3&gt;午後I・午後II対策&lt;/h3&gt;

&lt;p&gt;午後I・午後IIは、基本的に過去問題を中心に学習しました。&lt;/p&gt;

&lt;p&gt;過去問題を解くと、自分の苦手分野と出題傾向が見えてきます。そのため、本番でどの問題を選ぶかの基準も作りやすくなりました。&lt;/p&gt;

&lt;p&gt;たとえば、データベースの物理設計は、問われ方や計算の型が比較的はっきりしていて、対策しやすい分野だと感じました。一方で、概念データモデリングや業務要件の読解は、知識だけでなく整理力や判断力も必要で、重点的に練習する必要があると考えました。&lt;/p&gt;

&lt;p&gt;また、午後Iは、午後IIで求められる考え方を、より限定された条件の中で問う問題だと感じていました。午後IIに比べると、必要な情報を整理しやすく、基礎知識や典型的な考え方で対応しやすい印象でした。&lt;/p&gt;

&lt;h3&gt;学習を続けるために工夫したこと&lt;/h3&gt;

&lt;p&gt;学習では、一度に長時間進めるより、日常の中で続けやすい形を作ることを重視しました。&lt;/p&gt;

&lt;p&gt;たとえば、ブラウザ起動時に過去問道場を開くようにして、すぐ問題に触れられる状態を作っていました。また、1日に午前問題を1問だけ解く日があってもよいと割り切り、少しでも続けることを優先していました。
また、当社が毎月開催している &lt;a href="/news/oreilly-mokumoku/"&gt;オライリー本の全冊公開日やもくもく勉強会&lt;/a&gt; のような場も、学習ペースを保つうえで役立ちました。&lt;/p&gt;

&lt;h2&gt;受験前に整理していた方針&lt;/h2&gt;

&lt;p&gt;受験前には、本番での問題選択や読み方、解答の進め方についても、自分なりの方針を整理していました。&lt;/p&gt;

&lt;p&gt;問題選択では、知識の有無だけでなく、自分が読み違えやすいタイプの問題を避けることも意識していました。たとえば、「出庫」や「出荷」のように似た用語が複数出てくる問題は、午後の時間帯には疲れもあり、前提条件の見落としや候補キーの洗い出しでミスが出やすいと考えていました。そのため、こうした問題は意識して避ける対象にしていました。加えて、業務知識が十分でない分野の問題（定期発注・定量発注など）も避けるようにしていました。&lt;/p&gt;

&lt;p&gt;問題文は、まず見出しで全体の構造を見て、次に設問を読み問われていることを確認し、表や図を確認して、文章以外の情報を取得してから本文に入る、という順序を意識していました。解答するときは、まず根拠になる記述や表を探し、必要な情報を先に押さえるようにしていました。時間が厳しいときも空欄を減らせるように意識し、部分点を意識して書けることは書く方針にしていました。&lt;/p&gt;

&lt;h2&gt;試験当日を振り返って&lt;/h2&gt;

&lt;h3&gt;午前I&lt;/h3&gt;

&lt;p&gt;試験当日は、午前Iを解き終えた時点では、手応えはあまりよくありませんでした。&lt;/p&gt;

&lt;p&gt;結果は気になりましたが、そこで気持ちを切らさず、まずは全ての試験を受け切ることを優先しました。実際、午前Iは64.60点でかなりぎりぎりだったため、もう少し復習しておけば不安は減ったと思います。&lt;/p&gt;

&lt;h3&gt;午前II&lt;/h3&gt;

&lt;p&gt;一方で、午前IIは88.00点、午後Iは83点で、重点的に取り組んだ領域は得点につながったと感じています。&lt;/p&gt;

&lt;p&gt;午後Iは、もともと制限時間が厳しいと考えていましたが、本番では集中して取り組むことができました。過去問題を通じて身につけた問題選択の基準や、問われている内容を整理する感覚が機能したと思います。&lt;/p&gt;

&lt;h3&gt;午後I&lt;/h3&gt;

&lt;p&gt;午後Iは問1〜3から2問選択して解答します。&lt;/p&gt;

&lt;p&gt;午後Iでは、問2と問3を選択しました。問2は、化学メーカーの販売営業システムを題材に、関数従属性や正規化理論を用いたデータモデル分析、業務要件に基づくデータベース設計を問う問題でした。問3は、オフィスじゅう器メーカーの在庫管理システムを題材に、SQLの設計やトランザクションの排他制御を問う問題でした。2問とも基礎的な内容をもとに解答しやすいと判断して選びました。結果として、この問題選択は得点につながったと考えています。&lt;/p&gt;

&lt;h3&gt;午後II&lt;/h3&gt;

&lt;p&gt;午後IIは問1〜2から1問選択して解答します。&lt;/p&gt;

&lt;p&gt;午後IIでは、問2を選択しました。問2は、宅配ピザチェーンにおける店舗への資材配送業務を題材に、与えられた状況から概念データモデリングを行う問題でした。本来は、「出庫」や「出荷」のように似た用語が複数出てくる問題は避けたいと考えていましたが、問1よりは解答しやすいと判断しました。一方、問1は、コード決済事業者のコード決済システムを題材に、データベースの実装・運用を問う問題でした。決済処理方式の説明があり、自分には業務知識が十分ではなく、準備してきた解き方を活かしにくいと判断しました。&lt;/p&gt;

&lt;p&gt;結果として、午後IIは67点でした。合格点は超えましたが、余裕があったとは言いにくく、午後IIの問題選択はやや消極的であり、その点は今後の課題として残ったと考えています。&lt;/p&gt;

&lt;h2&gt;使用した教材&lt;/h2&gt;

&lt;p&gt;学習に使った主な書籍は &lt;a href="https://www.google.co.jp/books/edition/%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%95%99%E7%A7%91%E6%9B%B8_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/CVFQEQAAQBAJ?hl=ja&amp;gbpv=1"&gt;情報処理教科書 データベーススペシャリスト&lt;/a&gt; と &lt;a href="https://www.google.co.jp/books/edition/2025_2026_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3/ACFeEQAAQBAJ?hl=ja&amp;gbpv=1"&gt;データベーススペシャリスト「専門知識＋午後問題」の重点対策&lt;/a&gt; です。&lt;/p&gt;

&lt;h3&gt;情報処理教科書 データベーススペシャリスト&lt;/h3&gt;

&lt;p&gt;『情報処理教科書 データベーススペシャリスト』は、午前問題集として有用だっただけでなく、午後IにおけるSQLなどの出題傾向の把握や、午後Iと午後IIで問われ方がどう異なるかを整理するうえでも役立ちました。辞書的な使い方もしやすく、曖昧だった内容を引き直す際にも重宝しました。実際の業務や設計の背景を理解するうえで参考になる説明もあり、業務知識を補うのにも役立ちました。&lt;/p&gt;

&lt;p&gt;また、購入者特典の過去問題解説も有用でした。過去問題は、解いた後にどう振り返るかが大事ですが、この解説は復習の観点を整理しやすく、理解が曖昧なところを確認するのに役立ちました。&lt;/p&gt;

&lt;p&gt;加えて、『ITエンジニアのための【業務知識】がわかる本』も参考にしました。試験対策そのものというより、業務の流れや前提知識をつかむのに役立ちました。なお、これら2冊は同じ著者による書籍であり、その著者によるYouTube動画も、受験時の考え方や時間配分、問題への向き合い方を整理するうえで参考になりました。&lt;/p&gt;

&lt;h3&gt;データベーススペシャリスト「専門知識＋午後問題」の重点対策&lt;/h3&gt;

&lt;p&gt;『データベーススペシャリスト「専門知識＋午後問題」の重点対策』は、午後I・午後IIで何が問われるのか、どのような観点で考えるべきかを整理するのに役立ちました。特に、午後I突破を重視していた自分にとっては、問題の見方をつかむうえで参考になりました。&lt;/p&gt;

&lt;h2&gt;書籍以外に参考にしたもの&lt;/h2&gt;

&lt;p&gt;学習では、試験対策本や過去問題に加えて、RDBMSの内部実装、トランザクション制御、MVCC、索引設計、性能改善、バックアップ、障害対応などに関する技術記事や発表資料も参考にしていました。すべてを深く読むというより、試験で気になった点が出てきたときに、背景や実装イメージを補うために見る使い方でした。&lt;/p&gt;

&lt;p&gt;また、日本PostgreSQLユーザ会の動画や過去のライブ配信も活用しました。特にリストア、復旧といった分野は、文章だけで理解するより、処理の流れを追いながら説明を聞く方が理解しやすく、学習の助けになりました。&lt;/p&gt;

&lt;h2&gt;合格を振り返って&lt;/h2&gt;

&lt;p&gt;今回の受験で得られたのは、資格そのものだけではありません。自分の理解の曖昧さを可視化し、それを整理して補強する機会になったことが大きかったと感じています。&lt;/p&gt;

&lt;p&gt;また、試験に合格したことで、少なくともIPA試験の受験者集団の中で一定水準に達していることを、一つの形として示せたとも考えています。もちろん、資格だけで実務能力のすべてを示せるわけではありませんが、学習の結果を外部に伝える材料にはなったと思います。&lt;/p&gt;

&lt;p&gt;最終的には、過去問題を中心に学習したことが合格につながったと思います。ただ、それだけでなく、日頃の業務で受けたフィードバックや、仕事を通じて得た視点、周囲の方とのやり取りの積み重ねも、試験中の判断や理解の土台になっていたと感じています。&lt;/p&gt;

&lt;h2&gt;おわりに&lt;/h2&gt;

&lt;p&gt;今回の受験は、資格取得だけでなく、自分の理解を点検し、学び直す機会にもなりました。試験方式は &lt;a href="https://www.ipa.go.jp/shiken/2026/ap_koudo_sc-cbt.html"&gt;ペーパー方式からCBT方式に変わっていく予定&lt;/a&gt; ですが、過去問題を通じて苦手を見つけ、午後Iで求められる力を意識して学習を組み立てる考え方は、今後も有効だと思っています。&lt;/p&gt;

&lt;p&gt;これから受験を検討される方の参考になれば幸いです。&lt;/p&gt;

&lt;h2&gt;参考にした情報の一部&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://soudai.hatenablog.com/entry/2024/01/18/150718"&gt;PostgreSQLの仕組みから学ぶために必要な資料 - そーだいなるらくがき帳&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://speakerdeck.com/mpyw/postgres-niokerutoranzakusiyonfen-li-reberu"&gt;MySQL/Postgres におけるトランザクション分離レベル - Speaker Deck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://speakerdeck.com/yoku0825/mysqltoindetukusutosi"&gt;MySQLとインデックスと私 - Speaker Deck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/advent-calendar/2016/transaction"&gt;一人トランザクション技術 - Qiita Advent Calendar 2016&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="text-center" style="margin: 2em auto;"&gt;
&lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f4a89f0f"&gt;&lt;img srcset="/images/service/myredmine-add@2x.png 2x" alt="My Redmine"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;【スタッフ募集中】&lt;/strong&gt;&lt;br&gt;
「My Redmine」など弊社提供サービスのお問い合わせ対応を担当するカスタマーサポートスタッフを募集しています。&lt;br&gt;
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。&lt;a href="/recruit/"&gt;採用情報の詳細&lt;/a&gt; &lt;/p&gt;

&lt;hr&gt;

&lt;div style="margin-top: 2em;"&gt;
  &lt;span style="font-weight: bold; color: #f15a5a;"&gt;こちらの記事もオススメです！&lt;/span&gt;&lt;span style="color: #555;"&gt;&lt;/span&gt;
  &lt;table class="table table-condensed"&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2025/04/aws-saa-c03/"&gt;&lt;img src="/blog/2025/04/aws-saa-c03/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2025/04/aws-saa-c03/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/d80534c2d855441c53f16a3e24a8c39e?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; AWS認定ソリューションアーキテクト - アソシエイトを受験した話&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;AWS認定ソリューションアーキテクト–アソシエイト（SAA‑C03）を受験し合格しました。「具体 → 抽象 → 応用」の3ステップ学習で活用した教材を紹介。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/textbringer-plugin-dev-with-ai/"&gt;&lt;img src="/blog/2026/03/textbringer-plugin-dev-with-ai/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/textbringer-plugin-dev-with-ai/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/6f6cfc64c61460a6ce7190fdbfc3e66a?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt;  AIを活用してテキストエディタ「Textbringer」のプラグインを作った話&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;テキストエディタ「Textbringer」の機能を拡張するプラグインをClaude Codeで作りました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/redmine-list-id-gmail/"&gt;&lt;img src="/blog/2026/03/redmine-list-id-gmail/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/redmine-list-id-gmail/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/f8eafcecfdf9620cfe2729da0b9e2291?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineの通知メールをプロジェクトごとに自動で振り分ける（Gmail）&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Redmine 6.0では通知メールの「List-Id」ヘッダにプロジェクト識別子が含まれるようになりました。Gmailで通知メールをプロジェクトごとに自動振り分けする方法を紹介します。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;img src="/blog/2026/03/genuary/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/3cfda2b47a60ad184b9bd5b2bd7bfca9?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; p5.rbでGenuary 2026に参加してみた&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Genuary 2026をきっかけに、p5.rbで初めてジェネラティブアート制作に挑戦しました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;img src="/blog/2026/03/osc2026-osaka-tokyo-spring/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/c2ecd28c49b42ee59d534cea6e74beb0?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineで働き方を再定義 -OSC2026 Osaka &amp; Tokyo/Spring 出展を通して考えたこと-&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;OSC2026 OsakaとTokyo/Spring の出展を通して、Redmineの運用がうまくいくチームとそうでないチームの違いについて改めて考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
  &lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>tag:www.farend.co.jp,2026-03-25:/blog/2026/03/textbringer-plugin-dev-with-ai/</id>
    <title type="html"> AIを活用してテキストエディタ「Textbringer」のプラグインを作った話</title>
    <published>2026-03-25T00:00:00Z</published>
    <updated>2026-03-25T00:00:00Z</updated>
    <link rel="alternate" href="https://www.farend.co.jp/blog/2026/03/textbringer-plugin-dev-with-ai/" type="text/html"/>
    <content type="html">&lt;div class="tldr-box"&gt;
  &lt;ul&gt;
    &lt;li&gt;TextbringerはRubyで実装されたEmacsライクなテキストエディタです&lt;/li&gt;
    &lt;li&gt;AIを活用してTextbringerの機能を拡張するプラグインを作りました&lt;/li&gt;
    &lt;li&gt;作れなかったものが作れるようになる良い時代になったと感じています&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;div class='ad_myredmine_square'&gt;
  &lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f0e99ebf"&gt;
    &lt;img srcset="/images/service/myredmine-add2@2x.png 2x" alt="My Redmine"&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;div style="float: left; margin: 0 0.5em 0 0;"&gt;&lt;img src="https://www.gravatar.com/avatar/6f6cfc64c61460a6ce7190fdbfc3e66a?s=112px&amp;d=mm" style="width: 56px; border-radius: 50%;"&gt;&lt;/div&gt;

&lt;p&gt;黒谷です。今回はAIを活用してTextbringerのプラグインを作った話です。もちろんこの原稿もTextbringerを使って書きました。&lt;/p&gt;

&lt;h2&gt;Textbringerとは&lt;/h2&gt;

&lt;p&gt;TextbringerはRubyで実装されたEmacsライクなテキストエディタです。 Rubyのコミッターである前田修吾さんが開発されました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/shugo/textbringer"&gt;shugo/textbringer: An Emacs-like text editor written in Ruby&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;私は普段から仕事でもプライベートでもTextbringerを使っています。TextbringerはRubyで拡張できるので、使いなれたRubyで気軽に便利な機能を追加することができる...と書きたいところですが、ソフトウェア開発者ではない私には大きな機能追加は難しいです。&lt;a href="https://github.com/kurod1492/textbringer-utils"&gt;ちょっとしたコマンド&lt;/a&gt;を追加する程度のことはできましたが、それ以上のことはできませんでした。&lt;/p&gt;

&lt;h2&gt;AIの活用&lt;/h2&gt;

&lt;p&gt;近年AIがどんどん高性能になり、バイブコーディングという言葉も出現し、素人でもソフトウェア開発ができるようになりました。AIを活用すれば、私でもTextbringerの機能追加ができるのではないかと思い、あったらいいなと思う機能を作ってみることにしました。Textbringerにプラグインのしくみがあることは知っていたので、プラグインとして作ることにしました。&lt;/p&gt;

&lt;p&gt;使用したのはClaude Codeです。他と比較したわけではなく、まずClaude Codeから試してみようかなという気分で採用しました。&lt;/p&gt;

&lt;p&gt;最初は、欲しい機能をAIに伝えるところから始めました。&lt;a href="/blog/2026/02/devsumi-2026/"&gt;Developers Summit 2026 参加レポート(当社ブログ記事)&lt;/a&gt;で「スペック駆動開発（SDD）」という言葉が紹介されていました。そこまできちんと仕様を整えたわけではありませんが、Emacsに似ている機能があれば「Emacsの○○という機能と同じような機能を実現したい」みたいにできるだけ具体的に伝えるようにしました。また、複数の機能を同時に作ることがないように、作る機能がひとつになるように気をつけました。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="claude-code@2x.png 2x"&gt;
&lt;/div&gt;

&lt;p&gt;少しずつ機能を追加していく中でソースコードの改善が必要になったとき、ソースコードを修正してすぐコミットしようとすることがありました。ソースコードの修正差分を見ても善し悪しが判断できないため、私が判断するための根拠となるものと、改修プランを示してもらい、議論してから修正案を示してもらうことにしました。CLAUDE.mdに以下のような指示を入れています。&lt;/p&gt;

&lt;pre&gt;
* ソースコードの改修案を提示するときは、根拠となる事実(修正されたコミットがどれか、等)を示してから、改修プランを示し、ユーザーと議論をしてから、提示する。
&lt;/pre&gt;

&lt;p&gt;テストコードについては、Textbringerに含まれるテストコードをAIに見てもらい、それを参考にしてテストコードを書いてもらうようにしました。勉強していない私には書けないので大変助かります。&lt;/p&gt;

&lt;p&gt;私は議論した内容を忘れるので、作業を終えるときに議論した内容や実施した内容の概要をテキストファイルに保存することにしました。Claude Codeは過去に終了した状態から再開するコマンドがありますのでそれを活用すれば良いのですが、過去の記録をさっと見返したいときにテキストファイルがあると良いなと思ったのでそのようにしています。&lt;/p&gt;

&lt;h2&gt;作ったプラグインの紹介&lt;/h2&gt;

&lt;h3&gt;textbringer-minibuffer-extension&lt;/h3&gt;

&lt;p&gt;Textbringerではファイルの操作をするときなどにミニバッファを使います。このミニバッファの操作が便利になるといいなと思って作りました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ミニバッファで選択したファイル名/バッファ名/コマンド名を記憶しておき、履歴として利用できる&lt;/li&gt;
&lt;li&gt;zshの補完機能のように、TABを押し続けると選択肢を順番に変えていく&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;普段 zsh を使っており、TABを押すだけで選択肢を次から次へ変えてくれる挙動になれてしまいました。Textbringerでも同じようにしたいと思って作りました。&lt;/p&gt;

&lt;p&gt;Gemとして登録したので、&lt;/p&gt;

&lt;pre&gt;
gem install textbringer-minibuffer-extension
&lt;/pre&gt;

&lt;p&gt;でインストールできます。&lt;/p&gt;

&lt;p&gt;ソースコードは以下のリポジトリから取得できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kurod1492/textbringer-minibuffer-extension"&gt;https://github.com/kurod1492/textbringer-minibuffer-extension&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;textbringer-recentf&lt;/h3&gt;

&lt;p&gt;EmacsにはRecentfというモードがあります。このモードを有効にすると、開いたファイルのファイル名を保存しておき、あとから参照できるようになります。Textbringerを使う前、Emacsを使っていた頃はこの機能を便利に使っていました。Textbringerでも同様の機能があるといいなと思って作ってみました。&lt;/p&gt;

&lt;p&gt;保存されたファイル名のリストをミニバッファで選択することになるため、textbringer-minibuffer-extensionがないと使いにくいと考え、依存関係が設定してあります。&lt;/p&gt;

&lt;p&gt;Gemとして登録したので、&lt;/p&gt;

&lt;pre&gt;
gem install textbringer-recentf
&lt;/pre&gt;

&lt;p&gt;でインストールできます。&lt;/p&gt;

&lt;p&gt;ソースコードは以下のリポジトリから取得できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kurod1492/textbringer-recentf"&gt;https://github.com/kurod1492/textbringer-recentf&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;まとめ&lt;/h2&gt;

&lt;p&gt;AIを活用してTextbringerのプラグインを作ってみたというお話でした。他の人が実現してくれるのを待つのではなく、AIの力を借りて自分で作ることができる良い時代になったと感じています。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto;"&gt;
&lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f4a89f0f"&gt;&lt;img srcset="/images/service/myredmine-add@2x.png 2x" alt="My Redmine"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;【スタッフ募集中】&lt;/strong&gt;&lt;br&gt;
「My Redmine」など弊社提供サービスのお問い合わせ対応を担当するカスタマーサポートスタッフを募集しています。&lt;br&gt;
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。&lt;a href="/recruit/"&gt;採用情報の詳細&lt;/a&gt; &lt;/p&gt;

&lt;hr&gt;

&lt;div style="margin-top: 2em;"&gt;
  &lt;span style="font-weight: bold; color: #f15a5a;"&gt;こちらの記事もオススメです！&lt;/span&gt;&lt;span style="color: #555;"&gt;&lt;/span&gt;
  &lt;table class="table table-condensed"&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/redmine-list-id-gmail/"&gt;&lt;img src="/blog/2026/03/redmine-list-id-gmail/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/redmine-list-id-gmail/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/f8eafcecfdf9620cfe2729da0b9e2291?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineの通知メールをプロジェクトごとに自動で振り分ける（Gmail）&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Redmine 6.0では通知メールの「List-Id」ヘッダにプロジェクト識別子が含まれるようになりました。Gmailで通知メールをプロジェクトごとに自動振り分けする方法を紹介します。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;img src="/blog/2026/03/genuary/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/3cfda2b47a60ad184b9bd5b2bd7bfca9?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; p5.rbでGenuary 2026に参加してみた&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Genuary 2026をきっかけに、p5.rbで初めてジェネラティブアート制作に挑戦しました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;img src="/blog/2026/03/osc2026-osaka-tokyo-spring/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/c2ecd28c49b42ee59d534cea6e74beb0?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineで働き方を再定義 -OSC2026 Osaka &amp; Tokyo/Spring 出展を通して考えたこと-&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;OSC2026 OsakaとTokyo/Spring の出展を通して、Redmineの運用がうまくいくチームとそうでないチームの違いについて改めて考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/devsumi-2026/"&gt;&lt;img src="/blog/2026/02/devsumi-2026/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/devsumi-2026/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/82d426c68143aae2acf35eedbf8a3e83?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Developers Summit 2026 参加レポート&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Developers Summit 2026に参加しました。刺激的なセッションの数々を振り返ります。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/join-motomura/"&gt;&lt;img src="/blog/2026/02/join-motomura/motomura@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/join-motomura/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/f0ef8500beb67217a131fbb3910ae594?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; ファーエンドテクノロジーに入社しました&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;ファーエンドテクノロジーに入社しました。メールからSlackとRedmineの環境に変わって快適になりました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
  &lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>tag:www.farend.co.jp,2026-03-18:/blog/2026/03/redmine-list-id-gmail/</id>
    <title type="html">Redmineの通知メールをプロジェクトごとに自動で振り分ける（Gmail）</title>
    <published>2026-03-18T00:00:00Z</published>
    <updated>2026-03-18T00:00:00Z</updated>
    <link rel="alternate" href="https://www.farend.co.jp/blog/2026/03/redmine-list-id-gmail/" type="text/html"/>
    <content type="html">&lt;div class="tldr-box"&gt;
  &lt;ul&gt;
    &lt;li&gt;Redmine 6.0より、通知メールの「List-Id」ヘッダにプロジェクト識別子が含まれるようになりました&lt;/li&gt;
    &lt;li&gt;Gmailの検索演算子「list:」を使い、特定のプロジェクトのメールを検索できます&lt;/li&gt;
    &lt;li&gt;フィルタとラベルを設定することで、通知メールをプロジェクトごとに自動で振り分けることができます&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;div class='ad_myredmine_square'&gt;
  &lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f0e99ebf"&gt;
    &lt;img srcset="/images/service/myredmine-add2@2x.png 2x" alt="My Redmine"&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;div style="float: left; margin: 0 0.5em 0 0;"&gt;&lt;img src="https://www.gravatar.com/avatar/f8eafcecfdf9620cfe2729da0b9e2291?s=112px&amp;d=mm" style="width: 56px; border-radius: 50%;"&gt;&lt;/div&gt;

&lt;p&gt;杠です。Redmineを使用していると、プロジェクトが増えるにつれて通知メールも多くなってきます。毎日届くたくさんのメールを、一通ずつ見て判断するのは意外と大変なものです。&lt;/p&gt;

&lt;p&gt;そこで便利なのが、メールヘッダの情報を利用した自動振り分けです。今回は、Gmailを例に、通知メールをプロジェクトごとに自動で振り分けるための設定を紹介します。&lt;/p&gt;

&lt;h2&gt;Redmineのメールヘッダ&lt;/h2&gt;

&lt;p&gt;Redmineの通知メールには、振り分けに利用できるさまざまなヘッダが用意されています。&lt;/p&gt;

&lt;p&gt;参考：&lt;a href="https://blog.redmine.jp/articles/mail-header-field/"&gt;Redmineの通知メールに含まれるヘッダフィールド&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;X-Redmine-Project の識別子からプロジェクトを判別できますが、メールサービスによってはこのヘッダを振り分け条件に使えないことがあります。しかし、Redmine 6.0 から「List-Id」ヘッダにプロジェクト識別子が入るようになり、Gmailでプロジェクトごとの振り分けが簡単に行えるようになりました。  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.redmine.jp/articles/6_0/new-features/#13359"&gt;Redmine 6.0 新機能紹介: Redmineから届く通知メールをプロジェクトごとに振り分けできるように List-Id ヘッダーにプロジェクト識別子を追加&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Gmailでヘッダを確認する方法&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;対象の通知メールを開く&lt;br&gt;&lt;/li&gt;
&lt;li&gt;右上の「︙」メニューをクリック&lt;br&gt;&lt;/li&gt;
&lt;li&gt;「原文を表示」を選択&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="mail-source@2x.png 2x" alt="メールのソース" style="border: 1px solid #ccc;"&gt;&lt;br&gt;
&lt;/div&gt;

&lt;p&gt;表示されたテキストの中から &lt;code&gt;List-Id:&lt;/code&gt; と書かれた行を見つけます。&lt;/p&gt;

&lt;h2&gt;Gmailでヘッダを使ってプロジェクトごとにメールを振り分ける&lt;/h2&gt;

&lt;p&gt;Gmailでは、検索演算子が用意されています。プロジェクトごとにメールを振り分ける際は、先ほど確認したヘッダ情報をもとに、&lt;code&gt;list:&lt;/code&gt; という演算子を使用します。&lt;/p&gt;

&lt;p&gt;例： &lt;code&gt;list:support-center.redmine.example.com&lt;/code&gt;&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="mail-search@2x.png 2x" alt="メールの検索結果" style="border: 1px solid #ccc;"&gt;&lt;br&gt;
&lt;/div&gt;

&lt;p&gt;まずはこの文字列をGmailの検索窓に入力し、対象のメールが検索結果に表示されるかを確認します。&lt;/p&gt;

&lt;h3&gt;フィルタの作成手順&lt;/h3&gt;

&lt;p&gt;問題なく表示されたら、以下の手順で自動振り分けを設定します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;検索窓右側のアイコン（検索オプションを表示）をクリック&lt;br&gt;&lt;/li&gt;
&lt;li&gt;「フィルタを作成」をクリック&lt;/li&gt;
&lt;li&gt;「受信トレイをスキップ(アーカイブする)」にチェックを入れる&lt;br&gt;&lt;/li&gt;
&lt;li&gt;「ラベルを付ける」にチェックを入れて、既存のラベルを選択するか新しいラベルを作成する&lt;br&gt;&lt;/li&gt;
&lt;li&gt;「フィルタを作成」をクリック&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="mail-search-options@2x.png 2x" alt="検索オプションの設定" style="border: 1px solid #ccc;"&gt;&lt;br&gt;
「◯件の一致するスレッドにもフィルタを適用する。」にチェックを入れると過去のメールにもフィルタが適用できます
&lt;/div&gt;

&lt;p&gt;これで、特定のプロジェクトの通知メールがラベルごとに自動的に振り分けられるようになります。&lt;/p&gt;

&lt;p&gt;以前は、「一番に目を通したいプロジェクトの通知」と、「別に時間を取って確認したいプロジェクトの通知」、その他のメールすべてが受信トレイに混在している状態でした。&lt;/p&gt;

&lt;p&gt;現在は、これらのプロジェクトの通知が自動で振り分けられるよう設定し、次の手順でメールを確認しています。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ラベルのついたメールをチェックする&lt;/li&gt;
&lt;li&gt;最後に、受信トレイに残ったその他のメールをチェックする&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;振り分けを行ったことで、通知が埋もれることがなくなり、確認がスムーズになりました。&lt;/p&gt;

&lt;h2&gt;まとめ&lt;/h2&gt;

&lt;p&gt;実際にこの振り分けを始めてから気づいたのですが、今までは一通一通メールを開くたびに、無意識に「仕分けの判断」をしていました。例えば、「どのプロジェクトの通知か」「今すぐ確認する必要があるか」「後でまとめて確認すればよいか」といったことです。&lt;/p&gt;

&lt;p&gt;ひとつひとつは小さな判断ですが、何十通にもなると、知らず知らずのうちに脳のエネルギーを消耗してしまいます。振り分け設定をした後は、この「仕分けの判断」そのものが不要になりました。&lt;/p&gt;

&lt;p&gt;最初からラベルで振り分けられたものから順番に確認していけばよく、効率が上がったと感じています。また、後からメールの確認もしやすくなりました。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto;"&gt;
&lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f4a89f0f"&gt;&lt;img srcset="/images/service/myredmine-add@2x.png 2x" alt="My Redmine"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;【スタッフ募集中】&lt;/strong&gt;&lt;br&gt;
「My Redmine」など弊社提供サービスのお問い合わせ対応を担当するカスタマーサポートスタッフを募集しています。&lt;br&gt;
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。&lt;a href="/recruit/"&gt;採用情報の詳細&lt;/a&gt; &lt;/p&gt;

&lt;hr&gt;

&lt;div style="margin-top: 2em;"&gt;
  &lt;span style="font-weight: bold; color: #f15a5a;"&gt;こちらの記事もオススメです！&lt;/span&gt;&lt;span style="color: #555;"&gt;&lt;/span&gt;
  &lt;table class="table table-condensed"&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;img src="/blog/2026/03/genuary/ogp@2x.png" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/genuary/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/3cfda2b47a60ad184b9bd5b2bd7bfca9?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; p5.rbでGenuary 2026に参加してみた&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Genuary 2026をきっかけに、p5.rbで初めてジェネラティブアート制作に挑戦しました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;img src="/blog/2026/03/osc2026-osaka-tokyo-spring/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/c2ecd28c49b42ee59d534cea6e74beb0?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineで働き方を再定義 -OSC2026 Osaka &amp; Tokyo/Spring 出展を通して考えたこと-&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;OSC2026 OsakaとTokyo/Spring の出展を通して、Redmineの運用がうまくいくチームとそうでないチームの違いについて改めて考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/devsumi-2026/"&gt;&lt;img src="/blog/2026/02/devsumi-2026/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/devsumi-2026/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/82d426c68143aae2acf35eedbf8a3e83?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Developers Summit 2026 参加レポート&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Developers Summit 2026に参加しました。刺激的なセッションの数々を振り返ります。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/join-motomura/"&gt;&lt;img src="/blog/2026/02/join-motomura/motomura@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/join-motomura/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/f0ef8500beb67217a131fbb3910ae594?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; ファーエンドテクノロジーに入社しました&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;ファーエンドテクノロジーに入社しました。メールからSlackとRedmineの環境に変わって快適になりました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/rcolab/"&gt;&lt;img src="/blog/2026/02/rcolab/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/rcolab/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/65ad1c564dc345a424b6a01b7b8e2695?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; オープンデータを表計算アプリで扱うのはちょっと面倒が多いので、Colabで使えるようになったRで処理する&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Google ColaboratoryでR言語が使えるので、導入準備無しでオープンデータを処理することを考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
  &lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>tag:www.farend.co.jp,2026-03-11:/blog/2026/03/genuary/</id>
    <title type="html">p5.rbでGenuary 2026に参加してみた</title>
    <published>2026-03-11T00:00:00Z</published>
    <updated>2026-03-11T00:00:00Z</updated>
    <link rel="alternate" href="https://www.farend.co.jp/blog/2026/03/genuary/" type="text/html"/>
    <content type="html">&lt;div class="tldr-box"&gt;
  &lt;ul&gt;
    &lt;li&gt;Genuary 2026をきっかけに、p5.rbで初めてジェネラティブアート制作に挑戦した記録です&lt;/li&gt;
    &lt;li&gt;お題「フォントを使わず “Genuary” を描く」に対し、図形だけで文字を構成する表現をコードで実現しました&lt;/li&gt;
    &lt;li&gt;他の参加者の作品から刺激を受けながら、コードを書いて即ビジュアルに反映される体験の面白さを実感しました&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;div class='ad_myredmine_square'&gt;
  &lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f0e99ebf"&gt;
    &lt;img srcset="/images/service/myredmine-add2@2x.png 2x" alt="My Redmine"&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;div style="float: left; margin: 0 0.5em 0 0;"&gt;&lt;img src="https://www.gravatar.com/avatar/3cfda2b47a60ad184b9bd5b2bd7bfca9?s=112px&amp;d=mm" style="width: 56px; border-radius: 50%;"&gt;&lt;/div&gt;

&lt;p&gt;石川です。2026年1月に開催された Genuary をきっかけに、初めて &lt;code&gt;p5.rb&lt;/code&gt; に触れたので、そのときのことを書きます。&lt;/p&gt;

&lt;h2&gt;Genuaryとは&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://genuary.art/"&gt;https://genuary.art/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Genuary は、毎年1月に行われるジェネラティブアートのイベントです。&lt;a href="https://genuary.art/prompts"&gt;https://genuary.art/prompts&lt;/a&gt; で毎日提示されるお題を手がかりに各々自分なりに解釈して作品を作ります。例えば2026年1月1日のお題は&amp;quot;One color, one shape.&amp;quot;です。31日分のお題が用意されていますが1日だけの参加でも良く、FAQには「プロンプトに完全に従う必要も無い」「使う言語やツールにも決まりがない」等と記載されていて気軽に参加出来ます。&lt;/p&gt;

&lt;p&gt;他の人の作品をXのハッシュタグ( &lt;a href="https://x.com/hashtag/genuary"&gt;#genuary&lt;/a&gt; )で見ることができるのですが、同じお題でも人によってまったく違う表現になるのも面白いところです。途中までは他の人の作品を「すごい」「このお題からこういう発想になるのか、なるほど」「綺麗」「これがコードによって生成されているのか...」などと楽しんでいたのですが、だんだんと自分もチャレンジしてみたくなってきて参加しました。&lt;/p&gt;

&lt;h2&gt;p5.rb&lt;/h2&gt;

&lt;p&gt;今回チャレンジする上でRubyを使って描きたかったので、&lt;code&gt;p5.rb&lt;/code&gt;を使いました。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;p5.rb&lt;/code&gt; は、JavaScript のクリエイティブコーディングライブラリ &lt;code&gt;p5.js&lt;/code&gt; をRuby で扱えるようにした環境です。&lt;code&gt;setup&lt;/code&gt; と &lt;code&gt;draw&lt;/code&gt; を中心に、図形を描いたり、色や動きをつけたり、乱数で変化を作ったりといった表現を Ruby の文法で試せます。&lt;br&gt;
また、 &lt;a href="https://rbcanvas.net/p5/"&gt;rbCanvas/p5&lt;/a&gt; や &lt;a href="https://p5rb.ongaeshi.me/editor"&gt;p5.rb Editor&lt;/a&gt; などブラウザでコードをすぐ試せる環境もあり、コードを書いてすぐ結果を見ることができて初心者にはとても取っつきやすかったです。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;img loading="lazy" srcset="rbcanvasp5_editor.png 2x" style="border: 1px solid #ccc;"&gt;
&lt;/div&gt;

&lt;h2&gt;JAN. 5 Write “Genuary”. Avoid using a font.&lt;/h2&gt;

&lt;p&gt;1月5日のお題&amp;quot;Genuary&amp;quot;をフォントを使わずに描くに挑戦しました。 &lt;code&gt;p5.rb&lt;/code&gt; の機能にある丸や三角形、四角形を描くメソッドを使って、図形だけで文字を表現してみました（Eなどは背景色と同じ図形を描画して一部を削っています）。&lt;/p&gt;

&lt;p&gt;座標を指定するのが大変だったので、各文字のエリアをboxとして捉えて、そのbox内のどれくらいの位置（0.0〜1.0）に点を置くかを書けばxやyの値を計算できるようにしました。また、これだけだと座標を書いただけになってしまうなと思い、frameCountを元に文字の色を変えたり、背景に薄くアルファが表示されてふわふわと動くようにしました。&lt;/p&gt;

&lt;p&gt;実際にコードによって動く画面を &lt;a href="https://ishikawa999.github.io/try-creativecoding/genuary-5/"&gt;https://ishikawa999.github.io/try-creativecoding/genuary-5/&lt;/a&gt; で見ることができます。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;video muted controls preload="metadata" style="width:100%; max-width: 700px;"&gt;
    &lt;source src="genuary-5.mp4" loading="lazy"&gt;
  &lt;/video&gt;
&lt;/div&gt;

&lt;p&gt;コード:&lt;br&gt;
&lt;script src="https://gist.github.com/ishikawa999/d819f9ddb1e30f043c45453ac9d24299.js"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;h2&gt;JAN.30 Its not a bug, its a feature.&lt;/h2&gt;

&lt;p&gt;他に1月30日にもトライしてみました。こちらはイマイチ解釈がしっくりきていないのですが、動くところまでできたので良しとします。&lt;/p&gt;

&lt;p&gt;実際にコードによって動く画面を &lt;a href="https://ishikawa999.github.io/try-creativecoding/genuary-30/index.html"&gt;https://ishikawa999.github.io/try-creativecoding/genuary-30/index.html&lt;/a&gt; で見ることができます。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto; clear: right;"&gt;
  &lt;video muted controls preload="metadata" style="width:100%; max-width: 700px;"&gt;
    &lt;source src="genuary-30.mp4" loading="lazy"&gt;
  &lt;/video&gt;
&lt;/div&gt;

&lt;p&gt;コード: &lt;a href="https://github.com/ishikawa999/try-creativecoding/blob/main/genuary-30/index.html"&gt;https://github.com/ishikawa999/try-creativecoding/blob/main/genuary-30/index.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Genuary 2026に(少しだけですが)参加した感想&lt;/h2&gt;

&lt;p&gt;書いたコードがビジュアルに即座に反映されるのが面白かったです。仕様決めやコーディングにもAIを使うのが当たり前になってきた世の中ですが、たまにはこうやって楽しんでコードを書くことも失わないでいたいなと思いました。&lt;/p&gt;

&lt;p&gt;X のハッシュタグ &lt;a href="https://x.com/hashtag/genuary"&gt;#genuary&lt;/a&gt; を見ると、同じお題でも解釈の異なる作品が数多く投稿されています。ぜひのぞいてみてください。&lt;/p&gt;

&lt;div class="text-center" style="margin: 2em auto;"&gt;
&lt;a href="https://hosting.redmine.jp/lp/myredmine/?argument=ZonMDklE&amp;dmai=a65274f4a89f0f"&gt;&lt;img srcset="/images/service/myredmine-add@2x.png 2x" alt="My Redmine"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;【スタッフ募集中】&lt;/strong&gt;&lt;br&gt;
「My Redmine」など弊社提供サービスのお問い合わせ対応を担当するカスタマーサポートスタッフを募集しています。&lt;br&gt;
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。&lt;a href="/recruit/"&gt;採用情報の詳細&lt;/a&gt; &lt;/p&gt;

&lt;hr&gt;

&lt;div style="margin-top: 2em;"&gt;
  &lt;span style="font-weight: bold; color: #f15a5a;"&gt;こちらの記事もオススメです！&lt;/span&gt;&lt;span style="color: #555;"&gt;&lt;/span&gt;
  &lt;table class="table table-condensed"&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;img src="/blog/2026/03/osc2026-osaka-tokyo-spring/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/03/osc2026-osaka-tokyo-spring/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/c2ecd28c49b42ee59d534cea6e74beb0?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Redmineで働き方を再定義 -OSC2026 Osaka &amp; Tokyo/Spring 出展を通して考えたこと-&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;OSC2026 OsakaとTokyo/Spring の出展を通して、Redmineの運用がうまくいくチームとそうでないチームの違いについて改めて考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/devsumi-2026/"&gt;&lt;img src="/blog/2026/02/devsumi-2026/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/devsumi-2026/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/82d426c68143aae2acf35eedbf8a3e83?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; Developers Summit 2026 参加レポート&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Developers Summit 2026に参加しました。刺激的なセッションの数々を振り返ります。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/join-motomura/"&gt;&lt;img src="/blog/2026/02/join-motomura/motomura@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/join-motomura/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/f0ef8500beb67217a131fbb3910ae594?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; ファーエンドテクノロジーに入社しました&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;ファーエンドテクノロジーに入社しました。メールからSlackとRedmineの環境に変わって快適になりました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/rcolab/"&gt;&lt;img src="/blog/2026/02/rcolab/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/02/rcolab/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/65ad1c564dc345a424b6a01b7b8e2695?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; オープンデータを表計算アプリで扱うのはちょっと面倒が多いので、Colabで使えるようになったRで処理する&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;Google ColaboratoryでR言語が使えるので、導入準備無しでオープンデータを処理することを考えてみました。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
    &lt;tr&gt;
      &lt;td style="width: 100px; vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/01/office-extension/"&gt;&lt;img src="/blog/2026/01/office-extension/ogp@2x.jpg" style="border: 1px solid #ccc;"&gt;&lt;/a&gt;
      &lt;/td&gt;
      &lt;td style="vertical-align: middle;"&gt;
        &lt;a href="/blog/2026/01/office-extension/"&gt;&lt;strong&gt;&lt;img src="https://www.gravatar.com/avatar/5649b5d0bb118baad6635852cd6c00f9?s=52px&amp;d=mm" style="width: 26px; border-radius: 50%;"&gt; 本社オフィス増床しました&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
        &lt;small&gt;今後の人員増加を見据えて本社オフィスを増床しました。社員皆が快適に働ける環境を整えていきたいです。&lt;/small&gt;
      &lt;/td&gt;
      &lt;/a&gt;
    &lt;/tr&gt;
  
  &lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
</feed>

