<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <id>https://writings.hongminhee.org/feed.ja.xml</id>
  <link rel="self" type="application/atom+xml" href="https://writings.hongminhee.org/feed.ja.xml" />
  <link rel="alternate" type="text/html" href="https://writings.hongminhee.org/" />
  <generator uri="https://astro.build/">Astro</generator>
  <title>洪民憙雑記</title>
  <author>
    <name>洪民憙</name>
    <uri>https://hongminhee.org/</uri>
    
  </author>
  <updated>2026-07-15T16:04:10.000Z</updated>

  <entry>
    <title>ブログにActivityPub連携を追加した</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/07/fedified-blog/" />
    <id>https://writings.hongminhee.org/2026/07/fedified-blog/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/07/fedified-blog/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/07/fedified-blog/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/07/fedified-blog/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/07/fedified-blog/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-07-15T16:00:00.000Z</published>
    <updated>2026-07-15T16:04:10.000Z</updated>
    <content type="html">&lt;h1 id=&quot;ブログにactivitypub連携を追加した&quot;&gt;ブログにActivityPub連携を追加した&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://writings.hongminhee.org/2021/12/new-blog/&quot;&gt;自作の静的サイトジェネレーターJikjiでこのブログを作ってから&lt;/a&gt;、
もう五年近く経つ。当時の私はTypeScriptにも最新のウェブ技術にもまだ慣れておらず、
&lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;を実装したこともなかった。しかし今ではTypeScriptにも
最新のウェブ技術にも比較的慣れ、ActivityPubは私にとって重要な技術になった。
しかも曲がりなりにも&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;のメンテナーでありながら、
肝心のブログが連合していないことが、ずっと気になっていた。
そこでブログにActivityPub連携を追加することにした。&lt;/p&gt;
&lt;h2 id=&quot;既存スタック-jikji--php&quot;&gt;既存スタック: Jikji + PHP&lt;/h2&gt;
&lt;p&gt;このブログはもともと、自作のDeno製静的サイトジェネレーター&lt;a href=&quot;https://github.com/dahlia/jikji&quot;&gt;Jikji&lt;/a&gt;を
ベースにしていた。厳密には静的サイトとは言い切れず、
昔の&lt;a href=&quot;https://movabletype.org/&quot;&gt;Movable Type&lt;/a&gt;がそうだったように、単にHTMLを生成するだけでなく
PHPの一部も生成していたからだ。PHPは主にHTTPの
&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Content_negotiation&quot;&gt;コンテンツネゴシエーション&lt;/a&gt;に使っていた。ブラウザの&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTTP/Reference/Headers/Accept-Language&quot;&gt;&lt;code&gt;Accept-Language&lt;/code&gt;&lt;/a&gt;
ヘッダーを見て、漢字ハングル混じり文の朝鮮語、ハングル専用の韓国語、
英語、日本語のうち適切な言語を表示していた。それだけのことではあるが。&lt;/p&gt;
&lt;p&gt;すでにPHPを使っているのだから、PHPで薄くActivityPubを実装することも
一応検討した。しかしPHPを使っているといっても、自分の手で書いたコードでは
なくJikjiが生成してくれるものだったから使っていただけで、PHPを手作業で
書きたいとは思わなかった。新しい記事が公開されたら自動で&lt;code&gt;Create(Article)&lt;/code&gt;
アクティビティをフォロワーに配送しなければならないが、そのためにはどのみち
メッセージキューのような仕組みが必要になる。PHPにメッセージキューまで
組み合わせるとなると、私見では、PHPに見合う規模と複雑さを超えてしまう
気がした。そして何より、Fedifyがあるのに、わざわざゼロからActivityPubを
実装したくはなかった。&lt;/p&gt;
&lt;p&gt;そこでPHPを丸ごと取り除き、Fedifyを組み込むことに決めた。&lt;/p&gt;
&lt;h2 id=&quot;新スタック-astro--netlify&quot;&gt;新スタック: Astro + Netlify&lt;/h2&gt;
&lt;p&gt;まず最初の選択として、JikjiとPHPを捨て、静的なコンテンツを中心にした
ウェブサイトづくりに特化したJavaScriptフレームワーク&lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;を採用する
ことにした。すでに&lt;a href=&quot;https://fedify.dev/manual/integration#astro&quot;&gt;@fedify/astro&lt;/a&gt;という連携パッケージが存在していたことも、
Astroを選んだ大きな理由だった。&lt;/p&gt;
&lt;p&gt;ただし、既存のCSSやHTMLテンプレートはできる限り再利用した。今のウェブ
デザインに満足していたし、デザインの刷新まで手を出すと範囲が大きくなり
すぎる気がした。パーマリンクも完全にそのまま維持した。全体として、
訪問者が何が変わったのか気付かないくらい表面を保ちながら、技術スタック
だけを移行するのが目標だった。&lt;/p&gt;
&lt;p&gt;デプロイ先はCloudflare WorkersとNetlifyの間で迷ったが、Fedifyをまだ
Netlifyで動かしたことがなかったので、これを機にFedifyのNetlifyサポートを
追加することにした。静的サイトのホスティングでNetlifyは何度も使ってきたが、
エッジ関数を併用するのは今回が初めてだった。基本的には静的なアセット群で
ありながら一部の機能だけが動的に動く、という発想は、九十年代末にウェブ
サイトを作る際、CGIスクリプトだけを&lt;code&gt;/cgi-bin/&lt;/code&gt;ディレクトリに置いていた
やり方を思い出させた。&lt;/p&gt;
&lt;p&gt;以前はブログ記事をMarkdownファイルとして保存してGitにコミットし、
プッシュするとGitHub Actionsが静的サイトをビルドしてからSFTPでデプロイ
する、という流れだった。今ではGitHub Actionsをビルドパイプラインから
外せるようになった。Netlifyが勝手にビルドしてくれるからだ。結果として、
より単純になった。&lt;/p&gt;
&lt;p&gt;Astroにはおおむね満足しており、移行も比較的スムーズだった。五年前に
作ってからほとんど更新していなかったJikjiより優れているのは当然のことだ。
Jikjiはもう保守する理由がなくなったので、リポジトリをアーカイブした。&lt;/p&gt;
&lt;h2 id=&quot;astroにfedifyを組み込む&quot;&gt;AstroにFedifyを組み込む&lt;/h2&gt;
&lt;h3 id=&quot;fedifyastroの最新化&quot;&gt;@fedify/astroの最新化&lt;/h3&gt;
&lt;p&gt;ところがいざAstroにFedifyを組み込もうとすると、@fedify/astroが最新版の
Astro 7に対応していなかった。内部で使っているAstroのAPI自体はそれほど
変わっていなかったが、パッケージに明記された対応範囲とテストはAstro 5
までしかカバーしていなかった。結局、ブログにFedifyを組み込む前に、
まず@fedify/astroを直す必要があった。&lt;/p&gt;
&lt;p&gt;単にパッケージのバージョン範囲を広げただけではない。既存のテストは偽の
Astroコンテキストを作ってミドルウェアを直接呼び出すものだったので、
ViteのSSR設定やアダプター間の互換性、ビルド後のサーバーにおけるリクエスト
のルーティングといった問題は検出できなかった。そこでFedifyパッケージを
実際にパックして小さなAstroアプリケーションにインストールし、サーバーを
ビルドして起動したうえでHTTPリクエストまで送る、という互換性テストを
新たに作った。&lt;/p&gt;
&lt;p&gt;このテストは、Astro 5、6、7それぞれで、HTMLリクエストがAstroのページに
渡るか、ActivityPubとWebFingerのリクエストをFedifyが処理するか、それ以外
のパスではAstroの&lt;code&gt;404 Not Found&lt;/code&gt;レスポンスが維持されるか、といった点を
確認する。Astro 7についてはNode.jsだけでなくDenoとBunでもビルドを
試すようにした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/fedify-dev/fedify/pull/936&quot;&gt;この作業&lt;/a&gt;はすでにアップストリームにマージされており、Fedify 2.4.0に
含まれる予定だ。&lt;/p&gt;
&lt;h3 id=&quot;静的ページと動的エンドポイント&quot;&gt;静的ページと動的エンドポイント&lt;/h3&gt;
&lt;p&gt;Astroプロジェクト全体はサーバー出力としてビルドしつつ、既存のブログページ
はこれまで通りプリレンダリングするようにした。一方、WebFingerやアクター、
インボックス、アウトボックス、フォロワーコレクション、ActivityPubオブジェクト
のパスは、リクエストを受けた時点でFedifyが動的に処理する。@fedify/astroが
提供するミドルウェアはリクエストのURLと&lt;code&gt;Accept&lt;/code&gt;ヘッダーを見て、Fedifyが
処理すべきリクエストだけを横取りする。同じURLでも、HTMLをリクエストすれば
既存のAstroページが返り、ActivityPub表現をリクエストすればFedifyが作った
オブジェクトが返ることもある。&lt;/p&gt;
&lt;p&gt;結果として、訪問者が目にするブログは依然として静的サイトに近い。新しく
加わった動的な部分は、ほとんどがフェディバースの他のサーバーだけがアクセス
する場所にある。先ほどCGIを思い出したのも、この構成のせいだ。&lt;/p&gt;
&lt;h3 id=&quot;personとarticle&quot;&gt;&lt;code&gt;Person&lt;/code&gt;と&lt;code&gt;Article&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;ActivityPubを組み込むにあたっては、このブログで何をアクターとし、何を
オブジェクトとするかも決めなければならなかった。ブログのアクターには
&lt;a href=&quot;https://www.w3.org/TR/activitystreams-vocabulary/#dfn-person&quot;&gt;&lt;code&gt;Person&lt;/code&gt;&lt;/a&gt;タイプを選んだ。実際の公開作業はプログラムが自動でやってくれるが、
アクターが表しているのはブログのソフトウェアやサービスではなく、
この文章を書いている私自身だからだ。そのためハンドルは
&lt;code&gt;@hongminhee@writings.hongminhee.org&lt;/code&gt;で、アクターのウェブURLはこのブログを
指している。&lt;/p&gt;
&lt;p&gt;各ブログ記事には&lt;a href=&quot;https://www.w3.org/TR/activitystreams-vocabulary/#dfn-article&quot;&gt;&lt;code&gt;Article&lt;/code&gt;&lt;/a&gt;タイプを選んだ。タイトルと本文があり、独立した
パーマリンクを持つ長文の文書だから、&lt;code&gt;Note&lt;/code&gt;よりも意味的にしっくりくると
考えた。幸い、Mastodonをはじめとする主要なActivityPub実装の大半も
&lt;code&gt;Article&lt;/code&gt;をサポートしている。人間が読む既存のパーマリンクはそのままにしつつ、
ActivityPubオブジェクトには&lt;code&gt;/ap/articles/{year}/{month}/{slug}&lt;/code&gt;という形の
別のURIを与えた。&lt;code&gt;Article&lt;/code&gt;の&lt;code&gt;url&lt;/code&gt;は、あらためて既存のパーマリンクを指す。
ActivityPubオブジェクトのURIと、人間が読むウェブページのパーマリンクを、
はっきり分けたわけだ。&lt;/p&gt;
&lt;p&gt;多言語対応は、もう少し悩んだところだ。言語ごとのページをそれぞれ別の
&lt;code&gt;Article&lt;/code&gt;オブジェクトとして表現すると、同じ記事に対する反応やシェアが
複数のオブジェクトに分散してしまう。そこで、同じパーマリンクに属する
漢字ハングル混じり文の朝鮮語︵&lt;code&gt;ko-Kore&lt;/code&gt;︶、ハングル専用の韓国語
︵&lt;code&gt;ko-Hang-KR&lt;/code&gt;︶、英語︵&lt;code&gt;en&lt;/code&gt;︶、日本語︵&lt;code&gt;ja&lt;/code&gt;︶の各バージョンを、一つの
&lt;code&gt;Article&lt;/code&gt;にまとめることにした。タイトルと概要、本文には、それぞれ言語タグ
の付いた値をすべて入れてある。JSON-LDでシリアライズすると、それぞれ
&lt;code&gt;nameMap&lt;/code&gt;、&lt;code&gt;summaryMap&lt;/code&gt;、&lt;code&gt;contentMap&lt;/code&gt;として表現される。言語別の値を
処理しない実装のために、&lt;code&gt;name&lt;/code&gt;、&lt;code&gt;summary&lt;/code&gt;、&lt;code&gt;content&lt;/code&gt;にはデフォルト言語
の値も併せて入れた。英語版があれば英語を、なければ漢字ハングル混じり文の
朝鮮語をデフォルトとした。言語別のHTMLページは、&lt;code&gt;Article&lt;/code&gt;の&lt;code&gt;url&lt;/code&gt;にも
&lt;code&gt;hreflang&lt;/code&gt;属性の付いた&lt;code&gt;Link&lt;/code&gt;オブジェクトとして加えてある。&lt;/p&gt;
&lt;p&gt;こうしておけば、受信側のサーバーが多言語の値を理解できる場合は利用者の
言語に合ったタイトルと本文を選べるし、そうでなくてもデフォルト値は表示
できる。もっとも、私が知る限りほぼすべてのActivityPub実装は、こうした
多言語の自然言語値をまだきちんと表示できていない。
&lt;a href=&quot;https://github.com/mastodon/mastodon/issues/11013&quot;&gt;Mastodonのイシュートラッカーにはこのためのイシューが立てられているし&lt;/a&gt;、
&lt;a href=&quot;https://github.com/hackers-pub/hackerspub/issues/330&quot;&gt;Hackers&apos; Pubのイシュートラッカーにも似たような提案があるが&lt;/a&gt;、
実装される見込みはまだ立っていない。おそらくUIデザインの面でも検討が
必要になるだろう。&lt;/p&gt;
&lt;h2 id=&quot;fedifyをnetlifyで動かす&quot;&gt;FedifyをNetlifyで動かす&lt;/h2&gt;
&lt;p&gt;静的ファイルだけをデプロイするのと違い、ActivityPubサーバーにはデプロイ
が終わった後も残っていなければならない状態がある。まず、アクターの署名鍵
はデプロイのたびに変わってはならない。フォロワーの一覧も、次のデプロイで
消えてしまっては困る。この二つは&lt;a href=&quot;https://docs.netlify.com/build/data-and-storage/netlify-database/&quot;&gt;Netlify Database&lt;/a&gt;に保存した。&lt;/p&gt;
&lt;p&gt;インボックスで受け取ったアクティビティと、リモートサーバーに送る
アクティビティは、&lt;a href=&quot;https://docs.netlify.com/build/async-workloads/get-started/&quot;&gt;Async Workloads&lt;/a&gt;で作ったメッセージキューの中で処理する。
アクティビティの配送は相手サーバーの状態次第で遅くなったり失敗したり
しうるので、HTTPリクエストを受けた関数の中ですべて終わらせようとしては
いけない。キューに入れておけば、リクエストの受付と配送を切り離せるし、
失敗した処理も後で再試行できる。幸い&lt;a href=&quot;https://fedify.dev/manual/mq&quot;&gt;Fedifyはこうした処理をあらかじめ
抽象化してくれていて&lt;/a&gt;、バックエンドのアダプターも拡張できるように
なっている。ただ、NetlifyのAsync Workloads向けのアダプターはまだなかった
ので、FedifyがAsync Workloadsをメッセージキューとして使いながら、
Netlify Databaseに配送順序の状態を保存できるよう、
&lt;a href=&quot;https://github.com/fedify-dev/fedify/pull/934&quot;&gt;@fedify/netlifyというパッケージも作った。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;新しい記事をフェディバース︵fediverse︶に知らせるのは、また別の問題
だった。静的サイトのビルドが終わったからといって、実行中のActivityPub
サーバーがどの記事に変化があったのか自動的に分かるわけではない。そこで、
本番環境へのデプロイが成功すると、前回のデプロイと今回のデプロイとで
記事一覧を比較する。新しく追加された記事には&lt;code&gt;Create(Article)&lt;/code&gt;、内容や
更新日時が変わった記事には&lt;code&gt;Update(Article)&lt;/code&gt;、削除された記事には
&lt;code&gt;Delete(Article)&lt;/code&gt;アクティビティを作ってフォロワーに送る。再試行しても
同じ変更には同じアクティビティIDを使い、より古いデプロイが後から同期
されて最新の状態を巻き戻してしまわないよう、デプロイの順序も確認する。&lt;/p&gt;
&lt;p&gt;Netlifyにはデプロイプレビュー︵deploy preview︶とブランチデプロイ
︵branch deploy︶という機能があるが、これらの場合は連合機能を丸ごと
無効にした。プレビューのたびに同じブログを名乗るアクターが増えたり、
テスト用のデプロイが実際のフォロワーにアクティビティを送ってしまったり
すると困るからだ。ローカルではインメモリのストレージとキューで開発でき、
本番環境でのみ永続的なデータベースとキューを使う。&lt;/p&gt;
&lt;p&gt;ともあれ、そのおかげでFedifyは今やDeno DeployやCloudflare Workersに
加えて、Netlify Functionsもサポートするようになった。もちろん、Node.js、
Deno、Bunで動くのは相変わらず基本だ。&lt;/p&gt;
&lt;h2 id=&quot;おわりに&quot;&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今回の作業で、ブログにタイムラインや返信作成画面のようなソーシャル機能が
付いたわけではない。文章を書いて読むやり方も、既存のパーマリンクやデザイン
も、ほとんどそのままだ。ただ、このブログと各記事には、フェディバースで
通用する名前と住所ができた。読者は&lt;code&gt;@hongminhee@writings.hongminhee.org&lt;/code&gt;
をフォローして新しい記事を受け取れるし、各記事のActivityPubオブジェクトの
URIを検索して元の文章にたどり着くこともできる。&lt;/p&gt;
&lt;p&gt;Fedifyを保守しながら、他の開発者にActivityPubを実装する手段を提供して
きたし、&lt;a href=&quot;https://docs.hollo.social/ja/&quot;&gt;Hollo&lt;/a&gt;や&lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers&apos; Pub&lt;/a&gt;などを作りながらドッグフーディングも
それなりにやってきたが、すでに運用中のウェブサイト、それも静的なページで
できていたブログにFedifyを組み込むのは今回が初めてだった。おかげで
Astroインテグレーションの互換性テストとNetlifyサポートを追加することに
なったし、ドキュメントや単体テストを見ただけでは分からないデプロイや
運用上の問題にも直面した。Fedifyがソーシャルネットワークを新しく作る
ためだけに使われるのではなく、すでに存在するウェブサイトが自分の姿を
保ったままフェディバースに参加するためにも使えることを、確認できた。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>ハングル専用下の漢字教育について</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/04/hanja-education/" />
    <id>https://writings.hongminhee.org/2026/04/hanja-education/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/04/hanja-education/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/04/hanja-education/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/04/hanja-education/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-04-17T09:00:00.000Z</published>
    <updated>2026-04-17T08:51:46.000Z</updated>
    <content type="html">&lt;h1 id=&quot;ハングル専用下の漢字教育について&quot;&gt;ハングル専用下の漢字教育について&lt;/h1&gt;
&lt;p&gt;私は韓国語を書くとき、&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E5%B0%82%E7%94%A8%E6%96%87%E3%81%A8%E6%BC%A2%E5%AD%97%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E6%B7%B7%E3%81%98%E3%82%8A%E6%96%87&quot;&gt;国漢文混用体&lt;/a&gt;︵漢字ハングル混じり文︶を好んで使う。ブログの文章も、ソーシャルメディアの投稿も、漢字を混ぜて書くことが多い。漢字に対する個人的な愛着は確かにある。それでも、漢字教育を韓国の公教育で深化すべきだという主張には同意しない。この文章はその理由を説明する試みだ。&lt;/p&gt;
&lt;h2 id=&quot;教育のデフォルトは教えないである&quot;&gt;教育のデフォルトは「教えない」である&lt;/h2&gt;
&lt;p&gt;教育にはコストがかかる。教師を養成しなければならず、教材を作らなければならず、何より生徒たちの時間を使わなければならない。生徒の時間は有限であるから、ある科目を教育課程に入れるということは、他の科目に使えたはずの時間を奪うということでもある。だからこそ、どの科目であれ教育課程に含めるなら、その効用が科学的に立証されなければならない。学べば役に立つだろうという漠然とした期待では足りない。役に立たない教育など存在しないからだ。裁縫だって学べば役に立つし、木工だって学べば役に立つ。問題は漢字教育が役に立つかどうかではなく、同じ時間を投入したとき、&lt;em&gt;他の教育より&lt;/em&gt;役に立つかどうかだ。&lt;/p&gt;
&lt;p&gt;漢字教育が韓国語の読解力向上に役立つという科学的根拠は、現時点では存在しない。漢字を知れば韓国語の語彙力が伸びるという主張はしばしば聞くが、それを裏付ける体系的な研究は見当たらない。教育政策は直感ではなく根拠の上に立つべきだ。効用が立証されない限り、デフォルトは常に「教えない」であり、これは漢字教育にも同様に当てはまる。&lt;/p&gt;
&lt;h2 id=&quot;国漢文混用体の利点と現実論&quot;&gt;国漢文混用体の利点と現実論&lt;/h2&gt;
&lt;p&gt;率直に言えば、国漢文混用体には語文政策的な利点が多いと思う。漢字文化圏の他の言語との接点が広がるし、テキストの情報密度が高まる。同形異義語の区別も容易になるが、この最後の利点は人間よりも機械にとっての意味が大きい。人間は文脈が十分であれば同形異義語で困ることはめったにないが、検索エンジンや自然言語処理システムはそうではない。国漢文混用体はテキストをより機械親和的︵machine-readable︶にする。&lt;/p&gt;
&lt;p&gt;しかし、これらの長所は漢字が日常的に使われる環境を前提としている。韓国でハングル専用が定着してから半世紀近くが経った今、漢字を読める韓国人の割合はすでに大きく低下した。この状況で国漢文混用体の利点を語ることは、英語がいくら現実的に有用だとしても韓国で英語を公用語にはできないのと似た構造だ。理論的な利点があることと、今からそれを実現できることとは別の問題だ。&lt;/p&gt;
&lt;p&gt;私の立場を一言でまとめるとこうなる。そもそもハングル専用にしなければ良い点が多かったはずだ。しかし今さら覆すことはできない。ハングル専用を続けなければならないという現実を受け入れるべきだ。&lt;/p&gt;
&lt;h2 id=&quot;漢字混用なき漢字教育の逆説&quot;&gt;漢字混用なき漢字教育の逆説&lt;/h2&gt;
&lt;p&gt;韓国の漢字教育の議論でよく見かける立場がある。漢字混用には反対だが漢字教育には賛成だ、というものだ。この立場は一見妥協的に見えるが、実は矛盾に近いと私は思う。学んだことは使わなければ維持できない。漢字を学校で習っても、卒業後の日常で漢字に触れる機会がなければ、その知識は急速に揮発してしまう。使用文脈のない知識の維持コストは過大だ。ハングル専用の韓国社会で漢字教育を施すのは、プールのない環境で水泳を教えるのと変わらない。&lt;/p&gt;
&lt;p&gt;自分自身の漢字能力がどう維持されてきたかを振り返ると、この論点はより明確になる。私は&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E5%9B%BD%E6%B0%91%E5%AD%A6%E6%A0%A1#%E9%9F%93%E5%9B%BD&quot;&gt;国民学校&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;時代に漢字教育をある程度受けた。しかしそれだけでは十分ではなかった。&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E6%AD%A6%E4%BE%A0%E5%B0%8F%E8%AA%AC&quot;&gt;武侠小説&lt;/a&gt;が好きで漢字に継続的に触れていたし、高校では第二外国語として中国語を学んだし、大人になってからは日本語を学ぶことで漢字を忘れずに済んだ。正規教育が種を蒔いた可能性はあるが、それを維持したのは全面的に個人的な動機と継続的な接触だった。これは二つのことを示唆する。漢字に関心のある人は公教育がなくても自ら学べるということと、関心のない人には公教育があっても知識が残らないということだ。いずれにせよ、公教育における漢字教育を正当化するのは難しい。&lt;/p&gt;
&lt;h2 id=&quot;趣向と政策の区分&quot;&gt;趣向と政策の区分&lt;/h2&gt;
&lt;p&gt;漢字が好きだということと、漢字教育を韓国の公教育で行うべきだと主張することは、まったく別の話だ。私は漢字が好きだ。漢字の構造がもたらす知的な楽しさもよく分かるし、国漢文混用体で文章を書くときの妙味もよく知っている。しかしそれは私の趣向であって、すべての生徒に課す教育の根拠にはならない。教育政策は個人の趣向や郷愁ではなく、科学的根拠と機会費用の比較の上で決定されるべきだ。漢字教育の効用が立証されない限り、そしてハングル専用という現実が変わらない限り、漢字教育を韓国の公教育に含める理由はない。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;一九九六年に廃止され、現在の初等学校に相当する教育機関。日本の小学校に相当する。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>

  <entry>
    <title>コーディングを愛する人たちが、なぜコーディングから追い出されているのか</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/" />
    <id>https://writings.hongminhee.org/2026/03/craft-alienation-llm/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-03-21T09:30:00.000Z</published>
    <updated>2026-03-21T09:21:35.000Z</updated>
    <content type="html">&lt;h1 id=&quot;コーディングを愛する人たちがなぜコーディングから追い出されているのか&quot;&gt;コーディングを愛する人たちが、なぜコーディングから追い出されているのか&lt;/h1&gt;
&lt;p&gt;Les Orchardが&lt;a href=&quot;https://blog.lmorchard.com/2026/03/11/grief-and-the-ai-split/&quot;&gt;最近の記事&lt;/a&gt;で指摘した観察が、頭から離れない。
LLMコーディングアシスタントが登場するまで、
ソフトウェアエンジニアたちのあいだの亀裂は見えなかった。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;匠人気質の人たちと&lt;q&gt;とりあえず動けばいい&lt;/q&gt;という人たちが隣り合わせに座り、
同じ製品を作りながら、区別がつかなかった。
仕事の&lt;strong&gt;動機&lt;/strong&gt;が見えなかったのは、&lt;strong&gt;過程&lt;/strong&gt;が同一だったからだ。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;道具が亀裂を作ったのではなかった。すでにあった亀裂を露わにしただけだ。&lt;/p&gt;
&lt;p&gt;Orchard自身は最初の陣営だ。
七歳でBASICを学んだのはBASICが美しかったからではなく、
画面に何かを表示させたかったからだ。
彼にとってLLMコーディングアシスタントは、
いつも登り続けてきた梯子の次の段にすぎない。
パズルが消えたのではなく、より高い抽象水準へと移っただけだ。
彼も悲しみはするが、悲しんでいるのは仕事そのものではなく、
仕事を取り巻く生態系だ。&lt;/p&gt;
&lt;p&gt;Nolan Lawsonの悲しみは違う。&lt;a href=&quot;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot;&gt;二月に上げた彼の文章&lt;/a&gt;を見てみよう。&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;h2 id=&quot;行為からの疎外&quot;&gt;行為からの疎外&lt;/h2&gt;
&lt;p&gt;Marxは疎外された労働の次元を四つに分析した。
生産物からの分離、労働行為そのものからの分離、他者からの分離、
そして自身の人間的能力からの分離。
LLMコーディングアシスタントをめぐる論議において、核心は二番目だと言える。&lt;/p&gt;
&lt;p&gt;Marxが言う「労働行為そのものからの分離」とはこういうことだ。
人間は他の動物と違い、作りたいものを頭の中でまず構想し、
物質世界をそのイメージに合わせて形作ることができる。
この意識的で意図的な創造能力こそ、Marxが人間の特性と見たものに最も近い。
労働が機械的なもの、強制されたもの、生きることではなく耐え忍ぶものになったとき、
その能力は実現されない。活動は依然として起きているが、
その人はもうそこに現存していない。&lt;/p&gt;
&lt;p&gt;匠人技術を哀悼するソフトウェアエンジニアたちは、この描写に似ている。
彼らが大切にしていたのは成果物ではなかった。
何かを作る過程、熾烈に集中した時間、
システムを十分に理解してそれを再び形作ることができるという感覚。
Lawsonがまさにそう言う。
&lt;q&gt;私がこれを作った&lt;/q&gt;と言えるGitHubリポジトリ。
&lt;q&gt;何かが作られた&lt;/q&gt;ではなく、&lt;strong&gt;私が&lt;/strong&gt;作ったということ。&lt;/p&gt;
&lt;p&gt;これで、なぜ同じ道具に対する二人の反応があれほど違うのかも見えてくる。
Orchardははじめからコードを&lt;strong&gt;書く&lt;/strong&gt;行為に自分を投資していなかった。
結果に投資した。LLMコーディングアシスタントが結果により速く到達させてくれるなら、
彼に失うものはない。一方Lawsonには、その行為の中に意味があった。
LLMコーディングアシスタントは成果物を迂回するのではなく、
彼が大切にしていた部分を迂回する。
Marxが区分した客観的疎外（感じようと感じまいと存在する条件）と主観的疎外（その喪失を経験すること）が、
この分裂にかなりよく重なる。
Orchardははじめから行為そのものに客観的に縛られていなかったから主観的にも疎外を感じないが、
Lawsonは両方だ。&lt;/p&gt;
&lt;p&gt;よくある反応は、これが郷愁であるか、
あるいは新しい匠人技術が古いものを代替するだろうというものだ。
そうかもしれない。しかしその反応は実際の問いを避けていく。
コーディングを愛する人たちはなぜコーディングから追い出されているのか。
引き寄せられているのではなく、追い出されている。
誰も彼らが手でコードを書くことを止めない。市場がそれに不利益を与えているだけだ。&lt;/p&gt;
&lt;h2 id=&quot;不利益を与えているのは何か&quot;&gt;不利益を与えているのは何か&lt;/h2&gt;
&lt;p&gt;Marxは&lt;cite class=&quot;series&quot;&gt;資本論&lt;/cite&gt;でイギリスのラッダイト運動をこう評した。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;労働者たちが機械そのものと資本による機械の使用とを区別し、
したがって物質的生産手段そのものではなく、
それの社会的搾取形態を攻撃することを学ぶまでには、時間と経験が必要だった。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;機織り機を壊した労働者たちの憤怒は正当だった。方向が間違っていたにすぎない。
機織り機が労働時間を延ばしたのではなかった。資本がそうした。
機織り機が労働者を機械の付属物にしたのではなかった。資本がそうした。&lt;/p&gt;
&lt;p&gt;LLMを使う同僚と生産性を比較され、
望まないのに仕事のためにLLMを使うと言うソフトウェアエンジニアたちにとって、
疎外の源泉はLLMではない。生計を特定の指標に縛りつけた構造だ。
その指標は今や、最も速く最も多くの産出物を出す人に有利に働く。
LLMコーディングアシスタントは梃子であり、市場が機制だ。&lt;/p&gt;
&lt;p&gt;ただ、ここは一点だけ分けて考えたい。匠人技術と効率のあいだの緊張は、
資本主義を取り除いたからといって消えるものではない。
LLMがより速い産出物を出すという事実そのものは、
誰が報酬を受けようと受けまいと有効だ。
どんな共同体も、どんな方式で組織されようと、
結局その速度の差をどう扱うかという問いを避けることはできない。
資本主義はその問いに最も過酷な答えを与える。遅い方が生計を失う。
しかし問い自体は資本主義より長く生き残る。&lt;/p&gt;
&lt;h2 id=&quot;私の状況が示すもの&quot;&gt;私の状況が示すもの&lt;/h2&gt;
&lt;p&gt;私は専業でオープンソースプロジェクトのメンテナンスをしている。
収入は全面的に公的資金から得ている。
LLMコーディングアシスタントを使わなければ仕事を失うと言う雇用主はいない。
私の生産性を同僚と比較する四半期評価もない。&lt;/p&gt;
&lt;p&gt;こうした条件のもとで、私とLLMコーディングアシスタントの関係は、
Lawsonが描写するものとはかなり異なる。面白いと思うコードは依然として手で書く。
したくない部分、
冗長なテストスキャフォールディングや何百回も書いたボイラープレートは、
モデルに渡す。この区分は自分で引いた線だ。
何かを表現する仕事と、ただ処理しなければならない仕事のあいだの区分線。&lt;/p&gt;
&lt;p&gt;Marxが資本主義の外で機械にできることとして想像したものに近い。
反復労働から人を解放して、より創造的な活動のための時間を開くこと。
技術が違うのではなく、条件が違うのだ。&lt;/p&gt;
&lt;p&gt;私の状況を解法として提示したいわけではない。
こうした状況は稀であり、依然として資本主義経済の中に存在する。
一時的な避難所にすぎず、脱出ではない。
ただ、同じ道具が一つの文脈では解放的に、
別の文脈では疎外的に感じられるということ、
その差異が道具ではなく社会的条件から来るということだけは確かだと思う。&lt;/p&gt;
&lt;h2 id=&quot;悲しみが向かうべき場所&quot;&gt;悲しみが向かうべき場所&lt;/h2&gt;
&lt;p&gt;原因を知ったからといって苦痛が解消されるわけではない。
今まさにLLMコーディングアシスタントを使うよう追い立てられているソフトウェアエンジニアたちに、
構造分析は今日の午後を助けてくれない。&lt;/p&gt;
&lt;p&gt;ただ、問いの立て方は少し変えられる。
Lawsonが描写する悲しみが実在するなら、
そしてその悲しみのより深い原因が技術そのものではなくそれを取り巻く関係にあるなら、
悲しみが向かうべき場所はLLMではない。
望まない道具を望まない条件で使うよう強いているものが何かという問題だ。&lt;/p&gt;
&lt;p&gt;Lawson自身も、このあたりまでは来ている。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;私は新しい世界を祝福しないが、抵抗もしない。
日が昇り日が沈み、私はその周りをどうしようもなく公転し、
私の抗議はそれを止めることができない。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;率直だが、諦念が私たちに残された唯一の道ではないと信じたい。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>合法であれば正当か——AI再実装とコピーレフトの侵食</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/" />
    <id>https://writings.hongminhee.org/2026/03/legal-vs-legitimate/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-03-09T15:10:00.000Z</published>
    <updated>2026-03-09T15:49:09.000Z</updated>
    <content type="html">&lt;h1 id=&quot;合法であれば正当かai再実装とコピーレフトの侵食&quot;&gt;合法であれば正当か——AI再実装とコピーレフトの侵食&lt;/h1&gt;
&lt;p&gt;先週、Pythonのテキストエンコーディング検出ライブラリchardetのメンテナーであるDan Blanchardが、
&lt;a href=&quot;https://github.com/chardet/chardet/releases/tag/7.0.0&quot;&gt;新しいバージョンをリリースした&lt;/a&gt;。
chardet 7.0は従来比48倍の速度を誇り、マルチコアに対応し、
設計から作り直されている。
AnthropicのClaudeが貢献者として登録されている。
そしてライセンスがLGPLからMITに変更された。&lt;/p&gt;
&lt;p&gt;Blanchardの説明によれば、彼は既存のコードを一切参照せず、
APIとテストスイートだけを手がかりにClaudeに一から再実装させた。
JPlagによる検証の結果、新しい実装と旧バージョンのコード類似度は1.3%未満だという。
したがってこれは独立した新しい著作物であり、LGPLを継承する義務はない、
というのが彼の主張だ。
原作者のMark Pilgrimは&lt;a href=&quot;https://github.com/chardet/chardet/issues/327&quot;&gt;GitHubのイシューを立てて異議を申し立てた&lt;/a&gt;。
LGPLは修正版の配布に際して同一ライセンスの維持を要求するが、
既存のコードに十分触れた状態での再実装はクリーンルームとは言えない、
というのが彼の立場だ。&lt;/p&gt;
&lt;p&gt;この一件は、Flaskの作者Armin RonacherとRedisの作者Salvatore
Sanfilippo︵以下antirez︶の文章を通じて、より広い論争へと発展した。
二人は異なる経路から——&lt;a href=&quot;https://lucumr.pocoo.org/2026/3/5/theseus/&quot;&gt;Ronacherはライセンス哲学の観点から&lt;/a&gt;、
&lt;a href=&quot;https://antirez.com/news/162&quot;&gt;antirezは著作権法の法理から&lt;/a&gt;——この再実装は正当だという結論に至る。
私は両者の文章を尊重するが、どちらも間違っていると思う。
いや、より正確に言えば、どちらも肝心な問いを回避している。&lt;/p&gt;
&lt;p&gt;その問いとはこれだ。合法であれば正当か。
両者の文章は、この問いに答えないまま、
法理的に可能だという事実から社会的に正当だという結論を引き出す。
法的な許容と倫理的な正当性は同じではない。
法は最低限の基準を定めるだけであり、ある行為がその基準を通過するからといって、
その行為が正しいということにはならない。この区別が本稿の出発点だ。&lt;/p&gt;
&lt;h2 id=&quot;類比の方向が逆だ&quot;&gt;類比の方向が逆だ&lt;/h2&gt;
&lt;p&gt;antirezの論拠は歴史から始まる。
GNUプロジェクトがUNIXのユーザースペースを再実装したとき、それは合法だった。
Linuxカーネルも同様だ。著作権法は「保護される表現」︵protected
expressions︶の複製を禁じるが、アイデアや動作の仕方は保護しない。
AIを使った再実装も同じ法的地形の上に立つ。ゆえに合法だ、というわけだ。&lt;/p&gt;
&lt;p&gt;この法理の説明それ自体はおおむね正しい。
再実装が合法だという主張を私は否定しない。
問題はその次の段階にある。
antirezは合法性を示したところで議論を終える。
しかし法理が正しいということと、行為が社会的に正当だということは別の主張だ。
この二つを同一視するとき、論証に間隙が生まれる。&lt;/p&gt;
&lt;p&gt;その間隙が最も鮮明に現れるのが、antirezが引いてきた歴史的な類比だ。&lt;/p&gt;
&lt;p&gt;GNUがUNIXを再実装したとき、そのベクトルは独占から自由へと向かっていた。
StallmanはUNIXという独占ソフトウェアを&lt;strong&gt;自由ソフトウェアとして&lt;/strong&gt;再実装するために、
著作権法の限界を巧みに活用した。
その再実装の倫理的な正当性は法的合法性から来るのではなく、
コモンズを拡張する方向性から来ていた。
それがGNUプロジェクトが歓迎された理由だ。&lt;/p&gt;
&lt;p&gt;chardetの一件では、再実装のベクトルは反対を向いている。
コピーレフト・ライセンスであるLGPLによって保護されていたソフトウェアが、
パーミッシブ・ライセンスであるMITで再実装された。
これはコモンズを&lt;strong&gt;広げる&lt;/strong&gt;再実装ではなく、コモンズの&lt;strong&gt;囲い込みを解除する&lt;/strong&gt;再実装だ。
chardet 7.0をベースにした派生物は、ソースコードを公開する義務を負わない。
月間一億三千万ダウンロードというスケールのライブラリから、その義務が消えた。&lt;/p&gt;
&lt;p&gt;antirezはこの方向の違いを論じない。
GNUの歴史を引いてきながら、その歴史が実は自身の結論に対する反証例になっていることを、
見えていないのか見ようとしないのか。&lt;/p&gt;
&lt;h2 id=&quot;gplは共有に反するのか&quot;&gt;GPLは共有に反するのか&lt;/h2&gt;
&lt;p&gt;一方、Ronacherの論拠は異なる。
彼は自分が以前からchardetが非GPLライセンスになることを望んでいたと明かし、
「GPLは共有の精神に反する」と書く。
自分はできる限りライセンスの強制が少ない形で公開することを支持しており、
社会は共有するほど良くなるという信念を持っているからだという。&lt;/p&gt;
&lt;p&gt;この主張はGPLに対する根本的な誤解を含んでいる。&lt;/p&gt;
&lt;p&gt;GPLが何を&lt;strong&gt;禁止&lt;/strong&gt;するかから見てみよう。
GPLはソースコードを非公開にしておくことを禁じない。
GPLソフトウェアを個人的に改変して使用することに制約は一切ない。
GPLが条件を発動させるのは&lt;strong&gt;配布&lt;/strong&gt;するときだけだ。
改変したコードを配布したり、サービスとして提供するなら、
そのコードも同じ条件で共有しなければならない。
これは共有を&lt;strong&gt;制限&lt;/strong&gt;することではなく、共有を&lt;strong&gt;条件&lt;/strong&gt;として課すことだ。&lt;/p&gt;
&lt;p&gt;「これを受け取って使い改善したなら、その改善も共有せよ」という要求は、
共有を抑制するメカニズムではなく、共有を連鎖的に強制するメカニズムだ。
コモンズの利用者にコモンズへの貢献義務を課すことが共有の文化を損なうという主張は、
筋が通らない。&lt;/p&gt;
&lt;p&gt;MITライセンスと比較すると差異は明確だ。
MITのもとでは、誰でもコードを持ち出して改善し、
独占ソフトウェアとして閉じてしまうことができる。
受け取ることは共有だが、貢献は任意だ。
Ronacherがこの構造を「より共有に親和的」と呼ぶなら、
彼の言う「共有」は流れる方向が決まった共有だ。
より多くの資本と人材を持つ側が持っていく方向に。&lt;/p&gt;
&lt;p&gt;この非対称が現実でどう作動するかは歴史が示している。
一九九〇年代、多くの企業がGPLコードを吸収して独占ソフトウェアを作った。
それが可能だったのは彼らがパーミッシブ・ライセンスを選んだからではなく、
当時コピーレフト・ライセンスの執行が緩かったからだ。
GPLの強化によってこの穴は塞がれた。
貢献を通じた互恵性に頼るほかない個人開発者や小規模プロジェクトにとって、
コピーレフトはかろうじて対等な交換を可能にする装置だった。&lt;/p&gt;
&lt;p&gt;Flaskを作った人物がこの区別を知らないはずはない。
にもかかわらずこの論拠を展開するなら、それはナイーブなのではなく、便宜的なのだ。&lt;/p&gt;
&lt;h2 id=&quot;自己論駁する事例&quot;&gt;自己論駁する事例&lt;/h2&gt;
&lt;p&gt;Ronacherの文章で最も興味深い部分は論拠ではなく、ふと触れられる一文だ。
Vercelが&lt;a href=&quot;https://just-bash.dev/&quot;&gt;GNU BashをAIで再実装して公開したところ&lt;/a&gt;、
Cloudflareが&lt;a href=&quot;https://x.com/cramforce/status/2027155457597669785&quot;&gt;同じ方法でNext.jsを再実装すると「あからさまに怒った」&lt;/a&gt;という話だ。&lt;/p&gt;
&lt;p&gt;Ronacherはこれを皮肉として触れ、先へ進む。
しかしこの逸話は彼の立場全体を崩す。それも思ったより徹底的に。
Next.jsはMITライセンスだ。
&lt;a href=&quot;https://blog.cloudflare.com/vinext/&quot;&gt;CloudflareのVinext&lt;/a&gt;はライセンスに違反したのではなく、
Ronacherが共有文化の前進と呼ぶ行為をそのままNext.jsに適用しただけだ。
Vercelの怒りはライセンス侵害に対するものではなく、純粋に競争的・領土的な反応だった。
暗黙の立場はこうだ——GPLソフトウェアをMITに再実装することは共有文化の進展であり、
自分たちのMITソフトウェアを同じ方法で再実装されることは許しがたい。
これがパーミッシブ・ライセンス陣営のほうがコピーレフト陣営より「共有に親和的」だという主張の実態だ。
「共有の精神」とは結局、自分が共有する方向にしか流れない。&lt;/p&gt;
&lt;p&gt;Ronacherはこの矛盾を認識しながら立ち止まらない。
自分の世界観に合致する事例だからだと書く。
自身の立場を否定する証拠を自ら提示しておきながら結論を変えないとき、
それは論拠が結論に先行しているのではなく、結論が論拠に先行しているというサインだ。&lt;/p&gt;
&lt;h2 id=&quot;合法性と社会的正当性は異なる次元にある&quot;&gt;合法性と社会的正当性は異なる次元にある&lt;/h2&gt;
&lt;p&gt;冒頭の問いに戻ろう。合法であれば正当か。&lt;/p&gt;
&lt;p&gt;antirezは法理を丁寧に説明した後、それで十分とばかりに筆を置く。
Ronacherは法的グレーゾーンを認めながら、
道徳的な問題は「自分が関心を持つ部分ではない」と一文で片付ける。
両者とも、法的な許容を社会的正当性の代理として扱う。
だが法は、ある行為を妨げないと言うだけであり、その行為が正しいと保証しない。
節税の限界ぎりぎりまで税を回避することが合法であっても、
それが正しいかどうかは別の問いだ。
特許を合法的に取得した企業が、
数十年にわたって低廉に供給されてきた必須医薬品の価格を数十倍に引き上げることが合法であっても、
それが社会的に正当だという意味にはならない。
合法性は必要条件たりえても、十分条件ではない。&lt;/p&gt;
&lt;p&gt;chardetの一件では、この区別はさらに鮮明だ。&lt;/p&gt;
&lt;p&gt;LGPLが保護していたのはBlanchard一人の労働ではない。
十二年間このライブラリに貢献してきたすべての人々が同意した社会的契約だ。
その契約の内容は、「これを受け取って使うなら、あなたが作るものも同じ条件で共有せよ」というものだった。
この契約は法廷が強制する種類の契約でもあるが、
それ以前に、オープンソースのコミュニティが数十年かけて築いてきた信頼の基盤だった。
再実装が法的に新しい著作物として認められうるということと、
その再実装が既存の貢献者たちと結んだ社会的契約を破棄したということは、別々の問題だ。
仮に法廷がBlanchardの主張を認めたとしても、
それは彼の行為がコミュニティ的に正当であることを意味しない。
合法性は社会的正当性を連れてこない。&lt;/p&gt;
&lt;p&gt;FSFの代表Zoë Kooymanはこれを簡潔に言い表した。
「自分が受け取った権利を他者に与えることを拒むことは、
どんな方法によるものであれ反社会的な行為だ。」&lt;/p&gt;
&lt;h2 id=&quot;誰の視点がデフォルトに設定されているか&quot;&gt;誰の視点がデフォルトに設定されているか&lt;/h2&gt;
&lt;p&gt;この論争を読みながら、ずっと頭から離れない問いがある。
二人の著者は、AI再実装のコスト低下をどこから見ているのか。&lt;/p&gt;
&lt;p&gt;antirezはRedisを作り、RonacherはFlaskを作った。
どちらもオープンソースのエコシステムの中心にいる人物だ。
彼らの立場から見て、AI再実装のコスト低下とは、自分が&lt;strong&gt;仕掛ける&lt;/strong&gt;側の話だ。
何かをより簡単に再実装できるようになるということ。
RonacherはGNU Readlineをコピーレフトの条項ゆえに再実装しようとしていたと明言している。&lt;/p&gt;
&lt;p&gt;一方、何十年もchardetのようなライブラリに貢献してきた人々にとって、
同じ技術的変化は自分が&lt;strong&gt;される&lt;/strong&gt;側の話だ。
自分の貢献が込められたコピーレフトの保護が剥がされるということ。
二人の著者は前者の位置から後者の位置にいる人々に向けて、
「これは常に合法だったし、歴史的先例もある、技術の変化に適応せよ」と言っている。&lt;/p&gt;
&lt;p&gt;この非対称を無視して普遍的な論拠であるかのように書くとき、
文章は分析ではなく利害関係の合理化になる。
両著者がそれぞれ自身の利害関係と正確に一致する結論に達していることを、
読者は念頭に置くべきだ。&lt;/p&gt;
&lt;h2 id=&quot;この争いが指し示すもの&quot;&gt;この争いが指し示すもの&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.theregister.com/2026/03/06/ai_kills_software_licensing/&quot;&gt;Bruce Perensは『The Register』とのインタビューで&lt;/a&gt;「ソフトウェア開発の経済学全体が死んだ」と警告した。
antirezは似た認識のもとで「適応せよ」と言う。
Ronacherはこの方向が気に入っていると言う。&lt;/p&gt;
&lt;p&gt;三者の反応のいずれも、核心的な問いに答えていない。
コピーレフトの執行が技術的に困難になったとき、
それはコピーレフトを&lt;strong&gt;不要に&lt;/strong&gt;するのか、それともより&lt;strong&gt;重要に&lt;/strong&gt;するのか。&lt;/p&gt;
&lt;p&gt;私は後者だと思う。
GPLが保護したのはコードの希少性ではなく、ユーザーの自由だった。
コードの生産コストが下がったからといって、
そのコードを通じて自由を侵食することが許容されるわけではない。
むしろ再実装の摩擦が消えるほど、
コピーレフト・ライブラリをMITに衣替えするコストも消える。
GPLが依存していた摩擦が減ったのは法的執行の問題であり、
その根底にある規範的判断には触れない。&lt;/p&gt;
&lt;p&gt;その判断とはこれだ。コモンズから取った者はコモンズに返すべきだということ。
その原則は、再実装に五年かかろうと五日でできようと変わらない。
法廷がAI再実装をクリーンルームと認めようと派生著作物と見なそうと、
その判決がこの原則の社会的重みを軽減することはない。&lt;/p&gt;
&lt;p&gt;これが法理とコミュニティの規範が分岐する地点だ。
法は事後的に、ゆっくりと、現在の権力関係を反映しながら作られる。
オープンソースのコミュニティが何十年もかけて積み上げてきた規範は、
法廷の判決を待たなかった。
法がそれを保護してくれないときでも人々がGPLを選んだのは、
それが自分の属するコミュニティの価値観と一致していたからだ。
その価値観は法が変わっても消えない。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2026/01/histomat-foss-llm/&quot;&gt;以前の文章&lt;/a&gt;で私はこの争いの次の段階として訓練コピーレフト︵TGPL︶を提案した。
AI再実装の問題はそこからもう一歩進んで、
仕様︵specification︶の層まで保護の範囲を拡張する必要があることを示唆している。
ソースコードが仕様から生成できるのであれば、
その仕様こそがGPLプロジェクトの本質的な知的財産となる。
ソースコードを見ずにテストスイートとAPIだけで再実装したというBlanchardの主張は、
逆説的に、そのテストスイートとAPI仕様がコピーレフトで保護されるべきだという論拠になる。&lt;/p&gt;
&lt;p&gt;GPLの歴史は、新たな搾取の形式が現れるたびに法的ツールが進化してきた歴史だ。
GPLv2からGPLv3へ、そしてAGPLへ。だがその進化を先導したのは判決ではなく、
コミュニティの価値判断だった。法はあとからついてきた。今もそれは変わらない。
法廷がAI再実装についてどんな判決を下そうとも、
私たちが先に答えるべき問いは法的なものではなく社会的なものだ。
コモンズの実りを取った者はコモンズに返す義務があるか。私はそうだと思う。
そしてその判断は法廷の判決を待つ必要がない。&lt;/p&gt;
&lt;p&gt;antirezとRonacherの文章が興味深いのは、彼らが正しいからではない。
彼らが何を見ようとしないかが、鮮明に浮かび上がるからだ。
合法性によって社会的な価値判断を代替しようとするとき、本当に重要な問いは、
法理の影の中に埋もれていく。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>不完全な世界で唯物論的に行動すること——生産手段としてのLLMと社会的関係</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/" />
    <id>https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-02-21T21:40:00.000Z</published>
    <updated>2026-02-22T06:02:52.000Z</updated>
    <content type="html">&lt;h1 id=&quot;不完全な世界で唯物論的に行動すること生産手段としてのllmと社会的関係&quot;&gt;不完全な世界で唯物論的に行動すること——生産手段としてのLLMと社会的関係&lt;/h1&gt;
&lt;p&gt;&lt;small&gt;この文章は先月書いた&lt;cite&gt;&lt;a href=&quot;/2026/01/histomat-foss-llm/&quot;&gt;F/OSSの唯物史観——LLMを拒絶するのではなく、取り戻すべきだ&lt;/a&gt;&lt;/cite&gt;の続編である。&lt;/small&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Cory Doctorowは&lt;a href=&quot;https://pluralistic.net/2026/02/19/now-we-are-six/&quot;&gt;&lt;cite class=&quot;series&quot;&gt;Pluralistic&lt;/cite&gt;六周年記念の記事&lt;/a&gt;で、自身の執筆・公開ワークフローを紹介した。毎日記事を投稿する前に、OllamaというオープンソースのLLMを誤字脱字チェックに使っているという。予想どおりの反発が来た。そして二日後、ドイツの技術批評家tanteが&lt;cite&gt;&lt;a href=&quot;https://tante.cc/2026/02/20/acting-ethical-in-an-imperfect-world/&quot;&gt;不完全な世界で倫理的に行動すること&lt;/a&gt;&lt;/cite&gt;︵&lt;cite lang=&quot;en&quot;&gt;Acting ethically in an imperfect world&lt;/cite&gt;︶という文章で応じた。&lt;/p&gt;
&lt;p&gt;彼のタイトルを借りることが、この文章の出発点として適切だと思った。不完全な世界で倫理的に行動するとはどういうことか——それが彼の問いだ。私は同じ問いに、別の枠組みで答えたい。倫理学ではなく、唯物論で。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2026/01/histomat-foss-llm/&quot;&gt;以前の文章&lt;/a&gt;で私は、ライセンシングを奪還の手段として前面に出しすぎた。ナイーブだという批判を受け、その批判にはある程度首肯する。ただ、私が言いたかったのは奪還という&lt;strong&gt;方向&lt;/strong&gt;であって、奪還の&lt;strong&gt;処方箋&lt;/strong&gt;ではなかった。この文章では、その方向をもう少し正確に整理してみたい。&lt;/p&gt;
&lt;h2 id=&quot;二つの藁人形&quot;&gt;二つの藁人形&lt;/h2&gt;
&lt;p&gt;tanteの文章には妥当な指摘がある。Doctorowは、LLM批判者を&lt;q&gt;技術の創始者が悪人だから使うべきではないという純粋主義者&lt;/q&gt;として描いた——これは藁人形だ。実際の批判はまったく別のところにある。膨大な電力と水の消費、同意なきデータ収集、グローバル・サウスで行われる搾取的なラベリング労働、オープンソース・エコシステムを含む知識コモンズへの損害……Doctorowはこれらの批判を&lt;q&gt;Sam Altmanが気に入らないだけ&lt;/q&gt;という感情的な反応に還元してしまった。tanteがその還元の誤りを指摘したのは正しい。&lt;/p&gt;
&lt;p&gt;Blueskyの指摘も有効だ。Doctorowは中央集権化に対するイデオロギー的な理由からBlueskyへの参加を拒否している。自分の価値観に基づいて技術を拒否することは可能だと信じ、実践している。それなのに、他者がLLMを同じように拒否すると&lt;q&gt;純粋主義&lt;/q&gt;と呼ぶ。この二重基準もtanteが正確に突いた。&lt;/p&gt;
&lt;p&gt;ところが、tanteも同じ罠にはまっている。&lt;/p&gt;
&lt;p&gt;彼は奪還という方向を批判しながら、奪還の手段を事実上一つに限定する。GPTに匹敵するフロンティア・モデルをゼロから作ること。それには数十億ドルが必要で、同じ環境コストが発生するから、奪還は現実的ではない——というわけだ。しかしDoctorowがLLM批判を単純化したように、tanteも奪還の経路を単純化した。ライセンスを通じた法的抵抗がある。規制によって国家に私有モデルの公開を強制させる方向もある。公共基盤モデルを共同で構築する方向もある。どの手段が実際に機能するかは政治的・社会的条件に依存しており、まだ開かれている。以前の文章でライセンシングに言及したのは、そのなかで最初に思いついた一例にすぎなかった。&lt;/p&gt;
&lt;h2 id=&quot;機械とその資本主義的適用形態&quot;&gt;機械とその資本主義的適用形態&lt;/h2&gt;
&lt;p&gt;Marxは『資本論』第一巻で、イギリスのラッダイト運動をこう評した。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;労働者が機械そのものと機械の資本主義的利用とを区別し、したがって物質的生産手段そのものではなく、その社会的搾取形態を攻撃することを学ぶまでには、時間と経験が必要だった。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;機織り機を打ち壊した労働者たちの怒りは正当だった。方向が間違っていただけだ。問題は機械ではなく、機械をめぐる資本主義的社会関係だった——機械が労働時間を短縮するどころか延長し、労働者を解放するどころか機械の付属物にしてしまうのは、機械の本性ではなく、機械を配置する方式の問題だった。Marxは彼らを嘲笑したのではなく、闘争が成熟していく過程を叙述したのだ。&lt;/p&gt;
&lt;p&gt;この枠組みは今日のLLM論争でも有効だと思う。tanteのアプローチは本質的に倫理的だ。LLMという技術そのものを道徳的に評価し、その評価に基づいて使用の可否を決める。Doctorowのアプローチもさして違わない。評価の方向が逆なだけで、どちらも技術を道徳の対象として置く。&lt;/p&gt;
&lt;p&gt;唯物論的アプローチは別の問いを立てる。この技術はどのような社会的関係のなかに置かれているか。誰が所有し、誰の労働で維持され、その剰余はどこへ流れるか。そしてその関係を変えることができるか。&lt;/p&gt;
&lt;p&gt;&lt;q&gt;AI賛否&lt;/q&gt;という構図そのものが、この問いを覆い隠す。大手AIベンダーに批判的でありながらLLMという技術の可能性に開かれていることが矛盾して見えるのは、技術とその資本主義的適用形態が同一のものだという前提があるからだ。しかしその前提は誤っている。&lt;/p&gt;
&lt;h2 id=&quot;図書館と人間&quot;&gt;図書館と人間&lt;/h2&gt;
&lt;p&gt;LLMは図書館ではない。図書館が人を原典へとつなぐのに対して、LLMは原典なしに答えを出すという批判は一面では正しい。ただ、LLMは人間に近いと私は思う。&lt;/p&gt;
&lt;p&gt;人間も生涯をかけて膨大な量のテキストとコードと画像を吸収する。著作権者にいちいち許諾を求めない。それを自分のものとして消化し、ときには単なる切り貼りにすぎないものを出し、ときには誰も思いつかなかったつながりを生み出す。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/building-c-compiler&quot;&gt;AnthropicのNicholas Carliniは最近、Claude Opus 4.6を使ってRustでCコンパイラをゼロから書く実験を行った。&lt;/a&gt;インターネット接続なし、クリーンルームで。結果は、Linux 6.9カーネルをx86、ARM、RISC-Vの三つのアーキテクチャでビルドし、PostgreSQL、FFmpeg、SQLite、Redisをコンパイルし、GCCトーチャーテストスイートを99%通過する十万行のコンパイラだった。私の知る限り、Rustで書かれたCコンパイラでそれに匹敵する成果を上げた先例はない。誰かの成果をそのまま再生産したとは言えない。&lt;/p&gt;
&lt;p&gt;もちろん、LLMが常に創造的なわけでも、人間が常に創造的なわけでもない。この比喩はLLMを美化するためのものではない。&lt;q&gt;LLMは本質的に再生産しかしない&lt;/q&gt;という前提の上に築かれた批判の根拠が揺らいでいる、ということだ。&lt;/p&gt;
&lt;p&gt;すべての生成AIが同じではないことも、この枠組みでよりはっきりと見えてくる。LLMと画像生成モデルの違いは、単なる技術の違いではなく、どのような労働をどのような方式で代替するかの違いだ。画像生成モデルが特定の作家のスタイルで画像を生成するとき、それは原作者の市場を直接侵食する。機能の代替ではなく、存在の代替だ。その剰余がどこへ向かうかを見れば、Marxの言う労働の窮乏化︵Verelendung︶が画像生成の領域でより直接的に進行していることがわかる。同じ尺度をLLMにそのまま適用できるかどうかは、はるかに複雑な問いだ。&lt;/p&gt;
&lt;h2 id=&quot;デフォルトの視点&quot;&gt;デフォルトの視点&lt;/h2&gt;
&lt;p&gt;最後に、個人的な話を一つしたい。&lt;/p&gt;
&lt;p&gt;tanteの文章はウェブで公開されているが、主要なLLMベンダーのスクレイピングをブロックするよう設定されているようだ。朝鮮語が母語の私にとって、英語は第二言語だ。tanteの文章のように、論証のニュアンスと暗黙の前提が重要なテキストは、従来の機械翻訳では正確に読めない。論証が生きたまま伝わるには、LLM程度の性能が必要だ。私は結局、文章を手動でコピーしてLLMに渡して読んだ。&lt;/p&gt;
&lt;p&gt;tanteは、LLMが著者とのつながりを断つと言った。検索エンジンは人を原典へ案内するが、LLMは原典を抽出して利用者を自分のループの中に閉じ込める、というのだ。まったくの誤りではない。しかし私の経験は、その図式が誰の視点から描かれたものかを示している。英語に堪能な読者にとって、LLMはつながりを断つ技術かもしれない。しかし英語が不得手な読者にとって、LLMはつながりを&lt;strong&gt;可能にする&lt;/strong&gt;技術でもある。tanteがLLMをブロックした行為は、彼自身の論理からすれば一貫しているが、結果として英語に堪能な読者とそうでない読者の間の非対称を強化した。&lt;/p&gt;
&lt;p&gt;これが単純なアイロニーではない理由は、この非対称が技術言説の全体にわたって作用しているからだ。誰の視点がデフォルトに設定されているか。どのような社会的関係のなかでそのデフォルトが作られたか。&lt;/p&gt;
&lt;p&gt;唯物論的に行動するとは、そのデフォルトを当たり前のものとして受け入れないことから始まる。技術が良いか悪いかを問う前に、この技術が誰のために、誰の労働によって、誰の利益のために動いているかを問うことだ。そしてその問いは、技術を拒否する理由ではなく、取り戻す理由になる——私はいまもそう思っている。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>なぜ雪だるまを壊さないのか</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/" />
    <id>https://writings.hongminhee.org/2026/01/ethics-of-small-actions/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-01-20T04:15:00.000Z</published>
    <updated>2026-01-20T04:12:18.000Z</updated>
    <content type="html">&lt;h1 id=&quot;なぜ雪だるまを壊さないのか&quot;&gt;なぜ雪だるまを壊さないのか&lt;/h1&gt;
&lt;p&gt;冬になると、Xでこんな話を聞くことがある。道を歩きながらわざわざ雪だるまを壊して回る男たちがいるという。雪だるまを壊したからといって、誰かに実質的な損害を与えるわけではない。だが、そういう行為の中に何かが見える。ある種の倫理的態度の欠如、あるいは形成。&lt;/p&gt;
&lt;p&gt;私は同じ理由で、LLMにタメ口を使わないし、命令口調で話さないようにしている。LLMが私の言葉遣いに傷ついたり、気分を害したりしないことは分かっている。しかし重要なのは、LLMの反応ではなく、自分がどんな人間になっていくかということだ。ぬいぐるみを投げたり叩いたりする人を想像してみればいい。ぬいぐるみは痛みを感じないが、そういう行動を繰り返す人は、少しずつそういう人になっていく。&lt;/p&gt;
&lt;p&gt;こうした文脈で、AIやLLMについて奴隷制を連想させる表現を使うことにも違和感がある。「LLMを鞭打つ」といった表現が技術コミュニティで冗談のように使われているが、その中には奴隷制という歴史的暴力を軽量化された比喩として消費する態度が潜んでいる。LLMが実際に奴隷ではないのは当然だ。︵いや、当然だろうか？︶奴隷制を軽い比喩として使えると感じた瞬間、私たちはそれが指し示す実際の暴力に対する感覚を失っていく。&lt;/p&gt;
&lt;p&gt;私たちが何をし、どう語るかが、結局私たちを作る。誰も見ていないところで、反応しない対象にどう振る舞うかが、むしろその人をより純粋に表すこともある。雪だるまであれ、LLMであれ、私たちが使う言葉であれ、それらすべてが私たち自身を形成する。&lt;/p&gt;
&lt;p&gt;だから私は雪だるまを壊さない。LLMに敬語を使う。奴隷制を冗談の素材にしない。こうした小さな選択が私を作ると信じているからだ。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>F/OSSの唯物史観——LLMを拒絶するのではなく、取り戻すべきだ</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/" />
    <id>https://writings.hongminhee.org/2026/01/histomat-foss-llm/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2026-01-16T06:00:00.000Z</published>
    <updated>2026-01-16T07:22:12.000Z</updated>
    <content type="html">&lt;h1 id=&quot;fossの唯物史観llmを拒絶するのではなく取り戻すべきだ&quot;&gt;F/OSSの唯物史観——LLMを拒絶するのではなく、取り戻すべきだ&lt;/h1&gt;
&lt;p&gt;数日前、「&lt;a href=&quot;https://chronicles.mad-scientist.club/tales/on-floss-and-training-llms/&quot;&gt;自由・オープンソースソフトウェアとLLM訓練について&lt;/a&gt;」︵&lt;cite lang=&quot;en&quot;&gt;On FLOSS and training LLMs&lt;/cite&gt;︶という記事を読んだ。自由・オープンソースソフトウェアコミュニティの挫折感をよく表現した文章だった。AI企業はF/OSS開発者を全く尊重していない。オープンソースライセンシングの理想主義的原則を悪用している。法律は我々の成果物がプロプライエタリな言語モデルの学習データとして使われることを防いでくれない。記事を読みながら何度も頷いた。&lt;/p&gt;
&lt;p&gt;しかし、結論には同意しない。&lt;/p&gt;
&lt;p&gt;著者が提案する解決策は拒絶と孤立だ。クローラーを遮断し、GitHubのような中央集権的なforgeから離れ、AIスクレイパーが我々のコードにアクセスできないようにしようというものだ。そして、こうした「非倫理的なツール」を使う人々をコミュニティから排斥しようと言う。断絶と孤立の戦略だ。怒りは理解できる。しかし、このアプローチは重要な機会を見逃しており、F/OSSを作り上げてきた歴史的パターンを誤読している。&lt;/p&gt;
&lt;h2 id=&quot;我々が同意する点&quot;&gt;我々が同意する点&lt;/h2&gt;
&lt;p&gt;分岐点を論じる前に、著者が正しい部分から確認しよう。現在の状況は本当に深刻だ。AI企業は訓練データの出所を完全に無視している。「法的に可能だからやる」という言葉が、彼らが個々の開発者とコミュニティに対する態度を正確に示している。攻撃的なクローリングは事実上、分散型サービス妨害︵DDoS︶攻撃に他ならない。コンテンツ制作者の明示的な意思は無視される。まともに機能するオプトアウトメカニズムすら提供しない。&lt;/p&gt;
&lt;p&gt;法的闘争も勝ち目が薄いという点で著者の言う通りだ。F/OSSライセンスは本質的に用途を差別しない。&lt;a href=&quot;https://opensource.org/osd&quot;&gt;オープンソースの定義&lt;/a&gt;の第六原則は特定分野に対する制限を明示的に禁じている。GPLのような主要ライセンスは著作者表示を要求し、派生著作物に関する条項を設けているが、著者が指摘する通り、有能な弁護士ならLLM訓練は従来の意味での派生著作物の生成ではないと主張できる。統計的パターン抽出はコード再利用のように著作者表示を要求しないと。&lt;/p&gt;
&lt;p&gt;現在の法律は不十分だ。この法律は別の時代のために作られた。その時代に「&lt;strong&gt;使用&lt;/strong&gt;」とはソフトウェアを実行するか、修正するか、再配布することであって、ニューラルネットワークに入れてパターンを抽出することではなかった。法律は権力に奉仕する。この場合、権力は法務チームを動員してこうした曖昧さを探索し悪用できる企業にある。&lt;/p&gt;
&lt;h2 id=&quot;我々が分岐する点&quot;&gt;我々が分岐する点&lt;/h2&gt;
&lt;p&gt;しかし、ここで道が分かれる。答えは拒絶ではなく再専有だ。&lt;/p&gt;
&lt;p&gt;著者は現在の状況を開発者の尊重とAI訓練の許容の間の闘いとしてフレーミングする。しかし、第三の道がある。F/OSSの歴史とより整合的で、我々が実際に望む未来を作る可能性が高い道だ。我々のコードでLLMを訓練させないようにするのではなく、モデル自体を解放するよう要求すべきだ。&lt;/p&gt;
&lt;p&gt;私の立場はこうだ。私は自分のコードがLLM訓練に使われることを&lt;strong&gt;望んでいる&lt;/strong&gt;。望んでいないのは、その訓練によってAI企業の私有財産となるプロプライエタリなモデルが作られることだ。問題は技術自体や訓練プロセスではない。コモンズの私有化、集団知識の独占、価値が多数から少数へと一方向に流れることが問題だ。&lt;/p&gt;
&lt;p&gt;これは全く新しい問題ではない。F/OSSがずっと闘ってきたその問題だ。服を着替えただけだ。&lt;/p&gt;
&lt;h2 id=&quot;現実認識について&quot;&gt;現実認識について&lt;/h2&gt;
&lt;p&gt;さらに進む前に、根本的な話をしよう。LLMをめぐる様々な見解は、大抵、現実そのものをどう認識するかで分かれる。&lt;/p&gt;
&lt;p&gt;少し前、Redis作者のSalvatore Sanfilippo︵antirez︶が&lt;a href=&quot;https://antirez.com/news/158&quot;&gt;AIコーディングツールの体験談&lt;/a&gt;を書いた。彼は我々の多くと同様、手作りのコードとソフトウェアの人間的タッチを深く重視する人物だ。しかし、こう言う。「今起きている現実から目を背けることは不可能だ。コードを書くことはもはや大部分不要だ…プログラミングは永遠に変わった」&lt;/p&gt;
&lt;p&gt;彼の結論はこうだ。適応せよ。新しいツールを学べ。「反AI」ハイプに陥るな。彼はLLMを九十年代のオープンソースのような民主化技術と見ている。小さなチームが大企業と競争できるようにするものだと。&lt;/p&gt;
&lt;p&gt;私もantirezの現実認識には概ね同意する。LLMはプログラミングを根本的に変えた、そして元には戻せない。一方、〈自由・オープンソースソフトウェアとLLM訓練について〉の著者は現実を異なって認識しているように見える。抵抗が依然として意味があり、撤退が効果的でありうり、LLMの訓練データへのアクセスを有意義に減らせるという認識だ。私は懐疑的だ。OpenAIとAnthropicは既に必要なものを全て収集した。GitHubも全てのコードを持っている。訓練データは既に存在する。&lt;/p&gt;
&lt;p&gt;しかし、ここで私はantirezの楽観論と分かれる。彼は中央集権化を懸念しながらも、中国産オープンモデルなどを通じた市場競争が解決してくれると信じているようだ。そして、開発者がどのように適応しこのツールを活用できるかに集中する。重要な話だが、より深い問いを避けている。この変革はどのような条件で起きるのか？&lt;/p&gt;
&lt;p&gt;問いはLLMを使うか適応するかではない。その船は既に出た。問いは誰がモデルを所有するかだ。モデルを訓練したコモンズから誰が利益を得るのかだ。数百万のF/OSS開発者が自分のコードを公共に寄与したなら、結果として生まれるモデルがプロプライエタリであるべきなのか？これは単に中央集権化や市場力学の問題ではない。集団労働の果実が集団に残るか、私有財産になるかの問題だ。&lt;/p&gt;
&lt;h2 id=&quot;唯物論的読解&quot;&gt;唯物論的読解&lt;/h2&gt;
&lt;p&gt;自由・オープンソースソフトウェアの歴史を唯物論的レンズで見ると、明確なパターンが見える。技術変化が新しい形態の搾取を生み出し、その搾取はコモンズを保護するための新しい形態のライセンシングを要求する。&lt;/p&gt;
&lt;p&gt;軌跡を見てみよう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.html&quot;&gt;GPLv2&lt;/a&gt;&lt;/strong&gt;︵一九九一︶はバイナリ配布問題を扱った。企業はGPLコードを取得してコンパイルし、バイナリのみを配布した。自由なコードから事実上プロプライエタリなソフトウェアを作ったのだ。解決策はコピーレフトだった。ソフトウェアを配布するならソースコードも提供しなければならない。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GPLv3&lt;/a&gt;&lt;/strong&gt;︵二〇〇七︶は&lt;a href=&quot;https://en.wikipedia.org/wiki/Tivoization&quot;&gt;Tivoization&lt;/a&gt;を扱った。TiVoのような企業は技術的にはソースコードを提供したが、ハードウェアロックで修正版の実行を防いだ。解決策はソースコードだけでなくインストール情報まで要求することだった。ユーザーが修正する自由を維持できるように。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gnu.org/licenses/agpl-3.0.html&quot;&gt;AGPL&lt;/a&gt;&lt;/strong&gt;︵二〇〇七︶は&lt;a href=&quot;https://www.gnu.org/licenses/why-affero-gpl.html&quot;&gt;SaaSの抜け穴&lt;/a&gt;を扱った。企業はソフトウェアを配布する必要がないことに気づいた。サービスとして実行するだけでGPLの配布要件が作動しなかった。解決策はネットワーク相互作用を配布と同等に扱うことだった。&lt;/p&gt;
&lt;p&gt;毎回同じパターンが繰り返された。新技術が既存ライセンスの抜け穴を露呈させると、企業がその抜け穴を悪用した。するとコミュニティが抜け穴を埋める進化したライセンシングで対応した。これは理想主義が現実に出会って失敗したのではない。弁証法的発展だ。変化する物質的条件に合わせて我々の道具を精製する持続的過程だ。&lt;/p&gt;
&lt;p&gt;今、また新しい間隙が見える。訓練の抜け穴だ。企業はF/OSSコードをプロプライエタリモデルの訓練データとして使える。モデルを公開したり訓練の出所を明らかにする義務もない。典型的な搾取だ。互恵性のない価値抽出だ。&lt;/p&gt;
&lt;p&gt;唯物論的対応は新技術を拒絶することではない。ライセンスを進化させて包摂することだ。&lt;/p&gt;
&lt;h2 id=&quot;訓練コピーレフトがどのような姿になりうるか&quot;&gt;訓練コピーレフトがどのような姿になりうるか&lt;/h2&gt;
&lt;p&gt;私はGPLv4やTGPL︵Training GPL︶のようなものを構想する。次のような条項を含むべきだろう。&lt;/p&gt;
&lt;p&gt;訓練は明示的に許可される。コードは機械学習モデルの訓練データとして使用できる。F/OSSの自由の原則と整合的で、分野差別を避ける。&lt;/p&gt;
&lt;p&gt;しかし、その結果物であるモデルは解放されなければならない。該当コードで訓練された全てのモデルは互換可能なコピーレフトライセンスで重み︵weights︶を公開しなければならない。GPLv3がバイナリにソースコードを要求するように、訓練コピーレフトは訓練されたシステムにモデル重みを要求する。&lt;/p&gt;
&lt;p&gt;訓練データは文書化されなければならない。依存性を文書化することを期待するように、どのようなデータで訓練したかを明確にしなければならない。&lt;/p&gt;
&lt;p&gt;ファインチューニングされたモデルも義務を継承する。コピーレフトモデルをファインチューニングすれば派生モデルも公開しなければならない。「少し修正して新しいものだと主張する」回避を防ぐ。&lt;/p&gt;
&lt;p&gt;ネットワーク使用も義務を賦課する。AGPLのようにAPIでモデルを提供することも配布と見なして重み公開を要求する。&lt;/p&gt;
&lt;h2 id=&quot;技術的挑戦と先例&quot;&gt;技術的挑戦と先例&lt;/h2&gt;
&lt;p&gt;これは技術的に可能なのか？執行できるのか？妥当な問いだが、新しい問いではない。以前の全てのGPL進化で同じように提起された問いだ。&lt;/p&gt;
&lt;p&gt;バイナリがあなたのソースコードでコンパイルされたことをどう証明するのか？ハードウェアロックが修正を妨げることをどう証明するのか？サービスがあなたのコードを実行していることをどう証明するのか？毎回、答えは技術的証拠、コミュニティの監視、時には法的措置の組み合わせだった。完璧な執行は不可能だ。しかし、ライセンスが無価値だという意味ではない。GPL違反は起きるが、GPLは機能する。巨大なコモンズを作り保護してきた。&lt;/p&gt;
&lt;p&gt;特定のコードが訓練に使われたことの証明は、ソースコードがバイナリに使われたことの証明より確かに難しいだろう。しかし、乗り越えられないものではない。訓練データセットは文書化できる。モデル系譜は追跡できる。統計分析が訓練の出所を特定できるかもしれない。より重要なのは、ライセンスの存在自体が遵守に向けた社会的・法的圧力を生み出すことだ。&lt;/p&gt;
&lt;p&gt;混合訓練セットの問題もある。TGPLと非TGPLコードで共に訓練したら？これもGPLと非GPLコードをリンクする問題と類似している。数年間のコミュニティ実践と時折の法廷事例で解決されてきた。詳細は別の問題だが、大きな方向性は正しい。&lt;/p&gt;
&lt;h2 id=&quot;なぜこれが撤退より重要なのか&quot;&gt;なぜこれが撤退より重要なのか&lt;/h2&gt;
&lt;p&gt;著者の撤退戦略には感情的な訴求力がある。アクセスを拒否し、「あなたは我々を尊重しないから我々の成果物を持てない」と言うことには爽快感がある。しかし、いくつかの面でより大きな絵を見逃している。&lt;/p&gt;
&lt;p&gt;まず、この戦略は戦場を大きく譲歩する。F/OSS開発者がコードを公開状態から撤退させれば、AI訓練を止めるのではなく、&lt;strong&gt;オープンソース&lt;/strong&gt;AI訓練だけを止める。OpenAIとAnthropicは既に必要なものは全て収集し、巨大なデータセットを持っている。撤退が止めるのはLlamaやMistralのようなプロジェクトとより広いオープンソースLLMエコシステムが良質な訓練データにアクセスすることだ。&lt;/p&gt;
&lt;p&gt;より根本的には、問題を誤って捉えている。技術自体ではなく、それを誰がどう使うかが問題なのに。LLMはコンパイラやWebサーバーが本質的に搾取的でないのと同様、本質的に搾取的ではない。単なる道具だ。資本主義下の全ての道具のように、権力を集中させるか分散させるかに使われうる。使用条件ではなく拒絶に集中すれば、病気ではなく症状だけを治療する危険がある。&lt;/p&gt;
&lt;p&gt;コミュニティ分裂の危険もある。著者は「非倫理的ツール」の使用者を排斥し、歓迎されないようにし、孤立させようと言う。しかし、どこまでが使用なのか？誰かがF/OSSプロジェクトのパッチを作成するのにGitHub Copilotを使ったら？デバッグにChatGPTを使ったら？正確にどこが線で、それを誰が決めるのか？こうした純粋性テストは歴史的に目標達成より運動分裂により効果的だった。&lt;/p&gt;
&lt;p&gt;しかし、最も致命的なのは、実際に機能してきたF/OSSの戦略を放棄することだ。アクセスを止めるのではなく、ライセンスで自由を守る戦略を。GPLの天才性は誰にもコード使用を止めなかったことだ。代わりに、受け取った自由を他者にも与えるよう要求して全員の自由を保障した。撤退は正反対の哲学だ。&lt;/p&gt;
&lt;h2 id=&quot;我々が作るべき未来&quot;&gt;我々が作るべき未来&lt;/h2&gt;
&lt;p&gt;私は強力なAIモデルが存在し、訓練する余力のある民間企業だけでなく全員がそのようなモデルにアクセスできる未来に住みたい。数百万のF/OSSプロジェクトにエンコードされた知識がプロプライエタリモデルに私有化される代わりにコモンズの一部となる世界を望む。私のコードがモデル訓練を助けるなら、そのモデルを私と他の全員が使用し研究し修正し共有できる世界を望む。&lt;/p&gt;
&lt;p&gt;この未来は撤退からは来ない。参加から、我々のライセンシングツールの進化から、我々が見たいオープンソースAIエコシステムを構築することから来る。&lt;a href=&quot;https://www.gnu.org/&quot;&gt;GNU&lt;/a&gt;/&lt;a href=&quot;https://www.kernel.org/&quot;&gt;Linux&lt;/a&gt;を作り、我々が知るWebを作り、我々が毎日使うツールを与えたのと同じ戦略から来る。&lt;/p&gt;
&lt;p&gt;著者は尊重は与えられるものではなく得るものであり、我々を無視する者には同様に対処すべきだと書く。私もこの原則には同意するが、異なって適用したい。無礼なのは訓練行為自体ではなく、その結果物を私有化し共同体に返さないことだ。適切な対応は我々も共有を拒絶することではない。それは底辺への競争だ。互恵性を要求し、我々が常に主張してきたまさにその自由を主張することだ。&lt;/p&gt;
&lt;p&gt;Linus TorvaldsがLinuxをプロプライエタリとして維持する代わりにGPLで公開したとき、「企業はこれを使えない」とは言わなかった。「誰でも使えるが改善したら共有しなければならない」と言った。その条件、その互恵性の要求が、ボランティア開発者と巨大企業を共に含むエコシステムを作った。スマートフォンからスーパーコンピューターまで全てを動かし、共に作る方式が実際に機能することを証明したエコシステムを。&lt;/p&gt;
&lt;p&gt;AI時代にも同じ原則を適用すべきだ。「我々のコードで訓練禁止」ではなく、「我々のコードで訓練するならモデルを解放せよ」と。撤退ではなく、参加条件だ。拒絶ではなく、再専有だ。&lt;/p&gt;
&lt;h2 id=&quot;歴史的機会&quot;&gt;歴史的機会&lt;/h2&gt;
&lt;p&gt;唯物史観は必然性に関するものではないと思う。パターンを認識しそれに従って行動することだ。F/OSSライセンシングの全ての主要な転換は、問題認識、コミュニティ議論、法的革新、漸進的採用のパターンに従った。LLMに関しては現在、そのサイクルの始点にいるようだ。&lt;/p&gt;
&lt;p&gt;機会だ。現在、AI訓練とモデル公開を支配する規範についての対話が起きている。コミュニティではこれらの問題についての議論が熱い。オープンソースAIモデルが増えている今、どのライセンスが適用されるかはまだ定まっていない。&lt;/p&gt;
&lt;p&gt;F/OSS開発者がこの対話から撤退し、戦場を譲歩し、拒絶だけに集中すれば、五年後には企業と企業寄りの裁判所によって全ての規範が設定されているのを見ることになるだろう。訓練の抜け穴が確固として確立され、オープンソースAIはプロプライエタリモデルと比べて永久に不利になるだろう。&lt;/p&gt;
&lt;p&gt;しかし、我々が参加し、訓練コピーレフトを推し進め、モデル解放を要求するライセンスでコードを公開し始めれば、我々がその未来を作れる。簡単ではないだろう。法的作業、コミュニティ組織化、恐らく法廷事例も必要だろう。GPLがテストされ検証されるのに数年かかった。しかし、結局機能した。訓練コピーレフトが機能しない理由はない。&lt;/p&gt;
&lt;h2 id=&quot;結論&quot;&gt;結論&lt;/h2&gt;
&lt;p&gt;「&lt;a href=&quot;https://chronicles.mad-scientist.club/tales/on-floss-and-training-llms/&quot;&gt;自由・オープンソースソフトウェアとLLM訓練について&lt;/a&gt;」に表現された怒りと挫折を尊重する。現在のAI企業が悪く行動しており、我々の成果物を搾取しており、法律が不十分だという点で、著者は正しい。私の異論は、我々の対応が拒絶ではなく進化であるべきであり、撤退ではなく参加であるべきであり、アクセス禁止ではなくライセンシング革新であるべきだと信じる点だ。&lt;/p&gt;
&lt;p&gt;問いはF/OSSコードに対するLLM訓練がある抽象的意味で倫理的かではない。どのような条件で倫理的かだ。答えはF/OSSがこれまで示してきた答えと同じだと信じる。我々が付与する自由が保存され伝達されるとき、改善がコモンズに戻るとき、知識が自由に留まるとき、倫理的なのだ。&lt;/p&gt;
&lt;p&gt;クローラーを遮断するのではなく、彼らがクロールする規則を変えるべきだ。GitHubから撤退するのではなく、GitHub訓練がコピーレフトを尊重するよう要求すべきだ。AIツール使用者を排斥するのではなく、我々の自由を尊重するより良いAIツールを作るべきだ。&lt;/p&gt;
&lt;p&gt;唯物史観は教える。新しい生産力は新しい生産関係を要求すると。LLMは新しい生産力だ。訓練コピーレフトはLLMをF/OSSの価値と整合させる新しい生産関係となるだろう。&lt;/p&gt;
&lt;p&gt;私が書くコードは自由であるために書く。ニューラルネットワークを通過してモデル重みとして現れても、自由に留まることを望む。純真な理想主義ではない。数十年間F/OSSを導いてきたまさにその原則だ。我々は複数の技術転換を経てソフトウェアの自由を保護してきた、今回もできる。&lt;/p&gt;
&lt;p&gt;LLMを拒絶するのではなく、取り戻すべきだ。我々のコモンズが彼らの私有地になるのを傍観するのか？私はコードが全員のものであるように、それで訓練したAIモデルも全員のものとなる未来のために闘いたい。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>フェディバースと過ごした二〇二五年</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/" />
    <id>https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2025-12-09T15:00:00.000Z</published>
    <updated>2025-12-10T11:41:20.000Z</updated>
    <content type="html">&lt;h1 id=&quot;フェディバースと過ごした二〇二五年1&quot;&gt;フェディバースと過ごした二〇二五年&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/h1&gt;
&lt;p&gt;昨年も「&lt;a href=&quot;/2024/12/a-year-with-the-fediverse/&quot;&gt;フェディバースと共に過ごした一年&lt;/a&gt;」というタイトルの記事を書いたが、
今年も似たようなテーマでまた記事を書くことになった。
専業でフェディバース︵fediverse︶&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;関連のオープンソースソフトウェアを開発するようになったこともあり、
この仕事を続ける限り、毎年このような記事を書くことになりそうだという気もする。&lt;/p&gt;
&lt;h2 id=&quot;thinking-penguin-magazine-vol0&quot;&gt;『Thinking Penguin Magazine Vol.0』&lt;/h2&gt;
&lt;p&gt;日本のフェディバース開発者の集まりである&lt;a href=&quot;https://fedilug.y-zu.org/&quot;&gt;FediLUG&lt;/a&gt;が初めて発行した同人誌
『&lt;a href=&quot;https://gishohaku.dev/gishohaku11/books/PmvnNyNv4Rh7dHmt14EH&quot;&gt;Thinking Penguin Magazine Vol.0&lt;/a&gt;』に微力ながら寄稿することになった。
私が書いた原稿は「国漢文混用体からHolloまで」という記事で、どのようにして
&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;と&lt;a href=&quot;https://docs.hollo.social/ja/&quot;&gt;Hollo&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;を作ることになったのかを扱った。この雑誌は第十一回
&lt;a href=&quot;https://gishohaku.dev/&quot;&gt;技術書同人誌博覧会&lt;/a&gt;にも出品されたとのことだが、私は余裕がなくて直接観覧は
できなかったものの、出品に参加できただけでも貴重な経験となった。&lt;/p&gt;
&lt;h2 id=&quot;botkit&quot;&gt;BotKit&lt;/h2&gt;
&lt;p&gt;今年の初めにはFedifyをベースにして&lt;a href=&quot;https://botkit.fedify.dev/&quot;&gt;BotKit&lt;/a&gt;というActivityPubボットフレームワークを
作った。最初は何かフェディバースのボットアカウントを作りたかったような気がするが、
正確に何だったかは今では思い出せない。&lt;/p&gt;
&lt;p&gt;とにかく、BotKitはMastodonやMisskeyのようなActivityPubサーバーにアカウントを作って
Mastodon APIやMisskey APIを利用してそのアカウントに投稿をする方式の限界を
感じて始めたプロジェクトで、
BotKitアプリ自体が一つのActivityPubサーバーとして機能する構造になっている。
そのような構造のおかげで、投稿の最大文字数やレートリミット︵rate limit︶などの様々な
制約から自由だという利点がある。&lt;/p&gt;
&lt;p&gt;作って公開した後、BotKitで作られたいくつかのフェディバースボットが生まれたが、
実はまだそれほど多くは使われていない。&lt;/p&gt;
&lt;h2 id=&quot;hackers-pub&quot;&gt;Hackers’ Pub&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers’ Pub&lt;/a&gt;というソフトウェア開発者のためのActivityPubベースの招待制
コミュニティを昨年末に作ったが、今年になって多くの方々から関心を頂き、
本当に多様なソフトウェア開発者の方々と交流する機会ができた。
特に、&lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;&lt;ruby&gt;李在烈&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;イ・ジェヨル&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さんが熱心にHackers’ Pubを宣伝してくださったおかげで、
多くの方々がHackers’ Pubに来られるようになった。&lt;/p&gt;
&lt;p&gt;夏にはデザイナーの&lt;a href=&quot;https://www.instagram.com/eunjibak/&quot;&gt;&lt;ruby&gt;朴恩智&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;パク・ウンジ&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さんに&lt;a href=&quot;https://github.com/hackers-pub/visual-identity&quot;&gt;Hackers’ Pubのビジュアルアイデンティティ&lt;/a&gt;を依頼し、
とても可愛い猫のロゴが誕生することになった。この猫は幸いにも
Hackers’ Pubにいらっしゃる多くの方々に愛され、&lt;q&gt;パブにゃんこ&lt;/q&gt;という愛称まで得ることに
なった。パブにゃんこデザインを活用してTシャツやステッカーも制作したが、皆さんの反応が
とても良くて嬉しかった。&lt;/p&gt;
&lt;p&gt;もしこの記事を読んでHackers’ Pubに興味が湧いた方がいらっしゃれば、
招待できますので個人的にご連絡ください。&lt;/p&gt;
&lt;h2 id=&quot;software-sessions出演&quot;&gt;『Software Sessions』出演&lt;/h2&gt;
&lt;p&gt;今年の春には良い機会があり、&lt;a href=&quot;https://bsky.app/profile/jeremyjung.com&quot;&gt;Jeremy Jung&lt;/a&gt;氏がホストする
『&lt;a href=&quot;https://www.softwaresessions.com/&quot;&gt;Software Sessions&lt;/a&gt;』インターネットラジオに出演し、ActivityPubと
Fedifyについて話すことができた——「&lt;a href=&quot;https://www.softwaresessions.com/episodes/activitypub/&quot;&gt;Hong Minhee on ActivityPub&lt;/a&gt;」。
ただし英語で進行されたため、かなり緊張してしどろもどろになってしまったことが後悔として残る。
英会話をもっと練習しなければという思いもした。︵しかしいつもそうであるように、思うだけで実行には移せなかった…︶&lt;/p&gt;
&lt;h2 id=&quot;私たちのコードを探して出演&quot;&gt;『私たちのコードを探して』出演&lt;/h2&gt;
&lt;p&gt;生まれて初めてYouTubeにも出演することになった。&lt;a href=&quot;https://lqez.dev/&quot;&gt;&lt;ruby&gt;朴賢宇&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;パク・ヒョヌ&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さんが運営される&lt;a href=&quot;https://www.youtube.com/user/lqez&quot;&gt;ハル開発&lt;/a&gt;
チャンネルの『私たちのコードを探して』︵&lt;span lang=&quot;ko&quot;&gt;우리의 코드를 찾아서&lt;/span&gt;︶シリーズに
「&lt;a href=&quot;https://youtu.be/sqxR8zscSDo&quot;&gt;民憙さんとFedify &amp;#x26; Holloについて学ぶ&lt;/a&gt;」︵&lt;span lang=&quot;ko&quot;&gt;民憙 님과 Fedify &amp;#x26; Hollo 알아보기&lt;/span&gt;︶編で出ることになったのだ。どのようにFedifyと
Holloを作ることになったのか、その誕生秘話を気楽な雰囲気で語ることができた。&lt;/p&gt;
&lt;h2 id=&quot;オープンソースコントリビューションアカデミーossca&quot;&gt;オープンソースコントリビューションアカデミー︵&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;︶&lt;/h2&gt;
&lt;p&gt;韓国政府機関である情報通信産業振興院︵&lt;abbr title=&quot;National IT Industry Promotion Agency&quot;&gt;NIPA&lt;/abbr&gt;︶傘下のオープンソースソフトウェア統合支援センター︵Open UP︶が
主催する&lt;a href=&quot;https://www.oss.kr/contribution_academy&quot;&gt;オープンソースコントリビューションアカデミー&lt;/a&gt;︵以下&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;︶二〇二五年度参与型
プロジェクトとしてFedifyが選定された。これを機に本当に多様な優秀なコントリビューターの方々と
ご縁ができた。合計90名以上の方々が志願してくださり、その中から20名余りの
方々と一緒にFedifyプロジェクトを進めることができた。&lt;/p&gt;
&lt;p&gt;実際に&lt;a href=&quot;https://github.com/fedify-dev/fedify/discussions/354&quot;&gt;Fedify 1.8&lt;/a&gt;及び&lt;a href=&quot;https://github.com/fedify-dev/fedify/discussions/462&quot;&gt;Fedify 1.9&lt;/a&gt;は&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;&lt;!-- --&gt;を通じて出会ったコントリビューター
の方々がいなければリリースできなかったほど、多くの貢献をしてくださった。&lt;/p&gt;
&lt;p&gt;特に、&lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;&lt;ruby&gt;李在烈&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;イ・ジェヨル&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さん、&lt;a href=&quot;https://chomu.dev/&quot;&gt;&lt;ruby&gt;李璨行&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;イ・チャンヘン&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さん、&lt;a href=&quot;https://hackers.pub/@gaebalgom&quot;&gt;&lt;ruby&gt;金炫舒&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;キム・ヒョンソ&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さん、&lt;a href=&quot;https://kwonjiwon.org/&quot;&gt;&lt;ruby&gt;権祉源&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;クォン・ジウォン&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さん&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot; id=&quot;user-content-fnref-5&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;は&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;期間が
終わった後も継続的にFedifyに貢献してくださっており、本当に心強い。
この縁で十一月には皆で福岡に旅行に行くこともできた。&lt;/p&gt;
&lt;h2 id=&quot;fedify投資誘致&quot;&gt;Fedify投資誘致&lt;/h2&gt;
&lt;p&gt;昨年の夏に&lt;a href=&quot;/2024/07/ghost-funds-fedify/&quot;&gt;GhostのFedifyへの資金支援&lt;/a&gt;を受けてしばらくの間フルタイムでFedifyプロジェクトに
専念することができたが、それも今年の第一四半期で終わり、振り出しに戻った。
新しい資金源を探すために今年の春に&lt;a href=&quot;https://nlnet.nl/&quot;&gt;NLnet&lt;/a&gt;に申請書を出したが、残念ながら落選し、
就職することまで考えていた矢先に、幸いにも申請していた&lt;a href=&quot;https://www.sovereign.tech/programs/fund&quot;&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;/a&gt;に出した申請書が
通過することになった。むしろNLnetから受けられる投資金よりもはるかに余裕のある
金額を投資してもらえることになったので、転禍為福となったわけだ。これについては
「&lt;a href=&quot;/2025/10/stf-fedify/&quot;&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;のFedifyへの投資&lt;/a&gt;」という記事で詳しく書いた。&lt;/p&gt;
&lt;p&gt;とにかく、ありがたいことにこれから一年間フルタイムでFedifyプロジェクトに集中できる
ようになった。&lt;/p&gt;
&lt;h2 id=&quot;各種発表&quot;&gt;各種発表&lt;/h2&gt;
&lt;p&gt;今年は様々な集まりやカンファレンスで発表する機会が多かった。&lt;/p&gt;
&lt;p&gt;今年初めてした発表は四月初めに開催された第八回FediLUG勉強会&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;でのもので、
先に述べた『Thinking Penguin Magazine Vol.0』に寄稿した記事
「&lt;a href=&quot;https://speakerdeck.com/minhee/guo-han-wen-hun-yong-ti-karahollomade&quot;&gt;国漢文混用体からHolloまで&lt;/a&gt;」と
同じタイトルで発表した。内容は記事とほぼ同じだ。日本に行く余裕がなかったため、
発表自体はオンラインで行った。&lt;/p&gt;
&lt;p&gt;その次にした発表も日本でのもので、八月初めに&lt;a href=&quot;https://event.ospn.jp/osc2025-kyoto/&quot;&gt;&lt;abbr title=&quot;Open Source Conference&quot;&gt;OSC&lt;/abbr&gt; 2025 京都&lt;/a&gt;で開催された
「&lt;a href=&quot;https://event.ospn.jp/osc2025-kyoto/session/2211664&quot;&gt;フェディバースのつくりかた—開発者・管理者たちの現場から&lt;/a&gt;」
セミナーで「&lt;a href=&quot;https://speakerdeck.com/minhee/botkit-by-fedify-shui-demojian-dan-nizuo-reruactivitypubbotuto&quot;&gt;BotKit by Fedify〜誰でも簡単に作れるActivityPubボット&lt;/a&gt;」という
テーマで発表した。この時も京都まで行く余裕がなかったのでオンラインで参加した。&lt;/p&gt;
&lt;p&gt;秋には今年初開催となる韓国の自由・オープンソースソフトウェアカンファレンス
&lt;a href=&quot;https://2025.fossforall.org/&quot;&gt;FOSS for All カンファレンス 2025&lt;/a&gt;で「ヤクシェービング——新しいオープンソースの原動力」︵&lt;span lang=&quot;ko&quot;&gt;야크 셰이빙: 새로운 오픈 소스의 原動力&lt;/span&gt;︶という
テーマで基調講演をすることになった。この発表は日本でした発表である「国漢文混用体から
Holloまで」を基に、私が作ったオープンソースプロジェクトの中でフェディバースと関係ない
ものまで一緒に扱ったものだ。&lt;/p&gt;
&lt;p&gt;冬には韓国の関数型プログラミングカンファレンスである&lt;a href=&quot;https://event-us.kr/liftioconf/event/114005&quot;&gt;liftIO 2025&lt;/a&gt;で
「Optique——TypeScriptの型推論で&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;バリデーションを代替する」︵&lt;span lang=&quot;ko&quot;&gt;Optique: TypeScript의 타입 推論으로 &lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt; 有效性 檢查를 代替하기&lt;/span&gt;︶という
発表をした。今年私がした発表の中では唯一フェディバースと関連のない発表だった。&lt;/p&gt;
&lt;h2 id=&quot;一年を締めくくりながら&quot;&gt;一年を締めくくりながら&lt;/h2&gt;
&lt;p&gt;大したことをしていないと思っていたが、いざ整理してみると意外にあれこれしたことが多い一年
だった。&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;からの投資は来年末まであるので、おそらく来年もFedify
プロジェクトを中心にフェディバースと関連した多くの活動を続けることになりそうだ。
個人的にはActivityPubとフェディバースの状況が—XがElon Muskの手中に
落ちたにもかかわらず—まだ盤石ではないことが心配だが、来年には状況がもう少し
良くなることを願う。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://adventar.org/calendars/11463&quot;&gt;Fediverse Advent Calendar 二〇二五&lt;/a&gt;の十日目の記事。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;分散型ソーシャルメディアネットワーク。
様々なソーシャルメディアソフトウェアやサービスが&lt;a href=&quot;https://www.w3.org/&quot;&gt;&lt;abbr title=&quot;World Wide Web Consortium&quot;&gt;W3C&lt;/abbr&gt;&lt;/a&gt;の勧告である&lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;
プロトコルを実装し、相互に通信可能にすることがポイントである。 &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;TypeScriptで作成されたActivityPubサーバーフレームワーク。 &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;Fedifyの上で作られた一人ユーザー用ActivityPubサーバー。一人で使うには
Mastodonが重すぎて不要な機能が多いため、作ることになった。 &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-5&quot;&gt;
&lt;p&gt;五十音順。 &lt;a href=&quot;#user-content-fnref-5&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-6&quot;&gt;
&lt;p&gt;日本の&lt;a href=&quot;https://fedilug.y-zu.org/&quot;&gt;FediLUG&lt;/a&gt;で隔月で開催する勉強会。 &lt;a href=&quot;#user-content-fnref-6&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 6&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>

  <entry>
    <title>STFのFedifyへの投資</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/" />
    <id>https://writings.hongminhee.org/2025/10/stf-fedify/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2025-10-03T12:00:00.000Z</published>
    <updated>2025-10-03T11:59:47.000Z</updated>
    <content type="html">&lt;h1 id=&quot;stfのfedifyへの投資&quot;&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;のFedifyへの投資&lt;/h1&gt;
&lt;p&gt;昨年、&lt;a href=&quot;/2024/07/ghost-funds-fedify/&quot;&gt;FedifyがGhostから資金支援を受けてから&lt;/a&gt;、
しばらくの間フルタイムで&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;プロジェクトに専念することができた。
契約期間が終了した後も、Ghostは&lt;a href=&quot;https://opencollective.com/fedify&quot;&gt;Open Collective&lt;/a&gt;を通じて一定のスポンサーシップを続けてくれたが、
Fedifyだけを専業でやれるほどではなかった。GhostのCEOから、
もっと安定した資金源を確保してはどうかとアドバイスをもらい、
いろいろな財団が運営する投資プログラムに申請書を出すことになった。
それが今年の春のことだ。&lt;/p&gt;
&lt;h2 id=&quot;nlnet&quot;&gt;NLnet&lt;/h2&gt;
&lt;p&gt;最初に申請したのは&lt;a href=&quot;https://nlnet.nl/&quot;&gt;NLnet&lt;/a&gt;だった。NLnetはフェディバースにも関心が高く、
ファンドの規模もかなり大きい。何より、
周りのActivityPub関連のオープンソース開発者たちがNLnetを薦めてくれたのが大きかった。&lt;/p&gt;
&lt;p&gt;しかし、NLnetに送った申請書は落ちてしまった。後で分かったことだが、
NLnetは資金を受けるプロジェクトのメンテナーの中にヨーロッパ市民が一人くらいはいないと、
採択される確率が低いという話を聞いた。もちろん、単純にそういう理由ではなく、
私が書いた申請書が水準に達していなかったからかもしれない。&lt;/p&gt;
&lt;p&gt;申請書を出したのは一月末で、不採択通知を受けたのは五月中旬だった。
その間にGhostとの契約は終わり、無職になっていた。収入が別になかったので、
就職するか他のファンドを探すかしなければならなかった。&lt;/p&gt;
&lt;h2 id=&quot;sovereign-tech-fund&quot;&gt;Sovereign Tech Fund&lt;/h2&gt;
&lt;p&gt;次に申請したのは、
&lt;a href=&quot;https://www.sovereign.tech/&quot;&gt;Sovereign Tech Agency&lt;/a&gt;が運営するオープンソース投資ファンドである&lt;a href=&quot;https://www.sovereign.tech/programs/fund&quot;&gt;Sovereign
Tech Fund&lt;/a&gt;だった。&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;は主に、
他のソフトウェアを開発したりデジタルネットワーキングを可能にするのに不可欠なオープンソースプロジェクトに投資しているという。
&lt;a href=&quot;https://www.sovereign.tech/tech/&quot;&gt;プロジェクト一覧&lt;/a&gt;を見ると、Servo、systemd、Babel、FreeBSD、Samba、GNOME、
FFmpegなどのプロジェクトに投資したことが分かる。&lt;/p&gt;
&lt;p&gt;すでにNLnetで一度落ちて自信がかなり落ちていた状態だったが、
心機一転して申請書を丁寧に作成して提出した。メールを探してみると、
NLnetから不採択通知を受けたその日に&lt;!-- --&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;に申請したようだ。&lt;/p&gt;
&lt;p&gt;今回も返事はかなり遅かった。
収入がなくて貯金を使って暮らしていたが、二ヶ月が過ぎても返事が来なくて、
心がかなり焦った。ほぼダメだろうと思っていたので就活も一緒に準備したが、
去年一年間専業でオープンソース作業だけをした経験があまりにも良かったので、
就活が手につかなかった。&lt;/p&gt;
&lt;p&gt;ありがたいことに八月初めに返事が来て、驚くことにFedifyプロジェクトが&lt;!--
--&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;に合格した！
その後はメールで書類をやり取りするうちに二ヶ月がさっと過ぎた。
そしてついに昨日、Fedifyの&lt;!-- --&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;プログラムに着手することになった。
私はこれから、&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;に申請する時に自分で決めたマイルストーンを達成するたびに資金を受け取ることになる。
総額は€192,000で、すべてのマイルストーンは来年末までに完了しなければならない。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.sovereign.tech/tech/fedify&quot;&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;のFedifyへの投資についてはSovereign Tech
Agencyのウェブサイトに掲載されており&lt;/a&gt;、
今後遂行すべきマイルストーン一覧は&lt;a href=&quot;https://hollo.social/@fedify/0199a579-adb3-7bf5-a8ea-970c8fa91f09&quot;&gt;Fedifyプロジェクトの告知文&lt;/a&gt;に書かれている。&lt;/p&gt;
&lt;p&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!-- --&gt;の資金源がドイツから来ているからか、
欧州連合のウェブサイトにFedifyプロジェクト投資についての&lt;a href=&quot;https://ted.europa.eu/en/notice/-/detail/607193-2025&quot;&gt;事前公告&lt;/a&gt; (ex-ante)
が載ったのもなかなか興味深かった。&lt;/p&gt;
&lt;h2 id=&quot;所懐&quot;&gt;所懐&lt;/h2&gt;
&lt;p&gt;今回このようにFedifyプロジェクトの資金源確保のためにいろんなファンドを探し回りながら感じたのは、
韓国にもオープンソースプロジェクトに投資する公的ファンドがあれば本当にいいのにという思いだった。
特に、NLnetに出した申請書が落ちた時、そんな思いを本当にたくさんした。
幸い私は国籍を問わずオープンソースプロジェクトに投資してくれる&lt;!-- --&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!--
--&gt;から資金を受けることができたが、最初から韓国に&lt;!-- --&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;!--
--&gt;のような投資プログラムがあったら、ずっと楽だっただろうし、
私以外にも韓国にいる多くのオープンソース開発者たちが彼らのプロジェクトに専念できる機会が与えられただろう。&lt;/p&gt;
&lt;p&gt;また、まだFedifyには私以外に共同メンテナーが別にいないので今回は一人で資金を受けることになったが、
来年末に再びファンドを探すことになる時までは、
他の共同メンテナーの方々をお迎えして一緒に専業オープンソースプロジェクトができたらいいなという夢を持つようになった。&lt;/p&gt;</content>
  </entry>

  <entry>
    <title>オープンソース開発の近況</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/" />
    <id>https://writings.hongminhee.org/2025/09/foss/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2025-09-12T11:10:00.000Z</published>
    <updated>2025-09-12T11:08:00.000Z</updated>
    <content type="html">&lt;h1 id=&quot;オープンソース開発の近況&quot;&gt;オープンソース開発の近況&lt;/h1&gt;
&lt;p&gt;気が付けば最近かなり多くのオープンソースプロジェクトを作ることになったので、
近況報告を兼ねて、進行中のオープンソースプロジェクトを文章に纏めてみる。
各プロジェクトは何らかの形でお互いに関係している。&lt;/p&gt;
&lt;h2 id=&quot;hollo&quot;&gt;&lt;a href=&quot;https://docs.hollo.social/&quot;&gt;Hollo&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;実は最近私が作ることになったオープンソースプロジェクトの出発点となったのが、
まさにこのプロジェクトだ。Elon MuskがTwitterを買収してXに名前を変えてから、
もともと使っていたMastodonをさらに熱心に使うようになったのだが、
&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E5%B0%82%E7%94%A8%E6%96%87%E3%81%A8%E6%BC%A2%E5%AD%97%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E6%B7%B7%E3%81%98%E3%82%8A%E6%96%87&quot;&gt;漢字ハングル混じり文&lt;/a&gt;、所謂「国漢文混用体」で投稿を書いていると他の人が読みづらくないかと気を使うようになった。
そこで&lt;a href=&quot;https://github.com/dahlia/seonbi&quot;&gt;Seonbi&lt;/a&gt;を使って漢字ハングル混じり文をハングル専用文に変換する機能をMastodonに追加することも考えたが…私以外誰も使わなさそうなこの機能をMastodonのアップストリームに入れるのはさすがに無理がある。
となるとダウンストリームパッチを維持しながらMastodonサーバーも自分で運営しなければならないということになるが、
Mastodonは重いことで有名なのでそうしたくはなかった。
そこで御一人様向けの軽量ActivityPub実装を作ろうと思ったのが&lt;a href=&quot;https://docs.hollo.social/&quot;&gt;Hollo&lt;/a&gt;だ。
一人で使うActivityPubサーバーソフトウェアなので、
韓国語で「一人で」という意味の「&lt;ruby lang=&quot;ko&quot;&gt;홀로&lt;rp&gt;（&lt;/rp&gt;&lt;rt lang=&quot;ja&quot;&gt;ホロ&lt;/rt&gt;
&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;」と名付けた。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%83%E3%82%B0%E3%83%95%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&quot;&gt;ドッグフーディング&lt;/a&gt;に成功し、
現在は私のフェディバースアカウントをHolloに移行した。
フェディバースのハンドルは&lt;a href=&quot;https://hollo.social/@hongminhee&quot;&gt;@hongminhee@hollo.social&lt;/a&gt;。
漢字ハングル混じり文で思う存分投稿を書いており、
漢字の上にハングルの読み仮名が&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/HTML/Element/ruby&quot;&gt;&lt;code&gt;&amp;#x3C;ruby&gt;&lt;/code&gt;&lt;/a&gt;タグで付いている。&lt;/p&gt;
&lt;p&gt;実はドッグフーディングを達成してからは、私にとって必要な機能は全て実装されたので、
バグ修正などメンテナンス中心の作業となっている。&lt;/p&gt;
&lt;h2 id=&quot;fedify&quot;&gt;&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;前述のHolloを最初に実装する際は、
ActivityPub実装を一から作ろうと試みた。
しかし作っているうちに、ActivityPub実装のコードが思ったより厚く、
やることが多いと感じた。
そこでHolloの開発を中断してActivityPubサーバーフレームワークを作ることにしたのが&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;だ。
作って半年も経たないうちに&lt;a href=&quot;/2024/07/ghost-funds-fedify/&quot;&gt;Ghostから資金支援&lt;/a&gt;を受けることになり、
その後しばらくフルタイムでFedifyプロジェクトに取り組むことになった。
現在は韓国の情報通信産業振興院傘下の&lt;a href=&quot;https://www.oss.kr/&quot;&gt;オープンソースソフトウェア統合支援センター&lt;/a&gt;が主催する&lt;a href=&quot;https://www.oss.kr/contribution_academy&quot;&gt;オープンソースコントリビューションアカデミー&lt;/a&gt;の参与型プロジェクトに選定され、
優秀なメンティーの方々と一緒にプロジェクトを進めている。&lt;/p&gt;
&lt;p&gt;Fedify以前にもActivityPubサーバーフレームワークがなかったわけではない。
しかし、どれも私が必要とする抽象化レベルを提供していなかった。
或るものはWebFingerや署名アルゴリズム程度しか提供しない小さなライブラリに近く、
また或るものはほぼMastodonと比較できるような、フレームワークというより完成されたソーシャルメディアプラットフォーム実装に近かった。
例えるなら、HTTPライブラリやWordPressのようなCMSはあっても、
RailsやDjangoに近いフレームワークがなかったのだ。&lt;/p&gt;
&lt;p&gt;Fedifyを作る際に念頭に置いた目標は以下の通り。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;できるだけ多くの開発者が使えるようにする。&lt;/li&gt;
&lt;li&gt;データベースやストレージに依存しない。
アプリケーション開発者が使いたいデータベースを使えるようにする。&lt;/li&gt;
&lt;li&gt;ActivityPubプロトコルを活用する方法に制約がないようにする。
例えば、マイクロブログのような完成されたアプリケーションの形を前提としない。&lt;/li&gt;
&lt;li&gt;ActivityPubを実装するなら備えるべき全てのもの——認証、署名、
アウトボックスおよびインボックスキューなど——を一切提供する。&lt;/li&gt;
&lt;li&gt;ActivityPubをよく知らない人でも使えるほど豊富なドキュメントを提供する。&lt;/li&gt;
&lt;li&gt;型安全でなければならない。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;そして、この記事を書いている現在、以上の目標はほぼ達成出来たと思う。
結果的にHolloはFedifyベースで作られることになり、その他にも——後述する——Hackers&apos;
Pub、Ghostなどが Fedifyを使ってActivityPubを実装することになった。
また、まだ完成していないが&lt;a href=&quot;https://github.com/byulmaru/kosmo&quot;&gt;Kosmo&lt;/a&gt;、
&lt;a href=&quot;https://github.com/cosmoslide/cosmoslide&quot;&gt;Cosmoslide&lt;/a&gt;などのプロジェクトがFedifyを使ってActivityPubを実装している。&lt;/p&gt;
&lt;h2 id=&quot;logtape&quot;&gt;&lt;a href=&quot;https://logtape.org/&quot;&gt;LogTape&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fedifyにログシステムを追加しようとJavaScriptで作られたログライブラリを探してみたが、
私が望む条件のライブラリがなかったので新しく作ることになったのが&lt;a href=&quot;https://logtape.org/&quot;&gt;LogTape&lt;/a&gt;だ。&lt;/p&gt;
&lt;p&gt;私が望む条件というのも大したものではなかった。
ただPython標準ライブラリの&lt;a href=&quot;https://docs.python.org/3/library/logging.html&quot;&gt;&lt;code&gt;logging&lt;/code&gt;&lt;/a&gt;モジュールに相当するものを探しただけなのだが、
振り返ってみると&lt;code&gt;logging&lt;/code&gt;モジュールがかなりよく出来たものだったようにも思える。
私が望む条件は以下の通りだった。&lt;/p&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;Node.js、Deno、Bun、エッジ関数、
ウェブブラウザなど様々なJavaScriptランタイムで幅広く動作する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;概してアプリケーションではなくライブラリでログを残すために必要な
条件だった。どうせFedifyで使うために作ったので、作った後放置していたが、
去年の秋を過ぎてから、なぜか口コミで広まって多くの人が使うようになった。&lt;/p&gt;
&lt;h2 id=&quot;hackers-pub&quot;&gt;&lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers&apos; Pub&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ソフトウェア開発に関する記事を投稿するブログを作りたくて[velog]&lt;sup&gt;&lt;a href=&quot;#user-content-fn-0&quot; id=&quot;user-content-fnref-0&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;を少し使うようになったが、
ActivityPubをサポートしていないのが残念で、
velogのイシュートラッカーに&lt;a href=&quot;https://github.com/velog-io/velog/issues/48&quot;&gt;イシュー&lt;/a&gt;を残すことになった。
幸いにも&lt;a href=&quot;https://github.com/velog-io/velog/issues/48&quot;&gt;前向きに検討するという返答&lt;/a&gt;を受けたが、
制作陣の方々が忙しくてその後音沙汰がなかった。
結局私が自分でActivityPubをサポートするソフトウェア開発者のためのソーシャルメディア兼ブログプラットフォームを作ってみようと思ったのが&lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers&apos; Pub&lt;/a&gt;だ。&lt;/p&gt;
&lt;p&gt;去年の冬に初めてオープンしてからすぐに&lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;&lt;ruby&gt;李在烈&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;イ・ジェヨル&lt;/rt&gt;
&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さんが参加されたが、
招待制にも拘わらず、
李在烈さんがあちこちでものすごく熱心にHackers&apos; Pubを宣伝してくださったお陰で、
かなり多くの方が参加して活動されるようになった。
短期的な目標は韓国で広く使われるようになることで、
さらに中長期的な目標は東アジア全般と英語圏を網羅することだ。
しかし、まだ大部分のコンテンツが韓国語で書かれており、
少数の日本人の方が間欠的に日本語コンテンツを投稿してくださる程度だ。&lt;/p&gt;
&lt;p&gt;Fedifyを通じてActivityPubを実装したので、当然Hollo、Mastodon、
Misskeyなどと通信が可能で、Xのように投稿——&lt;code&gt;Note&lt;/code&gt;——を書くことも出来、
長い記事——&lt;code&gt;Article&lt;/code&gt;——を書くことも出来る。
絵文字リアクションや引用のようなMastodonにはない機能も提供している。&lt;/p&gt;
&lt;p&gt;そしてHackers&apos; Pubのもう一つの自慢は、
安全で平等なコミュニティを作るための&lt;a href=&quot;https://hackers.pub/coc&quot;&gt;行動規範&lt;/a&gt;だ。
特に私が最も気に入っている文言は次の通り。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;差別的な発言と、差別に対抗する発言を区別します&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;技術的な側面では、もともと&lt;a href=&quot;https://deno.com/&quot;&gt;Deno&lt;/a&gt;と&lt;a href=&quot;https://fresh.deno.dev/&quot;&gt;Fresh&lt;/a&gt;を使って作っていたが、
現在はウェブフロントエンド開発に造詣が深い&lt;a href=&quot;https://xiniha.dev/&quot;&gt;&lt;ruby&gt;申義河&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;シン・ウィハ&lt;/rt&gt;
&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さんの協力を得て&lt;a href=&quot;https://graphql.org/&quot;&gt;GraphQL&lt;/a&gt;と&lt;a href=&quot;https://start.solidjs.com/&quot;&gt;SolidStart&lt;/a&gt;ベースに移行している。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;ソースコードは&lt;a href=&quot;https://www.gnu.org/licenses/agpl-3.0.ja.html&quot;&gt;&lt;abbr title=&quot;GNU Affero General Public License&quot;&gt;AGPL&lt;/abbr&gt; 3.0&lt;/a&gt;で&lt;a href=&quot;https://github.com/hackers-pub/hackerspub&quot;&gt;GitHub&lt;/a&gt;に公開されている。
実際にかなり多くのHackers&apos;
Pub会員の方々が不便な点を自ら修正するプルリクエストを送ってくださっている。&lt;/p&gt;
&lt;p&gt;ちなみに私のHackers&apos; Pubアカウントは&lt;a href=&quot;https://hackers.pub/@hongminhee&quot;&gt;@hongminhee@hackers.pub&lt;/a&gt;だ。&lt;/p&gt;
&lt;h2 id=&quot;upyo&quot;&gt;&lt;a href=&quot;https://upyo.org/&quot;&gt;Upyo&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hackers&apos; Pubを作りながらメール送信が必要になったが、
メールプロバイダーを簡単に切り替えられるメール送信ライブラリを探していて、
気に入るものがなかったので作ることになったのが&lt;a href=&quot;https://upyo.org/&quot;&gt;Upyo&lt;/a&gt;だ。
韓国語で切手を意味する単語「&lt;ruby lang=&quot;ko&quot;&gt;郵票&lt;rp&gt;（&lt;/rp&gt;&lt;rt lang=&quot;ja&quot;&gt;ウピョ&lt;/rt&gt;
&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;」から名前を取った。&lt;/p&gt;
&lt;p&gt;もともと.NET系の&lt;a href=&quot;https://github.com/lukencode/FluentEmail&quot;&gt;FluentEmail&lt;/a&gt;のようなものをJavaScriptエコシステムで探していたが、
意外にも適当なものがなくて驚いた。
メールプロバイダーを切り替えたり冗長化したりすることは思ったよりあまりないのだろうか？&lt;/p&gt;
&lt;p&gt;&lt;abbr title=&quot;large language model&quot;&gt;LLM&lt;/abbr&gt;ベースのコーディングエージェント&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;を本格的に使った最初のプロジェクトでもあった。
それでもまだ&lt;abbr title=&quot;large language model&quot;&gt;LLM&lt;/abbr&gt;の能力にそれほど期待していなかったため、
設計と初期コーディングは自分で行い、後でトランスポートの種類を増やす際に&lt;abbr title=&quot;large language model&quot;&gt;LLM&lt;/abbr&gt;の助けを多く借りた。
作るのに2日かかったと思う。
コーディングエージェントの驚くべき生産性が印象的だった。&lt;/p&gt;
&lt;p&gt;私が作った他のライブラリと同様に、Node.js、Deno、Bun、エッジ関数、
ウェブブラウザなど様々なJavaScriptランタイムをサポートしているのも特徴だ。&lt;/p&gt;
&lt;h2 id=&quot;optique&quot;&gt;&lt;a href=&quot;https://optique.dev/&quot;&gt;Optique&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fedifyはフレームワークでもあるが、&lt;code&gt;fedify&lt;/code&gt;コマンドという&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;ツールも提供しているが、
以前はDeno専用&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;フレームワークの&lt;a href=&quot;https://cliffy.io/&quot;&gt;Cliffy&lt;/a&gt;をそれなりにうまく使っていたが、
Deno以外にNode.js、Bunなどをサポートする必要が出てきて&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;、
Cliffyの代替を探すことになった。
しかし今回も同じパターンで…気に入るものが見つからなかった。&lt;/p&gt;
&lt;p&gt;実は私の心の中には、既に理想に近い&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;パーサーライブラリが存在していた。
ただそれが&lt;a href=&quot;https://github.com/pcapriotti/optparse-applicative&quot;&gt;optparse-applicative&lt;/a&gt;というHaskellライブラリだったため、
Fedifyでは使えなかっただけだ。このoptparse-applicativeというライブラリのアイデアはシンプルだ。
&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;パーサーもパーサーなのでパーサーコンビネーターで作ろうというものだ。&lt;/p&gt;
&lt;p&gt;とにかく、欲しい&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;パーサーライブラリが見つからなかったので自分で作るしかない。
それで作ったのが&lt;a href=&quot;https://optique.dev/&quot;&gt;Optique&lt;/a&gt;だ。&lt;/p&gt;
&lt;p&gt;最初はoptparse-applicativeとほぼ同じようにポーティングしようとしたが、
やはりHaskellとJavaScriptではDSLを構成する表現力に大きな差があった。
そこで悩んだ末に、
TypeScript開発者に既に馴染みのある&lt;a href=&quot;https://zod.dev/&quot;&gt;Zod&lt;/a&gt;のようなバリデーションライブラリのAPIを参考にすることにした。&lt;/p&gt;
&lt;p&gt;Upyoプロジェクトとは違い、
&lt;abbr title=&quot;large language model&quot;&gt;LLM&lt;/abbr&gt;コーディングエージェントはごく限定的にドキュメント作成やテストコード作成などに使用し、
そのせいか作るのに一週間以上かかったと思う。&lt;/p&gt;
&lt;p&gt;作ってみると、
JavaScriptエコシステム内ではかなりユニークな&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;パーサーライブラリが出来たと自評出来た。
勿論、多くの&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;アプリケーションがそれほど複雑なオプションを受け取るわけではないが、
ある程度規模のある&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;アプリケーションを作るならOptiqueを使っても後悔しないと自負している。&lt;/p&gt;
&lt;p&gt;あ、そして前述した他のライブラリと同様に、Node.js、Deno、Bun、
さらにはエッジ関数やウェブブラウザでも動作する。そんな必要があるのかと思うが、
ただの自己満足というか。ただし、お陰でテストがとても書きやすいライブラリになった。&lt;/p&gt;
&lt;h2 id=&quot;ヤクシェービング&quot;&gt;ヤクシェービング&lt;/h2&gt;
&lt;p&gt;考えてみると、
私のオープンソース開発の原動力はヤクシェービングから来るのではないかと思う。
Anthony Fuの「&lt;a href=&quot;https://antfu.me/posts/about-yak-shaving&quot;&gt;ヤクシェービングについて&lt;/a&gt;」という記事を読んだことがあるが、
モチベーションを得る方法が私ととても似ているという印象を受けた。
何かが不便でツールを作ろうとすると、
それを作る途中でまた不便さを感じてそれを解決するツールを作ることになる。
それで元々やろうとしていた最初のことは出来なくなる場合が多いが、
だからといって途中で作った副産物がどこかに消えるわけではない。&lt;/p&gt;
&lt;p&gt;私も最初に戻って考えてみると、
結局やりたかったのは漢字ハングル混じり文でフェディバースに投稿を書きたかったのだが、
そのためにHolloも作り、Fedifyも作り、LogTapeも作り、Optiqueまで作ることになった。
そうしながらやりたい他のことが新しく生まれ、Hackers&apos;
Pubのようなコミュニティを通じて多くの貴重な縁も結ぶことが出来た。あ、
それで元々やろうとしていたフェディバースで漢字ハングル混じり文で投稿を書くことは去年末に達成することが出来た！
前述した副産物以外にもMastodonやMisskeyなどにパッチを送る必要はあったが。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;2年余りの期間に起きたことだが、とても楽しく豊かな旅路だったと思う。
これからもしばらくはフルタイムでオープンソース開発をすることになりそうだが、
私に与えられた恵みに感謝しながら奮起しなければ。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-0&quot;&gt;
&lt;p&gt;韓国で広く使われているソフトウェア開発者向けのブログプラットフォーム。
日本のQiitaやZennと似た位置づけ。 &lt;a href=&quot;#user-content-fnref-0&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;いろいろな理由でDenoを使ったことを後悔しているが、
仕方なくDenoは移行後も使い続けている。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.anthropic.com/ja/docs/claude-code/overview&quot;&gt;Claude Code&lt;/a&gt;を使った。 &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;Fedifyフレームワーク自体は既にNode.js、Deno、Bun、
Cloudflare Workersなどをサポートしていたが、
&lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt;ツールの&lt;code&gt;fedify&lt;/code&gt;コマンドだけはDeno専用で作られていた。 &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;投稿を受け取る側でも&lt;code&gt;&amp;#x3C;ruby&gt;&lt;/code&gt;タグをレンダリング出来る必要があったからだ。 &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>

  <entry>
    <title>フェディバースと共に過ごした一年</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/" />
    <id>https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2024-12-23T15:00:00.000Z</published>
    <updated>2025-12-04T05:58:23.000Z</updated>
    <content type="html">&lt;h1 id=&quot;フェディバースと共に過ごした一年1&quot;&gt;フェディバースと共に過ごした一年&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/h1&gt;
&lt;p&gt;二〇二四年は、本当にフェディバースに夢中になって過ごした一年だった。
フェディバースとActivityPubに関連する大小様々なプロジェクトを進め、
その中のいくつかは多くの人々から好評を得る事が出来た。
良い思い出として記録に残しておこうと思い、この文章を書く事にした。&lt;/p&gt;
&lt;h2 id=&quot;フェディバースとは&quot;&gt;フェディバースとは&lt;/h2&gt;
&lt;p&gt;先ず、フェディバース︵fediverse︶とは何かを簡単に説明すると、
異なる種類のソーシャルメディアが相互に通信出来るネットワークの事を指す。
詰まり、全く異なるソーシャルメディア上の二つのアカウントが相互にフォローし、
コメントを残し、いいねを送り合える事だ。 技術的には、
異なるソーシャルメディア間の相互運用性︵interoperability︶を実現する為に、
W3Cの技術標準である&lt;a href=&quot;https://activitypub.rocks/&quot;&gt;ActivityPub&lt;/a&gt;プロトコルが使用されている。&lt;/p&gt;
&lt;p&gt;現在、フェディバースに参加している代表的なソーシャルメディアとしては、
&lt;a href=&quot;https://joinmastodon.org/ja&quot;&gt;Mastodon&lt;/a&gt;、&lt;a href=&quot;https://pixelfed.org/&quot;&gt;Pixelfed&lt;/a&gt;、&lt;a href=&quot;https://akkoma.social/&quot;&gt;Akkoma&lt;/a&gt;、&lt;a href=&quot;https://misskey-hub.net/ja/&quot;&gt;Misskey&lt;/a&gt;、&lt;a href=&quot;https://ja.wordpress.org/&quot;&gt;WordPress&lt;/a&gt;等があり、
その他にも一つ一つ挙げ切れない程多くのプロジェクトが存在する。
その大半はオープンソースプロジェクトでも有る。また、オープンソースではないが、
Metaの&lt;a href=&quot;https://www.threads.net/&quot;&gt;Threads&lt;/a&gt;も今年の夏からActivityPubを少しずつ実装し、
既にある程度フェディバースに参入していると言える。&lt;/p&gt;
&lt;p&gt;異なるソーシャルメディアが通信し合う仕組みである為、
フェディバース内のアカウントアドレスにはユーザー名だけでなく、
サーバー名も含まれる。
一般に&lt;q&gt;フェディバースハンドル&lt;/q&gt;と呼ばれるこのアドレス形式は、
@username@hostの様に、まるでメールアドレスに似ている。
これにより、異なるサーバーやプラットフォームに属するアカウント同士が相互にフォローし、
コミュニケーションを取る事が出来る。
勿論私自身もフェディバースアカウントを持っており、
&lt;a href=&quot;https://hollo.social/@hongminhee&quot;&gt;@hongminhee@hollo.social&lt;/a&gt;をフォローしてくれれば良い。&lt;/p&gt;
&lt;h2 id=&quot;fedify&quot;&gt;Fedify&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;は、今年の私にとって最大の成果と言えるだろう。
FedifyはTypeScriptで書かれたActivityPubサーバーフレームワークで、
ActivityPubサーバーを実装する際に使える適切な抽象化レベルが見つからなかった為、
作る事にした。最初は一からActivityPubサーバーアプリを作ろうと何度か試みて、
ある程度動作するものも作ってみたが、その結果のコードには満足出来なかった。
そこで、きちんと抽象化をしながら作成を進めていく内に、
結局フレームワークの様なものを作っている事に気づき、
FedifyといったActivityPubサーバーフレームワークの必要性を痛感する様になった。&lt;/p&gt;
&lt;p&gt;Fedifyには計4回の書き直しが有った。最初はTypeScriptで書き、その後Pythonに移行し、
更にC#、そして最終的にTypeScriptに戻ってきた。
言語選択には複数の考慮事項があった。第一に、
ActivityPubのデータ交換形式である&lt;a href=&quot;https://json-ld.org/&quot;&gt;JSON-LD&lt;/a&gt;の実装がある言語である必要があり、
またJSON-LDを簡単かつ便利に扱う為にある程度動的である必要があった。
第二に、動的言語であっても静的型付け、
所謂&lt;a href=&quot;https://en.wikipedia.org/wiki/Gradual_typing&quot;&gt;gradual typing&lt;/a&gt;を良くサポートしている必要があった。
最後に、ユーザーが多く、エコシステムが豊かである必要があった。
これはFedifyが広く使われる事を望んでいた為だ。
全てを考慮した結果、TypeScriptを選択する事になった。&lt;/p&gt;
&lt;p&gt;全ての書き直しの過程を含めると昨年12月初めから着手し、
最後の書き直しに限って言えば&lt;a href=&quot;https://github.com/dahlia/fedify/commit/9858cea9db609e7aa7a65b3bcec8dd0d8838b574&quot;&gt;2月末から作り始め&lt;/a&gt;、
3月初めに最初の&lt;a href=&quot;https://github.com/dahlia/fedify/releases/tag/0.1.0&quot;&gt;0.1.0バージョン&lt;/a&gt;をリリースした。
リリース前に考えていたコードネームはFedikitだったが、
&lt;a href=&quot;https://todon.eu/@hongminhee/111976051313889872&quot;&gt;リリースに先立って検索してみると、
既に同じ名前のプロジェクトが存在する事が分かり、
急いでFedifyに名前を変更する事になった&lt;/a&gt;。
Fedikitというコードネームで作業していたPythonバージョンは&lt;a href=&quot;https://github.com/dahlia/fedikit&quot;&gt;GitHubにアップロードしてある&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Fedifyは現在、
ActivityPubサーバーを作る際に必要な機能を最も幅広く提供するフレームワークだと自負している。
フェディバースはActivityPubを実装するだけでは終わらず、JSON-LD、
&lt;a href=&quot;https://fedify.dev/manual/vocab&quot;&gt;Activity Vocabulary&lt;/a&gt;、[WebFinger]、&lt;a href=&quot;https://fedify.dev/manual/nodeinfo&quot;&gt;NodeInfo&lt;/a&gt;、&lt;a href=&quot;https://fedify.dev/manual/send#http-signatures&quot;&gt;HTTP Signatures&lt;/a&gt;、
&lt;a href=&quot;https://fedify.dev/manual/send#linked-data-signatures&quot;&gt;Linked Data Signatures&lt;/a&gt;、&lt;a href=&quot;https://fedify.dev/manual/send#object-integrity-proofs&quot;&gt;Object Integrity Proofs&lt;/a&gt;等、
多くの仕様を扱う必要がある。Fedifyはそれら全てを網羅している。
更には、ActivityPubの主要な実装と言えるMastodonやMisskeyで未実装の機能も、
Fedifyでは実装されているものが多くある。ActivityPubの仕様だけを見て、
ActivityPubサーバーの実装が簡単だと思い込み、
ActivityPubフレームワークなしで着手して、
結局その複雑さに戸惑うケースもよく見かける。
これからActivityPubサーバーを一つ作ってみようと考えている人々には、
是非Fedifyを使う事を勧める。&lt;/p&gt;
&lt;p&gt;また、Fedifyを作る上で力を入れたもう一つが&lt;a href=&quot;https://fedify.dev/&quot;&gt;文書化&lt;/a&gt;だ。
&lt;a href=&quot;https://jsr.io/@fedify/fedify/doc&quot;&gt;リファレンス文書&lt;/a&gt;は勿論、
Fedifyの全ての機能を網羅する豊富なマニュアルが存在する必要があると考えた。
新機能を追加する際も、マニュアル文書を先に作成してから実装を行う程だった。
その御陰で文書の量がかなり多くなり、
今では英語以外の言語にどの様に翻訳すべきかが悩みの種となっている。&lt;/p&gt;
&lt;p&gt;最後に、私がFedifyを通じて自分なりに満足出来る成果を上げたと感じた最大の出来事は、
&lt;a href=&quot;https://writings.hongminhee.org/2024/07/ghost-funds-fedify/&quot;&gt;GhostによるFedifyの資金支援&lt;/a&gt;だ。
これにより人生で初めて専業のオープンソース開発者になる事が出来た。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
何より、GhostはFedifyの最大のユーザーでもある。
GhostのActivityPub実装は現在進行中で、プライベートベータ段階にある。
恐らく来年には公開される予定だ。&lt;/p&gt;
&lt;h2 id=&quot;hollo&quot;&gt;Hollo&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.hollo.social/ja/&quot;&gt;Hollo&lt;/a&gt;はお一人様向けActivityPubサーバーだ。
通常はMastodonやMisskeyサーバーの中から気に入った所に登録する形でフェディバースアカウントを作成するが、
時々ソフトウェアエンジニアの中には自分のドメイン名で直接運営するサーバーを連携させてフェディバースアカウントを設置する人もいる。
しかし、MastodonやMisskeyの様なソフトウェアは基本的に多くの人々がアカウントを作成して共に使用する事を前提に設計されている為、
一人で使うには不要な機能も多く、重たい上に設置も面倒だ。
そういった人々の為に作ったのがHolloだ。
HolloはPostgreSQLさえ有れば動作する為、設置も比較的簡単で、
機能も一人で使う際に必要なものだけを備えている為、シンプルな事が特徴だ。&lt;/p&gt;
&lt;p&gt;Holloを作る事になった経緯は少し複雑だ。
実はFedifyを作る事になったきっかけがHolloだと言える。
Holloの様な自分専用のActivityPubサーバーを作り始めた事で、
ActivityPubサーバーフレームワークの必要性を実感する事になった為だ。
但し、その時最初に作ろうとしたプロジェクトのコードはHolloには再利用されず、
当時のプロジェクト名もHolloではなかった為、
厳密に言えばHolloがFedifyを作るきっかけになったとは言えない。
しかし、
Fedifyを作った後にこれを使って究極的に作りたかったものがHolloの様なものだった事は事実だ。&lt;/p&gt;
&lt;p&gt;しかし、実際にFedifyを作ってみると、私が作りたいものはFedify自体となってしまい、
元々の動機は多少色あせてしまった。その為、Holloを本格的に作り始める頃には、
Fedifyのデモを作る事がHolloの最大の目的となっていた。実際、
Holloを作りながらFedifyに必要な機能を追加したり、バグを見つけて修正したりもした。
但し、あくまでもFedifyプロジェクトの一環だった為、
Hollo自体のコード品質はFedifyと比べるとかなり劣る。
この問題はHolloをFedifyプロジェクトの一環として見なくなった時点から改善を始めたが、
依然としてコード品質については改善すべき点が多く残っている。&lt;/p&gt;
&lt;p&gt;Holloは予想外に日本でユーザー層が生まれ、公式文書を日本語に翻訳したり、
日本で開催された&lt;a href=&quot;https://event.ospn.jp/osc2024-fall/&quot;&gt;オープンソースカンファレンス 二〇二四 Tokyo/Fall&lt;/a&gt;というイベントに出展してブースを出したりもした。
この時、現地のHolloユーザーである&lt;a href=&quot;https://c.koliosky.com/@esurio1673&quot;&gt;Esurio&lt;/a&gt;さんがブースを一緒に運営してくれて、
大変お世話になった。&lt;/p&gt;
&lt;p&gt;最近は&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%83%E3%82%B0%E3%83%95%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&quot;&gt;ドッグフーディング&lt;/a&gt;の為に、私が持っていたMastodonアカウントを捨ててHolloに移行した。&lt;/p&gt;
&lt;h2 id=&quot;韓国フェディバース開発者の会&quot;&gt;韓国フェディバース開発者の会&lt;/h2&gt;
&lt;p&gt;ある日ふと、
韓国にはフェディバースソフトウェアを開発する開発者達の交流がない事に気づいた。
そこで、&lt;a href=&quot;https://github.com/kode-team/mastodon.nvim&quot;&gt;Neovim用Mastodonクライアント&lt;/a&gt;を作った&lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;&lt;ruby&gt;李在烈&lt;rp&gt;（&lt;/rp&gt;&lt;rt&gt;イ・ジェヨル&lt;/rt&gt;&lt;rp&gt;）&lt;/rp&gt;&lt;/ruby&gt;&lt;/a&gt;さんに声をかけ、
共に&lt;a href=&quot;https://fedidev.kr/&quot;&gt;韓国フェディバース開発者の会&lt;/a&gt;を発足させた。
先ず&lt;a href=&quot;https://discord.gg/B2ABMBpHNA&quot;&gt;Discordサーバー&lt;/a&gt;を設置し、かなり多くの開発者が集まった。&lt;/p&gt;
&lt;p&gt;そして定期的なスプリント会を企画し、
その&lt;a href=&quot;https://sprints.fedidev.kr/posts/2024-08-31-sprint/&quot;&gt;第一回目の会&lt;/a&gt;を八月三一日に&lt;a href=&quot;https://www.rtzr.ai/en&quot;&gt;リターンゼロ&lt;/a&gt;のオフィスで開催したところ、
予想以上に多くの人々が参加した。この時に出会った人々とは、
今でもフェディバース上で交流を続けている。&lt;/p&gt;
&lt;p&gt;最近は年末という事もあり、オフライン交流は少し減っているが、来年になればまた活発な活動を再開する予定だ。&lt;/p&gt;
&lt;h2 id=&quot;初めての同人誌販売&quot;&gt;初めての同人誌販売&lt;/h2&gt;
&lt;p&gt;今年の秋から日本語圏のフェディバースで本格的な活動を始め、
その過程で日本のHolloユーザー達と交流する様になった。
その中で&lt;a href=&quot;https://c.koliosky.com/@esurio1673&quot;&gt;Esurio&lt;/a&gt;さんから、
日本で開催されるオープンソースカンファレンスにブース出展してみては如何かという提案を頂き、
悩んだ末に出展する事にした。
日本のイベントへの出展は勿論、ブース出展自体が初めての経験だった為、
Esurioさんには様々な面でお世話になった。この場を借りて感謝の意を表したいと思う。&lt;/p&gt;
&lt;p&gt;とにかく、ブースを出展する事になったからには何か展示品が必要だった。
その一環として、
Fedifyのチュートリアル&lt;q&gt;&lt;a href=&quot;https://github.com/dahlia/fedify-microblog-tutorial-ja&quot;&gt;自分だけのフェディバースのマイクロブログを作ろう！&lt;/a&gt;&lt;/q&gt;を紙の本として印刷して販売する事にした。
幸い、作って持っていった本は殆ど売れ、帰りは随分と軽く帰る事が出来た。
この時に本を買ってくれた方々の中の一人である&lt;a href=&quot;https://monaco.every-little.com/&quot;&gt;モナコ広告&lt;/a&gt;さんが、
チュートリアルを実践してみた過程を&lt;a href=&quot;https://fedilug.y-zu.org/&quot;&gt;FediLUG&lt;/a&gt;
勉強会で&lt;q&gt;&lt;a href=&quot;https://www.docswell.com/s/monaco_koukoku/5DN28R-fedilug05-20241123&quot;&gt;FedifyでActivityPubサーバを作ってみた&lt;/a&gt;&lt;/q&gt;という題目で発表してくれた。&lt;/p&gt;
&lt;p&gt;必ずしも本を買ってくれた方々だけでなく、
不十分な日本語ながらも手探りで交流が出来て良かった。&lt;/p&gt;
&lt;h2 id=&quot;専業フェディバース開発&quot;&gt;専業フェディバース開発&lt;/h2&gt;
&lt;p&gt;何だかんだあって年初には全く予想していなかった方向へ流れ、
一種の&lt;q&gt;専業フェディバース開発者&lt;/q&gt;となった状況だが、
来年はフェディバース自体の裾野を広げる事に力を注いでみる予定だ。
その一環として、
ソフトウェアエンジニア達の為のActivityPub基盤のソーシャルプラットフォームを作ってみているが、
近々公開出来る様にしたいと思う。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://adventar.org/calendars/10051&quot;&gt;Fediverse Advent Calendar 二〇二四&lt;/a&gt;の二四日目の記事。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;厳密には元の職場でもオープンソース製品を専業で作っていましたが、
私が始めたプロジェクトではなかった。 &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>

  <entry>
    <title>GhostのFedifyへの資金支援</title>
    <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/" />
    <id>https://writings.hongminhee.org/2024/07/ghost-funds-fedify/</id>
    <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.en.html" hreflang="en" />
    <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.ja.html" hreflang="ja" />
    <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.ko-kore.html" hreflang="ko-Kore" />
    <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.ko-hang-kr.html" hreflang="ko-Hang-KR" />
    <published>2024-07-03T02:00:00.000Z</published>
    <updated>2024-12-20T09:46:15.000Z</updated>
    <content type="html">&lt;h1 id=&quot;ghostのfedifyへの資金支援&quot;&gt;GhostのFedifyへの資金支援&lt;/h1&gt;
&lt;p&gt;悪いニュースばかりだったこのブログにも、遂に朗報が飛び込んできた。
今年の春から趣味でやっていたオープンソースプロジェクトである&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;が、
グローバルブログプラットフォームである&lt;a href=&quot;https://ghost.org/&quot;&gt;Ghost&lt;/a&gt;から資金支援を受ける事に成ったのだ。&lt;/p&gt;
&lt;h2 id=&quot;fedifyとは&quot;&gt;Fedifyとは？&lt;/h2&gt;
&lt;p&gt;先ず、Fedifyがどの様なプロジェクトなのか紹介したいと思う。&lt;/p&gt;
&lt;p&gt;&lt;dfn&gt;&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;&lt;/dfn&gt;は、&lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;プロトコルを実装するサーバーフレームワークだ。
オープンソースプロジェクトである&lt;a href=&quot;https://joinmastodon.org/ja&quot;&gt;Mastodon&lt;/a&gt;やMetaの&lt;a href=&quot;https://www.threads.net/&quot;&gt;Threads&lt;/a&gt;の様な異なるソーシャルメディアサービスが一堂に会してコミュニケーション出来る技術的背景が&lt;dfn&gt;ActivityPub&lt;/dfn&gt;プロトコルである。
この様に集まったソーシャルメディアの連合を&lt;dfn&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/Fediverse&quot;&gt;フェディバース&lt;/a&gt;&lt;/dfn&gt;（fediverse）と呼ぶ。&lt;/p&gt;
&lt;p&gt;ActivityPubは一見シンプルなプロトコルの様に見えるが、
実際に他のサービスとの相互運用性を正しく実装しようとすると、
思ったより難しい点が多い。
その為、その様な厄介な部分を処理してくれるフレームワークの存在を望む様に成り、
適当な物が無かったので、自分で作る事に成ったのである。&lt;/p&gt;
&lt;h2 id=&quot;ghostがfedifyを採用&quot;&gt;GhostがFedifyを採用&lt;/h2&gt;
&lt;p&gt;2ヶ月前まで、Fedifyは余暇に作る趣味のプロジェクトで、おもちゃの様な物だった。
それでも、小さなユーザーコミュニティが有ったのだが、或る日、
その中の誰かが&lt;a href=&quot;https://activitypub.ghost.org/&quot;&gt;GhostがActivityPubを実装する&lt;/a&gt;というニュースを伝え、
GhostもTypeScriptで作られている様なので、
GhostチームにFedifyをセールスしてみる事を勧めた。
最初はセールスが出来るかどうか心配で躊躇したが、
セールスする事を勧めてくれた方がGhostチームに直接メールまで送ってくれたので、
勇気を出して私もGhostチームに連絡する事に成った。&lt;/p&gt;
&lt;p&gt;すると、なんと、Ghostチームが&lt;a href=&quot;https://activitypub.ghost.org/day4/&quot;&gt;Fedifyを前向きに検討&lt;/a&gt;しているのではないか？
そして、本当に&lt;a href=&quot;https://activitypub.ghost.org/day-4/&quot;&gt;Fedifyを本格的に利用する事を決めた&lt;/a&gt;と連絡が届いた。
それは驚きであり、私はそれだけでとても嬉しかった！&lt;/p&gt;
&lt;h2 id=&quot;資金支援&quot;&gt;資金支援&lt;/h2&gt;
&lt;p&gt;その後、私はGhostチーム、
特にGhostにActivityPubを実装しているチームメンバーと緊密に連絡を取り合う事になり、
その後すぐにGhostチームからFedifyプロジェクトに資金を提供するので、
GhostチームからFedifyに追加して欲しい機能を実装してくれないかとの提案が来た。
ちょうど再就職の為、あちこちの会社に履歴書を出していた私にとっては、
かなり悩ましい話だった。&lt;/p&gt;
&lt;p&gt;先ずは約半月ほど一緒に働く事にして、少額の資金支援を受けた。
そして、就職の準備をしながらFedifyの仕事をする事に成ったが、
思った以上に没頭して楽しく働く事ができた。
結局、私はもう少し長く資金支援が可能であれば、
フルタイムでFedifyの仕事をする意思を表明し、
Ghostチームからも肯定的な回答を得る事が出来た。&lt;/p&gt;
&lt;p&gt;その結果、今後かなり長い間、資金支援を受けながらFedifyの仕事をする事に成った。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
前職でもフルタイムでオープンソースプロジェクトをした事は有ったが、
この様に私が始めたオープンソースプロジェクトに資金支援を受ける形で仕事をするのは初めてなので、
これからが楽しみだ。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;そして、
就職活動をして合格した会社には残念だが（本当に惜しい会社がいくつか有った）、
入社オファーを断った。 &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>
</feed>
