<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:webfeeds="http://webfeeds.org/rss/1.0" version="2.0">
  <channel>
    <title>かわいい駆動生活。</title>
    <link>https://comamoca.dev/</link>
    <atom:link href="https://comamoca.dev/api/feed.xml" rel="self" type="application/rss+xml"/>
    <description>My tech? blog</description>
    <lastBuildDate>Mon, 21 Sep 2026 20:49:25 GMT</lastBuildDate>
    <language>ja</language>
    <generator>ox-content</generator>
    <author>
      <name>Comamoca</name>
      <uri>https://comamoca.dev</uri>
    </author>
    <item>
      <title>vibe codingなんとかしたい</title>
      <link>https://comamoca.dev/blog/2026-09-22-how-to-deal-with-vibe-coding/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-09-22-how-to-deal-with-vibe-coding/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<p>深夜テンションで一気に書き上げたので誤字があるかも…見つけたら都度修正します。</p>
<p>最近仕事でも個人でもvibe
codingで終わっているコードを良く目にするのでその気持ちとかを書いていきます。
なおこの記事では個人的な感想が主軸で具体的な解決方について書かないのであしからず。もしなんとかできたらその時はまた記事を書きます。</p>
<h2>vibe codingで書かれたコードは速く死ぬ</h2>
<p>ソフトウェア工学の観点から「死んだソフロウェア」とは「プログラムが問題を解決しようと書かれた際に構築された理論が失われること」と指し、僕は以下のツイートにてその概念を知りました。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Peter Naur が言うところの「死んだ」ソフトウェアが出来上がってしまった <a href="https://t.co/YSkcY5Qwww">https://t.co/YSkcY5Qwww</a></p>&mdash; Takuto Wada (@t_wada) <a href="https://x.com/t_wada/status/2053250899620082164?ref_src=twsrc%5Etfw">May 9, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

<p>このツイートにてPeter Naurが指摘している内容は論文「Programming as Theory
Building」に書かれていて、Naurは論文のなかでプログラミングと問題解決の関係性について、プログラミングの本質はコードではなく問題に対してどのような理由でどの手段を用いて問題を解決したのかが重要であると主張しています。</p>
<p>最近ADRなどが注目されているのもこのwhyに該当する箇所をコードとは別の仕組みで残そうとする動きのひとつだったりしますね。</p>
<p>さて、この論文のなかで象徴的な一文として以下があります。</p>
<blockquote>
<p>A dead program may continue to be used for execution in a computer and to
produce useful results. The actual state of death becomes visible when demands
for modifications of the program cannot be intelligently answered. Revival of
a program is the rebuilding of its theory by a new programmer team.</p>
</blockquote>
<p><a href="https://nani.now">Nani翻訳</a>で翻訳したものも合わせて掲載します。</p>
<blockquote>
<p>「死んだ」プログラムであっても、コンピュータ上で実行され続け、役に立つ結果を生み出すことはあります。そのプログラムが実際に死んでいると判明するのは、プログラムの修正要求に対して適切な対応ができなくなったときです。プログラムを「復活させる」とは、新たなプログラマーチームがその理論をゼロから構築し直すことを意味します。</p>
</blockquote>
<p>このソフロウェアの生死を左右するのはコードが持っている問題解決に対するコンテキストが残っているか、という所に存在しています。
つまり、vibe
codingで書かれたコードは従来なら書き手が持っているであろう問題解決に対するコンテキストが欠落しているため、入来より速くコードが死を迎えてしまうという訳です。</p>
<h2>事例</h2>
<p>事例があった方が良いかなと思って仕事での(言えそうな範囲でボカした)内容と、趣味での事例を書いてみた。
仕事の方が普通に辛いという現実が目に見えてマズいですね…</p>
<h3>仕事での事例</h3>
<p>最近仕事ではリプレース案件をやっていて、そこそこドメインが複雑で年季の入ったソフトウェアをClaude
Codeで別の言語へリプレースするというものをやっている。
まあ当然移行前システムを開発した企業とは直接連絡は取れないし、仕様書なんて存在せず、ドメイン固有の謎の用語と仕様がてんこ盛りで、ドキュメントがExcelで書かれてたりしている。</p>
<p>こうなると当然元のソフトウェアのコンテキストを100%受け取ることなんでできっこないし、なんなら客先も完全に把握している訳ではないため、結構瀕死、なんならICU直行コースみたいな状態な訳です。</p>
<p>こういうソフトウェアのリプレースを行う前には、まぁとりあえずスモークテストを通すなりして正常系の仕様を把握したのち、内部のソースコードを調査してデータ構造なりを抽出、それを客先から聞き出した実際の使用例を突き合わせてコンテキストを把握したりするのが定石だと思うのですが、まぁそんなことはなく…</p>
<p>参画した数日後にClaude
Codeが書き散らした大量のMarkdownを押し付けられ、重要なコンテキストはドキュメント化されていないため口頭で聞き出し、コンテキストは共有されず、都度Claude
Codeにコードを調べさせかすかな痕跡をかき集めてコンテキストを推測するしかないのが現状。</p>
<p>こうなるともうほぼコンテキストは旧システムのコンテキストは残っておらず、言わばテセウスの船みたいな状態となっている訳です。
なんならこれ絶対リリース後に不具合連発するよなと思いつつ、ペーペーにはもうどうすることも出来ない状態まで来ているため、氷山に激突する寸前の船に乗っているみたいな気分で日々を過ごしています。</p>
<p>書いてて不安になってきた… これ本当に大丈夫なんすかね…？</p>
<p>あ、コード品質に関しては当然壊滅的で、レビュー時に変更箇所以外のコードは読まないのと、lintを通さない運用(lintのインストールに申請通さなきゃなので…)をしているので全然PEP8に違反しているし、多分他のPEPにも違反している漢気のあるコードベースとなっている。すごいですね。</p>
<h3>趣味での事例</h3>
<p>個人での事例はまだ希望があって、なんと、自身がドメインエキスパートになれる領域の問題となっている。</p>
<p>状況としてはドキュメントが存在はしているものの、Claude
Codeによって生成されたものが大半という状況になっていて、ドメイン自体はどこまで複雑でもないかなという印象。</p>
<p>自身がドメインエキスパートになれる状況なので、実装にあたってのコンテキストが欠けていてもある程度実装された内容に対して理由を推測できるし、かなり有利な状況ではある。</p>
<p>ただ、コードの変更がかなり激しく、数ヶ月でアーキテクチャがごっそり入れ変わっていたりするので、そのあたりの追従に関してはそれなりにコストがかかるという状況。
とはいえLLMがある今リーディングの負担は大きく減ってはいるし全然ペイできるかな〜という温度感。</p>
<h2>じゃあどうすれば良いのか</h2>
<p>完全な対処方法は分からん…が、ある程度は対処方法があると思っていて、うち一つが<strong>テストを書く</strong>だったり(テストがないコードはレガシーコードだ！)先述した<strong>ADRを残すこと</strong>だったりすると思っている。</p>
<p>従来のソフトウェア開発においてはドキュメントをいかに残すかが重要とされていたし、実際それが重要だったけれど今となってはLLMがコードを生成するスピードに太刀打ちできないので問題を解決できないと思う。</p>
<p>実際仕事ではドキュメントが腐敗するスピードがあまりに速く、逆にLLMが誤った判断をする要因となったりして<strong>逆に有害となっている</strong>ので、従来のドキュメントに相当する内容はドキュメンテーションコメントに記載して、本当に重要な内容はREADMEに記載するなど形態を大きく変える必要があると思う。</p>
<p>あとドキュメントの腐敗に対してもテストは有効な対策になると思っていて、テスト自体が実行できる仕様書ともとれるため、実際にコードを確認しなくともテストケースのみでコードの挙動を推測できる。
実際ドキュメントがないCommon
LispのコードとかをroveのテストコードとREPL結果を頼りに推測してたので、コードリーディングの観点からも結構使えるなという印象を持っている。</p>
<p>対処方について、仕事の方は社内でコード品質に関する問題提起が一切されず(マジかよ)どうしようもないな〜って感じで、LLMが生成しコードの改善に関してはそもそも<strong>コード品質に関して組織内で問題意識を共有するする必要がある</strong>という大前提の重要性を思い知らされたりしている。なのでなんかもうどうしようもないな、という感じでこれ以上は特に言うことはないです。</p>
<p>一方趣味の方はコード品質に対して問題提起は(俺がやると啖呵切ったため)出来ていて、実際に動けているので改善に対して希望があるという感じ。</p>
<p>ドキュメントの鮮度維持に関してはなんらかの方法(それこそskillを仕込むなど)で意思決定をするたびに、リポジトリ内でADRを貯めていくようにしたりすれば解決できそうではあるなと。
実際にADRを使ったことがまだないので、実際どの程度効果があるのかも検証したいところ。</p>
<p>現在はテストを突っ込む作業とかをしていて、その関連でカバレッジを計測したりしてテストのカバー範囲に穴がないかだとか、そもそもテストケースが有効か確認したりだとかしている。
vibe
codingで書かれたコードに対してはPBTも有用だと思うので、そのあたりも検証がてらぶっこみぶっこみしていきたい。</p>
<p>実際vibe
codingでのテストの重要性については結構取り上げられていると思うのだけど、ユニットテストの範疇を出たものを見ない(VRTとかはあったかも？)気がしていて、そのあたりの実践的な内容についても知りたいかもしれない…まぁ<a href="https://fortee.jp/honoconf-2026/proposal/64becb2b-5b43-4c57-b7f1-d6cc86cf99ea">来月それについて話す予定</a>なので記事が出てきたら逆に困ってしまうかもしれないですが…</p>
<p>という訳でつらつらと書いてきましたが、、LLMがコードを書くようになっても現状コードの品質を保ち、コードを死なせないようにする方法とかを書いてきた。
とは言え結論としては、従来からやってきているようなテストを書くことの重要性の再確認、強いていうならADRの重要性について確認できたことが新規性のある話かもしれない。ADR自体は数十年前から存在しているものではあるので、それ自体の新規性はないけども。</p>
<p>冒頭にも書いたように進捗が出たら今度は「なんとかした」という内容で解決編の記事をまた書きます。</p>
<h2>参考文献と謝辞</h2>
<h3>Programming as Theory Building</h3>
<p>論文の本体が1985年と古く、原本がスキャンしたものしかないため、有志がOCRでスキャンしたものもあわせて添付しておきます。
この論文に辿り着けたのはt-wadaさんの該当のツイートがきっかけなので、あわせて感謝を述べさせていただきます。</p>
<p>Gist(Markdown)版: <a href="https://gist.github.com/masci/5ee3be331b05c9014cc5dea87f9c026b">https://gist.github.com/masci/5ee3be331b05c9014cc5dea87f9c026b</a></p>
<p>原本(PDF): <a href="https://pages.cs.wisc.edu/~remzi/Naur.pdf">https://pages.cs.wisc.edu/~remzi/Naur.pdf</a></p>]]>
      </content:encoded>
      <pubDate>Tue, 22 Sep 2026 20:49:25 GMT</pubDate>
    </item>
    <item>
      <title>GleamでOG画像生成サーバーを作った</title>
      <link>https://comamoca.dev/blog/2026-09-11-built-an-og-image-generation-server/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-09-11-built-an-og-image-generation-server/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<h2>3行まとめ</h2>
<ul>
<li>最近ビルドのデプロイに時間がかかっていて、OG画像生成のコストも無視できなくなっている</li>
<li>OG画像生成をLumeからworkersへ移行した</li>
<li>OG画像生成がデプロイから消えたことでデプロイ時間が1分程度削減された</li>
</ul>
<h2>OG画像生成をworkersに移行した</h2>
<p>このブログはLumeっていうDeno製のSSGで運用しているのだけど、最近ビルド時間が無視できないレベルで長くなってているのでビルド時間の短縮を進めている。
その一環としてOG生成を従来のSSGパイプラインの載せるのではなくて、専用のOGサーバーを介して行なうようにした。</p>
<p>ブログのビルド処理のうち、画像まわりは結構時間がかかっていて、画像最適化とかは既にCloudflareの上で行うようにしてたりする。
OG画像は生成処理をworkersで実装する必要があるので見送っていたのだけど、満を持して移行したという形。</p>
<p>こんな感じでレンダリングされる。</p>
<img src="https://og.comamoca.dev/og.png?l=post&t=GleamでOG画像生成サーバーを作った&d=既にこのブログで動かしている" />

<h2>実装</h2>
<p>実装はGleamで行っていて、OG画像生成はsatoriと@resvg/resvg-wasmを使っている。
GleamはWebサーバー部分の実装で使っているのだけど、素のGleamとworkersにはギャップがあってそのままだと動かないので自作フレームワーク<a href="https://github.com/Comamoca/hinoto">hinoto</a>を使ってworkersを実装している。</p>
<p>hinoto自体は昨年のGWあたりに実家でガッと実装してからライブラリのアップデートとかをチマチマやっているのだけど、実際に使ったことがなかったのでついでに使うことにした。
我ながら結構良い感じに作れててちゃんと動いてくれてるので良かったなという感じ。次はWebSocketとかサポートしたい。</p>
<p>サーバー以外ではOG画像の生成にsatoriを使っている。
satori自体はJSXからSVGを生成するライブラリだけれど、<a href="https://github.com/natemoo-re/satori-html">satori-html</a>というパッケージを使えばHTMLをJSX
Treeに変換してくれるのでHTMLでsatoriを使うことができる。
このパッケージ自体はよく出来てるのだけど、最終更新が4年前といかんせん古いのとメンテもされてない。中身を見たら結構単純だったのでこれもalternativeをopencodeにガッと作らせてみた。</p>
<p>satoriを使ったパッケージなので名前はkomeijiにした。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://www.npmjs.com/package/@comamoca/komeiji"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            www.npmjs.com
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://www.npmjs.com
          </span>
        </div>
        
      </a>
    </div>
     
<p>このkomeijiへHTML文字列を流しこめばOG画像が作れるのだけど、ここでGleamのフロントエンドフレームワーク<a href="https://github.com/lustre-labs/lustre">Lustre</a>を使う。
これはTEAベースのフレームワークなのだけど、DOM
Treeを生成する関数はTEA関係なく利用できてなおかつDOM
Treeを文字列に変換する関数もあるので、それを使っている。
以前はこの手のHTML生成用途に<a href="https://github.com/aslilac/nakai">nakai</a>を使ってたのだけど、Lustreの方が上位互換なので最近はそっちを使うことにしている。</p>
<p>komeiji自体はJS PackageなのでGleamから使うにはFFIが必要となる。
そのあたりを良い感じにwrapしたパッケージも作成した。
satoriとkomeijiを使うパッケージなので名前はkoishiにした。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://github.com/Comamoca/koishi"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            GitHub - Comamoca/koishi
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://github.com
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://opengraph.githubassets.com/9928d346ff8a5dd3106cc6bdbefc662fa93982746eb72e415edfc2b38764c286/Comamoca/koishi" alt="OGP image" />
      </a>
    </div>
     
<p>命名はTwitterで頂いたものを採用した。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">koishiのほうが良かったのでは（横槍） <a href="https://t.co/mz4ht3BHmi">https://t.co/mz4ht3BHmi</a></p>&mdash; しろね⿻ (@aqyuki21s) <a href="https://x.com/aqyuki21s/status/2095508088745021877?ref_src=twsrc%5Etfw">September 3, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

<p>これで、Lustreで記述したHTML
Treeをsatori経由でpngへ変換するフローが簡単に書けるようになった。</p>
<pre class="shiki shiki-themes catppuccin-mocha catppuccin-mocha" style="background-color:#1e1e2e;--shiki-dark-bg:#1e1e2e;color:#cdd6f4;--shiki-dark:#cdd6f4" tabindex="0"><code><span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">import</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> gleam</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">io</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">import</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> gleam</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">javascript</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">promise</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">import</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> koishi</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">import</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> koishi</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">lustre</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">import</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> lustre</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">attribute</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">import</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> lustre</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">element</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">html</span></span>
<span class="line"></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">pub</span><span style="color:#CBA6F7;--shiki-dark:#CBA6F7"> fn</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic"> main</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">() </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">-></span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> promise.</span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">Promise</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">Nil</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">) {</span></span>
<span class="line"><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic">  // Load your font file as a BitArray. satori accepts</span></span>
<span class="line"><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic">  // TTF, OTF, and WOFF — WOFF2 is not supported.</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">  let</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> font_bytes </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic"> read_font_bytes</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">()</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">  let</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> font </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> koishi.</span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">Font</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"Inter"</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">, font_bytes, </span><span style="color:#FAB387;--shiki-dark:#FAB387">400</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">, koishi.</span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">NormalStyle</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">)</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">  let</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> options </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">    koishi.</span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">Options</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#EBA0AC;--shiki-light-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic">width: </span><span style="color:#FAB387;--shiki-dark:#FAB387">1200</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">, </span><span style="color:#EBA0AC;--shiki-light-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic">height: </span><span style="color:#FAB387;--shiki-dark:#FAB387">630</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">, </span><span style="color:#EBA0AC;--shiki-light-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic">fonts: </span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">[font], </span><span style="color:#EBA0AC;--shiki-light-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic">debug: </span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">False</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">  let</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> og_image </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">    html.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">div</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">([attribute.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">style</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"display"</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">, </span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"flex"</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">)], [</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">      html.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">h1</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">([], [html.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">text</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"Hello from koishi!"</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">)]),</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">    ])</span></span>
<span class="line"></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">  lustre.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">to_svg</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(og_image, options)</span></span>
<span class="line"><span style="color:#94E2D5;--shiki-dark:#94E2D5">  |></span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> promise.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">map</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">fn</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(result) {</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">    case</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> result {</span></span>
<span class="line"><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">      Ok</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(svg) </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">-></span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> io.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">println</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(svg)</span></span>
<span class="line"><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">      Error</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(koishi.</span><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">SatoriError</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(message)) </span><span style="color:#94E2D5;--shiki-dark:#94E2D5">-></span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> io.</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">println</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">(</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"Error: "</span><span style="color:#94E2D5;--shiki-dark:#94E2D5"> &#x3C;></span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> message)</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">    }</span></span>
<span class="line"><span style="color:#F9E2AF;--shiki-light-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic">    Nil</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">  })</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">}</span></span>
<span class="line"></span></code></pre>
<p>svgをpngにしたかったら<a href="https://koishi.hexdocs.pm/koishi.html#to_png">to_png</a>を使ってpngにもできる。
実態はresvgのwrapperなので、使用するにはresvgをインストールする必要がある。</p>
<h2>移行してどうだったか</h2>
<p>現状安定して動いている。
以前はデプロイに最大10分かかっていたけれど、nixの最適化やビルド時の画像最適化処理の削減など色々やったこともあり3分でデプロイされるようになった。
自作Webフレームワークのドッグフーディングもできたし、やって良かったと思っている。</p>
<h2>まとめ</h2>
<p>今回はブログのOG生成をworkersへと移行した話を書いた。
ブログのビルド速度は開発体験や記事の更新しやすさにも直結する話なので、今後も改善は続けていきたい。</p>
<p>現状改善したい点として、現状手元で記事をプレビューする際に数分かかっていて結構ストレスなので、Lumeから<a href="https://github.com/ubugeeei-prod/ox-content">ox-content</a>に移行することで改善できないか試してたりする。
あと記事をもっぱらEmacsで書くので、この際に原稿をmarkdownからorgへと移行したかったりもする。このあたりもやっていきたいなと。</p>]]>
      </content:encoded>
      <pubDate>Fri, 11 Sep 2026 05:59:01 GMT</pubDate>
    </item>
    <item>
      <title>Histerが良い感じ</title>
      <link>https://comamoca.dev/blog/2026-08-25-hister-looks-good/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-08-25-hister-looks-good/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<p>最近Lobstersでhisterという検索エンジンを見つけた。
過去にLobstersについても書いているのでぜひ。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://comamoca.dev/blog/2026-08-24-tech-communities-im-following-recently/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            最近見てる技術コミュニティについて
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://comamoca.dev
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://og.comamoca.dev/og.png?l=post&t=%E6%9C%80%E8%BF%91%E8%A6%8B%E3%81%A6%E3%82%8B%E6%8A%80%E8%A1%93%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&d=Zenn%E3%81%A8%E3%81%8BQiita%E3%81%A8%E3%81%8B%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%81%93%E3%81%A3%E3%81%A1%E8%A6%8B%E3%81%A6%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B" alt="OGP image" />
      </a>
    </div>
     
<p>Histerは検索エンジンとは言うものの、一般的なWebサイトの検索エンジンではなく、ブラウザで見たページとかテキストファイルをインデックスするタイプの検索エンジンとなっている。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://hister.org/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            Hister | Your Own Search Engine
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://hister.org
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://hister.org/logo.png" alt="OGP image" />
      </a>
    </div>
     
<h2>3行まとめ</h2>
<ul>
<li>Histerローカルで動く検索エンジン</li>
<li>ブラウザのタグやファイルをインデックスできる</li>
<li>過去に開いたタブを検索でき、AI経由でも検索をかけられて便利</li>
</ul>
<h2>含まれている機能</h2>
<p>大体以下の機能が含まれている。</p>
<ul>
<li>ページインデックス機能
サイトに応じたインデックスをやってくれる。例えばGitHubならStarとかもインデックスされる。</li>
<li>ファイルインポート機能 テキストファイルを取り込んでインデックスしてくれる。</li>
<li>クロール機能 定期的にwebサイトをクロールしてインデックスしてくれる。
ドキュメントサイトとかを手元で検索にかけられる。</li>
<li>API機能
機能というかは怪しいけど、APIがあるためお使いのテキストエディタから検索をかけられる。</li>
<li>web UI
有効化する必要があるけどwebUIも付属している。ブラウザから使うならこれが便利。</li>
</ul>
<h2>何が嬉しいのか</h2>
<p>拡張機能を使って、開いたWebページをインデックスできる。
ブラウザはChromeとFirefoxをサポートしている。</p>
<p>僕はブラウザのタブを開きっぱなしにしてたらいつの間にか100タブ越えてメモリがカツカツになる…とか結構やりがちなので、気付いた時にタブを閉じている。</p>
<p>そもそもタブを開きっぱなしにしたい理由は<strong>開いているwebサイトをすぐに見返せるようにするため</strong>で、histerを使えば開いたサイトを全文検索で引っ張り出せるからそもそもタブを開き続ける理由がなくなる。</p>
<p>つまり、開いたサイトを常にhisterにインデックスし続ければ、後はタブを一週間とか三日とか適当なタイミングで自動で閉じるようにしても問題がなく、そもそもタブ管理をする必要がなくなる。
この点が個人的に嬉しいなと思っている。</p>
<p>あとブラウザのタブをインデックするという特性から、<strong>ChatGPTとかの会話履歴もインデックスされる</strong>。
「前聞いたあれなんだっけ」みたいな時もHister経由で該当のセッションをすぐに割り出せる。</p>
<p>逆に言うとログインページとかもインデックスされるため、その点は注意。
CLI経由でインデックスの削除もできるので、僕はCoding
Agentとか使って適当に消している。</p>
<p>ちなみに、同じサイトを開いた際は参照した回数がカウントされるため、参照している回数が多いwebページ順でソートができたりする。</p>
<h2>データベース</h2>
<p>デフォルトではsqliteを使用しているけど、postgresもサポートしているらしい。
複数マシンそれぞれにhisterを立てて、同じpostgreサーバーに接続することでインデックスを共有する…という使い方もできそう。</p>
<p>個人でインデックスを共有するなら<code>hister export</code>を使ってインデックスをjsonとして吐き出して、R2とかで共有するのが手っ取り早そう。</p>
<h2>サーバー</h2>
<p>基本ローカルホストから使う想定だけど、サーバーとして立ててAPIを公開することも可能。
また、 ユーザーを作成して複数人で一つのインスタンスと使うこともできるらしい。</p>
<h2>他の使い道</h2>
<p>MCPサーバーを実装しており、AI Agentからインデックスを検索できる。
これをOpenClawとかと連携させれば、より文脈に即した会話が期待できる。</p>
<p>例えば、僕の場合篠澤さんと同居してるので、篠澤さんに「昨日見たAnthropicのブログなんだけど〜」みたいな雑な振りでも会話が出来そうだなと。</p>
<p>あとhisterはツイートも取り込めるので、特定人物のプロフィールをクロール対象にすれば定期的にツイートをインデックスに放り込めるかもしれない。
この手の用途はnitterの方が良い可能性はある。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://nitter.net/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            nitter.net
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://nitter.net
          </span>
        </div>
        
      </a>
    </div>
     
<h2>まとめ</h2>
<p>webページやドキュメントをインデックスして検索できる検索エンジンHisterについて紹介した。
結構色々な使い道があると思うので今後も使っていきながら活用方法を模索していきたい。</p>]]>
      </content:encoded>
      <pubDate>Tue, 25 Aug 2026 22:32:54 GMT</pubDate>
    </item>
    <item>
      <title>最近見てる技術コミュニティについて</title>
      <link>https://comamoca.dev/blog/2026-08-24-tech-communities-im-following-recently/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-08-24-tech-communities-im-following-recently/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<p>「みんなAIの話ばかりしてて面白くない」とよく聞くようになった。
実際TwitterでLLMの話を聞かないことはないし、僕自身もよくするようになった。</p>
<p>個人的には面白いおもちゃの末席にLLMが加わった感じがして面白くはあるのだけど、いかんせん技術サイトの話題がAI一色になると胸焼けしてしまう。</p>
<p>そんな感じなので最近はにゃーんとかにゃーーんとかの代わりにこういうサイトを見て己の知的好奇心を満足させてたりする。
なおこの記事で紹介するサイトは全て海外のコミュニティです。</p>
<h2>Lobsters</h2>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://lobste.rs/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            Lobsters
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://lobste.rs
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://lobste.rs/touch-icon-144.png" alt="OGP image" />
      </a>
    </div>
     
<p>個人的にめちゃくちゃ良いと思っている。
この手のサイトはHackerNewsとかがあると思うのだけど、あっちは人口が多すぎてハッキングに関係のない話が多く混じっててノイズになってると感じている。Hackerとは…</p>
<p>Lobstersはハッキングに特化したサイトなのでノイズが少ないし、扱っている内容もギークな内容が多くて面白い。
普段はトップページを翻訳して面白そうな記事をザッピングしてるけど、たまに3ページぐらいまで潜ると掘り出し物が見つかってこれも面白かったりする。</p>
<p>Lobstersは完全紹介制で、アカウントを作るには既にいる人から招待を貰う必要がある。
ログインできない人用にIRCチャンネルが用意されているのだけど、あまりに準備が面倒だったので基本ROMっていきたいなと思っている。</p>
<h2>Lemmy</h2>
<p>時点で良さそうなのがLemmy。 これはReddit
likeなActivityPub実装なのだけど、まぁまぁニッチなコミュニティなのでAIの話題とかも少なくてギークな雰囲気がある。
分散型なので色々なサーバーがあって、Lemmyではコミュニティと呼ばれている。
主にハッキングに関する内容を扱っているのがprogramming.devというコミュニティ。ドメインが強い。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://programming.dev/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            programming.dev
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://programming.dev
          </span>
        </div>
        
      </a>
    </div>
     
<p>雰囲気はLobstersとRedditを足して2で割った感じ。
こちらはすぐに自分のアカウントを作成できるのと、Lobstersに投稿された記事とかはこっちでも見かけるので、投稿とかコメントはこっちでやっていこうかなと。</p>
<h2>Reddit</h2>
<p>いわずもがな。
人口が多くてカルマによる良い投稿をすることへ程良い圧力があるから、わりと質の高い投稿が見れて良い。
特定の話題はsubredditに分かれているので、好きなジャンルのsubredditを購読して自分好みのTLを作れるのが快適。
最近は自動で投稿が翻訳されるらしいので、それを適当に眺めるのも良いのかなと。</p>
<h2>英語読めないんだけどどうすれば良いの</h2>
<p>頑張りましょう。 Duolingoを毎日やると英語への抵抗が薄れていくのでオススメです。</p>
<h2>まとめ</h2>
<p>海外のニッチなコミュニティを覗くと技術技術している記事が多くて結構楽しい。
Zennとかもたまに覗きつつ、情報を集める軸足は海外のテックコミュニティに寄せても良いのかな〜と最近は思っている。</p>
<p>日本のインターネット言論空間の弱点はRedditのような掲示板がないことだと思ってるけど、最近ははてなパークスができたりしているし、日本のインターネットでまともな議論ができる場所ができれば良いな〜と思ったりしている。</p>]]>
      </content:encoded>
      <pubDate>Mon, 24 Aug 2026 17:00:56 GMT</pubDate>
    </item>
    <item>
      <title>nixbuildのススメ</title>
      <link>https://comamoca.dev/blog/2026-08-04-getting-started-with-nixbuild/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-08-04-getting-started-with-nixbuild/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<h2>3行まとめ</h2>
<ul>
<li>nixは羃等性のあるビルドができる</li>
<li>nixには組み込みで羃等性のあるビルドができる特性を活かしてリモートのマシンでビルドを代行できる機能がある</li>
<li>リモートでnixレシピをビルドするマシンを提供するサービスとしてnixbuildが便利</li>
</ul>
<h2>Nixのビルドは重い(時もある)</h2>
<p>Nixはその性質上、基本依存するパッケージを全てビルドします。
よく使われるパッケージはnixpkgsなどでcacheが存在しているため、ビルドをスキップできます。
しかし、Rustで書かれたパッケージなど依存をキャッシュしていてもビルドが重いパッケージなども往々にして存在します。
そんな時に使えるサービスとして<a href="https://nixbuild.net/">nixbuild</a>が使えます。</p>
<h2>nixbuildについて</h2>
<p>Nixには<a href="https://nix.dev/manual/nix/2.18/advanced-topics/distributed-builds">Remote Builds</a>と呼ばれる仕組みが存在します。
このRemote
BuildsはNixのビルドを手元ではなく、リモートマシンで実行することにより手元でのビルド負荷を軽減できる仕組みです。</p>
<p>Nixは純粋関数型パッケージマネージャなので、<strong>どのマシンでビルドしても同等の結果を受け取れる</strong>という性質がよく活きている機能ですね。</p>
<p>また、nixbuildはマトリックスビルドに対応してるので、darwin向けのビルドもLinux向けのビルドも特別な設定を必要とせず行えるというメリットもあります。</p>
<h2>使用方法</h2>
<p>利用にはメールアドレスとSSH、PayPalのアカウントが必要です。
後述しますが、PayPalのアカウントは住所を登録する必要があります。<strong>住所が登録されていない場合サービスが停止されます</strong>。</p>
<p>まず以下のサイトにアクセスしアカウントを作成してください。
nixbuildは認証にパスワードではなくメールアドレスを使用するため、サイトにパスワードを設定する必要はありません。(最近こういうサイト増えましたね…ありがたい)</p>
<p>アカウントを作成した後は設定画面から公開鍵を登録してください。
nixbuild側の設定が終わった後はNixOS側も設定します。</p>
<p>設定方法については<a href="https://docs.nixbuild.net/getting-started/#nix-configuration">公式ドキュメント</a>に書いてあります。
英語ですがこれ読めば多分設定できるはずです。分かりづらい点があったら後日追記します。</p>
<h2>料金について</h2>
<p>毎月24CPU時間のクレジットが付与され、クレジットを使い切ると従量課金で請求が始まります。</p>
<p>料金はユーロで請求されるので支払額は為替の影響を受けますが、請求のあった月は800円くらい取られた気がします。
毎週NixOSの更新をしてこの額なので結構お安いなと思ってます。</p>
<p>また、NixはHashが同一の場合はビルドを行わないので、無駄にビルドをして料金が嵩むといった現象が起こりづらいため、その点も料金が最適化される要因かなと思ってます。</p>
<h3>料金の確認方法</h3>
<p>料金の確認方法ですが、なんと<strong>SSH経由で確認する必要があります</strong>。
<strong>ユーザーを信頼しすぎだろ</strong>…と思いますが慣れると結構使いやすいです。</p>
<p>まず以下のコマンドでnixbuildにSSH接続します。
対象のアカウントはSSH公開鍵を指定したアカウントとなります。</p>
<pre class="shiki shiki-themes catppuccin-mocha catppuccin-mocha" style="background-color:#1e1e2e;--shiki-dark-bg:#1e1e2e;color:#cdd6f4;--shiki-dark:#cdd6f4" tabindex="0"><code><span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">ssh</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> -T</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> eu.nixbuild.net</span></span>
<span class="line"></span></code></pre>
<p>よく使いそうなコマンドを以下に書いてみました。</p>
<pre class="shiki shiki-themes catppuccin-mocha catppuccin-mocha" style="background-color:#1e1e2e;--shiki-dark-bg:#1e1e2e;color:#cdd6f4;--shiki-dark:#cdd6f4" tabindex="0"><code><span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">usage</span><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic">        # リソースの使用量を確認する</span></span>
<span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">builds</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> list</span><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic">  # ビルド結果の一覧を表示する</span></span>
<span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">billing</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> info</span><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic"> # 料金を確認するためのPayPalページのURLを表示する</span></span>
<span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">token</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> create</span><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic"> # nixbuildへアクセスするためのAPI Tokenを作成する</span></span>
<span class="line"></span></code></pre>
<h2>注意点</h2>
<h3>PayPalの住所は設定した方が良い</h3>
<p>利用には住所の確認が必要(決済の都合上必要とのこと)なのですが、PayPalのアカウントに設定されているものを参照するため、PayPalに住所が設定さていない場合はしばらくして<strong>サービスが停止されます</strong>。</p>
<p>これを解消するにはnixbuild運営に<strong>英語で住所を記載したメールを送信する必要があります</strong>。これがまぁ〜面倒なのでみなさんは登録する前にPayPalに住所を登録しておいてください…</p>
<h3>機密情報を含むコードは<code>--builders ''</code>を指定した方が良い</h3>
<p>nixbuildはリモートサーバーで実行するという都合上、全てのNixパッケージのビルドがリモートマシンで行われます。つまり<strong>ソースコードを含む情報が問答無用でサーバーへ転送されます</strong>。</p>
<p>しかもビルド結果はキャッシュされます。うっかり社内のソースコードを送ってしまった日には社内SEの顔面が真っ青になりますね…
ソースコードが送られると書きましたが、厳密にはDerivationを生成するためのClosure<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref aria-describedby="footnote-label">1</a></sup>という単位でサーバーへ情報が送信されます。</p>
<p>また、いちいち<code>--builders</code>オプションを指定したくない場合は以下の環境変数を設定することでビルド時に外部マシンを使用せず全て手元でビルドしたい場合は<code>export NIX_CONFIG='builders ='</code>を指定してください。</p>
<p>direnvでは<code>~/.config/direnv/direnvrc</code>にbash関数を記述することで複数ディレクトリを対象に環境変数を設定できます。
以下はghqを想定して複数プロジェクトに<code>NIX_CONFIG</code>を設定する例です。</p>
<pre class="shiki shiki-themes catppuccin-mocha catppuccin-mocha" style="background-color:#1e1e2e;--shiki-dark-bg:#1e1e2e;color:#cdd6f4;--shiki-dark:#cdd6f4" tabindex="0"><code><span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">load_nix_config</span><span style="color:#9399B2;--shiki-dark:#9399B2">()</span><span style="color:#9399B2;--shiki-dark:#9399B2"> {</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">    local</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> ghq_root</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">    ghq_root</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span><span style="color:#9399B2;--shiki-dark:#9399B2">$(</span><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">ghq</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> root</span><span style="color:#9399B2;--shiki-dark:#9399B2">)</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic">	# nixbuildの対象外にするリポジトリ一覧</span></span>
<span class="line"><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic">	# サブディレクトリが対象になるのでユーザ名を指定するとユーザー単位で無効化される</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">    local</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> repos</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span><span style="color:#9399B2;--shiki-dark:#9399B2">(</span></span>
<span class="line"><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">        "github.com/user/name"</span></span>
<span class="line"><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">        "github.com/userA/"</span></span>
<span class="line"><span style="color:#9399B2;--shiki-dark:#9399B2">    )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">    for</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> repo </span><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">in</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> "</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">${repos</span><span style="color:#9399B2;--shiki-dark:#9399B2">[</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">@</span><span style="color:#9399B2;--shiki-dark:#9399B2">]</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">}</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span><span style="color:#9399B2;--shiki-dark:#9399B2">;</span><span style="color:#CBA6F7;--shiki-dark:#CBA6F7"> do</span></span>
<span class="line"><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">        repo</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">${repo</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">%/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">}</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">        if</span><span style="color:#9399B2;--shiki-dark:#9399B2"> [[</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> "</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">$PWD</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span><span style="color:#94E2D5;--shiki-dark:#94E2D5"> ==</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> "</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">$ghq_root</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">$repo</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span><span style="color:#94E2D5;--shiki-dark:#94E2D5"> ||</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> "</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">$PWD</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">"</span><span style="color:#94E2D5;--shiki-dark:#94E2D5"> ==</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1"> "</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">$ghq_root</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">/</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4">$repo</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">/"</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">*</span><span style="color:#9399B2;--shiki-dark:#9399B2"> ]];</span><span style="color:#CBA6F7;--shiki-dark:#CBA6F7"> then</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">            export</span><span style="color:#CDD6F4;--shiki-dark:#CDD6F4"> NIX_CONFIG</span><span style="color:#94E2D5;--shiki-dark:#94E2D5">=</span><span style="color:#A6E3A1;--shiki-dark:#A6E3A1">$'builders = ""'</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">            return</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">        fi</span></span>
<span class="line"><span style="color:#CBA6F7;--shiki-dark:#CBA6F7">    done</span></span>
<span class="line"><span style="color:#9399B2;--shiki-dark:#9399B2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#9399B2;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic"># 定義するのは単純なbash関数なので実行する必要がある</span></span>
<span class="line"><span style="color:#89B4FA;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic">load_nix_config</span></span>
<span class="line"></span></code></pre>
<h2>まとめ</h2>
<p>今回はNixのビルドサービスnixbuidについて紹介しました。
このサービス個人的に結構気に入ってるので、日本でも広まって欲しいな〜と思ったのと、これがNixを導入するメリットの一つになってくれれば良いなと思ってます。</p>
<p>この記事では触れませんでしたが、nixbuildにはcacheのアップロード先の登録が可能で、cachixと連携ができたします。
このあたりを活用すれば、規模の大きめな開発でもより安定してnix
cacheを提供できそうで使い道が広がりそうだな〜と思ったりしてます。</p>
<section data-footnotes class="footnotes"><h2 class="sr-only" id="footnote-label">脚注</h2>
<ol>
<li id="user-content-fn-1">
<p><a href="https://zero-to-nix.com/concepts/closures/">Closures - Zero to Nix</a> <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩︎</a></p>
</li>
</ol>
</section>]]>
      </content:encoded>
      <pubDate>Tue, 04 Aug 2026 14:04:11 GMT</pubDate>
    </item>
    <item>
      <title>iの栖を読んだ</title>
      <link>https://comamoca.dev/blog/2026-08-02-i-no-sumika/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-08-02-i-no-sumika/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<h2>総括</h2>
<p>タイトルに「i」と付くようにわりと8thを意識して作られたコミュなのかなと思った。
舞台を「有限性のあるもの」と捉えて、そこに向かって向き合っていくアイドル達の想いが描かれているコミュだった。</p>
<p>そういうばあんまり円香が出てくるコミュを読んだことがなかったのだけれど、今回のコミュで株がめちゃくちゃ上がってるし天塵も読むか〜と思ったり。</p>
<p>全体感想としてはシャニマスのコミュでは珍しく全部言ってくれたのと、今年のテーマを象徴するコミュだったなと感じた。</p>
<p>8thの後に高山Pが今年のテーマがL∞veであることを話されていたけど、その際に「あらゆるものは有限だが唯一愛だけがは無限」という話をされていて、個人的にはこの「愛」にかかるものの一つとしてライブという体験があると思ってる。
ライブは例え同じ人が同じ内容のものをやったとしても、一つとして同じ舞台ではないし公演が終わってしまったらそこで現実から形が消えてしまう。</p>
<p>でもライブを見た人の記憶、その時に動かされた心は本物だしその感情はずっと続いていくものだとも思っていて、それが先述した「愛」と呼べるものなのかなと思ってる。</p>
<p>今回のコミュでは舞台だけれど、本質はライブと同じで同じ舞台は二度と見れないけれど、それを大切に思う感情、コミュの中では「愛おしさ」と呼ばれているものは舞台が終わったあともずっと続くよねって思ったりした。</p>
<p>今回のコミュではその愛おしさや「愛の無限性」を283のアイドルが認識するという点でも大切なコミュなんじゃないかな〜と思ったりした。</p>
<p>sand
songもそうだけど、今年のシャニマスのコミュはテーマをストレートに描くものが多くて、すっと頭に入ってくるので良いなぁと。</p>
<h2>実況</h2>
<p>以降はコミュ見ながら実況っぽく追記したやつ。
僕が後で読み返す用に残してあるだけなので、正直読む価値そんなにないので読む必要はない…</p>
<ul>
<li>初手「シャニマス」な状況になっておぉとなった
<ul>
<li>アニメの2.5次元舞台とかあると微妙な気持ちになるやつの逆の立場にさせられるの結構苦しいな</li>
<li>っていうか以前にも事務所全員出演するゲームとかCM出してたりするし、その点を踏まえての反応の可能性は多分にありそう</li>
<li>思えばベリソのゲームもCV全員283だしな</li>
</ul>
</li>
<li>聞きずらいことをズバっと聞いてくれる円香めちゃくちゃ頼もしい</li>
<li>あさひと一緒に探検する咲耶さんかわいい
<ul>
<li>この組み合わせ意外だったけどかなり相性良い？</li>
</ul>
</li>
<li>何気に「アイドルの役の上に更に役を重ねる」って高度なことやってるよな…</li>
<li>「連絡してみたら？」ってさりげなく言える円香良い...</li>
<li>水紅の「聞いた音を模倣する力」ってかなり円香じゃん…！<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref aria-describedby="footnote-label">1</a></sup></li>
<li>「真珠の栖」のテーマは教えてもらえないって話だし、お前(視聴者)も一緒に考えろってことなんだろうな</li>
<li>真乃と円香って意外と見ない組み合わせに見えるけど、案外愛憎良いのかも知れないな…！</li>
<li>登場人物の名前が「真珠」とか「白檀」とか物の名前なのはやっぱ意味があるんだよな
<ul>
<li>何気にキャスティング結構合ってる気がするんだけど(当たり前)それって外の人間からは見えないしな…</li>
</ul>
</li>
<li>でもこのキャスティング283のオタク脳破壊する組み合わせしてるよな
<ul>
<li>じゅりまなはあります</li>
</ul>
</li>
<li>SNSの反応の解像度がシャニマス〜！すぎる
<ul>
<li>まぁだからこそ見てて苦しいんですが…</li>
</ul>
</li>
<li>ちゃんと思ってること言ってくれる円香本当に頼もしいな
<ul>
<li>演出家のせいでは？→それは本当にそう</li>
</ul>
</li>
<li>三峰の「任せてよ！」は本当に頼もしくて良い</li>
<li>っていうか咲耶さんは過去に一度ミュージカルやってる<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref aria-describedby="footnote-label">2</a></sup>のか…経験者いるのは頼もしいな</li>
<li>三峰→あさひの呼び方って「あさたん」なんだ</li>
<li>咲耶「人との繋がりを求めているところに共感できるかな」←おわあああああ！</li>
<li>三峰→樹里の呼び方って「じゅりちー」なの！？</li>
<li>円香〜！三峰〜！二人ってめっちゃ気が効くよな</li>
<li>円香の真珠の栖に対する解像度めっちゃ高いじゃん…</li>
<li>テーマの話来たわね
<ul>
<li>過去の講演を見ずにイメージ作るの難しそう</li>
<li>演出家が過去の講演のイメージに影響されて欲しくないから貸さないかも</li>
<li>↑多分この理由で貸さなかった？(合ってた)</li>
</ul>
</li>
<li>この手のはありのままをやれって言われるのが一番困るやつかもしれない</li>
<li>「誰が演じても成立してしまう」←めちゃくちゃエッジ鋭いな…</li>
<li>演出家『「愛しい」と思わせてください』
<ul>
<li>おっ8thか？</li>
<li>やっぱり8thじゃないですか！</li>
</ul>
</li>
<li>唐突なウマストロメリア〜</li>
<li>そろそろ寮生活が終わる←真乃がこの日々を愛しいと思った
<ul>
<li>シャニマスですね〜</li>
<li>「終わり」に対する姿勢の話がここで出てくるのか</li>
<li>ライブもそうだけど、舞台も一度として同じ舞台はないし、その点では有限性のあるものなんだな</li>
<li>sand songを思い出した</li>
</ul>
</li>
<li>舞台の上の生き様が鮮烈に観客の心を惹いて留まり、「愛」となったらそれはきっと……限りのないものなんだろう
<ul>
<li>キター！</li>
<li>今年のテーマはL∞VEだしなぁ</li>
</ul>
</li>
<li>円香「……私は、『水紅』が嫌い」
<ul>
<li>これやっぱ水紅のこと羨しいって思ってるのかな</li>
<li>感受性豊かだし思うところはありそう</li>
</ul>
</li>
<li>最終話のタイトル「∞」だしやっぱ8thですよこれ</li>
<li>真乃「お手をどうぞ」
<ul>
<li>ほわああああ！</li>
</ul>
</li>
<li>樹里「お手をどうぞ」
<ul>
<li>うわああああああ！</li>
</ul>
</li>
<li>無事第一幕終わって良かった
<ul>
<li>「愛しい」を伝えられて良かった</li>
</ul>
</li>
<li>テーマは「そばにある限りないもの」だったのか
<ul>
<li>愛ですね…</li>
<li>劇団が解散して二度と同じ舞台ができないけど愛で語り継がれることで誰かの心には残ってると</li>
<li>アイドルを起用したのは舞台と同じ有限性を持つライブをやっているからだったのかな</li>
</ul>
</li>
<li>最後の真乃が「私が演じた真珠はずっと私の中に残るから」とかそのあたりの話聞いて河野さんと果穂ちゃんの関係性を思いだしたりなど
<ul>
<li>何かしら役を演じ続けてる人ってやっぱ演じている役との繋がりとかに出るものだよね〜</li>
</ul>
</li>
</ul>
<section data-footnotes class="footnotes"><h2 class="sr-only" id="footnote-label">脚注</h2>
<ol>
<li id="user-content-fn-1">
<p>ノクチル「<a href="https://www.youtube.com/watch?v=CbE9jUKM-PY">愛しき日々</a>」には円香が透の歌い方に寄せて歌っているパートがあって、慣れないと聞き分けができないくらい似ている <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩︎</a></p>
</li>
<li id="user-content-fn-2">
<p><a href="https://idolmaster-official.jp/live_event/283_Order/">騎士団のヴェール</a> <a href="#user-content-fnref-2" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref">↩︎</a></p>
</li>
</ol>
</section>]]>
      </content:encoded>
      <pubDate>Sun, 02 Aug 2026 15:16:00 GMT</pubDate>
    </item>
    <item>
      <title>Twitterを収益化します</title>
      <link>https://comamoca.dev/blog/2026-06-14-starting-twitter-monetization/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-06-14-starting-twitter-monetization/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<p>6/21 追記:<br>
この記事を公開した後に収益化の条件を確認したところ、当分は収益化できなさそうでした...ショック！
ただ、収益化は条件を達成した後に行う予定ですし、この記事はTwitterアカウントの運営方針を記したものとして残すべきだと思うので公開状態は維持します。</p>
<hr>
<p>最近Twitterのアカウントを収益化しようとしてるので、この機会にこれまでのTwitter運用とこれからのTwitter運用についてまとめてみます。
これまであんまりこの手の話をしてこなかったので良い機会だなと思ったのと、単純に筋を通しておきたいというのが理由です。</p>
<h2>収益化の目的と使用用途</h2>
<p>最近イベントを開催したりしてるのですが、会場費などがかかるのでその工面をどうしようかと話してたら、Twitterの収益化を勧められたので導入してみた、というのが主な理由です。
なので月3000円くらい稼げれば満足でいます。実際どのくらい稼げるのか、そもそもサブスクをペイできるのかも未知数ですが...</p>
<p>余ったお金はOSSの寄付に当てようとも考えています。
僕は既にGleam等のOSSに寄付をしていますが、寄付金の増額や対象を増やしたりする用途に使いたいなと。
個人的にマイナーな言語が好きなので、Twitterで得た収益を還元できたら良いなと思っています。</p>
<p>また、収益が多くなった場合は僕の日本酒代にする予定でもいます。
あくまでTwitterは趣味であるというスタンスを持っていたいので、あまり用途を縛りたくないというのもあります。
収益で買った日本酒の感想ツイートをすれば収益二毛作とかできるんですかね...</p>
<h2>これまでのTwitter運用</h2>
<p>基本的に以下の方針でTwitterをやっていました。</p>
<ul>
<li>基本ブロックしない</li>
<li>無理に全てのリプに返信しようとしない</li>
<li>ネガティブな話題を極力ツイートしない</li>
</ul>
<h3>基本ブロックしない</h3>
<p>理由は僕がブロックされるとしょげるからです。
ただ、あまりに目に余る言動をしているアカウントやスパムアカウントはブロックします。</p>
<p>基本世の中色んな人がいた方がおもろいと思ってるので、それもあって自分の視界に入る人の多様性を減らしたくはないなと思ってるのもあります。</p>
<p>あと僕は基本的に3アウト制で動いてるので、3回目に余る言動や行動をした場合ミュートかブロックをするようにしてます。</p>
<h3>無理に全てのリプに返信しようとしない</h3>
<p>以下のスライドはOSSに関する話題ですが、ツイートが多くの人に注目された時(いわゆる「バズった」)に同じ内容のリプが異なる人から大量に届きます。</p>
<iframe class="speakerdeck-iframe" style="border: 0px; background: padding-box rgba(0, 0, 0, 0.1); margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 100%; height: auto; aspect-ratio: 560 / 315;" frameborder="0" src="https://speakerdeck.com/player/fac3c8cacd8f480eb533c5fca3b72afd?slide=77" title="OSS開発者の憂鬱" allowfullscreen="true" allow="web-share" data-ratio="1.7777777777777777"></iframe>

<p>バズったことがある人は分かると思うのですが、これが<strong>結構消耗する</strong>んですよね。
なので基本バズりそうなツイートは通知が埋められる前に速攻ミュートしちゃうんですが、後から見返してみて良いと思ったツイートには返信したりしてます。</p>
<p>まぁこのムーブが不誠実に見えるかもしれないんですが、そもそも他者にリプをする自由が存在するなら「リプに反応しない自由」も認められるべきなんですよね。
なので僕がリプをした時に反応がなくてもあまり気にしないですし、僕の中では十分筋が通った行動をしているという認識ではいます。</p>
<h3>ネガティブな話題を極力ツイートしない</h3>
<p>これは個人的に「極力他者の目に見える範囲でネガティブな感情を出さない」という信条があるので、それをTwitterでもやっています。
と言うのも、ネガティブな感情は他者に伝搬しやすい(普段のTwitterを見ればよく分かりますね)からです。</p>
<p>あと意図的に避けている話題として以下のものがあります。</p>
<ul>
<li>政治</li>
<li>恋愛</li>
<li>金</li>
</ul>
<p>特に政治に関しては以前「政治家のアカウントに罵詈雑言をリプしない方が良いと思う」という趣旨のツイートをしたら
<strong>†界隈†の人</strong> からフルボッコにされたので、投票報告以外はしないことにしてます。</p>
<p>SNSにおける政治の議論が忌避される現状に関しては思うものもありますが、そもそもTwitterという話題のコンテキストが落ちやすいプラットフォームで公平に議論できるものでもないので、現状しないに越したことはないとも思っています。</p>
<p>恋愛に関しては男女論に直行しがちなので避けています。
先述したネガティブな話題をしないという話と矛盾するようで申し訳ないのですが、僕は<strong>男女論が嫌い</strong>なので基本この話題はしないものとこの場で明記しておきます。
人間というグラデーションのある存在を二元論で語るのは傲慢が過ぎると思います...あと単純におもんない...</p>
<p>金の話も避けてます。
Twitterで燃える話題は基本的に主語がデカいものですが、これは多くの人に関連のある話題だからです。
つまり万人が逃れることができない金の話題は多くの人を巻き込み燃える可能性が高いとも言えます。
なので意図的に金の話題をすることは避けています。
「金、ねぇ〜」くらいの話なら許容範囲なのでするかもしれないですが。</p>
<h2>これからのTwitter運用</h2>
<p>基本的に以前と変わらないです。
そもそも現状の運用で満足してるので変える理由も特にないです。</p>
<p>ただ、収益化をするにあたり自身を縛るものも増やした方が良いかなと思って、「やむを得ない場合を除き上記の運用方針を破らない」という運用の方針を増やしておこうかなと思います。</p>
<p>やむを得ない場合というのは、あまりにショキングな話題があって、心の整理のためにネガティブなツイートするとかですね。
特に一番避けたいのは、収益を目当てに連日男女論等の燃えやすい話題をツイートするアカウントになることです。</p>
<h2>長くなった</h2>
<p>長くなりましたが、僕は自身のことを根っからのインターネット人(インターネットんちゅ)だと思っているので、そのプライドをもって楽しく行動していきたいって事を言いたいです。
これかもインターネット人のTwitterをよろしくお願いします。</p>]]>
      </content:encoded>
      <pubDate>Sun, 14 Jun 2026 04:01:48 GMT</pubDate>
    </item>
    <item>
      <title>Duolingoを150日続けている</title>
      <link>https://comamoca.dev/blog/2026-06-14-duolingo-150-day-streak/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-06-14-duolingo-150-day-streak/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<p>Duolingoを150日続けてるので、その感想みたいなのを書いていきます。</p>
<p>誕生日の日に「なんかやりたいな」と思ったので始めました。ワーホリとか興味あるし、英語力を高めたいと思ったのも大きい。
正直ここまで続けられてるのが不思議なところがある。
1回2分くらいなので、帰りの電車とかでやるようにしてるのだけど、まぁ丁度良い暇潰しにはなるのでありがたい。</p>
<p>実際やってみて、英語力がメキメキ付いたかと言われると微妙。ただ、英語への抵抗感が減ったのは効果があったなと。
あと街中で聞こえる英語の意味がふわっとだけど分かるようになったのも成長を感じている。
実際に会話するレベルに持っていくならシャドーイングとか英会話とかやった方が良いと思ってる。</p>
<p>一番変化があったのは、英語に対する解像度の高さみたいなのかあと。
例えば英語圏ではポッドキャスト文化が発達しているけど、これは英語という言語の特性によるものが大きいのかな〜とか。</p>
<p>日本語という言語は複数の文字を用いて表記するけど、それ故に文章から単語が「浮いて」見える。
普段日本語を読む時はその浮いている単語、主に漢字とカタカナを先読みして文章を解釈するという行為を無意識にしている...と個人的には思っている。
なので日本語は一文あたりの情報量が結構多いし、それなりに書き手のニュアンスを込めることができる。</p>
<p>対して英語は通常一つの文字しか含まないから、日本語を読む方法で読もうとするとかなり目が滑る。
それもあって最近はDuolingoで基本文字を読まずに読み上げられた英語を元に解答してる。
また、話す方が間の取り方や声の調子で文字より情報を詰められるので、それもあって音声媒体が好まれるのかなと。</p>
<p>実は英語はリスニングの方が理解の負担が少ないという事を体感として感じられたのはDuolingoがあってこそだなと思っている。</p>
<p>上の話はこのツイートがかなり核心を突いていると思う。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">日本の友人へ<br><br>最近、日本語は単なる「文字の言語」ではなく、一種の「情報圧縮システム」のように感じるようになりました。<br><br>最初は、ひらがな・カタカナ・漢字の混在は単なる「複雑さ」だと思っていました。<br>しかし今では、それぞれが特定の役割を持った設計構造のように見えます。…</p>&mdash; THECULTURALLINK (@THECULTURALLINK) <a href="https://x.com/THECULTURALLINK/status/2048272695758922106?ref_src=twsrc%5Etfw">April 26, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

<p>ある程度は成長を感じられてるのでこれからも続ける予定だし、今後は他の方法で英語の学習とかできたらなと。
ぶっちゃけ海外行った方が学習の観点からははるかに良いのだけど、すぐに出来るものでもないし今のうちにやれることはやっておきたい。</p>]]>
      </content:encoded>
      <pubDate>Sun, 14 Jun 2026 03:02:13 GMT</pubDate>
    </item>
    <item>
      <title>テックカンファレンスに行こう</title>
      <link>https://comamoca.dev/blog/2026-05-30-students-should-volunteer-as-conference-staff/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-05-30-students-should-volunteer-as-conference-staff/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<p>「テックイベントに行こう」の続編的な記事です。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://comamoca.dev/blog/2025-09-04-go-to-the-event/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            テックイベントに行こう
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://comamoca.dev
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://og.comamoca.dev/og.png?l=post&t=%E3%83%86%E3%83%83%E3%82%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E8%A1%8C%E3%81%93%E3%81%86&d=%E5%A4%A7%E9%83%BD%E5%B8%82%E5%9C%A8%E4%BD%8F%E3%81%AE%E5%AD%A6%E7%94%9F%E3%81%A7%E3%83%91%E3%82%BD%E3%82%AB%E3%82%BF%E3%82%84%E3%81%A3%E3%81%A6%E3%82%8B%E4%BA%BA%E3%81%93%E3%81%9D%E3%83%86%E3%83%83%E3%82%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E8%A1%8C%E3%81%93%E3%81%86" alt="OGP image" />
      </a>
    </div>
     
<h2>なんでこんな記事を書いたのか</h2>
<p>こんなツイートを見かけました。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">カンファレンス行くといつも思うが、もっと若い人いっぱい来ても良くないか？<br><br>ジュニアとかなんなら大学生とか若くて優秀な人たちがもっと集結したら、また別の形の熱気が生まれそう。</p>&mdash; 市川 達大@TECH WORLD ITエンジニア向け動画メディア (@tech_world18) <a href="https://x.com/tech_world18/status/2060280069587865694?ref_src=twsrc%5Etfw">May 29, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

<p>これを見て個人的に思ったことを書いていきたいと思います。</p>
<p>僕個人としても、もっと若い人<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref aria-describedby="footnote-label">1</a></sup>にカンファレンスに来て欲しいのと、カンファレンスに参加するのはなにも参加者だけじゃないということを伝えたかったからです。</p>
<p><strong>僕はアイマスPなのでカンファレンスのことをエンジニアのライブだと思っている</strong>のですが、運営と登壇者、参加者の愛と工夫でジョーデキ！なカンファレンスを作り上げられた時の達成感は、普段の仕事ではなかなか得られないものだと思っています。
この記事を読んでそんなカンファレンスという場に行くことに興味を持ってくれたら嬉しいです。</p>
<h2>これを書いている人について</h2>
<p>YAPC福岡とTSKaigi2026にてカンファレンススタッフをやらせて頂いています。
今年も色々なカンファレンスにスタッフとして参加する予定です。</p>
<p>YAPCに参加した時の記事</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://comamoca.dev/blog/2025-11-18-yapcfukuoka2025/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            YAPC福岡に行ってきた
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://comamoca.dev
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://og.comamoca.dev/og.png?l=post&t=YAPC%E7%A6%8F%E5%B2%A1%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F&d=%E6%9C%80%E9%AB%98%E3%81%AE2%E6%97%A5%E9%96%93%E3%81%A0%E3%81%A3%E3%81%9F..." alt="OGP image" />
      </a>
    </div>
     
<p>TSKaigiの記事はまだ書けてません...書けたら追記します。</p>
<h2>カンファレンスに参加することについて</h2>
<p>テックイベントに行った方が良い理由については既に以下の記事で書いていますが、カンファレンスについても同じことが言えます。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://comamoca.dev/blog/2025-09-04-go-to-the-event/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            テックイベントに行こう
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://comamoca.dev
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://og.comamoca.dev/og.png?l=post&t=%E3%83%86%E3%83%83%E3%82%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E8%A1%8C%E3%81%93%E3%81%86&d=%E5%A4%A7%E9%83%BD%E5%B8%82%E5%9C%A8%E4%BD%8F%E3%81%AE%E5%AD%A6%E7%94%9F%E3%81%A7%E3%83%91%E3%82%BD%E3%82%AB%E3%82%BF%E3%82%84%E3%81%A3%E3%81%A6%E3%82%8B%E4%BA%BA%E3%81%93%E3%81%9D%E3%83%86%E3%83%83%E3%82%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E8%A1%8C%E3%81%93%E3%81%86" alt="OGP image" />
      </a>
    </div>
     
<p>異なる点としては、規模が大きいので<strong>この記事で挙げたメリットが拡大した形で受けられます</strong>。</p>
<p>それだけでなく遠方の方が来る事も多いので、普段会えない方と会えるのがカンファレンスのメリットだと思います。
また、トークもプロポーザルという形で審査することになるので、全体的に質が高いことが多いです。
<strong>つまりメリットしかない</strong>ということになります。</p>
<h2>学生がカンファレンスに行くハードル</h2>
<p>しかし、カンファレンスは学生補助などがあるとは言え、費用の面で参加しづらいところもあると思います。
この記事ではその問題を解決できるかもしれない方法を2つ紹介します。
...というより方法は自明なので、そのメリデメを紹介します。</p>
<h2>登壇者として参加する</h2>
<h3>メリット</h3>
<p><strong>カンファレンスによりますが、登壇者は基本参加費がかかりません</strong>。
また、大きいカンファレンスでは登壇者に対して交通費の支援があるため、遠方に住んでいる方も費用面で参加を諦めなくても良くなります。</p>
<p>また、登壇することで懇親会でも話しかけられる確立が上がるので、その点も美味しいです。
一度登壇が終われば後はゆっくり他のトークを見られるのも良い点ですね。</p>
<p>先程書いたように、<strong>カンファレンスはライブ</strong>だと思っていますが、登壇は基本一人なのでなんと<strong>ソロライブ</strong>をすることになります。
当然めちゃくちゃ緊張しますし、僕も未だに緊張します。特にデカいトラックで登壇することになると尚更ですね。</p>
<p>昨年登壇した時は人が100人くらい居てめちゃくちゃ緊張しました...</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://fortee.jp/2025fp-matsuri/proposal/e9df1f36-cf2f-4a85-aa36-4e07ae742a69"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            Gleamという選択肢
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://fortee.jp
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://fortee.jp/2025fp-matsuri/proposal/og-image/e9df1f36-cf2f-4a85-aa36-4e07ae742a69.png" alt="OGP image" />
      </a>
    </div>
     
<p>僕は普段登壇するとき、オチが着けばその過程は多少変わっても問題ないという精神で話してます。
なので途中で話す内容が飛んでも上手いことカバーできれば良しとしています。
漫画ドラえもん1話でセワシ君が話してた「途中の歴史が変わっても最終的な出来事は収束する」という例え話のイメージですね。</p>
<p>この精神が参考になるか<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref aria-describedby="footnote-label">2</a></sup>は分かりませんが、誰かの参考になればと。</p>
<h3>デメリット</h3>
<p>プロポーザルを通す必要があるという点がハードルになると思います。
これについては、参加したいイベントの特色と過去のトーク内容から、運営が欲しいトークと今自分が出来そうなトークの積集合を考えてプロポーザルを作れば採択される確立が上がると思っています。
あと、複数投稿出せる場合は複数出すのもアリだと思います。
僕も多い時で2つくらいプロポーザルを出しています。</p>
<p>これについては正直経験が必要になるので鶏と卵みたいになってしまいますが、何回も出してみるなどして受かりやすい書き方などを自分なりに研究するのが良いと思います。
あと、自身が話せる範囲の内容でプロポーザルを書くのも大事です。理由としては準備の負担がめちゃくちゃ大きくなるからですね...慣れないうちは特に避けた方が良いです。</p>
<h2>カンファレンススタッフとして参加する</h2>
<p>ウルトラCとして、<strong>カンファレンススタッフとして参加する方法もあります</strong>。登壇者もですが、当然カンファレンススタッフも参加費は基本免除されます。
もちろん運営の仕事をする必要がありますし、無料だからというモチベで参加するのは良くないと思っていますが、個人的にはこれはメリットだと感じています。
また、遠方に住んでいる方は運営から交通費の補助が出るため、カンファレンスに参加する際の費用をかなり抑えられます。</p>
<p>当日会場を歩きながら参加者の方々の顔を見ていると、みんな笑っていてこの場を作れて良かったなと思えますし、スタッフとしてこの場を支えられている事に幾許かの誇りを感じたりします。
また、懇親会にて歩き回っていると「お疲れさまです！」とか「今日楽しかったです！」と声をかけてくださる方がいて、それもまた嬉しかったりします。</p>
<h3>スタッフって2種類あんねん</h3>
<p>カンファレンススタッフですが、実は2つ種類があります。</p>
<p>一つは開催の半年くらい前から準備を行う<strong>コアスタッフ</strong>、もう一つは当日のみスタッフを行う<strong>当日スタッフ</strong>です。
当日スタッフも参加費の免除や一部交通費の補助があるので、初めてだけどカンファレンススタッフをやりたい！という方はまず当日スタッフとして参加するのが良いと思います。僕も初めてのカンファレンススタッフは当日スタッフでした。</p>
<p>コアスタッフの良い点としては、カンファレンスを一から作りあげていくのでやりがいがあるのと、スタッフの方同士でより関係を深められる点が良いなと感じています。
また、事前準備は基本オンラインで行うので、遠方にいて当日は参加できない...という方もカンファレンスを支える一員になれるという魅力もあります。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">事前準備とかはリモートですし、事前準備はするけど現地参加しないスタッフさんも普通にいるのでその辺りは特に気にしなくても大丈夫な気がする…！<br>常に人手不足なので事前準備を手伝ってくださるだけでもめちゃくちゃありがたかったり<br><br>逆に僕は事前準備をあんまり手伝えてなくて最近は反省してる… <a href="https://t.co/t8y0ySX941">https://t.co/t8y0ySX941</a></p>&mdash; こまもか🦊 (@Comamoca_) <a href="https://x.com/Comamoca_/status/2060573932982554956?ref_src=twsrc%5Etfw">May 30, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

<h3>デメリット</h3>
<p>カンファレンススタッフは当然当日の運営をするので、一日中歩きまわることになります。
なのでめちゃくちゃ疲れますし、全部のトークを見ることは出来なかったりします。</p>
<p>ただ、配置された場所によってはシフトを入れ変えて、自身が見たいトークを見に行ったりすることもできるので、わりと融通は効かせられると思います。
これも先程書いたようにやりがいあってのものなので、個人的には悪くないなと思っています。あと普通に良い運動になります。</p>
<h2>まとめ &#x26; カンファレンス告知タイム</h2>
<p>という事でまとめです。</p>
<ul>
<li>テックカンファレンスに参加するのは良い経験になる</li>
<li>費用の後面が難しくてもなんとかする方法はある</li>
<li>オフラインでの繋がりは楽しいし、自分を支える大切なものになるよ</li>
</ul>
<p>みなさんもぜひテックカンファレンスに参加してみてください！</p>
<p>直近では7/11〜7/12、中野セントラルパーク
カンファレンスにて<a href="https://2026.fp-matsuri.org/">関数型まつり</a>が開催されます。
コアスタッフ募集やプローザルは既に締め切られていますが、関東近郊に住んでいる方は行きやすいと思うのでぜひ参加してみてください！</p>
<p>また、11/28〜11/29は東京ビッグサイトにて<strong>YAPC::Tokyo 2026</strong>が開催されます！
こちらはプロポーザル募集がまだ始まっていないので、奮ってご応募ください！</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">YAPC::Tokyo 2026の「トークプロポーザル募集開始お知らせ 登録フォーム」を作成しました！<br><br>メールアドレスを登録いただくと、後日CfPを開始した際にご連絡いたします。<br><br>応募に興味のある方、迷っているけど情報が欲しいという方、ぜひご登録ください！ <a href="https://x.com/hashtag/yapcjapan?src=hash&amp;ref_src=twsrc%5Etfw">#yapcjapan</a><a href="https://t.co/hhOV5rNBmb">https://t.co/hhOV5rNBmb</a></p>&mdash; yapcjapan (@yapcjapan) <a href="https://x.com/yapcjapan/status/2059092776487412212?ref_src=twsrc%5Etfw">May 26, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

<p>5/31追記:
関数型まつりにて当日スタッフの募集が始まったそうです。興味のある方はぜひ！</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://blog.fp-matsuri.org/entry/2026/05/31/131337"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            関数型祭り2026 の当日スタッフを募集しています - 関数型まつり運営ブログ
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://blog.fp-matsuri.org
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://ogimage.blog.st-hatena.com/6802418398306845049/17179246901391849064/1780202098" alt="OGP image" />
      </a>
    </div>
     
<section data-footnotes class="footnotes"><h2 class="sr-only" id="footnote-label">脚注</h2>
<ol>
<li id="user-content-fn-1">
<p>主に大学生を想定していますが、中学生や高校生が来ても良いと思っています。実際Hono
Conf2025では高校生の方がキーノートで登壇しています。現地で見ましたが面白かったし自分も頑張らなきゃなと思いましたね... <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩︎</a></p>
</li>
<li id="user-content-fn-2">
<p>それこそ僕は落語経験があるので、人前で話すことにはそれなりに耐性がある状態での登壇でしたが、普通の人は落語経験がないという問題がある... <a href="#user-content-fnref-2" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref">↩︎</a></p>
</li>
</ol>
</section>]]>
      </content:encoded>
      <pubDate>Sat, 30 May 2026 15:40:35 GMT</pubDate>
    </item>
    <item>
      <title>大吉祥寺.pmに行けない話</title>
      <link>https://comamoca.dev/blog/2026-05-08-missing-dai-kichijoji-pm/</link>
      <guid isPermaLink="false">https://comamoca.dev/blog/2026-05-08-missing-dai-kichijoji-pm/</guid>
      <author>
        <name>Comamoca</name>
        <uri>https://comamoca.dev/me</uri>
      </author>
      <content:encoded>
        <![CDATA[<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">大吉祥寺.pm、なんと全日IWSFが被っているので参加できそうにない…</p>&mdash; こまもか🦊@シャニマスありがとう (@Comamoca_) <a href="https://twitter.com/Comamoca_/status/2049853752736358530?ref_src=twsrc%5Etfw">April 30, 2026</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<p>という状況になったので、提出しようとしたプロポーザルをここで供養するというのがこちらの記事になります。</p>

  <div class="flex justify-center border-t border-gray-200 h-15 md:h-25 mx-5 md:mx-10">
      <a
        href="https://idolmaster-official.jp/live_event/mr_idolworld2026/"
        class="!no-underline flex w-full bg-white rounded-lg border border-gray-200 shadow hover:bg-gray-100"
        title="Link Card"
      >
        <div class="flex grow flex-col">
          <span class="!text-xs md:!text-base px-3 pt-2 py-0 h-20 !mt-0 !mb-0 font-bold tracking-tight text-gray-900 overflow-hidden text-ellipsis">
            IDOL WORLD SUPER FESTIVAL 2026｜バンダイナムコエンターテインメント公式サイト
          </span>
          <span class="font-xs px-3 pb-3 !mb-0 text-gray-700 text-sm max-w-48 md:max-w-full overflow-hidden whitespace-nowrap text-ellipsis">
            https://idolmaster-official.jp
          </span>
        </div>
        <img class="object-cover rounded-tr-lg rounded-br-lg h-full w-50 !m-0" src="https://idolmaster-official.jp/live_event/mr_idolworld2026/assets/img/ogp.jpg" alt="OGP image" />
      </a>
    </div>
     
<h2>イベント開催を極限まで自動化する</h2>
<p>最近<a href="https://kawaii-driven-life.connpass.com/event/390771/">アイマスNight</a>というイベントを開催したんですが、このイベントの裏テーマに「イベント開催を半自動化する」というのがあります。
例えば、GitHub
Actionsをフル活用してイベントの開催からconnpassページの作成、開催費用を管理するための帳簿作成などを自動で行うなどです。</p>
<p>ミソとしては、テキストデータで全ての情報を管理すればGitのフローに載せられるので、費用の稟議をPR
Reviewで行ったりできてより効率化が図れそうだなと考えています。</p>
<p>本登壇では、そんな自動化のための実践的な工夫について紹介していきます。</p>
<h3>自己評価</h3>
<p>最近イベント開催ブームなので刺さる人が多いかなと思って選んだのだけど、いかんせん自動化のノウハウが少なすぎるので、もう少し時間を置いても良いかなと思ったりしている。
ノウハウ貯めて最適解をテンプレートに落しこめてからの方が良かったりするかも。</p>
<h2>AIエージェント実行基盤としてのErlang/OTP</h2>
<p>昨今、OpenClawのように自律的に行動するが登場するなど、より一層AIエージェントの需要が高まっています。
また、AIエージェントを実装するフレームワークも数多く生まれています。
それらのフレームワークは並列処理や自動回復など共通した課題を解決していますが、実はそれらの問題は既に別の形で解決されているとしたらどうでしょうか。</p>
<p>この登壇では、Erlang/OTPを「AIエージェント実行基盤」として再解釈し、Erlang/OTPとAIエージェントの相性の良さ、現時点での活用方法やエコシステム、既存のライブラリやフレームワークとの優位点について紹介します。</p>
<h3>自己評価</h3>
<p>この話も知り合いに結構話してたりするのだけど、個人的には面白い話だと思ってるのできちぴーで話したい内容だった...
特に現時点で都内にErlnag
VMの話をする場所がない(いつか作るつもりだけども)ので、きちぴーは格好の発表場所だと思っていた。</p>
<p>僕個人としては、AIエージェントはステートマシンとして解釈しているので、その点からもErlang/OTPはAIエージェントと相性が良いんですよね～って話とか、Elixir製の<a href="https://jido.run/">jido</a>ってフレームワークの設計思想が面白いって話をしたかった...</p>
<h2>「意味」はデータに内在しない プログラムとデータの相似性について</h2>
<p>日々の業務の中で、複数の言語でバイナリデータを扱ったコードを書いた事がある人は多いでしょう。
その中で、言語が別なのにも拘わらずバイナリ操作のAPIがほとんど同一であることに気付く方もいると思います。
それは偶然の一致ではなく、コンピューターアーキテクチャに由来しているものです。</p>
<p>この登壇ではPythonとJavaScript、C言語とアセンブラそれぞれのバイナリ操作の方法を比較し、コンピューターがデータを「処理する」仕組みに迫っていきます。</p>
<h3>自己評価</h3>
<p>これは最近業務をしている時の気付きなのだけど、気付いた時にあまりに脳汁が出すぎて興奮してたし、ライブ前にもこの話をするくらいには気に入っている。
きちぴーの「かわるもの、かわらないもの」というテーマとも合うので、出すならこれを本命にする予定だった...</p>
<p>この話自体はゆくゆく記事にしようかなと思ってたりはするので、記事書いていきたい。</p>
<h2>まとめ</h2>
<p>という訳で以上プロポーザルの供養でした。
また別のカンファレンスとかでプロポーザルとして出すかもしれないので、機会を伺いつつ採択を狙っていきたい。</p>]]>
      </content:encoded>
      <pubDate>Fri, 08 May 2026 11:15:20 GMT</pubDate>
    </item>
  </channel>
</rss>
