AIと開発を象徴するイメージ

AI「学習」という用語に騙されないでください

サービス開発をしている同僚たちと話をしていると、AI導入について漠然とした負担感を感じているケースをよく見かけます。その負担感の根源を掘り下げると、大抵は**「学習(Training)」** という用語が生む誤解に起因しています。 「モデルをサービスに組み込むと、ユーザーデータを取り込んでリアルタイムで学習して賢くなるんですか?」 「じゃあ、その学習プロセスを私たちがコントロールできますか?変なことを学んだらどうしますか?」 もしこのような悩みをお持ちでしたら、少し心配を置いても大丈夫です。今日はその誤解を開発者の言葉で解説します。 「学習」はビルドタイム、「推論」はランタイム 最初に正すべきことは、** 私たちがサービスにデプロイするAIモデルは、ほとんどの場合「凍結された(Frozen)」状態である** という点です。 開発用語で例えると次のようになります。 概念 AI用語 開発用語の比喩 説明 モデルを作る 学習(Training) ビルドタイム(Build Time) 膨大なリソースと時間が必要 モデルを使う 推論(Inference) ランタイム(Runtime) リクエストを受けて結果を返す 私たちがサービスを運用するとき、実行中のバイナリコードが自らコードを修正して進化することはありません。AIも同様です。 モデルはデプロイされた瞬間、もはや「学ぶ学生」ではなく、「指示通りに働く労働者」 になります。私たちが心配すべき領域は学習ではなく、この労働者がうまく仕事ができるよう環境を整えることです。 図書館の比喩でAI構造を理解する では、最新情報はどのように反映され、AIはどのような役割を果たすのでしょうか?私はこの構造を**「図書館」** に例えることがよくあります。 構成要素 図書館の比喩 説明 AIモデル(LLM) 司書 言語能力と推論能力を持つ存在 RAG / DB 書庫 サービスデータと最新情報が保存される空間 プロンプト 業務指示書 司書に仕事を任せるときに渡すガイドライン サービス開発者である私たちが毎日やっていることは、「図書館に新刊を補充すること(DBアップデート)」 です。司書(AI)は私たちが補充した本を必要なときに取り出し(Retrieve)、内容を読んで組み合わせてユーザーに提供する(Inference)だけです。 多くの方が恐れている**「学習(Fine-tuning)」** は、「司書を大学院に送って再教育すること」 に相当します。司書が基本的な読解力が不足している場合や、一般的な常識では理解できない特殊なドメインを扱う必要がある場合にのみ必要なエッジケースです。 ほとんどのビジネス問題は、司書を再教育(学習)させることではなく、以下の3つで解決できます: 優秀な司書を採用する - 良いベースモデルを選択 良い業務マニュアル - よく設計されたプロンプト 整理された書庫 - 構造化されたRAG/DB AIは「意味処理アクセラレータ」である このように構造を把握すると、AIはもはや恐ろしい未知の存在ではありません。単に私たちのシステムアーキテクチャに組み込むべき一つの**「部品」** に過ぎません。 コンピュータの歴史は「処理の高速化」でした。 ハードウェア 高速化対象 CPU 計算とロジック(if-else)処理 GPU グラフィックスとピクセル処理 AI(LLM) 意味(Semantics)と文脈(Context)処理 私たちはこれまでif (text.contains("りんご"))のようなコードで人間の言語を機械的に処理するのに苦労してきました。今では、その「意味処理」を専門に担当する高性能アクセラレータ(AI)が登場したのです。 ...

2025年12月5日 · 1 分 ·  rkttu
ブログ執筆のためのノートパソコンとコーヒー

/dev/write: AIと一緒に技術ブログを運営する

技術ブログを運営する上で最大の悩みは「どうすれば継続的に質の高い記事を書けるか」です。多言語でコンテンツを提供したいなら、翻訳まで気にしなければならないので、負担が倍増しますよね。 /dev/writeはこうした悩みから生まれました。Hugo静的サイトジェネレーターにGitHub Copilotを組み合わせて、** 執筆に集中できる環境** を作ってみました。 なぜまたブログシステムなのか? 正直に言えば、既存のブログプラットフォームも十分優れています。Medium、Qiita、Zenn、どれも素晴らしい選択肢です。でも、いくつか物足りない点がありました。 まず、** 多言語対応** です。韓国語で書いた記事を英語と日本語でも提供したかったのですが、ほとんどのプラットフォームでは別アカウントや複雑な設定が必要でした。 次に、** AI学習データとして使用されることへの懸念** です。一生懸命書いた記事が同意なくAIモデルの学習に使われるのは、あまり気持ちの良いものではありませんよね。 そして、** 自動化されたワークフロー** です。記事を書いて、レビューして、翻訳して、公開するプロセスをできるだけ自動化したかったのです。 そこで、Hugo + PaperModテーマをベースに、この3つを解決するシステムを自作しました。 GitHub Copilotと一緒に執筆する /dev/writeで最も面白い部分は、GitHub Copilotを執筆ツールとして活用する方法です。VS Codeで/コマンドを入力すると、様々なプロンプトを呼び出せます。 /create-draft Dockerコンテナネットワーキングについて書いて こんな風にトピックだけ投げてもいいですし、もっと具体的にアウトラインを提供することもできます。 /create-draft - トピック:Kubernetes入門 - 内容:Pod、Service、Deploymentの概念 - 対象読者:Dockerを知っている開発者 既存のREADMEやドキュメントがあれば、それをベースにチュートリアルを作ってもらうこともできます。 /create-draft このREADMEファイルを基にチュートリアル投稿を作って #file:README.md AIが全部書くわけじゃない もちろん、AIに最初から最後まで任せることだけが答えではありません。むしろ** 自分でまず下書きを書いて、AIに肉付けしてもらう方式** の方が良い結果を出すことが多いです。 例えば、以前別のブログで書いた記事を持ってきて技術ブログスタイルで書き直したい場合: /complete-manual-post この投稿を技術ブログスタイルで書き直して #file:my-old-post.md 自分で書いた下書きがあれば、コード例を追加したり説明を補強してもらうこともできます。 私が書いたこの下書きを基に、内容をより豊かにしてください。 コード例を追加し、説明をより詳しくしてください。 #file:2025-12-05-my-draft.md 個人的な経験や意見が重要な記事、技術的な正確性を自分で検証したい記事は、このアプローチの方がはるかに効果的です。AIはあくまで助手であり、最終判断は人間がするものですから。 1つ書けば3つできる /dev/writeのもう一つの特徴は** 自動翻訳** です。韓国語で記事を書くと、英語と日本語バージョンが自動的に生成されます。 もちろん機械翻訳には限界があります。でも、最初から3言語で書くよりはずっとマシですよね。翻訳結果をレビューして、必要な部分だけ修正すればいいのです。 翻訳過程で一貫性を維持するために、いくつかのルールがあります。 slug、translationKey、dateなどのメタデータはすべての言語で同一に維持 タイトル、タグ、要約、本文は各言語に翻訳 コードブロックは翻訳しない(当然ですよね!) 英語はAmerican Englishで、日本語はです/ます体で作成されます。技術用語は原語を維持するか、括弧で併記します。 翻訳が終わったら、検証スクリプトで3言語バージョンがちゃんと揃っているか確認します。 .\scripts\validate-translations.ps1 技術ドキュメントの正確性検証 技術ブログで最も重要なのは** 正確性** です。特にAzureや.NETなどMicrosoft技術を扱う時は、公式ドキュメントと一致するか確認するのが必須ですよね。 /dev/writeは** MS Learn MCPサーバー** を通じてこのプロセスを自動化しました。mcp.jsonファイルにMCPサーバーを登録して使用するように設定しています。 ...

2025年12月5日 · 1 分 ·  rkttu
サーバー仮想化環境のイメージ

Windows 10/11 ProでHyper-V第2世代VMからUbuntuを起動する方法

はじめに Windows Proには標準でHyper-Vが含まれています。別途仮想化ソフトウェアをインストールしなくても、OS内で直接仮想マシンを作成・管理できます。この記事では、Hyper-Vの第2世代(Generation 2)仮想マシンを使用してUbuntuを起動する方法をご紹介します。 まず、管理者権限でPowerShellを開き、次のコマンドを入力してHyper-V機能を有効にします。 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All インストールが完了したら、システムを再起動してください。 次に「Hyper-Vマネージャー」を起動し、新しい仮想マシンを作成します。世代は必ず「第2世代(Generation 2)」を選択し、メモリは4GB以上、ディスクは20GB以上を指定してください。 ネットワークアダプターは「既定のスイッチ(Default Switch)」を選択すれば、追加設定なしですぐにインターネット接続が可能です。 次に、Ubuntu公式サイトからISOイメージをダウンロードし、仮想マシンのDVDドライブ→「イメージファイル」に接続します。ファームウェア設定でDVDドライブを起動順序の一番上に移動させれば、ISOから直接起動できます。 重要なポイント ここまでは一般的な手順です。しかし、実際にUbuntuをインストールしようとすると、「No bootable device」や「Start boot option」などのエラーが発生し、起動できないことがよくあります。 その理由は簡単です。Hyper-Vの第2世代VMは、デフォルトでWindows専用のUEFIセキュアブートテンプレートを使用しているからです。 この問題を解決するには、仮想マシンを作成した後、必ず「設定→セキュリティ」に移動してください。 ここで**「セキュアブートを有効にする(Enable Secure Boot)」** にチェックを入れ、下の「テンプレート」オプションを**「Microsoft UEFI証明機関(Microsoft UEFI Certificate Authority)」** に変更してください。 この設定が正しく行われていないと、Ubuntuのブートローダーが署名されていないイメージとして認識され、UEFIによって起動がブロックされます。 つまり、ISOファイルやディスク構成をいくら作り直しても、この設定がなければUbuntuは絶対に起動しません。 上記の手順を完了すると、Ubuntuのインストール画面が正常に表示され、案内に従ってインストールを進めることができます。 Ubuntu 20.04以降のバージョンには、Hyper-V統合サービスがデフォルトで含まれているため、追加のドライバーをインストールしなくても、クリップボード共有、画面解像度の自動調整、時刻同期などの機能がすぐに動作します。 結論として、Hyper-V第2世代VMでUbuntuを起動するには、「セキュアブートテンプレート」を必ずMicrosoft UEFI証明機関に設定する必要があります。 この1つの設定さえ忘れなければ、Windows Pro環境でも安定してUbuntuを実行し、開発環境を構築することができます。

2025年10月23日 · 1 分 ·  rkttu