<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" hreflang="ja" /><updated>2026-01-01T18:28:33+09:00</updated><id>/feed.xml</id><title type="html">Hachunet</title><subtitle>技術系の記事を中心に、日々の出来事や趣味についても書いていきます。</subtitle><author><name>葱野</name></author><entry><title type="html">2025年を振り返る</title><link href="/blog/2025/12/31/matome.html" rel="alternate" type="text/html" title="2025年を振り返る" /><published>2025-12-31T21:00:00+09:00</published><updated>2025-12-31T21:00:00+09:00</updated><id>/blog/2025/12/31/matome</id><content type="html" xml:base="/blog/2025/12/31/matome.html"><![CDATA[<p>2025年は「転居・転職・AI」の1年でした。
ほんとうにいろいろとあったので、まとめて記録しておきたいと思います。</p>

<p>動力源の8割ぐらいは<a href="https://github.com/Sincromisor/Sincromisor">「AIおしゃべりサービス基盤 Sincromisor」</a>でした。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/Sincromisor-VRM.webp" alt="Sincromisor" /></p>

<h2 id="1月">1月</h2>

<p>前年末に転職活動とC105で東京に行ったところ、新年早々新型コロナに初感染し、年末年始休暇後半が崩壊。
6日ごろまでずっと寝込んでいました。7日からはお仕事再開しましたが、2週間ぐらいは調子悪いままでした。</p>

<p>18～19日は<a href="https://maps.app.goo.gl/pN2LrTZP5K2jtjc9A">瀬見温泉 ゆめみの宿 観松館</a>で療養。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250118_mimatsukan.webp" alt="瀬見温泉" /></p>

<p>19日は帰りに近所の銀山温泉に寄ってみたところ、入り口付近で既に地獄のような混雑っぷりで、早々に諦めて退避。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250119_ginzan.webp" alt="銀山温泉" /></p>

<h2 id="2月">2月</h2>

<p>7日にAudi A3の走行距離10万km突破。2017年9月16日に納車して、7年と144日目でした。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250207_audi.webp" alt="Audi A3 10万km" /></p>

<p>ちなみに納車時は12855km。
納車翌日にドライブしてたらドアバンされて泣いたのをよく覚えています。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/170916_audi.webp" alt="Audi A3 納車" /></p>

<p>8夜～11日は<a href="https://maps.app.goo.gl/nGLAMR7Dw4YFLUrs5">那須高原</a>のコテージを借りて合宿。
転職の話が本格始動しました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250209_nasu.webp" alt="那須高原合宿" /></p>

<p>21～22日は駒澤大学で開催された<a href="https://event.ospn.jp/osc2025-spring/">Open Source Conference 2025 Tokyo/Spring</a>に
<a href="https://github.com/Sincromisor/Sincromisor">Sincromisor</a>を出展しました。会場が大学だと学生っぽい参加者が多くなっていいですね。</p>

<p>AIとの音声対話は流行りのネタということで、こんな使い方もできそうだよねといったお話を(なんならビジネス寄りのお話も)沢山頂けました。
問題は開発者が私一人なのでスケールしないということですが…。
庄内から東京まで出てきて、ワンオペでイベント2日間フル出展 + 45分セミナーはだいぶしんどいです。</p>

<p>お隣が<a href="https://gihyo.jp/">技術評論社さん</a>で、
ちょうど<a href="https://gihyo.jp/book/2024/978-4-297-14530-9">LangChainでAIエージェントする本</a>が発売されたばかりということで、
スムーズな誘導ができていました。
(SincromisorのAIエージェント・RAG部分はDifyなので使ってはいないのですが、まぁ似たようなもんや)</p>

<p><img src="/files/blog/2025/2025-02-22-osc-tokyo/booth01.webp" alt="booth01" /></p>

<p>OSC開催直後に論文締め切り、3月の発表会に向けた準備追い込みと、めちゃくちゃ予定が立て込んでいたのをなんとか乗り切った2月でした。</p>

<h2 id="3月">3月</h2>

<p>16～17日は<a href="https://maps.app.goo.gl/FQ6BkHDjdnvR66dt7">湯瀬温泉 湯瀬ホテル</a>にソロ旅。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250316_yuze.webp" alt="湯瀬温泉(ソロ)" /></p>

<p>帰路のどこかでこすったのか、A3のアンダーカバーが破損。修理に出した所、ホイールアーチにもダメージがあったようで、
最終的に修理に1ヶ月と10万円近く掛かりました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250318_audi.webp" alt="Audi アンダーカバー破損" /></p>

<p>23日あたりから体調が猛烈に悪くなり、またしても新型コロナ感染が発覚しました。
3ヶ月で2回なんてあるんだ…
これ以降、職場の飲み会は避けるようになりました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250324_corona.webp" alt="コロナ(2回目)" /></p>

<p>コロナ(2回目)で死にかけながら、お仕事のほうでいろいろと成し遂げて
<a href="https://www.yamagata-np.jp/dnews/news/?id=kj_2025032800838">新聞に載ったり</a>しました。
リモート参加になってしまったのが本当に悔やまれます…。</p>

<p>3月の回から転職ドラフトに参加。学生の就活と一緒に転職活動をしていたんですよね…。</p>

<h2 id="4月">4月</h2>

<p>担任2年目になりました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250414_book.webp" alt="本" /></p>

<p>「最後かもしれないだろ?」と、写真をたくさん撮っていました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250421_sakura.webp" alt="桜" /></p>

<p>転職ドラフトの4月回に参加。ここで現在の就職先のスカウトを頂きました(5～6月にかけてカジュアル面談～選考)。</p>

<h2 id="5月">5月</h2>

<p>GW旅は<a href="https://social.mikutter.hachune.net">smhn</a>のいつものメンバーで<a href="https://maps.app.goo.gl/kuy5aYpDnZvduVv1A">蔵王温泉(3日)</a> - <a href="https://maps.app.goo.gl/9sUyMjr2zLGf9gLn8">湯瀬温泉(4～5日)</a> - <a href="https://maps.app.goo.gl/sEopcBB3RNBc1t9j8">岳温泉(6日)</a>。</p>

<p>蔵王はちょうど満開。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250503_zao.webp" alt="桜" /></p>

<p>弘前さくらミクまつりにもギリギリ間に合いました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250504_hirosaki.webp" alt="桜" /></p>

<p>りんごや梨の花は桜より遅めなので、桜を見逃した方におすすめです。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250504_ringo.webp" alt="りんご" /></p>

<p>湯瀬温泉ふたたび。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250504_yuze.webp" alt="湯瀬温泉" /></p>

<p>おさるを見つめない。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250506_osaru.webp" alt="おさる" /></p>

<p>20日は酒田まつり。子供の頃はたくさんあった金魚の屋台も、今はもうひとつのみ。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250520_matsuri.webp" alt="金魚" /></p>

<p>転職ドラフトの選考やFindyのエージェント面談を進めつつ、お仕事もこなしつつの5月でした。</p>

<h2 id="6月">6月</h2>

<p>6日にNintendo Switch 2(多言語版)が到着。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250606_switch2.webp" alt="Switch 2" /></p>

<p>11日頃に現職の内定を頂いておりました。</p>

<p>16～20日は研修で都内へ。そこでまたしてもよからぬなにかしらを貰ってしまったらしく、
1～2週間ほど、37℃台の微熱と咳が止まらなくなっていました。</p>

<h2 id="7月">7月</h2>
<p>18日に次のお仕事の面談で東京へ。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250717_inaho.webp" alt="東京へ" /></p>

<p>ついでにいつものメンバーで伊豆高原合宿。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250719_izu.webp" alt="伊豆高原合宿" /></p>

<p>東北の人間なので、そのへんに柑橘系の果物が露地栽培されてると感動します。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250720_mikan.webp" alt="伊豆みかん" /></p>

<p>23日、職場内で退職の話を伝えました。</p>

<p>夏旅第2弾、31日は<a href="https://maps.app.goo.gl/JSb8MB7YjFnmD6sN8">酸ケ湯温泉</a></p>

<p><img src="/files/blog/2025/2025-12-31-matome/250731_sukayu.webp" alt="酸ケ湯温泉" /></p>

<p>…ではなく、お隣の<a href="https://maps.app.goo.gl/KpRy2oN5asN6CXTz8">谷地温泉</a>で1泊。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250731_yati.webp" alt="谷地温泉" /></p>

<h2 id="8月">8月</h2>

<p>8月は旅先でスタート。
奥入瀬渓流～十和田湖～<a href="https://maps.app.goo.gl/XmT2cWZSaqo8Zcjv7">もぐらんぴあ</a>。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250801_oirase.webp" alt="奥入瀬渓流" /></p>

<p>1日は<a href="https://maps.app.goo.gl/Cj3HJUUvbSffJqfa9">大船渡温泉</a>で1泊。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250802_oofunato.webp" alt="大船渡" /></p>

<p>帰りは<a href="https://maps.app.goo.gl/u2D3gxvZAgNYGrRS7">須川温泉</a>に入っていました。</p>

<p>夏旅第3弾はいつものメンバーで、</p>
<ul>
  <li>10日: <a href="https://maps.app.goo.gl/3Z3ihsU7ZYSFjRPJ7">越後湯沢 湯けむりの宿 雪の花</a>、</li>
  <li>11日: <a href="https://maps.app.goo.gl/b7qihqURZQwyqyPJ8">渋温泉 古久屋</a>。</li>
</ul>

<p><img src="/files/blog/2025/2025-12-31-matome/250811_sibu.webp" alt="渋温泉" /></p>

<p>12日以降は中国・四国・九州一人ドライブ旅。</p>

<ul>
  <li>12日: <a href="https://maps.app.goo.gl/FuWpPKksDoUFX1S38">ラックホテル大津石山</a></li>
  <li>13日: <a href="https://maps.app.goo.gl/DHA5eG4FMN5opAXq9">リーガロイヤルホテル 新居浜</a></li>
  <li>14日: <a href="https://maps.app.goo.gl/9e5CWSsX6Hegmiz96">HOTEL AZ 山口岩国店</a></li>
  <li>15日: <a href="https://maps.app.goo.gl/9U8PmZbeVURdqy5v6">HOTEL AZ 北九州新門司港店</a></li>
  <li>16日: <a href="https://maps.app.goo.gl/q1KXqPg7H3TfevgF8">ドーミーインEXPRESS出雲の國 雲南</a></li>
  <li>17日: <a href="https://maps.app.goo.gl/RvBtfec1EBHRkejR6">ホテルベルマーレ(舞鶴)</a></li>
  <li>18日: 車中泊(北陸道)</li>
</ul>

<p>13日、淡路島に到達。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250813_akashi.webp" alt="明石海峡大橋" /></p>

<p>わぁいうずしお</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250813_naruto.webp" alt="明石海峡大橋" /></p>

<p>14日、しまなみ海道。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250814_shimanami.webp" alt="しまなみ海道" /></p>

<p>しまなみ海道にもちゃんと自家用車(Audi A3)で行きました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250814_shimanami_a3.webp" alt="しまなみ海道" /></p>

<p>15日、関門海峡を越え、門司港へ。もちろん自家用車。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250815_moji.webp" alt="門司港" /></p>

<p>夜のしものせき水族館。お盆 + 8月にリニューアルオープンしたばかりということで、とんでもなく混んでました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250815_shimonoseki.webp" alt="しものせき水族館" /></p>

<p>16日、これまた絶景で有名な角島大橋。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250816_tsunojima.webp" alt="角島大橋" /></p>

<p>17日、天橋立は遅い時間になってしまい、全然見て回れず。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250817_amanohashidate.webp" alt="天橋立" /></p>

<p>18日、のとじま水族館。平日の閉館間際だったからか、15日のしものせきとは打って変わって閑散としていました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250818_notojima.webp" alt="のとじま水族館" /></p>

<p>19日、帰り道に北陸道の親不知～糸魚川でトンネル火災に遭遇したものの(写真左上)、車中泊をしつつ無事帰宅。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250819_nexco_info.webp" alt="親不知" /></p>

<p>合計3250kmのドライブでした。</p>

<p>1ヶ月で青森から伊豆、中国・四国、福岡まで自家用車ドライブ、次に同じことができる日ははたして来るのでしょうか…。</p>

<h2 id="9月">9月</h2>

<p>身辺整理本格スタート。自宅に加え、研究室の荷物も全部まとめて引っ越しとなるため、とにかくモノが多い。</p>

<p>13日は酒田の花火大会でした。
例年8月頭だったのですが、ここ数年大雨で延期になるケースが多かったため、9月になったとのこと。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250913_hanabi.webp" alt="酒田の花火" /></p>

<p>27日は新居探し(契約)に浦安へ。
ほぼ一本釣りでした。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250927_urayasu.webp" alt="浦安" /></p>

<p>あっという間に秋になってしまいました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/250928_higanbana.webp" alt="彼岸花" /></p>

<p>9月30日でお仕事は一区切り。</p>

<h2 id="10月">10月</h2>

<p>退職予定日まで全部休んでも使い切れない年休を消化しました。
引っ越し準備と後始末でドタバタの1ヶ月でした。</p>

<p>12日、ぜんぜん片付いていないにも関わらず、合宿するぞとの声が掛かりみたび那須高原へ。
1年で3回同じ宿に泊まる実績を解除しました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251012_nasu.webp" alt="那須高原(3回目)" /></p>

<p>15日、引っ越し開始。旧居がほぼからっぽに。
<img src="/files/blog/2025/2025-12-31-matome/251015_hikkoshi.webp" alt="引っ越し" /></p>

<p>16日に新居に入居、17日に引っ越し荷物と<a href="https://www.toshiba-lifestyle.com/jp/laundries/tw-127xm4/">洗濯機(TOSHIBA TW-127XM4L)</a>到着。
引っ越し業者はアート引越センターで、費用は150964円でした。
アパート + 研究室の荷物を一気に持っていくことになったものの、
10月の平日ど真ん中、かつ洗濯機と冷蔵庫、49インチディスプレイなどの大物を処分することが前提だったため、
想定よりかなりお安くまとまったように感じています。</p>

<p>ZA発売日が被ってしまい、この状態でミアレシティ探索もスタート。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251016_za.webp" alt="引っ越し" /></p>

<p>メールの添付ファイルを実行してインストール、これあかんやつや</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251016_mail1.webp" alt="添付ファイルを" /></p>

<p>そりゃ遠隔監視されて行動把握される訳ですわ</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251016_mail2.webp" alt="実行するな" /></p>

<p>21日には<a href="https://www.mitsubishielectric.co.jp/ldg/wink/ssl/displayProduct.do?ccd=10201010&amp;pid=354333">冷蔵庫(三菱電機 MR-CX37ML-H)</a>も到着。
退職直前に必ず1日出勤しなければならないらしく、いったん酒田へ帰省。</p>

<p>28日、両親を連れて<a href="https://maps.app.goo.gl/u3RPyzpvutYr4NoU8">かみのやま温泉 花明りの宿 月の池</a>へ。Audi A3最後のドライブ。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251028_kaminoyama.webp" alt="かみのやま温泉" /></p>

<p>31日、旧居を退去。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251031_taikyo.webp" alt="旧居を退去" /></p>

<p>最後にちょっとだけ、近所の砂浜までドライブに。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251031_a3_umi.webp" alt="最後のドライブ" /></p>

<p>8年と45日乗ったAudi A3との別れ。なによりつらかった。</p>

<p><strong>Service due!</strong></p>

<p><img src="/files/blog/2025/2025-12-31-matome/251031_a3.webp" alt="Service due!" /></p>

<p>112832km - 納車時12855kmで自身の走行距離99977km。あと23kmドライブしたかった…。</p>

<p>10月31日付で前職を退職し、長年働いてきた教育・研究機関から離れました。</p>

<h2 id="11月">11月</h2>

<p>1日。浦安へ。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251101_inaho.webp" alt="いなほ" /></p>

<p>萩の月の看板を見ると、あぁ東京に来たなぁという気持ちになります。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251101_haginotsuki.webp" alt="萩の月" /></p>

<p><a href="https://jp.store.ui.com/jp/ja/category/cloud-gateways-compact/collections/cloud-gateway-fiber/products/ucg-fiber">UbiquitiのCloud Gateway Fiber</a>も到着。ついに自宅ネットワークインフラが光クロス(10G)に。このサイズで10G対応、IDS/IPSスループット5Gbps、マジ?</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251101_ucg_fiber.webp" alt="UCG-Fiber" /></p>

<p>新居のネットワーク(Internet MultifeedのDS-Lite)は、アップロード4Gbps、ダウンロード3.6Gbpsほど出ている模様。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251231_network.webp" alt="network" /></p>

<p>4日から<a href="https://www.mbk-digital.co.jp/">新しい職場</a>でお仕事開始。
名刺の肩書きでは「ソフトウェアエンジニア」になりました。
今のところは、AI関連のR&amp;Dがメインになっています。</p>

<p>8日、リモートワークメインの生活に備え、新しい<a href="https://www.flexispot.jp/e7h.html">机(FlexiSpot E7H)</a>と<a href="https://hermanmiller.co.jp/products/aeron-graphite-dc1-instock">椅子(アーロンチェア)</a>を導入。アーロンチェアはちょうどブラックフライデーセールで198000円になっていたのを見つけてしまい、勢いに任せてポチりました。
昇降デスクなんてほんとにいるのかな…と半信半疑だったのですが、実際導入してみると、
今まで使っていた机は自分の身体にぜんぜん合ってなかったんだということを思い知らさせました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251108_desk.webp" alt="椅子と机" /></p>

<p>9日、<a href="https://www.muji.com/jp/ja/store/cmdty/detail/4550512892175">無印のベッドフレーム(セミダブル)</a>が到着。アスクルのランサムウェア事故に盛大に巻き込まれ、だいぶ手間取ってしまいました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251109_bed.webp" alt="ベッドフレーム" /></p>

<p>15日、しあわせの鐘を鳴らしに海ほたるへ。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251115_shiawase.webp" alt="しあわせの鐘" /></p>

<p>23日、今度は大洗へ。
エトピリカで満足しました。クイズを出すﾋﾟｨ～</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251123_erika.webp" alt="エリカちゃん" /></p>

<p>あんこう鍋おいしかったです。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251123_ankou.webp" alt="あんこうちゃん" /></p>

<p>近所のリゾートにも行きました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251124_land.webp" alt="浦安ランド" /></p>

<h2 id="12月">12月</h2>

<p><a href="https://www.nitori-net.jp/ec/product/4721220/">キッチンボード(IM301HQ 120MG LBR)</a>導入。キッチンもそれっぽくなってきました。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251208_kitchen.webp" alt="キッチンボード導入" /></p>

<p>東京の忘年会はこわい(主に予算)。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251212_fugu.webp" alt="ふぐ" /></p>

<p>東京の忘年会はほんとうにこわい(主に予算)。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251220_niku.webp" alt="にく" /></p>

<p>みずほの木。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251224_mizuho.webp" alt="みずほの木" /></p>

<p>草津の木。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251229_kusatsu.webp" alt="草津の木" /></p>

<p>草津のカモネギうまい。</p>

<p><img src="/files/blog/2025/2025-12-31-matome/251229_kamonegi.webp" alt="カモネギ" /></p>

<h2 id="転居転職">転居・転職</h2>

<p>今回の転職は、リファラルや資料添削、面接練習、気晴らしの旅・お食事会など、多くの方に支援頂きながら成し遂げることができました。
改めて、この場を借りて御礼申し上げます。本当にありがとうございました。</p>

<hr />

<p>退職の主な理由は、<a href="https://www.socym.co.jp/book/1505">職場環境、業務内容、待遇、将来の見通しといった、よくあるもの</a>です。
軌道に乗り始めたAIサービス基盤に関する研究と、それを活かした教育を続けたいという意思はあったものの、
前職ではそれを成し遂げる道筋、将来像が見えてきませんでした。
また、「自分は教員・研究者を名乗っていい人間なのか」という懸念も、結局最後まで払拭されることはありませんでした。</p>

<p>加えて、地元を大切にしたいという思いも無い訳ではないのですが、内輪・内向きな雰囲気を感じる場面が少なからず存在し、
庄内から離れたいという気持ちに繋がっていきました。一度離れた経験があるせいなのかもしれません。</p>

<p>ここから成長していくぞという姿勢が強い環境でやっていきたいなら、自分から動くしかないなということで、転居・転職を決意しました。</p>

<h2 id="まとめ">まとめ</h2>

<p>2025年は、長年の教育研究機関勤めから心機一転でITエンジニアになったり、再び庄内を離れて千葉県民になったりと、激動の1年でした。</p>

<p>できたてホヤホヤのITベンチャーに転職し、若く前向きな姿勢が強い職場の勢いに付いていくだけで今は精一杯といった感じではありますが、
2026年はこの生活を軌道に乗せ、次のステップへと人生を進める1年にしたいと思います。</p>

<p>あまり気を張り過ぎても持たないので、適度に旅したりするのは引き続きやっていきたいですね。適度に。</p>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[2025年は「転居・転職・AI」の1年でした。 ほんとうにいろいろとあったので、まとめて記録しておきたいと思います。]]></summary></entry><entry><title type="html">オープンソースカンファレンス2025 Tokyo/Springに出展しました(Project Sincromisor)</title><link href="/blog/2025/02/23/osc-tokyo.html" rel="alternate" type="text/html" title="オープンソースカンファレンス2025 Tokyo/Springに出展しました(Project Sincromisor)" /><published>2025-02-23T00:00:00+09:00</published><updated>2025-02-23T00:00:00+09:00</updated><id>/blog/2025/02/23/osc-tokyo</id><content type="html" xml:base="/blog/2025/02/23/osc-tokyo.html"><![CDATA[<p><a href="https://event.ospn.jp/osc2025-spring/">オープンソースカンファレンス2025 Tokyo/Spring(会場: 駒澤大学)</a>にて、
私が開発を進めているかわいいキャラクターおしゃべりサービス基盤
<a href="https://github.com/Phenomer/Sincromisor">Project Sincromisor</a>の展示と、
Sincromisorの基盤となる「AIサービス基盤の開発」についてのセミナーをおこないました。</p>

<p>展示・セミナー資料は下記からダウンロードできます。</p>
<ul>
  <li><a href="https://www.negix.org/docs/sincromisor">https://www.negix.org/docs/Sincromisor</a></li>
</ul>

<p>展示ブースの様子です。</p>

<p><img src="/files/blog/2025/2025-02-22-osc-tokyo/booth01.webp" alt="booth01" /></p>

<p>音声対話ができるLooking Glassをメインに、横のディスプレイでその裏側の通信の様子を確認したり、
Difyによるチャットフローの体験をしたりできるようにしていました。</p>

<p><img src="/files/blog/2025/2025-02-22-osc-tokyo/booth02.webp" alt="booth02" /></p>

<p>隣のMacBook Airは、私が話したことをそっくりそのまま真似してキャラクターがしゃべる、
「Sincro」モードで動かしていました。
<img src="/files/blog/2025/2025-02-22-osc-tokyo/booth03.webp" alt="booth03" /></p>

<p>お隣は技術評論社さんのブースでした。アンケートに回答すると技術書がもらえるキャンペーン中との事で、
ちょうどピッタリな本(RAG・AIエージェント実践入門)をいただきました。
ブースに置いておいたところ、手に取って試し読みされる方も多く、やはり多くの方が関心を持っている分野であるように感じます。</p>

<p><img src="/files/blog/2025/2025-02-22-osc-tokyo/book-ame.webp" alt="book-ame" /></p>

<p>今回は過去最高に気合を入れて用意してきたのですが、肝心のネットワーク(povo 2.0のテザリング)と
WebRTCの状態が芳しくなく、対話サービスのデモが度々クラッシュしてしまっていたのが心残りでした。</p>

<p>VTuberモード(会場無線LAN利用)のほうのデモは、2日目は概ねうまくいっていたようでした。
イベント会場で展示する機会が多いサービスなので、ネットワーク環境とWebRTCに関する部分は重点的に改善していきたい所です。</p>

<p>リーフレットを(ながーーーい)解説の最後にお渡しする形にしていたところ、なんと持ってきた40部全部完売となりました。
OSCにも賑わいが戻ってきた感じがしますね。</p>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[オープンソースカンファレンス2025 Tokyo/Spring(会場: 駒澤大学)にて、 私が開発を進めているかわいいキャラクターおしゃべりサービス基盤 Project Sincromisorの展示と、 Sincromisorの基盤となる「AIサービス基盤の開発」についてのセミナーをおこないました。]]></summary></entry><entry><title type="html">DifyでRAG(Text Embedding + Rerank)をセルフホスティングしたい!</title><link href="/blog/2025/02/18/dify-rag.html" rel="alternate" type="text/html" title="DifyでRAG(Text Embedding + Rerank)をセルフホスティングしたい!" /><published>2025-02-18T00:00:00+09:00</published><updated>2025-02-18T00:00:00+09:00</updated><id>/blog/2025/02/18/dify-rag</id><content type="html" xml:base="/blog/2025/02/18/dify-rag.html"><![CDATA[<p>日本語を前提としたチャットボットを作ろうと、DifyでRAGする際の情報をググっていると、どこかしらのサービスのAPIを叩いて実現しているものばかり出てきてしまう。
そのため、全部オンプレのセルフホスティングでやろうとするとどうしていいやらまるでわからんとなりがちである。
そこで今回は、<strong>DifyでのRAG(Text Generation + Embedding + Rerank)を、全てオンプレで実現するための手順</strong>を取りまとめる。</p>

<ul>
  <li><a href="/ai/250205/dify-jp-1-model-provider.html">モデルプロバイダーの準備</a>
    <ul>
      <li><a href="/ai/250205/dify-jp-1-inference.html">推論モデルプロバイダーを用意する</a></li>
      <li><a href="/ai/250205/dify-jp-1-embed.html">Embeddingモデルプロバイダーを用意する</a></li>
      <li><a href="/ai/250205/dify-jp-1-rerank.html">Rerankモデルプロバイダーを用意する</a></li>
    </ul>
  </li>
  <li>Dify上でのモデルプロバイダーの設定(執筆中)</li>
  <li><a href="https://github.com/Phenomer/fake-openai-server">今回実装したEmbedding/Rerankモデルプロバイダー(Phenomer/fake-openai-server)</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[日本語を前提としたチャットボットを作ろうと、DifyでRAGする際の情報をググっていると、どこかしらのサービスのAPIを叩いて実現しているものばかり出てきてしまう。 そのため、全部オンプレのセルフホスティングでやろうとするとどうしていいやらまるでわからんとなりがちである。 そこで今回は、DifyでのRAG(Text Generation + Embedding + Rerank)を、全てオンプレで実現するための手順を取りまとめる。]]></summary></entry><entry><title type="html">Caddy + OWASP Corazaで作るWAF対応リバースプロキシ</title><link href="/blog/2023/09/05/caddy-coraza.html" rel="alternate" type="text/html" title="Caddy + OWASP Corazaで作るWAF対応リバースプロキシ" /><published>2023-09-05T00:00:00+09:00</published><updated>2023-09-05T00:00:00+09:00</updated><id>/blog/2023/09/05/caddy-coraza</id><content type="html" xml:base="/blog/2023/09/05/caddy-coraza.html"><![CDATA[<p>CaddyとOWASP Corazaで、WAF対応リバースプロキシサーバを作る手順をまとめています。
(とりあえずはWAFとリバースプロキシ動くところまで)</p>

<ul>
  <li><a href="/security/230905/caddy-coraza.html">Caddy + OWASP Corazaで作るWAF付きリバースプロキシ(1)</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[CaddyとOWASP Corazaで、WAF対応リバースプロキシサーバを作る手順をまとめています。 (とりあえずはWAFとリバースプロキシ動くところまで)]]></summary></entry><entry><title type="html">Let’s EnctyptのDNS-01チャレンジでワイルドカード証明書を取得</title><link href="/blog/2023/02/28/letsencrypt-dns01.html" rel="alternate" type="text/html" title="Let’s EnctyptのDNS-01チャレンジでワイルドカード証明書を取得" /><published>2023-02-28T08:00:00+09:00</published><updated>2023-02-28T08:00:00+09:00</updated><id>/blog/2023/02/28/letsencrypt-dns01</id><content type="html" xml:base="/blog/2023/02/28/letsencrypt-dns01.html"><![CDATA[<p>Let’s EncryptのDNS-01チャレンジで、ワイルドカード証明書を取得する方法をまとめました。</p>

<ul>
  <li><a href="/security/230228/letsencrypt-dns.html">Let’s Encryptでワイルドカード証明書をつくる</a></li>
  <li><a href="/security/230228/letsencrypt-test.html">Let’s Encryptで作ったワイルドカード証明書を試す</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[Let’s EncryptのDNS-01チャレンジで、ワイルドカード証明書を取得する方法をまとめました。]]></summary></entry><entry><title type="html">Raspberry Pi 4のHTTP Secure Boot</title><link href="/blog/2022/07/22/rpi4-http-secure-boot.html" rel="alternate" type="text/html" title="Raspberry Pi 4のHTTP Secure Boot" /><published>2022-07-22T08:00:00+09:00</published><updated>2022-07-22T08:00:00+09:00</updated><id>/blog/2022/07/22/rpi4-http-secure-boot</id><content type="html" xml:base="/blog/2022/07/22/rpi4-http-secure-boot.html"><![CDATA[<p>Raspberry Pi 4にはHTTP経由でFAT32のブートイメージを取得して起動する機能が追加されましたが、
HTTPなのでそのままでは改ざんされる可能性があります。これに対してSecure Boot機能なるものが追加されたようですので試してみました。
(この機能では改ざんは防げますが、盗聴は防げません。また、ブートイメージのサイズが大きすぎると失敗します。ご注意ください。)</p>

<ul>
  <li><a href="/raspberrypi/220720/eeprom-secureboot.html">Raspberry Pi 4のHTTP bootをセキュアにする</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[Raspberry Pi 4にはHTTP経由でFAT32のブートイメージを取得して起動する機能が追加されましたが、 HTTPなのでそのままでは改ざんされる可能性があります。これに対してSecure Boot機能なるものが追加されたようですので試してみました。 (この機能では改ざんは防げますが、盗聴は防げません。また、ブートイメージのサイズが大きすぎると失敗します。ご注意ください。)]]></summary></entry><entry><title type="html">Linuxで作るL2TP/WireGuardネットワーク</title><link href="/blog/2022/05/20/l2tp-wireguard.html" rel="alternate" type="text/html" title="Linuxで作るL2TP/WireGuardネットワーク" /><published>2022-05-20T08:00:00+09:00</published><updated>2022-05-20T08:00:00+09:00</updated><id>/blog/2022/05/20/l2tp-wireguard</id><content type="html" xml:base="/blog/2022/05/20/l2tp-wireguard.html"><![CDATA[<p><strong>L2TP/IPSecはむずかしい! めんどくさい!</strong>
<strong>WireGuardでL2ネットワーク作りたい!</strong></p>

<p>ということで、「<strong>WireGuardとL2TP</strong>を用いて、拠点間で共通のセグメントを持つL2ネットワークを
比較的手軽に構築する方法」をまとめました。</p>

<ul>
  <li><a href="/network/linux-l2tp.html">Linuxのl2tp_ethモジュールを使ってL2ネットワークを作る</a></li>
  <li><a href="/network/linux-wireguard.html">WireGuardでL3VPNを作る</a></li>
  <li><a href="/network/linux-l2tp-wireguard.html">L2TP/WireGuardで拠点間L2ネットワークを作る</a></li>
</ul>

<p><img src="/files/network/220521/l2tp_wg.svg" alt="L2TP/WireGuard ネットワーク図" /></p>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[L2TP/IPSecはむずかしい! めんどくさい! WireGuardでL2ネットワーク作りたい!]]></summary></entry><entry><title type="html">Raspberry Pi 4 + Ubuntu + 動画ストリーミング配信記事まとめ</title><link href="/blog/2022/02/18/ubuntupi-camera-streaming.html" rel="alternate" type="text/html" title="Raspberry Pi 4 + Ubuntu + 動画ストリーミング配信記事まとめ" /><published>2022-02-18T08:00:00+09:00</published><updated>2022-02-18T08:00:00+09:00</updated><id>/blog/2022/02/18/ubuntupi-camera-streaming</id><content type="html" xml:base="/blog/2022/02/18/ubuntupi-camera-streaming.html"><![CDATA[<p>Ubuntu 21.10(arm64) + Raspberry Pi 4(model B, 8GB)環境で、カメラの動画をストリーミング配信する手法をまとめました。(まだ作成中)</p>

<ul>
  <li><a href="/raspberrypi/ubuntu-rpi-hls.html">ubuntu 21.10(arm64) + Raspberry Pi 4環境における動画ストリーミング配信(HLS編)</a></li>
  <li><a href="/raspberrypi/ubuntu-rpi-dash.html">ubuntu 21.10(arm64) + Raspberry Pi 4環境における動画ストリーミング配信(MPEG-DASH編)</a></li>
  <li><a href="/raspberrypi/webui-servo.html">Webインタフェースによるサーボモータアーム操作</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[Ubuntu 21.10(arm64) + Raspberry Pi 4(model B, 8GB)環境で、カメラの動画をストリーミング配信する手法をまとめました。(まだ作成中)]]></summary></entry><entry><title type="html">Raspberry Pi 4 + Ubuntu + mediapipe記事まとめ</title><link href="/blog/2021/12/19/ubuntupi-mediapipe.html" rel="alternate" type="text/html" title="Raspberry Pi 4 + Ubuntu + mediapipe記事まとめ" /><published>2021-12-19T08:00:00+09:00</published><updated>2021-12-19T08:00:00+09:00</updated><id>/blog/2021/12/19/ubuntupi-mediapipe</id><content type="html" xml:base="/blog/2021/12/19/ubuntupi-mediapipe.html"><![CDATA[<p>Ubuntu 21.10(arm64) + Raspberry Pi 4(model B, 8GB)環境で、Googleが開発している
ライブ・ストリーミングメディア向けの機械学習ライブラリである
<a href="https://google.github.io/mediapipe/">mediapipe</a>を動かす手順をてきとうにまとめました。(まだ作成中)</p>

<ul>
  <li><a href="/raspberrypi/ubuntu-rpi-build-mediapipe.html">Ubuntu 22.04(arm64) + Raspberry Pi 4(model B)でmediapipe 0.10.1をビルド</a></li>
  <li><a href="/raspberrypi/ubuntu-rpi-camera.html">ubuntu 21.10(arm64) + Raspberry Pi 4環境におけるMIPI CSI-2接続カメラの設定</a></li>
  <li><a href="/raspberrypi/ubuntu-rpi-mediapipe.html">ubuntu 21.10(arm64) + Raspberry Pi 4環境でmediapipeを動かす</a></li>
  <li><a href="/raspberrypi/ubuntu-rpi-pwm-pca9685.html">ubuntu 21.10(arm64) + Raspberry Pi 4環境でPCA9685を用いてアナログPWMサーボモータを動かす</a></li>
  <li><a href="/raspberrypi/ubuntu-rpi-aicamera.html">ubuntu 21.10(arm64) + Raspberry Pi 4環境でmediapipe + サーボモータ + カメラでAIカメラを作る</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[Ubuntu 21.10(arm64) + Raspberry Pi 4(model B, 8GB)環境で、Googleが開発している ライブ・ストリーミングメディア向けの機械学習ライブラリである mediapipeを動かす手順をてきとうにまとめました。(まだ作成中)]]></summary></entry><entry><title type="html">systemd-nspawnコンテナのネットワーク設定</title><link href="/blog/2019/09/19/nspawn.html" rel="alternate" type="text/html" title="systemd-nspawnコンテナのネットワーク設定" /><published>2019-09-19T21:00:00+09:00</published><updated>2019-09-19T21:00:00+09:00</updated><id>/blog/2019/09/19/nspawn</id><content type="html" xml:base="/blog/2019/09/19/nspawn.html"><![CDATA[<p>Arch Linuxホストのブリッジインタフェース経由で外部と通信するコンテナを、systemd-nspawnで作成する際のネットワーク設定をまとめる。</p>

<h1 id="構成">構成</h1>
<ul>
  <li>コンテナ用ネットワークは10.39.252.0/24</li>
  <li>外部ネットワークからの通信はsshのみ許可する</li>
  <li>内部ネットワークから外部ネットワークへの通信は全て許可する</li>
  <li>
    <p>コンテナ - ホスト間、各コンテナ間のIPv4通信は全て許可する</p>
  </li>
  <li>ホスト側
    <ul>
      <li>外部側インタフェースはeth0
        <ul>
          <li>外部のDHCPサーバ経由でネットワーク設定を受け取る</li>
        </ul>
      </li>
      <li>ブリッジインタフェースはbr0</li>
      <li>br0のIPアドレスは10.39.252.254</li>
    </ul>
  </li>
  <li>コンテナ側
    <ul>
      <li>コンテナ名はbase</li>
      <li>静的IPアドレスを割り当てる</li>
      <li>vethインタフェースはhost0</li>
      <li>host0のIPアドレスは10.39.252.1</li>
    </ul>
  </li>
</ul>

<h1 id="ホスト側作業ホスト構築時のみ">ホスト側作業(ホスト構築時のみ)</h1>
<h2 id="ホスト側パッケージの導入">ホスト側パッケージの導入</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
</pre></td><td class="code"><pre>HOST# pacman <span class="nt">-S</span> nftables arch-install-scripts
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="ホスト側設定ファイルの作成">ホスト側設定ファイルの作成</h2>
<h3 id="host-etcsystemdnetworketh0network">HOST: /etc/systemd/network/eth0.network</h3>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre></td><td class="code"><pre><span class="o">[</span>Match]
<span class="nv">Name</span><span class="o">=</span>eth0

<span class="o">[</span>Network]
<span class="nv">DHCP</span><span class="o">=</span><span class="nb">yes
</span><span class="nv">IPForward</span><span class="o">=</span><span class="nb">yes</span>
</pre></td></tr></tbody></table></code></pre></figure>

<h3 id="host-etcsystemdnetworkbr0netdev">HOST: /etc/systemd/network/br0.netdev</h3>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="code"><pre><span class="o">[</span>NetDev]
<span class="nv">Name</span><span class="o">=</span>br0
<span class="nv">Kind</span><span class="o">=</span>bridge
</pre></td></tr></tbody></table></code></pre></figure>

<h3 id="host-etcsystemdnetworkbr0network">HOST: /etc/systemd/network/br0.network</h3>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="code"><pre><span class="o">[</span>Match]
<span class="nv">Name</span><span class="o">=</span>br0

<span class="o">[</span>Network]
<span class="nv">Address</span><span class="o">=</span>10.39.252.254/24
</pre></td></tr></tbody></table></code></pre></figure>

<h3 id="host-etcsystemdnetworkvbnetwork">HOST: /etc/systemd/network/vb.network</h3>
<p><a href="https://github.com/systemd/systemd/issues/575">参考: document what the “degraded” state of network interfaces precisely means #575</a></p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre></td><td class="code"><pre><span class="o">[</span>Match]
<span class="nv">Name</span><span class="o">=</span>vb-<span class="k">*</span>

<span class="o">[</span>Network]
<span class="nv">Bridge</span><span class="o">=</span>br0
<span class="nv">LinkLocalAddressing</span><span class="o">=</span>no
</pre></td></tr></tbody></table></code></pre></figure>

<h3 id="host-etcnftablesconf">HOST: /etc/nftables.conf</h3>
<p>ちょっとあやしいけどとりあえず動く</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre><span class="c">#!/usr/bin/nft -f</span>
table ip nat <span class="o">{</span>
        chain prerouting <span class="o">{</span>
                <span class="nb">type </span>nat hook prerouting priority 0
                policy accept
        <span class="o">}</span>

        chain postrouting <span class="o">{</span>
                <span class="nb">type </span>nat hook postrouting priority 100
                oifname eth0 masquerade
                policy accept
        <span class="o">}</span>
<span class="o">}</span>

table inet filter <span class="o">{</span>
  chain input <span class="o">{</span>
    policy drop
    <span class="nb">type </span>filter hook input priority 0

    ct state <span class="o">{</span> established, related <span class="o">}</span> accept
    ct state invalid drop
    iifname lo accept
    ip protocol icmp accept
    tcp dport ssh accept
    ip saddr 10.39.252.0/24 accept

    reject with icmp <span class="nb">type </span>port-unreachable
  <span class="o">}</span>

  chain forward <span class="o">{</span>
    policy accept
    <span class="nb">type </span>filter hook forward priority 0
  <span class="o">}</span>

  chain output <span class="o">{</span>
    policy accept
    <span class="nb">type </span>filter hook output priority 0
  <span class="o">}</span>
<span class="o">}</span>
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="ホスト側設定コマンドの実行">ホスト側設定コマンドの実行</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
</pre></td><td class="code"><pre>HOST# systemctl <span class="nb">enable</span> <span class="nt">--now</span> systemd-networkd
HOST# systemctl <span class="nb">enable</span> <span class="nt">--now</span> systemd-resolved
HOST# systemctl <span class="nb">enable</span> <span class="nt">--now</span> nftables
HOST# systemctl <span class="nb">enable</span> <span class="nt">--now</span> machines.target
</pre></td></tr></tbody></table></code></pre></figure>

<h1 id="ホスト側作業コンテナ作成時に毎回">ホスト側作業(コンテナ作成時に毎回)</h1>
<h2 id="ホスト側コンテナ用設定ファイルの作成">ホスト側コンテナ用設定ファイルの作成</h2>
<h3 id="host-etcsystemdnspawnbasenspawn">HOST: /etc/systemd/nspawn/base.nspawn</h3>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
</pre></td><td class="code"><pre><span class="o">[</span>Network]
<span class="nv">Bridge</span><span class="o">=</span>br0
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="コンテナの作成">コンテナの作成</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre></td><td class="code"><pre>HOST# pacstrap <span class="nt">-d</span> /var/lib/machines/base base
HOST# machinectl <span class="nb">enable </span>base
HOST# machinectl start base
HOST# machinectl shell base
Connected to machine base. Press ^] three <span class="nb">times </span>within 1s to <span class="nb">exit </span>session.
<span class="o">[</span>root@base ~]#
</pre></td></tr></tbody></table></code></pre></figure>

<h1 id="コンテナ側作業">コンテナ側作業</h1>
<h2 id="コンテナ側設定ファイルの作成">コンテナ側設定ファイルの作成</h2>
<h3 id="container-etcsystemdnetworkhost0network">CONTAINER: /etc/systemd/network/host0.network</h3>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre><span class="o">[</span>Match]
<span class="nv">Virtualization</span><span class="o">=</span>container
<span class="nv">Name</span><span class="o">=</span>host0

<span class="o">[</span>Network]
<span class="nv">Address</span><span class="o">=</span>10.39.252.1/24
<span class="nv">Gateway</span><span class="o">=</span>10.39.252.254
<span class="nv">DNS</span><span class="o">=</span>8.8.8.8
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="コンテナ側設定コマンドの実行">コンテナ側設定コマンドの実行</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="code"><pre>CONTAINER# <span class="nb">ln</span> <span class="nt">-s</span> /dev/null /etc/systemd/network/80-container-host0.network
CONTAINER# systemctl <span class="nb">enable</span> <span class="nt">--now</span> systemd-networkd
CONTAINER# systemctl <span class="nb">enable</span> <span class="nt">--now</span> systemd-resolved
</pre></td></tr></tbody></table></code></pre></figure>

<h1 id="確認">確認</h1>
<h2 id="machinectl">machinectl</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="code"><pre>HOST# machinectl
MACHINE CLASS     SERVICE        OS   VERSION ADDRESSES
base    container systemd-nspawn <span class="nb">arch</span> -       10.39.252.1...

1 machines listed.
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="networkctlhost">networkctl(HOST)</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre>HOST# networkctl
IDX LINK    TYPE     OPERATIONAL SETUP
  1 lo      loopback carrier     unmanaged
  2 eth0    ether    routable    configured
  3 br0     bridge   routable    configured
  4 vb-base ether    carrier     configured

4 links listed.
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="networkctlcontainer">networkctl(CONTAINER)</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre></td><td class="code"><pre>CONTAINER# networkctl
IDX LINK  TYPE     OPERATIONAL SETUP
  1 lo    loopback carrier     unmanaged
  2 host0 ether    routable    configured

2 links listed.
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="iphost">ip(HOST)</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre>HOST# ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    <span class="nb">link</span>/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc mq state UP group default qlen 1000
    <span class="nb">link</span>/ether 00:15:5d:60:11:05 brd ff:ff:ff:ff:ff:ff
    inet 10.39.254.249/24 brd 10.39.254.255 scope global dynamic eth0
       valid_lft 364sec preferred_lft 364sec
    inet6 fe80::215:5dff:fe60:1105/64 scope <span class="nb">link
       </span>valid_lft forever preferred_lft forever
3: br0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    <span class="nb">link</span>/ether 32:74:bf:c5:eb:be brd ff:ff:ff:ff:ff:ff
    inet 10.39.252.254/24 brd 10.39.252.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::3074:bfff:fec5:ebbe/64 scope <span class="nb">link
       </span>valid_lft forever preferred_lft forever
4: vb-base@if2: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
    <span class="nb">link</span>/ether 26:44:40:f2:da:4c brd ff:ff:ff:ff:ff:ff link-netnsid 0
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="ipcontainer">ip(CONTAINER)</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre>CONTAINER# ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    <span class="nb">link</span>/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: host0@if5: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    <span class="nb">link</span>/ether da:5b:0b:b9:45:13 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.39.252.1/24 brd 10.39.252.255 scope global host0
       valid_lft forever preferred_lft forever
    inet6 fe80::d85b:bff:feb9:4513/64 scope <span class="nb">link
       </span>valid_lft forever preferred_lft forever
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="pinghost">ping(HOST)</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="code"><pre>HOST# ping <span class="nt">-c</span> 1 10.39.254.1
PING 10.39.254.1 <span class="o">(</span>10.39.254.1<span class="o">)</span> 56<span class="o">(</span>84<span class="o">)</span> bytes of data.
64 bytes from 10.39.254.1: <span class="nv">icmp_seq</span><span class="o">=</span>1 <span class="nv">ttl</span><span class="o">=</span>64 <span class="nb">time</span><span class="o">=</span>0.278 ms

<span class="nt">---</span> 10.39.254.1 ping statistics <span class="nt">---</span>
1 packets transmitted, 1 received, 0% packet loss, <span class="nb">time </span>0ms
rtt min/avg/max/mdev <span class="o">=</span> 0.278/0.278/0.278/0.000 ms
</pre></td></tr></tbody></table></code></pre></figure>

<h2 id="pingcontainer">ping(CONTAINER)</h2>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre>HOST# machinectl shell base
Connected to machine base. Press ^] three <span class="nb">times </span>within 1s to <span class="nb">exit </span>session.
CONTAINER# ping <span class="nt">-c</span> 1 google.com
PING google.com <span class="o">(</span>172.217.26.110<span class="o">)</span> 56<span class="o">(</span>84<span class="o">)</span> bytes of data.
64 bytes from 172.217.26.110: <span class="nv">icmp_seq</span><span class="o">=</span>1 <span class="nv">ttl</span><span class="o">=</span>54 <span class="nb">time</span><span class="o">=</span>20.0 ms

<span class="nt">---</span> google.com ping statistics <span class="nt">---</span>
1 packets transmitted, 1 received, 0% packet loss, <span class="nb">time </span>0ms
rtt min/avg/max/mdev <span class="o">=</span> 19.978/19.978/19.978/0.000 ms
</pre></td></tr></tbody></table></code></pre></figure>

<h1 id="変更履歴">変更履歴</h1>
<ul>
  <li>2019-09-20: ちゃーしゅーねこ先生のご指摘を受け<code class="language-plaintext highlighter-rouge">systemctl enable --now</code>を使用するよう修正
<a href="https://social.mikutter.hachune.net/@charsiuCat/102822812422075522">https://social.mikutter.hachune.net/@charsiuCat/102822812422075522</a></li>
</ul>]]></content><author><name>葱野</name></author><category term="blog" /><summary type="html"><![CDATA[Arch Linuxホストのブリッジインタフェース経由で外部と通信するコンテナを、systemd-nspawnで作成する際のネットワーク設定をまとめる。]]></summary></entry></feed>