<?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="https://diary.jo3qma.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://diary.jo3qma.com/" rel="alternate" type="text/html" hreflang="ja" /><updated>2026-05-19T06:44:02+09:00</updated><id>https://diary.jo3qma.com/feed.xml</id><title type="html">ぶ！ログ</title><subtitle>見習いインフラエンジニアの自宅サーバーや日本橋でんでんタウンのことなどの雑記</subtitle><author><name>ぶっちゃん！</name></author><entry><title type="html">Dockhandを使い始めた</title><link href="https://diary.jo3qma.com/posts/2026/01/27/dockhand/" rel="alternate" type="text/html" title="Dockhandを使い始めた" /><published>2026-01-27T00:00:00+09:00</published><updated>2026-01-27T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2026/01/27/dockhand</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2026/01/27/dockhand/"><![CDATA[<h2 id="dockerの管理">Dockerの管理</h2>

<p>今まで色々なサービスを公開/運用していましたが、ここ数年は Docker Compose を使ったものでした。
管理としては素朴にSSHシェルに入って<code class="language-plaintext highlighter-rouge">docker compose</code>コマンドを使用した方法でした。
管理ホストが 1 つしか無かった上、安定していたり個人開発をあまり行っていなかったため、特に大きな問題も起きることがありませんでした。</p>

<p>現在、サーバーの老朽化を理由に Proxmox 仮想化基盤へのリプレース作業を行っており、ベアメタルから仮想マシンへと移行しています。所謂 P2V ですね。
それに伴い、依存や境界分離の観点から複数の VM を使用した構成へと移行している最中です。</p>

<p>今まで通り、それぞれのホストに SSH してコマンドを叩いてもよいのですが、管理が煩雑になる上、一目で状態を確認したいなんてことも多かったため、「<a href="https://dockhand.pro/">Dockhand</a>」という管理ツールを使用することにしました。</p>

<h2 id="dockhand-の導入">Dockhand の導入</h2>

<p><a href="https://dockhand.pro/#quick-start">公式サイト</a>に書いてあるとおり、Docker Compose でポンするだけで簡単です。</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">services</span><span class="pi">:</span>
  <span class="na">dockhand</span><span class="pi">:</span>
    <span class="na">image</span><span class="pi">:</span> <span class="s">fnsys/dockhand:latest</span>
    <span class="na">container_name</span><span class="pi">:</span> <span class="s">dockhand</span>
    <span class="na">restart</span><span class="pi">:</span> <span class="s">unless-stopped</span>
    <span class="na">ports</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">3000:3000</span>
    <span class="na">volumes</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">/var/run/docker.sock:/var/run/docker.sock</span>
      <span class="pi">-</span> <span class="s">dockhand_data:/app/data</span>

<span class="na">volumes</span><span class="pi">:</span>
  <span class="na">dockhand_data</span><span class="pi">:</span>
</code></pre></div></div>

<p>初期では SQLite、オプションとして PostgreSQL が DB として使用できます。</p>

<p>通常通り Docker Compose で起動します。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker compose up <span class="nt">-d</span>
</code></pre></div></div>

<p>3000 番ポートで Web サーバーが待ち受けされます。</p>

<p><img src="/assets/thumb/2026/01/27/chrome_3XRU6cmpn7-thumb.webp" alt="Dockhand Dashboard" /></p>

<p>残念ながら WebUI は英語のみ対応です。
まあ、英語でも読めるので支障はないです。</p>

<h2 id="環境設定">環境設定</h2>

<p>初期状態ではホストを含めどの Docker も管理下にないので、設定をしなければなりません。
<img src="/assets/thumb/2026/01/27/chrome_VyjXTQqChM-thumb.webp" alt="Settings Environment" /></p>

<p>dockhand を導入したホストは Socket 通信で管理できます。
<img src="/assets/thumb/2026/01/27/chrome_rQNbL6gQSl-thumb.webp" alt="Add environment" /></p>

<p>それ以外のホストは Docker Engine API か、<a href="https://github.com/Finsys/hawser">Dockhand 開発元が提供する Hawser エージェント</a>を導入することで管理下に置くことができます。
自分は Tailscale で相互に疎通が取れるので Docker Engine API を使用することにしました。</p>

<h2 id="使い方">使い方</h2>

<h3 id="docker-イメージを直接起動する">Docker イメージを直接起動する</h3>

<ol>
  <li>左のメニューの「Containers」から Containers 画面を開き、「+ Create」ボタンを押します。
<img src="/assets/thumb/2026/01/27/chrome_qCnZRPKZ4D-thumb.webp" alt="Create New Container" /></li>
  <li>任意のイメージを指定し、「Pull」します。
<img src="/assets/thumb/2026/01/27/chrome_Gn1HdtfOPL-thumb.webp" alt="Pull Image Modal" /></li>
  <li>Docker の起動に必要な諸々の設定やオプションを設定します。
<img src="/assets/thumb/2026/01/27/chrome_ryze4UQXWe-thumb.webp" alt="Container Setting Modal" /></li>
  <li>「Create container」を押下すればコンテナが作成されます。
<img src="/assets/thumb/2026/01/27/chrome_OGABfIdf7T-thumb.webp" alt="Containers List2" /></li>
</ol>

<p>各コンテナの詳細を表示することも可能です。
<img src="/assets/thumb/2026/01/27/chrome_3YSRhbSK59-thumb.webp" alt="Container details" /></p>

<p>リソース使用状況やログ、イメージのレイヤーの詳細、プロセスやファイルシステムなどを確認することが可能です。</p>

<h3 id="docker-compose-から起動する">Docker Compose から起動する</h3>

<ol>
  <li>左のメニューの「Stack」から Stack 画面を開き、「+ Create」ボタンを押します。
<img src="/assets/thumb/2026/01/27/chrome_4dqTFSjX3s-thumb.webp" alt="Create New Stack" /></li>
  <li>「Stack name」を入力します。小文字英数字が使えます。compose のスタック名です。
<img src="/assets/thumb/2026/01/27/chrome_nAhiTbtegf-thumb.webp" alt="Stack Name Input" /></li>
  <li>左のコードを入力する部分に compose.yaml の中身を記入します。</li>
  <li>右では<code class="language-plaintext highlighter-rouge">.env</code>が設定可能です。鍵マークを押すと暗号化されます。
    <ul>
      <li><code class="language-plaintext highlighter-rouge">${VAR}</code>という形式で左の compose.yaml の中に変数を埋め込むことが可能です。
<img src="/assets/thumb/2026/01/27/chrome_X4CQTpCr92-thumb.webp" alt="Stack Environment" /></li>
    </ul>
  </li>
  <li>「Create &amp; Start」を押下すればコンテナがデプロイされ、起動します。
<img src="/assets/thumb/2026/01/27/chrome_0Wqm3wYi74-thumb.webp" alt="Stack List" /></li>
</ol>

<h2 id="ライセンス">ライセンス</h2>

<p>公式サイト曰く、永久無料らしいです。
<a href="https://github.com/Finsys/dockhand">Finsys/dockhand</a></p>

<p>現在は Business Source License 1.1 (BSL 1.1)を適用しており、2029 年に Apache 2.0 へ移行するそうです。</p>

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

<p>ホームラボに Docker を管理できる Dockhand を導入してみました。
軽く使った感じでは、軽量かつ多機能でとても良さそうで、自分の用途では十分そうです。</p>

<p>自分は知らなかったのですが、Portainer や Arcane といった似たようなプロダクトもあるらしいですね。</p>

<p>個人的な不満点としては環境の取り違えが怖いので、ホストごとにヘッダーか背景の色を変更できるととても嬉しいなと思いました。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="インフラ" /><category term="Docker" /><category term="Dockhand" /><category term="Proxmox" /><category term="自宅サーバー" /><category term="備忘録" /><summary type="html"><![CDATA[Docker Composeでの管理から脱却し、Proxmox環境でのDocker管理ツール「Dockhand」を導入した記録です。]]></summary></entry><entry><title type="html">不要なRSSエントリーを削除するRSS Filterを作った</title><link href="https://diary.jo3qma.com/posts/2025/12/07/rssrss-filter/" rel="alternate" type="text/html" title="不要なRSSエントリーを削除するRSS Filterを作った" /><published>2025-12-07T00:00:00+09:00</published><updated>2025-12-07T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/12/07/rssrss-filter</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/12/07/rssrss-filter/"><![CDATA[<h2 id="nfmな記事は見たくない">NFMな記事は見たくない</h2>

<p>皆様、情報の取得方法はどうしていますか?<br />
TwitterやDiscover、ニュースサイト/アプリやテレビなどを使っていますか？</p>

<p>私は令和にもなって情報の取得元はRSSで賄っています。<br />
GoogleのDiscoverやTwitterの公式アカウント、ハッカドールなどいろいろ試しましたが、過度にパーソナライズされて二分間憎悪させられたり、サ終してしまったりと、未だに良い情報取得方法を得れていません。</p>

<p>昔の人は賢いもので、ブログ記事などの更新はRSSという仕組みで配信しており、最近は対応しているブログもホームページも減ってきましたが、それでもまだまだ多くのサイトがRSS配信をしてくれています。</p>

<p>なので、RSSリーダーを使用して新着記事を閲覧しているのですが、<br />
toB向けの記事や自分の興味のない範囲の記事、広告目的の記事などは見たくはありません。</p>

<p>それを解決するために、不要なRSSエントリーを削除するアプリをCloudflare WorkersとCloudFlare Workers KVを使って実装してみました。</p>

<h3 id="rss-filter">RSS Filter</h3>

<p>GitHubで<a href="https://github.com/JO3QMA/rssfilter">rssfilter</a>を公開しています。</p>

<p>Cloudflare Wrangler使えば数コマンドで環境を構築できます。<br />
アクセス制限は実装するのがめんどくさそうだったので、Cloudflare Accessを使って設定画面などへのアクセスを制限してください。</p>

<h4 id="構築">構築</h4>

<p>まず、リポジトリをクローンして依存関係をインストールします。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/JO3QMA/rssfilter.git
<span class="nb">cd </span>rssfilter
npm <span class="nb">install</span>
</code></pre></div></div>

<h5 id="kvネームスペースの作成">KVネームスペースの作成</h5>

<p>設定の保存にCloudflare KVを使用するため、デプロイ前にKVネームスペースを作成する必要があります。</p>
<ol>
  <li><strong>ログイン</strong>:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx wrangler login
</code></pre></div>    </div>
  </li>
  <li><strong>本番用KVの作成</strong>:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx wrangler kv:namespace create RSSFILTER_CONFIG
</code></pre></div>    </div>
  </li>
  <li><strong>プレビュー用KVの作成</strong>（推奨）:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx wrangler kv:namespace create RSSFILTER_CONFIG <span class="nt">--preview</span>
</code></pre></div>    </div>
  </li>
  <li><strong><code class="language-plaintext highlighter-rouge">wrangler.jsonc</code> の更新</strong>: コマンドの出力結果（ID）を <code class="language-plaintext highlighter-rouge">wrangler.jsonc</code> に設定してください。
    <div class="language-jsonc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"kv_namespaces"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
 </span><span class="nl">"binding"</span><span class="p">:</span><span class="w"> </span><span class="s2">"RSSFILTER_CONFIG"</span><span class="p">,</span><span class="w">
 </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ここに本番用IDを設定"</span><span class="p">,</span><span class="w">
 </span><span class="nl">"preview_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ここにプレビュー用IDを設定"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div>    </div>
  </li>
</ol>

<h5 id="デプロイ">デプロイ</h5>

<p>Cloudflare Workersへのデプロイは以下のコマンドで実行できます。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm run deploy
</code></pre></div></div>

<h5 id="アクセス制限推奨">アクセス制限（推奨）</h5>

<p>管理画面（<code class="language-plaintext highlighter-rouge">/settings</code>）および設定API（<code class="language-plaintext highlighter-rouge">/api/settings</code>）は、認証なしでアクセスできる状態では第三者に設定を書き換えられるリスクがあります。
本番環境で運用する際は、<strong>Cloudflare Access (Zero Trust)</strong> を使用して、<code class="language-plaintext highlighter-rouge">/get</code> 以外のパスへのアクセスを制限することを強く推奨します。</p>

<p><strong>推奨設定例:</strong></p>

<ul>
  <li><strong>対象</strong>: <code class="language-plaintext highlighter-rouge">your-worker.workers.dev/*</code></li>
  <li><strong>ポリシー</strong>:
    <ul>
      <li>Path が <code class="language-plaintext highlighter-rouge">/get</code> で始まる場合: <strong>Bypass</strong> (誰でもアクセス可能)</li>
      <li>それ以外: <strong>Allow</strong> (メール認証や特定のIPアドレスのみ許可)</li>
    </ul>
  </li>
</ul>

<h4 id="使い方">使い方</h4>

<p><code class="language-plaintext highlighter-rouge">https://your-worker.workers.dev/get?site=(RSSのURL)</code> にアクセスすることでフィルターされたRSSが返ってきます。<br />
<code class="language-plaintext highlighter-rouge">https://your-worker.workers.dev/</code> に直接アクセスすると上記URLをコピーできる簡易なUIがあります。</p>

<p><img src="/assets/thumb/2025/12/07/chrome_14I38Ms88-thumb.webp" alt="RSS Filter Top Page" /></p>

<h4 id="設定">設定</h4>

<p><code class="language-plaintext highlighter-rouge">https://your-worker.workers.dev/settings</code> にアクセスするとフィルター設定を編集できます。
グローバル設定とサイトごとの設定があり、それぞれ記事タイトルとURLを正規表現でフィルターできます。
一つでも一致すればそのエントリーはフィルターされます。</p>

<p><img src="/assets/thumb/2025/12/07/chrome_5KGx1wHjd-thumb.webp" alt="RSS Filter Settings Page" /></p>

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

<p>RSSで広告記事とか興味ないジャンルとかが大量に流れてくる対策ができて満足しています。</p>

<p>ただ、RSSって古い仕組みで使ってる人が案外少ないことを他の人と話していて実感します。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="ブログ" /><category term="Cloudflare" /><category term="RSS" /><category term="インフラ" /><category term="プログラミング" /><category term="備忘録" /><summary type="html"><![CDATA[不要なRSSエントリーを削除するRSS FilterをCloudflare WorkersとKVで実装しました。情報取得方法の改善に。]]></summary></entry><entry><title type="html">ブログ記事のURLやカテゴリー、タグ付けを自動化した話</title><link href="https://diary.jo3qma.com/posts/2025/09/25/url/" rel="alternate" type="text/html" title="ブログ記事のURLやカテゴリー、タグ付けを自動化した話" /><published>2025-09-25T00:00:00+09:00</published><updated>2025-09-25T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/09/25/url</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/09/25/url/"><![CDATA[<h2 id="はじめに">はじめに</h2>

<p>ブログの記事を書くたびに</p>

<ul>
  <li>適切なファイル名を考える</li>
  <li>カテゴリーを決める</li>
  <li>タグを付ける</li>
</ul>

<p>という作業が発生し、地味にめんどくさいなぁ・・・って思ったり、そもそもタグ付けするのを忘れたりしていました。</p>

<p>今までの記事とタグの表記揺れを減らしたりなど一貫性を保つのも地味に大変で、2025年にもなってこれらの作業を手動で行うのはどうかなって思ったので、
ブログのGitHub Actions整備のついでにメタデータ付与の作業を自動化してみました。</p>

<h2 id="システムの概要">システムの概要</h2>

<h3 id="構成要素">構成要素</h3>

<ol>
  <li><strong>自動メタデータ生成ワークフロー</strong> (<code class="language-plaintext highlighter-rouge">.github/workflows/autogen-metadata.yml</code>)</li>
  <li><strong>Go製のメタデータ生成スクリプト</strong> (<code class="language-plaintext highlighter-rouge">scripts/autogen-metadata/cmd/main.go</code>)</li>
  <li><strong>メタデータベース</strong> (<code class="language-plaintext highlighter-rouge">data/metadata-database.json</code>)</li>
</ol>

<h3 id="動作の流れ">動作の流れ</h3>

<h4 id="新記事の自動処理">新記事の自動処理</h4>

<ol>
  <li>プルリクエストで <code class="language-plaintext highlighter-rouge">_posts/**/*.md</code> ファイルが変更される</li>
  <li>ファイル名が <code class="language-plaintext highlighter-rouge">*-*-*-NewPost*.md</code> の形式かチェック</li>
  <li>該当ファイルをGemini-2.5 Flash-liteで分析</li>
  <li>メタデータベースを参照してカテゴリー、タグ、英語ファイル名を自動生成</li>
  <li>フロントマターを更新してコミット</li>
  <li>プルリクエストにコメントで結果を報告</li>
</ol>

<h2 id="技術的な話">技術的な話</h2>

<h3 id="メタデータベース">メタデータベース</h3>

<p>システムは既存の記事からメタデータを抽出してデータベースを構築し、一貫性のあるカテゴリーとタグの管理を行います。</p>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">// シンプルなメタデータベースの構造</span>
<span class="k">type</span> <span class="n">SimpleMetadataDatabase</span> <span class="k">struct</span> <span class="p">{</span>
    <span class="n">Categories</span> <span class="k">struct</span> <span class="p">{</span>
        <span class="n">List</span> <span class="p">[]</span><span class="kt">string</span> <span class="s">`json:"list"`</span>
    <span class="p">}</span> <span class="s">`json:"categories"`</span>
    <span class="n">Tags</span> <span class="k">struct</span> <span class="p">{</span>
        <span class="n">List</span> <span class="p">[]</span><span class="kt">string</span> <span class="s">`json:"list"`</span>
    <span class="p">}</span> <span class="s">`json:"tags"`</span>
<span class="p">}</span>
</code></pre></div></div>

<h4 id="データベースの特徴">データベースの特徴</h4>

<ol>
  <li><strong>シンプルな構造</strong>: カテゴリーとタグのリストを保持</li>
  <li><strong>一貫性の保証</strong>: 既存のカテゴリーとタグを優先使用</li>
  <li><strong>拡張性</strong>: 新しいカテゴリーとタグを動的に追加可能</li>
</ol>

<h3 id="gemini-25-flash-liteの活用">Gemini-2.5 Flash-liteの活用</h3>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">// モデルを取得（Gemini 2.5 Flash-liteを使用）</span>
<span class="n">model</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="n">GenerativeModel</span><span class="p">(</span><span class="s">"models/gemini-2.5-flash-lite"</span><span class="p">)</span>

<span class="c">// 生成設定</span>
<span class="n">model</span><span class="o">.</span><span class="n">GenerationConfig</span><span class="o">.</span><span class="n">Temperature</span> <span class="o">=</span> <span class="n">genai</span><span class="o">.</span><span class="n">Ptr</span><span class="p">(</span><span class="kt">float32</span><span class="p">(</span><span class="m">0.3</span><span class="p">))</span>
<span class="n">model</span><span class="o">.</span><span class="n">GenerationConfig</span><span class="o">.</span><span class="n">TopK</span> <span class="o">=</span> <span class="n">genai</span><span class="o">.</span><span class="n">Ptr</span><span class="p">(</span><span class="kt">int32</span><span class="p">(</span><span class="m">40</span><span class="p">))</span>
<span class="n">model</span><span class="o">.</span><span class="n">GenerationConfig</span><span class="o">.</span><span class="n">TopP</span> <span class="o">=</span> <span class="n">genai</span><span class="o">.</span><span class="n">Ptr</span><span class="p">(</span><span class="kt">float32</span><span class="p">(</span><span class="m">0.95</span><span class="p">))</span>
<span class="n">model</span><span class="o">.</span><span class="n">GenerationConfig</span><span class="o">.</span><span class="n">MaxOutputTokens</span> <span class="o">=</span> <span class="n">genai</span><span class="o">.</span><span class="n">Ptr</span><span class="p">(</span><span class="kt">int32</span><span class="p">(</span><span class="m">2048</span><span class="p">))</span>
</code></pre></div></div>

<p>Gemini-2.5 Flash-liteは軽量で高速、かつコスト効率が良いモデルです。記事の内容を分析して、適切なメタデータを生成してくれます。</p>

<h3 id="プロンプト設計">プロンプト設計</h3>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">prompt</span> <span class="o">:=</span> <span class="n">fmt</span><span class="o">.</span><span class="n">Sprintf</span><span class="p">(</span><span class="s">`Please analyze the following Japanese blog article and return a JSON response in the specified format:

%s

{
  "english_filename": "english_filename",
  "category": "category in Japanese",
  "tags": ["tag1", "tag2", "tag3"],
  "description": "SEO-friendly description under 160 chars for meta tag in Japanese"
}

Article:
%s

Available Categories: %s
Available Tags: %s

Rules: 
- Return ONLY the JSON object, no explanations or markdown formatting
- Use existing categories/tags when possible
- If existing metadata is provided, consider it but you can override if the content suggests better categorization
- English filename should be descriptive and use snake_case
- Category should be one of the available categories
- Tags should be a mix of available tags and content-specific tags (max 5 tags)
- Description should be SEO-friendly, concise, and under 160 characters for HTML meta description tag
JSON:`</span><span class="p">,</span> <span class="n">existingInfo</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">categoriesStr</span><span class="p">,</span> <span class="n">tagsStr</span><span class="p">)</span>
</code></pre></div></div>

<p>既存のカテゴリーとタグのデータベースを参照して、一貫性を保ちながら新しいメタデータを生成します。また、SEOに最適化された説明文も生成します。</p>

<h3 id="メタデータベースの活用">メタデータベースの活用</h3>

<p>構築されたメタデータベースには以下の情報が含まれています：</p>

<ul>
  <li><strong>カテゴリー</strong>: 既存の記事から抽出されたカテゴリーリスト</li>
  <li><strong>タグ</strong>: 既存の記事から抽出されたタグリスト</li>
  <li><strong>一貫性の保証</strong>: 既存のカテゴリーとタグを優先使用することで、ブログ全体の一貫性を維持</li>
</ul>

<p>このデータベースを参照することで、Gemini-2.5 Flash-liteは既存のブログの一貫性を保ちながら、適切なメタデータを生成できます。</p>

<h2 id="実装のポイント">実装のポイント</h2>

<h3 id="1-ファイル名の自動生成">1. ファイル名の自動生成</h3>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">// generateFilename はメタデータに基づいて新しいファイル名を生成します</span>
<span class="k">func</span> <span class="p">(</span><span class="n">c</span> <span class="o">*</span><span class="n">MarkdownClient</span><span class="p">)</span> <span class="n">generateFilename</span><span class="p">(</span><span class="n">originalFilename</span> <span class="kt">string</span><span class="p">,</span> <span class="n">metadata</span> <span class="o">*</span><span class="n">model</span><span class="o">.</span><span class="n">PostMetadata</span><span class="p">)</span> <span class="kt">string</span> <span class="p">{</span>
    <span class="c">// 元のファイルのディレクトリと拡張子を取得</span>
    <span class="n">dir</span> <span class="o">:=</span> <span class="n">filepath</span><span class="o">.</span><span class="n">Dir</span><span class="p">(</span><span class="n">originalFilename</span><span class="p">)</span>
    <span class="n">ext</span> <span class="o">:=</span> <span class="n">filepath</span><span class="o">.</span><span class="n">Ext</span><span class="p">(</span><span class="n">originalFilename</span><span class="p">)</span>

    <span class="c">// タイトルからファイル名に適した文字列を生成</span>
    <span class="n">title</span> <span class="o">:=</span> <span class="n">strings</span><span class="o">.</span><span class="n">TrimSpace</span><span class="p">(</span><span class="n">metadata</span><span class="o">.</span><span class="n">Title</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">title</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
        <span class="c">// タイトルが空の場合は元のファイル名を使用</span>
        <span class="k">return</span> <span class="n">originalFilename</span>
    <span class="p">}</span>

    <span class="c">// タイトルをファイル名に適した形式に変換</span>
    <span class="c">// スペースをハイフンに置換し、特殊文字を除去</span>
    <span class="n">titleForFilename</span> <span class="o">:=</span> <span class="n">strings</span><span class="o">.</span><span class="n">ToLower</span><span class="p">(</span><span class="n">title</span><span class="p">)</span>
    <span class="n">titleForFilename</span> <span class="o">=</span> <span class="n">strings</span><span class="o">.</span><span class="n">ReplaceAll</span><span class="p">(</span><span class="n">titleForFilename</span><span class="p">,</span> <span class="s">" "</span><span class="p">,</span> <span class="s">"-"</span><span class="p">)</span>
    <span class="n">titleForFilename</span> <span class="o">=</span> <span class="n">regexp</span><span class="o">.</span><span class="n">MustCompile</span><span class="p">(</span><span class="s">`[^a-z0-9\-]`</span><span class="p">)</span><span class="o">.</span><span class="n">ReplaceAllString</span><span class="p">(</span><span class="n">titleForFilename</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span>

    <span class="c">// 連続するハイフンを単一のハイフンに置換</span>
    <span class="n">titleForFilename</span> <span class="o">=</span> <span class="n">regexp</span><span class="o">.</span><span class="n">MustCompile</span><span class="p">(</span><span class="s">`-+`</span><span class="p">)</span><span class="o">.</span><span class="n">ReplaceAllString</span><span class="p">(</span><span class="n">titleForFilename</span><span class="p">,</span> <span class="s">"-"</span><span class="p">)</span>

    <span class="c">// 先頭と末尾のハイフンを除去</span>
    <span class="n">titleForFilename</span> <span class="o">=</span> <span class="n">strings</span><span class="o">.</span><span class="n">Trim</span><span class="p">(</span><span class="n">titleForFilename</span><span class="p">,</span> <span class="s">"-"</span><span class="p">)</span>

    <span class="c">// 新しいファイル名を生成</span>
    <span class="n">newFilename</span> <span class="o">:=</span> <span class="n">filepath</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span><span class="n">dir</span><span class="p">,</span> <span class="n">titleForFilename</span><span class="o">+</span><span class="n">ext</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">newFilename</span>
<span class="p">}</span>
</code></pre></div></div>

<h3 id="2-フロントマターの更新">2. フロントマターの更新</h3>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">// createFrontMatter はPostMetadataからYAMLのFrontMatterを作成します</span>
<span class="k">func</span> <span class="p">(</span><span class="n">c</span> <span class="o">*</span><span class="n">MarkdownClient</span><span class="p">)</span> <span class="n">createFrontMatter</span><span class="p">(</span><span class="n">metadata</span> <span class="o">*</span><span class="n">model</span><span class="o">.</span><span class="n">PostMetadata</span><span class="p">)</span> <span class="p">(</span><span class="kt">string</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span>
    <span class="c">// FrontMatter構造体を作成</span>
    <span class="n">frontMatter</span> <span class="o">:=</span> <span class="n">model</span><span class="o">.</span><span class="n">FrontMatter</span><span class="p">{</span>
        <span class="n">Title</span><span class="o">:</span>       <span class="n">metadata</span><span class="o">.</span><span class="n">Title</span><span class="p">,</span>
        <span class="n">Category</span><span class="o">:</span>    <span class="n">metadata</span><span class="o">.</span><span class="n">Category</span><span class="p">,</span>
        <span class="n">Tags</span><span class="o">:</span>        <span class="n">metadata</span><span class="o">.</span><span class="n">Tags</span><span class="p">,</span>
        <span class="n">Description</span><span class="o">:</span> <span class="n">metadata</span><span class="o">.</span><span class="n">Description</span><span class="p">,</span>
    <span class="p">}</span>

    <span class="c">// YAMLにマーシャル</span>
    <span class="n">yamlData</span><span class="p">,</span> <span class="n">err</span> <span class="o">:=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">Marshal</span><span class="p">(</span><span class="n">frontMatter</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">err</span> <span class="o">!=</span> <span class="no">nil</span> <span class="p">{</span>
        <span class="k">return</span> <span class="s">""</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">Errorf</span><span class="p">(</span><span class="s">"YAMLマーシャリングに失敗しました: %w"</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="k">return</span> <span class="kt">string</span><span class="p">(</span><span class="n">yamlData</span><span class="p">),</span> <span class="no">nil</span>
<span class="p">}</span>
</code></pre></div></div>

<p>システムは既存のタイトルを保持しながら、新しいカテゴリー、タグ、説明文を追加します。これにより、記事のタイトルは変更されず、メタデータのみが更新されます。</p>

<h3 id="3-エラーハンドリング">3. エラーハンドリング</h3>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">// セーフティフィルターやその他の制限が原因の可能性をチェック</span>
<span class="n">candidate</span> <span class="o">:=</span> <span class="n">resp</span><span class="o">.</span><span class="n">Candidates</span><span class="p">[</span><span class="m">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">candidate</span><span class="o">.</span><span class="n">FinishReason</span> <span class="o">==</span> <span class="n">genai</span><span class="o">.</span><span class="n">FinishReasonSafety</span> <span class="p">{</span>
    <span class="k">return</span> <span class="no">nil</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">Errorf</span><span class="p">(</span><span class="s">"%s レスポンスがセーフィフィルターによってブロックされました: %w"</span><span class="p">,</span> <span class="n">logPrefix</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
<span class="p">}</span>

<span class="n">text</span> <span class="o">:=</span> <span class="s">""</span>
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">part</span> <span class="o">:=</span> <span class="k">range</span> <span class="n">candidate</span><span class="o">.</span><span class="n">Content</span><span class="o">.</span><span class="n">Parts</span> <span class="p">{</span>
    <span class="k">if</span> <span class="n">textPart</span><span class="p">,</span> <span class="n">ok</span> <span class="o">:=</span> <span class="n">part</span><span class="o">.</span><span class="p">(</span><span class="n">genai</span><span class="o">.</span><span class="n">Text</span><span class="p">);</span> <span class="n">ok</span> <span class="p">{</span>
        <span class="n">text</span> <span class="o">+=</span> <span class="kt">string</span><span class="p">(</span><span class="n">textPart</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="k">if</span> <span class="n">text</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
    <span class="k">return</span> <span class="no">nil</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">Errorf</span><span class="p">(</span><span class="s">"%s レスポンステキストが空です, 終了理由: %v"</span><span class="p">,</span> <span class="n">logPrefix</span><span class="p">,</span> <span class="n">candidate</span><span class="o">.</span><span class="n">FinishReason</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Gemini APIの各種エラーケースに対応し、適切なエラーメッセージを返すようにしています。また、UTF-8の検証やJSONのクリーニングも行います。</p>

<h2 id="使用例">使用例</h2>

<h3 id="プルリクエストでの動作">プルリクエストでの動作</h3>

<ol>
  <li><code class="language-plaintext highlighter-rouge">2025-09-25-NewPost.md</code> というファイルを作成</li>
  <li>プルリクエストを作成</li>
  <li>GitHub Actionsが自動実行</li>
  <li>以下のような結果が生成されます：</li>
</ol>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"processed_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"original_file"</span><span class="p">:</span><span class="w"> </span><span class="s2">"_posts/2025/09/2025-09-25-NewPost.md"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"new_file"</span><span class="p">:</span><span class="w"> </span><span class="s2">"_posts/2025/09/blog-automation-with-gemini.md"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"category"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ブログ"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tags"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"Jekyll"</span><span class="p">,</span><span class="w"> </span><span class="s2">"GitHub Actions"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Gemini"</span><span class="p">,</span><span class="w"> </span><span class="s2">"自動化"</span><span class="p">,</span><span class="w"> </span><span class="s2">"備忘録"</span><span class="p">],</span><span class="w">
      </span><span class="nl">"updated"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"total_files"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="nl">"updated_files"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h3 id="プルリクエストコメント">プルリクエストコメント</h3>

<p>システムは自動的にプルリクエストにコメントを投稿し、処理結果を報告します：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## 🤖 自動メタデータ生成結果

### 📊 処理結果
- **処理ファイル数**: 1
- **更新ファイル数**: 1

### 📝 処理されたファイル
1. ✅ `_posts/2025/09/2025-09-25-NewPost.md` → `_posts/2025/09/blog-automation-with-gemini.md`
   - カテゴリ: ブログ
   - タグ: Jekyll, GitHub Actions, Gemini, 自動化, 備忘録

---
*このコメントは自動生成されました*
</code></pre></div></div>

<h2 id="メリット">メリット</h2>

<h3 id="1-作業効率の向上">1. 作業効率の向上</h3>

<ul>
  <li>手動でのメタデータ設定が不要</li>
  <li>一貫性のあるファイル名とタグ付け</li>
  <li>プルリクエストベースの自動化</li>
</ul>

<h3 id="2-品質の向上">2. 品質の向上</h3>

<ul>
  <li>AIによる適切なカテゴリー分類</li>
  <li>既存のタグデータベースとの整合性</li>
  <li>英語ファイル名によるSEO向上</li>
</ul>

<h3 id="3-コスト効率">3. コスト効率</h3>

<ul>
  <li>Gemini-2.5 Flash-liteの軽量モデル使用</li>
  <li>必要な時のみAPI呼び出し</li>
  <li>無料枠内での運用可能</li>
</ul>

<h2 id="今後の改善予定">今後の改善予定</h2>

<ol>
  <li><strong>アイキャッチ画像自動生成</strong>: nano bananaを使用した画像生成の統合</li>
</ol>

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

<p>Gemini-2.5 Flash-liteを使った自動化システムにより、ブログ記事のメタデータ管理が大幅に効率化されました。このシステムは1つのワークフローで構成されています：</p>

<h3 id="システムの特徴">システムの特徴</h3>

<ol>
  <li><strong>メタデータベースの活用</strong>: 既存記事から抽出したカテゴリーとタグを参照し、一貫性のあるデータベースを活用</li>
  <li><strong>AIによる自動生成</strong>: Gemini-2.5 Flash-liteが記事内容を分析し、適切なメタデータを生成</li>
  <li><strong>完全自動化</strong>: プルリクエストベースで、手動介入なしにメタデータを更新</li>
</ol>

<h3 id="効果">効果</h3>

<ul>
  <li><strong>作業効率の向上</strong>: 手動でのメタデータ設定が不要</li>
  <li><strong>品質の向上</strong>: AIによる適切なカテゴリー分類と一貫性のあるタグ付け</li>
  <li><strong>コスト効率</strong>: 軽量モデルの使用により、無料枠内での運用が可能</li>
</ul>]]></content><author><name>ぶっちゃん！</name></author><category term="ブログ" /><category term="GitHub Actions" /><category term="自動化" /><category term="メタデータ" /><category term="Gemini" /><category term="ブログ運営" /><summary type="html"><![CDATA[GitHub ActionsとGeminiでブログのファイル名、カテゴリー、タグ付けを自動化。作業効率化と一貫性維持の事例を紹介します。]]></summary></entry><entry><title type="html">Proxmoxで疎通断が発生するので調べたらtcp segment offloadが原因だった</title><link href="https://diary.jo3qma.com/posts/2025/09/22/NewPost_1pdi/" rel="alternate" type="text/html" title="Proxmoxで疎通断が発生するので調べたらtcp segment offloadが原因だった" /><published>2025-09-22T00:00:00+09:00</published><updated>2025-09-22T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/09/22/NewPost_1pdi</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/09/22/NewPost_1pdi/"><![CDATA[<h2 id="proxmoxのホストとvmに繋がらなくなる">ProxmoxのホストとVMに繋がらなくなる</h2>

<p>知り合いから古いNUC(NUC5i5RYH)を譲っていただき、Proxmoxをインストールして遊んでいました。</p>

<p>3日~7日ぐらい起動するとどうもVMどころかホスト機にも疎通できなくなる現象が発生していました。</p>

<h2 id="問題の概要">問題の概要</h2>

<h3 id="発生していた症状">発生していた症状</h3>

<ul>
  <li>疎通断の発生
    <ul>
      <li>3~7日ぐらいで不定</li>
      <li>OSがハングしていたわけではない</li>
      <li>ホスト機のネットワークサービスを再起動すると疎通できるようになる</li>
    </ul>
  </li>
</ul>

<h3 id="環境">環境</h3>

<ul>
  <li>Proxmox VE 8.4.6</li>
  <li>Intel NUC5i5RYH</li>
  <li>物理ネットワークアダプタ: Intel® Ethernet Connection I218-V</li>
</ul>

<h2 id="調査">調査</h2>

<p>最初は10年前のNUCなのでOSがハングしているのかなと思いましたが、別にそういうわけではなかったです。
コンソール接続を行ったところ、普通に操作ができました。</p>

<p>試しにホスト機のnetworking.serviceを再起動してみると疎通が取れるようになったので、ホスト機のネットワーク系の何かしらが原因というところまでわかりました。</p>

<p>ボケーっと<code class="language-plaintext highlighter-rouge">dmesg</code>叩いたら</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Detected Hardware Unit Hang
</code></pre></div></div>

<p>という出力がされていたので、適当にググったところ、<code class="language-plaintext highlighter-rouge">TCP Segmentation Offload</code>という機能が悪さしていそうだなというところまで判明しました。</p>

<h2 id="原因の特定">原因の特定</h2>

<h3 id="tcp-segment-offloadtsoとは">TCP Segment Offload（TSO）とは</h3>

<ul>
  <li>ネットワークカードがTCPセグメンテーションをハードウェアで処理する機能</li>
  <li>パフォーマンス向上が期待されるが、環境によっては問題を引き起こす</li>
</ul>

<h2 id="解決方法">解決方法</h2>

<h3 id="tsoの無効化">TSOの無効化</h3>

<p>TSOを無効化すればよいです。パフォーマンスは多少下がりますがハングアップするよりかはマシです。
どうせHome Assistantなど内向きのサービスしか立てない予定なので、パフォーマンスなんかどうでもいいというのもあります。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ethtool <span class="nt">-K</span> eth0 tso off
</code></pre></div></div>

<h3 id="永続的な設定">永続的な設定</h3>

<p>ethtoolだけでは設定の永続化ができないので、interfacesに直接書いてあげます。
post-upで起動ごとに無効化します。
もう少しいい感じの設定はないんだろうか。</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>root@euphoria:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

iface enp0s25 inet manual
        post-up /usr/sbin/ethtool -K enp0s25 tso off gso off gro off

auto vmbr0
iface vmbr0 inet static
        address 192.168.1.190/24
        gateway 192.168.1.1
        bridge-ports enp0s25
        bridge-stp off
        bridge-fd 0

iface wlp2s0 inet manual

source /etc/network/interfaces.d/*
root@euphoria:~#
</code></pre></div></div>

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

<p>2週間ほど放置してみましたが、問題なさそうなのでこれで運用することにします。
Proxmox基盤つくって思ったけど、メモリー無限にほしいな。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="自宅サーバー" /><category term="Proxmox" /><category term="トラブルシューティング" /><category term="ネットワーク" /><summary type="html"><![CDATA[ProxmoxのホストとVMに繋がらなくなる]]></summary></entry><entry><title type="html">ブログを復活させました。</title><link href="https://diary.jo3qma.com/posts/2025/08/08/blog_revival/" rel="alternate" type="text/html" title="ブログを復活させました。" /><published>2025-08-08T00:00:00+09:00</published><updated>2025-08-08T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/08/08/blog_revival</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/08/08/blog_revival/"><![CDATA[<h2 id="ブログを復活">ブログを復活</h2>

<p>ブログを復活というと、閉鎖してたのを元に戻したような意味合いに取られそうですが、
別に公開はしていたので見かけ上は何ら変わりません。</p>

<p>依存関係や環境上の問題でデプロイできなくなっていたのを修正したというだけの話です。</p>

<p>依存関係周りに関しては結構無理やりな解決方法を使っているので、そのうちいい感じに修正しなければなりません。</p>

<p>ブログを更新できないでいる間に、いろいろ書きたいことなどがありましたが、忘れてしまったので書きません。</p>

<p>ネスペに受かったり、万博の話をしたりとそんなところでしょうか。</p>

<p>今は、GitHub Actionsを使ってブログのCIをいい感じ™にしたいと思っています。</p>

<p>結構試行錯誤していますが、難しいですね。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="日記" /><category term="Jekyll" /><category term="日記" /><summary type="html"><![CDATA[ブログを復活]]></summary></entry><entry><title type="html">転職</title><link href="https://diary.jo3qma.com/posts/2025/06/25/change_job/" rel="alternate" type="text/html" title="転職" /><published>2025-06-25T00:00:00+09:00</published><updated>2025-06-25T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/06/25/change_job</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/06/25/change_job/"><![CDATA[<h2 id="転職した">転職した</h2>

<p>2025年6月末に前職を退職し、新しい職場へと移りました。</p>

<p>会社としての業種は変わりましたが、ITエンジニアという職種は変わっていません。<br />
引き続き、エンジニアリングに邁進していきたいと思っています。</p>

<p>Twitterでよく転がっている転職/退職エントリのように、うだうだと書き連ねるのは「ダセェな」と書いてる途中に思ったので詳細は書かないことにしました。<br />
自分自身、有名企業のテックリードのような「できた」エンジニアでもありませんし、<br />
ここで書ける内容というのはあくまで個人の主観が大部分を占めます。<br />
実際にどうだったか、客観的な視点で書けなさそうなので書くことはやめました。</p>

<p>自分のグダグダ転職に関して気になる人はVRChatで聞いて下さい。</p>

<p>今思い返せば、転職したいと思った根底にあるのは、前職には自分が目指したいと思える目標となる人が身近にいなかったことも大きかったかもしれません。<br />
いや、目標となる人がいないというのは嘘で、技術的に尊敬する方は確かにいました。<br />
が、自分と入れ替わりで別部署に異動したらしく会うことはありませんでした。</p>

<p>いずれにせよ、今回の転職で特に大切にしていた「自分がやりたいことができる」という点と、「ワークライフバランスの改善」という目標は、どうやら達成できそうで良かったなと感じています。</p>

<h3 id="資格">資格</h3>

<p>2024年は資格取得に力を入れていました。
それまで特に資格を持っていなかったので、多少の箔付けになれば、と考えたからです。</p>

<ul>
  <li>基本情報処理技術者</li>
  <li>応用情報技術者</li>
  <li>LPIC Lv1</li>
  <li>LPIC Lv2</li>
</ul>

<p>を取得しました。</p>

<p>実際に転職活動をしてみて感じたのは、LPICは無いよりはマシ、という程度で、AWS関連の資格の方がより重宝される気がする、ということです。<br />
また、インフラ系を目指すならネスペよりもCCNAが好まれる傾向もあると感じました。</p>

<p>シフトの合間を縫って勉強したり、受験したりして時間そのものがなかったり、<br />
ベンダー資格って高いので忌避していた部分があったので、これに関しては自分が一番悪いですが。</p>

<h3 id="その他">その他</h3>

<p>面接を受けてから、その結果が通知されるまでの期間は、一番メンタルに来る。<br />
仕事でなにかやらかした時以上に来るものがある。<br />
「殺すなら早く殺してくれ～」って気分。</p>

<p>特に、睡眠時間の調整が必要な夜勤の直前日に最終面接があった時は、結果が返ってくるまで、生きた心地がしませんでした。</p>

<h2 id="おわり">おわり</h2>

<p>これからもよろしくお願いいたします。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="日記" /><category term="転職" /><category term="仕事" /><summary type="html"><![CDATA[転職した]]></summary></entry><entry><title type="html">さくらのクラウド検定を受けました</title><link href="https://diary.jo3qma.com/posts/2025/04/10/sakura_certificate/" rel="alternate" type="text/html" title="さくらのクラウド検定を受けました" /><published>2025-04-10T00:00:00+09:00</published><updated>2025-04-10T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/04/10/sakura_certificate</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/04/10/sakura_certificate/"><![CDATA[<h2 id="さくらのクラウド検定">さくらのクラウド検定</h2>

<p>さくらのクラウドのベンダー?資格である「<a href="https://www.sakura.ad.jp/certification/">さくらのクラウド検定</a>」を3月15日に受験しました。<br />
聞いた話では、ガバメントクラウドの要件の1つとしてベンダー資格が必要らしいです。<br />
CCNAやネスペの勉強をしていたのですが、飽きてきたので味変として受験することにしました。</p>

<p>現在のところ、試験は年に2回程度しかやってないようです。<br />
次は9月にあるらしいです。絶妙にIPAの試験前なの渋い顔してしまう。</p>

<h2 id="勉強">勉強</h2>

<p>さくらのクラウド検定では公式から<a href="https://www.sakura.ad.jp/certification/#syllabus">シラバス</a>と<a href="https://zero2one.jp/product/sakuracloudcertificate/">オンライン教材</a>が無償で公開されていますので、それを元に勉強しました。</p>

<h3 id="試験範囲">試験範囲</h3>

<p>大きく分けて以下の3つです。まあシラバス見たほうがわかりやすい。</p>

<ul>
  <li>デジタル技術の基礎 (コンピュータやTCP/IP、クラウドや仮想化の基本)</li>
  <li>さくらインターネットのサービス</li>
  <li>さくらのクラウドでのアーキテクチャ設計 (さくらのクラウドの各種サービスや使い方、注意点など)</li>
</ul>

<p>デジタル技術の基礎はエンジニアならばすっ飛ばしても良さそうでした。</p>

<h3 id="教材">教材</h3>

<p>オンライン教材では動画とPDFが提供されます。PDFはダウンロードができますが、動画はダウンロードできなさそうでした。<br />
通勤時間などのスキマ時間に勉強したかったので地味に不便でした。</p>

<p>例問として各セクションに5問程度と最後に100問のまとめテストがあります。<br />
また、それとは別に<a href="https://x.com/sakura_crtfctn">公式Twitter@sakura_crtfctn</a>で毎週例問が投稿されています。</p>

<p>ただまあ合わせても300問程度で、勉強の理解度を定量的に図るのは微妙かなと感じたので、<br />
NotebookLM Plusにシラバスと教材、テストの問題と答えをインポートして、<br />
問題を作ってもらったり、ややこしい部分の説明などをしてもらいました。</p>

<p>NotebookLMはあらかじめ入力した資料を参考として回答を生成してくれ、出典元も明示してくれるため、
こういった試験対策や教材DBとして使うのはとても向いていそうです。</p>

<h2 id="試験">試験</h2>

<p>試験はオンラインで、自分のPCを使って行います。<br />
試験時間は60分、問題数は100問です。</p>

<p>35分程度ですべての問題を一通り解くことができ、残り25分程度で見直しを行いました。</p>

<p>すべての問題が4択か4択から複数選択なので、LPICよりも楽に問題を解くことが出来ました。<br />
なにより日本語の問題が出るのが一番楽・・・。</p>

<h2 id="試験結果">試験結果</h2>

<p>まあ、普通に合格です。 Ver.1.0なので相当優しめに作ってあった感じがする。<br />
上位資格とか出てくると怖いかも。</p>

<p><img src="/assets/img/2025/04/10/chrome_yF1xSP7Ds7.png" alt="さくらのクラウド検定 合格証書" /></p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">分野</th>
      <th style="text-align: center">得点率(%)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">1 デジタル技術の基礎</td>
      <td style="text-align: center">95</td>
    </tr>
    <tr>
      <td style="text-align: left">2 さくらインターネットのサービス</td>
      <td style="text-align: center">83</td>
    </tr>
    <tr>
      <td style="text-align: left">3.1 さくらのクラウドで実現するシステム構成設計</td>
      <td style="text-align: center">80</td>
    </tr>
    <tr>
      <td style="text-align: left">3.2 セキュリティの設計</td>
      <td style="text-align: center">100</td>
    </tr>
    <tr>
      <td style="text-align: left">3.3 可用性と拡張性の設計</td>
      <td style="text-align: center">100</td>
    </tr>
    <tr>
      <td style="text-align: left">3.4 コストパフォーマンスの設計</td>
      <td style="text-align: center">72</td>
    </tr>
  </tbody>
</table>

<h2 id="感想">感想</h2>

<p>「デジタル技術の基礎」はさくらのクラウド以外にも通用する基礎的なIT技術の説明だったので、<br />
IT業界へ行きたいような未経験の人にもおすすめできるものだと思いました。</p>

<p>オンプレ大好き人間なので、さくらのクラウドを始めとしたクラウドインフラというものを殆ど触ったことがないので、この検定を通してクラウドへの理解が進んだなと感じました。<br />
今後はさくらのクラウドやAWS、Google Cloudなどにも触れてみようと思います。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="日記" /><category term="資格" /><category term="さくらのクラウド" /><summary type="html"><![CDATA[さくらのクラウド検定]]></summary></entry><entry><title type="html">JANOG55に参加しました</title><link href="https://diary.jo3qma.com/posts/2025/02/26/JANOG55/" rel="alternate" type="text/html" title="JANOG55に参加しました" /><published>2025-02-26T00:00:00+09:00</published><updated>2025-02-26T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/02/26/JANOG55</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/02/26/JANOG55/"><![CDATA[<p>JANOG Meeting 55に参加しました。</p>

<h2 id="janog-meeting-55-とは">JANOG Meeting 55 とは</h2>

<p>JANOG Meetingは、<a href="https://www.janog.gr.jp/">日本ネットワーク・オペレーターズ・グループ(JANOG)</a>が主催するネットワークやサーバー、ITインフラストラクチャに関するミーティングです。<br />
夏冬の年2回、日本各地で開催されています。</p>

<p>今回の<a href="https://www.janog.gr.jp/meeting/janog55/">JANOG Meeting 55</a>は京都府のみやこめっせという場所で1月22日から24日の3日間開催されました。</p>

<h3 id="wakamonog-meeting-15">wakamonog meeting 15</h3>

<p>JANOG Meeting 55の前日、1月21日の17時から、0x20歳前後 (ふんわり) を対象とした勉強会「<a href="https://wakamonog.jp/">wakamonog meeting 15</a>」も開催されました。私もギリギリ対象年齢であったため、参加させていただきました。</p>

<p>そこでお話ししていただいたTLの内容もこの時期に一部入っています。</p>

<h3 id="参加動機">参加動機</h3>

<p>参加動機としては、最近のネットワークや運用に関するトレンドやノウハウを学ぶためという点が大きいです。</p>

<p>会社への参加交渉やレポート提出の手間を省くため、今回は個人参加という形を取りました。</p>

<p>(会場では職場の関係者と偶然会いましたが。)</p>

<h2 id="参加レポ">参加レポ</h2>

<p>JANOG Meetingでは、プログラムや協賛展示の他に、自由に発表・議論ができる「野良BoF」、ネットワークトラブルシューティングコンテスト「NETCON」といった企画も用意されていました。<br />
今回はリサーチ不足により、「野良 BoF」と「NETCON」への参加は見送りましたが、<br />
それ以外のプログラムは事前にリストアップしていたため、スムーズに各プログラムに参加できました。</p>

<h3 id="参加したプログラム">参加したプログラム</h3>

<ul>
  <li>【ハンズオン】 ネットワークエンジニアの一歩 -手を動かした先に視える世界-</li>
  <li>ネットワークオペレーター向けセキュリティアラート事例紹介</li>
  <li>ノリで造る！ネットワーク運用基盤開発</li>
  <li>分散か？集中か？-centralized vs distributed -</li>
  <li>いかにして我々は7/19の史上最大規模の障害から復旧したのか</li>
  <li>気になりますよねっ、IPv4アドレスの移転・売買・リースの実態 !!</li>
  <li>DNSのアノ現象、正しく説明できますか？</li>
  <li>警察と通信事業者の協力のホンネ #2</li>
  <li>おいでやすNOCはん！〜なんぎな故障もはんなり解決。その知見を集めて運用の新たな未来を紡ぐ〜</li>
</ul>

<p>オフレコプログラム以外のプログラムについては、資料が公開されていたり、後日アーカイブが公開されたりするようなので、そちらをご確認ください。</p>

<p>オフレコプログラムについても感想を書こうと思いましたが、オフレコ部分に言及せずに内容を伝えることが難しいため、割愛しました。感想を聞きたければVRChatか何かで私に聞いてください。</p>

<h3 id="トラブルシューティング関連">トラブルシューティング関連</h3>

<p>以下のプログラム関連です</p>

<ul>
  <li>【ハンズオン】 ネットワークエンジニアの一歩 -手を動かした先に視える世界-</li>
  <li>いかにして我々は7/19の史上最大規模の障害から復旧したのか</li>
  <li>トラブルシューティングのすゝめ (wakamonog)</li>
</ul>

<p>サービスの運用にはトラブルがつきもの。トラブルシューティング力を鍛えるための考え方や実際の事例を学びました。</p>

<p>通信やネットワークに起因しそうなトラブルの場合は、パケットの気持ちになって考えることが大切らしいです。</p>

<p>例:</p>

<ol>
  <li>機器の特定 (横方向の切り分け)</li>
  <li>機器内での原因の特定 (縦方向の切り分け)
  OSI参照モデルを頭に描き、パケットの処理される過程などを考えてみる。</li>
</ol>

<p>また、トラブルシューティングの際の考え方はNETCONなどが良い教材になるというお話もありました。<br />
NETCONスタッフが実際にはまった事例をもとにして作られた問題が多いため、実務にそのまま応用できることが多いそうです。</p>

<p>メーカードキュメントを参照することも意外と役立つことが多かったりするそうです。
理由としては</p>

<ul>
  <li>設定例以外にも充実した説明やコマンド例などがたくさん載っている。</li>
  <li>内部構造を知ることでハードウェア処理をトレースでき、実挙動を理解できる。
などがあるそうです。</li>
</ul>

<p>また、障害対応は1人の個人技ではなく複数人でとりかかるべきものなので、状況を説明できるようになっておくべきです。</p>

<p>以下のような5Wを意識して具体的に何が起きているかを説明できるように情報整理をするとよいらしいです。</p>

<ul>
  <li>いつ</li>
  <li>どの範囲で</li>
  <li>どのサービスが</li>
  <li>どういう事象が</li>
  <li>どのようなロジックで</li>
</ul>

<h3 id="運用関連">運用関連</h3>

<ul>
  <li>ノリで造る！ネットワーク運用基盤開発</li>
</ul>

<p>NW運用の自動化、とりわけアラート対応の自動化ツールを開発した話でした。<br />
NW構築/運用を主業務としたチームが開発したため、苦労や工夫点のお話もあり、参考になりました。<br />
特に、マイクロサービスアーキテクチャでの開発は1つ1つのサービスの開発負荷を抑えることができ、開発を専門としないチームにとっては有効な手法だと感じました。</p>

<p>運用に関するツールというものを運用チームが作成するというのは、小回りが利いたり、実運用に即したものを作れるというメリットがある一方、<br />
運用チーム全員が開発できるわけではなく、人材のスキルに依存するという点やメイン業務ではないのでまとまった開発の時間が取れないという点が課題として浮き彫りになりました。</p>

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

<p>多くのプログラムで話を聞き、参加者とも交流しました。<br />
案外古い技術が使われ続けていたり、技術的負債を抱えながらも現場が改善に取り組んでいることを肌で感じました。</p>

<p>今回はプログラム中心の参加でしたが、次に参加するときはは野良BoFやNETCONにも参加してみたいと思います。</p>

<p>次回のJANOG Meeting 56は島根県松江市で開催されるそうです。<br />
個人で参加するには少し遠いので、会社と交渉してみるかもしれません。ダメならストリーミング参加かな？</p>]]></content><author><name>ぶっちゃん！</name></author><category term="インフラ" /><category term="イベント" /><category term="ネットワーク" /><category term="インフラ" /><category term="日記" /><category term="備忘録" /><summary type="html"><![CDATA[JANOG Meeting 55に参加しました。]]></summary></entry><entry><title type="html">LPIC-2に合格した</title><link href="https://diary.jo3qma.com/posts/2025/02/22/LPIC202/" rel="alternate" type="text/html" title="LPIC-2に合格した" /><published>2025-02-22T00:00:00+09:00</published><updated>2025-02-22T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/02/22/LPIC202</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/02/22/LPIC202/"><![CDATA[<h2 id="lpic-lv2">LPIC Lv2</h2>

<p><a href="https://www.lpi.org/ja/our-certifications/lpic-1-overview/">Linux Professional Institute Cetification</a>、
通称LPICのLv2の資格を取得するための試験の1つ、LPIC 202を受験しました。</p>

<p>LPIC 202では</p>

<ul>
  <li>DNS</li>
  <li>Apache, Squid, Nginx</li>
  <li>Samba, NFS</li>
  <li>DHCP, PAM, LDAP</li>
  <li>Postfix, Dovecot</li>
  <li>iptables, OpenVPN</li>
</ul>

<p>などの知識を問われました。</p>

<p>試験料は19,800円でLPIC201と同じでした。相変わらず高いとは思いますが、ベンダー資格よりかはマシか・・・。</p>

<h2 id="勉強">勉強</h2>

<p>LPIC Lv1の時と同じく<a href="https://mondai.ping-t.com/">Ping-t</a>というサイトの最強WB問題集をひたすら解くという勉強スタイルにしました。</p>

<p>実際に操作するなんてことは仕事で行っているので、不足している知識を補うと行った感じですね。</p>

<p>なんやかんや年末年始いそがしかったので、3ヶ月ぐらいダラダラ勉強していました。応用情報合格して浮かれていた。<br />
シフト勤務で試験日の確保ができなかったという理由もある。</p>

<div class="amazon-associate-body">
  <div class="amzn_header">
    <span class="amzn_title"></span>
    <span class="amzn_about"><a href="/about_amzn.html" target="_blank" rel="nofollow">この項目について</a></span>
  </div>
  <div class="amzn_content">
    <div class="amzn_product_img">
      <a href="https://www.amazon.co.jp/dp/4798151254?tag=diary.jo3qma.com-22&amp;linkCode=ogi&amp;th=1&amp;psc=1" target="_blank" rel="nofollow"><img class="disable-ps" src="https://image.booklog.jp/WWVNL1M5ZGJaMTJQOUVHS1lxTW9DUT09.jpg" /></a>
    </div>
    <div class="amzn_product_info">
      <ul>
        <li class="amzn_title">LPICレベル2 Version4.5対応 (Linux教科書)<a href="" target="_blank" rel="nofollow"></a></li>
        <li class="amzn_author">中島能和</li>
        <li class="amzn_manufacturer">翔泳社</li>
        <li class="amzn_release">2017-05-11</li>
        <li class="amzn_btn"><a href="https://www.amazon.co.jp/dp/4798151254?tag=diary.jo3qma.com-22&amp;linkCode=ogi&amp;th=1&amp;psc=1" target="_blank" rel="nofollow">Amazonで見る</a></li>
      </ul>
    </div>
  </div>
</div>

<h2 id="結果">結果</h2>

<p>以下の感じでした。</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">試験</th>
      <th style="text-align: right">202</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">ステータス</td>
      <td style="text-align: right">承認</td>
    </tr>
    <tr>
      <td style="text-align: left">グレード</td>
      <td style="text-align: right">pass</td>
    </tr>
    <tr>
      <td style="text-align: left">合格スコア</td>
      <td style="text-align: right">500</td>
    </tr>
    <tr>
      <td style="text-align: left">試験スコア</td>
      <td style="text-align: right">550</td>
    </tr>
    <tr>
      <td style="text-align: left">正解数</td>
      <td style="text-align: right">44</td>
    </tr>
    <tr>
      <td style="text-align: left">不正解数</td>
      <td style="text-align: right">16</td>
    </tr>
    <tr>
      <td style="text-align: left">未回答数</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td style="text-align: left">採点不可数</td>
      <td style="text-align: right">0</td>
    </tr>
  </tbody>
</table>

<p>正答率73%で、想定より低くボーダーギリギリでした。危ない危ない。</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">テストセクションの情報</th>
      <th style="text-align: right">正解率</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">Domain Name Server</td>
      <td style="text-align: right">75%</td>
    </tr>
    <tr>
      <td style="text-align: left">HTTP Services</td>
      <td style="text-align: right">81%</td>
    </tr>
    <tr>
      <td style="text-align: left">File Sharing</td>
      <td style="text-align: right">87%</td>
    </tr>
    <tr>
      <td style="text-align: left">Network Client Management</td>
      <td style="text-align: right">54%</td>
    </tr>
    <tr>
      <td style="text-align: left">E-Mail Services</td>
      <td style="text-align: right">62%</td>
    </tr>
    <tr>
      <td style="text-align: left">System Security</td>
      <td style="text-align: right">78%</td>
    </tr>
  </tbody>
</table>

<p>DNSやHTTP Servicesは仕事で使いまくってるので、余裕ですね。<br />
Network Client Managementはまあ殆ど使わないので低くなってしまいました。(設問数もほぼなかったので変な問題を引いた気もする)<br />
E-Mail関連は仕事で使っているのに低いのは恥じなければなりません・・・。</p>

<p><img src="/assets/img/2025/02/22/chrome_UzYVLwYIcN.png" alt="LPIC Lv2" />
なにはともあれ、LPIC 201, 202両方とも合格しましたので、LPIC-2を手に入れました。</p>

<h2 id="おわり">おわり</h2>

<p>LPIC Lv2取得できたので、LPICのお勉強はしばらくおやすみします。LPIC Lv3って改定入って情報が殆ど無いのでね・・・。<br />
とりあえずネットワークスペシャリストに申し込んだので、その勉強をがんばることにします。</p>]]></content><author><name>ぶっちゃん！</name></author><category term="日記" /><category term="LPIC" /><category term="資格" /><summary type="html"><![CDATA[LPIC Lv2]]></summary></entry><entry><title type="html">IX2215のファームウェアをUSBメモリーでアップデートする</title><link href="https://diary.jo3qma.com/posts/2025/01/11/IX2215_USB_Update/" rel="alternate" type="text/html" title="IX2215のファームウェアをUSBメモリーでアップデートする" /><published>2025-01-11T00:00:00+09:00</published><updated>2025-01-11T00:00:00+09:00</updated><id>https://diary.jo3qma.com/posts/2025/01/11/IX2215_USB_Update</id><content type="html" xml:base="https://diary.jo3qma.com/posts/2025/01/11/IX2215_USB_Update/"><![CDATA[<h2 id="ファームウェアアップデートをしたい">ファームウェアアップデートをしたい</h2>

<p>完全に自分用メモです。<br /></p>

<p>手持ちのIX2215はファームが古く9系です。<br />
最近の10系にしかない機能などもありアップデートをしたほうがいいです。セキュリティパッチも入っているので。<br />
10系のあるバージョンからはNetMeisterというWeb管理ツールが使えるため、ファームウェアアップデートがWebから遠隔で行えるのですが、9系にはその機能がないため、ローカルでアップデートしなければなりません。</p>

<h2 id="やる">やる</h2>

<h3 id="バージョン確認">バージョン確認</h3>

<p>ファームウェアが<code class="language-plaintext highlighter-rouge">Version 9.2.20</code>で古い。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Router# show version
NEC Portable Internetwork Core Operating System Software
IX Series IX2215 (magellan-sec) Software, Version 9.2.20, RELEASE SOFTWARE
Compiled Aug 19-Wed-2015 15:50:31 JST #2 by sw-build, coregen-9.2(20)

ROM: System Bootstrap, Version 8.1
System Diagnostic, Version 8.1
Initialization Program, Version 8.1

System uptime is 15 minutes
System woke up by reload, caused by command execution
System started at Jan 09-Thu-2025 13:04:34 JST
System image file is "ix2215-ms-9.2.20.ldc"

Processor board ID &lt;0&gt;
IX2215 (P1010E) processor with 262144K bytes of memory.
3 GigaEthernet/IEEE 802.3 interfaces
1 ISDN Basic Rate interface
1 USB interface
1024K bytes of non-volatile configuration memory.
32768K bytes of processor board System flash (Read/Write)

Current configuration is based on "startup-configuration"
Router#
</code></pre></div></div>

<h3 id="ファームウェアダウンロード">ファームウェアダウンロード</h3>

<p>IXシリーズは去年から書類を書かずともWebでファームウェアをダウンロードできる様になりました。
[プログラムファイル・ダウンロード : UNIVERGE IXシリーズ | NEC](https://jpn.nec.com/univerge/ix/Download/)</p>

<p>特にこだわりがない限り、最新のファームウェアをダウンロードしましょう。
今回は<code class="language-plaintext highlighter-rouge">ix2215-boot-25.1-gate-ms-10.10.27.rap</code>でした。</p>

<h3 id="usbメモリーに入れる">USBメモリーに入れる</h3>

<p>そのへんに転がっているUSBメモリーをFAT32でフォーマットして、ファームウェアをコピーするだけでよいです。</p>

<h3 id="ix2215でアップデート">IX2215でアップデート</h3>

<p>USBを使えるようにします。<code class="language-plaintext highlighter-rouge">usbmem enable</code>をしないとUSBメモリーを認識してくれません(1敗)</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>conf t
device USB0
  no shutdown
exit
usbmem enable
</code></pre></div></div>

<p>USBメモリーを認識してくれたので、</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Router(config)# show usbmem
USB Mass Storage Device (usbmem0)
total 15562964992 bytes
      11108352 bytes used
      15551856640 bytes free
Router(config)#
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">software-update usbmem0:/[filename]</code>でファームウェアを指定し、アップデート。<br />
とりあえず<code class="language-plaintext highlighter-rouge">reload</code>して再起動しておきます。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Router(config)# software-update usbmem0:/ix2215-boot-25.1-gate-ms-10.10.27.rap
% Reading ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. done
% Check ...... done
% Update file name is ix2215-ms-10.10.27.ldc
% Writing ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. done
% Software update completed.
Router(config)# reload
% Warning: USB memory device is not ejected yet.
% Warning: current running-configuration is not saved yet.
Notice: The router will be RELOADED. This is to ensure that
        the peripheral devices are properly initialized.
Are you sure you want to reload the router? (Yes or [No]): Yes


NEC Bootstrap Software
Copyright (c) NEC Corporation 2001-2024. All rights reserved.

%BOOT-INFO: Trying flash load, exec-image [ix2215-ms-10.10.27.ldc].
Loading: ################################################################################################################################################ [OK]


Starting at 0x20000

Loading configuration file: startup-configuration.
Configuring router subsystems (before IDB proc): done.
Constructing IDB(Interface Database): done.
Configuring router subsystems (after IDB proc): done.
Initializing router subsystems: done.
Starting router subsystems: done.

All router subsystems coming up.


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

WARNING! Administrative username is not configured!!
         Action: Please configure administrative username.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


NEC Portable Internetwork Core Operating System Software
Copyright Notices:
Copyright (c) NEC Corporation 2001-2024. All rights reserved.
Copyright (c) 1985-1998 OpenROUTE Networks, Inc.
Copyright (c) 1984-1987, 1989 J. Noel Chiappa.
Router#
</code></pre></div></div>

<h3 id="バージョン確認-1">バージョン確認</h3>

<p>ちゃんと<code class="language-plaintext highlighter-rouge">Version 10.10.27</code>になってるのでOK。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Router(config)# show version
NEC Portable Internetwork Core Operating System Software
IX Series IX2215 (magellan-sec) Software, Version 10.10.27, RELEASE SOFTWARE
Compiled Nov 20-Wed-2024 08:59:34 JST #2 by sw-build, coregen-10.10(27)

ROM: System Bootstrap, Version 25.1
System Diagnostic, Version 25.1
Initialization Program, Version 8.1

System uptime is 12 hours 1 minute
System woke up by reload, caused by command execution
System started at Jan 09-Thu-2025 22:39:48 JST
System image file is "ix2215-ms-10.10.27.ldc"

Processor board ID &lt;0&gt;
IX2215 (P1010E) processor with 262144K bytes of memory.
3 GigaEthernet/IEEE 802.3 interfaces
1 ISDN Basic Rate interface
1 USB interface
1024K bytes of non-volatile configuration memory.
32768K bytes of processor board System flash (Read/Write)

Current configuration is based on "startup-configuration"
Router(config)#
</code></pre></div></div>]]></content><author><name>ぶっちゃん！</name></author><category term="自宅サーバー" /><category term="IX2215" /><category term="自宅サーバー" /><summary type="html"><![CDATA[ファームウェアアップデートをしたい]]></summary></entry></feed>