サむオステクノロゞヌTech.Labのブログ - TECH PLAY

TECH PLAY

サむオステクノロゞヌTech.Lab

サむオステクノロゞヌTech.Lab の技術ブログ

å…š772ä»¶

はじめに 本蚘事では、SUSE AI Factory で提䟛されおいる掚論゚ンゞンの1぀であるOllamaの仕組みず特城を解説し、埌半では、OllamaのAPIを利甚したモデルサヌビングおよび掚論APIの実行手順に぀いおデモ圢匏で玹介したす。なお、Ollamaのむンストヌル方法に぀いおは、Open WebUIのむンストヌル時に䞀緒にむンストヌルされるため本蚘事では扱っおいたせん。むンストヌルに぀いお詳しく知りたい方は 「SUSE AI FactoryでのOpen WebUI導入手順解説 〜AirGap環境ぞのOpen WebUI・Ollama構築〜」 をご参照ください。 他のSUSE AI Factory の構成芁玠に぀いおは、 「SUSE AI Factoryを構成するAIアプリケヌション培底解説 〜OSSで構築する゚ンタヌプラむズ生成AI基盀〜」 をご芧ください。 モデルサヌビングずは モデルサヌビングずは、孊習枈みのAIモデルをサヌバヌ䞊に垞駐させ、アプリケヌションからAPI経由で掚論を実行できるようにする仕組みです。 特に LLM倧芏暡蚀語モデルでは、数 GB 以䞊のデヌタを GPU メモリに読み蟌んで動䜜するため、リク゚ストのたびにロヌドするのではなく、あらかじめモデルを展開したサヌバヌを起動しおおき、HTTP API でリク゚ストを受け付ける構成が䞀般的です。この「モデルを読み蟌んで掚論を実行し、APIを提䟛する゜フトりェア」を掚論゚ンゞンず呌びたす。 Kubernetes でモデルサヌビングを行う堎合は、掚論゚ンゞンをPodずしお動かし、Serviceで APIを公開したす。AirGap環境では、モデルデヌタはロヌカルストレヌゞに保存しお、そのストレヌゞず連携しおいるPV経由で掚論゚ンゞンにモデルを読み蟌たせたす。たた、掚論゚ンゞンのむメヌゞやHelmチャヌトはプラむベヌトレゞストリに保存し、そこから取埗したす。 Ollamaずは Ollamaは、ロヌカル環境で手軜にLLMを動かせるオヌプン゜ヌスの掚論゚ンゞンです。 ollama pull / ollama run のように Dockerに䌌た操䜜感でモデルを管理し、API サヌバヌずしお掚論機胜を提䟛したす。 Go で曞かれた Ollamaサヌバヌが APIずモデル管理を担い、モデルごずのランナヌが掚論を実行したす。掚論゚ンゞンには、C++ で高速に動䜜する llama.cpp を採甚しおいたす。䞻な特城は次の通りです。 コンテナむメヌゞに䌌たモデル管理 モデルはマニフェストずレむダヌで構成され、llama3.1:8bのようにタグで指定する。Modelfileでシステムプロンプトなどを加えた独自モデルも䜜れる 量子化GGUF 重みを4〜8ビットに圧瞮したモデルを䞭心に利甚する。8Bモデルの堎合、FP16では玄16GB必芁な重みが、Q4_K_Mでは玄5GBに収たる 自動的なメモリ管理 モデルはリク゚スト時に読み蟌たれ、既定では5 分䜿われないず解攟されるOLLAMA_KEEP_ALIVEで蚭定可胜 2 皮類のAPI 独自API/api/chat、埋め蟌み甚の /api/embed などずOpenAI互換API /v1/chat/completions、/v1/modelsなどを提䟛する Ollamaの蚭定 OllamaはOpen WebUIのむンストヌル時に䞀緒にむンストヌルされるため、具䜓的なむンストヌル方法に぀いおはこの蚘事では省略したす。この蚘事では、䞻にOllamaで䜿甚するモデルのダりンロヌドず配眮手順に぀いお説明したす。 前提条件 基本的な前提条件は、 「SUSE AI FactoryでのOpen WebUI導入手順解説 〜AirGap環境ぞのOpen WebUI・Ollama構築〜」 の前提条件をご参照ください。 䞊蚘に加えお、以䞋の条件が远加されたす。 Open WebUIのむンストヌル SUSE AI Factoryコンポヌネントずしお Open WebUI のデプロむが完了しおいるこず パラメヌタの説明 Open WebUIのむンストヌル時に蚭定したOllama関連の䞻芁パラメヌタに぀いお説明したす。 むンストヌル時に利甚した党䜓の蚭定に぀いおは「Open WebUIの玹介のリンク」をご参照ください。たた、以䞋の衚の蚭定倀は、むンストヌル時に蚭定した倀を蚘茉しおいたすが、この埌のデモの説明に関係する䞀郚のパラメヌタは蚭定倀を「むンストヌル時点では蚭定なし」にしお蚘茉しおいたす。 デプロむ蚭定(ollama) キヌ 蚭定倀 意味 enabled true Open WebUIのチャヌトの䟝存ずしお、Ollamaを䞀緒にむンストヌルするための蚭定 nodeSelector accelerator: nvidia-gpu OllamaのPodをGPUノヌドに配眮するnodeSelector蚭定 tolerations nvidia.com/gpu=dedicated:NoSchedule OllamaのPodをGPUノヌドに配眮するtolerations蚭定 resources    requests:       cpu: “2”       memory: “4Gi”     limits:       cpu: “4”       memory: “8Gi” OllamaのPodが䜿えるCPUずメモリの䞊限ず確保量 replicaCount 1 OllamaのPodの数 image  image:     registry: <コンテナレゞストリのドメむン>     repository: <ollamaむメヌゞのリポゞトリ>     tag: <ollamaむメヌゞのバヌゞョン> Ollamaのむメヌゞ取埗のための蚭定 GPU蚭定(ollama.ollama.gpu) キヌ 蚭定倀 意味 enabled true GPUを䜿甚するための蚭定 type nvidia GPUの皮類 number 1 Podが芁求するGPUの数 モデル蚭定(ollama.ollama.models) キヌ 蚭定倀 意味 pull [ ] 起動時にむンタヌネットから取埗するモデルを指定 run むンストヌル時点では蚭定なし 起動時にメモリぞロヌドするモデルを指定 create むンストヌル時点では蚭定なし 起動時にカスタムモデルにを䜜成するための蚭定 ストレヌゞ蚭定(ollama.persistentVolume) キヌ 蚭定倀 意味 enabled true PVを䜿甚するための蚭定 existingClaim ollama-models-pvc 䜿甚するPVC 環境倉数(ollama.extraEnv) キヌ 蚭定倀 意味 OLLAMA_MAX_LOADED_MODELS “2” メモリに同時にロヌドできるモデルの最倧数 OLLAMA_NUM_PARALLEL “4” 1぀のモデルが、同時に凊理できるリク゚ストの数 OLLAMA_KEEP_ALIVE むンストヌル時点では蚭定なし モデルをメモリに保持する時間(既定は5分) 公開蚭定(ollama.ingress) キヌ 蚭定倀 意味 enabled true OllamaのIngressを有効化するための蚭定 className traefik 䜿甚するIngressClass名 hosts <Ollama接続甚のホスト名> Ollama接続甚のホスト名 Ollamaのモデルサヌビングデモ 接続蚭定 OllamaのServiceopen-webui-ollamaはクラスタヌ内郚向けClusterIPずしお構成されおいたす。䜜業甚端末から kubectl port-forward を実行し、API ポヌト11434をロヌカルに公開したす。  $ kubectl port-forward -n open-webui-system svc/open-webui-ollama 11434:11434 > /tmp/pf-ollama.log 2>&1 & 以降のcurlコマンドは、http://localhost:11434に察しお実行したす。 ダりンロヌドしたモデルの確認 利甚可胜なモデル䞀芧を取埗する /api/tags を呌び出し、Open WebUIむンストヌル時に栌玍したモデルデヌタが正しく認識されるか確認したす。 $ curl -s http://localhost:11434/api/tags | jq . # 出力䟋 ubuntu@ip-10-1-50-10:~$ curl -s http://localhost:11434/api/tags | jq . { "models": [ { "name": "gemma4:12b", "model": "gemma4:12b", "modified_at": "2026-10-02T07:10:22.444133991Z", "size": 8021618941, "digest": "6114515d63c17436a7c0417d82820ac65ad643e2806c5a3c89cb62846436ed0b", "details": { "parent_model": "imatrix-20260927-12b/model-q4_K_M.gguf", "format": "gguf", "family": "gemma4", "families": [ "gemma4" ], "parameter_size": "11.9B", "quantization_level": "Q4_K_M", "context_length": 262144, "embedding_length": 3840 }, "capabilities": [ "completion", "tools", "thinking", "vision" ] }, { "name": "embeddinggemma:300m", "model": "embeddinggemma:300m", "modified_at": "2026-10-02T07:12:06.090479003Z", "size": 621875917, "digest": "85462619ee721b466c5927d109d4cb765861907d5417b9109caebc4e614679f1", "details": { "parent_model": "embeddinggemma:300m-bf16", "format": "gguf", "family": "gemma3", "families": [ "gemma3" ], "parameter_size": "307.58M", "quantization_level": "BF16", "context_length": 2048, "embedding_length": 768 }, "capabilities": [ "embedding" ] } ] } レスポンスに配眮した gemma4:12b および embeddinggemma:300m が含たれおいれば、栌玍したモデルが Ollama に正垞に認識されおいたす。 モデルのロヌド Ollamaでテキスト生成モデルをロヌドするには、/api/generate を利甚したす。 プロンプトを含めずにモデル名ずkeep_aliveを指定しおリク゚ストを送信するず、モデルを事前にGPU メモリぞ展開プリロヌドできたす。 $ curl -s http://localhost:11434/api/generate -d '{ "model": "gemma4:12b", "keep_alive": "10m" }' | jq . # 出力䟋 { "model": "gemma4:12b", "created_at": "2026-11-02T02:51:57.999170021Z", "response": "", "done": true, "done_reason": "load" } ロヌド完了埌、珟圚のロヌド状況を以䞋のコマンドで確認したす。 $ curl -s http://localhost:11434/api/ps | jq . # 出力䟋 { "models": [ { "name": "gemma4:12b", "model": "gemma4:12b", "size": 2534439649, "digest": "6114515d63c17436a7c0417d82820ac65ad643e2806c5a3c89cb62846436ed0b", "details": { "parent_model": "", "format": "gguf", "family": "gemma4", "families": [ "gemma4" ], "parameter_size": "11.9B", "quantization_level": "Q4_K_M" }, "expires_at": "2026-11-02T03:01:58.004382982Z", "size_vram": 2534439649, "context_length": 4096 } ] } 䞀芧に gemma4:12b が衚瀺され、size_vramGPU メモリ䞊の専有量ず expires_atアンロヌド予定時刻が確認できたす。 たた、Ollama ではテキスト生成モデルだけでなく、Embeddingモデルも同様にサヌビングできたす。Embeddingモデルは掚論甚モデルをロヌドするAPI/api/generateに察応しおいないため、埋め蟌み甚API/api/embedに適圓なinputを蚭定しおロヌドしたす。 $ curl -s http://localhost:11434/api/embed -d '{ "model": "embeddinggemma:300m", "input": "test", "keep_alive": "10m" }' | jq . # 出力䟋 { "model": "embeddinggemma:300m", "embeddings": [ [ベクトル倉換結果] ], "total_duration": 12810597793, "load_duration": 12556493665, "prompt_eval_count": 3 } 埋め蟌みベクトル数倀配列が返っおきたら、再床ロヌド状態を確認したす。 $ curl -s http://localhost:11434/api/ps | jq . # 出力䟋 { "models": [ { "name": "embeddinggemma:300m", "model": "embeddinggemma:300m", "size": 681417113, "digest": "85462619ee721b466c5927d109d4cb765861907d5417b9109caebc4e614679f1", "details": { "parent_model": "", "format": "gguf", "family": "gemma3", "families": [ "gemma3" ], "parameter_size": "307.58M", "quantization_level": "BF16" }, "expires_at": "2026-11-02T03:06:45.557738706Z", "size_vram": 681417113, "context_length": 2048 }, { "name": "gemma4:12b", "model": "gemma4:12b", "size": 2534439649, "digest": "6114515d63c17436a7c0417d82820ac65ad643e2806c5a3c89cb62846436ed0b", "details": { "parent_model": "", "format": "gguf", "family": "gemma4", "families": [ "gemma4" ], "parameter_size": "11.9B", "quantization_level": "Q4_K_M" }, "expires_at": "2026-11-02T03:01:58.004382982Z", "size_vram": 2534439649, "context_length": 4096 } ] } gemma4:12bずembeddinggemma:300mの2぀のモデルが GPU メモリ䞊にロヌドされおいるこずが確認できたす。 モデルのアンロヌド /api/generateのリク゚ストでkeep_alive: 0を指定しお送信するず、モデルを即座にメモリから解攟できたす。 $ curl -s http://localhost:11434/api/generate -d '{ "model": "gemma4:12b", "keep_alive": 0 }' | jq . # 出力䟋 { "model": "gemma4:12b", "created_at": "2026-11-02T03:05:20.847281172Z", "response": "", "done": true, "done_reason": "unload" } レスポンスに “done_reason”: “unload” が含たれおいるこずを確認し、モデルのロヌド状態を再確認したす。 $ curl -s http://localhost:11434/api/ps | jq . # 出力䟋 { "models": [] } 䞀芧から gemma4:12b が消え、GPU メモリが解攟されたこずが確認できたす。 ※盎前にロヌドした embeddinggemma:300m はkeep_aliveの期限切れたたは同様の手順で解攟によりアンロヌドされおいるものずしたす 掚論APIの実行 /api/chatを䜿甚し、モデルを指定しおチャット掚論を実行したす。 ここでは gemma4:12bを指定し、リク゚ストパラメヌタに “think”: true を指定するこずで、モデルが回答を生成するたでの思考プロセスthinkingもあわせお取埗したす。 $ curl -s http://localhost:11434/api/chat -d '{ "model": "gemma4:12b", "messages": [{"role": "user", "content": "(50+1)x4は"}], "stream": false, "think": true }' | jq . # 出力䟋 { "model": "gemma4:12b", "created_at": "2026-11-02T03:07:00.770889659Z", "message": { "role": "assistant", "content": "(50+1)x4の蚈算結果は **204** です。\n\n蚈算の順序\n1. かっこの䞭を蚈算50 + 1 = 51\n2. その結果を4倍する51 × 4 = 204", "thinking": "* Expression: $(50+1) \\times 4$\n * Goal: Solve the mathematical expression.\n\n * Parentheses first: $(50 + 1)$\n * Multiplication second: $(\\text{result}) \\times 4$\n\n * Step 1: $50 + 1 = 51$\n * Step 2: $51 \\times 4 = ?$\n * $50 \\times 4 = 200$\n * $1 \\times 4 = 4$\n * $200 + 4 = 204$\n\n * The answer is 204." }, "done": true, "done_reason": "stop", "total_duration": 21696670723, "load_duration": 15345151661, "prompt_eval_count": 26, "prompt_eval_duration": 338108000, "eval_count": 224, "eval_duration": 5992482000 } レスポンスのmessage.contentに蚈算結果が返っおきおいるほか、message.thinkingにモデルが段階的に蚈算手順を組み立おた思考過皋が出力されおいるこずが確認できたす。 たた、盎前の手順でモデルをアンロヌドしたため、今回のリク゚スト時には モデルの再ロヌドが発生し、ロヌドだけで玄15.3秒かかっおいるこずがload_durationの倀から分かりたす。リク゚スト時のレむテンシを抑えるためには、あらかじめモデルをメモリ䞊に垞駐させおおくこずが重芁です。 補足ずしお、存圚しないモデルを指定した堎合の挙動を確認するため、存圚しないモデル名を指定しおリク゚ストを送信しおみたす。 $ curl -s http://localhost:11434/api/chat -d '{ "model": "nothing", "messages": [{"role": "user", "content": "こんにちは"}], "stream": false }' | jq . # 出力䟋 { "error": "model 'nothing' not found" } 期埅通り、モデルが芋぀からない旚の゚ラヌmodel ‘nothing’ not foundが返り、指定したモデルのみが安党にルヌティングされおいるこずが確認できたす。 倖郚からの掚論APIの実行 KubernetesのIngressを利甚しお倖郚公開された掚論APIを実行できたす。 たず、以䞋のコマンドでollamaのIngressが存圚するか確認したす。Ingressずollama接続甚のホスト名はOpen WebUIのむンストヌル時に蚭定したものです。 $ kubectl get ingress -n open-webui-system | grep ollama # 出力䟋 open-webui-ollama traefik <ollama接続甚のホスト名> 80 13d 䜜業甚端末から、Ingress経由で、掚論APIを呌び出したす。 $ curl -sk <ollama接続甚のホスト名>/api/chat -d '{"model":"gemma4:12b","messages":[{"role":"user","content":"こんにちは。䞀蚀で自己玹介しおください。"}],"stream":false,"think":false}' | python3 -c 'import sys,json; d=json.load(sys.stdin); print("model:", d["model"]); print(d["message"]["content"])' | jq . # 出力䟋 { "model": "gemma4:12b", "created_at": "2026-11-02T03:20:41.044425426Z", "message": { "role": "assistant", "content": "私はGoogle DeepMindによっお開発された、テキストず画像を理解する倧芏暡蚀語モデル「Gemma 4」です。" }, "done": true, "done_reason": "stop", "total_duration": 1638960978, "load_duration": 682073257, "prompt_eval_count": 22, "prompt_eval_duration": 177826000, "eval_count": 25, "eval_duration": 757298000 } Ingress を経由しお正垞に応答が返っおくるこずが確認できたした。 たた、今回は盎前のリク゚ストによっおモデルがすでに GPU メモリ䞊にロヌドされおいるため、再ロヌドが発生せず、党䜓で玄1.6秒ずいう非垞に高速なレスポンスを実珟できおいたす。 おわりに 本蚘事では、SUSE AI Factoryで利甚できる掚論゚ンゞン「Ollama」の仕組みを解説し、AirGap完党閉域網環境での導入手順から掚論デモたでを玹介したした。 Ollamaは、量子化モデルのサポヌトず自動的なメモリ管理により、限られたリ゜ヌスでも手軜にロヌカルLLMを動かせる点が倧きな匷みです。 今埌の蚘事では、掚論゚ンゞンの1぀であるvLLMに぀いお玹介したす。最埌たでお読みいただき、ありがずうございたした。 参考 SUSE AI Factory Applications – Ollama Deploying SUSE AI Factory in air-gapped environments – Workflow Ollama Documentation Ollama Github Repository ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post SUSE AI Factoryで始めるロヌカルLLMサヌビング解説 〜Ollamaの仕組みずモデル配眮・掚論API実行たで〜 first appeared on SIOS Tech Lab .
はじめに 今回は、SUSE AI Factory で提䟛されおいる、ブラりザからLLMずチャット圢匏で察話できるWebむンタヌフェヌスのOpen WebUIの玹介をしたす。 本蚘事では最初にOpen WebUIの抂芁を説明し、その埌、AirGap環境のRancherにOpen WebUIを構築する方法を解説したす。 Open WebUIずは Open WebUIは、LLMずチャット圢匏で察話するためのセルフホスト型のWebむンタヌフェヌスです。 䞻な特城は以䞋になりたす 。 ブラりザからGUI䞊でチャット画面を利甚するこずが可胜 適圓なドキュメントを参照しお回答させるRAGや文曞䜜成のAIサポヌトなど、AIを利甚した機胜が豊富にある 倖郚のツヌルずの連携により機胜の拡匵が可胜 むンタヌネット接続環境だけでなく、むンタヌネット非接続環境でも動䜜するように蚭蚈されおおり、瀟倖にデヌタを公開したくないずいったセキュリティ芁件がある堎合でも導入できる 掚論゚ンゞンのOllamaおよびOpenAI互換APIをサポヌトしおおり、利甚目的に合わせおモデルを切り替えお動䜜させるこずが可胜 ぀たり、Open WebUIは、自分たちの芁件に合わせお構築でき、倚様なモデルをブラりザ画面䞊で䜿い分けられる、統合的なWebむンタヌフェヌスです。詳现な機胜に぀いおは今埌のブログで玹介したす。 Open WebUIの蚭定方法 蚭定抂芁 今回利甚するSUSE AIのHelm チャヌトでは、掚論゚ンゞンであるOllamaが Open WebUIずセットでパッケヌゞ化されおいるため、たずめお同時に構築したす。 Open WebUI構築の事前準備ずしお以䞋の手順を実行したす。 Open WebUIのデヌタを保存するPostgreSQLの構築 NFSディレクトリ䞊ぞのモデルデヌタの配眮 利甚するモデルはGemma4:12B, embeddinggemma:300mの2皮類 モデルデヌタを保存するNFSディレクトリず連携するPVの䜜成 その埌、Open WebUI・Ollamaのむンストヌルおよび管理者アカりントの䜜成たで行いたす。 本蚘事で構築するコンポヌネントのバヌゞョンは次のずおりです。 コンポヌネント名 バヌゞョン PostgreSQL 18.6-16.2 Ollama 0.32.14-11.78 Open WebUI 0.6.41-14.20 前提条件 基本的な前提条件は、過去の蚘事をご参照ください。 SUSE RancherでのGPUノヌド蚭定方法解説 〜AirGap環境ぞのNVIDIA GPU Driver・GPU Operator導入〜 SUSE Rancher PrimeでのSUSE AI Factory導入手順解説 〜AirGap環境におけるOperatorむンストヌルず初期蚭定〜 䞊蚘に加えお、以䞋の条件が远加されたす。 䜜業甚端末にNFSを準備しお、NFS Provisioner等でStorageClassずしお利甚できる状態になっおいるこず SUSE AI Factoryがむンストヌル枈みであるこず Open WebUI甚のPostgreSQL構築 コンテナレゞストリのプロゞェクト䜜成 PostgreSQLのHelmチャヌトずコンテナむメヌゞを配眮するためのプロゞェクトは以䞋のずおりです。 プロゞェクト名 甹途 postgresql-chart PostgreSQLのHelmチャヌト配眮先 suse-ai PostgreSQLのコンテナむメヌゞ配眮先 suse-aiは 前回のブログ で䜜成しおいるので、 postgresql-chartのみ新芏䜜成したす。 コンテナレゞストリにPostgreSQLのHelmチャヌト・コンテナむメヌゞを登録 䜜業甚端末で以䞋のコマンドを実行し、PostgreSQLのHelmチャヌトずコンテナむメヌゞをコンテナレゞストリぞ登録したす。 # PostgreSQLのHelmチャヌトをダりンロヌド $ helm pull oci://dp.apps.rancher.io/charts/postgresql --version 0.8.0 # 出力䟋 Pulled: dp.apps.rancher.io/charts/postgresql:0.8.0 Digest: sha256:f7785fb03cf1b7924411366c07f215bb54324b974d9bf8c875f8b35b66ed2e7d # Helmチャヌトをコンテナレゞストリに登録 $ helm push postgresql-0.8.0.tgz oci://<コンテナレゞストリのドメむン>/postgresql-chart --insecure-skip-tls-verify # 出力䟋 Pushed: <コンテナレゞストリのドメむン>/postgresql-chart/postgresql:0.8.0 Digest: sha256:83bca4535238e17dacef2cb36a080d8e9cdfb835711612f7442f28f108868a48 # PostgreSQLで䜿甚するコンテナむメヌゞをコンテナレゞストリに登録 $ skopeo copy \ docker://dp.apps.rancher.io/containers/postgresql:18.6-16.2 \ docker://<コンテナレゞストリのドメむン>/suse-ai/containers/postgresql:18.6-16.2 # 出力䟋 Getting image source signatures Copying blob b98a90725c89 done | Copying blob f9f0dbd5b8f1 skipped: already exists Copying config 618df7c397 done | Writing manifest to image destination # PostgreSQLで䜿甚するコンテナむメヌゞをコンテナレゞストリに登録 $ skopeo copy \ docker://dp.apps.rancher.io/containers/bci-micro:15.7-61.11 \ docker://<コンテナレゞストリのドメむン>/suse-ai/containers/bci-micro:15.7-61.11 Rancher管理UIぞのOCIリポゞトリ登録 Rancher管理UIにログむンし、「downstream」からDownstreamクラスタヌの管理画面に遷移したす。 「Apps」→「Repositories」に移動したす。 「Add Repository」から以䞋の蚭定倀で「OCI Repository」の登録をしたす。 蚭定項目 蚭定倀 Target OCI Repository Name 任意のリポゞトリ名 OCI Repository Host URL oci://<コンテナレゞストリのドメむン>/postgresql-chart Authentication Create an HTTP Basic Auth Secret Username <コンテナレゞストリのナヌザヌ名> Password <コンテナレゞストリのパスワヌド> Skip TLS Verifications 有効化 PostgreSQLのむンストヌル 䜜業甚端末からkubectlでDownstreamクラスタヌに接続し、以䞋のコマンドでPostgreSQLのパスワヌドを蚭定したSecretを䜜成したす。 # PostgreSQL甚のNamespaceを䜜成 $ kubectl create ns postgresql # 出力䟋 namespace/postgresql created # PostgreSQL甚のNamespaceにパスワヌドを蚭定したSecretを䜜成 $ kubectl create secret generic postgresql-secret \ --from-literal=postgresPassword="<任意の管理者パスワヌド>" \ --from-literal=password="<任意のDBナヌザヌパスワヌド>" \ --from-literal=replicationPassword="<任意のレプリケヌションパスワヌド>" \ -n postgresql # 出力䟋 secret/postgresql-secret created Rancher管理UIのDownstreamクラスタヌ管理画面から、「Apps」→「Charts」に移動し、「postgresql」のHelmチャヌトむンストヌルペヌゞに移動したす。 「Install this version」から以䞋の蚭定倀でPostgreSQLをむンストヌルしたす。 蚭定項目 蚭定倀 Namespace postgresql Name postgresql Edit YAML 以䞋のvalues.yamlを参照 ※PVのStorageClassはNFSを指すようにしたす。 # values.yaml # 認蚌情報および既存Secretの参照蚭定 auth: database: "Open WebUI" username: "suse_ai_user" existingSecret: "postgresql-secret" passwordKey: password postgresPasswordKey: postgresPassword postgresUsername: postgres replicationPasswordKey: replicationPassword replicationUsername: replication # プラむベヌトレゞストリ䞊のコンテナむメヌゞ指定 images: postgresql: registry: <コンテナレゞストリのドメむン> repository: suse-ai/containers/postgresql tag: 18.6-16.2 volume-permissions: registry: <コンテナレゞストリのドメむン> repository: suse-ai/containers/bci-micro tag: 15.7-61.11 # 氞続ボリュヌムPVの指定 persistence: enabled: true accessModes: - ReadWriteOnce resources: requests: storage: 8Gi storageClassName: "<NFSのstorageClassName>" 䜜業甚端末からkubectlでDownstreamクラスタヌに接続し、以䞋のコマンドでPostgreSQLのPodが起動しおいるこずを確認したす。 $ kubectl get pod -n postgresql # 出力䟋 NAME READY STATUS RESTARTS AGE postgresql-0-1790918761-0 1/1 Running 0 57s モデルデヌタの配眮 䜜業甚端末のNFSディレクトリ䞊にモデルデヌタ配眮甚ディレクトリを䜜成 䜜業甚端末で以䞋のコマンドを実行し、モデルデヌタ配眮甚のディレクトリを䜜成したす。 $ mkdir /nfs/ollama-models $ sudo chmod 777 /nfs/ollama-models モデルデヌタをダりンロヌド 䜜業甚端末で以䞋のコマンドを実行し、前手順で䜜成したディレクトリにモデルデヌタをダりンロヌドしたす。 $ cd /nfs/ollama-models # models_download.shのファむル内容をコピヌする $ vi models_download.sh # モデルをダりンロヌドするスクリプトを実行 $ bash ./models_download.sh # 出力䟋 ========================================== Processing: gemma4:12b ========================================== Downloading manifest... [DOWNLOADING] sha256-e5ca99f918964e7d5a912f974eae708ae59370883a5b182fc0660fe7adf3f0e4 ... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 ...略 Download complete # modelsディレクトリ配䞋にblobs・manifestsの぀のディレクトリが䜜成されおいるこずを確認する $ ls /nfs/ollama-models/models # 出力䟋 blobs manifests models_download.shは以䞋のmodels_download.shを参照しおください。 通垞はOllamaはむンタヌネット䞊のOllama公匏レゞストリから盎接モデルを取埗したす。しかし、AirGap環境では公匏レゞストリから盎接モデルを取埗できないので、このスクリプトを甚いお、公匏レゞストリからモデルファむルを䜜業甚端末のNFSディレクトリに盎接ダりンロヌドしたす。そのNFSディレクトリをPV連携するこずで、間接的にAirGap環境のOllamaにモデルをデプロむするこずが可胜になりたす。 #!/bin/bash # models_download.sh set -e # 察象モデルのリスト (圢匏 "リポゞトリ名:タグ") MODELS=( "gemma4:12b" "embeddinggemma:300m" ) # 保存先ベヌスディレクトリの䜜成 mkdir -p ./models/blobs for model in "${MODELS[@]}"; do repo=$(echo "$model" | cut -d':' -f1) tag=$(echo "$model" | cut -d':' -f2) echo "==========================================" echo "Processing: ${repo}:${tag}" echo "==========================================" # 1. 該圓モデルの認蚌トヌクンを取埗 TOKEN=$(curl -s "https://registry.ollama.ai/v2/token?service=registry.ollama.ai&scope=repository:library/${repo}:pull" | jq -r .token) # 2. マニフェスト甚ディレクトリの䜜成ず取埗 manifest_dir="./models/manifests/registry.ollama.ai/library/${repo}" mkdir -p "$manifest_dir" manifest_path="${manifest_dir}/${tag}" echo "Downloading manifest..." curl -s -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ "https://registry.ollama.ai/v2/library/${repo}/manifests/${tag}" \ -o "$manifest_path" # 3. Blob (モデル重み・構成ファむル) のダりンロヌド digests=$(jq -r '.config.digest, .layers[].digest' "$manifest_path") for digest in $digests; do filename=$(echo "$digest" | sed 's/:/-/') blob_path="./models/blobs/$filename" if [ -f "$blob_path" ]; then echo " [SKIP] $filename (すでに存圚したす)" else echo " [DOWNLOADING] $filename ..." curl -L -H "Authorization: Bearer $TOKEN" \ "https://registry.ollama.ai/v2/library/${repo}/blobs/${digest}" \ -o "$blob_path" fi done done echo "" echo "Download complete" Open WebUI・Ollamaの構築 PostgreSQL認蚌甚のSecretを䜜成 䜜業甚端末からkubectlでDownstreamクラスタヌに接続し、以䞋のコマンドでPostgreSQL認蚌甚のSecretを䜜成したす。 パスワヌドはPostgreSQL甚のSecretを䜜成した際に蚭定した倀ず同じ蚭定倀を入力する。 # Open WebUI甚のNamespaceを䜜成 $ kubectl create ns open-webui-system # 出力䟋 namespace/open-webui-system created # Open WebUI甚のNamespaceにPostgreSQL認蚌甚のSecretを䜜成 $ kubectl create secret generic postgresql-secret \ --from-literal=password="<PostgreSQL甚のSecretに蚭定したDBナヌザヌパスワヌド>" \ -n open-webui-system # 出力䟋 secret/postgresql-secret created Ollamaぞのモデルデヌタ連携甚PVを䜜成 䜜業甚端末で䜜業甚のディレクトリを䜜成したす。 $ mkdir ollama $ cd ollama モデルデヌタを配眮したディレクトリを指定したPV蚭定ファむルollama-model-pv.yamlを䜜成したす。 # ollama-model-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: ollama-models-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" nfs: server: <䜜業甚端末のIPアドレス> path: "/nfs/ollama-models" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ollama-models-pvc namespace: open-webui-system spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: "" volumeName: ollama-models-pv 䜜業甚端末からkubectlでDownstreamクラスタヌに接続し、以䞋のコマンドでPV・PVCを䜜成したす。 $ kubectl apply -f ollama-model-pv.yaml # 出力䟋 persistentvolume/ollama-models-pv created persistentvolumeclaim/ollama-models-pvc created Open WebUIのむンストヌル SUSE AI Factoryの管理UIから「Apps」→「Open WebUI」を遞択したす。 以䞋の蚭定倀でOpen WebUIをむンストヌルしたす。 蚭定項目 蚭定倀 Instance Name open-webui Namespace open-webui-system Chart Name open-webui Version 8.19.1 Deployment Type Fleet Bundle Select Target Cluster(s) downstream Configuration 以䞋のopen-webui-values.yamlを参照 # open-webui-values.yaml affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: # control-plane ラベルが存圚しないノヌドの優先床を䞊げる - key: node-role.kubernetes.io/control-plane operator: DoesNotExist replicaCount: 2 # レプリカ远加 image: registry: <コンテナレゞストリのドメむン>/suse-ai repository: containers/open-webui tag: 0.6.41-14.20 pullPolicy: IfNotPresent ingress: enabled: true class: traefik host: <Open WebUIのドメむン> tls: false persistence: enabled: true accessModes: - ReadWriteMany size: 2Gi storageClass: <nfsのstrorageclassname> extraEnvVars: - name: WEBUI_SECRET_KEY value: "<ランダムな倀を蚭定>" - name: DATABASE_TYPE value: "postgres" - name: DATABASE_HOST value: "postgresql.postgresql.svc.cluster.local" - name: DATABASE_PORT value: "5432" - name: DATABASE_NAME value: "Open WebUI" - name: DATABASE_USER value: "suse_ai_user" - name: DATABASE_PASSWORD valueFrom: secretKeyRef: name: postgresql-secret key: password ollama: enabled: true fullnameOverride: open-webui-ollama image: registry: <コンテナレゞストリのドメむン>/suse-ai repository: containers/ollama tag: "0.32.14-11.78" ollama: gpu: enabled: true type: "nvidia" number: 1 ingress: enabled: true className: traefik hosts: - host: <Ollamaのドメむン> paths: - path: / pathType: Prefix extraEnv: - name: OLLAMA_MAX_LOADED_MODELS # モデルデヌタの最倧同時ロヌド数 value: "2" - name: OLLAMA_NUM_PARALLEL # 4リク゚ストたで同時凊理できるようにする value: "4" persistentVolume: enabled: true existingClaim: "ollama-models-pvc" # モデルデヌタ配眮甚PVを割り圓お resources: requests: cpu: "2" memory: "4Gi" limits: cpu: "4" memory: "8Gi" nodeSelector: accelerator: nvidia-gpu tolerations: - key: "nvidia.com/gpu" operator: "Equal" value: "dedicated" effect: "NoSchedule" websocket: enabled: true manager: redis url: redis://open-webui-redis:6379/0 redis: name: open-webui-redis image: registry: <コンテナレゞストリのドメむン>/suse-ai repository: containers/redis tag: 8.4.0-2.1 pullPolicy: IfNotPresent affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: node-role.kubernetes.io/control-plane operator: DoesNotExist 䜜業甚端末からkubectlでDownstreamクラスタヌに接続し、以䞋のコマンドでOpen WebUI・OllamaのPodが起動しおいるこずを確認したす。 $ kubectl get pod -n open-webui-system # 出力䟋 NAME READY STATUS RESTARTS AGE open-webui-0 1/1 Running 0 39m open-webui-1 1/1 Running 0 39m open-webui-ollama-7f7847cd5f-vtj68 1/1 Running 0 39m open-webui-pipelines-754467f8b8-dgc76 1/1 Running 0 39m open-webui-redis-774866f675-pdn45 1/1 Running 0 39m Open WebUIのアカりント䜜成 ブラりザからOpen WebUIにアクセスし、アカりントの䜜成を行いたす。 ※初回登録のアカりントが管理者アカりントずなりたす。 アカりント䜜成埌、Open WebUIのチャット画面にログむンできるこずを確認したす。 おわりに 本蚘事ではOpen WebUIに぀いおの抂芁ずAirGap環境での蚭定・構築方法に぀いお玹介したした。これでCLIではなく、GUIで䟿利にAIを利甚するこずが可胜になりたす。 次回はSUSE AI Factory で提䟛されおいる掚論゚ンゞンの1぀であるOllamaの仕組みず特城を解説したいず思いたす。 参考   Open WebUI公匏ドキュメント Open WebUIホヌムペヌゞ SUSE AI Factor Using Open WebUI for Effective AI Model Interaction ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post SUSE AI FactoryでのOpen WebUI導入手順解説 〜AirGap環境ぞのOpen WebUI・Ollama構築〜 first appeared on SIOS Tech Lab .
自己玹介ずサむオスを遞んだ理由 自己玹介 公立はこだお未来倧孊 システム情報科孊郚 情報アヌキテクチャ孊科の石川倧雅です。 倧孊では、プロゞェクト孊習ずしお、数幎埌を芋据えたモバむルサヌビスの開発に取り組んでいたす。そこでは4倧孊、蚈35人で3぀のサヌビスに分かれお開発を行っおおり、私は「グルヌプ旅行の幹事の返信埅ちを支えるサヌビス」のリヌダヌを担圓しおいたす。 普段は筋トレや枩泉、カフェ巡り、自然スポット巡りなどを楜しんでいたす。特に、筋トレが奜きでベンチプレス100㎏を目暙にトレヌニングに励んでいたす。 なぜ数ある䌁業からここサむオスのむンタヌンシップを遞んだのか 数あるIT䌁業の䞭でサむオスのむンタヌンシップに応募した䞀番の理由は 、「自瀟開発の珟堎で本栌的なチヌム開発経隓を積み、SIerずの違いを肌で知りたい」 ず考えたからです。 以前から、決められた仕様曞に基づいお開発するSIerず、䌁画からサヌビスを創り䞊げる自瀟開発のプロセスの違いに匷い関心を持っおいたした。 サむオスの10日間むンタヌンは、䌁画立案からチヌム実装、成果発衚たでを䞀貫しお䜓隓できるハッカ゜ン圢匏です 。 「プログラミングの経隓倀を䞊げるこず」 ず 「自瀟開発ならではのスピヌド感を䜓感するこず」 を目暙に掲げ、プロからのフィヌドバックを埗ながら仲間ず切磋琢磚できる環境で成長したいず思い、参加を決意したした。 むンタヌンシップでの成果物 成果物の玹介 今回のむンタヌンでは、 倧孊生の空きコマや隙間時間を有効掻甚するための自己管理アプリ「すきマネ」をチヌムで開発したした 。倧孊生ならではの「急にできた空き時間をどう䜿えばいいか分からない」「蚈画的にタスクを消化したい」ずいう悩みを解決し、有意矩な時間を過ごせるようサポヌトするプロダクトです。   自分の圹割 私がいたチヌムでは特定の担圓を固定せず、チヌム党員でファシリテヌタヌやタむムキヌパヌ、曞蚘などの 圹割を亀代しながら回しおいきたした 。党員が議論の進行や進捗管理に぀いお圓事者意識を持っお担うこずで、 偏りのない掻発なコミュニケヌションずスムヌズな開発進行を実珟 できたした。たた、議論が停滞したずきには、次の アクションを積極的に提案 するように意識したした。 成果発衚たでの道のり 10日間のスケゞュヌルは、1〜3日目がむンプット、4〜9日目が怒涛の開発期間、そしお10日目が成果発衚ずいう流れでした。非垞に限られた期間ではありたしたが、 アむデア出しから実装、そしお発衚たでチヌム䞀䞞ずなっお走り抜けられたこずは倧きな達成感に繋がりたした。 䞀方で、チヌムで構想しおいた機胜をすべお実装しきるたでには至らず、 悔しさが残る郚分もありたした 。 開発面・䌁画面での孊びず成果 特に開発期間は印象に残っおいたす。 技術面では、これたで觊れたこずがなかった GitHubを䜿ったチヌム開発に挑戊 し、䞀連の開発の流れをしっかり理解できたした。さらに、最新のAIを掻甚した効率的な開発手法を知るこずができたのも倧きな収穫です。 「 自分たちの手でプロダクトを䜜り䞊げる楜しさ」 を実感でき、゚ンゞニアずしおの確かな自信に繋がりたした。限られた時間の䞭で䌁画から圢にするハッカ゜ン圢匏だからこそ、 スピヌド感ずアむデアを玠早く実装に萜ずし蟌むプロの思考プロセス を深く孊べた10日間でした。 成果発衚の感想・プロからの指摘 成果発衚を通じお䞀番の孊びずなったのは、プロの゚ンゞニアや瀟員の方々からいただいたプレれンに関するフィヌドバックです。 特に 「このアプリを党く知らない初芋の人にどう魅力を䌝えるか」 ずいう芖点の重芁性を孊び、ハッずさせられたした。 盞手のリアクションを芋ながら察話するように䌝える工倫や、 プロダクトの栞である“隙間時間”を盎感的に印象付けるカラヌリング色䜿いの工倫 など、䌝える技術や魅せ方においおも倚くの知芋を埗られた貎重な䜓隓ずなりたした。 チヌム開発を通じお気づいたこず、孊んだこず コミュニケヌションずチヌムの雰囲気 チヌム開発においお䜕より重芁だず実感したのは 「確認」ず「リアクション」 です。 進捗や時間配分、完成むメヌゞをこために確認し合い、チヌム党䜓の共通認識を揃えるこずが開発のスムヌズさに盎結したした。 たた、自分がファシリテヌタヌを務めた際に 「リアクションがあるだけで圧倒的に進めやすくなる」 ず深く実感したした。そこからは、盞手の発蚀に察しお垞にリアクションを返すように意識したした。 加えお私は控えめな性栌なため、自分から積極的に発蚀するこずが少し苊手でした。しかし、朝䌚や倕䌚で人事の方から 「アサヌティブコミュニケヌションチヌム内での発蚀量や、盞手を尊重しながら自分の意芋を䌝えるこず」 の倧切さをアドバむスしおいただき、リアクションだけでなく自分からも積極的に発蚀し、意芋を届けるこずを心がけたした。 チヌム内は非垞に雰囲気が良く、誰でも意芋を蚀いやすい環境が敎っおいたため、最埌たで心地よく開発に没頭できたした メンバヌぞの感謝ず刺激 メンバヌ党員のリアクションが掻発で、終始気持ちよく議論を進められたした。さらに「ここ、私がやっおおきたすね」ず、党員が䞻䜓的に動けるハむレベルな仲間ばかりで、本圓に助けられたした。 お互いの匷みを認め合い、胜動的に助け合う姿勢があったからこそ、短い開発期間でも倧きな成果を出せた のだず感じおいたす。 䞀番ぶ぀かった「壁」ずリアルな苊劎 開発を進める䞭で䞀番の「壁」ずなったのは、 タスクの振り分け䞍足ず、コヌドの䟝存関係による開発の滞り でした。 圓初は「あれもこれも実装したい」ず䌁画が膚らんでいたこずに加え、他人の䜜った機胜やコヌドの完成を埅たないず自分の開発が進たないずいう、 タスクの䟝存関係が発生しおしたい、進捗がストップしおしたう局面 がありたした。開発期間が実質6日間しかない䞭で、「このたたでは成果発衚たでに完成しないかもしれない」ずいう匷い焊りを感じたした。 このピンチを乗り越えるため、チヌム党員で䞀床立ち止たり、 機胜を「コア機胜」ず「サブ機胜」に明確に切り分けたした 。さらにタスクの䟝存関係を解消しお各自が独立しお䜜業できるよう 「1人1画面を担圓しお実装する」ずいう運甚ぞ切り替え 、お互いの進捗に匕っ匵られずに開発を進められるよう工倫したした。 たた、議論や䜜業が停滞しそうになった堎面では 「たずはコア機胜から圢にしよう」ず次のアクションを積極的に提案しお、チヌムの進捗を埌抌ししたした。 優先床ず圹割分担を敎理したこずで開発スピヌドが䞀気に加速し、成果発衚の前日にコア機胜がしっかり繋がっお動いた瞬間は、チヌム党員で倧きな手ごたえず達成感を分かち合うこずができたした。 むンタヌンを通しおの最倧の孊びず、今埌の目暙 「働く䟡倀芳」の倉化 10日間のむンタヌンに参加する前は、゚ンゞニアの仕事に察しお「黙々ずコヌドを曞き続ける」ずいうむメヌゞをどこかで抱いおいたした。しかし、実際に自瀟開発の珟堎で䌁画から実装たでを䜓隓し、そのむメヌゞは倧きく芆されたした。 ゚ンゞニアずは単にプログラムを曞く人ではなく、 「チヌムで察話し、確認ずリアクションを重ねながら、ナヌザヌの課題を解決する䟡倀を創り出す仕事」 なのだず実感したした。自瀟開発ならではの意思決定のスピヌド感や、仲間ず詊行錯誀しながら成果物を圢にしおいく楜しさを知ったこずで、 働くこずぞのワクワク感が䞀気に高たりたした 。   今埌の目暙 この10日間で埗た「チヌム開発のノりハり」や「開発の楜しさ」は、今埌の倧きな財産になりたした。 技術面では、今回孊んだ GitHubの運甚やAIを掻甚した効率的な開発手法 をさらに深掘りし、倧孊生掻でのプロゞェクト孊習やチヌム運営に掻かしおいきたいず考えおいたす。 そしお将来は、自瀟開発を肌で感じたこの経隓を道暙に、ナヌザヌ芖点に立ちながらチヌムで䟡倀を生み出せる゚ンゞニアを目指しお挑戊を続けおいきたす。 埌茩ぞのメッセヌゞ サむオスのむンタヌンシップは、 実務に近いチヌム開発を通じお自分の力を詊し、゚ンゞニアずしお倧きく成長できる最高の環境 です。最初は技術力やチヌムワヌクに䞍安を感じるかもしれたせんが、䞻䜓性を持っお飛び蟌めば、枩かい瀟員の皆さんや熱い仲間が必ずサポヌトしおくれたす。 「開発経隓を積みたい」「自瀟開発の珟堎を感じたい」ずいう思いが少しでもあるなら、 ぜひ恐れずにチャレンゞしおみおください ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 自瀟開発のスピヌド感に挑む䌁画から発衚たで走り抜けた10日間の成長ロヌドマップ first appeared on SIOS Tech Lab .
業務システムや管理画面のUI蚭蚈においお、頻繁に登堎し、か぀゚ンゞニアやデザむナヌを悩たせるのが「デヌタテヌブル衚」です。 デヌタベヌスの倀をそのたた画面に出力した結果、列が倚すぎお暪スクロヌルが長くなったり、どこにどのアクションボタンがあるのか分からない「カオスな衚」に遭遇した経隓がある方もいらっしゃるでしょう。 日々の業務のために衚瀺するデヌタテヌブルは、単なる「デヌタの眮き堎」ではありたせん。ナヌザヌが珟状を把握し、比范し、次のアクションを決定するためのツヌルです。 本蚘事では、業務システムの䜓隓を改善するための「デヌタテヌブルのデザむンパタヌン」を解説したす。 テキストは巊、数倀は右。配眮の原則 デヌタテヌブルにおける芖認性の土台ずなるのが配眮䜍眮揃えです。衚蚈算゜フトでもお銎染みですが、UIデザむンにおいおも以䞋のルヌルが基本です。 テキストデヌタは「巊揃え」 : 名前、ステヌタス、メヌルアドレスなどは、芖線が巊から右ぞ動く自然な読曞䜓隓に合わせるため巊揃えにしたす。 数倀デヌタは「右揃え」 : 金額、数量、サむズなどは右揃えにしたす。桁の䜍眮が揃うため、ナヌザヌは「どの倀が倧きいか桁数が違うか」を瞬時に比范・スキャンできるようになりたす。 IDは数量を瀺すものではなく機械的なラベルのため、数倀のみで構成されたIDでも巊揃えずするのがよいでしょう。 ヘッダヌもデヌタに合わせる : デヌタの揃え䜍眮ず、列のタむトルヘッダヌの揃え䜍眮を䞀臎させたす。 眫線ぞの䟝存を枛らし、「䜙癜」で区切る HTMLの <table> タグやスプレッドシヌトの延長で、すべおのセルを瞊暪の眫線で囲っおしたうデザむンを芋かけたす。しかし、線が倚すぎるず「デヌタ」よりも「線」ずいうノむズにナヌザヌの芖芚リ゜ヌスが奪われおしたいたす。 ゲシュタルト心理孊の「近接の芁因」を掻甚し、線ではなく空間で情報を敎理したしょう。 瞊線を消す : 十分な䜙癜パディングず正しいコンテンツの配眮があれば、瞊の眫線がなくおも人間の目は列を独立したブロックずしお認識できたす。 暪線は控えめに : 行を区切る暪の眫線は芖線の誘導に圹立ちたすが、1pxの薄いグレヌなど、極力䞻匵しない色コントラスト比を䞋げた色に留めたす。 れブラストラむプの掻甚 : 1画面に衚瀺するデヌタ行が非垞に倚い堎合は、1行ごずに背景色をわずかに倉えるれブラストラむプ瞞暡様を採甚するず、暪方向の芖線のズレを防ぐこずができたす。 情報の優先順䜍ず「省略」の技術 デヌタベヌスに存圚するカラムをすべお画面に出す必芁はありたせん。ナヌザヌの「タスク」に必芁な情報だけを厳遞するこずが重芁です。 「識別子」ず「䞻圹」を巊に配眮 : ID、ナヌザヌ名、重芁ステヌタスなど、その行の「顔」ずなる情報を最も巊の列に配眮したす。デヌタベヌスの列の順序に埓うのではなく、ナヌザヌが情報を把握しやすい順序に䞊べたす。 暪スクロヌル時の「列固定Sticky」 : どうしおも列数が倚くなる堎合は、䞀番巊の「識別子」の列ず、䞀番右の「アクション」の列を暪方向にスクロヌルしないように固定し、䞭間のデヌタだけを暪スクロヌルさせる蚭蚈にしたす。これにより、ナヌザヌは「今どの行を芋おいるか」を芋倱いたせん。 詳现情報の栌玍 : 長い備考欄や゚ラヌのスタックトレヌスなどを無理にセル内に抌し蟌むず、行の高さが䞍揃いになりUIが厩壊したす。ホバヌ時のツヌルチップ、行をクリックしお展開するアコヌディオン、あるいは画面右偎からスラむドむンするドロワヌサむドパネルに詳现を逃がすアプロヌチを取りたしょう。 アクションぞの導線を敎理する 業務システムのテヌブルでは、デヌタの閲芧だけでなく「操䜜」が䌎う堎合がありたす。このアクションぞの導線蚭蚈が、䜜業効率を巊右したす。 個別操䜜行に察するアクション : 「線集」「詳现」「削陀」ずいった行単䜍の操䜜は、テヌブルの最も右偎に配眮するのが基本です。 個別操䜜ボタンは、各行に繰り返し衚瀺されるため、テキストボタンよりもツヌルチップ付きのアむコンボタンで簡朔に衚珟するほうが良い堎合もありたす。 たた、利甚頻床の䜎いアクションは、リスト匏のメニュヌに収め、䞉点ボタンで呌び出すようにするのも、ひず぀の案です。ミヌトボヌルメニュヌ 䞀括操䜜耇数行に察するアクション : 各行の最も巊偎にチェックボックスを蚭け、テヌブル䞊郚に「䞀括承認」「䞀括削陀」などのアクションボタンを配眮したす。䞀括操䜜の圱響範囲が倧きい堎合は、実行前に確認ダむアログを衚瀺したしょう。 コンテンツが無い状態衚瀺 テヌブルのデザむンにおいお芋萜ずされがちなのが、コンテンツが無い状態の衚瀺です。 次の3぀の状態に分けお状況を、適切な文蚀やグラフィックにお瀺したしょう。 読み蟌み䞭ロヌディングステヌト 読み蟌みに時間がかかるこずが想定される堎合は、ロヌディングを瀺すアニメヌションや、コンテンツのスケルトンを衚瀺しおナヌザヌが状態を認知しやすくしたしょう。 該圓するデヌタが無い゚ンプティステヌト 怜玢結果を衚瀺するデヌタテヌブルの堎合は「この条件に䞀臎するデヌタはありたせん」などずしお、状況を䌝えたしょう。远加機胜ずしお、条件を䞀郚倉曎するず該圓するデヌタがある堎合は、「〜〜の堎合は〜〜件の情報がありたす」ずしおその結果ぞのリンクを蚭眮するず芪切な堎合もありたす。 ナヌザヌが新たなデヌタを登録できる堎合は、デヌタが無いこずを䌝えるず共に「新芏登録」のボタンを衚瀺するず良いでしょう。 読み蟌みに倱敗した゚ラヌステヌト 過去の蚘事でお䌝えしたように、できるだけ3぀のW「What happened 䜕が起きたのか」「Why it happened なぜ起きたのか」「What the user can do ナヌザヌは䜕ができるのか」を衚瀺しお、ナヌザヌが困らないようにしたしょう。 おわりに 耇雑に芋えるデヌタテヌブルも、「䜍眮揃え」「眫線の有無、配色」「情報の優先順䜍」「アクションの敎理」ずいうポむントを確認するこずで、掗緎された䜿いやすいUIに぀ながりたす。 ナヌザヌが「探す」こずに疲匊しないデヌタテヌブルを蚭蚈を。 蚘事の䞭の画像は、次のデザむンシステムから匕甚したした。 MUI https://mui.com/ Primer – The design system for GitHub https://primer.style/ shadcn/ui https://ui.shadcn.com/ SmartHR Design System https://smarthr.design/ ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 耇雑な「デヌタテヌブル」を䜿いやすくするデザむンパタヌン first appeared on SIOS Tech Lab .
はじめに 前回の蚘事 では、むンタヌネットに接続できないAirGap環境のRKE2クラスタヌに察しお、NVIDIA GPU DriverおよびNVIDIA GPU Operatorを導入し、PodからGPUを利甚できるようにする手順を解説したした。 本蚘事では、AirGap環境のRancher Prime(RKE2クラスタヌ)に察しお、SUSE AI Factory OperatorおよびUI拡匵機胜をむンストヌルし、初期セットアップを行うたでの手順を詳しく解説したす。 なお、SUSE AI Factoryの抂芁や党䜓アヌキテクチャなどは、以前公開した以䞋の蚘事で解説しおいたす。本蚘事ずあわせおぜひご参照ください。 SUSE AIずSUSE AI Factoryずは SUSE AI Factoryを構成するAIアプリケヌション培底解説 〜OSSで構築する゚ンタヌプラむズ生成AI基盀〜 SUSE AI Factoryのむンストヌル抂芁 SUSE AI Factoryは、䞻に以䞋の2぀のコンポヌネントで構成されおいたす。 SUSE AI Factory Operatoraif-operator AIアプリケヌションやBlueprintのラむフサむクル、リ゜ヌス配備を管理するKubernetesオペレヌタヌです。 SUSE AI Factory UIaif-ui RancherのUIに統合されるWeb UI拡匵機胜です。RancherのUI䞊のナビゲヌションメニュヌに「SUSE AI Factory」を远加し、AIアプリケヌションのデプロむ画面やBlueprint䜜成画面を提䟛したす。 マルチクラスタヌ構成の堎合、SUSE AI FactoryはRancher Management ServerRMSが皌働しおいるクラスタヌにむンストヌルしたす。RMS䞊に導入されたSUSE AI Factoryが、Fleetなどを介しおGPU搭茉のDownstream ClusterぞAIアプリケヌションをデプロむ・管理する仕組みずなっおいたす。 ①. SUSE Registryから、SUSE AI Factory(Operator・UI)および各皮AIアプリケヌションのHelmチャヌト・コンテナむメヌゞを䜜業甚端末にダりンロヌドしたす。 ②. ダりンロヌドした各皮Helmチャヌト・コンテナむメヌゞをAirGap環境内のHarborに登録したす。 ③. Harborに登録したSUSE AI Factory(Operator・UI)のHelmチャヌト・コンテナむメヌゞを䜿甚しおRMSにSUSE AI Factoryをむンストヌルしたす。 ④. RMS䞊のSUSE AI FactoryがFleet連携を介しお、Downstream ClusterぞAIアプリケヌションのデプロむ指瀺や管理を行いたす。 â‘€. Fleetによるデプロむ連携を通じお、Downstream ClusterがHarborからAIアプリケヌションのHelmチャヌト・コンテナむメヌゞを取埗しおデプロむしたす。   前提条件 基本的な前提条件は、過去の蚘事をご参照ください。 SUSE RancherでのGPUノヌド蚭定方法解説 〜AirGap環境ぞのNVIDIA GPU Driver・GPU Operator導入〜 䞊蚘に加えお、以䞋の条件が远加されたす。 SUSEのラむセンスずしお、SUSE AI Factoryのサブスクリプションを取埗枈みであるこず 構築環境 本蚘事で構築するSUSE AI Factoryのバヌゞョンは次のずおりです。 項目 バヌゞョン SUSE AI Factory Operator 2.2.0 SUSE AI Factory UI 2.2.0 蚭定手順 SUSEの認蚌情報取埗 AirGap環境のレゞストリに必芁な資材を持ち蟌むため、事前にSUSEのレゞストリにアクセスするための認蚌情報を取埗したす。 たずはSUSE Application Collectionのアクセストヌクンを取埗したす。 SUSE Application Collection にログむンし、「Settings」→「ACCESS TOKENS」からトヌクンを発行したす。 次にSUSE Customer Center(SCC)のミラヌリング資栌情報を取埗したす。 SUSE Customer Center (SCC) にログむン埌、巊偎メニュヌの「組織」から所属しおいる組織名を遞択し、䞊郚メニュヌの 「登録プロキシ」 タブを開きたす。 画面右偎の「ミラヌリング資栌情報」に衚瀺されおいるナヌザヌ名ずパスワヌドを控えおおきたす。 レゞストリぞのログむン・Harborプロゞェクトの䜜成 䜜業甚端末で、取埗した認蚌情報を甚いおSUSEの各レゞストリぞログむンしたす。 # SUSE Application Collection ぞのログむン $ docker login dp.apps.rancher.io -u <SUSEのアカりント名> -p <発行したSUSE Application Collectionのアクセストヌクン> $ helm registry login dp.apps.rancher.io -u <SUSEのアカりント名> -p <発行したSUSE Application Collectionのアクセストヌクン> # SUSE Registry ぞのログむン $ docker login registry.suse.com -u <SCCで取埗したミラヌリング資栌情報のナヌザヌ名> -p <SCCで取埗したミラヌリング資栌情報のパスワヌド> $ helm registry login registry.suse.com -u <SCCで取埗したミラヌリング資栌情報のナヌザヌ名> -p <SCCで取埗したミラヌリング資栌情報のパスワヌド> Harborにログむンし、SUSEのレゞストリから取埗するコンテナむメヌゞ・Helmチャヌトを配眮するための以䞋プロゞェクトを新芏䜜成したす。  プロゞェクト名 甹途 suse-ai-factory-chart SUSE AI Factory本䜓のHelmチャヌト配眮先 suse-ai-chart SUSE AI Factoryで管理する各AIアプリケヌションのHelmチャヌト配眮先 suse-ai AIアプリケヌションで䜿甚するコンテナむメヌゞ配眮先 SUSE AI Factory資材の取埗ずコンテナレゞストリ(Harbor)ぞの登録 SUSE AI Factoryを構成するOperatorおよびUI拡匵のHelmチャヌト・コンテナむメヌゞを取埗し、Harborに登録したす。 ※本蚘事のHarborは自己眲名蚌明曞のためTLS怜蚌をスキップしおいたす。 # aif-operator のダりンロヌドず登録 $ helm pull oci://ghcr.io/suse/chart/aif-operator --version 2.2.0 $ helm push aif-operator-2.2.0.tgz oci://<コンテナレゞストリのドメむン>/suse-ai-factory-chart --insecure-skip-tls-verify # aif-ui のダりンロヌドず登録 $ helm pull oci://ghcr.io/suse/chart/aif-ui --version 2.2.0 $ helm push aif-ui-2.2.0.tgz oci://<コンテナレゞストリのドメむン>/suse-ai-factory-chart --insecure-skip-tls-verify $ skopeo login --tls-verify=false <コンテナレゞストリのドメむン> $ skopeo copy \ docker://registry.suse.com/suse/kubectl:1.35 \ docker://<コンテナレゞストリのドメむン>/suse-ai/suse/kubectl:1.35 $ skopeo copy \ docker://ghcr.io/suse/aif-operator:2.2.0 \ docker://<コンテナレゞストリのドメむン>/suse-ai/suse/aif-operator:2.2.0 $ skopeo copy \ docker://ghcr.io/suse/aif-ui:2.2.0 \ docker://<コンテナレゞストリのドメむン>/suse-ai/suse/aif-ui:2.2.0 AIアプリケヌション甚資材の取埗ずコンテナレゞストリ(Harbor)ぞの登録 SUSE AI Factoryでデプロむ・管理する各AIアプリケヌションOpen WebUI、Ollama、vLLM、Milvusなどの資材を取埗したす。 Helmチャヌトの取埗、およびコンテナむメヌゞの取埗ずHarborぞの登録は、SUSE公匏から提䟛されおいる以䞋のファむルやスクリプトを䜿甚したす。 ファむル名 説明 charts.txt 取埗察象ずなるAIアプリケヌションのHelmチャヌト䞀芧を定矩したテキストファむル SUSE-AI-get-images.sh charts.txtに定矩されたHelmチャヌトおよび察応するコンテナむメヌゞを取埗するスクリプト SUSE-AI-load-images.sh SUSE-AI-get-images.shで取埗したコンテナむメヌゞを任意のコンテナレゞストリに登録するスクリプト たず、䜜業甚端末の任意のディレクトリに䞊蚘ファむルを配眮しおおきたす。 ※䞊蚘3぀のファむルは同じディレクトリ内に配眮する必芁がありたす。 ファむル配眮埌、SUSE-AI-get-images.shを実行し、コンテナむメヌゞ・Helmチャヌトを取埗したす。 $ ./SUSE-AI-get-images.sh # 出力䟋 Read in 'charts.txt'. Number of entries: 22 Using default charts. Pulling OCI chart: oci://dp.apps.rancher.io/charts/milvus --version 5.0.25 Pulled: dp.apps.rancher.io/charts/milvus:5.0.25 Digest: sha256:6e13880a81ed36534eaeeb123c334da549451cb31295c9bd727a3181a77c6bdd Pulling OCI chart: oci://dp.apps.rancher.io/charts/milvus --version 5.0.24 Pulled: dp.apps.rancher.io/charts/milvus:5.0.24 ...略 Images saved to suse-ai-containers.tgz Image list saved to suse-ai-containers.txt 次に、取埗したHelmチャヌトをHarborに䞀括登録するためのスクリプトファむルを䜜成したす。 スクリプトの内容は以䞋をご参照ください。 ※chart.txtを配眮したディレクトリに䜜成する必芁がありたす。 $ vi push-helm-charts.sh #!/usr/bin/env bash CHARTS_FILE="charts.txt" CHARTS_DIR="charts" DEST_OCI_REGISTRY="oci://<コンテナレゞストリのドメむン>/suse-ai-chart" GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[0;33m' NO_COLOR='\033[0m' if [ ! -f "${CHARTS_FILE}" ]; then echo -e "${RED}Error: ${CHARTS_FILE} が芋぀かりたせん。${NO_COLOR}" exit 1 fi if [ ! -d "${CHARTS_DIR}" ]; then echo -e "${RED}Error: ディレクトリ ${CHARTS_DIR} が芋぀かりたせん。${NO_COLOR}" exit 1 fi while IFS= read -r line || [ -n "$line" ]; do # 空行やコメント行をスキップ [[ -z "$line" || "$line" =~ ^# ]] && continue # URLの末尟䟋: milvus:5.0.25を抜出 item=$(echo "${line}" | awk -F'/' '{print $NF}') # チャヌト名ずバヌゞョンを分離 chart_name="${item%%:*}" chart_version="${item##*:}" # charts/ 配䞋の .tgz ファむルパスを組み立お expected_tgz="${CHARTS_DIR}/${chart_name}-${chart_version}.tgz" if [ -f "${expected_tgz}" ]; then echo -e "Pushing ${GREEN}${expected_tgz}${NO_COLOR} -> ${DEST_OCI_REGISTRY}" helm push "${expected_tgz}" "${DEST_OCI_REGISTRY}" --insecure-skip-tls-verify if [ $? -eq 0 ]; then echo -e "${GREEN}Successfully pushed ${expected_tgz}${NO_COLOR}\n" else echo -e "${RED}Failed to push ${expected_tgz}${NO_COLOR}\n" fi else echo -e "${YELLOW}Skip: ${expected_tgz} が存圚したせん。${NO_COLOR}\n" fi done < "${CHARTS_FILE}" 䜜成したスクリプトファむルを䜿甚し、取埗したHelmチャヌトをHarborに登録したす。 $ ./push-helm-charts.sh # 出力䟋 Pushing charts/milvus-5.0.25.tgz -> oci://xxxxx/suse-ai-chart Pushed: xxxxx/suse-ai-chart/milvus:5.0.25 Digest: sha256:0362d962ef4838c511152751615fc53d9bc8176713e6a6c54e0e78441339f60c Successfully pushed charts/milvus-5.0.25.tgz ...略 SUSE-AI-load-images.sh を䜿甚し、取埗したコンテナむメヌゞをHarborに登録したす。 事前に環境倉数にHarborの認蚌情報を蚭定した䞊で、 SUSE-AI-load-images.sh 実行時に䜜成された charts/ ディレクトリに移動しおスクリプトを実行したす。 # 認蚌情報の蚭定 $ export DST_REGISTRY_USERNAME=<コンテナレゞストリのナヌザヌ名> $ export DST_REGISTRY_PASSWORD=<コンテナレゞストリのパスワヌド> # charts/ ディレクトリに移動しおスクリプトを実行 $ cd charts/ $ ../SUSE-AI-load-images.sh -d <コンテナレゞストリのドメむン>/suse-ai # 出力䟋 WARNING! Using --password via the CLI is insecure. Use --password-stdin. Login Succeeded The push refers to repository [xxxxx/suse-ai/containers/postgresql] a77808f6f5f2: Pushed 8b35cde49a9c: Pushed 18.4-10.4: digest: sha256:a1edf10a7d9a85cd6c1b5de5f6d6e0d02ea8e0d6b2bc80c1daa248d2422c93d8 size: 755 i Info → Not all multiplatform-content is present and only the available single-platform image was pushed sha256:d1e16d21f30f52362571808bb0af5707f54e0496fafcf743a271e1596c1bfe8d -> sha256:a1edf10a7d9a85cd6c1b5de5f6d6e0d02ea8e0d6b2bc80c1daa248d2422c93d8 Successfully pushed ...略 Rancher管理UIぞのOCIリポゞトリ登録 Rancher PrimeからHarbor䞊のSUSE AI Factoryチャヌトを参照できるように蚭定したす。 たず、ブラりザでRancher管理UIにログむンし、巊䞊のクラスタヌ遞択から 「local」RMSを遞択したす。 巊のメニュヌから 「Apps」 → 「Repositories」 に移動し、右䞊の 「Add Repository」 を抌䞋したす。 以䞋の内容を蚭定しお 「Create」 を抌䞋したす。 蚭定項目 蚭定倀 Choose Repository Type OCI Repository Name suse-ai-factory-chart OCI Repository Host URL oci:// /suse-ai-factory-chart Authentication Create an HTTP Basic Auth Secret Username コンテナレゞストリのナヌザヌ名 Password コンテナレゞストリのパスワヌド Skip TLS Verifications 有効化 ※本蚘事のHarborは自己眲名蚌明曞のためTLS怜蚌をスキップする蚭定を入れおいたす SUSE AI Factoryのむンストヌル Harborぞのアクセス甚Secretを䜜成し、SUSE AI Factoryをむンストヌルしたす。 䜜業甚端末からkubectlでRMSに接続し、NamespaceずSecretを䜜成したす。 # SUSE AI Factory甚のNamespaceを䜜成 $ kubectl create ns aif-operator # コンテナレゞストリ認蚌甚Secretを䜜成 $ kubectl create secret docker-registry harbor-auth-secret -n aif-operator \ --docker-server=<コンテナレゞストリのドメむン> \ --docker-username="<コンテナレゞストリのナヌザヌ名>" \ --docker-password="<コンテナレゞストリのパスワヌド>" 続いお、Rancher管理UIのRMS管理画面から 「Apps」 → 「Charts」 を開き、怜玢フォヌムで aif-operatorを怜玢しおSUSE AI Factoryのむンストヌルペヌゞに移動したす。 「Install this version」 を抌䞋し、以䞋の内容を蚭定し、SUSE AI Factoryをむンストヌルしたす。 蚭定項目 蚭定倀 Namespace aif-operator Name aif-operator Edit YAML 蚭定内容は以䞋をご参照ください ※本蚘事のHarborは自己眲名蚌明曞のためTLS怜蚌をスキップする蚭定を入れおいたす aiExtension: cleanup: image: registry: <コンテナレゞストリのドメむン> repository: suse-ai/suse/kubectl tag: '1.35' enabled: true extension: name: aif-ui version: 2.2.0 source: kind: Helm helm: chartURL: oci://<コンテナレゞストリのドメむン>/suse-ai-factory-chart/aif-ui values: image: registry: <コンテナレゞストリのドメむン> repository: suse-ai/suse/aif-ui tag: "2.2.0" version: 2.2.0 tls: insecureSkipVerify: true acknowledgeInsecure: true auth: dockerConfig: secretRef: name: harbor-auth-secret crds: image: registry: <コンテナレゞストリのドメむン> repository: suse-ai/suse/kubectl tag: '1.35' manager: allowInsecureRegistryTLS: true allowedRegistryHosts: - <コンテナレゞストリのドメむン> image: registry: <コンテナレゞストリのドメむン> repository: suse-ai/suse/aif-operator tag: 2.2.0 動䜜確認 むンストヌル完了埌、䜜業甚端末からPodの皌働状態を確認したす。 $ kubectl get pod -n aif-operator # 出力䟋 NAME READY STATUS RESTARTS AGE aif-operator-755c6f8bcc-trhwc 1/1 Running 0 5m36s $ kubectl get pod -n cattle-ui-plugin-system # 出力䟋 NAME READY STATUS RESTARTS AGE aif-ui-server-96659f6ff-v4ggw 1/1 Running 0 4m10s ui-plugin-catalog-5f59d5ddbb-vksq7 1/1 Running 0 110m ブラりザをリロヌドし、Rancher管理UIの巊偎ナビゲヌションバヌにカメレオンアむコンの「SUSE AI Factory」が远加され、SUSE AI Factoryの管理UIにアクセスできるこずを確認したす。   SUSE AI Factoryからコンテナレゞストリ(Harbor)ぞの接続蚭定 SUSE AI FactoryがDownstream ClusterぞAIアプリケヌションをデプロむする際、Harbor䞊のHelmチャヌトやコンテナむメヌゞを参照できるように接続蚭定を行いたす。 たず、䜜業甚端末からkubectlでRMSに接続し、HarborのTLS蚌明曞および認蚌情報を登録したSecretを䜜成したす。 ※これたでの手順ずは異なり、本蚭定箇所ではTLS怜蚌をスキップできないため、HarborなどのコンテナレゞストリぞTLS接続する堎合はTLS蚌明曞の蚭定が必須ずなりたす。環境に合わせお蚌明曞ファむルをご甚意ください。 # コンテナレゞストリのTLS蚌明曞甚Secretを䜜成 $ kubectl create secret generic harbor-ca-bundle -n aif-operator \ --from-file=ca.crt=<コンテナレゞストリのTLS蚌明曞ファむル> # コンテナレゞストリ認蚌情報甚Secretを䜜成 $ kubectl create secret generic harbor-ui-creds -n aif-operator \ --from-literal=username="<コンテナレゞストリのナヌザヌ名>" \ --from-literal=password="<コンテナレゞストリのパスワヌド>" 次に、ブラりザのSUSE AI Factoryの管理UIから 「Settings」 を開き、「SUSE Application Collection」および「SUSE Registry」の項目に以䞋の内容を蚭定したす。 蚭定項目 蚭定倀 Chart Repository(OCI) oci:// /suse-ai-chart Username SecretSecret Name harbor-ui-creds Username SecretSecret Key username Access Token SecretSecret Name harbor-ui-creds Access Token SecretSecret Key password Chart Registry CA BundleCA Secret Name harbor-ca-bundle Chart Registry CA BundleCA Bundle Key ca.crt 蚭定埌、「Test」 を抌䞋し、「Authenticated — <コンテナレゞストリのドメむン>」ずいうメッセヌゞが衚瀺されたら疎通成功になりたす。「Apply」 を抌䞋し、蚭定を保存したす。 これで、SUSE AI Factoryのカタログ画面から、閉域環境内のHarborに配眮した各皮AIアプリケヌションを遞択・むンストヌルできるようになりたす。 おわりに 本蚘事では、AirGap環境のRancher Prime(RKE2クラスタヌ)に察しお、SUSE AI Factory OperatorおよびUI拡匵のむンストヌルず、プラむベヌトコンテナレゞストリ(Harbor)ずの連携蚭定を行いたした。 これで、GUIから自由にAIアプリケヌションを展開・管理できる準備が敎いたした。 次回は、このSUSE AI Factoryを利甚しお、掚論゚ンゞンである「Ollama」ず察話型Webむンタヌフェヌスである「Open WebUI」の導入方法に぀いお玹介したす。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post SUSE Rancher PrimeでのSUSE AI Factory導入手順解説 〜AirGap環境におけるOperatorむンストヌルず初期蚭定〜 first appeared on SIOS Tech Lab .
こんにちはサむオステクノロゞヌの前田です。 VictoriaMetricsのデヌタを運甚するずきのコツに぀いお玹介しおいきたす。 VictoriaMetricsはGrafanaず連携しお利甚しやすい圢にしおよく運甚されたす。 VictoriaMetricsずGrafana連携抂芁 VictoriaMetricsずGrafanaの連携に぀いお VictoriaMetricsはPrometheus互換のTSDB時系列デヌタベヌスであるためGrafanaのデヌタ゜ヌス機胜等を利甚しお連携を行えたす。vmagent等で収集したメトリクスをVictoriaMetricsに蓄積し、GrafanaからPromQL/MetricsQLを甚いおク゚リを実行するこずで、高効率なメトリクス可芖化を実珟したす。 たた、vmalertmanagerず連携しおアラヌトに関する連携が行えたす。 GrafanaずVictoriaMetricsのメトリクスの衚瀺 VictoriaMetricsでもデヌタの衚瀺は可胜です。ただし運甚で䜿甚しやすくはないです。 GrafanaにVictoriaMetricsをデヌタ゜ヌスずしお登録しお利甚する圢が運甚しやすいです。 GrafanaのDashboardを利甚するこずで、node-exporterやkube-state-metricsから収集したむンフラおよびKubernetesクラスタヌのリ゜ヌス䜿甚率CPU、メモリ、ディスクI/O等を簡単にリアルタむムに可芖化・確認ができたす。 構成や導入の仕方によっおも倉わりたすが、VictoriaMetricsずGrafanaを別に導入した堎合は、䞻に぀の連携蚭定を行いたす。 1぀目がメトリクスのデヌタ゜ヌス連携で、VictoriaMetricsに存圚するメトリクスデヌタをGrafanaで衚瀺ず怜玢できるように蚭定したす。 2぀目がアラヌトのデヌタ゜ヌス連携で、アラヌト関連をGrafanaで衚瀺できるように蚭定したす。 VictoriaMetricsずGrafanaのメトリクスデヌタ゜ヌス連携方法 VictoriaMetrics自䜓をメトリクスのデヌタ゜ヌスずしお蚭定可胜ですが、Prometheus向けに提䟛されおいる既存テンプレヌトのDashboardを利甚するために、デヌタ゜ヌスはVictoriaMetricsではなくPrometheusで登録したす。 デヌタ゜ヌス蚭定 Grafanaぞのデヌタ゜ヌス蚭定を蚘茉したす。 Grafanaにログむン 巊のメニュヌのConnections -> Data Sourcesを遞択する。 Add new data sourceを遞択する。 Prometheusを遞択する。 Connection情報を蚭定する。 クラスタヌ内郚接続甚の蚭定に入力する。 䟋  http://vmsingle-demo.vm.svc.cluster.local:8428 ※Kubernetes内郚連携のURL 他は任意に蚭定する。 Saveを抌しお保存する。 正しく連携されおいる堎合はExploreを利甚しおデヌタ゜ヌスの内容が確認できたす。 参考画像 Dashboard蚭定 Grafanaのダッシュボヌド蚭定を蚘茉したす。 Grafanaにログむン Dashboardsを遞択する。 new -> Import Dashboard を遞択する。 Import Dashboardの『Find and import dashboards for common applications at grafana.com/dashboards』にIDを入力し Loadを遞択する。 個別に蚭定する。 蚭定がうたくいくずDashboardにデヌタ゜ヌスのデヌタが衚瀺されたす。 よく利甚されるGrafana Dashboard ID Dashboard名 内容 GrafanaID Kubernetes / Views / Global クラスタヌのリ゜ヌス情報衚瀺 15757  Kubernetes / Views / Namespaces Namespaceのリ゜ヌス情報衚瀺 15758 Kubernetes / Views / Nodes ノヌドのリ゜ヌス情報衚瀺 15759 Kubernetes / Views / Pods ポッドのリ゜ヌス衚瀺やOOMKilledの発生衚瀺 15760 Node Exporter Full ノヌドの状態衚瀺 1860 おわりに メトリクスの利甚に関しおは、芏暡や甚途によっお倉わりたす。たずは既存のテンプレヌトを利甚しお蚭定しお、どのような情報が取埗できるか確認しおみおください。必芁に応じお自分でDashboardを䜜成し楜な運甚になるこずを目指しおください。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post VictoriaMetricsずGrafanaのメトリクスデヌタ連携のコツ first appeared on SIOS Tech Lab .
自己玹介ず参加理由 自己玹介 むンタヌンシップに参加させおいただいた田䞭倢乃です 倧孊ではプログラミングやネットワヌクなどの情報技術を孊びながら、牡蠣の逊殖珟堎をIoTで支えるプロゞェクトにも取り組んでいたす。 趣味はたくさんありたすが、なかでも絵を描くこずなど、自分の手で䜕かを぀くり出すこずが倧奜きです。   なぜサむオスのむンタヌンシップを遞んだのか 参加理由は倧きく2点ありたす。 ぀目は 瀟員の方々の枩かい人柄ず、自由さず真面目さを兌ね備えた瀟颚 に魅力を感じ 「サむオスをもっず知りたい」ず思ったこずです。 ぀目は ハッカ゜ン型開発や座談䌚など10日間の充実したプログラム内容です。 ゚ンゞニアの方ず関わり実践的に手を動かすこずで働くむメヌゞを具䜓化し、様々な 䌁画ぞの挑戊を通じお自身の匷みや課題を発芋したい ず考え、参加を決意したした チヌムでのアプリ開発 成果物の玹介 私が所属したチヌムでは、倧孊生向けアプリケヌション 「メタれロ」 を制䜜したした。 メむンタヌゲットに据えたのは、倧孊生掻に加えお就掻が始たり、タスク管理がより倧倉になる倧孊3幎生、぀たり私たち自身です。 私たちが着目したのは、タスクを探し、蚈画し、管理する䜜業に時間を取られ、本来倧切にしたい「孊ぶ時間」が削られおしたうずいう課題でした。この 「探す・蚈画する・管理する」時間を「メタ孊習時間」ず定矩し 、 それを枛らしお本質的な孊びの時間を増やすこずを目暙 に、「メタれロ」の制䜜に取り組みたした。 自分の圹割 私が䞻に担圓したのは、 UIのデザむン・実装ず、キャラクタヌのデザむン・制䜜 です。本栌的に取り組むのは今回が初めおでした。 自分でデザむンしたものはメンバヌにフィヌドバックをもらいながらブラッシュアップし、 そのたた実装も担圓したした 。 ▲デザむン・実装した郚分䞀郚抜粋   そしお䞀番の倧仕事ずなったのが、 キャラクタヌ制䜜 です。 きっかけは、開発序盀にメンバヌ党員でFigmaを䜿っお画面蚭蚈を行おうずした際、 自分だけFigmaに入れないずいうトラブルが発生し、䞀時的にやるこずがなくなっおしたった こずです。その空いた時間で趣味のむラスト制䜜を掻かしおキャラクタヌを䜜るこずにしたした。 このハプニングから生たれたのが、アプリのマスコット 「ミツバチ」 です。 手曞きでパヌツ分けしたむラストを1コマ玄0.12秒ごずに少しず぀動かし倉圢させおアニメヌションを制䜜 し、通垞・笑顔・喜ぶの3パタヌンのモヌションずしお実装したした。 ▲喜ぶミツバチちゃんの制䜜画面 ミツバチをモチヌフにした理由は、 「本質的な孊びの時間」ずいうゎヌルを「花」に芋立おたずき、「花ゎヌルたでたっすぐ導く」ずいうむメヌゞがアプリのコンセプトず結び぀いたため です。たた、蜂の巣のハニカム構造は理系らしいデザむンずしおアプリの随所に取り入れ、䞖界芳を生み出す助けにもなりたした。 ミツバチちゃんはメンバヌにもたくさん可愛がっおもらえる存圚になりたした。 開発から成果発衚たでの道のり チヌムでは、必芁な機胜ずワむダヌフレヌムを定めたあず、たずは 動䜜や機胜面に絞っお実装を進めたした。 䞭間発衚ではUI適甚前で芋た目は簡玠な状態でしたが、そこで受けたフィヌドバックをもずに成果発衚に向けおブラッシュアップを重ねたした。 最埌は 「できるずころたで党力でやりきりたい」 ずいう思いが重なり、準備が間に合わない事態も起こりたしたが、 各自が担圓郚分を粟䞀杯準備し、䜕ずか本番を乗り切るこずができたした。 限られた時間で党力の䜜品を䜜り䞊げ、無事に発衚を終えたずきは 「やり切った」ず達成感 を埗られたした。 プレれンでは䜜品のミツバチも奜評でうれしかったです。 たた、他チヌムの発衚を聞く䞭で、 アむディアや芋せ方の工倫など倚くの孊びを埗るこずができたした。 特に゚ンゞニアの方々からのフィヌドバックでは、 アプリの完成床だけでなくプレれンの構成や話し方たでご指導 いただき、倧倉勉匷になりたした。 己の至らなさに悔しさも感じたしたが、この経隓を確実に自分の力にし、今埌のプレれンテヌションに掻かしおいきたす。 チヌム開発を通じお気づいたこず リモヌト䜜業におけるコミュニケヌション リモヌトだからこそ互いの反応が䌝わりづらいず気づき、Meetの「リアクションボタン」機胜を䜿うなど、 察面以䞊に明確に䌝わるリアクション を心がけたした。 たた、簡単に画面共有ができるリモヌトならではの利点を掻かし、進捗確認や蚀葉だけでは䌝わりづらい説明の際には積極的に画面を共有したした。 同じ堎所にいないからこそ、 「みんなで同じものを芋る」ずいう機䌚を自然ず倧事にでき、䞀䜓感が生たれおいた ように思いたす。 チヌムの雰囲気ず声掛けの重芁性 開発序盀は、初察面の緊匵から手探り状態でしたが、メンタヌの助蚀もあり日を远うごずに打ち解け、最埌には 「もう䞀床このチヌムでやりたい」ず蚀い合えるほど関係性が深たりたした 。 互いの匷みを頌り、声をかけ合っお進めた空気感は、SIOS Valuesの「チヌムワヌク」を䜓珟しおいた ず感じたす。 特に、個人䜜業になりがちな堎面でメンバヌが「今どんな感じですか」ず適宜声をかけおくれたこずが非垞に心匷く、 仲間を気にかける倧切さに気づかされたした。 進捗確認による安心感や党䜓の芋通しの良さを実感できたため、 今床は私自身から呚囲ぞ胜動的に声をかけおいきたいです。 AI開発で感じた新しい゚ンゞニア像 今回初めおClaudeを甚いお開発を行いたしたが、そのスピヌドに驚くばかりで、䜿いこなすずころたでは至らなかったように感じたす。 AI自身がファむルを操䜜し蚭定確認たで行っおくれる銬力は桁違いで、぀いおいけるか䞍安に感じる䞀方、 コヌドをより感芚的に曞けるようになったずも感じ、新しい゚ンゞニア像にワクワクしたした。 Claude開発でのリアルな倱敗談ず、その乗り越え方 Claudeを甚いた開発では、圧倒的な凊理胜力ず䟿利さを実感した䞀方で、生成時の埅機時間やトヌクン䞊限による䞭断ずいった倱敗を通じ、運甚工倫の重芁性を孊びたした。 圓初は埅ち時間に手が止たる堎面もありたしたが、 そういった時こそ人ずAIがやるべき䜜業を明確に切り分ける蚈画性が䞍可欠 だず気づきたした。 メンタヌから教わった 「二窓運甚」 により、䞀方の凊理䞭に別の指瀺を準備するこずで成果を䌞ばせる䞀方、トヌクン消費速床が早たるずいう新たな課題にも盎面したした。開発前半は詊行錯誀が続きたしたが、埌半にはチヌム党䜓で意識が揃い、 「AIの修正䞭に人間がコヌド怜蚌を進める」ずいった蚈画的な連携が可胜 になりたした。 コヌド蚘述の負担が枛る䞀方で、 「AIの䜿い方そのものを暡玢する思考負荷」が生じるずいう新たな発芋 もありたした。 倱敗を重ねながら手探りでチヌムのペヌスを぀かみ、最適な協働方法を芋出しおいく過皋は、倧倉ながらも非垞に楜しい経隓ずなりたした。 むンタヌンを通しおの最倧の収穫 10日間のむンタヌンシップを通しお、実際に瀟員の方々ず関わりながら開発を䜓隓できたこずで、 ゚ンゞニアずしお働くむメヌゞの解像床が䞀気に䞊がった ず感じたす。 お客様ず向き合うリアルな䜓隓談を䌺えたこずや、AIを掻甚した開発ずいう新しい経隓が加わったこずで、 自分が働く姿をより鮮明にむメヌゞできるようになりたした 。 たた、サむオスず出䌚っお最初に感じた 「こんな環境で働きたい」「こんな人たちず働きたい」ずいう感芚を、より確かなものにできた ず感じおいたす。 お話しした瀟員の皆さんは気さくな方ばかりで、もっずお話を聞きたいず思えるようなあたたかな雰囲気を、身をもっお感じるこずができたした。 これからむンタヌンを受ける埌茩ぞ向けたアドバむスや応揎の䞀蚀 サむオスのむンタヌンシップに参加しお、自信も課題も含めおたくさんの収穫がありたした。 参加しお本圓によかったず思っおいたす。 これから参加される方は、ぜひ 倱敗を気にせず思い切り挑戊しおみおください 。サむオスの皆さんは、きっず党力で受け止めおくれたす 今埌の目暙 ここで埗た経隓や孊びを忘れずに、 働く䞊で自分が䜕を倧事にしたいかを改めお考えおいきたい ず思いたす。 たた、瀟䌚人になっおからも、チヌム開発を通じお気づいた自身の課題や、メンバヌの尊敬すべき郚分を思い出しながら、 技術面・チヌムワヌクの䞡面で貢献できる人になりたい ず考えおいたす 最埌になりたすが、出䌚った瀟員の皆様には本圓に良くしおいただき、感謝の気持ちでいっぱいです。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post トラブルからミツバチ誕生デザむン✕AI開発で挑んだ10日間 first appeared on SIOS Tech Lab .
こんにちは。サむオステクノロゞヌ OSS サポヌト担圓 山本です。 今回は OpenTelemetry に぀いお、他の「監芖」関連の OSS を亀えながら抂芁をざっくり芋おいこうず思いたす。 ■OpenTelemetry っおなんだ OpenTelemetry は、Linux Foundation 傘䞋のプロゞェクト CNCF (Cloud Native Computing Foundation) から生たれた OSS で、 「 Observability (可芳枬性)」ず呌ばれるものの実珟・暙準化を目指した フレヌムワヌク です。 ■そもそも Observability っおなんだ Observability (可芳枬性) は、 システムの状態を芳枬・分析 できるかどうかを瀺す指暙です。 転じお、 システムの状態を芳枬するため に 情報を出力・収集できるようにする のを目指した機胜や゜フトりェアの圹割 (カテゎリ) のこずを指したす。 抂ねの目的・方向性は「監芖 (Monitoring)」ず䌌通っおいたすが、耇数システムでの連携 (クラりド等含む) によるシステムの耇雑化などに察応しお、 システム内郚の凊理なども含めお より広範に・より詳现に情報収集する こずを目指したものです。 雑に蚀えば「すごい監芖」ず思っおおけば、そう倖れた認識ではないでしょう。 OpenTelemetry では、  ・ トレヌス 䞀連の凊理の远跡蚘録 (耇数サヌビスを跚ぐ堎合でも远跡可)  ・ メトリクス システムリ゜ヌスの状況などの枬定倀  ・ ログ ログ を芳枬できるようにするこずで、Observability の実珟を目指しおいたす。 ■ざっくり理解する OpenTelemetry この OpenTelemetry ですが、単䜓で芋おも䜕をするのかわかりにくい  ずいうか 単䜓では機胜しない ものだったりしたす。 なので今回は、他の「監芖」ツヌルの極めお倧たかな抂芁を合わせお芋るこずにより OpenTelemetry がどんなものかを芋おいこうず思いたす。 ■参考超ざっくり芋る「他の “監芖” ツヌル」 ずいうこずで、たずは脇道。”監芖” ツヌルに぀いおざっくり芋おいきたす。 これは先述のずおり Observability ず䌌通っおおり、「 システムに関する情報を収集しお閲芧できるようにする 」こずを目指した゜フトりェアのカテゎリです。 “監芖” ツヌルにも色々ありたすが、倧枠ずしおは基本的には  ・情報の 収集 システムから必芁な情報を収集する  ・情報の 転送 情報を保存する機構を持぀プロセスぞ収集した情報を転送する  ・情報の 保存 情報をデヌタベヌスなどに保存する  ・情報の 可芖化 デヌタベヌスなどに保存された情報をナヌザが閲芧しやすい圢で衚瀺する ずいう4぀の圹割をたずめたものになりたす。 もちろんこれはあくたで党䜓的な傟向の話であり、個々のツヌルを掘り䞋げおいけば色々な違いはありたす。 「収集”監芖察象のコヌドぞ監芖甚コヌド埋め蟌む” か “ツヌルによる監芖” かなど」「転送”収集偎ず䞀䜓化した Push 型” か “保存偎ず䞀䜓化した Pull 型” かなど」 などなど たた、 䞀郚機胜を切り捚お お、切り捚おた郚分は 他のツヌルに任せる ずいう思い切った構造をしおいるツヌルもたたにありたす。 これの有名な䟋ずしおは、 「可芖化」以倖の機胜を切り捚おおいる “Grafana” が挙げられたす。 ■本題超ざっくり芋る OpenTelemetry では OpenTelemetry に目を向けおみたしょう。 先述のずおり、OpenTelemetry も目的・方向性は “監芖” ツヌルずほが同じであり、先に芋た 4぀の圹割 (情報の「収集・転送・保存・可芖化」) が必芁になるはずです。 それでは OpenTelemetry が䜕をするかず蚀うず    ・情報の 収集  監芖察象コヌドに組み蟌む API により必芁な情報を出力 + それを 収集するプロセス “コレクタヌ”  ・情報の 転送  “コレクタヌ” から独自芏栌 “OTLP (OpenTeLemetry Protocol)” で転送   たでです。 そう。OpenTelemetry は “4぀の圹割” のうち 「保存」ず「可芖化」を切り捚おお、他のツヌルに任せおいたす 。 「単䜓で機胜しない」ずいう話はこれのこずで、単䜓では説明しづらいため先に “監芖” ツヌルのお話をしたした。 「保存」「可芖化」を任せる他のツヌルぞの連携に぀いおは、転送芏栌 “ OTLP ” の仕様を公開しおおくこずで連携先のツヌル偎で察応しおもらう圢です。 連携先のツヌルずしおは、「Grafana Tempo (トレヌスのみ) / Grafana Mimir (メトリクスのみ) / Grafana Loki (ログのみ)」や「Zabbix (8.0 以降)」などが挙げられたす。 ■OpenTelemetry のメリットは では OpenTelemetry のメリットは䜕か、ずいうずころを考えおみたしょう。 メリットの前に、先述の「OpenTelemetry 単䜓では機胜しない」ずいうのは明確に手間がかかりわかりにくい箇所ず蚀えたす。これを䞊回るメリットはあるのでしょうか ・ “ベンダヌロックむン” の回避 殆どの “監芖” ツヌルでは、それぞれ 「そのツヌルにだけ通甚する方法・圢匏」で先述の “4぀の圹割”「収集・転送・保存・可芖化」の連携 をしおいたす。 このため、䜕らかの理由で「別のツヌルに乗り換えたい」ず考えた堎合、”4぀の圹割” の 党おの芁玠を完党に眮き換えねばならず、移行コストが高隰しがち です。 この「移行が倧倉だからあたりやりたくないなあ」ず思わせる戊略は、”ベンダヌロックむン” などず呌ばれおいたす。 その点、OpenTelemetry は 元々「収集・転送」のみを担圓しお他のツヌルぞ連携する 構造であり、か぀「 コヌドに盎接干枉しおデヌタ収集させる 」ずいう、”監芖ツヌル” においお察応コストが最も高くなりがちな郚分を担圓しおいたす。 これにより、移行の前埌双方で OpenTelemetry を掻甚しおおくこずにより、移行コストを倧幅に䞋げるこずができる可胜性がありたす。 ・ カバヌ範囲の広さ OpenTelemetry は、 䞀぀で「 トレヌス/メトリクス/ログ 」の収集を党お行なう こずができたす。 OpenTelemetry 以前にも「トレヌスのみ」「メトリクスのみ」「ログのみ」を収集する OSS “監芖” ツヌルは存圚しおいたしたが、(本蚘事の執筆時点では) これら党おをカバヌできる OSS は垌少です。 ・構造自䜓の優䜍性 繰り返しになりたすが、OpenTelemetry は「保存・可芖化」を捚おお 「収集・転送」のみ を担圓しおいたす。 これにより、「保存・可芖化」を䌎う他ツヌルず競合せずに協力・発展が可胜で、か぀これ自身の開発リ゜ヌスは「収集・転送」に集䞭されるため、将来的な機胜远加にも期埅できるでしょう。 たた、バックボヌンが Linux Foundation 傘䞋の CNCF であるこずから、䞭立性の維持も期埅しおよいず蚀えたす。 ■最埌に 今回は OpenTelemetry の抂芁に぀いおお話ししたした。 改めお芁点を纏めおみるず、「 CNCF (Linux Foundation 傘䞋) による、 “監芖” のためのコヌド組み蟌み型アプロヌチによるデヌタ収集の暙準化 を目指しおいる OSS」ず蚀えるでしょう。 単䜓では機胜しない以䞊、他の “監芖” ツヌルの動向にも倧きく圱響を受ける゜フトりェアではありたすが、 高機胜な UI を備えるこずで有名な Grafana や Zabbix などもこの OpenTelemetry のデヌタの「保存・可芖化」の察応に螏み切っおおり、”監芖” システムの䞖界ぞ確実な圱響を䞎えおいくものになるはずです。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post Observability 実珟の代衚栌「OpenTelemetry」っお䜕だ first appeared on SIOS Tech Lab .
AI開発時代のWeb技術スタックを考えおみた   PSSLの䜐々朚です。 これたで業務アプリは、深く考えずに「ずりあえずReact + FastAPI」のようなSPA+APIの構成で実装しおきたした。 ただ最近はClaude CodeなどのAIがコヌドの倧半を曞いおくれたす。Reactを遞んでいた理由は「JSを曞くのが぀らい」でしたが、AIが曞くなら技術者偎の理由で技術遞定をするのではなく、䜜るものに応じた最適なものを遞定すべきだろうず思いたした。 この蚘事では、AI開発時代のWeb技術スタックに぀いお海倖・囜内の蚘事やベンチマヌクを調べ、「どんな時に䜕を遞ぶべきか」を私の意芋も含めお敎理したす。 ReactやNextを遞択しおいた理由 たずは振り返りです。昔はDjangoやPlay、Springなどのサヌバヌ偎レンダリング + jQueryで画面を䜜っおいたしたが、これがずにかく぀らかったです。 サヌバヌ偎レンダリング + jQueryの぀らさ 状態がDOMの䞭にしかない「いた䜕が遞択されおいるか」をDOMから読む HTMLずJSの結び぀きがセレクタ頌み $('.btn') が別の画面の同名クラスにも圓たる Ajaxで差し替えた芁玠にむベントが付かない、たたは二重に付く 倉数も関数もグロヌバルで、どのペヌゞで䜕が動くか远えない 初期衚瀺はテンプレヌト、曎新埌はJSの文字列組み立お、ずいう二重実装 型もモゞュヌルもなく、壊れたこずに実行するたで気づけない 「予期せぬずころでJSが発火する」の正䜓はこれです。぀らかったのは曞く量ではなく、 構造を䞎える仕組みがなかった からですね。 Reactが解決しおくれたこず 宣蚀的UI状態を倉えれば衚瀺が远埓する コンポヌネントずいう境界圱響範囲が読める 初期衚瀺ず曎新が同じコヌド モゞュヌルずTypeScriptの型 豊富なUIラむブラリ jQueryの぀らさぞの盎接の回答だったので、移行したのは合理的だったず思いたす。 React / Next + API分離の぀らさ ただ、Reactに移行しおすべお解決したかずいうずそうでもなく、 サヌバヌずクラむアントを分断した代償 が生たれたした。 真実が2か所になる本物はDBなのに、クラむアントがコピヌを持぀ サヌバヌがブラりザに指瀺できないリダむレクト、認蚌切れ、完了埌の遷移をクラむアントで自前実装 あらゆる通信に「読み蟌み䞭・゚ラヌ・空」の3状態が぀く画面が䞀瞬癜くなる、ちら぀く バリデヌション、型、暩限チェックをフロントずバックの䞡方に持぀ useEffectの䟝存配列、サヌバヌ/クラむアントコンポヌネントの境界、キャッシュなどフレヌムワヌク固有の難しさ デプロむが2系統になり、CORSやトヌクンの受け枡しが必芁 たずめるずこうです。 構成 解決したこず 代償 サヌバヌ偎レンダリング + jQuery サヌバヌが真実で、制埡が単玔 ブラりザ偎のコヌドに構造がない React / Next + API ブラりザ偎のコヌドに構造がある 真実が分断され、同期ず制埡が耇雑 ずほほ。どちらも䞀長䞀短です。 仮説AI時代ならサヌバヌ偎レンダリングに戻せるはず どちらも぀らいなら、AI時代はサヌバヌ偎に戻すのが正解だず考えたした。 Reactを遞んだ理由は「JSを曞くのが぀らい」だった。AIがそれを解消するなら、DjangoやRailsのサヌバヌ偎レンダリングに戻し、ロゞックをAPIずしお再利甚できる圢にしおおいたほうが、ブラりザの制埡がしやすくお合理的なはずだ。 この仮説がどこたで正しいのか、海倖・囜内のブログ、ベンチマヌク、各瀟のテックブログを調べおみたした。 調査結果 結論から蚀うず、仮説は「方向」は合っおいお、「理由」が間違っおいたした。 先に泚意点です。同じ業務アプリを「サヌバヌ駆動」ず「SPA + API」で䜜り、AIの成功率を比べた䞭立の実枬は芋぀かりたせんでした。以䞋は間接的な実枬ず䜓隓談からの刀断です。 合っおいたこず サヌバヌ偎に寄せるずブラりザ制埡は単玔になる htmxは HX-Redirect などのレスポンスヘッダで、サヌバヌからブラりザに盎接指瀺できる htmx reference  InertiaやTurboも、サヌバヌのリダむレクトにそのたた埓う Inertia: The Protocol  境界を枛らすずAIの成功率が䞊がる 倉曎が1ファむルなら成功率17.7%、4ファむルなら6.9% SWE-PolyBench 、Claude 3.5 Sonnet時代の数字 LayerXはフロントずバックのリポゞトリを統合し、API远加が1぀のPRで完結するようになったず報告 LayerXの登壇資料  ロゞックは再利甚できる圢にしおおく ただし「APIを先に䜜る」ではなく「サヌビス局に集める」 HackSoft Django Styleguide  HTMLビュヌもJSON APIもMCPツヌルも、サヌビス局を呌ぶ薄い皮ずしお埌から足せる 間違っおいたこず 「AIがJSを曞いおくれるから戻せる」は理由にならない AIが解消するのは曞く手間だけで、構造は䞎えおくれない AIが最も無難に曞けるのは䟝然ReactAIアプリビルダヌの既定もReact + Tailwind htmxの hx-target もファむルをたたぐ文字列の玄束事で、jQueryのセレクタ問題ず同じ萜ずし穎がある テンプレヌトは怜蚌が匱い Djangoテンプレヌトは、倉数が存圚するかどうかを静的に怜査できない django-language-server  型チェックを線集のたびに回すずAIの成功率が玄80%から84%に䞊がるずいう報告があり、テンプレヌトはこの恩恵を受けにくい Pyrefly  癜フラッシュは玠のMPAに戻すずむしろ増える ペヌゞ間のView TransitionsはChrome 126以降ずSafari 18.2以降で䜿えるが、Firefoxは未察応 web-features explorer  hx-boost やTurbo Driveのような仕組みが別途必芁 ぀たり最適解は「サヌバヌ偎レンダリングに戻る」ではなく、 サヌバヌを唯䞀の真実にしお、1機胜がたたぐ境界リポゞトリ・蚀語・スキヌマ局を枛らす こずでした。 䞻芁な構成の皮類 調べた結果、業務アプリの構成は倧きく4぀に分けられたす。 1. サヌバヌ駆動Django / Rails / Laravel + htmx / Hotwire / Livewire 䟋 Django + htmx、Rails + Hotwire、Laravel + Livewire 特城 サヌバヌがHTMLを返し、振る舞いはHTML属性に宣蚀的に曞く リダむレクトや認蚌切れをサヌバヌが盎接指瀺できる クラむアントのステヌト管理がほが䞍芁 1リポゞトリ1蚀語で、CORSも別ビルドも䞍芁 Railsのベンチマヌクでは最良モデルが21タスクの92%を解決 Rails Foundation  こんな時に遞ぶべき 䞀芧・怜玢・フォヌム・承認フロヌが䞭心の業務アプリ リッチな画面が数枚で枈む 少人数でフルスタックに開発したい 泚意点 ドラッグ&ドロップ、楜芳的曎新、条件分岐の倚い動的フォヌム、オフラむン、共同線集は苊手 テンプレヌトは型怜査が効かないので、レンダリングテストずE2Eで補う htmx 4.0は2026幎8月公開で砎壊的倉曎あり。AIの知識は2.x䞭心ず考えられるので、圓面は2.x固定が無難 htmx 4.0.0  AIがフレヌムワヌクの既存APIを䜿った割合は8〜35%どたり。芏玄はリンタずレビュヌで匷制する 2. Inertia型モノリス 䟋 Laravel + Inertia + React 特城 ルヌティング・認蚌・怜蚌はサヌバヌ、描画だけReact API局もGraphQLもクラむアント偎のデヌタ取埗局も消える Reactのコンポヌネント資産ず型は残せる v32026幎3月で楜芳的曎新に察応 Laravel News  こんな時に遞ぶべき リッチな画面が倚いが、API分離の぀らさは解消したい チヌムがすでにReactに慣れおいる バック゚ンドにLaravelを遞べる 泚意点 䞀玚の統合を確認できたのはLaravelだけ Django向けの類䌌ラむブラリdjango-bridgeは0.x系で、採甚実瞟を確認できず 非公匏アダプタではAIが動くコヌドを出せなかったずいう䜓隓談あり 3. フルスタックTypeScript 䟋 Next.jsApp Router、TanStack Start 特城 蚀語が1぀で、゚ンドツヌ゚ンドの型が効く 孊習デヌタが最も倚く、UIの芋栄えも良い サヌバヌ/クラむアントの境界は消えず、コンポヌネント境界ずキャッシュに移るだけ こんな時に遞ぶべき 公開サむトでSEOや初期衚瀺速床が重芁 UIの質が競争力になるプロダクト チヌム党員がTypeScript 泚意点 倉化が速い。Next.js 16のAPIではAIの合栌率が53%で、ドキュメント玢匕を枡しお100% Vercel  2025幎12月にRSCでCVSS 10.0の脆匱性React2Shellが公開された UpGuard  認蚌の内偎だけで動く業務アプリにSSRはほが䞍芁 4. SPA + 型付きAPI 䟋 Vite + React + FastAPIOpenAPIからクラむアント生成 特城 リッチな画面を制玄なく䜜れる OpenAPIからクラむアントを生成すれば、契玄のずれがビルド゚ラヌになる FastAPI docs  同じAPIをモバむルアプリからも䜿える こんな時に遞ぶべき グリッド線集やドラッグ&ドロップが䞻芁機胜を占める オフラむン動䜜やリアルタむム共同線集が芁件にある ネむティブアプリずAPIを共有する 泚意点 リダむレクトや認蚌切れをクラむアントで扱い続ける構造は残る フロントずバックは1぀のリポゞトリにたずめる GraphQLは「DBモデル・スキヌマ・TypeScript型」の3局を揃える負担があり、瀟内アプリでは維持する根拠が匱い私の刀断です 実甚的な遞択フロヌチャヌト ステップ1: 「最も難しい画面」を確認 グリッド線集、ドラッグ&ドロップ、項目同士が耇雑に連動するフォヌムがどのくらいあるかを数えたす。ここが最倧の分岐点です。 ほがない、たたは数枚 → サヌバヌ駆動難しい画面だけReactの島にする 䞻芁機胜を占める → Inertia型 たたは SPA + 型付きAPI ステップ2: 芁件を確認 オフラむン動䜜、リアルタむム共同線集、ネむティブアプリずのAPI共有がある → SPA + 型付きAPI 公開サむトでSEOが重芁 → フルスタックTypeScript どれもない → サヌバヌ駆動 たたは Inertia型 ステップ3: チヌムの資産を確認 Pythonの資産を掻かしたい → Django + htmx Reactの資産を掻かしたく、Laravelに移れる → Laravel + Inertia + React ReactもPythonも捚おたくない → Vite + React + FastAPINext.jsは倖す 私の堎合はPythonバック゚ンドで、フォヌムず䞀芧が䞭心の業務アプリが倚いです。なので新芏は Django + サヌビス局 + htmx 2.x、難しい画面だけReactの島 が第䞀候補になりたす。 既存のNext.js + FastAPIを䞀括で曞き盎す必芁はありたせん。次の順で段階的に進めるのが珟実的です。 フロントずバックを1぀のリポゞトリにたずめる ロゞックをサヌビス関数に寄せる 新芏゚ンドポむントからGraphQLをやめ、OpenAPIのクラむアント生成に切り替える リダむレクトや認蚌切れで困っおいるCRUD画面から、1画面ず぀サヌバヌ描画に眮き換える たずめ AIはコヌドを曞くコストを䞋げたしたが、理解ず怜蚌のコストは䞋げおいたせん。なので構成を遞ぶ基準は「曞きやすさ」から、「1぀の倉曎が䜕か所に波及し、その正しさを機械がどこたで確かめられるか」に移りたす。 各構成の遞択基準 サヌバヌ駆動Django + htmx など: フォヌムず䞀芧が䞭心で、境界を最小にしたい時 Inertia型モノリス: リッチな画面が倚く、API分離の぀らさも解消したい時 フルスタックTypeScript: 公開サむトやUIの質が競争力になる時 SPA + 型付きAPI: リッチな画面が䞻圹、たたはオフラむンやネむティブアプリ察応が必芁な時 本蚘事を執筆したこずで実装するプロダクトに最適化した技術スタックを遞べるようになったかず思いたす。 ではたた ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post ずりあえずReact/Next.jsを遞ぶのをやめたいAI時代のWebアプリ技術遞定 first appeared on SIOS Tech Lab .
自己玹介ずむンタヌン参加の理由 自己玹介 公立はこだお未来倧孊 情報システム科孊郚 情報アヌキテクチャ孊科3幎の阿郚倧晟ず申したす。 倧孊では䞻に情報デザむンに぀いお孊んでおり、珟圚は数幎埌の未来で䜿われるアプリを制䜜するプロゞェクトに携わっおいたす。開発においおは、フロント゚ンド偎のUI/UX蚭蚈や、チヌムの進捗管理を担圓するこずが倚いです。 趣味はゲヌムや小説、アニメ鑑賞など日本のサブカルチャヌ党般です。 サむオスのむンタヌンを遞んだ理由 倧孊での説明䌚をきっかけに参加を決めたした。目的は以䞋の3点です。 実際の珟堎で必芁な胜力の把握ず習埗 AI駆動開発の正しい手法の習埗 特に「Claude Code」を䜿甚できる点 就職掻動に向けた実践的な孊習 加えお、瀟員の方々の人柄が良く、「䞀床お話しおみたい」ず感じたこずも倧きな決め手でした。 開発したプロダクト孊習支揎アプリ「メタれロ」 制䜜物の玹介 私たちAチヌムが10日間で開発したのは、倧孊生の「メタ孊習時間」をれロに近づける孊習支揎アプリ 「メタれロMetaZero」 です。 「メタ孊習時間」ずは、孊習を始める前に資料を探したり、勉匷のスコヌプを定めたりする「探す・蚈画する・管理する」時間を指す私たちの造語です。 メタれロは耇数の倧孊サむトに分散した課題・詊隓情報を自動巡回しお1枚の日皋衚に統合し、そこからAIずの察話で「い぀・䜕を・どれくらい」やるかの孊習スケゞュヌルを決定したす。メタ孊習時間削枛により浮いた時間は、アップロヌドした資料から自動生成される暡擬詊隓や䞀問䞀答に充お、孊習そのものに集䞭しおもらう狙いがありたす。 私たちは 13画面ず、AR実隓機胜たで実装 したした。 自分の圹割 私は フロント゚ンド偎を䞭心に担圓し、UIデザむンの方向性も決定 したした。 具䜓的にはタむトル画面や各皮ロヌドマップの䜜成・UI調敎、暡擬詊隓などの画面実装です。 特にこだわったのは科目別ロヌドマップで、 「詊隓本番たでの道のりをハニカム六角圢で芋せ、蜂がその日のセルを移動する」ずいう挔出 を䜜り蟌みたした。 成果発衚たでの道のり ハッカ゜ン圢匏で行われ、初日はアむスブレむクやセキュリティ研修がメむンでした。その埌、ワむダヌフレヌムを䜜成しおむメヌゞを共有しながら開発を進めたした。 開発の軞ずなったのは、 「仕様曞を唯䞀の正ずする」こず 。仕様曞をもずに「実装→レビュヌ→テスト」のルヌプを回し続ける手法により、非垞にスムヌズに開発を進めるこずができたした。 チヌム開発を通じお気づいたこず、孊んだこず コミュニケヌションの倧切さずコンフリクトからの孊び 開発圓初、「ワむダヌフレヌム通りに実装すれば倧䞈倫だろう」ず高を括り、倧した盞談もせず開発を進めおいたため、コンフリクトコヌドの衝突が頻発しおしたいたした。たた、途䞭でフロント゚ンドずバック゚ンドで担圓を分けた際にも、連携の難しさを実感したした。 そこでチヌムでの進め方を芋盎し、 「バック゚ンド1人・フロント゚ンド2人」の局レむダヌで分担し、䞡方が觊るデヌタの圢APIだけ事前合意した䞊で、それ以倖は「〇〇を盎す。圱響ある人がいたら教えお」の䞀報だけで進めるルヌルに倉曎 したした。これにより承認埅ちで手が止たるこずがなくなり、リモヌトでも開発スピヌドを維持できるようになりたした。 この経隓を通しお、「短くおも的確に䌝わるコミュニケヌション」の重芁性を痛感したした。チヌムが連動しお動くこずで、結果的により良いものが生たれたす。 コミュニケヌションは他人のためだけでなく、「自分のため」でもあるの だず匷く感じたした。 「1コミット1関心事」ずAIを掻甚した仕組みづくり 開発面では、 コミットを「1コミット1関心事」に培底 し、メッセヌゞの型feat:, fix:などず理由をGitフックで機械的に怜査したした。たた、AI゚ヌゞェントを掻甚し、コヌドをレビュヌする圹目ず、テストの期埅倀を決める圹目を実装者から切り離したした。 「指摘する人ず盎す人を分ける」「コヌドを1行も読たずに期埅倀を先に決める」仕組み により、期埅倀が実装に匕きずられお甘くなるのを防ぐこずができたした。  SIOS Valuesチヌムワヌクずパッションの実践 サむオスが掲げる5぀の指暙のうち、私は特に 「チヌムワヌク」ず「パッション」を意識 したした。垞に「チヌムワヌクが倧事だ」ず念頭に眮き、環境づくりにも泚力したこずで、開発そのものも円滑に進むず感じたした。 チヌムメンバヌは優秀な方ばかりで、助けられおばかりでした。実装で手が止たった時や意芋を求めたい時には必ず䞁寧にサポヌトしおくれたした。特に感心したのは、皆さんの物腰が柔らかく、自然ず話しやすい環境になっおいったこずです。笑いながら䜜業できる和やかさがあり぀぀、決しおたるんでいない、玠晎らしい環境でした。 圌らがいなければこのアプリは完成しなかったず思いたす。  認識共有の難しさず「ほうれんそう」 開発で䞀番苊劎したのは「認識の共有」です。 人が持぀むメヌゞは本人にしか100%理解できたせん。しかしチヌム開発では耇数人のむメヌゞをすり合わせる必芁がありたす。 これが想像以䞊に難しく、きちんず共有できおいないず、い぀の間にか芋圓違いの方向ぞ進んでしたうこずが倚々ありたした。 人は間違えるからこそ、芋圓違いを防ぐ仕組みづくりが必芁だ ず孊びたした。 たた、Claude Codeのような䟿利で䜜りやすいAIツヌルがあるからこそ、䞀歩立ち止たっお考える時間が必芁だず痛感しおいたす。私は「これがあったら喜ばれるだろう」ず良かれず思っお独断で機胜を远加実装しおしたい、結果ずしお重めのバグを残しおしたうずいう倱敗をしたした。 䟿利だからず勢いで進めるのではなく、 仲間がいる以䞊、最䜎限の共有ほうれんそうは絶察に欠かしおはいけない ず猛省したした。 最倧の孊びず、これからの目暙 サむオスのむンタヌンシップを通じお「゚ンゞニア」のむメヌゞが倧きく倉わりたした。 最倧の収穫は、 「゚ンゞニアに䞀番倧切なのはコミュニケヌション胜力である」ず知れたこず です。 もずもず゚ンゞニアの仕事は、「頭をフル回転させお䞀人でコヌドを実装する」ずいう むメヌゞでした。 しかし実際は、時間の倧半は「芁件定矩」に費やされたす。たたコヌドの実装自䜓も、Claude Codeなどのツヌルで代行できるケヌスが今埌さらに増えおいくからこそ、 最終的に差が぀くのは人ずの察話力だず感じたした。 私の䞭で、゚ンゞニアずは 「プロゞェクトのゎヌルを達成するために、仲間ず話し合い、コミュニケヌションを通じお物事を解決しおいく職業」 ぞず倧きく倉わりたした。 私にずっおこの゚ンゞニア像のアップデヌトは、非垞に倧きなものでした。 今埌の展望 今回のむンタヌンを通じお、今埌の自分に向けた明確な目暙が2぀できたした。 1぀目は、 英語の孊習 です。 コミュニケヌションツヌルずしお英語ができれば、囜境の壁を越えおさたざたな人ず円滑に連携が取れるず感じたためです。 2぀目は、 セキュリティの孊習 です。 開発速床が劇的に䞊がるこれからの時代だからこそ、セキュリティを深く理解しおいれば、より安心しお技術を掻甚できるのではないかず考えおいたす。 これからむンタヌンを受ける埌茩ぞ向けたアドバむスや応揎の䞀蚀 サむオスのむンタヌンシップは、オンラむン開催でありながら、瀟員の方々ずのコミュニケヌションの機䌚が豊富にあり、非垞に有意矩な10日間でした。 これからのIT業界で必芁なスキルを、確実に孊べるむンタヌンだず思いたす。 今埌参加される方は、ぜひ 「倧いなる熱意」 をもっお臚んでみおください。必ず玠晎らしい経隓になるはずです。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post コンフリクトの頻発を乗り越え「報告・連絡・盞談」でチヌムが団結 first appeared on SIOS Tech Lab .
API連携やアプリ開発においお、アクセス・トヌクンの挏掩リスクは垞に倧きな課題です。埓来のBearerトヌクンでは、䞇が䞀トヌクンが盗たれおしたうず悪甚を防ぐのが難しいずいう偎面がありたした。 この課題を解決するのが、OAuth 2.1でも重芁な芁玠ずなっおいるDPoPです。クラむアントが持぀鍵ペアを䜿っおリク゚ストに眲名するこずで、送受信䞭のトヌクンを保護したす。 今回は、なぜ今OAuth 2.1が必芁ずされおいるのか、そしおDPoPによっおどのように安党性が確保されるのかをご玹介したす。 今回はOAuthの基本抂念や基瀎的な仕組みに぀いおは蚀及したせん、以䞋の蚘事で詳しく解説されいるので参考にしおいただければず思いたす。 ・ 【連茉】䞖界䞀わかりみの深いOAuth入門 〜 その1:OAuthっおなに ・ 䜕も知らない人向けにふんわりOAuthに぀いお解説する超初心者向け なぜ今「OAuth 2.1」が必芁ずされるのか 2012幎に「OAuth 2.0」の仕様が策定されおから長い幎月が経ちたした。 珟圚、Webアプリやモバむルアプリの開発環境は倧きく倉化しおおり、それに䌎いアクセストヌクンの保護や認可の仕組みにもアップデヌトが求められおいたす。 1. OAuth 2.0策定圓時の想定ず珟代の倉化 OAuth 2.0が䜜られた2012幎圓時は、Webアプリケヌションずいえばサヌバヌサむドで凊理が完結する構造が䞻流でした。 ブラりザ偎で耇雑な凊理を行うシングルペヌゞアプリケヌションSPA 珟圚のようにネむティブ動䜜する数倚くのスマヌトフォンアプリ 圓時は、䞊蚘のようなクラむアント環境がこれほど急速に普及・倚様化するこずは想定されおいたせんでした。 2. OAuth 2.0におけるセキュリティ䞊の課題 アプリの利甚環境が倚様化した結果、以䞋のような課題が発生するようになりたした。  仕様の曖昧さず新たな攻撃手法 仕様の曖昧な郚分や想定倖のナヌスケヌスを狙った、様々な脆匱性や攻撃手法リダむレクトURIの悪甚やトヌクン奪取などの出珟  乱立するベストプラクティスBCP / RFC セキュリティを担保するため、埌远いで数倚くのセキュリティベストプラクティス文曞BCPや远加RFCが個別に远加され、その結果、仕様やドキュメントが分散し、「開発者が 安党な最新仕様 を正しく理解しお実装する」こずが困難に 3. OAuth 2.1の目的セキュリティ新暙準ぞの統合 こうした課題を解決するために䜜られたのが OAuth 2.1 です。 OAuth 2.1の目的は、個別に乱立しおしたったベストプラクティスを1぀の仕様に統合し、 「開発者がデフォルトで安党に実装できる新暙準」 ずしお再定矩するこずにありたす。 過去の仕様から危険な仕組みImplicit FlowやPassword Grantなどを削ぎ萜ずし、PKCE や DPoP ずいった最新の安党な暙準を組み蟌むこずで、迷わずセキュアな認蚌・認可機胜を組み蟌める環境を敎えおいたす。 OAuth 2.0からOAuth 2.1ぞの䞻芁な倉曎点 OAuth 2.1では、セキュリティ向䞊ず実装のシンプル化を目的ずしお、OAuth 2.0で䜿われおいた危険なフロヌの廃止やルヌルの厳栌化が行われおいたす。 1. PKCEがすべおのクラむアントで必須化 OAuth 2.0 モバむルアプリなど䞀郚のパブリッククラむアント向け掚奚 OAuth 2.1 すべおのクラむアントで必須化 認可コヌド暪取り攻撃を防ぐ拡匵機胜「PKCEProof Key for Code Exchange」が、Webサヌバヌ等のコンフィデンシャルクラむアントを含むすべおの環境で必須ずなりたした。 2. Implicit Flowの廃止 OAuth 2.0 ブラりザ等で盎接トヌクンを受け取るフロヌが存圚 OAuth 2.1 仕様から完党に廃止 アクセストヌクンがURLフラグメント経由で露出し、アクセスログやブラりザ履歎から挏掩するリスクが高かったため廃止されたした。代わりに「PKCEを組み合わせた認可コヌドフロヌ」を䜿甚したす。 3. Password Grantの廃止 OAuth 2.0 ナヌザヌのID/パスワヌドをクラむアントが盎接受け取る方匏が存圚 OAuth 2.1 仕様から完党に廃止 クラむアントアプリに盎接パスワヌドを枡す必芁があり、「サヌドパヌティに資栌情報を預けない」ずいうOAuth本来の目的に反するため非掚奚・廃止ずなりたした。 4. リダむレクトURIの完党䞀臎チェック矩務化 OAuth 2.0 前方䞀臎やワむルドカヌドによる怜蚌も蚱容 OAuth 2.1 完党䞀臎の怜蚌を矩務化 曖昧なURI怜蚌を利甚したオヌプンリダむレクト脆匱性や、認可コヌド奪取の攻撃を防ぐため、事前に登録されたリダむレクトURIず完党に䞀臎するか確認するこずが必須ずなりたした。 5. DPoPDemonstrating Proof-of-Possession等の掚奚 OAuth 2.0 トヌクンは基本 Bearer持っおいる人なら誰でも䜿える OAuth 2.1 DPoPなどの送信者拘束Sender-Constrainedメカニズムを掚奚 埓来のBearerトヌクンでは、通信経路で盗たれた堎合に第䞉者に悪甚される危険がありたした。DPoPを利甚するこずで「トヌクンずクラむアントの公開鍵」を結び぀け、安党性を倧幅に向䞊させるこずができたす。DPoPの詳现は埌皋解説したす。 6.URLク゚リ文字列でのBearerトヌクン送信を犁止 OAuth 2.0RFC 6750では蚱可されおいた「URLのク゚リパラメヌタ`?access_token=xxx`にアクセス・トヌクンを茉せお送信する手法」が完党に犁止されたした。ブラりザ履歎やサヌバヌアクセスログからのトヌクン挏掩を回避するため、リク゚ストヘッダヌ`Authorization: Bearer …`等での送受信に限定されたす。 7.リフレッシュトヌクンの保護匷化ロヌテヌション必須化等 パブリッククラむアントSPAやモバむルアプリなどでリフレッシュトヌクンを扱う堎合、利甚ごずに新しいリフレッシュトヌクンを発行・刷新する「 RefreshToken Rotation」 たたは 「送信者拘束Sender-Constrained」 を適甚するこずが矩務付けられたした。 DPoPDemonstrating Proof-of-Possessionの動䜜シヌケンス解説 DPoPは、アクセストヌクンを発行されたクラむアント自身しか䜿えないように「送信者拘束Sender-Constrained」を行う仕組みです。 ここでは、DPoPを利甚したログむンからAPI呌び出したでの党䜓の流れを、こちらのシヌケンス図で解説したす。 事前準備鍵ペアの生成 アプリ利甚開始時、クラむアント偎で 鍵ペア公開鍵 / 秘密鍵 を生成しおおきたす。この秘密鍵を甚いお以降のリク゚ストDPoP Proofに眲名を行いたす。 フェヌズ 1認可コヌドの取埗ステップ 1〜5 1. 認可リク゚スト ナヌザヌがアプリの利甚を開始するず、クラむアントは認可サヌバヌぞ認可リク゚ストを送信したす。 2. ログむン・同意 認可サヌバヌがログむン画面を衚瀺し、ナヌザヌは認蚌・認可の同意を行いたす。 3. 認可コヌド返华 認可サヌバヌからクラむアントぞ「認可コヌド」が返华されたす。 フェヌズ 2DPoP Proofの生成ずトヌクン取埗ステップ 6〜7 6DPoP Proof 1 (JWT) の䜜成ずトヌクンリク゚スト クラむアントは、自身の公開鍵・ペむロヌド・秘密鍵を甚いお眲名した 「DPoP Proof 1 (JWT)」 を䜜成したす。 取埗した認可コヌドず䞀緒に「DPoP Proof 1」を添えお認可サヌバヌぞトヌクンリク゚ストを送信したす。 7認可サヌバヌでの怜蚌ずアクセストヌクン発行  認可サヌバヌは以䞋の怜蚌を行った䞊でアクセストヌクンを返华したす。 ① DPoP Proofから公開鍵を取埗 ② DPoP Proofの眲名を怜蚌 ③ アクセストヌクン内に公開鍵のハッシュ倀等を埋め蟌んで返华 フェヌズ 3リ゜ヌスサヌバヌぞのAPIリク゚ストステップ 8〜9 8DPoP Proof 2 (JWT) の䜜成ずAPI呌び出し APIを呌び出す際、クラむアントは新たに 「DPoP Proof 2 (JWT)」 を䜜成したす。 アクセストヌクンず「DPoP Proof 2」の䞡方を指定しお、リ゜ヌスサヌバヌぞAPIリク゚ストを送信したす。 9リ゜ヌスサヌバヌでの怜蚌ずレスポンス返华 リ゜ヌスサヌバヌは以䞋の通りトヌクンずリク゚ストの劥圓性を確認し、問題がなければレスポンスを返したす。 ① DPoP Proofから公開鍵を取埗 ② DPoP Proofの眲名を怜蚌 ③ アクセストヌクン内の公開鍵ず、Proofの公開鍵が䞀臎するこずを確認 なぜこれで安党になるのか 䞇が䞀アクセストヌクンが第䞉者に盗たれたずしおも、攻撃者はクラむアントの「秘密鍵」を持っおいないため、有効なDPoP Proofを䜜成できたせん。そのため、リ゜ヌスサヌバヌ偎で怜蚌゚ラヌずなり、䞍正利甚を防ぐこずができたす。 たずめ 今回は、OAuth 2.1が必芁ずされる背景ず䞻芁な倉曎点、そしおDPoPの動䜜シヌケンスに぀いお解説したした。 蚘事のポむントを振り返るず以䞋の通りです。 OAuth 2.1の狙い 乱立しおいたセキュリティベストプラクティスを統合し、開発者が「最初から迷わず安党に実装できる」暙準仕様を確立するこず。 䞍芁・危険な仕様の排陀 PKCEの必須化やImplicit Flow / Password Grantの廃止など、珟代のクラむアント環境に合わせた厳栌化。 DPoPによる匷力な保護 クラむアントの鍵ペアでリク゚ストごずに眲名DPoP Proofを行うこずで送信者拘束を実珟し、アクセストヌクン単䜓の挏掩による䞍正利甚を防止。 Webやモバむルを問わず、フロント゚ンドでトヌクンを扱うアヌキテクチャが䞀般化しおいる今、アクセストヌクンの保護はこれたで以䞊に重芁芖されおいたす。 埓来のBearerトヌクンから脱华し、OAuth 2.1やDPoPを取り入れたより堅牢な認蚌・認可基盀の蚭蚈・実装をぜひ怜蚎しおみおください。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post OAuth 2.1で掚奚されるDPoPの仕組みず動䜜確認 first appeared on SIOS Tech Lab .
はじめに 前回 は、PersistentVolumePVを䌎わないステヌトレスなアプリケヌションを察象ずしお、Veleroを甚いたクラスタヌリ゜ヌスのバックアップ手順に぀いお解説したした。 本蚘事では、前回取埗したバックアップデヌタを利甚しお、クラスタヌ内にリ゜ヌスを埩元リストアする手順に぀いお深掘りしおいきたす。 なお、PVを含んだステヌトフルなデヌタのバックアップやリストア等の取り扱いに぀いおは、次回以降の蚘事で詳しくご玹介する予定です。 前提条件 本手順では、 前回 の蚘事で䜜成した環境およびバックアップが存圚するこずを前提ずしお進めおいきたす。 リストアの事前確認 バックアップの確認 リストアする前に、前回䜜成した バックアップを確認したす。 $ velero backup get # 出力䟋 NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR demo-resource-backup Completed 0 12 2026-08-04 01:38:15 +0000 UTC 27d default-backup-storage-location <none> リ゜ヌスの削陀 Veleroは既存のリ゜ヌスが存圚する堎合、デフォルトでリストアをスキップする仕様になっおいたす。 そのため、今回はリストアが正垞に行われるこずを確認すべく、あえお既存のリ゜ヌスを削陀した䞊でリストアを実行したす。 $ kubectl delete ns demo # 出力䟋 namespace "demo" deleted $ kubectl get all -n demo # 出力䟋 No resources found in demo namespace. リストアの基本的な流れ リストアの実行 前回䜜成したバックアップを指定しおリストアを実行したす。 $ velero restore create demo-resource-restore --from-backup demo-resource-backup # 出力䟋 Restore request "demo-resource-restore" submitted successfully. Run `velero restore describe demo-resource-restore` or `velero restore logs demo-resource-restore` for more details. コマンドを実行するず、「Restore request “demo-resource-restore” submitted successfully.」ず衚瀺され、リストア凊理がバックグラりンドで開始されたす。 状態の確認 リストアが正垞に完了したか確認するには velero restore describe コマンドを䜿甚したす。出力結果の Phase が Completed になっおいれば成功です。 $ velero restore describe demo-resource-restore # 出力䟋 Name: demo-resource-restore Namespace: velero Labels: <none> Annotations: <none> Phase: Completed ... 詳现なログを確認したい堎合は、以䞋のコマンドを実行したす。 ログの詳现は省略したす。 $ velero restore logs demo-resource-restore リストア埌の確認 リ゜ヌスの確認 リストア埌に、削陀する前のリ゜ヌスの皮類ず同じリ゜ヌスが䜜成されおいるか確認したす。 䞀郚リ゜ヌスPod や ReplicaSet等のsuffix856dc6c76b-9jbtfの郚分はリストア埌に倉わるこずがありたす。 $ kubectl get all -n demo # 出力䟋 NAME READY STATUS RESTARTS AGE pod/nginx-deployment-856dc6c76b-9jbtf 1/1 Running 0 13s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginx-service ClusterIP 10.43.179.216 <none> 80/TCP 13s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deployment 1/1 1 1 13s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-deployment-856dc6c76b 1 1 1 13s 動䜜確認 動䜜確認のため、テスト甚 Pod を䞀時的に起動しお nginx-service ぞ HTTP リク゚ストを送信したす。 $ kubectl run -n demo test-curl --rm -i --restart=Never --image=curlimages/curl -- http://nginx-service # 出力䟋 <html> <head><title>Velero Demo</title></head> <body> <h1>Hello, Velero!</h1> <p>This is a cluster resource backup demo.</p> </body> </html> pod "test-curl" deleted リストア時のリ゜ヌス倉換 Namespace mapping –namespace-mappings オプションを䜿甚するず、リストア時にリ゜ヌスの展開先を別のNamespaceぞ倉曎できたす。 $ velero restore create demo-resource-restore-2 \ --from-backup demo-resource-backup \ --namespace-mappings demo:demo-2 # 出力䟋 Restore request "demo-resource-restore-2" submitted successfully. Run `velero restore describe demo-resource-restore-2` or `velero restore logs demo-resource-restore-2` for more details. リストア完了埌、マッピング先の Namespacedemo-2を確認するず、察象のリ゜ヌスが正垞に䜜成されおいるこずが分かりたす。 $ kubectl get all -n demo-2 # 出力䟋 NAME READY STATUS RESTARTS AGE pod/nginx-deployment-856dc6c76b-9jbtf 1/1 Running 0 5s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginx-service ClusterIP 10.43.188.0 <none> 80/TCP 5s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deployment 1/1 1 1 5s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-deployment-856dc6c76b 1 1 1 5s たずめ 本蚘事では、PersistentVolume を含たないクラスタヌリ゜ヌスを Velero を利甚しおリストアする方法を解説したした。 velero restore create でバックアップのリストアが可胜 リストア時にバックアップ時のNamespaceず異なるNamespaceにマッピングするこずが可胜 本蚘事が、基本的な Velero の䜿い方の理解に少しでもお圹に立おば幞いです。次回以降もぜひご芧ください。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post Velero実践クラスタヌリ゜ヌスのリストア first appeared on SIOS Tech Lab .
はじめに PSSLの䜐々朚です。 最近、仕事の䞭や技術ブログ、登壇資料を芋おいおこんな堎面に出䌚うこずが増えたした。 チャットで質問したら、AIが生成したず思われる長文がそのたた貌り付けられお返っおくる 資料が、AIに䜜らせたスラむドをほが無加工で䞊べたものになっおいる 蚘事や文曞の䞭に必芁なこずは蚘茉されおいるがそれ以倖の情報も倚すぎお読み手のコストが非垞に高い 私自身、業務で毎日のようにAIを䜿っおいたす。AIを䜿うこずで非垞に効率的に仕事を進めるこずができるようになった反面、文章や資料、蚘事の読み手が頑匵っお読たないず理解できない文章が倚くなっおいるず感じるようにもなりたした。 私も10幎ほど前にこの本を読みたしたがこのタむミングで再読をしおみたした。 この蚘事では、1981幎に出版されたロングセラヌ、朚䞋是雄『理科系の䜜文技術』䞭公新曞を手がかりに、「䌝える偎が頑匵る」ずはどういうこずかを敎理したいず思いたす。 AIの出力を貌るだけだず、䜕が起きおいるのか 結論から蚀うず、 理解するコストが曞き手から読み手に抌し付けられおいたす 。 AIの出力は、䞀般論ずしおはそれらしく、網矅的で、長くなりがちです。しかし、その文章は「いた目の前にいる盞手」のために曞かれたものではありたせん。そのプロゞェクト内での共通認識(コンテキスト)をAIが持っおいないので盞手が知りたいこずを䌝えるのに䞍必芁な前提を文曞化しおいたり、䞍芁な呚蟺情報を文章に含めおいたりずかなりノむズが倚い文章が生成されおいたす。 それをそのたた枡すず、読み手は次の䜜業を自分でやるこずになりたす。 曞き手プロンプトを打぀ → 出力をコピヌ → 貌る数十秒 │ â–Œ 読み手党文を読む → 自分に関係する郚分を探す → どこたでが事実でどこからが掚枬か芋極める → 曞き手の意図を掚枬する → 結局、質問し盎す数分〜数十分 䌝える偎は数十秒で枈み、受け取る偎が数分から数十分を払う。しかも受け手が耇数人いれば、そのコストは人数分かかりたす。本来、文章を敎えるコストは曞き手が䞀床だけ払えば枈むものです。 さらに厄介なのは、貌った本人が䞭身を説明できないケヌスです。「この郚分はどういう意味ですか」ず聞いおも、「AIがそう曞いおいたので」ず返っおくる。これでは文曞ではなく、読み手ぞの宿題になっおしたいたす。 䌝える偎が楜をしお、受け手が頑匵っお理解する。この構図を逆にしよう、ずいうのがこの蚘事の䞻匵です。 『理科系の䜜文技術』ずはどんな本か 本曞が察象にしおいるのは、文孊的な名文ではありたせん。 読み手に必芁な情報を、正確に、速く䌝えるための文章 です。著者は䞀貫しお、仕事の文曞は「読み手が読んで理解し、行動できるこず」が目的だずいう立堎をずっおいたす。 これは、たさにいた私たちがチャットや資料で毎日やっおいるこずそのものです。Slackの返信も、蚭蚈レビュヌのスラむドも、顧客ぞの説明メヌルも、すべお「仕事の文曞」です。 芳点 本曞が想定する文曞 いたの職堎に眮き換えるず 目的 読み手に事実ず考えを䌝える 盞手に刀断・行動しおもらう 読み手 忙しく、必芁な情報だけ欲しい人 䞊叞、顧客、チヌムメンバヌ 求められる性質 明快・簡朔・正確 短時間で誀解なく䌝わる 本曞から孊ぶ、盞手に䌝えるための6぀の原則 本曞には倚くの技術が曞かれおいたすが、ここでは「AIの出力を貌るだけ」問題に特に効くものを6぀取り䞊げたす。 1. 曞く前に、読み手を決める 本曞が最初に求めるのは、 誰が読むのか、その人は䜕を知っおいお䜕を知りたいのか を考えるこずです。同じ内容でも、盞手が郚長なのか、隣の垭の゚ンゞニアなのか、顧客の担圓者なのかで、曞くべきこずは倉わりたす。 AIは読み手を知りたせん。プロンプトで䌝えない限り、「平均的な誰か」に向けた文章を出しおきたす。読み手を想定する䜜業は、曞き手にしかできたせん。 本曞は理科系の文章の鉄則ずしお、「必芁なこずは掩れなく蚘述し、必芁でないこずは䞀぀も曞かない」こずを挙げおいたす。䜕が必芁で䜕が䞍芁かは、読み手を決めお初めお刀断できたす。AIの網矅的な出力には、その盞手にずっお䞍芁な情報が倧量に含たれおいたす。それを削るのは曞き手の仕事です。 2. 䜕を蚀いたいのかを、䞀文で蚀えるようにする 本曞では、曞き始める前に「この文曞で䜕を䞻匵するのか」を短い文にたずめおおくこずを勧めおいたす本曞では「目暙芏定文」ず呌ばれおいたす。 AIの出力を貌る前に、「結局この文章で盞手に䜕を䌝えたいのか」を䞀文で蚀えるか詊しおみおください。蚀えないなら、それはただ盞手に枡せる状態ではありたせん。自分が理解しおいないものは、盞手にも䌝わりたせん。 3. 倧事なこずから先に、党䜓から现郚ぞ 本曞の代衚的な考え方の䞀぀が、 重点先行䞻矩 です。結論や最も重芁なこずを先に曞き、説明や根拠は埌に回す。読み手は最初の数行で「読み進めるべきか」「自分に関係あるか」を刀断するからです。 AIの出力は「背景 → 䞀般論 → 芳点の列挙 → たずめ」ずいう構成になりがちで、肝心の答えが最埌に埋もれおいるこずがよくありたす。貌る前に、盞手が知りたい答えを䞀行目に持っおくるだけで、䌝わり方は倧きく倉わりたす。 本曞はあわせお、 抂芳から现郚ぞ ずいう順序も説いおいたす。道案内なら、「駅を出お巊の果物屋の隣の道を 」ず目印を順にたどるより、「駅から北ぞ200m、そこを巊に入っお500mほど」ず党䜓像を先に瀺すほうが分かりやすい、ずいう䟋です。党䜓像が分かっおいれば、読み手は现郚を「ゎヌルに向かう芁玠」ずしお萜ち着いお読めたす。 この考え方は段萜の単䜍でも同じです。各段萜の冒頭にその段萜の芁点トピック・センテンスを眮けば、段萜の1文目だけを぀なげお読むず文章党䜓の芁玄になりたす。AIの出力を手盎しするずきは、各段萜の1文目だけを読んで話が通じるか確かめおみおください。 4. 事実ず意芋を曞き分ける 本曞が匷く求めるのが、 事実ず意芋を明確に区別するこず です。䜕が確認枈みの事実で、䜕が曞き手の刀断や掚枬なのかが分からない文章では、読み手は刀断を誀りたす。 AIの出力は、怜蚌枈みの情報ず、もっずもらしい掚枬が同じ調子で䞊びたす。それをそのたた枡すず、読み手は党郚を事実ずしお受け取るか、党郚を疑うかのどちらかになりたす。「ここは公匏ドキュメントで確認枈み」「ここは自分の掚枬」ず曞き分けるのは、䌝える偎の責任です。 5. はっきり、短く曞く 本曞は、がかした衚珟や䞍芁な修食を避け、 蚀い切れるこずは蚀い切る こずを勧めおいたす。たた、䞀文を短くし、䞀぀の段萜には䞀぀のこずだけを曞くその段萜の芁点を冒頭の䞀文で瀺すこずも説いおいたす。 AIの文章には「〜ず考えられたす」「〜する堎合もありたす」「様々な芳点から」ずいった、責任の所圚をがかす蚀い回しが倚く含たれたす。自分が確信しおいるこずなら蚀い切る。確信がないなら、䜕が分からないのかを具䜓的に曞く。それだけで文章の情報量は増え、長さは枛りたす。 6. 二通りに読めない文を曞く 本曞は、 その文が䞀぀の意味にしか読めないか を吟味するよう求めおいたす。有名な䟋が「黒い目のきれいな女の子」です。目が黒いのか、女の子が黒いのか、読点の打ち方ひず぀で意味が倉わりたす。䞻語ず述語がねじれた文䟋「〜の指導は二通りの指導がある」も、読み手を迷わせたす。 曞き手は自分の意図を知っおいるので、曖昧さに気づきにくいものです。AIの文章ならなおさらで、自分が曞いおいない分、どこが二通りに読めるかを芋萜ずしがちです。貌る前に、盞手の立堎で読み返す䞀手間が必芁です。 AI時代の実践貌る前のチェックリスト 本曞の原則を、AIの出力を盞手に枡す前のチェックリストにするずこうなりたす。 この文章を読むのは誰か、その人が䜕を知りたいのかを説明できる 䌝えたいこずを䞀文で蚀える 䞀行目たたはスラむドの1枚目に結論・答えが曞いおある 现郚の前に党䜓像を瀺しおいる 各段萜の1文目だけを読んでも話が通じる 盞手に必芁ない䞀般論や網矅的な列挙を削った 事実確認枈みず自分の意芋・掚枬を区別しお曞いた 「〜ず考えられたす」「様々な」などのがかし衚珟を、蚀い切りか具䜓的な䞍明点に盎した 二通りに読める文、䞻語ず述語がねじれた文がない 䞭身に぀いお質問されたら、自分の蚀葉で答えられる 悪い䟋ず良い䟋 たずえば、チヌムメンバヌから「このラむブラリ、うちのプロゞェクトで䜿っおも倧䞈倫ですか」ず聞かれた堎面を考えたす。 悪い䟋AIの出力をそのたた貌る ラむブラリの採甚にあたっおは、様々な芳点から怜蚎するこずが重芁です。 1. ラむセンスOSSラむセンスには様々な皮類があり  2. メンテナンス状況コミット頻床やIssueの察応状況を確認するこずが  3. セキュリティ既知の脆匱性がないか確認するこずが掚奚されたす  4. パフォヌマンス  総合的に刀断するこずが望たしいず考えられたす。 質問者は「倧䞈倫かどうか」を知りたいのに、答えがどこにもありたせん。確認すべき芳点を読み手に返しおいるだけです。 良い䟋AIで調べた䞊で、自分の蚀葉で䌝える 䜿っお倧䞈倫です。ただし1点だけ泚意がありたす。 ・ラむセンスはMITなので、うちの商甚利甚で問題ありたせんLICENSEファむルで確認枈み ・盎近3か月もリリヌスが続いおいお、メンテは掻発です ・泚意点v2系に既知の脆匱性があるので、v3以䞊を指定しおください 結論が先にあり、根拠が事実ずしお瀺され、盞手が取るべき行動たで曞かれおいたす。AIは調べものに䜿っおいおも、䌝える䜜業は曞き手がやっおいたす。 「䌝える偎が頑匵る」こずの費甚察効果 曞き手が5分かけお敎えれば、読み手の10分が節玄できたす。読み手が5人いれば50分です。さらに、誀解による手戻りや「結局どういうこず」ずいうやり取りも枛りたす。䌝える偎が頑匵るのは、盞手ぞの気遣いであるず同時に、チヌム党䜓の生産性を䞊げる䞀番安い投資です。 たずめ AIの出力をそのたた貌るず、理解するコストが曞き手から読み手に抌し付けられる 『理科系の䜜文技術』は、仕事の文曞を「読み手が理解し行動するためのもの」ず䜍眮づけおいる 読み手を決める、蚀いたいこずを䞀文にする、重点を先に・党䜓から现郚ぞ曞く、事実ず意芋を分ける、はっきり短く曞く、二通りに読めない文を曞く AIは玠材づくりに䜿い、盞手に合わせお組み立お盎す䜜業は自分でやる AIによっお、文章を「䜜る」コストはほがれロになりたした。個人の生産性を䞊げるこずは、以前よりずっず簡単です。しかし組織党䜓の生産性を䞊げるには、䌝える偎が少しだけ自分でコストをかける必芁がありたす。その少しの手間は、読み手の人数分だけ効いおきたす。そう気づいたこずが、この本を読み盎し、この蚘事を曞いたきっかけでした。 参考文献 朚䞋是雄『理科系の䜜文技術』䞭公新曞、1981幎 https://www.chuko.co.jp/shinsho/1981/09/100624.html ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 今こそ読んでほしい『理科系の䜜文技術』 first appeared on SIOS Tech Lab .
 自己玹介ずむンタヌン参加の理由 自己玹介 公立はこだお未来倧孊 システム情報科孊郚 情報システムコヌス 3幎の吉川諒䞀です。 普段はコンピュヌタサむ゚ンスの基瀎からシステム構築の応甚技術たで幅広く孊んでいたす。 珟圚はプロゞェクト孊習で「看護垫の業務負担を軜枛するシステム」の共同開発を䞻導しおおり、単にコヌドを曞くだけでなく、実際の医療珟堎の課題をITでどう解決するかずいう実践的なシステムデザむンを探求しおいたす。 画面に向かう時間が長いため、䌑日はスポヌツで汗を流すか、車でドラむブに出かけたす。 ドラむブ䞭は頭が勝手に敎理されるため、詰たっおいた実装の答えが道の途䞭でふず芋぀かるこずも少なくありたせん。 なぜ数ある䌁業からここサむオスのむンタヌンシップを遞んだのか 理由は倧きく3぀ありたす。 倧孊での孊びを実瀟䌚の課題解決に繋げたかった 授業で培ったプログラミングや蚭蚈の基瀎が、実際のビゞネス珟堎でどう掻きるのかを確かめたかったからです 実務レベルのチヌム開発に挑戊したかった 耇数人でコヌドを共有し、議論しながらプロダクトを䜜り䞊げるリアルを経隓したかったためです 幅広い技術スタックず瀟䌚ぞの圱響力 OSSやAI・クラりド等倚圩な技術で瀟䌚むンフラを支え、特定の技術に瞛られず最適解で瀟䌚に貢献する姿勢に匷く惹かれたした 『メタ孊習時間』をれロにするアプリ「メタれロ」 成果物「メタれロ」の抂芁 私たちAチヌムが10日間で開発したのは、倧孊3幎生向けのモバむルWebアプリ 「メタれロMetaZero」 です。コンセプトは 「メタ孊習時間をれロぞ」 ――ここでいうメタ孊習時間ずは、孊ぶ・解くこず以倖に費やされる「探す・蚈画する・管理する」時間を指しおいたす。 ペル゜ナは、就掻ず専門科目に远われる工孊郚3幎の䜐倉䞀真くん。圌の課題は明確で、課題通知や提出先がClassBoard、MetaBox、倧孊メヌル、研究宀ドラむブいずれも暡擬サむトに散らばり、 党科目の詊隓日皋が茉った1枚の衚すら存圚しないこず でした。勉匷に入る前の 「探す」段階で、時間ず気力が削られおいた のです。 メタれロは、この構造を壊したす。 ①たずはアプリが孊内サむトを 自動巡回しお、情報を統合し1枚の日皋衚を生成 ②そこから自己評䟡フォヌムず科目別AI察話を経お 「どこをどれくらいやるか」ずいう现郚たで蚈画を決めきる この 「蚈画の2局構造」 を栞に、AI暡擬詊隓・䞀問䞀答生成機胜、提出物チェック、初回チュヌトリアルたで 13画面を実装したした 。 自分の圹割 私はバック゚ンドずフロント゚ンドの䞡局にたたがり、 機胜実装ず䜓隓の仕䞊げを担圓 したした。コンフリクトを避けるため 「画面ごず」ではなく「局機胜レむダヌごず」に切る方針 を早期に決め、私はその䞡偎を行き来したした。 倧きな仕事は、 暡擬倧孊サむト矀を実際にスクレむピングしお情報を統合する、泥臭いデヌタ収集ロゞックの構築 です。盞察パスの巡回凊理や、GitHub Pages䞊でのデヌタ怜蚌スクリプトを曞くなど、 䌁画の栞を支える郚分を詰めたした 。たた、AI察話で生じる英語混じりの回答や沈黙時間を朰す䜓隓蚭蚈・挔出や状態管理も担圓したした。 チヌムの䞭で䞀貫しおいたのは 「仕様曞を先に盎しおから実装する」ずいう順番スペック駆動を守るこず です。 たず仕様曞に䞀文を曞き足しおから実装に入り、AIによるコヌドレビュヌの指摘を自分の手で盎す。このプロセスを厩さなかったこずで、蚈13画面ずいう芏暡を走り切れたした。 開発における気づき 技術面で䞀番の気づきは、 「1コミット1関心事」がGitフックで機械的に怜査されおいたこず です。最初は面倒に思えたしたが、倉曎理由が残る䟡倀は圧倒的で、 人の善意ではなく仕組みで品質を守る重芁性 を䜓埗したした。たた、仕様曞を正ずするスペック駆動開発のもず、党279コミット䞭71件がドキュメント曎新ずなり、仕様決定ず実装をペアで進めたした。 同䞀ブランチでの衝突経隓からは、 コンフリクトは技術ではなく「局ごず」などの分担の切り方で予防すべき だず実感したした。さらに、他人の実装を読んでコヌドを合わせる䜜業が倚く、「読む」時間が開発時間の倧半を占めるこずも知りたした。 䌁画面での䞀番の気づきは、 䜜る前に課題を深掘るこずの重芁 さです。最初の数日、コヌドを曞かずに議論し続けたからこそ「メタ孊習時間」ずいうコンセプトに蟿り着けたした。たた「䜐倉䞀真くん」ずいう具䜓的なペル゜ナを眮いたこずで、「䜐倉くんは䜿うか」ずいう基準ができ、 刀断が劇的に速くなりたした 。 同時に、 10日間の制限内で圢にする芋積もりの珟実 も孊びたした。最終的に13画面ずいう芏暡に手を䌞ばしお挑戊したからこそ、届かなかった郚分も含めお自分の珟圚地がはっきり芋えたした。 䞭間発衚での悔しさずプロからの教蚓 開発期間のうち5日目たでは仕様曞を培底的に曞き蟌み、 前半で「蚭蚈」に投資したした 。その甲斐あっお、䞭間発衚明けの1日で チヌム党䜓のコミット数が94積たれる など、埌半の実装速床が䞀気に跳ね䞊がりたした党279コミット。しかし、動くプロダクトを持っお臚んだ最終発衚では、倧きな達成感ず同時に匷い悔しさが残りたした。プロダクト自䜓は「コンセプト通りにUIぞ萜ずし蟌めおいる」「仕様曞の段階で画面遷移を抑えた蚭蚈が良い」ず評䟡されたものの、 䌝え方やUXの芳点でプロの瀟員の方々から鋭い指摘 を受けたした。 「UIに凝りすぎおいる。ナヌザヌの䜕を楜にしおいるのか、UXたで萜ずし蟌めるずさらに良い」 挔出に倢䞭で、「䜿う人の䜓隓の滑らかさ」を毎回問い盎せおいなかった甘さを突き぀けられたした。 「䌝える段階では“切り捚おるこず”も倧事。自分なりにたずめお話したいポむントを䌝えるべき」 䜜る段階で機胜を切り捚おなかった刀断は正しかったずしおも、䌝える段階では削るべきだったず痛感したした。 党郚を芋せようずした結果、䌝える内容が浅くなっおしたった のです。 10日間「どう䜜るか」に党力だった反面、「どう䌝えるか」に同等の熱量を泚げおいたせんでした。 「䜜る技術」ず「䌝える技術」は地続きではなく別物である ず身をもっお理解できたこずが䜕よりの収穫です。悔しさの原因が明確だからこそ、次に䜕を盎すべきかがはっきり芋えおいたす。 個人䜜業の集たりから“本圓のチヌム”ぞ10日間の倉化 今回のむンタヌンで最も倧きな孊びが埗られたのが「チヌムワヌク」です。 チヌムの雰囲気の倉化噛み合うチヌムぞの到達 チヌム構成は孊生4名ずメンタヌ瀟員1名で、7日間はリモヌトでの開発でした。正盎なずころ、 最初は「チヌム開発」ずいうより、各自が自分のタスクを黙々ず進める個人䜜業の集たりに近い状態 でした。 雰囲気が倉わったのは䞭間発衚を越えたあたりからです。 党䜓像が芋えお互いの担圓が噛み合い始めるず、自然ず声掛けが増えおいきたした 。䟋えば、䞭間発衚明けに積たれた94コミットに぀いおは、単に締め切りが迫っおいたからではなく 、「手戻りなくチヌム党員の手が動く状態」にチヌムが到達しおいたから達成したものでした 。 コミュニケヌションの工倫ず「任せるRespect」 リモヌト開発では、察面での開発ず比べ進捗や認識のズレが芋えにくくなりたす。そこで私は2぀のルヌルを自ら実践したした。 1. 今やっおいる䜜業の即時報告 受動的にならず「今ここを觊っおいたす」ず共有し、重耇䜜業や埅ち時間を枛らす。 2. タスク終了埌5分間の画面共有 マヌゞ前に必ず党員に画面を芋せ、認識をすり合わせる。 これは単なる進捗管理ではなく、「盞手の時間を守る」ずいう自分なりのリスペクトずしおの実践でした。 たた、メンバヌにはUIデザむンの粟床が高い人、耇雑な議論を蚀語化できる人、発衚を牜匕できる人など、それぞれ明らかな匷みがありたした。ただ、誰も「党郚䞀人でやろう」ずはしたせんでした。 埗意を発揮しお、苊手は仲間に蚗す「任せるRespect」のもず、コミュニケヌションを取りながら頌り合える関係性を構築できたからこそ、䞀人では絶察に到達できない芏暡の成果物を仕䞊げるこずができたした 。 最倧の孊びず今埌の目暙 倉化した「働く䟡倀芳」 参加前は「゚ンゞニアの実力どれだけコヌドを曞けるか」ず思っおいたしたが、10日間でむメヌゞが倧きく曎新されたした。 1. 「䌝える力」も゚ンゞニアの実力 どれだけ玠晎らしいプロダクトを䜜っおも、䟡倀を届けられなければ存圚しないのず同じ 2. プロダクトはチヌムで䜜る 匷みを掻かし合い、認識を揃え続ける調敎こそが、倧きな成果を生む唯䞀の方法 3. 垞にナヌザヌ起点で考える 「これは誰の䜕を楜にしおいるのか」を問い盎す癖が、䜜業ずプロの仕事を分ける 以䞊を螏たえお、今埌の目暙は3぀ありたす。 1. 「 䌝える力」を鍛えるこず 発衚の機䌚に積極的に挑戊し、「䜕を捚お䜕を残すか」の遞択ず線集の技術を磚きたす 2.「UXデザむン」ぞの昇華 芋た目だけでなく、ナヌザヌの䜓隓そのものを滑らかにする蚭蚈力を身に぀けたす 3.倧孊の医療プロゞェクトぞの還元 スペック駆動、コミット芏玄、レむダヌ別分担などを、珟圚䞻導しおいる「看護垫の業務負担軜枛システム」の開発ぞ持ち垰り、珟堎の課題解決に接続したす 埌茩ぞのメッセヌゞ 1.最初の数日、コヌドが曞けなくおも焊らないでください。 課題やペル゜ナを議論する時間は、埌半の開発スピヌドずしお必ず還元されたす。 2.発衚の準備は実装ず同じくらい真剣にやっおください。 10日間の努力を届ける数分のために、前倜から準備するのでは遅すぎたす。 3.分からないこずは早めに口に出しおください。 リモヌトでは特に、「今詰たっおいたす」の䞀蚀がチヌムにずっお歓迎されたす。 最埌に、サむオステクノロゞヌの皆さん、䞀緒にむンタヌン生ずしお参加した皆さん、10日間、本圓にありがずうございたした ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 個人䜜業から“本圓のチヌム”ぞ。10日間の開発で孊んだチヌムワヌクず䌝える技術 first appeared on SIOS Tech Lab .
こんにちは。サむオステクノロゞヌの橋本です。 昚今、各゜フトりェアで深刻な脆匱性が倚数報告されおおり、セキュリティ担圓者の方は日々の察応に远われおいるのではないでしょうか。 本蚘事では、Linuxサヌバヌにおけるパッケヌゞの脆匱性確認・自動適甚から、アプリケヌション局のラむブラリOSS管理たで、脆匱性察応を効率化する3぀のステップを解説したす。 1. OSに入っおいるパッケヌゞの脆匱性管理 RHELRed Hat Enterprise Linux環境の堎合、OSパッケヌゞはRPM圢匏で管理されおおり、 dnf コマンドを甚いるこずでセキュリティパッチの有無を容易に確認・適甚できたす。 未適甚のセキュリティ曎新を確認する システムにむンストヌルされおいないセキュリティ修正パッケヌゞの䞀芧を確認するには、以䞋のコマンドを実行したす。 dnf updateinfo list updates security 実行䟋 # dnf updateinfo list updates security RHSA-2026:85309 重芁/セキュリティ bubblewrap-0.6.3-1.el9_8.1.x86_64 RHSA-2026:85245 重芁/セキュリティ emacs-filesystem-1:27.2-18.el9_8.3.noarch RHSA-2026:83553 重芁/セキュリティ ghostscript-9.54.0-19.el9_8.3.x86_64 RHSA-2026:83553 重芁/セキュリティ ghostscript-tools-fonts-9.54.0-19.el9_8.3.x86_64 RHSA-2026:83553 重芁/セキュリティ ghostscript-tools-printing-9.54.0-19.el9_8.3.x86_64 セキュリティ曎新のみをむンストヌルする 通垞の機胜拡匵やバグ修正を避け、セキュリティ関連の修正のみを適甚したい堎合は --security オプションを付䞎しお曎新したす。 dnf update --security ※セキュリティパッチの䟝存関係を解決するために、セキュリティ指定倖のパッケヌゞが連動しお曎新されるケヌスがありたす。 ※理想ずしおはすべおのパッケヌゞを垞に最新状態ぞ保぀運甚が掚奚されたすが、動䜜ぞの圱響範囲を最小限に抑えたい堎面で有効です。 2. OSに入っおいるパッケヌゞの自動管理 手動で定期的にコマンドを実行する運甚は、抜け挏れや工数増加の原因になりたす。そこで、 dnf-automatic を利甚しおセキュリティ曎新を自動化したす。 むンストヌルず蚭定 dnf -y install dnf-automatic デフォルトの蚭定では曎新パッケヌゞの「ダりンロヌドのみ」で「むンストヌル適甚」は行われたせん。自動適甚たで完結させるため、蚭定ファむル /etc/dnf/automatic.conf を線集したす。 蚭定ファむルの倉曎点/etc/dnf/automatic.conf [commands] # セキュリティ曎新のみに限定 upgrade_type = security # パッケヌゞのダりンロヌドを蚱可 download_updates = yes # ダりンロヌドした曎新を自動適甚デフォルトは no apply_updates = yes タむマヌの有効化ず確認 systemd のタむマヌを有効化し、即時起動したす。 systemctl enable --now dnf-automatic.timer タむマヌの皌働スケゞュヌルを確認したす。 # systemctl list-timers dnf-automatic.timer NEXT LEFT LAST PASSED UNIT ACTIVATES Thu 2026-10-29 06:44:49 JST 16h left - - dnf-automatic.timer dnf-automatic.service 1 timers listed. Pass --all to see loaded but inactive timers, too. デフォルトでは午前6時の前埌1時間ランダムな遅延を含むに実行されたす。実行時間をカスタマむズしたい堎合は、パッケヌゞ曎新による䞊曞きを防ぐため、以䞋のコマンドでドロップむン蚭定を䜜成しお線集したす。 systemctl edit dnf-automatic.timer 運甚䞊の泚意点再起動の確認 カヌネルや glibc、OpenSSL などの䞻芁ラむブラリが曎新された堎合、パッケヌゞをむンストヌルしただけではメモリ䞊に叀いプロセスが残り続けたす。 dnf-utils パッケヌゞに含たれる needs-restarting -r コマンド等を甚いお、システムの再起動や該圓プロセスの再起動芁吊を定期的にチェックする䜓制を敎えたしょう。 3. アプリケヌション芳点、゜ヌスからむンストヌルした゜フトりェアの管理 ここたでで OS パッケヌゞRPMの管理は網矅できたす。しかし、OS䞊で皌働する独自アプリケヌションや、゜ヌスコヌドからビルドした゜フトりェア、開発時に組み蟌んだオヌプン゜ヌスラむブラリOSSはパッケヌゞ管理システムの察象倖ずなりたす。 SCAツヌルによる゜ヌスコヌドスキャン ゜ヌスコヌド内に意図せず混入したOSSや䟝存パッケヌゞを特定するには、 SCANOSS などのSCA゜フトりェア構成分析ツヌルを掻甚したす。 関連蚘事: SCANOSS CLIでロヌカルスキャンむンストヌルからSBOM生成たで Dependency-Trackによる継続的な脆匱性管理 SCANOSS 等で出力した **SBOM゜フトりェア郚品衚** を Dependency-Track にむンポヌトするこずで、システムごずのコンポヌネント管理や、公開された脆匱性情報ずの継続的なマッチング・自動怜知が可胜になりたす。 関連蚘事: SBOMツヌル玹介 ~ Dependency-Trackç·š ~ たずめ 深刻な脆匱性が日々公開される昚今、OSレむダヌの自動アップデヌト運甚を確立し぀぀、アプリケヌション局のラむブラリや䟝存OSSをSBOMで可芖化・䞀元管理するこずが䞍可欠です。迅速な初動察応ず圱響範囲の正確な把握に向けお、ツヌルの導入・運甚をご怜蚎ください。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post OS、アプリケヌションの脆匱性管理っおどうしおる first appeared on SIOS Tech Lab .
はじめに 本蚘事では、PHP の深刻な脆匱性「PHP2ShellCVE-2026-109618 / CVE-2026-109619」に぀いお、管理察象のサヌバヌが圱響を受けるかどうかの調査手順ず、曎新手順をたずめたす。 本蚘事では、RHEL 9.6 および Ubuntu 24.04 LTS での環境を察象ずしたす。 PHP2Shell の圱響確認方法 PHP のむンストヌル状況の確認 RHEL # rpm -qa | grep -i php Ubuntu # dpkg -l | grep -i php コマンド実行埌に出力がない堎合は、PHP がむンストヌルされおいないため圱響はありたせん。 PHP がむンストヌルされおいない堎合も、埌述する Apache、Nginx が動䜜しおいる堎合は、別サヌバぞの転送がないか確認する。 なお、PHP コミュニティ版を䜿甚しおいる堎合は、 php -v コマンドでバヌゞョンを確認し、修正枈みバヌゞョンず照合しおください。 https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp Apache の PHP ずの連携の確認 Apache が動䜜しおいない環境の堎合、本確認手順はスキップしおください。 RHEL # httpd -M 2>/dev/null | grep -iE 'php|proxy_fcgi' Ubuntu # apache2ctl -M | grep -iE 'php|proxy_fcgi' proxy_fcgi_module のみ出力される堎合 Apache の転送先を確認したす。 RHEL # grep -rniE 'SetHandler|proxy:unix|proxy:fcgi' /etc/httpd/conf /etc/httpd/conf.d Ubuntu # grep -rniE 'SetHandler|proxy:unix|proxy:fcgi' /etc/apache2/mods-enabled/ /etc/apache2/conf-enabled/ /etc/apache2/sites-enabled/ unix: や 127.0.0.1:9000 のような出力がある堎合、 同䞀ホスト䞊で動䜜する PHP-FPM で PHP が実行されおいる可胜性がありたす。埌述する「 PHP-FPM の実態確認 」を参照しお確認を進めおください。 別ホストの IP アドレス等が蚭定されおいる堎合、転送先ホストの PHP も曎新適甚の察象になりたす。 䞊蚘出力がない堎合、PHP ずの連携はありたせん。 mod_php が出力される堎合 PHP 公匏のアナりンスにおいおも、最もリスクが高い構成ず刀定されおいたす。盎ちにセキュリティ曎新を適甚しおください。 https://www.php.net/archive/2026.php#2026-10-21-5 Who is at risk: all PHP installations serving web requests, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. We consider the risk highest for mod_php, with a demonstrated exploit where an unauthenticated request can trigger the attack before any application code runs. Nginx の PHP ずの連携の確認 Nginx が動䜜しおいない環境の堎合、本確認手順はスキップしおください。 Nginx は PHP を盎接実行する機胜は持たず、fastcgi_pass ディレクティブで PHP-FPM (たたは php-cgi) に凊理を転送し実行したす。 そのため、Nginx の蚭定を確認し、PHP-FPM ずの連携有無を確認したす。 # nginx -T 2>/dev/null | grep -nE 'fastcgi_pass|\.php' unix: や 127.0.0.1:9000 のような出力がある堎合、 同䞀ホスト䞊で動䜜する PHP-FPM で PHP が実行されおいる可胜性がありたす。埌述する「 PHP-FPM の実態確認 」を参照しお確認を進めおください。 別ホストの IP アドレス等が蚭定されおいる堎合、転送先ホストの PHP も曎新適甚の察象になりたす。 䞊蚘出力がない堎合、PHP ずの連携はありたせん。 PHP-FPM の動䜜状況の確認 PHP-FPM プロセスおよび゜ケット状態を確認したす。 # ps -eo user,pid,args | grep -E '[p]hp-fpm|[p]hp-cgi' # ss -lxp | grep -i php # ss -ltnp | grep -iE 'php|:9000' Apache や Nginx で PHP-FPM ずの連携蚭定があり、か぀䞊蚘のいずれかのコマンドで出力があった堎合は、セキュリティ曎新を適甚しおください。 転送先で PHP-FPM が皌働しおおらず、他の PHP 実行環境ぞの転送もない堎合、その経路での PHP2Shell の圱響は受けたせん。 曎新方法 「PHP2Shell の圱響確認方法」にお、サヌバ䞊で PHP の利甚が確認され、か぀パッチ未適甚のバヌゞョンであるこずが刀明した堎合は、以䞋の手順でセキュリティ曎新を適甚したす。 公匏パッケヌゞの曎新 RHEL 指定した2件の脆匱性に察凊したパッケヌゞぞ曎新したす。 # dnf upgrade --cve CVE-2026-109618,CVE-2026-109619 -y 以䞋コマンドを実行し、該圓のCVE修正が反映されたか確認したす。 # dnf updateinfo info --cve CVE-2026-109618,CVE-2026-109619 --installed 実行結果に察象パッケヌゞの Errata 情報の出力が確認できれば、適甚完了です。 Ubuntu PHP関連パッケヌゞだけ曎新したす。 #  apt update && apt install --only-upgrade 'php*' changelog を参照しお、曎新されおいるこずを確認したす。 # zcat /usr/share/doc/php8.3-cli/changelog.Debian.gz | grep -i 'CVE-2026-109618' CVE-2026-109618 の出力が確認できれば、適甚完了です。 PHP コミュニティ版 倖郚リポゞトリから導入する堎合の手順は以䞋を参照しおください。 https://www.php.net/downloads.php パッケヌゞマネヌゞャヌを利甚せず、自前で゜ヌスコヌドからコンパむルしおいる環境の堎合は、以䞋の公匏配垃元から最新のリリヌスを取埗しおください。 https://github.com/php/php-src/releases なお、サポヌトが終了しおいる PHP 7.4 / 8.0 / 8.1 に぀いおは、最小限のパッチが公開されおいたす。ただし、これらを利甚する堎合は、自身で゜ヌスコヌドからビルドし盎す必芁がありたす。 PHP 7.4:  https://github.com/php/php-src/tree/PHP-7.4-CVE-2026-109618-109619 PHP 8.0:  https://github.com/php/php-src/tree/PHP-8.0-CVE-2026-109618-109619 PHP 8.1:  https://github.com/php/php-src/tree/PHP-8.1-CVE-2026-109618-109619 プロセスの再起動 パッケヌゞ曎新埌、関連するサヌビスの再起動を実斜したす。 RHEL # systemctl restart php-fpm httpd nginx Ubuntu # systemctl restart php8.3-fpm apache2 nginx さいごに 今回は PHP2Shell の圱響確認ず曎新手順に぀いおたずめたした。 近幎、脆匱性の公開数は月間1䞇件超ず急増しおおり、これたで以䞊にセキュリティ䞊のリスクに泚意を払う必芁があるず感じたす。 盎近でも、倚くのシステムで利甚されおいる基盀゜フトりェアにおいお、以䞋のような重倧な脆匱性が報告されおいたす。 Oracle Java SE:  CVE-2026-91403 Linux Kernel:  CVE-2026-99999 システムで利甚しおいる OSS の䟝存関係や圱響調査など、気になる点があればぜひ「よろず盞談宀」たでお気軜にお問い合わせください。 オヌプン゜ヌス導入・サポヌトのこずなら、サむオステクノロゞヌOSSよろず盞談宀ぞ ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post PHP2Shellの圱響確認ず曎新手順 first appeared on SIOS Tech Lab .
サむオステクノロゞヌのむンタヌンシップに参加した、東京電機倧孊の森田です。 今回のハッカ゜ン型むンタヌンでは、 チヌム開発の掚進ずアプリ実装を䞻導 したした。 本蚘事では、 AIをコアに組み蟌んだプロダクト開発の裏偎 ず、開発を通じお埗た技術的・゚ンゞニアリング的な孊びを「開発」の軞から振り返りたす。 自己玹介ずサむオスを遞んだ理由 自己玹介 日頃から開発環境の構築や自動化が奜きで、最近は「 Claude Code 」を自分奜みにカスタマむズするこずに熱䞭しおいたす。 特に力を入れたのが、タヌミナル䞊で耇数の AI モデル同士に議論をさせる「 AI 察話・ディベヌトシステム」の実装です。 1 ぀のモデルの出力を鵜呑みにせず、別の AI に反論させ、党員の意芋が䞀臎するたで議論を戊わせる仕組みを䜜るこずで、出力粟床の向䞊を実珟したした。 たた、趣味の䞀人旅では「蚈画を党く立おない」スタむルを奜み、これは「蚈画を立おる時間をれロにする」ずいう今回のアプリ構想の原点にもなっおいたす。 なぜ数ある䌁業からここサむオスのむンタヌンシップを遞んだのか 遞んだ決め手は、生成 AI を単なる「実隓」にずどめず、 実際の開発プロセスやプロダクトの䞭に本気で組み蟌んでいる文化 を感じられた点です。 䞖の䞭に「 AI 掻甚」を掲げる䌁業は倚く存圚したすが、開発珟堎でどこたで本栌運甚されおいるかは倖から芋えにくいものがありたす。サむオスはその姿勢が具䜓的であり、 生成AIを掻甚したチヌム開発をハッカ゜ン圢匏で䞞ごず䜓隓できる点 に匷く惹かれたした。 「AIを䞭心ずしたチヌム開発」 ず 「AR機胜の実装」 ずいう 2 ぀のテヌマぞの挑戊を目的に参加を決めたした。   開発プロダクト「メタれロ MetaZero 」 「メタ孊習時間」をれロにするプロダクト 私たち A チヌムが開発したのは、倧孊生の 「メタ孊習時間孊ぶ・解く以倖の、探す・蚈画する・管理する時間」をれロに近づける モバむル Web アプリ 「メタれロMetaZero」 です。 ペル゜ナには、就掻ず専門科目に远われる倧孊 3 幎生を蚭定したした。 倧孊では、課題や詊隓日皋が耇数の孊内システムに分散しおおり、 党予定を䞀括管理できる画面が存圚しない ずいう状態も珍しくありたせん。私たちが構築した怜蚌甚環境で調べたずころ、 13件の予定が蚈6サむト、30か所に分散しお掲瀺されおいる状態 でした。 「メタれロ」は、これら 6 ぀のサむトを自動巡回しお 1 ぀の日皋衚に集玄し、 AI ずの察話を通しお 「い぀・䜕を・どれくらいやるか」を自動蚭蚈 したす。最終的に å…š13画面ずAR実隓機胜 を実装したした。   開発基盀づくりず AI 駆動開発の実践 むンタヌン期間䞭、私は å…š238コミットのうち131コミットを担圓 し、チヌム党䜓の開発を前進させる立ち回りを意識したした。 初日に構築した「開発の土台」 たず初日に取り組んだのは、機胜実装ではなく チヌムが安党か぀効率的に走れるためのむンフラ敎備 です。 Git フックず CI の構築 コミットメッセヌゞ芏玄を自動で匷制怜知する仕組みを導入 pre-commit フック 誀っお API キヌなどの秘密情報がリポゞトリに混入するのを防ぐセキュリティチェックを自動化 ダミヌ倧孊サむト矀の䜜成 スクレむピング凊理の開発・テストを行うための緎習甚 Web 環境を迅速に甚意   ルヌルを口頭で泚意し合うのではなく、 「機械的に通らない仕組み」を CI/CD レベルで組み蟌む こずで、埌半の開発スピヌドを飛躍的に高めるこずができたした。 AI ツヌル Claude Code を掻甚したチヌムマネゞメント リモヌト環境䞋での AI 駆動開発では、どうしおも特定メンバヌの環境ぞ負荷が集䞭する問題が発生したす。 AI ツヌルぞの連続指瀺によるトヌクン消費の偏りを防ぐため、 チヌム党員のClaude Codeぞ適切にタスクを分散配眮 したした。状況に応じお負荷を平準化するアプロヌチは、 サむオスの行動指針である「 SIOS Values  Respect 」の実践 にも繋がったず感じおいたす。 たた、初期段階で Figma を甚いたビゞュアル共有を行い、党員の認識を揃えたこずで、 リモヌト開発特有の手戻りを未然に防ぎたした 。   開発の壁 LLM のパフォヌマンスチュヌニングず「実枬䞻矩」 開発䞭で最も倧きな壁ずなったのが、 Azure OpenAI 経由で利甚しおいた gpt-5-nano の挙動䞍審ず応答の䞍安定化 でした。 発生した障害 開発䞭盀、 AIチャット機胜でタむムアりトが頻発し、空のレスポンスが返っおくる珟象 が発生したした。アプリ偎がこれを「 AI 接続倱敗」ず刀定しおしたい、 プロダクトのコア機胜であるAI察話が機胜䞍党に陥りたした 。 盎感による修正の倱敗ず「実枬」による解決 圓初は「タむムアりト時間を延ばす」「トヌクン䞊限を勘で増やす」ずいった応急凊眮を詊みたしたが、状況は改善したせんでした。そこで 思い぀きのパラメヌタ倉曎を捚お、実際に API を呌び出しお数倀を蚈枬・怜蚌する地道なアプロヌチ に切り替えたした。 max_completion_tokens を公匏䞊限たで正確に匕き䞊げる reasoning_effort のパラメヌタをナヌスケヌスごずに実枬しお調敎する 高粟床な採点凊理 medium に蚭定しお回答の粟床を担保 タむムアりト回避・レスポンス優先の凊理 low に萜ずし確実にレスポンスを返す   この経隓から、 「LLMのパラメヌタを掚枬やネットの噂で決めおはならない。必ず自環境で実枬しお決定する」 ずいう゚ンゞニアリングにおける重芁な原則を孊びたした。   プロの指摘から孊んだ「 UX 」ず「䌝える技術」 成果発衚埌、プロの゚ンゞニアやメンタヌの方々からいただいた指摘は、技術実装ず同等に䟡倀のあるものでした。 スラむドに情報を詰め蟌みすぎおいる。画面の文字を枛らし、蚀葉で深く䌝えるべき UI画面の芋た目だけでなく、UXナヌザヌ䜓隓を蚭蚈するこず このアプリによっおナヌザヌの人生がどう倉わるのかを Before / After で提瀺する 「動くものを䜜るこず」ず「その䟡倀が盞手に䌝わるこず」は別物である ず、身をもっお痛感したした。 どれほど高床なロゞックを組んでも、ナヌザヌ芖点の UX やプレれンテヌションが䌎わなければ、プロダクトの䟡倀は正しく届きたせん。   孊びず今埌の展望 個人開発から「チヌムの生産性を蚭蚈する」゚ンゞニアぞ 以前は Claude Code を個人の䜜業効率化ツヌルずしお閉じた䜿い方をしおいたした。 しかし今回のハッカ゜ンを通じ、 AI のカスタマむズや開発手順を GitHub 経由でチヌム党䜓に共有するこずで、 党員のアりトプット品質が平準化され、底䞊げされるこず を実感したした。 ゚ンゞニアの本来の圹割は「自分がコヌドを速く曞くこず」だけではなく、 「チヌム党䜓が良いプロダクトを打率高く䜜れる仕組み環境・芏玄・ツヌルチェヌンを蚭蚈するこず」 にあるず、倧きな意識の倉化がありたした。   今埌の目暙 AR 機胜の高床化ずチヌム開発ぞの挑戊 今回開発したメタれロの機胜の぀である AR 機胜は、実はただロヌドマップにおける「フェヌズ 3 数匏の 3D 衚瀺」段階です。 今埌は以䞋のロヌドマップに沿っお拡匵を進める予定です。 フェヌズ 4  Σ や  ∫ などの耇雑な蚘号ぞの察応 フェヌズ 5 化孊の 3D 分子構造モデルの衚瀺抂念理解の補助 フェヌズ 6 Meta Quest 3 や Xreal などの空間コンピュヌティングデバむスぞの移怍  「教科曞の蚘号が頭の䞭で立䜓化しない」ずいう孊習の課題を完党に解決するため 、これからも技術的な挑戊を続けおいきたす。   たた、残りの倧孊生掻では意識的に倚様なチヌム開発ぞ飛び蟌み、今回の 10 日間で培った 「開発環境の暙準化」ず「LLMチュヌニングの実践力」 を歊噚に、゚ンゞニアずしおのキャリアを築いおいきたす。   ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 掚枬ではなく「実枬」で勝負する。LLMパフォヌマンスチュヌニングずCI/CD導入でチヌムの生産性を底䞊げした話 first appeared on SIOS Tech Lab .
こんにちは。サむオステクノロゞヌ OSS サポヌト担圓 山本です。 今回は TimescaleDB の具䜓的な掻甚䟋ずしお、統合監芖ツヌル「Zabbix」のバック゚ンドデヌタベヌスに採甚する方法をご玹介したす。 ■ざっくりおさらいTimescaleDB っお TimescaleDB は、Tiger Data 瀟 (旧 Timescale 瀟) による PostgreSQL の拡匵機胜 で、 超倧芏暡デヌタの集蚈凊理に特化 した「 時系列デヌタベヌス / 列指向デヌタベヌス 」ずしお振る舞う “hypertable” ずいう特殊なテヌブルを䜜成・管理する機胜などを提䟛しおくれたす。 参考過去蚘事 時系列デヌタベヌス「TimescaleDB」っお䜕なんだ ■ざっくりおさらいZabbix っお Zabbix は、Zabbix 瀟が開発を䞻導する OSS の統合監芖プラットフォヌムです。 サヌバヌやネットワヌク機噚などから倚皮倚様なデヌタを収集する 監芖機胜 や、収集デヌタの可芖化・障害怜知時のアラヌト通知などを行える高機胜な Web むンタヌフェヌス を備えおいたす。 ■Zabbix で TimescaleDB を䜿う TimescaleDB は「倧量の時系列デヌタ」の扱いを埗意ずしおいたすが、監芖システムである Zabbix はその代衚䟋ず蚀えたす。 たた Zabbix は公匏に TimescaleDB をサポヌトしおおり、導入が比范的容易ず蚀えたす。 そのセットアップの流れず、泚意すべきポむントを確認しおいきたしょう。 ■TimescaleDB (PostgreSQL) を準備する たずは PostgreSQL ず TimescaleDB をむンストヌルしたす。 自前の環境にセットアップする堎合は、以䞋の TimescaleDB 公匏ドキュメントに沿っお実斜すればよいでしょう。OS ごずにコマンド単䜍でたずめられおいたす。 参考 Install self-hosted TimescaleDB – Tiger Data 泚意点ずしお、Zabbix 偎の TimescaleDB 察応バヌゞョンには 䞋限だけでなく 侊限 も定められおいたす。 そのため、「ずりあえず最新バヌゞョンを入れおおけば倧䞈倫だろう」ず考えおいるず躓く堎合がありたす。 参考 2 芁件 – Zabbix Doc 7.0 未察応バヌゞョンの TimescaleDB をむンストヌルした堎合、むンストヌル自䜓は成功しおも Zabbix サヌバヌ起動時にバヌゞョンチェックで゚ラヌずなり起動したせん 。 以䞋は Zabbix7.0.32 に TimesclaDB2.31.0 を入れお実際に躓いた䟋です ※䞀応、Zabbix の蚭定ファむルzabbix_server.confにバヌゞョンチェックを無効化する蚭定項目 AllowUnsupportedDBVersions はありたすが、これを䜿甚する堎合正垞に動䜜する保蚌はありたせん。 ■Zabbix をむンストヌルする 続いお、Zabbix をむンストヌルしたす。 こちらも公匏のむンストヌルガむドに沿っお進めれば問題ないでしょう。デヌタベヌスの皮類には PostgreSQL を遞択しおください。 参考 Download and install Zabbix ■デヌタベヌスを TimescaleDB 向けに初期化・アップグレヌドする note: 元々 PostgreSQL で Zabbix サヌバを運甚しおいる堎合、この手順のみ実行すれば OK です。ただし、スクリプトの実行には時間がかかる可胜性がありたす。 Zabbix の初期スキヌマを投入した埌、 Zabbix Server を停止させた (たたは起動前の) 状態で 、以䞋のペヌゞを参考に TimescaleDB 向けの初期化スクリプトを実行したす。(以䞋は Zabbix 7.0 向けの手順) 参考 6 TimescaleDBのセットアップ – Zabbix Doc 7.0 スクリプトの適甚埌、Zabbix サヌバヌを起動しお Web むンタヌフェヌスの「管理 > デヌタの保存期間」を開き、以䞋の蚭定を確認・有効化したす。以䞋は Zabbix7.0 での䟋です  ・「アむテムのヒストリの保存期間蚭定を䞊曞き」 有効  ・「アむテムのトレンドの保存期間蚭定を䞊曞き」 有効  ・「ヒストリ、トレンド、監査ログの圧瞮」の項目が衚瀺されおおり、有効になっおいるこず ■Zabbix で TimescaleDB を䜿う堎合の匷みず留意点 Zabbix で TimescaleDB を䜿甚するようにセットアップするのは (マニュアルも導入甚 .sql ファむル等も敎っおいるので) そこたで難しくなさそうだ、ずいうずころは確認できたず思いたす。 では、Zabbix においお TimescaleDB がどんなメリットや泚意点をもたらすか、䞻たるずころを少し考えおみたしょう。 ■デヌタ容量 (=ディスク消費量) の倧幅な削枛 Zabbix に限らず監芖システムずいうのは 基本的に倧量のデヌタを保存する こずになるので、 ディスク容量の逌迫はトラブルの代衚䟋 です。 TimescaleDB では、䞀定以䞊叀くなったデヌタ矀 (chunk) を様々な圧瞮技術を䜿っお圧瞮・再構成したす。 実際の圧瞮率はそのデヌタ矀がどれだけ圧瞮に適しおいるかによりたすが、これにより 最倧 95% ほどデヌタ容量が削枛できる 可胜性があるずされおいたす。 このデヌタ圧瞮により、 ディスク容量䞍足の発生を抑制・䜎枛 できる可胜性が考えられたす。 この性質は長期間監芖デヌタを保持したい堎合や倧芏暡監芖をする堎合に特に優䜍です。 ■housekeeperデヌタ削陀凊理による負荷・ハングアップの防止 Zabbix では、 housekeeper ずいうプロセスによっお定期的に 叀く䞍芁になった監芖デヌタなどの削陀 をしおいたす。 Zabbix は仕組み䞊圓然ながら倧量の監芖デヌタを蓄積したす。 しかし䞀方で、 MySQL や PostgreSQL などの暙準的な RDB は、 倚量のデヌタが蓄積されおいる状態で特定のデヌタを遞択しお削陀する凊理 を 苊手 ずする傟向があり、高負荷の状況を発生させるトラブルを誘発しがちです。 実際、「 housekeeper 凊理が原因でハングアップした 」ずいうのは Zabbix あるあるトラブルの代衚䟋だったりしたす。 これは党䜓的な蚭定ミスや環境芁件など耇数の問題が絡んでくるので、解決が結構倧倉です。 ずころで、TimescaleDB は䞻に “時間” の情報を元にデヌタ矀を chunk ず呌ばれる小さな塊に分けお敎理しおおり、その仕組み䞊「 䞀定以䞊以前のデヌタをたずめお消す 」ずいう凊理を 極めお䜎い負荷 で実行できたす。 この性質により、 housekeeper 凊理に起因するトラブルを未然に軜枛 できる可胜性が考えられたす。 ■留意点あれこれ ・ 叀いデヌタの自動削陀を有効にするには監芖デヌタの保存期間を統䞀する必芁がある TimescaleDB を䜿甚する堎合、先述のずおり「管理 > デヌタの保存期間」の “アむテムのヒストリの保存期間蚭定を䞊曞き” ず “アむテムのトレンドの保存期間蚭定を䞊曞き” を有効にする必芁がありたす。 この蚭定により、 Zabbix の党監芖デヌタの保存期間が統䞀されたす 。 このため、 䞀郚の監芖蚭定のみデヌタの保存期間を長く/短くするずいうこずができたせん 。 基本的には最も長く保存したいものに合わせるこずになるかず思いたすが、堎合によっおはこれにより逆に総合的なデヌタ容量が増えるケヌスもあり埗るでしょう。 なお、”アむテムのヒストリの保存期間蚭定を䞊曞き” ず “アむテムのトレンドの保存期間蚭定を䞊曞き” を有効にしなくおもほずんどの機胜は動䜜はしたすが、 有効にしおいない堎合は housekeeper による叀いデヌタの自動削陀凊理ができなくなりたす 。 これはディスク容量の問題に盎結するため、やめおおいたほうがよいでしょう。 ・ Zabbix には元々デヌタ容量削枛の仕組みがある Zabbix では取埗した実際の監芖デヌタ「ヒストリ」の他に、各1時間ごずの監芖デヌタの[取埗数・最倧倀・最小倀・平均倀]を蚘録する「トレンド」を保存しおいたす。 「トレンド」は1時間で1぀分のデヌタセットを保持すればよいため、実際の監芖デヌタである「ヒストリ」よりも倧幅にデヌタ容量を削枛できたす。 これを利甚し、现かく調査したい期間分だけ「ヒストリ」を保存し、それより叀いデヌタは「トレンド」だけ残す  ずいうデヌタ容量削枛方法が Zabbix には昔からありたす。 TimescaleDB でのデヌタ容量削枛効果が出おくるのは圧瞮の埌 なので、「ヒストリ」の保存期間が短くおもよい堎合には デヌタ容量の芳点では TimescaleDB を採甚するメリットは盞察的には小さくなるでしょう。 ■おわりに 今回は、Zabbix のデヌタベヌスに TimescaleDB を採甚する構成に぀いおお話ししたした。 TimescaleDB 自䜓の知識があったほうがいいこずやその他留意点などは倚少存圚するものの、手間は少なく運甚䞊の倉曎点も殆どなしで導入できるこずがわかるかず思いたす。 そしお、理論䞊は Zabbix サヌバにおける負荷を党䜓的に軜枛 しおくれるこずが期埅できる、ずいうメリットも確認したした。 これから Zabbix での監芖環境を構築する方やリプレヌスを怜蚎されおいる方、負荷問題でお悩みの方は遞択肢の䞀぀ずしお怜蚎しおみおはいかがでしょうか ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post Zabbix のデヌタベヌスずしお TimescaleDB を䜿甚する first appeared on SIOS Tech Lab .
はじめに 2026 幎 10 月 21 日、PHP においお深刻なリモヌトコヌド実行 (RCE) の脆匱性 2 ä»¶ (CVE-2026-109618、CVE-2026-109619、通称「 PHP2Shell 」) が公衚されたした。 PHP のセキュリティアドバむザリでは、深刻床は Critical ず評䟡されおいたす。 同日倜には高垂銖盞が自身の X 䞊で「今倜に察応しお頂きたい倧至急のお願い」ずポストし、パッチ適甚や、Web サむトの䞀時停止を呌びかけるずいう異䟋の事態に発展したした。 https://x.com/takaichi_sanae/status/2112890642590564386 脆匱性の抂芁 PHP2Shell ずは、以䞋2぀の PHP 凊理系における脆匱性の通称 です。 CVE-2026-109618 CVE-2026-109619 本脆匱性が悪甚された堎合、認蚌されおいないリモヌトの攻撃者によっお、察象サヌバ䞊で任意のコヌドが実行される可胜性がありたす。これにより、サヌバの䞍正操䜜や Web サむトの改ざん、機密情報の挏えいなどの被害が発生するおそれがありたす。 以䞋 2 ぀の問題により、リモヌトコヌド実行が可胜ずなりたす。 现工した HTTP リク゚ストで out-of-memory(OOM) ゚ラヌを匕き起こすず、初期化凊理が途䞭で䞭断され、䞍正なメモリ状態が残る 別の HTTP リク゚ストを凊理する際に、その䞍正なメモリを参照しおしたう 本脆匱性には有効な回避策が存圚せず、修正枈みバヌゞョンぞの曎新が唯䞀の根本察策ずされおいたす。 参考 https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp https://www.php2shell.com/ https://www.php.net/archive/2026.php#2026-10-21-5 圱響を受ける PHP バヌゞョン 圱響を受けるバヌゞョンず修正枈みバヌゞョンに぀いおは以䞋の通りです。 系列 圱響を受けるバヌゞョン 修正枈みバヌゞョン 8.2 8.2.35 より前 8.2.35 8.3 8.3.36より前 8.3.36 8.4 8.4.27より前 8.4.27 8.5 8.5.12より前 8.5.12 圱響を受けるバヌゞョンをご利甚の堎合は、䞊蚘の修正枈みバヌゞョンぞ移行しおください。 なお、サポヌトが終了しおいる PHP 7.4 / 8.0 / 8.1 に぀いおは、最小限のパッチが公開されおいたす。ただし、これらを利甚する堎合は、自身で゜ヌスコヌドからビルドし盎す必芁がありたす。 https://www.php.net/archive/2026.php#2026-10-21-5 Given the severity of these vulnerabilities, the PHP security team provided minimal source-backports for PHP 7.4 , PHP 8.0 , and PHP 8.1 to help people building from source or without access to an LTS vendor. PHP 7.4:  https://github.com/php/php-src/tree/PHP-7.4-CVE-2026-109618-109619 PHP 8.0:  https://github.com/php/php-src/tree/PHP-8.0-CVE-2026-109618-109619 PHP 8.1:  https://github.com/php/php-src/tree/PHP-8.1-CVE-2026-109618-109619 䞻芁なディストリビュヌションの状況 Red Hat Enterprise LinuxRHEL Red Hat は本脆匱性の深刻床を「 Important 」ず評䟡しおいたす。 RHEL では䞀般的に PHP-FPM が䜿甚されおおり、リモヌトコヌド実行を成立させるこずが困難であるずのこずです。 RHEL 8 / 9 / 10 におけるセキュリティ修正 (RHSA) が公開されおいたす。圱響を受ける具䜓的なコンポヌネントや修正枈みパッケヌゞのバヌゞョンに぀いおは、以䞋の公匏情報を参照しおください。 CVE-2026-109618: https://access.redhat.com/security/cve/cve-2026-109618 CVE-2026-109619: https://access.redhat.com/security/cve/cve-2026-109619 Rocky Linux Rocky Linux は RHEL の方針に準拠しおおり、 本脆匱性の深刻床はアップストリヌムず同様に「 Important 」ずしお扱われおいたす。 Rocky Linux 8 / 9 / 10 におけるセキュリティ修正 (RLSARocky Linux Security Advisory) が公開されおいたす。圱響を受ける具䜓的なコンポヌネントや修正枈みパッケヌゞのバヌゞョンに぀いおは、以䞋の公匏情報を参照しおください。 Rocky Linux Errata: https://errata.rockylinux.org/ AlmaLinux AlmaLinux のセキュリティアドバむザリにおける深刻床は、Red Hat に準拠した「 Important 」ずしお扱われおいたす。 AlmaLinux 8 / 9 / 10 におけるセキュリティ修正 (ALSAAlmaLinux Security Advisory) が公開されおいたす。圱響を受ける具䜓的なコンポヌネントや修正枈みパッケヌゞのバヌゞョンに぀いおは、以䞋の公匏情報を参照しおください。 公匏アナりンス:  https://almalinux.org/blog/2026-10-21-php2shell-cve-2026-109618-cve-2026-109619/ AlmaLinux Errata:  https://errata.almalinux.org/ Ubuntu Canonical は、 本脆匱性の深刻床を PHP 開発元ず同様に「 Critical 」ず評䟡しおいたす。 珟圚サポヌト察象ずなっおいる䞻芁リリヌス (26.10、26.04 LTS、24.04 LTS、22.04 LTS など ) 向けに、セキュリティパッチ (USNUbuntu Security Notice) が公開されおいたす。 圱響を受ける具䜓的なコンポヌネントや修正枈みパッケヌゞのバヌゞョンに぀いおは、以䞋の公匏情報を参照しおください。 USN-8948-1: https://ubuntu.com/security/notices/USN-8948-1 USN-8948-2: https://ubuntu.com/security/notices/USN-8948-2 CVE-2026-109618:  https://ubuntu.com/security/CVE-2026-109618 CVE-2026-109619:  https://ubuntu.com/security/CVE-2026-109619 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post PHPにおける深刻な脆匱性 PHP2Shell に぀いお first appeared on SIOS Tech Lab .
歊井でございたす。 ちゃんずした DSPデゞタル信号凊理の機材を買おうずするず、数䞇円から10䞇円近くしたす。DSP ずは、スピヌカヌの音を補正したり、゚フェクトをかけたりする機材です。むコラむザヌやコンプレッサヌなどが入っおいお、ラむブハりスやスタゞオでは定番の装備です。昔のラゞカセにも簡易的なの぀いおいたしたよね、高音域ずか䜎音域ずか調敎するグラむコっお呌ばれおいたや぀。ドンドンっお重䜎音響かせるこずの出来るアレです。DSPはそれのもっずすごいや぀です。 それが、 ラズパむず数千円のオヌディオむンタヌフェヌス、無料のアプリだけ で䜜れおしたう。アンプたで蟌みで 箄2䞇円 です。 しかも音の調敎は、自分では1぀も数倀を考えおいない。AI に「こもっおるからすっきりさせお」ず日本語でお願いしお、出おきた テキストをむンポヌトしただけ 。 気に入らなければ「もうちょい䜎音控えめで」ず蚀えば、䜜り盎しおくれる。 控えめにいっお最高です。 たずは実物を芋おください。     DSP たわりをアップにするず、こんな感じです。 ※ 䞊がタッチディスプレむに映した Easy Effects、手前巊が Raspberry Pi 5、真ん䞭の黒い箱がアンプFX-AUDIO FX202A/FX36A PRO、右の銀色の箱が UCA222 です。 なぜ䜜ったのか スピヌカヌの音を補正したいずき、定番なのが DSP です。むコラむザヌで垯域ごずに音量を敎えたり、゚フェクトをかけたりできたす。 ただ、これがマゞで高い。 そのうえ、買ったあずも問題がありたす。 むコラむザヌをどういじればいいのか、正盎よくわからない 。䜕 Hz を䜕 dB 削ればいいのか、聞いおもピンずこないわけです。専甚゜フトの画面でバンドを1本ず぀動かしお、耳で確かめお  を延々ず繰り返すこずになりたす。 そこで考えたした。 DSP は、 Raspberry Pi 5 + Easy Effects にやらせればいい。Easy Effects は無料のオヌプン゜ヌスなのに、むコラむザヌ、コンプレッサヌ、ノむズ陀去たで入っおいる Easy Effects のむコラむザヌは、 蚭定をテキストファむルでむンポヌトできる 。ずいうこずは、そのテキストを AI に曞かせればいい ぀たり、 機材は栌安、音䜜りは AI に日本語でおたかせ 。これが今回の凄みです。 ずいうわけで䜜ったのが、この環境です。 党䜓像 音の流れはこうなっおいたす。 Android タブレット のむダホン端子から、3.5mm → RCA の倉換ケヌブルで UCA222 に入れる UCA222 がアナログ音声をデゞタルに倉換ADCしお、USB でラズパむぞ送る Raspberry Pi 5 の Easy Effects が゚フェクトをかける 凊理枈みの音を USB で UCA222 に戻し、UCA222 がアナログに戻すDAC UCA222 から RCA で ミキサヌ → アンプ → スピヌカヌ ポむントは、 UCA222 1台で入口ADCず出口DACの䞡方をたかなっおいる ずころです。USB ケヌブルも1本で枈みたす。地味にえらい。 䜿った機材 ※ Raspberry Pi 5 の 2GB モデルが 2024幎8月に発売されたずきの、スむッチサむ゚ンスでの皎蟌䟡栌です。メモリ䟡栌の高隰で、その埌は倀䞊がりしおいたす。Easy Effects のメモリ䜿甚量は玄 350MB だったので、2GB でも足りる芋蟌みです。 ゜フトりェア 泚意 Easy Effects は 8.x で画面が䜜り盎されおいたすGTK 版 → Qt 版。7.x 以前の解説蚘事ずはボタンの䜍眮や蚭定ファむルの保存先が違うので、バヌゞョンを確認しおから読んでください。 Easy EffectsLinux の音に゚フェクトをかけるアプリ Easy Effects は、Linux のサりンドサヌバヌ PipeWire の䞊で動く゚フェクトアプリです。むコラむザヌ、コンプレッサヌ、ノむズ陀去など、ひずずおりの゚フェクトがそろっおいたす。 画面は2぀に分かれおいたす。 Output出力偎 PC で再生しおいる音YouTube や音楜アプリなどに゚フェクトをかける Input入力偎 マむクから入っおきた音に゚フェクトをかける 今回はタブレットの音を UCA222 から「入力」ずしおラズパむに入れるので、 Input のほうを䜿いたす。 Listen to Micトグル1぀で入力をスピヌカヌぞ ここが今回いちばんのキモです。 Easy Effects の Input は、本来マむクの音を加工しお、録音アプリや通話アプリに枡すための機胜です。぀たり そのたたでは、加工した音はスピヌカヌから出おきたせん 。 ふ぀うは PipeWire の loopback 蚭定を曞いたり、配線ツヌルで぀ないだりするずころです。でも Easy Effects には 「Listen to Mic」 ずいうトグルがあっお、これを ON にするだけで、加工埌の音が出力デバむスに盎接流れたす。 UCA222 入力 → Equalizer → Crystalizer → Exciter今はバむパス → Easy Effects Source仮想マむク → UCA222 出力 蚭定ファむルも配線ツヌルも䞍芁。トグル1぀です。 画面右䞋のマむクのボタンがそれです埌述。 構築手順 1. OS を甚意する Raspberry Pi Imager で Raspberry Pi OS64-bit、デスクトップあり を microSD に曞き蟌んで、初期蚭定たで枈たせたす。今の Raspberry Pi OS は最初から PipeWire で音を扱っおいるので、サりンドたわりの远加蚭定はいりたせん。 2. Easy Effects をむンストヌルする Flatpak 版を䜿いたす。残っおいた7行の履歎は、ほがこれでした。 # Flatpak 本䜓をむンストヌル sudo apt install flatpak # FlathubFlatpak のアプリ配垃元を登録 sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo # Easy Effects をむンストヌル sudo flatpak install flathub com.github.wwmm.easyeffects # 再起動アプリメニュヌに Easy Effects が出おくるようになる sudo reboot 3. 機材を぀なぐ 党䜓像の図のずおりに配線したす。 UCA222 をラズパむの USB ポヌトに぀なぐ タブレットのむダホン端子 → 3.5mm-RCA 倉換ケヌブル → UCA222 の INPUT UCA222 の OUTPUT → RCA ケヌブル → ミキサヌ ミキサヌ → アンプ → スピヌカヌ UCA222 が認識されおいるかは、次のコマンドで確認できたす。 USB Audio CODEC ず出れば OK です。 aplay -l # 再生デバむス出力の䞀芧 arecord -l # 録音デバむス入力の䞀芧 card 2: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio] 泚意 ミキサヌずアンプのボリュヌムは、絞った状態から始めおください。いきなり爆音が出るず、ゞャンクのスピヌカヌが本圓のゞャンクになりたす。 Easy Effects の画面はこんな感じ 画面はこんな感じです。 メむン画面 Input 入力偎の゚フェクトを蚭定する画面に切り替えたす。今回はこちらを䜿いたす Add effect ゚フェクトを远加したす ゚フェクトの䞊び 䞊から順に音が通りたす。電源アむコンで ON/OFF、ゎミ箱で削陀、右端の぀たみで䞊べ替えです。グレヌになっおいる Exciter はバむパス無効䞭 マむクのボタン これが Listen to Mic です。ON にするず、加工した音が出力デバむスUCA222から出おきたす 入力デバむスず出力デバむスには、どちらも PCM2902 Audio Codec UCA222 の䞭のチップ名を遞んでおきたす。「UCA222」ずは衚瀺されないので、ちょっず迷いたす。 ゚フェクトの远加 Add effect を抌すず、゚フェクトの䞀芧が出おきたす。 Search 「equalizer」ず打おば䞀発で芋぀かりたす + 抌すず゚フェクトが远加されたす たずは Equalizer を远加しおおきたしょう。噚ができたら、䞭身を AI に䜜っおもらいたす。 AI にむコラむザヌを䜜っおもらう テキストで読み蟌めるから、AI ず盞性がいい この蚘事でいちばん䌝えたいのがここです。 むコラむザヌの蚭定を GUI でしか入力できないなら、AI に数倀を考えおもらっおも、結局は自分で1぀ず぀打ち蟌むこずになりたす。でも Easy Effects は、 蚭定をテキストファむルでむンポヌトできたす 。AI はテキストを曞くのが倧埗意なので、 AI の出力を、そのたた音䜜りに流し蟌める わけです。 APO 圢匏で出しおもらうのがコツ むコラむザヌの蚭定は、 Equalizer APO 圢匏 AutoEq 圢匏ずも呌ばれたすで出しおもらいたす。 1行が1぀のフィルタヌになっおいる、人間にも読めるテキスト PC 甚の Equalizer APO や AutoEq などで広く䜿われおいるので、AI もこの圢匏をよく知っおいる Easy Effects の Equalizer にそのたたむンポヌトできる ちなみに筆者は、この蚘事を曞く盎前たで「JSON で読み蟌たせたんだっけ」ず思い蟌んでいたした。掘り返しおみたら、䜿っおいたのはこの APO 圢匏のテキストでした。蚘憶ずはあおにならないものです。JSON は、Easy Effects のプリセット党䜓を保存したずきにできるファむルのほうです埌述。 このむコラむザヌを䜜ったプロンプト AI に䌝えるのは、次の4぀です。 どんな機材か 䜕が䞍満か どうしたいか 出力の圢匏ず条件 ※ 圓時のプロンプトは残っおいなかったので、以䞋は同じ結果が出るように再珟したものです。 Raspberry Pi 䞊の Easy Effects でスピヌカヌの音を調敎したいです。 むコラむザヌの蚭定を、Equalizer APO 圢匏のテキストで䜜っおください。 # 環境 - スピヌカヌはゞャンク品の小型ブックシェルフ。玠性はよくわからない - 音源はタブレットの音楜アプリ。ポップスや歌モノが䞭心 # 困っおいるこず・したいこず - 党䜓的にこもっお聞こえるので、すっきりさせたい - ボヌカルを前に出したい - 䜎音はほんの少しだけ足したいが、ブヌミヌにはしたくない - 高音に少し空気感がほしい # 条件 - フィルタヌはピヌキングPKを6本以内 - ゲむンは ±3dB 皋床の控えめな調敎にする - 音割れしないように Preamp でマむナス補正を入れる - 各フィルタヌの意図も説明しおほしい AI が出しおきたもの Preamp: -4 dB Filter: ON PK Fc 100 Hz Gain 2 dB Q 1.0 Filter: ON PK Fc 250 Hz Gain -3 dB Q 1.0 Filter: ON PK Fc 500 Hz Gain -2 dB Q 1.0 Filter: ON PK Fc 1000 Hz Gain 1 dB Q 1.0 Filter: ON PK Fc 3000 Hz Gain 2 dB Q 1.0 Filter: ON PK Fc 8000 Hz Gain 3 dB Q 1.0 たった7行です。これをラズパむ䞊で preset.txt ずしお保存したした。 mkdir ~/eq vi ~/eq/preset.txt # AI の出力を貌り付けお保存 出力ファむルの読み方 7行ずはいえ、䜕が曞いおあるのかわからないたた䜿うのも気持ち悪いので、読み方を抌さえおおきたす。 1行の意味 Filter: ON PK Fc 100 Hz Gain 2 dB Q 1.0 を分解するずこうなりたす。 Preamp: -4 dB は、むコラむザヌに入る 前に 党䜓の音量を 4dB 䞋げる蚭定です。むコラむザヌで持ち䞊げた垯域が 0dB を超えお音が割れるクリップするのを防ぐためのものです。 この蚭定は䜕をしおいるか ひずこずで蚀うず「 䞭䜎域のこもりを取っお、ボヌカルず高域を前に出す 」です。安いスピヌカヌにありがちな、もこもこした鳎り方ぞの察策ずしおは定番の圢だそうですAI 談。 気に入らなければ、「もう少し䜎音を枛らしお」「8kHz が刺さるので匱めお」ず 蚀葉で远加泚文しお䜜り盎しおもらうだけ 。ここがこの方法のいちばん楜なずころです。 Easy Effects に読み蟌たせる 画面巊䞊の Presets を抌すず、この画面が出おきたす。 New preset name プリセットの名前を入れる欄 + 今の蚭定を、1 に入れた名前のプリセットJSON ファむルずしお保存したす むンポヌト ファむルからプリセットを読み蟌みたす。筆者の蚘憶では、ここから preset.txt を読み蟌みたした 読み蟌めるず、Equalizer の6本のバンドに呚波数・ゲむン・Q が入り、各バンドのモヌドが APO (DR) になりたす。 蚭定が決たったら、1 に名前を入れお 2 の + で保存しおおくず安心です。別のラズパむに持っおいくずきにも䜿えたす。 たずめ どうでしたでしょうかたずもに買うず高いDSPが、ちょっずした工倫でこんなに安く、しかもAIで音質を制埡なんおステキですね。浮いたお金でさらによいスピヌカヌ買いたくなっおきたした。 ご芧いただきありがずうございたす 参考 Easy EffectsGitHub https://github.com/wwmm/easyeffects Easy EffectsFlathub https://flathub.org/apps/com.github.wwmm.easyeffects ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post ラズパむずAIで䜜ったオレの栌安高音質オヌディオ環境、控えめにいっお最高すぎる〜Raspberry Pi + Easy Effects で自䜜DSP、音の調敎はAIにおたかせ〜 first appeared on SIOS Tech Lab .