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

TECH PLAY

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

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

å…š672ä»¶

PSSL の䜐々朚です 移動䞭に Claude Code を回しおおきたいのですが、満員電車でノヌト PC を開くのは無理です。カバンに入れたたた凊理だけ走らせおおきたいです。 そうするず解決したい問題が 2 ぀出おきたす。 フタを閉じるずスリヌプしお凊理が止たる テザリングだずスマホのバッテリヌが枛るうえ、PC ずスマホが䞍意に離れるず Wi-Fi が切れる この 2 ぀を朰す蚭定をたずめたす。Windows 偎はすべお PowerShell で完結させたす。 最近はPCがスリヌプしないようにちょっずだけPCを開けたたた手に持ち歩く人もいるみたいですが、PCを萜ずしたり普通に邪魔なのでカバンに入れた状態でもClaudeが動くための環境を䜜りたした。 この蚭定は普通に䌚瀟から怒られるかもしれないので自己責任でお願いしたす。 1. フタを閉じおも止めない 管理者暩限の PowerShell で実行したす。 powershell # フタを閉じたずきの動䜜を「䜕もしない」にバッテリヌ駆動時 powercfg /setdcvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0 # 電源接続時も同様 powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0 # スリヌプ移行そのものを無効化0 = 無効 powercfg /change standby-timeout-dc 0 powercfg /change standby-timeout-ac 0 # ディスプレむは切っおよい1分 powercfg /change monitor-timeout-dc 1 # 反映 powercfg /setactive SCHEME_CURRENT LIDACTION の倀です。 0 ... 䜕もしない 1 ... スリヌプ 2 ... 䌑止状態 3 ... シャットダりン 珟圚倀の確認はこちら。 powershell powercfg /query SCHEME_CURRENT SUB_BUTTONS powercfg /a # モダンスタンバむ察応かの確認 WSL 偎も萜ちないようにしおおきたす。 %USERPROFILE%\.wslconfig に远蚘しお wsl --shutdown 。 ini [wsl2] vmIdleTimeout = -1 凊理自䜓は tmux の䞭で回しおおくず、埩垰埌にそのたた続きが芋られたす。 bash tmux new -s claude claude --dangerously-skip-permissions # Ctrl+b → d でデタッチ   Macの堎合はさらに簡単でamphetamineずいうアプリを入れおおくず蓋を閉じおもスリヌプしなくなりたす。 https://apps.apple.com/jp/app/amphetamine/id937984704?mt=12 2. テザリングをやめおリチャヌゞWi-Fiにする テザリングをやめる理由は 2 ぀です。スマホのバッテリヌが目に芋えお枛るこず、そしお満員電車で䜓勢が倉わっお PC ずスマホが離れるず Wi-Fi が切れるこずです。これを解決するためにリチャヌゞWi-Fiを買いたした。 リチャヌゞWi-FiはTypeCをPCに盎刺しするずネットに぀ながりたす。(特に蚭定もなく、さしおしばらくするずネットに぀ながるようになりたす。) リチャヌゞWi-Fiは100GB8000円ぐらいから売っおいお、100GB䜿い切ったらポヌタルサむトでチャヌゞするずたた䜿えるようになりたす。 https://www.amazon.co.jp/【リチャヌゞWiFi】バッテリヌレス-100GB-リチャヌゞ-䞀䜓型【M4-100GB-365日】/dp/B0DXVNKZ8T/ref=asc_df_B0DXVNKZ8T?mcid=c2d7374fee12300a9c74a8ba8ade9134&tag=jpgo-22&linkCode=df0&hvadid=707549940401&hvpos=&hvnetw=g&hvrand=8194794017880763317&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009285&hvtargid=pla-2444400325634&psc=1&hvocijid=8194794017880763317-B0DXVNKZ8T-&hvexpln=0 カバンにPCを入れるずこんな感じです。リチャヌゞWi-Fiが映えたすね カバンが汚いのは芋なかったこずにしおください。   3. 泚意フタを開けたら充電が空になっおいるこずがある ここたでやるず、フタを閉じおもディスプレむが消えるだけで䞭身は党力で動き続けたす。圓然ながら バッテリヌの枛りはかなり速い です。 私は移動䞭に走らせたたた忘れお、目的地でフタを開けたら電源が萜ちおいた経隓がありたす。 客先での商談がある堎合には泚意が必芁が必芁です。 そのため、 カバンにはモバむルバッテリヌPD 察応を䞀緒に入れおおく 長時間走らせるずきは充電しながらにする 移動が終わったら蚭定を戻す 4. たずめ 満員電車で立ったたた䜕もできない時間が、そのたた実行時間になりたす。蚭定は 10 分で終わるので、通勀が長い方は䞀床入れおおくず効きたす。 次は軜くお倧容量のバッテリヌが欲しいです。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 1人がこの投皿は圹に立ったず蚀っおいたす。 The post 満員電車でも Claude Code を動かし続ける技術 first appeared on SIOS Tech Lab .
こんにちは、サむオステクノロゞヌ歊井です。 AI コヌディング゚ヌゞェントを䜿い始めお、ふず䞍安になったこずはないでしょうか。 「このAI、プロゞェクトの䞭を自由に読めるけど   .env   みたいな機密情報も読めおしたうのでは?」 そうなんです。読めちゃうんです。しかも、ただ読めるだけでは終わりたせん。読んだ内容がドキュメントに玛れ蟌んだり、コミットに含たれたりしお、 GitHub リポゞトリ経由で倖郚に挏れる ずころたで想像するず、なかなか怖い話です((((Д)))) この蚘事では、その察策ずしお甚意されおいる Claude Code の暩限機胜ずサンドボックス機胜を取り䞊げたす。ただ「こう蚭定すれば安党」ずいう話で終わらせるのではなく、 なぜその機胜が必芁なのか、どこたで守れお、どこに穎が残るのか を、OS の仕組みたで降りお敎理しおいきたす。途䞭で Linux カヌネルの   fork / exec   ずいう基本機胜たで出おきたすが、そこが腑に萜ちるず、サンドボックスが「なぜそういう圢をしおいるのか」たで芋通せるようになりたす。 なお、以降は Claude Code を題材に話を進めたすが、 基本的な仕組みは他のコヌディング゚ヌゞェントでも倚分同じ   です。蚭定ファむルの名前や項目名は補品ごずに違いたすが、どれも「゚ヌゞェント本䜓のプロセスがファむルを読む」「シェルコマンドを子プロセスずしお起動する」ずいう同じ圢で動いおいお、OS が甚意しおいる道具立お(macOS の Seatbelt、Linux の namespace など)も共通です。この蚘事で扱うのは、その   共通郚分の構造   です。「アプリが自分で我慢しおいるのか、OS が匷制しおいるのか」ずいう芋分け方を持っおおけば、お䜿いのツヌルがどちらの局で守っおくれおいるのかも、同じ物差しで刀断できるようになりたす。 䜕も気を぀けないず、AIは機密情報を読んでしたう たず、問題の党䜓像を確認したす。 倚くのプロゞェクトでは、API キヌやデヌタベヌスの接続文字列ずいった秘密情報を   .env   ファむルに曞いお、プロゞェクト盎䞋に眮いおいたす。ロヌカルで開発する分には䟿利な運甚です。 ずころが、AI コヌディング゚ヌゞェントはプロゞェクト内のファむルを読んで文脈を理解したす。぀たり、 攟っおおくず   .env   も読める ずいうこずです。そしお厄介なのは、読んだ埌に䜕が起きるか予枬しづらい点です。 「README を曞いお」ず頌んだら、環境倉数の蚭定䟋ずしお本物のキヌが埋め蟌たれる コヌド生成の過皋で、秘密情報を含むファむルを参照した内容がコメントに残る それらをコミットしお   git push   した瞬間、 公開リポゞトリに秘密が茉る 「AIが勝手に挏らした」ずいうより、「AIが読めたものが、生成物を経由しお、い぀の間にか倖に出おいく」ずいう流れです。悪意がなくおも起きるからこそ、仕組みで防いでおく必芁がありたす。 たず思い぀く察策 ―― でも、これには穎がある Claude Code には、こうした事故を防ぐための暩限機胜がありたす。 settings.json   の   permissions.deny   に、読たせたくないファむルを曞いおおく方法です。 { "permissions" : { "deny" : [ "Read(./.env)" , "Read(./.env.*)" ] } } これで   Read   ツヌルから   .env   ぞのアクセスがブロックされたす。 Glob   や   Edit   など、ファむルに觊れる他のツヌルに぀いおも同様に指定できたす。 䞀芋これで安心に芋えたすが、 倧きな穎がありたす 。 permissions.deny   がブロックしおいるのは、あくたで   Claude Code ずいうプログラム自身が持぀機胜(Read ツヌルなど)   です。蚀い換えるず、これは   アプリケヌションが自分で「このファむルは読たない」ず自制しおいるだけ   なのです。 では、その自制を回避する経路があったらどうなるでしょうか。ありたす。そう、それは、、、、なんず Bash ツヌル です。 cat .env   も   diff .env other   も、Read ツヌルを䜿っおいたせん。 別プロセスずしお起動されるシェルコマンド です。だから「Read ツヌルを塞ぐ」ずいうアプリレベルの自制は、ここには効きたせん。正面玄関に鍵をかけおも、裏口が開いおいる状態です。 この「裏口」を塞ぐために登堎するのが、サンドボックスです。 サンドボックスずは䜕か ―― システムコヌルそのものを止める アプリの自制ではなく、OSの匷制 permissions.deny   が「アプリの自制」だったのに察し、サンドボックスは   OS レベルの匷制   です。 Claude Code が Bash コマンドを実行するずき、そのコマンドを   サンドボックスで包んで起動   したす。するず、そのコマンドは「特定のファむルにアクセスするシステムコヌル自䜓を呌べない」状態になりたす。 cat   だろうが   diff   だろうが Python スクリプトだろうが、ファむルを読むには必ず OS(カヌネル)に   open()   ずいうシステムコヌルを発行しなければなりたせん。サンドボックスはこの   カヌネルぞの入り口   で怜問を匵るので、どんなプログラムを䜿っおも迂回できたせん。 どのレむダヌで怜問しおいるのか 「アプリの自制」ず「OS の匷制」は、゜フトりェアの局で芋るずたったく違う堎所に立っおいたす。図にするず、こうです。 䞊から順に芋おいきたす。 アプリケヌション局 :   permissions.deny   はここにいたす。この局の特城は、 刀定ロゞックも刀定察象も同じプロセスの䞭にある   こずです。Claude Code が「 .env   を読もうずしおいる自分」を、自分のコヌドで止めおいる。぀たり自䞻芏制です。自䞻芏制の匱点は明確で、 そのルヌルを持っおいないコヌドに仕事を枡せば、ルヌルは適甚されない   こず。 cat .env   は Claude Code のコヌドではないので、 deny   の刀定ロゞックをそもそも通りたせん。 システムコヌルの境界 :   プロセスは自分の䞭では䜕でもできたすが、 ファむルを読む、ネットワヌクに出る、ずいった「倖の䞖界に觊る操䜜」だけは自分では実行できたせん 。必ず   open()   connect()   ずいったシステムコヌルでカヌネルに䟝頌する必芁がある。ここがプロセスの自由が終わる線です。 そしお重芁なのは、この線が   プログラムの皮類に䟝存しない   こず。 cat   でも   diff   でも Python でも、自䜜のバむナリでも、ファむルを読むなら党員この䞀本の線を越えたす。だから、この線の䞊に怜問を眮けば、 「別のプログラムを䜿う」ずいう迂回が原理的に成立したせん 。アプリ局の怜問が「䜿うツヌルを倉える」で抜けられたのず、ちょうど察照的です。 OS カヌネル局 :   実際の刀定はこの局で行われたす。 sandbox-exec   が登録したポリシヌは   カヌネル偎にそのプロセスの属性ずしお蚘録され 、以降そのプロセスがシステムコヌルを発行するたびにカヌネルが照合したす。 ここで立堎が逆転しおいたす。アプリ局では「自分が自分を止めおいた」のに察し、カヌネル局では   止める偎が、止められる偎から手出しできない堎所にいる 。だから「自制」ではなく「匷制」ず呌べるわけです。実装は OS ごずに違いたすが、性質は同じです。 macOS (Seatbelt) : カヌネル内のフックでシステムコヌルごずにポリシヌを照合し、蚱可されないアクセスを拒吊する Linux (bubblewrap) : namespace を䜿っお、 そのプロセスから芋えるファむルシステムの景色自䜓を䜜り替える 。拒吊する以前に、 .env   が存圚しない䞖界を芋せる 前者は「頌んでも断られる」、埌者は「頌む察象がない」ずいう違いですが、どちらも   プロセスの倖偎で決着しおいる   点が共通です。 ハヌドりェア局 :   ここが「関䞎しない」になっおいるのは、単なる䜙癜ではなく   限界の宣蚀   です。サンドボックスの匷制力は「カヌネルが正しく動いおいるこず」に党面的に䟝存しおいたす。カヌネルの脆匱性を突かれお特暩を取られた堎合、刀定者そのものが倒れるので、サンドボックスも䞀緒に倒れたす。 ぀たりサンドボックスは、 「うっかり   cat .env   される」を確実に防ぐ道具 であっお、「カヌネルたで攻略しおくる攻撃者」を想定した壁ではない、ずいう䜍眮づけです。 この「境界の䞊か䞋か」ずいう芖点は、埌半で出おくる抜け穎を理解するずきにも効いおきたす。 どのプロセスに効いおいるのか では、その匷制は Claude Code のどのプロセスに効いおいるのでしょうか。䞭の構造はこうなっおいたす。 ポむントは、 Bash ツヌルは「起動時に明瀺的にサンドボックスでラップする」から拘束される   ずいう点です。裏を返せば、ラップされおいないものには効きたせん。ここが埌半の䌏線になりたす。 なぜ Read ツヌルにはサンドボックスが効かないのか 「システムコヌルを止めるなら、Read ツヌルも止められるのでは?」ず思うかもしれたせん。ここが理解の勘所です。 サンドボックスは   プロセスに貌り付ける制玄   です。プロセスが生成される瞬間に適甚され、そのプロセスず、さらにその子プロセスに効きたす。 䞀方、Read ツヌルは   Claude Code 本䜓プロセスに組み蟌たれた機胜   で、 子プロセスを䜜りたせん 。本䜓が自分で   open()   を呌んでファむルを読むだけです。぀たり、サンドボックスを「貌り付ける察象ずなる新しいプロセス」がそもそも生たれない。だから、Read ツヌルを守りたければ本䜓ごずサンドボックスに入れるしかなく、それをやるず本䜓の正垞動䜜(蚭定の読み曞きや通信)たで壊れおしたいたす。 だから圹割分担になっおいるのです。 Read などの本䜓機胜   →   permissions.deny (アプリの自制)で守る Bash が起動する子プロセス   → サンドボックス(OSの匷制)で守る 䞡方揃えお初めお、正面玄関も裏口も塞がる   わけです。 蚭定はこう曞く ―― サンドボックスを有効にする 仕組みの話が続いたので、ここで䞀床、実際の蚭定を芋おおきたしょう。 たずは   /sandbox   で様子を芋る 䞀番手軜なのは、セッション䞭にスラッシュコマンドを打぀方法です。 /sandbox サンドボックスの蚭定パネルが開き、モヌドの遞択(サンドボックス内のコマンドを自動承認するか、通垞の暩限確認を残すか)や、珟圚の蚭定内容を確認できたす。ここで遞んだ内容は、そのプロゞェクトの   .claude/settings.local.json   に保存されたす。 Linux で必芁なパッケヌゞが足りおいない堎合は Dependencies タブが出お、䜕が足りないかを教えおくれたす。たずはこれを開いおみるのが早いです。 settings.json に曞く すべおのプロゞェクトで有効にしたいなら、ナヌザヌ蚭定   ~/.claude/settings.json   に曞きたす。 { "sandbox" : { "enabled" : true } } これだけです。以降、Bash ツヌルが起動するコマンドは、次の節で芋る「 fork   しお、隙間で蚭定しお、 exec 」ずいう流れでラップされお動きたす。 なお、動く環境には条件がありたす。 macOS : OS 内蔵の Seatbelt を䜿うので、远加むンストヌルは䞍芁 Linux / WSL2 :   bubblewrap (ファむルシステム隔離)ず   socat (ネットワヌク䞭継)が必芁 sudo apt-get install bubblewrap socat # Ubuntu / Debian ネむティブの Windows は非察応で、WSL2 の䞭で動かす必芁がありたす。 重芁 ―― 有効にするだけでは   .env   は読めたたたです そしお、この蚘事のテヌマにずっお䞀番倧事な泚意点です。 "enabled": true   にしただけでは、 .env   の読み取りは止たりたせん。 デフォルトのポリシヌは、読みず曞きで非察称になっおいたす。 曞き蟌み : 䜜業ディレクトリ(ず䞀時ディレクトリ)だけ蚱可 読み取り :   マシン党䜓が蚱可 (䞀郚の拒吊ディレクトリを陀く) ぀たり、デフォルトのサンドボックスが䞻に想定しおいるのは「䜜業ディレクトリの倖を勝手に曞き換えられるこず」ず「知らないドメむンに通信されるこず」の防止です。 読み取りに぀いおはかなり緩く、 ~/.aws/credentials   や   ~/.ssh/   すら読めたす 。 ですから、 .env   を守りたければ、読み取り拒吊を明瀺的に曞く必芁がありたす。 { "sandbox" : { "enabled" : true , "filesystem" : { "denyRead" : [ "./.env" ] } , "credentials" : { "files" : [ { "path" : "~/.aws/credentials" , "mode" : "deny" } , { "path" : "~/.ssh" , "mode" : "deny" } ] , "envVars" : [ { "name" : "GITHUB_TOKEN" , "mode" : "deny" } ] } } } filesystem.denyRead : サンドボックス内のプロセスからの読み取りを、OS レベルで拒吊する credentials.files : 同じこずを「秘密情報」ずしおたずめお曞ける枠( "mode": "deny" ) credentials.envVars :   サンドボックス実行前に、その環境倉数を消す 。ファむルを塞いでも、同じ秘密が環境倉数に入っおいおは意味がないので、ここも倧事です パスの曞き方には癖がありたす。 sandbox.filesystem.*   は䞀般的な慣習どおりで、 /tmp/build   が絶察パス、 ~/   がホヌム、 ./   がプロゞェクトルヌトです。ただし   ./   がプロゞェクトルヌトを指すのは   プロゞェクト蚭定( .claude/settings.json )に曞いた堎合だけ   で、ナヌザヌ蚭定に同じものを曞くず   ~/.claude   からの盞察になっおしたいたす。䞊の䟋のような   ./.env   は、プロゞェクト偎に眮いおください。 2箇所に曞くこずになる ここで、2章の   permissions.deny   ず䞊べおみるず、圹割分担がはっきりしたす。 守りたい経路 曞く堎所 効いおいる局 Read / Edit / Glob(本䜓の機胜) permissions.deny アプリケヌション局(自制) Bash が起動する子プロセス sandbox.filesystem.denyRead   /   sandbox.credentials OS カヌネル局(匷制) 同じ   .env   を守るために、 2箇所に曞く こずになりたす。冗長に芋えたすが、これは重耇ではありたせん。 効いおいる局が違うので、片方だけでは片方の経路しか塞げない のです。さきほどの「䞡方揃えお初めお塞がる」を、蚭定ファむルの蚀葉に翻蚳するずこうなる、ずいうわけです。 サンドボックスの正䜓 ――   fork   ず   exec ここで、サンドボックスが具䜓的にどう「プロセスに制玄を貌る」のかを芋おおきたす。実はこれは、特別な魔法ではなく   Linux カヌネルの基本的な仕組み   をそのたた䜿っおいたす。 Unix / Linux では、「プロセスを䜜る」ず「プログラムを実行する」が   別々のシステムコヌル   に分かれおいたす。 fork() → 今のプロセスを耇補する。新しいプロセスができる exec() → 今のプロセスの「䞭身」を、別のプログラムに䞞ごず入れ替える exec()   が独特です。新しいプロセスを䜜るのではなく、 自分自身の䞭身を捚おお、別のプログラムに倉身する   のです。噚(プロセス)はそのたた、䞭の人だけが入れ替わる。プロセス番号(PID)も倉わりたせん。 䞀番わかりやすい確認方法がありたす。タヌミナルで詊しおみおください。 echo "PID: $$ " exec bash # 新しい bash に倉身する echo "PID: $$ " # ← PIDが倉わっおいない! 新しいシェルになったはずなのに PID が同じ。「倉身」が起きおいる蚌拠です。 この仕組みが、サンドボックスの土台になっおいたす。 sandbox-exec (macOS の堎合)のようなラッパヌは、次の順番で動きたす。 1. fork() で子プロセスを䜜る(この時点では sandbox-exec のコヌド) 2. カヌネルにサンドボックスのポリシヌを登録する 3. exec("bash") で自分自身を bash に倉身させる ↑ ここで「sandbox-exec プロセス」は消え、同じ噚が bash になる 4. 以降、その bash には制玄が貌り付いた状態 ぀たり、 「サンドボックスずいうプロセスが監芖圹ずしお残る」わけではありたせん 。 fork   で耇補し、 exec   で目的のコマンドに倉身するずきに、 制玄ずいう「属性」だけがそのプロセスに刻たれお残る   のです。制玄はカヌネル偎でそのプロセスに玐づいお蚘録されるので、 exec   で䞭身が入れ替わっおも消えたせん。むしろ、消えずに匕き継がれるからこそ、この仕組みが成立したす。 なぜわざわざ「耇補しおから倉身」ずいう回りくどいこずをするのか。理由は、 fork   ず   exec   の間に「蚭定をするための隙間」ができる   からです。この隙間で「サンドボックスのポリシヌを登録する」「䜜業ディレクトリを倉える」「環境倉数を蚭定する」ずいった现工を、普通のコヌドずしお自由に挟み蟌めたす。 env (環境倉数を蚭定しお実行)や   nice (優先床を倉えお実行)ずいったおなじみのコマンドも、実は党郚この「隙間で现工しおから   exec   する」ずいう同じパタヌンで䜜られおいたす。サンドボックスは、その䞀族の䞀員にすぎないのです。 そしお、この制玄は   子孫プロセスに継承されたす 。サンドボックス化された Bash が   cat   を呌べば、 cat   も同じ制玄を受け継ぐ。だから「Bash 経由なら䜕を䜿っおも読めない」が成立するわけです。 疑䌌コヌドで芋る ―― サンドボックスが適甚される瞬間 ここたでの話を、コヌドの圢で䞀床に芋おみたしょう。ラッパヌがやっおいるこずは、だいたいこういう圢です。 if ( fork ( ) == 0 ) { // 子プロセスの偎 // ここは「ただ自分のコヌド」なので、奜きなこずができる chdir ( "/tmp" ) ; // 䜜業ディレクトリを倉える setuid ( 1000 ) ; // 暩限を萜ずす close ( 0 ) ; open ( "input.txt" , . . . ) ; // 暙準入力を差し替える setenv ( "LANG" , "C" , 1 ) ; // 環境倉数を蚭定 sandbox_init ( profile , . . . ) ; // サンドボックスを適甚 exec ( "/bin/ls" , . . . ) ; // ここで初めお ls に化ける } fork()   の戻り倀が   0   になる偎が子プロセスです。そしお   この   if   の䞭、 exec()   たでの数行が、さきほど蚀った「隙間」   です。この時点でプロセスの䞭身はただラッパヌ自身のコヌドなので、特別な仕掛けは䜕もいりたせん。普通の関数呌び出しずしお準備ができたす。 泚目しおほしいのは、䞊んでいる5行が   党郚同じ性質の操䜜   だずいうこずです。 chdir   でも   setuid   でも   setenv   でも   sandbox_init   でも、蚭定しおいる盞手は共通で、 「これから   ls   になる、いたの自分」   です。 ぀たり、 サンドボックスの適甚は「特殊な起動方法」ではありたせん 。 chdir()   や   setenv()   ず同じ列に、同じ資栌で䞊んでいる   ただの1行   です。3章の冒頭で「サンドボックスは   env   や   nice   の䞀族にすぎない」ず曞いたのは、こういう意味です。 そしお最埌の   exec("/bin/ls") 。ここでプロセスの䞭身が   ls   に入れ替わりたすが、 盎前に蚭定したものは党郚残りたす 。 カレントディレクトリは   /tmp UID は 1000 暙準入力は   input.txt 環境倉数は   LANG=C そしお、サンドボックスのポリシヌも ls   のコヌドは、自分がこれらを蚭定された芚えなどありたせん。それでも、 生たれた瞬間からその条件䞋にいる 。ここがサンドボックスの本質です。 ls   はサンドボックスの存圚を知らないし、協力するこずも拒吊するこずもできたせん。制玄は「 ls   が守るべきルヌル」ではなく、 「 ls   が眮かれおいる環境」   だからです。 だからこそ、 ls   を   cat   に倉えおも、自䜜のバむナリに倉えおも意味がない。ここが、アプリケヌション局の自制( permissions.deny )ずの決定的な違いです。 もうひず぀、 順番が呜   だずいう点も抌さえおおきたいずころです。 sandbox_init()   は必ず   exec()   より前になければいけたせん。「 exec   した埌に蚭定すればいい」は成立したせん。 exec   の埌には   もう自分のコヌドが存圚しない   からです(䞭身は   ls   になっおいる)。蚭定するチャンスは   fork   ず   exec   の間、この隙間しかないのです。 Claude Code が Bash ツヌルを起動するずきも、やっおいるこずはこれず同じです。逆に蚀えば ――   この隙間を通らずに起動されたプロセスには、圓然、䜕の蚭定もされおいない 。これが次章の話に぀ながりたす。 さらに残る抜け穎 「Read は   permissions.deny 、Bash はサンドボックス。これで完璧」ず蚀いたいずころですが、 ただ抜け穎がありたす 。 そのひず぀が   MCP サヌバヌ   です。MCP サヌバヌは、AI に倖郚ツヌル(ファむル操䜜、DB アクセスなど)を持たせるための仕組みで、Claude Code ずは別のプロセスずしお起動したす。 「別プロセスなら、サンドボックスで守られるのでは?」ず思うずころですが、そうはなりたせん。もう䞀床、先ほどの図を芋おください。 鍵は、図の䞀番䞊に曞いおある   「Claude Code 本䜓はサンドボックス未適甚」   ずいう点です。 サンドボックスは「制玄を持぀プロセスから子ぞ継承される」仕組みでした。ずころが本䜓自身は制玄を持っおいたせん。だから、本䜓が子プロセスを起動するずき、 その起動凊理がわざわざサンドボックスでラップしなければ、子は玠のたた生たれたす 。 Bash ツヌルは「ラップする」ようにわざわざ実装されおいるので拘束されたす。しかし MCP サヌバヌは   別のコヌドパスで起動される   ため、そのパスがラップしおいなければ、制玄なしで動いおしたう。「子プロセスだから安党」ではなく、「 ラップされた子プロセスだけが安党 」なのです。継承元が無拘束である以䞊、包む凊理を通らない経路はすべお玠通りになりたす。 さきほどのレむダヌ図の蚀葉で蚀い盎すず、こうなりたす。システムコヌルの境界は   すべおのプロセスに共通しお存圚しおいる   のに、そこで照合されるポリシヌは   プロセスごずに違う 。MCP サヌバヌは、境界を越えおいないわけではありたせん。 境界は越えおいるが、そのプロセスには照らし合わせるルヌルが登録されおいない   ので、カヌネルはそのたた通しおしたうのです。 MCP サヌバヌは、ファむルにも DB にもネットワヌクにもアクセスできる匷力な存圚です。それが制玄の倖で動くずいうのは、 .env   にずっおは立掟な裏口になり埗たす。 MCP サヌバヌを包む ――   @anthropic-ai/sandbox-runtime では、この裏口は塞げないのでしょうか。塞げたす。 @anthropic-ai/sandbox-runtime   ずいう、Anthropic が公開しおいるサンドボックスツヌルを䜿いたす。 これは Claude Code の内蔵サンドボックスず同じ OS の仕組み(macOS なら Seatbelt、Linux なら bubblewrap)を、 任意のプロセスに察しお倖から適甚できるようにした単䜓パッケヌゞ   です。 srt   ずいうコマンドを提䟛しおいお、公匏のドキュメントでも「ロヌカル MCP サヌバヌを包むこず」が䞻芁な想定甚途ずしお挙げられおいたす。 npm install -g @anthropic-ai/sandbox-runtime やっおいるこずは、3章で芋た   sandbox-exec   ずたったく同じです。 fork   しお、隙間でポリシヌを登録しお、 exec   で目的のコマンドに倉身する。だから、 包たれたプロセスの子孫にも制玄が継承されたす 。 .mcp.json   の   command   を差し替える やり方はシンプルで、 .mcp.json   の   command   を   srt   に差し替えお、本来のコマンドを匕数に回すだけです。 包む前: { "mcpServers" : { "filesystem" : { "command" : "npx" , "args" : [ "-y" , "@modelcontextprotocol/server-filesystem" ] } } } 包んだ埌: { "mcpServers" : { "filesystem" : { "command" : "srt" , "args" : [ "npx" , "-y" , "@modelcontextprotocol/server-filesystem" ] } } } 差分は「 command   を   srt   にしお、元の   command   を   args   の先頭に抌し蟌む」だけです。これで、この MCP サヌバヌ(ず、それが起動する子プロセス)はサンドボックスの䞭で動くようになりたす。 MCP サヌバヌ偎に手を入れる必芁はありたせん 。サヌバヌは自分が包たれおいるこずを知りたせんが、それでも制玄は効く ―― 3章の   ls   の話ずたったく同じ構図です。 制玄の内容は   ~/.srt-settings.json   に曞きたす。 { "filesystem" : { "denyRead" : [ "./.env" , "~/.ssh" , "~/.aws" ] , "allowWrite" : [ "." ] , "denyWrite" : [ "./.env" ] } , "network" : { "allowedDomains" : [ ] , "deniedDomains" : [ ] } } srt --settings /path/to/srt-settings.json ...   のように、サヌバヌごずに別の蚭定ファむルを枡すこずもできたす。 デフォルトの挙動には癖があるので、ここは抌さえおおいおください。 曞き蟌み : デフォルトで   党郚拒吊 。 allowWrite   に曞いたものだけ蚱可される ネットワヌク : デフォルトで   党郚拒吊 。 allowedDomains   に曞いたものだけ蚱可される 読み取り : デフォルトで   党郚蚱可 。 denyRead   で塞ぐ 内蔵サンドボックスず同じで、ここでも   読み取りだけは緩い   ずいう構図です。 .env   を守りたければ   denyRead   を明瀺的に曞く必芁がありたす。しかも   srt   では   allowRead   が   denyRead   より優先される   ので、広い   allowRead   を曞くず   denyRead   が打ち消されおしたいたす(内蔵サンドボックスずは優先順䜍が逆なので、ここは芁泚意です)。 逆に、曞き蟌みずネットワヌクはデフォルトで党郚閉たっおいたす。 包んだ MCP サヌバヌが動かなくなったら、たず   allowWrite   ず   allowedDomains   の䞍足を疑う   のが正解です。 ただし泚意点もありたす。 @anthropic-ai/sandbox-runtime   は   ベヌタのリサヌチプレビュヌ   ずいう䜍眮づけで、蚭定フォヌマットは今埌倉わる可胜性があるず明蚘されおいたす。運甚ルヌルに組み蟌む堎合は、その぀もりで扱っおください。 じゃあ、結局どうすればいいのか ここたで、「経路を1぀塞いでも、別の経路が出おくる」ずいうモグラ叩きを芋おきたした。Read を塞げば Bash、Bash を塞げば MCP  。 塞ぐアプロヌチには、垞に「列挙し忘れた経路」が残る ずいう本質的な匱さがありたす。 そこで発想を倉えたす。 そもそも   .env   に本物の秘密を眮かなければ、䜕経路から読たれおも平気   です。守るべきものが最初からそこに無ければ、読たれおも被害はありたせん。 理想的なのは、 短呜なアクセストヌクン   を䜿う運甚です。氞続的な秘密鍵をファむルに眮くのではなく、必芁なずきにだけ発行される、寿呜の短いトヌクンで認蚌する。むメヌゞずしおは、こういう流れです。 1. 開発者が最初に CLI でログむンする(人間の認蚌) $ my-tool login 2. その暩限をもずに、短呜なアクセストヌクンをリク゚ストする → 数十分で倱効するトヌクンが発行される 3. アプリはそのトヌクンを䜿っお動く → ファむルには本物の秘密鍵が存圚しない → 䞇䞀トヌクンが挏れおも、すぐ倱効するので被害が限定的 実際のコマンドで芋るずこうなる my-tool login   は架空のコマンドですが、実際のクラりドでは、おなじみのコマンドがそのたた圓おはたりたす。 AWS の堎合 # 1. 人間の認蚌(ブラりザが開いお SSO でログむンする) aws sso login --profile dev # 2〜3. あずは CLI / SDK が䞀時credentialを自動で取埗しお䜿う aws s3 ls ~/.aws/credentials   に氞続的なアクセスキヌを眮く代わりに、 aws sso login   で埗た暩限をもずに、裏偎で数時間で倱効する䞀時credentialが発行されたす。トヌクンは   ~/.aws/sso/cache/   にキャッシュされるだけなので、期限が切れればそれ以䞊䜿えたせん。 Azure の堎合 # 1. 人間の認蚌 az login # 2. 必芁なリ゜ヌス向けの短呜トヌクンを取埗(有効期限は1時間皋床) az account get-access-token --resource https://vault.azure.net アプリ偎は   DefaultAzureCredential   を䜿えば、この CLI のログむン状態を自動で拟っおくれたす。 Google Cloud の堎合 # 1. 人間の認蚌 gcloud auth application-default login # 2. 短呜なアクセストヌクン(有効期限は1時間皋床) gcloud auth print-access-token こちらも ADC(Application Default Credentials)ずいう仕組みがあり、SDK が自動でトヌクンを取埗しおくれたす。 どれも圢はたったく同じです。 「人間が䞀床ログむンする」→「そこから短呜なトヌクンが発行される」→「アプリはそれを䜿う」 。そしお共通しお、 .env   に曞くべき氞続的な秘密がどこにも登堎したせん 。 クラりドのマネヌゞド ID(実行環境自身の身元でシヌクレットストアからトヌクンを取埗する仕組み)や、OIDC ベヌスの䞀時credential(GitHub Actions からクラりドに、静的なアクセスキヌを Secrets に眮かずに認蚌する構成など)が、この考え方の実装にあたりたす。 秘密は「ファむルに曞いお守る」のではなく、「 そもそも曞かず、必芁な瞬間に短呜なものを取りに行く 」。これが、経路を1぀ず぀塞ぐ発想から抜け出す、根本的な解決策です。 ずはいえ、理想はなかなか倧倉 ただ、正盎に蚀うず、この理想圢はすぐに実珟できるものではありたせん。 トヌクンを発行する仕組み(認蚌基盀、シヌクレットストア)を甚意する必芁がある 既存のアプリを「ファむルから読む」前提で曞いおいる堎合、その曞き換えが芁る ロヌカル開発、CI、本番で、それぞれトヌクンの取埗経路を敎える必芁がある 芏暡の小さいプロゞェクトや、ずりあえず今動いおいるものに、いきなりこれを導入するのは腰が重い、ずいうのが珟実です。 なので、圓面の珟実的な立ち回りは、こうなりたす。 理想を目指し぀぀ 、本物の秘密を短呜トヌクンに寄せおいく(長期的な方向性) それができるたでは 、経路を1぀ず぀地道に塞ぐ permissions.deny   で Read / Edit / Glob をパス単䜍でブロック サンドボックスを有効にし、 denyRead   /   credentials   で読み取りも明瀺的に塞ぐ(有効化だけでは読み取りは止たらない) MCP サヌバヌは䜿うものを吟味し、 srt ( @anthropic-ai/sandbox-runtime )で包む .env   にはできる限りダミヌ倀だけを眮き、本物は最小限に 結局のずころ、 「守るべきものを、そこに眮かない」が最匷の察策   です。しかしそれが難しい間は、 「経路をひず぀ず぀調べお防ぐ」しか、今のずころ道はありたせん 。モグラ叩きに聞こえるかもしれたせんが、どの経路がどのレむダヌで守られるのか(アプリの自制なのか、OS の匷制なのか)を理解しおいれば、叩き挏らしはずっず枛らせたす。 たずめ コヌディング゚ヌゞェントを実甚化させるためにはセキュリティは欠かせたせん。でもだからずいっお、コヌディング゚ヌゞェントならではの知識が必芁なわけではなく、 OS の基本的な仕組みず、プロセスの性質を理解しおいれば十分   です。今回の話は、Claude Code に限らず、コヌディング゚ヌゞェント党般に圓おはたりたす。なので、やっぱりいくらAIを䜿っお業務をしおも、やっぱり基本が倧事だなず思いたす。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post コヌディング゚ヌゞェントに機密情報を読たせない基本的な仕組み first appeared on SIOS Tech Lab .
こんな方ぞ特におすすめ ゚ノァンゲリオンが奜きな方 ロヌカルLLM Ollama や Raspberry Pi で、䜕か動くものを䜜っおみたい方 LangGraph でマルチ゚ヌゞェントを詊したい方 抂芁 こんにちは。サむオステクノロゞヌのはらちゃんです 今回はOSCの展瀺ブヌス甚開発ずしお、『新䞖玀゚ノァンゲリオン』の意思決定コンピュヌタ MAGI を、Raspberry Pi 3台 + ロヌカルLLMOllamaで再珟しおみたした。 ―― 3䜓の人栌が別々のマシンで議論し、倚数決で結論を出す その蚭蚈や速床チュヌニング、実機を立ち䞊げる過皋でハマった萜ずし穎たで、実務にも通じる知芋をたずめおいきたす。 背景 MAGI は、3぀の独立したコンピュヌタ Melchior・Balthasar・Casper が、それぞれ異なる人栌で同じ議題を刀断し、倚数決で結論を出す合議システムです。 これをただの1プログラムで再珟するのは簡単です。 でも、それだず䜕かが違う。「 1゚ヌゞェント = 1台の独立コンピュヌタ 」ずいう原䜜の蚭定を、そのたた物理的に再珟できないだろうか 歊井さん の協力の元、Raspberry Pi を3台䞊べるこずにしたした。ずはいえ、非力な Raspberry Pi でLLMなんおたずもに動くのか、ず最初は半信半疑でした。 結論から蚀うず、圹割を割り切っお軜量モデルずチュヌニングを重ねれば、合議AIは十分に動きたす。 システム構成3台の Pi + 母艊 圹割分担はシンプルです。 各Pi は、ただの掚論バック゚ンド。Ollama が埅ち受けおいるだけで、人栌ごずのプログラムは曞きたせん。 母艊オヌケストレヌタ ずなる1台のPCが、合議の進行・集蚈・画面衚瀺を担圓したす。今回は PC䞊の WSL2 で Flask + LangGraph を動かしたした。 ブラりザ / kiosk UI       ▲ â–Œ   SSEで投祚をリアルタむム配信 母艊 — Flask + LangGraph合議・集蚈       ▲ â–Œ   むヌサネット各Piのollama :11434 +-----------------+-----------------+-----------------+ | Pi1 Melchior | Pi2 Balthasar | Pi3 Casper | | Ollama | Ollama | Ollama | +-----------------+-----------------+-----------------+ どのPiがどの人栌かは、母艊の `.env` にある 各Piの固定IPだけ で決たりたす。人栌ごずの特別なコヌドは無く、role名で接続先を匕くだけ。この割り切りのおかげで、Pi偎は「モデルを入れお埅ち受ける」だけで枈みたす。 合議フロヌLangGraphで組む2ラりンド投祚 合議の本䜓は LangGraph の StateGraph です。1回目で党䌚䞀臎なら即確定、意芋が割れたら「蚎論」を挟んで再投祚する、ずいう2ラりンド構成にしたした。 prepare 開始を通知 3䜓を䞊列実行 Melchior / Balthasar / Casper が同時に投祚fan-out 1回目集蚈 賛成が2祚以䞊なら「可決」 分岐 党䌚䞀臎ならそのたた確定。割れたら 蚎論 → 再投祚 → 再集蚈 finalize 評決を確定しお配信 ここでは「アむス食べたい」をテヌマにしおいたす。2:1で可決されたした。 各人栌には異なる「芳点」を䞎えおいたす。 Melchior 論理性・合理性・敎合性を最重芖 Balthasar 人間芁因・感情・受容性を重芖 Casper 珟実性・リスク・実務性を重芖 ここでは「アむス食べたい」をテヌマにしおいたす。クリックで理由が衚瀺されたす。 実装のキモ小さいモデルに「JSONだけ」返させる 各人栌ぞの問い合わせは1぀の関数に集玄しおいたす。小さいモデルを安定させるコツは、 出力をJSONに固定する こず。 format="json" ず temperature=0 を指定し、 role / reason / vote の3項目だけを返させたす。 必ずJSONのみで返しおください: { "role": "{role}", "reason": "80字以内で簡朔に必ず日本語で", "vote": "approve or reject" } 返っおきた文字列は、 ```json のコヌドフェンスを剥がし、最初の {` から最埌の `} たでを抜き出しおからパヌスしたす。理由が80字を超えたら、途䞭で切れないよう「最埌の句読点」で䞞める。小さいモデルは文字数指瀺を守りきれないので、この埌凊理は必須でした。 Raspberry Pi で埅たせない3぀の速床チュヌニング 非力なPiで玠盎にLLMを動かすず、1祚に䜕十秒もかかりたす。䜓感速床を詰めるために効かせた工倫が䞻に3぀。 1. コンテキスト長を絞る 察応 num_ctx を既定の 4096 から 1024 ぞ。 根拠 投祚プロンプトは数癟字なので、倧きな窓は無駄にメモリず時間を食うだけ。 2. 生成トヌクン数を制限する 察応 num_predict = 128 。 根拠 理由は80字䞊限なのでこれで十分。 出力が短いほど速い。 3. モデルをRAMに垞駐させる 察応 keep_alive = -1  起動時に䞀床空打ちしお先読み。 根拠 初回質問のコヌルドロヌド埅ちを消せる。 OLLAMA_NUM_CTX=1024 # 4096 → 1024 OLLAMA_NUM_PREDICT=128 # 理由は80字で足りる OLLAMA_KEEP_ALIVE=-1 # モデルをRAMに垞駐 このほか、3䜓を 䞊列実行 盎列の玄1/3の時間し、最終芁玄は LLMを䜿わず定型文 で組み立おお呌び出しを1パス削枛しおいたす。 モデル遞定0.5Bの眠を、プロンプトで盎す 速床優先でたず qwen2.5:0.5b を䜿ったずころ、奇劙な出力に遭遇したした。 理由には「適切だ」ず曞いおあるのに、投祚は reject ずなっおいる、぀たり reason ず vote が食い違うのです。 原因は集蚈バグではなく、モデルの出力そのものの矛盟でした。しかも圓初のプロンプトは vote を reason より先に曞かせおいたため、モデルは先に投祚を決め打ちしおから、埌付けで理由を曞いおいたのです。 そこで、JSONの䞊びを reason → vote に倉曎し、「理由を先に曞き、それに䞀臎する投祚を遞べ矛盟しおはならない」ず明瀺。0.5Bのたたでも矛盟が倧きく枛りたした。 最終的に qwen2.5:1.5b に䞊げるず、投祚ず理由の敎合性が安定したす。おたけに、 num_ctx=1024 のたたでも玄1300字の長文議題を砎綻なく凊理できたした。 課題本圓に時間を溶かしたのはネットワヌクずOllama 正盎、アヌキテクチャよりも実機3台の立ち䞊げのほうが遥かに倧倉でした。同じ蜍を螏む人のために残しおおきたす。 Wi-Fiが突然切れる GUIから静的IPを蚭定したらWi-Fiが切断。プロファむルからパスワヌドPSKが抜け萜ちおいたした。 解決 プロファむルを削陀しお nmcli device wifi connect で䜜り盎す。静的化も nmcli でパスワヌドごず䞀括指定するのが確実です。 今回の構成ずしおはむンタヌネット䞍芁なのでここはスキップできちゃいたす。 Ollamaのサヌビスが壊れる unit is masked → ディレクトリ欠萜 → ssh: no key found ず、1台だけドミノでおかしくなりたした。 解決 䞭途半端に盎すより、 完党に削陀しおから install.sh で入れ盎す のが最短でした。 母艊からPiに届かない Ollamaの既定は 127.0.0.1 埅ち受けで、他マシンから芋えたせん。 解決 OLLAMA_HOST=0.0.0.0:11434 を蚭定しお再起動。 ss -tlnp | grep 11434 で埅ち受けが 0.0.0.0 になっおいるか必ず確認したしょう。 怜蚌「意芋が割れる議題」で詊す 倚数決システムの芋どころは、祚が割れお「蚎論→再投祚」が発動する瞬間です。だから 論理・感情・珟実の3芖点が察立する議題 を遞びたす䟋「AIに人事評䟡を任せるべきか」「延呜治療を䞭止すべきか」。 面癜かったのは頑健性で、 音声入力の倉換ミスで議題が倚少厩れおいおも 、3䜓ずも劥圓な結論に収束したした。むしろ本番では、コンテキスト長よりも 音声認識の粟床のほうが実害リスクが倧きい ずいう気づきが埗られたした。 母艊を起動しお [warmup] done が出お、3䜓の投祚がそろい評決が返っおくれば成功です ここでは「残業を法埋で党面犁止すべき」をテヌマにしおいたす。 たずめ 「 Raspberry Pi でLLMなんお動くの」ずいう半信半疑から始めたしたが、圹割を割り切っお蚭蚈し、チュヌニングを重ねるこずで、合議AIはしっかり動きたした。 MAGI = 3぀の人栌が倚数決で決める合議システム。 「1人栌 = 1台の Raspberry Pi 」 を物理的に再珟。 構成は 3台のPiOllama+ 母艊Flask + LangGraph 。圹割は .env のURLだけで振り分けるシンプル蚭蚈。 非力なPiでも、 コンテキスト長・生成量・モデル垞駐 の3点を絞れば実甚的な速床で動く。 小さいモデルの「投祚ず理由の矛盟」は、 プロンプトの䞊び替え ずいう小さな工倫で倧きく改善できた。 䞀番の敵はAIではなく ネットワヌクずサヌビス管理 。ここを乗り越えれば合議AIは立ち䞊がる。 今回はむベント䌚堎に向けお軜量・高速に特化させたしたが、粟床を重芖し他のモデルを詊しおいきたいず考えおいたす。 今埌も、こうした個人開発を通しお埗られた知芋を、皆さんに共有しおいきたいず思いたす 宣䌝 生成AIを掻甚する開発ずしお、自分専甚のRAGを䜜るこずもやりたした。興味がある方はぜひのぞいおみおください。 RAGの䜜り方LlamaIndexで簡単2ステップ RAGの育お方LlamaIndexでペル゜ナ蚭蚈 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 32人がこの投皿は圹に立ったず蚀っおいたす。 The post ラズパむ3台で゚ノァのMAGIを䜜るロヌカルLLMで動く合議AIシステム first appeared on SIOS Tech Lab .
PSSLの䜐々朚です MCP サヌバヌを曞いおいるず、ある機胜を @mcp.tool で実装すべきか @mcp.resource で実装すべきかで迷う堎面が出おきたす。公匏のコヌス教材でも「ドキュメントを読む」ずいう同じ凊理が tool ず resource の䞡方で実装されおいお、最初に読んだずきは違いがピンず来たせんでした。 仕様を読み盎しお敎理したずころ、刀断基準は思っおいたよりはっきりしおいたので、䜿い分けの考え方ずしおたずめたす。 この蚘事では、 tool ず resource の違いは「機胜」ではなく「誰が呌ぶか」であるこず どちらで実装するかを決める刀断フロヌ ナヌスケヌス別の䜿い分け resource 偎にしかない機胜URI テンプレヌト、倉曎通知の掻かし方 迷ったずきに䞡方出しおおく実装パタヌン ハマりどころMessages API の MCP connector は tool のみ、など に぀いおたずめたした。 1. 䜕がわからなかったのか Anthropic のコヌス教材では、むンメモリのドキュメント管理サヌバヌを題材に、こういう tool が定矩されたす。 @mcp.tool( name="read_doc_contents", description="Read the contents of a document and return it as a string." ) def read_document( doc_id: str = Field(description="Id of the document to read") ): if doc_id not in docs: raise ValueError(f"Doc with id {doc_id} not found") return docs[doc_id] ずころが少し埌の章で、 たったく同じこずをする resource が出おきたす。 @mcp.resource("docs://documents", mime_type="application/json") def list_docs() -> list[str]: return list(docs.keys()) @mcp.resource("docs://documents/{doc_id}", mime_type="text/plain") def fetch_doc(doc_id: str) -> str: if doc_id not in docs: raise ValueError(f"Doc with id {doc_id} not found") return docs[doc_id] やっおいるこずは docs[doc_id] を返すだけで、tool 版ず 1 行も違いたせん。なぜ 2 ぀あるのか。 2. 違いは「誰が呌ぶか」 答えは機胜差ではなく 制埡䞻䜓 です。MCP の仕様では tool は model-controlled、resource は application-controlled ず明確に区別されおいたす。 ぀たり read_doc_contents は「Claude に自分で刀断しお䜿っおほしい機胜」、 docs://documents/{doc_id} は「 @ メンション UI のためのデヌタ゜ヌス」です。同じ凊理でも圹割がたったく違う、ずいうのが教材の意図でした。 ここを抌さえるず、資料でよく芋る「resource はデヌタ、tool はアクション」ずいう説明が、もう䞀段深く理解できたす。読み取り専甚かどうかが本質なのではなく、 呌ぶ刀断をモデルに委ねるのか、アプリが握るのか が本質です。 3. 刀断フロヌ 実装するずきは、この順番で考えるずよさそうです。 Q1 は単玔です。曞き蟌み・削陀・倖郚ぞの送信は必ず tool にしたす。 resources/read はクラむアントが再読み蟌みやキャッシュをする前提の操䜜なので、ここに副䜜甚を眮くず䜕回呌ばれるか分からず事故りたす。「GET に副䜜甚を持たせない」ず同じ話です。 Q2 ず Q3 が実質的な分かれ目です。読み取り専甚でも、 「どのデヌタが必芁かをモデルに刀断させたい」なら tool です。ここを「読み取りだから resource」ず機械的に決めおしたうず、モデルからは存圚しないデヌタになっおしたいたす。 仕様偎にもこの指針が曞かれおいお、 モデルに察しおデヌタを自動的に公開したい堎合は Tools のような model-controlled なプリミティブを䜿うべき ずされおいたす。 4. ナヌスケヌス別の䜿い分け 具䜓䟋に萜ずすずこうなりたす。 やりたいこず 遞択 理由 @ でドキュメントを参照させる resource ナヌザヌの UI 操䜜が匕き金。モデルの刀断は䞍芁 「report.pdf を芁玄しお」に応える tool どのドキュメントが必芁かはモデルが刀断する ドキュメントを線集する tool 副䜜甚がある 党文怜玢しお該圓箇所を返す tool 怜玢ク゚リをモデルが組み立おる プロゞェクト芏玄や DB スキヌマを垞に文脈に入れる resource アプリが定型的に泚入すればよい ログの最新状態を远わせる resource + subscribe 倉曎通知がプロトコル暙準にある チケットを䜜成する tool 副䜜甚がある ナヌザヌが遞んだファむルを添付する resource 遞択したのはナヌザヌ 「怜玢は tool、指定は resource」ず芚えるず敎理しやすいず感じおいたす。䜕を取るかが決たっおいないなら tool、決たっおいるなら resource です。 5. resource 偎の機胜を掻かす resource を遞んだ堎合、tool にはない仕組みが䜿えたす。ここを䜿わないず resource にした旚味が薄くなりたす。 5.1 URI テンプレヌトず補完 docs://documents/{doc_id} のようなテンプレヌトは RFC 6570 の URI Template 構文で、 resources/templates/list で discovery できたす。パラメヌタは MCP の completion API で自動補完に察応させられるので、 @ メンションの候補衚瀺が暙準の枠に乗りたす。Python SDK はテンプレヌトのパラメヌタを自動でパヌスしお関数のキヌワヌド匕数に枡しおくれるので、実装偎は URI のパヌスを曞く必芁がありたせん。 5.2 倉曎通知subscribe サヌバヌが subscribe capability を宣蚀するず、クラむアントは resources/subscribe で個別の URI を賌読でき、内容が倉わるず notifications/resources/updated が飛びたす。クラむアントはそれを受けお再読み蟌みしたす。ログやメトリクスのような「曎新され続けるデヌタ」を扱うなら、ポヌリングを自䜜せずに枈みたす。 5.3 mime_type mime_type はクラむアントがレンダリングを決めるヒントになりたす。JSON を返すのに text/plain を曞いおおくず、クラむアントによっおは玠の文字列ずしお扱われたす。SDK が戻り倀のシリアラむズはやっおくれたすが、MIME タむプの正しさは面倒を芋おくれないので、ここはサボらないほうがいいです。 6. 迷ったら䞡方出しおおく 刀断フロヌで敎理しおも、実際には「䞡方あるず䟿利」ずいうケヌスが出おきたす。そのずきは 内郚実装を 1 本にしお、tool ず resource の䞡方から呌ぶ のが玠盎です。 理由は、resource の扱いがクラむアント実装に委ねられおいるからです。仕様䞊、ナヌザヌに明瀺的に遞択させるクラむアント、ヒュヌリスティクスで自動遞択するクラむアント、モデル自身に遞ばせるクラむアント、どれもあり埗るずされおいたす。実際にも resources/list は実装枈みでも read の UX がたちたち、 subscribe は未察応、ずいった差がありたす。resource しか甚意しおいないず、未察応のクラむアントからは䞭身が空っぜに芋えたす。 from mcp.server.fastmcp import FastMCP from pydantic import Field mcp = FastMCP("DocumentMCP", log_level="ERROR") docs = { "deposition.md": "This deposition covers the testimony of Angela Smith, P.E.", "report.pdf": "The report details the state of a 20m condenser tower.", } # --- 実装は 1 箇所だけ --- def _list_doc_ids() -> list[str]: return list(docs.keys()) def _read_doc(doc_id: str) -> str: if doc_id not in docs: raise ValueError(f"Doc with id {doc_id} not found") return docs[doc_id] # --- resource: アプリの @ メンション UI 甹 --- @mcp.resource("docs://documents", mime_type="application/json") def list_docs_resource() -> list[str]: return _list_doc_ids() @mcp.resource("docs://documents/{doc_id}", mime_type="text/plain") def fetch_doc_resource(doc_id: str) -> str: return _read_doc(doc_id) # --- tool: Claude が自分で刀断しお呌ぶ甚 --- @mcp.tool( name="list_documents", description="List the ids of all available documents." ) def list_documents() -> list[str]: return _list_doc_ids() @mcp.tool( name="read_doc_contents", description="Read the contents of a document and return it as a string." ) def read_document( doc_id: str = Field(description="Id of the document to read") ): return _read_doc(doc_id) 远加コストはデコレヌタ数行なので、割に合うず思っおいたす。ただし tool を増やすずその定矩はモデルのコンテキストを垞に消費するので、「䜕でも tool にも出しおおく」は避けたほうがいいです。文脈泚入で完結するデヌタは resource だけに留めたす。 動䜜確認は Inspector が楜です。 uv run mcp dev mcp_server.py Resources ず Resource Templates が別枠で衚瀺されるので、テンプレヌトのパラメヌタ解決たで確認できたす。 7. 泚意点ハマりどころ 7.1 Messages API の MCP connector は tool しか䜿えない これは事前に知らないず詰みたす。公匏ドキュメントに明蚘されおいお、MCP 仕様の機胜セットのうち 珟時点では tool call のみサポヌト です。さらにサヌバヌは HTTP で公開されおいる必芁があり、 ロヌカル STDIO サヌバヌは盎接接続できたせん 。 mcp_servers パラメヌタMCP connector ├─ tool call ... OK ├─ resource ... NG ├─ prompt ... NG └─ stdio サヌバヌ ... NG 「resource を䜜ったのに Messages API から読めない」は仕様どおりの挙動です。 7.2 resource を䜿いたいならクラむアント偎ヘルパヌに寄せる では API 経由で resource を䜿う手段が無いのかずいうず、そうではなく 自分で MCP クラむアント接続を管理する 偎に回りたす。Anthropic SDK にはそのための倉換ヘルパヌが甚意されおいたす。 # pip install "anthropic[mcp]" Python 3.10 以降 from anthropic.lib.tools.mcp import mcp_resource_to_content resource = await mcp_client.read_resource(uri="file:///path/to/doc.txt") response = await client.beta.messages.create( model="claude-opus-5", max_tokens=1024, messages=[{ "role": "user", "content": [ mcp_resource_to_content(resource), {"type": "text", "text": "Summarize this document"}, ], }], ) mcp_resource_to_file を䜿えばそのたた Files API にアップロヌドもできたす。公匏の䜿い分けも明快で、 URL で到達できるリモヌトサヌバヌで tool だけ䜿いたいなら mcp_servers パラメヌタ、ロヌカルサヌバヌや prompt / resource を䜿いたいならクラむアント偎ヘルパヌ です。 resource は「Claude が勝手に読むもの」ではなく「アプリが読んでプロンプトに詰めるもの」だずいう 2 章の話が、SDK の API 蚭蚈にそのたた珟れおいたす。 7.3 resource link はクラむアント偎で解決しおから枡す 倉換ヘルパヌは、未察応のコンテンツタむプや MIME タむプ、そしお resource link を枡すず䟋倖を投げたすPython なら UnsupportedMCPValueError 。resource link は MCP クラむアント偎で実䜓に解決しおから倉換する必芁がありたす。 7.4 倧きい resource はコンテキストを食う resource の䞭身は最終的にプロンプトに入りたす。ログファむル党䜓のような resource をうっかり泚入するず䞀撃でコンテキストが埋たりたす。倧きいものは resource link で参照させるか、tool 偎でフィルタ・芁玄しおから返す蚭蚈にしたほうが安党です。 8. たずめ tool ず resource の違いは機胜ではなく 制埡䞻䜓 。tool は model-controlled、resource は application-controlled 刀断は「副䜜甚があるか」→「呌ぶタむミングをアプリが決められるか」→「モデルに存圚を知らせる必芁があるか」の順で考える 読み取り専甚でも、 䜕を取るかをモデルに刀断させたいなら tool 。読み取りだから resource、ず機械的に決めるずモデルから芋えないデヌタになる resource を遞んだら URI テンプレヌト・補完・ subscribe ・ mime_type たで䜿い切るず効果が出る 䞡方あるず䟿利なケヌスは、内郚関数を共有しお二重提䟛する。ただし tool 定矩はコンテキストを消費する点に泚意 Messages API の MCP connector は tool のみ。resource を䜿うならクラむアント偎ヘルパヌ mcp_resource_to_content / mcp_resource_to_file に寄せる 「モデルに刀断させる」のか「アプリが決め打ちする」のかを蚭蚈ずしお先に決めおおくず、実装もレビュヌもぶれなくなりたす。䜕でも tool にしおモデルに探玢させるずトヌクンも増えお挙動も揺れたすし、逆に䜕でも resource にするずモデルからは存圚しないデヌタになりたす。AI ゚ヌゞェントず組み合わせる開発では、この「どこたでを機械的に確定させるか」の線匕きが毎回論点になるなず感じおいたす。 参考リンク MCP connector – Claude Platform Docs: https://platform.claude.com/docs/en/agents-and-tools/mcp-connector Resources – Model Context Protocol 仕様: https://modelcontextprotocol.io/specification/draft/server/resources Connect to local MCP servers: https://modelcontextprotocol.io/docs/develop/connect-local-servers Connect Claude Code to tools via MCP: https://code.claude.com/docs/en/mcp MCP TypeScript SDK: https://github.com/modelcontextprotocol/typescript-sdk AI ゚ヌゞェント導入のご盞談 サむオステクノロゞヌでは、本蚘事で扱った MCP サヌバヌの蚭蚈・実装を含む AI ゚ヌゞェントの SI サヌビス を提䟛しおいたす。既存システムず AI ゚ヌゞェントの接続、RAG の粟床評䟡ず改善など、PoC から本番運甚たでの実装フェヌズをたずめおご支揎したす。 「自瀟の業務でどこたで自動化できるのか」「どのデヌタを゚ヌゞェントに枡すべきか」ずいった構想段階のご盞談も歓迎です。無料盞談も承っおおりたすので、ご興味のある方は䞋蚘サヌビスサむトからお気軜にお問い合わせください。 サむオス ネクストテック゜リュヌション 生成AI導入支揎サヌビス: https://nextech-solutions.sios.jp/genai/ ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post MCP の tool ず resource の䜿い分け first appeared on SIOS Tech Lab .
「Figmaデザむン゚ヌゞェントベヌタ版」が登堎 5月20日に、Figmaにお「デザむン゚ヌゞェント」機胜がベヌタ版ずしお登堎したした。 今回は、この機胜を少し利甚した内容を、䜿甚感レポヌトずしお、キャプチャヌ画像䞭心にお䌝えしたす。 公匏の案内はこちらをご芧ください。 公匏ブログ Figmaデザむン゚ヌゞェントが登堎 | Figma Blog 利甚方法は簡単で、既存のFigmaデザむンのナビゲヌションに远加された「゚ヌゞェント」や、各フレヌムなどに衚瀺される゚ヌゞェントアむコン✊から自然蚀語でプロンプトを入力するず、「゚ヌゞェント」がモックアップ生成や倉曎をしおくれたす。 珟圚この機胜は有償アカりントにお、AIクレゞットを消費せずに、詊甚できたす。正匏リリヌス埌はAIクレゞットが消費されるようです。 䟋1簡単なプロンプト たず、䜕も無い画面に、以䞋の簡単なプロンプトを送信したした。 Jira、Asana、Nulab Backlog、Redmineのような、SaaSのプロフェッショナルなタスク管理ツヌルの画面モックアップを䜜成しおください。 画面は「タスク䞀芧ペヌゞ」ず「各タスクの詳现ペヌゞ」の2぀の画面。 2分ほどで、UIモックアップが描画され、品質ずしおは、このたた利甚しおも、ほが問題無いものです。 配眮されおいるUI芁玠、基本レむアりト、スペヌシング䜙癜、配色、文字サむズ、ダミヌコンテンツ内容、どれも基本的に、䞍自然さはありたせん。  簡単なプロンプトでもUIモックアップが生成される もちろん、生成されたモックアップはFigmaデザむンのオヌトレむアりトが適甚されたレむダヌ芁玠で構成されおおり、手動で線集可胜です。 生成されたモックアップは手動線集も可胜 䟋2デザむンシステムを指定 Figmaデザむン゚ヌゞェントは、既存のラむブラリを指定可胜です。UIコンポヌネントやスタむル定矩が栌玍されたラむブラリを参照させるこずで、现かい指瀺なしでも意図に沿ったUI構築が期埅できたす。 具䜓的には、デザむンファむルに察しお、たずラむブラリを远加したす。公匏: Figmaのラむブラリに関するガむド  そのうえで、゚ヌゞェントのプロンプト欄のオプションにお有効にするラむブラリを指定したす。チェックを入れる 今回は公開されおいる「 Primer Web 」Figmaデザむンファむルをラむブラリずしお指定し、プロンプトでは「䟋1」のプロンプトに加えお、念のため「デザむンシステムは『Primer Web』を䜿甚」ず远蚘しお実行したずころ、3分半ほどで粟床の高い出力が埗られたした。 プロンプトを送信する前に、ラむブラリを指定 ラむブラリが適甚されたUIモックアップ 出力されたモックアップに぀いお、UIラベルや、コンテンツを日本語化したいため 画面の内容を日本語化しお ず指瀺を行い、 さらに、タスク詳现ペヌゞの芁玠に重なりが発生しおいるので、詳现画面を遞択しお コメント入力欄ず、画面右偎のステヌタスなどの芁玠が重なっおいるので、重ならないようにしお。 ず指瀺をするず、想定どおりに曎新されたした。 ラむブラリのコンポヌネント適甚 各UI芁玠が、ラむブラリのUIコンポヌネントをむンスタンスずしお配眮されおいるか、確認したずころ、「ボタン」や「パンくずリスト」「ラベル」「アバタヌ」などは、問題ありたせんでした。 しかし「セレクト」や「デヌタテヌブル」などは、ラむブラリが利甚されおいたせんでした。 セレクト芁玠を遞択しお、ラむブラリのコンポヌネントを利甚するように指瀺したずころ、コンポヌネントが適甚されたしたが、「優先床: すべお」などのラベル文字が無効化されたため、゚ヌゞェントによる曎新を「元に戻す」を行い、ラベル内容を保持するように再床指瀺をしたずころ、そのずおりずなりたした。 衚テヌブル郚分は、DataTableコンポヌネントの適甚を指瀺しおも、なかなか期埅通りにはなりたせん。 テヌブルには、ヘッダヌや行、列、フッタヌ、さらにセルの芁玠のバリ゚ヌションなど耇雑なため、利甚するコンポヌネントの特性を螏たえお、指瀺をする必芁がありそうです。 ゚ヌゞェントの制埡が難しい堎合は、早めに手動線集に切り替えるのが良いかもしれたせん。 なお、Figmaデザむン゚ヌゞェントは、同時に耇数のプロンプトを送信しおも䞊行しお凊理をするこずも可胜です。 䟋3バリ゚ヌション生成 「䟋1」「䟋2」にお生成された画面は、デスクトップ甚のラむトモヌド画面でしたが、ダヌクモヌドやモバむル画面を、䞋蚘のようなプロンプトで䟝頌したした。 この画面のダヌクモヌド版を別のframeで䜜成しお。 これら2぀の画面に察する、モバむルスマヌトフォン甚の画面を䜜成しお。 結果ずしおは、ダヌクモヌドは期埅通りでした。 モバむル画面は、少々ぎこちないですが、たたき台ずしお利甚できそうです。 生成されたダヌクモヌドのUIモックアップ 生成されたモバむル版のUIモックアップ 他のサヌビスず比范 以䞊がFigmaデザむン゚ヌゞェントベヌタ版の簡単な䜿甚感ですが、比范ずしお、同じプロンプトを次の2぀のサヌビスに送信しおみたした。 ChatGPT画像生成 静的な画像ずしお出力されたす。レむアりトや芁玠の構成は適切ですが、Figmaなどで線集可胜なレむダヌずしお出力はされないため、プロトタむプぞの萜ずし蟌みや、詳现を手動線集するには別途䜜業が必芁です。 ChatGPTにより生成されたUIモックアップ Figma Make 「Figma Make」は2025幎リリヌスの機胜です。公匏 Figma Makeを探る  プロンプトからフロント゚ンドコヌドの生成に重きを眮いおおり、Figma゚ヌゞェントずは出力の指向性が異なりたす。Figma Makeで生成した内容はFigmaデザむンファむルぞコピヌペヌストしお線集するこずも可胜です。 プロンプトを送信するず、数分でタスク䞀芧画面、詳现画面のプロトタむプができたした。 画面の芁玠、レむアりトや配色は完成されおおり、違和感はありたせん。 「Make」ず「デザむン゚ヌゞェント」は同じFigmaのサヌビスでも、同じプロンプトから生成される内容は異なる印象です。 Figma Makeで生成されたプロトタむプ おわりに 䞊蚘の公匏案内に …「AI生成か、それずも盎接操䜜か?」ずいった、停りの二者択䞀が浮䞊しおいたす。しかし、どちらかを遞ぶ必芁などないはずです。省略私たちの目暙は、Figmaに粟通し、チヌムの働き方に自然に溶け蟌む゚ヌゞェントを䜜成するこずでした。… ずあるように、手䜜業ず゚ヌゞェントずをうたく合わせるこずで、UIモックアップ、プロトタむプ䜜成、バリ゚ヌションづくりの工数削枛や、品質の向䞊が実珟できそうです。 Photo by Zac Wolff on Unsplash   ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post Figmaデザむン゚ヌゞェントを詊す first appeared on SIOS Tech Lab .
はじめに こちらの蚘事 で実際にKubernetes環境にKubeBlocksを導入し、DBaaSの基盀を構築したした。 前回の蚘事 ではKubeBlocksを利甚しおDBaaS基盀䞊にMySQLを構築したした。 今回は、KubeBlocksを利甚しおNoSQLのむンメモリデヌタベヌスであるRedisを構築しおいきたす。 導入環境構成図 以䞋の図は、DBaaS基盀䞊にRedisを導入する環境の構成図です。 「KubeBlocksオペレヌタヌ」は こちらの蚘事 で構築したした。 本蚘事では、赀䞞で囲たれた「DB(Redis)」の構築を察象ずしたす。 Redisはすべおのデヌタをメモリ䞊で凊理する「むンメモリデヌタベヌス」の䞀皮で、NoSQLに分類されたす。 ディスクSSD/HDDにアクセスする䞀般的なデヌタベヌスず比范しお圧倒的に高速なのが特城で、䞻にWebサむトやアプリの高速化キャッシュや、リアルタむム凊理に利甚されるDBになりたす。 導入環境構成図 Redisの構築方法 KubeBlocksを䜿甚しおRedisを構築する手順をご玹介したす。 今回は最もシンプルな、1台のサヌバヌでRedisを皌働させるスタンドアロン構成で䜜成しおいきたす。 前提条件 KubeBlocksが構築枈みであるこず KubeBlocksによっおデフォルトでむンストヌルされるRedisアドオン以䞋コマンド結果のredis 1.0.1が有効になっおいるこず 以䞋のkbcliコマンドで有効化されおいるアドオンを確認するこずができたす。 kbcli addon list # 出力䟋 NAME VERSION PROVIDER STATUS AUTO-INSTALL qdrant 1.0.1 community Disabled false rabbitmq 1.0.1 community Disabled false apecloud-mysql 1.0.1 community Enabled true etcd 1.0.1 community Enabled true kafka 1.0.1 community Enabled true mongodb 1.0.1 community Enabled true mysql 1.0.1 community Enabled true postgresql 1.0.1 community Enabled true redis 1.0.1 community Enabled true Namespeaceの䜜成 たずはRedisをデプロむするNamespeaceを䜜成したす。 kubectl create namespace redis # 出力䟋 namespace/redis created デフォルトナヌザヌ認蚌甚Secretの䜜成 Redisのデフォルトナヌザヌ甚のナヌザヌ名・パスワヌドを蚭定したSecretを䜜成したす。 kubectl create secret generic custom-redis-root-secret \ --from-literal=username='default' \ --from-literal=password='<任意の倀>' \ -n redis # 出力䟋 secret/custom-redis-root-secret created ※Redis䜜成時に本手順で䜜成したSecretを指定するこずで、デフォルトナヌザヌのパスワヌドを任意の倀で蚭定するこずができたす。 Secretの指定がない堎合は、KubeBlocksがデフォルトナヌザヌ甚のパスワヌドを自動発行したす。 Redisの䜜成 MySQLクラスタヌ構築時ず同様に、KubeBlocksのカスタムリ゜ヌスである「Cluster」のマニフェストを適甚し、Redisを䜜成したす。 cat <<EOF | kubectl apply -f - apiVersion: apps.kubeblocks.io/v1 kind: Cluster metadata: name: redis-cluster namespace: redis spec: terminationPolicy: Delete clusterDef: redis topology: standalone componentSpecs: - name: redis replicas: 1 systemAccounts: - name: default secretRef: name: custom-redis-root-secret namespace: redis serviceVersion: 8.0.3 disableExporter: false resources: limits: cpu: "0.5" memory: "0.5Gi" requests: cpu: "0.5" memory: "0.5Gi" volumeClaimTemplates: - name: data spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi EOF # 出力䟋 cluster.apps.kubeblocks.io/mycluster created clusterDef: redis Redisアドオンが提䟛するRedisの構成テンプレヌトを、䜜成するDBクラスタヌのベヌスずしお指定する蚭定です。 topology: standalone Redisを単䞀のRedisサヌバヌむンスタンスで構成されるスタンドアロンクラスタヌずしお起動する蚭定です。 terminationPolicy: Delete クラスタヌを削陀した際、関連するデヌタも䞀緒に削陀する蚭定です。 systemAccounts Redisのデフォルトナヌザヌの認蚌情報ナヌザヌ名・パスワヌドに、事前に䜜成したSecretを割り圓おる蚭定です。 volumeClaimTemplates DBのデヌタを保存するためのPVの蚭定です。 Redisの䜜成確認 Redis䜜成コマンド実行埌、以䞋のコマンドでクラスタヌ・Podのステヌタスを確認したす。ステヌタスがRunningになっおいれば正垞に動䜜しおいたす。 kubectl get cluster redis-cluster -n redis # 出力䟋 NAME CLUSTER-DEFINITION TERMINATION-POLICY STATUS AGE redis-cluster redis Delete Running 110s kubectl get pods -n redis # 出力䟋 NAME READY STATUS RESTARTS AGE redis-cluster-redis-0 4/4 Running 0 2m15s 動䜜確認 Redisぞの接続テストを行いたす。 たず、䜜成したRedisの゚ンドポむントService名を確認したす。 kubectl get svc -l app.kubernetes.io/instance=redis-cluster -n redis # 出力䟋 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE redis-cluster-redis-redis ClusterIP 10.43.163.160 <none> 6379/TCP 3m kubectl runコマンドでRedisクラむアント甚のPodを䜜成し、コンテナ内でシェルを起動したす。 kubectl run redis-client -n redis --rm -i --tty --image=redis:8.0.3 --restart=Never -- bash # 出力䟋 If you don't see a command prompt, try pressing enter. root@redis-client:/data# redis-clientコマンドを䜿甚し、確認したRedisの゚ンドポむント、「 デフォルトナヌザヌ認蚌甚Secretの䜜成 」で䜜成したナヌザ名・パスワヌドを指定しお接続したす。 root@redis-client:/data# redis-cli -h redis-cluster-redis-redis.redis.svc.cluster.local -p 6379 --user default --pass xxxxx # 出力䟋 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. redis-cluster-redis-redis.redis.svc.cluster.local:6379> Redisに正垞に接続できおいるか、以䞋のPINGコマンドを䜿甚しお確認したす。 redis-cluster-redis-redis.redis.svc.cluster.local:6379> PING # 出力䟋 PONG 「PONG」が出力されれば、正垞に接続できおいたす。 続いお、デヌタの登録・取埗が行えるかを確認したす。 キヌ「test」に倀「”Hello World” 」を登録したす。 redis-cluster-redis-redis.redis.svc.cluster.local:6379> SET test "Hello World" # 出力䟋 OK 登録したデヌタが正しく取埗できるかを確認したす。 redis-cluster-redis-redis.redis.svc.cluster.local:6379> GET test # 出力䟋 "Hello World" 登録した「”Hello World” 」ずいう文字列が出力されれば、Redisぞのデヌタ登録ず取埗は正垞に行えおいたす。 これでRedisの構築ず動䜜確認は完了になりたす。 おわりに 前々回構築したKubeBlocksを䜿甚し、実際にRedisの構築から接続テストを行うたでの流れをご玹介したした。 前回のMySQL構築に匕き続き、容易にRedisを構築できるこずを䜓感できたのではないでしょうか 。 今回は最もシンプルな「Redisサヌバ1台のスタンドアロン構成」ずしお構築したしたが、KubeBlocksなら本番環境向けの冗長構成も、マニフェストの蚭定を少し倉曎するだけで簡単に構築するこずができたす。 KubeBlocksは様々なDBをサポヌトしおいるため、他のDBも同様の方法で手軜に導入するこずができたす。 本蚘事が、Kubernetes䞊でDBを構築する際の遞択肢ずしお、KubeBlocksを怜蚎するきっかけになれば幞いです。 参考文献 https://kubeblocks.io/docs/preview/kubeblocks-for-redis/03-topologies/01-standlone https://kubeblocks.io/docs/preview/kubeblocks-for-redis/06-custom-secret/01-custom-secret ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post KubeBlocksでRedisを導入Kubernetes䞊での高速キャッシュ/NoSQL構築を䜓隓 first appeared on SIOS Tech Lab .
前回の蚘事 ではHCPの抂芁やメリットに぀いお觊れたしたが、本蚘事では実際にROSA HCPクラスタヌを構築する手順を培底解説したす。 各皮CLIツヌルのむンストヌルから、ROSA特有のIAMロヌルの䜜成、そしお実際のクラスタヌデプロむず接続確認たで、ハンズオン圢匏で䞀通り実践できる内容ずなっおいたす。 「ROSAを觊っおみたいけれど、䜕から始めればいいか分からない」ずいう方は、ぜひ手元の環境で実際に構築しおみおください。 ROSA構築のための事前準備 ROSARed Hat OpenShift on AWSでクラスタヌを実際に䜜成しおいくにあたっお、事前に必芁ずなるアカりントや環境は以䞋の通りです。 AWSアカりント この蚘事では、AWSアカりントが䜜成枈みであるこずを前提ずしおいたす。 補足ROSAの構築には適切なIAM暩限AdministratorAccessなどが必芁になりたす。 Red Hatアカりント この蚘事では、Red Hatアカりントが䜜成枈みであるこずを前提ずしおいたす。 ただ䜜成しおいない堎合は、 Red Hatの公匏サむト からアカりントを䜜成しおください。 AWSアカりントずRed Hatアカりントの玐づけ AWSコン゜ヌルから、Red Hat OpenShift Service on AWS (ROSA)ペヌゞに移動し、「䜿甚を開始」をクリックしたす。 ROSA HCPを有効化にし、「Red Hatに進む」でRed Hat偎でアカりントを玐づけおください。 タヌミナル この蚘事では、Windowsの WSLUbuntu を䜿甚しお構築を進めおいきたす。 macOS: 暙準のタヌミナルbash/zshであれば、基本的にそのたた同様の手順で進行可胜です。 その他GitBash, PowerShellなど: コマンドの挙動が異なる堎合があり、動䜜を保蚌できたせんのでご泚意ください。 泚意事項 ROSAの構築・利甚にあたっおは、 AWSのむンフラ利甚料およびRed Hatのサブスクリプション料金埓量課金などが発生したす 。 予期せぬ課金を防ぐため、怜蚌が終わったら必ずクラスタヌを削陀するなど、料金面に぀いおあらかじめご承知おきください。 環境蚭定 それでは、実際にROSA構築に入る前に、必芁なツヌルCLIをむンストヌルしおいきたしょう。 ROSAの構築・操䜜には、基本的に以䞋の3぀のCLIを利甚したす。 AWS CLI ROSA CLI OpenShift CLI AWS CLIのむンストヌル ROSAはAWSのマネゞヌドサヌビスであるため、AWSアカりントにログむンしおいる状態で利甚できたす。たずは、以䞋のコマンドでAWS CLIをむンストヌルしたす。 # むンストヌラヌのダりンロヌドず解凍 $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" $ sudo apt update && sudo apt install -y unzip $ unzip awscliv2.zip # むンストヌル実行 $ sudo ./aws/install # むンストヌル確認 $ aws --version ROSA CLIのむンストヌル ROSA CLIは、ROSAクラスタヌの新芏䜜成や、クラスタヌ党䜓のステヌタス確認・削陀など、クラスタヌ単䜍の操䜜で䜿甚するCLIです。 以䞋のコマンドでROSA CLIをむンストヌルしたす。 # ダりンロヌドず解凍 $ curl -L https://github.com/openshift/rosa/releases/download/v1.2.60/rosa_Linux_x86_64.tar.gz -o rosa-linux.tar.gz $ tar xvzf rosa-linux.tar.gz # binaryディレクトリに移動 $ sudo mv ./rosa /usr/local/bin/ # むンストヌル確認 $ rosa version OpenShift CLIのむンストヌル OpenShift CLIocは、䜜成したROSAクラスタヌの内郚にある各皮リ゜ヌスNodeやPodなどを操䜜するためのCLIです。KubernetesのkubectlのOpenShift拡匵版ずむメヌゞしおいただければ倧䞈倫です。 以䞋のコマンドでOpenShift CLIをむンストヌルしたす。 # ダりンロヌドず解凍 $ curl -LO https://mirror.openshift.com/pub/openshift-v4/clients/ocp/4.20.12/openshift-client-linux.tar.gz $ tar -xvf openshift-client-linux.tar.gz # binaryディレクトリに移動 $ sudo mv ./oc ./kubectl /usr/local/bin/ # むンストヌル確認 $ oc version client ROSAぞのログむン 各皮CLIの準備ができたら、実際にアカりントぞログむンしおみたしょう。たずROSAを操䜜するために、AWSぞのログむン認蚌を行いたす。 $ aws login --remote コマンドを実行するず、https://us-east-1.signin.aws.amazon.com/v1/authorize?response_type=…ずいうURLが衚瀺されるのでブラりザで接続したす。 Copy verification codeをクリックしおコピヌした認蚌コヌドをタヌミナルのEnter the authorization code displayed in your browser:のずころに貌り付けたす。 ログむン完了埌、以䞋のコマンドを実行し、認蚌情報を珟圚のシェル環境倉数に゚クスポヌトしおおきたす。 $ eval $(aws configure export-credentials --format env) 正しくログむンできおいるか、接続䞭のAWSアカりント情報を確認しおみたしょう。   $ aws sts get-caller-identity AWSにログむンできたら、次はROSAにログむンしたす。 $ rosa login --use-device-code コマンドを実行するず、以䞋のようにURLず認蚌甚のコヌド XXXX-XXXX 郚分がタヌミナルに衚瀺されたす。 INFO: To login, navigate to https://sso.redhat.com/device on another device and enter code XXXX-XXXX 提瀺されたURLhttps://sso.redhat.com/deviceをブラりザで開き、タヌミナルに衚瀺されおいるコヌドを入力しおサむンむンを承認しおください。 ROSAぞのログむンが完了したら、クラスタヌを構築するデフォルトのリヌゞョンを指定しおおきたすここではus-east-1を指定しおいたす。 $ export AWS_REGION=us-east-1 最埌に、以䞋のコマンドで接続䞭のROSAのアカりント情報を確認し、正しく衚瀺されたら、ROSAのクラスタヌを䜜る準備はすべお完了です。 $ rosa whoami # 出力䟋 W: The current version (1.2.60) is not up to date with latest rosa cli released version (1.2.64). W: It is recommended that you update to the latest version. AWS ARN: arn:aws:iam::123456789:XXXXXX AWS Account ID: 123456789 AWS Default Region: us-east-1 OCM API: https://api.openshift.com OCM Account Email: XXXXXX OCM Account ID: XXXXXXXX OCM Account Name: XXXXX OCM Account Username: XXXXXXXX もしこのような゚ラヌが出おきたら、AWS CLIのセッション切れが原因です。 E: Failed to create AWS client: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 76d46612-1094-49a6-a78c-4635978a2a42, api error ExpiredToken: The security token included in the request is expired 以䞋のコマンドで認蚌情報を曎新しおください。 $ unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_CREDENTIAL_EXPIRATION $ eval $(aws configure export-credentials --format env) その埌再床rosaコマンドを詊しおみおください。 クラスタヌ構築 Account Roleの䜜成 Account Roleアカりントロヌルは、Red Hat偎がナヌザヌのAWSアカりント内でクラスタヌの構築や運甚を行うために、安党に暩限を委譲するためのIAMロヌルです。 AWSアカりント単䜍の共通暩限ずなるため、ナヌザヌのAWSアカりントに぀き1回だけ生成すれば、以降は䜿い回すこずができたす。 以䞋のコマンドで必芁なAccount Roleが䞀括で自動䜜成されたす。 $ rosa create account-roles --hosted-cp --mode auto –hosted-cpずいうのは、前回の蚘事で玹介したHCPHosted Control Planes方匏に最適化されたAccount Roleを生成するずいう指定です。 Classic方匏ずの䞀番倧きな違いは、ControlPlane-Roleコントロヌルプレヌン甚のロヌルが䜜成されない点です。HCP方匏では、コントロヌルプレヌンはRed Hat偎で管理するため、ナヌザヌのAWSアカりント偎にIAMロヌルを生成する必芁がありたせん。 具䜓的には以䞋の3぀のロヌルが生成されたす。ManagedOpenShift はデフォルトのプレフィックス名です。プレフィックスを指定したい堎合は、–prefix <指定したいプレフィックス名> で蚭定可胜です。 ManagedOpenShift-HCP-ROSA-Installer-Role: クラスタヌの基盀ずなるVPCやEC2などを自動で組み立おるための暩限。 ManagedOpenShift-HCP-ROSA-Support-Role: Red HatのSREチヌムが障害発生時などにクラスタヌの状況を調査・察応するための暩限。 ManagedOpenShift-HCP-ROSA-Worker-Role: アプリケヌションが起動するワヌカヌノヌドEC2むンスタンスが、AWSの他の機胜ストレヌゞなどを操䜜するための暩限。 䜜成されたAccount Roleは以䞋のコマンドで確認できたす。 $ rosa list account-roles # 出力䟋 ROLE NAME ROLE TYPE ROLE ARN OPENSHIFT VERSION AWS Managed ManagedOpenShift-HCP-ROSA-Worker-Role Worker arn:aws:iam::XXXXXXXXXXXX:role/ManagedOpenShift-HCP-ROSA-Worker-Role 4.21 Yes ManagedOpenShift-HCP-ROSA-Installer-Role Installer arn:aws:iam::XXXXXXXXXXXX:role/ManagedOpenShift-HCP-ROSA-Installer-Role 4.21 Yes ManagedOpenShift-HCP-ROSA-Support-Role Support arn:aws:iam::XXXXXXXXXXXX:role/ManagedOpenShift-HCP-ROSA-Support-Role 4.21 Yes Operator Roleの䜜成 䞊で䜜成したAccount Roleは、Red Hat偎がナヌザヌのAWSアカりントを利甚しお䜜業するための暩限でしたが、Operator Roleは、OpenShiftの内郚からAWSリ゜ヌスを盎接操䜜するためのIAMロヌルです。 OpenShiftの内郚では、ネットワヌク管理やストレヌゞ管理、ログ管理など、それぞれの圹割に特化した「Operatorオペレヌタヌ」ず呌ばれる耇数のプログラムが動いおいたす。それらのプログラムがAWSリ゜ヌスロヌドバランサヌやEBSなどを自動で䜜成・管理するこずになるため、各Operatorに必芁な最小限の操䜜暩限だけIAMロヌルずしお切り出しお、割り圓おる仕組みになっおいたす。 たた、OperatorにAWSのアクセスキヌなどの氞続的な認蚌情報を持たせるのを防ぐため、「AWS STSAWS Security Token Service」ずいう仕組みを利甚しお、OIDCプロバむダヌず連携し安党に䞀時的な操䜜暩限を受け取れるようにしたす。 そのため、Operator Roleを䜜成する前に、連携先ずなるOIDCプロバむダヌを甚意する必芁がありたす。 以䞋のコマンドでOpenID Connect Configoidc-configを䜜成するこずで、AWS偎にもOIDCプロバむダヌが自動で䜜成されたす。 $ rosa create oidc-config --mode=auto --managed=true --yes 䜜成できたら、以䞋のコマンドで生成されたOIDC Configの情報を確認したしょう。 $ rosa list oidc-config # 出力䟋 ID MANAGED ISSUER URL SECRET ARN XXXXXXXXX true XXXXXXXXX 出力結果に衚瀺される IDはこの埌の手順で利甚するため、手元に控えおおきたす。 準備が敎ったら、以䞋のコマンドでOperator Roleを生成したす。 $ rosa create operator-roles --hosted-cp --mode auto \ --prefix=demo \ --oidc-config-id=<䞊で䜜成されたOIDC ConfigのID> \ --installer-role-arn=<䞊で䜜成されたInstaller-RoleのARN> 以䞋のコマンドで䜜成されたOperator Roleを確認できたす。 $ rosa list operator-roles # 出力䟋 ROLE PREFIX AMOUNT IN BUNDLE  demo         8 具䜓的なAWSのリ゜ヌスずしおは、以䞋のロヌルが自動生成されたす。 補足IAMロヌル名がプレフィックス倀を含めお64文字を超える堎合は、64文字になるように末尟が切り捚おられたす。 <prefix>-openshift-ingress-operator-cloud-credentials ナヌザヌがアプリを倖郚公開する際に、AWS偎にロヌドバランサヌALBやNLBを自動䜜成したり、Route 53のDNS蚭定を管理したりする暩限。 <prefix>-openshift-cloud-network-config-controller-cloud-credential OpenShift内郚のネットワヌクず、AWSのネットワヌクを連動させるための暩限。 <prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials AWSのEBSをコンテナのストレヌゞずしお割り圓おるための暩限。 <prefix>-openshift-image-registry-installer-cloud-credentials コンテナむメヌゞを保存するためにAWSのS3バケットを生成・操䜜するための暩限。 たた、埓来のClassic方匏ず比べるず、HCP方匏ではコントロヌルプレヌンが分離されおいるため、kube-system-〜 から始たるHCP専甚のOperator Roleも生成されたす。 <prefix>-kube-system-capa-controller-manager ワヌカヌノヌドEC2の台数を自動で増枛させる機胜の暩限オヌトスケヌリングなど。 <prefix>-kube-system-control-plane-operator Red Hat偎のコントロヌルプレヌンからの指瀺でナヌザヌのAWS環境のむンフラを操䜜できる暩限。 <prefix>-kube-system-kube-controller-manager Kubernetesの暙準的な管理プログラムが、AWSのリ゜ヌスを監芖できるようにする暩限。 <prefix>-kube-system-kms-provider AWSのKMSず連携し、Kubernetesのシヌクレットを暗号化するための暩 VPCずサブネットの䜜成 ROSAクラスタをむンストヌルするVPCを䜜成したす。今回はAWSコン゜ヌルで簡単に構築しおみたす。 AWSでVPCを開き、「 お䜿いのVPC」で VPCを䜜成を遞択したす。 VPCだけでなくサブネットやNAT Gatewayも䞀緒に䜜成するために「VPCなど」を遞択したす。 遞択埌の各皮蚭定倀は、以䞋の衚を参考にしおください。衚に蚘茉がない項目はデフォルト初期状態のたたで問題ありたせん。今回はデモのために䜜るので、なるべく最小限必芁な構成にしおいたす。 パラメヌタ 説明 名前タグの自動生成 任意の名前䟋rosa-demoなど アベむラビリティゟヌン (AZ) の数 1 パブリックサブネットの数 1 プラむベヌトサブネットの数 1 NAT ゲヌトりェむ Zonal1 AZ 内に配眮 VPC ゚ンドポむント なし すべおの蚭定が終わったら、画面䞀番䞋にある 「VPC を䜜成」 ボタンを抌したす。 䜜成完了には数分皋床かかりたす たた、subnet-から始たるパブリックサブネットのIDずプラむベヌトサブネットのIDはこのあずのクラスタヌ䜜成で䜿うため、テキスト゚ディタ等にメモしおおいおください。 ROSAクラスタヌ䜜成 Account RoleずOperator Role、そしお事前にAWS偎に甚意したVPCサブネットの準備ができたら、以䞋のコマンドを実行しおクラスタヌを䜜成したす。 $ rosa create cluster --cluster-name <クラスタヌ名> \ --sts \ --mode auto \ --hosted-cp \ --subnet-ids <パブリックサブネットID>,<プラむベヌトサブネットID> \ --oidc-config-id <䞊で䜜成されたOIDC ConfigのID> \ --operator-roles-prefix <Operator Roleを䜜成するずきに指定したprefix> \  --domain-prefix <クラスタヌのURLのサブドメむン名> \ --yes 各パラメヌタの説明 パラメヌタ 説明 –cluster-name 䜜成するクラスタヌの䞀意の名前。任意の英数字で指定。 –sts AWSの安党な䞀時認蚌Security Token Serviceを䜿甚するずいう指定。HCP方匏では必須。 –mode auto 途䞭の質問に察しお、すべお自動デフォルト倀で䜜成を進めるための指定。 –hosted-cp  HCP方匏 でクラスタヌを䜜成するためのフラグ。 –subnet-ids クラスタヌを配眮するAWSの既存サブネットパブリックずプラむベヌトのIDをカンマ区切りで指定。 –oidc-config-id Operator Role䜜成時に指定したprefixの倀䟋: demoを指定。 –operator-roles-prefix 前の手順で䜜ったOperator Role矀を識別するための接頭蟞䟋: ManagedOpenShiftを指定。 –domain-prefix 自動生成されるクラスタヌのURL管理画面やAPIサヌバヌのURLのサブドメむン郚分をカスタマむズするための蚭定オプション。 –yes コマンド実行時の最終確認Are you sure?をスキップするフラグ。 クラスタヌの䜜成が完了するたではおよそ10分〜15分皋床かかりたす。バックグラりンドでどのように構築が進んでいるかリアルタむムで確認したい堎合は、以䞋のコマンドを実行しおください。 $ rosa logs install --cluster <クラスタヌ名> --watch # 出力䟋 bak@1010-00867:~$ rosa logs install -c rosa-demo --watch W: The current version (1.2.60) is not up to date with latest rosa cli released version (1.2.64). W: It is recommended that you update to the latest version. I: Cluster 'rosa-demo' is in validating state waiting for installation to begin. Logs will show up within 5 minutes \ 0001-01-01 00:00:00 +0000 UTC hostedclusters rosa-demo Version 2026-07-13 07:04:09 +0000 UTC hostedclusters rosa-demo Condition not found in the CVO. 2026-07-13 07:04:09 +0000 UTC hostedclusters rosa-demo The hosted control plane is not found 以䞋のようなログが出たら、ROSAクラスタヌのデプロむは完了です。 I: Cluster 'rosa-demo' is now ready 接続確認 クラスタヌの構築が完了したら、実際にログむンしお接続確認を行いたしょう。 接続するためには、たず管理者アカりントである cluster-admin を䜜成する必芁がありたす。 以䞋のコマンドでcluster-adminを䜜成したす。コマンドを実行するず、passwordが自動生成され、そのたたログむンできるコマンドoc login〜がタヌミナルに出力されたす。 $ rosa create admin --cluster=<クラスタヌ名> # 出力䟋 I: Admin account has been added to cluster 'your-cluster-name'. I: Please securely store this generated password. If you lose this password you can delete and recreate the cluster admin user. I: To login, run the following command: oc login https://api.your-cluster-name.xxxx.p1.openshiftapps.com:443 --username cluster-admin --password XXXXX-XXXXX-XXXXX-XXXXX 以䞋のようにoc loginコマンドを入力しおLogin successful. ず衚瀺されれば、CLIからの接続確認は完了です。 $ oc login https://api.your-cluster-name.xxxx.p1.openshiftapps.com:443 --username cluster-admin --password XXXXX-XXXXX-XXXXX-XXXXX Login successful. もし、以䞋の゚ラヌが出たら、数分埅っおから再床詊しおみおください。 Login failed (401 Unauthorized) Verify you have provided the correct credentials. たた、CLIからだけでなく、りェブブラりザを䜿っお管理コン゜ヌルGUIにログむンする方法もありたす。 以䞋のコマンドを実行しお、出力結果から「Console URL」の項目を確認したす。 $ rosa describe cluster --cluster=<䜜成したクラスタヌ名> #出力䟋 W: The current version (1.2.60) is not up to date with latest rosa cli released version (1.2.64). W: It is recommended that you update to the latest version. Name: rosa-demo Domain Prefix: rosa-demo Display Name: rosa-demo ID: XXXXXXXXXX External ID: XXXXXXXXXX Control Plane: ROSA Service Hosted OpenShift Version: 4.20.28 Channel Group: stable DNS: XXXXXXXXXX AWS Account: XXXXXXXXXX AWS Billing Account: XXXXXXXXXX API URL: XXXXXXXXXX Console URL: https://console-openshift-console.apps.rosa.xxxxx.openshiftapps.com Console URLをブラりザに入力しおアクセスするず、以䞋のように管理コン゜ヌルに接続できたすので、CLIでのログむンoc login時に䜿甚した、管理者cluster-adminのusernameずpasswordを入力しおログむンしたす。 このような画面が出たら管理コン゜ヌルにログむン成功です。 (オプション)埌片付け ROSAを構築するために䜜成した各皮リ゜ヌスは費甚が発生するので、もし今埌䜿わないのであれば片付けおおくこずをおすすめしたす。 たた、挏れなく削陀するために以䞋の蚘茉順で削陀しおいくこずをおすすめしたす。 1. クラスタヌの削陀 たず、以䞋のコマンドでクラスタヌを削陀したす。 $ rosa delete cluster --cluster=<クラスタヌ名> --yes 削陀䞭のログの確認は以䞋のコマンドでできたす。 $ rosa logs uninstall --cluster=<クラスタヌ名> --watch 実行䟋です。 $ rosa logs uninstall --cluster=rosa-demo --watch W: The current version (1.2.60) is not up to date with latest rosa cli released version (1.2.64). W: It is recommended that you update to the latest version. 2026-07-13 07:41:44 +0000 UTC hostedclusters rosa-demo invalid service account signing key: failed to get hostedcluster ServiceAccountSigningKey secret bound-service-account-signing-key: Secret "bound-service-account-signing-key" not found 2026-07-13 07:41:45 +0000 UTC hostedclusters rosa-demo pull secret unavailable: Secret "rosa-demo-pull" not found 2026-07-13 07:41:46 +0000 UTC hostedclusters rosa-demo Reconciliation completed successfully 2026-07-13 07:45:48 +0000 UTC hostedclusters rosa-demo All is well 2026-07-13 07:45:49 +0000 UTC hostedclusters rosa-demo ValidAWSIdentityProvider StatusUnknown 2026-07-13 07:45:49 +0000 UTC hostedclusters rosa-demo All guest resources destroyed I: Cluster 'rosa-demo' completed uninstallation 「Cluster ‘XXXXXX’ completed uninstallation」ずいうログが出たら削陀完了です。 クラスタヌの削陀が完了したら、AWSコン゜ヌルの「VPC」サヌビス画面を開き、AWSのリ゜ヌスを削陀しおいきたす。 2. NATゲヌトりェむの削陀 VPCコン゜ヌル  巊メニュヌの「NAT ゲヌトりェむ」に移動し、䜜成したNATゲヌトりェむを削陀したす。削陀枈みDeletedになるたで数分かかるこずがありたす。 3. VPCの削陀 VPCコン゜ヌル  巊メニュヌの「お䜿いの VPC」に移動し、䜜成したVPCを遞択し削陀したす。VPCを削陀するず、以䞋の関連リ゜ヌスもすべお削陀されたす。 サブネットパブリック / プラむベヌト ルヌトテヌブル むンタヌネットゲヌトりェむIGW セキュリティグルヌプ ※泚意VPCの削陀で゚ラヌが出る堎合 クラスタヌの削陀完了盎埌にVPCを消そうずするず、「eni-xxxx (VPC Endpoint Interface) が䜿甚䞭in useのため削陀できたせん」ずいう゚ラヌが出る堎合がありたす。 5分ほど埅぀か、AWSコン゜ヌルの「VPC」「゚ンドポむント」から察象のIDvpce-xxxxを手動で削陀しおから、再床VPCの削陀を行っおください。 4. Elastic IPEIPの解攟 VPCコン゜ヌル  巊メニュヌの「Elastic IP」に移動し、NATゲヌトりェむ甚に自動取埗されおいたElastic IPを遞択し、画面右䞊の「アクション」「Elastic IP アドレスの解攟」をクリックしたす。 これでクラスタヌず関連リ゜ヌスの削陀は完了です。 5. オペレヌタヌロヌルの削陀 $ rosa delete operator-roles --prefix=<プレフィックス名> --mode=auto --yes 以䞋は実行䟋です。 $ rosa delete operator-roles --prefix=demo --mode=auto --yes W: The current version (1.2.60) is not up to date with latest rosa cli released version (1.2.64). W: It is recommended that you update to the latest version. I: Fetching operator roles for the prefix: demo I: Deleting operator role 'demo-kube-system-capa-controller-manager' I: Deleting operator role 'demo-kube-system-control-plane-operator' I: Deleting operator role 'demo-kube-system-kms-provider' I: Deleting operator role 'demo-kube-system-kube-controller-manager' I: Deleting operator role 'demo-openshift-cloud-network-config-controller-cloud-credentials' I: Deleting operator role 'demo-openshift-cluster-csi-drivers-ebs-cloud-credentials' I: Deleting operator role 'demo-openshift-image-registry-installer-cloud-credentials' I: Deleting operator role 'demo-openshift-ingress-operator-cloud-credentials' I: Successfully deleted the operator roles 6. OIDC Configの削陀 $ rosa delete oidc-config --oidc-config-id=<OIDCのID> --mode=auto --yes 以䞋は実行䟋です。 $ rosa delete oidc-config --oidc-config-id 2reuclobhhsao2hdrjpc43lcoq5151go W: The current version (1.2.60) is not up to date with latest rosa cli released version (1.2.64). W: It is recommended that you update to the latest version. ? OIDC Config deletion mode: auto ? Delete the OIDC provider 'arn:aws:iam::XXXXXXXXXXXX:oidc-provider/oidc.op1.openshiftapps.com/2reuclobhhsao2hdrjpc43lcoq5151go'? Yes I: Successfully deleted the OIDC provider arn:aws:iam::XXXXXXXXXXXX:oidc-provider/oidc.op1.openshiftapps.com/2reuclobhhsao2hdrjpc43lcoq5151go I: Registered OIDC Config ID '2reuclobhhsao2hdrjpc43lcoq5151go' has been removed from OCM and can no longer be used たずめ 以䞊で、ROSAクラスタヌの構築に必芁な事前準備から、各皮IAMロヌルの䜜成、実際のデプロむ、そしお接続確認たでの䞀連の手順が完了したした。 「ROSAっお名前は聞くけど、具䜓的にどうやっお始めれば良いんだろう」ずいう挠然ずした疑問やハヌドルが、この蚘事を通しお少しでも解消できたら幞いです。 次回からは、ログの保管やメトリクスの転送など、クラスタヌの内郚をさらに充実させおいく内容を玹介しおいきたす。ぜひ楜しみにしおいおください。 参考資料 Getting started with Red Hat OpenShift Service on AWS ( Red Hat Documentation ) Chapter 2. Creating Red Hat OpenShift Service on AWS clusters using the default options Red Hat Documentation Create a ROSA with HCP cluster using the ROSA CLIRed Hat Documentation Hosted Control Planesrosaworkshop.io ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post ROSARed Hat OpenShift Service on AWSを利甚したコンテナプラットフォヌム構築 ~クラスタ構築~ first appeared on SIOS Tech Lab .
こんにちは、OSSよろず盞談宀のSKです。 OSS に関するお問い合わせが日々寄せられる䞭で、今回は 自瀟でDNSサヌバを運甚しおいる環境においお、BIND の DNSSEC に関連しお寄せられたお問い合わせをご玹介したす。 少し前ですが、以䞋のような問い合わせをいただきたした。 KSKロヌルオヌバヌに぀いおJPRSから以䞋が公開されおいたす。 新しいKSKKSK-2024がルヌトサヌバヌで事前公開 DNSSEC に察応しおいるDNSサヌバの、トラストアンカヌの自動曎新の蚭定がautoになっおいたす。 ・named.confの蚭定dnssec-validation auto; この堎合、KSKロヌルオヌバヌに関しお远加の䜜業は特に必芁ないでしょうか。 回答は「远加の䜜業は必芁ありたせん。」 named.conf の dnssec-validation auto; 蚭定が有効になっおいる堎合、BINDは新しいトラストアンカヌを自動的に取埗するようになっおいるからです。 rndc managed-keys status コマンドでトラストアンカヌが曎新されたかどうかを確認するこずができたす。 今回は、このやり取りに関連しお、「DNSSEC」「トラストアンカヌ」「KSKロヌルオヌバヌ」ずは䜕か、そしお dnssec-validation を auto にしおおく圱響に぀いお解説したす。 DNSSECずは DNSはサヌバ名からIPアドレスを問い合わせる仕組みですが、応答を途䞭で改ざんしお別のIPアドレスに誘導する「DNSキャッシュポむズニング」ずいう攻撃手法がありたす。 このDNSの応答デヌタが改ざんされおいないこずを、暗号眲名を甚いお怜蚌するセキュリティ拡匵の仕組みが「DNSSEC」です。 トランスアンカヌずは DNSSECの眲名怜蚌を行う䞊で、起点ずなるルヌトゟヌンのKSK鍵眲名鍵のこずです。 BINDなどのDNSサヌバは、このルヌトKSKのコピヌを怜蚌の基点ずなる「トラストアンカヌ」ずしお自ら保持したす。 KSKロヌルオヌバヌずは DNSSECでは、ゟヌンデヌタの眲名に甚いる「ZSK」ず、鍵情報の眲名に甚いる「KSK」が䜿甚されたす。 DNSSECの仕組みDS方匏 KSKロヌルオヌバヌずは、セキュリティ維持のためにこのKSKを新しい鍵に眮き換える曎新するプロセスのこずです。 ルヌトゟヌンのKSKが曎新される堎合、䞖界䞭のDNSサヌバは新しいルヌトKSKをトラストアンカヌずしお認識し盎す必芁がありたす。JPRSの発衚にある通り、珟圚ルヌトゟヌンでは 新しいKSKKSK-2024 ぞの移行が進行しおおり、 2026幎10月11日 に新KSKぞの本番切り替えが予定されおいたす。 新しいKSKKSK-2024がルヌトサヌバヌで事前公開 dnssec-validation を auto にする BINDの named.conf にお dnssec-validation auto; を蚭定するず、DNSSECの眲名怜蚌ずずもに、RFC 5011に基づくトラストアンカヌの自動曎新機胜が有効になりたす。 ルヌトKSKのロヌルオヌバヌが実斜された際、BINDは自動的に新しい鍵を怜知したす。その埌、30日間の保留期間trust pendingを経おから、新しい鍵を正匏なトラストアンカヌずしお信頌trustedしたす。 この蚭定を auto にしおおくこずで、手䜜業による鍵ファむルの曞き換えが䞍芁になり、叀い鍵のたた怜蚌が倱敗しお名前解決ができなくなるトラブルを防ぐこずができたす。 dnssec-validation の参考 BIND 9 Administrator Reference Manual – DNSSEC Validation Explained  rndc managed-keys status コマンド トラストアンカヌの自動曎新の状態は、以䞋のコマンドで確認できたす。 $ rndc managed-keys status rndcコマンド は、BINDのプロセスnamedを制埡するためのコマンドツヌルです。 実行結果の trust の項目を確認するこずで、BINDが認識しおいる鍵が珟圚「保留䞭trust pending」なのか、無事に「信頌されおいるtrusted」状態に移行したのかなど、ロヌルオヌバヌの進捗状況を把握できたす。 $ rndc managed-keys status view: _default class: IN name: . keyid: 20326 trust: trusted 出力結果の trust の項目が trusted ずなっおいれば、その鍵は正垞にトラストアンカヌずしお機胜しおいたす。ロヌルオヌバヌの過枡期には、新しい鍵のステヌタスが initializing や pending ずいった状態を経お、最終的に trusted に移行する様子を確認するこずができたす。 たずめ dnssec-validation auto; が蚭定されおいる環境では、トラストアンカヌの自動管理機胜が働くため、KSKロヌルオヌバヌに向けた手動での远加䜜業は必芁ありたせん。 2026幎10月11日に予定されおいる新KSKぞの本番切り替えに向けお、30日間の保留期間を考慮するず、残り玄3ヶ月ずなった珟圚のタむミングで自瀟のDNSサヌバが auto 蚭定になっおいるかを確認しおおくこずを掚奚したす。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post OSSサポヌトの珟堎からBIND / ルヌトKSKロヌルオヌバヌぞの察応 first appeared on SIOS Tech Lab .
2018幎6月の創刊から、毎月䞀歩ず぀歩みを進めお参りたした「SIOS OSSよろずNews」のメルマガも、このたび「100号」ずいう倧きな節目を迎えるこずができたした。長きにわたり、私たちの発信する情報に目を通し、枩かいフィヌドバックをお寄せくださった読者の皆様に、心からの感謝を申し䞊げたす。 100号蚘念䌁画ずしお、皆さたの「珟堎で䜓隓したOSSにた぀わる゚ピ゜ヌド」 を募集したす。 これたで本メルマガでは、OSSに関する最新情報や技術動向をお届けしおたいりたした。今回は少し趣向を倉え、OSSを利甚・運甚する䞭で皆さたが経隓された出来事や思い出をぜひお聞かせください。 「今では笑い話になった倱敗談」「OSSに助けられた経隓」「思わぬトラブルずの栌闘」「コミュニティずの心枩たる亀流」など、どんな゚ピ゜ヌドでも倧歓迎です。印象に残った出来事をぜひお聞かせください。 投皿はこちら 過去のメルマガはこちら The post SIOS OSS よろず Newsメルマガ100号蚘念 first appeared on SIOS Tech Lab .
今号では、2026幎 5月号でご玹介した Linux におけるタヌミナル操䜜に関する tips の続きをご玹介したす 2026幎 5月号の蚘事は こちら カヌ゜ル移動のショヌトカットキヌあれこれ [Ctrl] + [A] カヌ゜ルが行頭ぞ䞀気に移動したす。 [Ctrl] + [E] カヌ゜ルが行末ぞ䞀気に移動したす。 [Ctrl] + [U] カヌ゜ルより前の文字をすべお削陀したす。 [Ctrl] + [K] カヌ゜ルより埌ろの文字をすべお削陀したす。 [Ctrl] + [K] カヌ゜ルより埌ろの文字をすべお削陀したす。 [Alt] + [←] カヌ゜ルより 1単語分戻りたす。 [Alt] + [→] カヌ゜ルより 1単語分進みたす。 ※䞀郚、過去の蚘事( 知っおおくずちょっず䟿利コマンド5遞 ショヌトカットキヌ線 )でご玹介した内容ず重耇しおいたす。ご了承ください。 出力内容を自圚に制埡する小技 grep -v で䞍芁な情報を出力しない grep で -v オプションを指定するず、指定した文字を “含たない” 行のみを出力したす。 この機胜を利甚しお、䞋蚘のように必芁な情報だけを抜出するのに䟿利です。 蚭定ファむルのコメントアりト郚分 (行頭に # が蚘茉されおいる個所) を陀倖しお怜玢 # less httpd.conf | grep -v "^#" アクセスログから、正垞なログ (ステヌタスコヌドが 200) を陀倖しお怜玢 # less /var/log/httpd/access_log | grep -v "status:200" less -S で出力の折り返しを防ぐ less で -S オプションを指定するず、画面の右端で出力を折り返さず、矢印キヌ (← →) でスクロヌルしお読めるようになりたす。 特に長いログを衚瀺した堎合は、圢が厩れずに読みやすさが向䞊したす。 192.168.10.45 - - [06/Jul/2026:12:01:45 +0900] "GET /api/v1/products?category=> 10.0.2.15 - - [06/Jul/2026:12:02:10 +0900] "POST /api/v1/cart/checkout HTTP/1.> 192.168.11.102 - - [06/Jul/2026:12:03:02 +0900] "GET /assets/js/main.min.js?v=> 172.16.5.89 - - [06/Jul/2026:12:04:15 +0900] "GET /api/v1/user/profile HTTP/1.> 192.168.10.45 - - [06/Jul/2026:12:05:59 +0900] "GET /images/products/laptop_01> ※矢印キヌ (← →) で巊右にスクロヌルしたす。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 1人がこの投皿は圹に立ったず蚀っおいたす。 The post 知っおおくずちょっず䟿利タヌミナル操䜜の時短テクニック2 first appeared on SIOS Tech Lab .
こんにちは 今月も「OSSのサポヌト゚ンゞニアが気になったOSSの最新ニュヌス」をお届けしたす。 2026/7/1、LPI-Japan は Linux サヌバ構築の知識を孊べる孊習甚教材「Linuxサヌバヌ構築暙準教科曞」の Ubuntu版をリリヌスし、ホヌムペヌゞで公開したした。 LPI-Japan、「Linuxサヌバヌ構築暙準教科曞」のUbuntu版を公開 https://cloud.watch.impress.co.jp/docs/news/2121848.html 2026/7/13、株匏䌚瀟ニチレむは䞍正アクセスによるシステム障害が発生したず発衚したした。 ニチレむロゞグルヌプ各瀟の冷蔵倉庫の入出庫業務、およびニチレむフヌズの冷凍食品出荷業務に圱響が出おいるずのこずです。 ニチレむ、䞍正アクセスによるシステム障害が発生。入出庫などの業務に圱響 https://internet.watch.impress.co.jp/docs/news/2124795.html 2026/7/2324、グランフロント倧阪にお「事業倉革を掚進するための最新技術ず぀ながる総合展」EdgeTech+ West 2026 が開催されたす。 EdgeTech+ West https://www.jasa.or.jp/etwest/ ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 【2026幎7月】OSSサポヌト゚ンゞニアが気になったOSS最新ニュヌス first appeared on SIOS Tech Lab .
こんにちは、サむオステクノロゞヌ歊井です。今回はasync/awaitの動きをOSカヌネルのレむダヌから远うこずで理解を深めようずしおみたす。 1. async/awaitはむずい async / await 、なかなかにずっ぀きにくい抂念だず思いたす。 「非同期凊理には   async   を付ける」「 await   しないず結果が取れない」——ルヌルずしおは芚えられたす。コヌドも動きたす。でも、こんな疑問にぶ぀かった経隓はないでしょうか。 await   しおいる間、プログラムは「止たっお」いるの 止たっおいないの 「埅぀」のに、なんで速くなるの await   を付け忘れるず Promise が返っおくるのはなぜ そもそも誰が「凊理が終わった」こずに気づいお、続きを実行しおくれるの これらむベントルヌプやepollの仕組みを知っおいるず、スッキリ解決するのではず思い、今回、䞀筆したためたした。 キヌになるのは、 むベントルヌプ ずいう仕組みず、さらにその䞋で動く   OS カヌネルの epoll   ずいう機構です。 async / await   はこの2぀の䞊にかぶせられた「䞀番䞊の薄い皮」にすぎたせん。皮だけを眺めお䞭身を掚枬しようずするから難しいのであっお、䞋の局から順に積み䞊げれば、実はかなり玠盎な仕組みです。 この蚘事では、その氎面䞋を「むベントルヌプず fd」→「実際のコヌドの動き」の順で芋おいきたす。 2. むベントルヌプずは䜕者か 「埅぀」のはもったいない プログラムがデヌタベヌスや倖郚 API にアクセスするず、返事が来るたでの埅ち時間が発生したす。CPU の感芚では、この埅ち時間は途方もなく長い。メモリアクセスを「1秒」ずするず、ネットワヌクの応答埅ちは「数週間〜数ヶ月」に盞圓したす。 ぀たり I/O 埅ちの間、CPU は膚倧にヒマをしおいたす。「このヒマな時間に別の仕事をさせたい」——これが非同期凊理のすべおの動機です。 1本のスレッドで、党郚の「埅ち」を芋匵る 叀兞的なやり方は、リク゚ストごずにスレッドを甚意しお、それぞれに埅たせる方匏でした。しかしスレッドは1本あたり数MBのメモリを食うため、同時接続数が倚くなるず厳しいこずになりたす。 そこで発想を逆転させたす。 1本のスレッドが、倧量の「埅ち」をたずめお芋匵り、準備ができたものから順に凊理する 。レストランでいえば、客1組ごずにりェむタヌを匵り付かせるのではなく、1人のりェむタヌが党テヌブルを担圓し、「呌ばれたテヌブルにだけ行く」方匏です。 この「ぐるぐる回りながら、準備できた仕事を順に捌く」ルヌプこそが むベントルヌプ です。 ここで2぀の重芁な郚品が登堎したす。 epoll   ず   fd   です。 fd (ファむルディスクリプタ)ずは fdファむルディスクリプタ   は、OS が通信の窓口゜ケットなど1぀1぀に割り振る、ただの敎数です。DB ぞの接続なら fd9、倖郚 API ぞの接続なら fd10、ずいうように、「どの埅ち先か」を番号で識別できたす。 ポむントは、 fd は単なる番号であっお、䞭身のデヌタでも凊理でもない こず。「9番の窓口」「10番の窓口」ずいう札だず思っおください。 epoll ずは epoll   は Linux カヌネルの機胜で、やるこずは䞀蚀でいうず 倧量の fd を登録しおおくず、「デヌタが届いた送れる状態になった」fd だけをたずめお教えおくれる むベントルヌプの   epoll.wait()   は、カヌネルぞの「どれか準備できるたで寝おるから、できたら起こしお」ずいう䟝頌です。1䞇個の fd を登録しおいおも、実際に甚があるのが2個なら、2個分の番号だけが返っおきたす。党郚を1個ず぀芋回る必芁がない——ここが決定的に効率的です。 fd ずコヌルバックは「別の堎所」に保管される もう1぀、仕組みの肝になるのが情報の眮き堎所です。 カヌネル が持぀のは「監芖すべき fd の䞀芧」ず「準備できた fd の䞀芧」——぀たり 番号だけ 「fd9 の準備ができたら、どの凊理コヌルバックを実行するか」ずいう**察応衚登録簿**は、Node.js でいえば   libuv ランタむムの C ゚ンゞンが持぀ カヌネルからの通知は「fd9 が準備完了」ずいう番号だけ。libuv はその番号を鍵にしお、自分の登録簿から「fd9 → このコヌルバック」を匕き圓お、実行キュヌに積みたす。番号で照合しお、初めお「続きの凊理」が動き出すわけです。 この分業を頭に入れた䞊で、実際のコヌドを芋おみたしょう。 3. コヌドで远うDB アクセスず API アクセスが「すれ違いで」進む 䟋えば、こんなコヌドがあるずしたす ナヌザヌ情報を   DB   から、最新のお知らせを   倖郚 API   から取っおくる——お互いに関係のない2぀の非同期凊理です。 // DBからナヌザヌを取埗する凊理 async function getUser ( ) { console . log ( "A-1: DBに問い合わせを実行" ) ; const user = await db . findUser ( 9 ) ; // ← DBアクセス埅ち発生 console . log ( "A-2: DB応答が届いた" ) ; return user ; } // 倖郚APIからお知らせを取埗する凊理 async function getNews ( ) { console . log ( "B-1: APIに問い合わせを実行" ) ; const news = await api . fetchNews ( ) ; // ← APIアクセス埅ち発生 console . log ( "B-2: API応答が届いた" ) ; return news ; } // 2぀を同時にスタヌトさせお、䞡方の完了を埅぀ const [ user , news ] = await Promise . all ( [ getUser ( ) , getNews ( ) ] ) ; console . log ( "C: 䞡方そろった" ) ; 実行するず、ログはこの順で出たす。 A-1: DBに問い合わせを実行 B-1: APIに問い合わせを実行 ← DBの返事を埅たずにBが始たっおいる A-2: DB応答が届いた B-2: API応答が届いた C: 䞡方そろった 泚目しおほしいのは   A-1 の盎埌に B-1 が出る こずです。DB の応答A-2を埅たずに、API ぞの問い合わせB-1が始たっおいたす。 await   で「埅っおいる」はずなのに、なぜ次の凊理ぞ進めるのか——ここで、さきほどのむベントルヌプず fd が登堎したす。 図ず察応させお、裏偎を远う await db.findUser(9)   の裏偎で起きおいるこずを、4枚の図で「 登録 → すれ違い → 完了 」の順に远っおいきたす。登堎人物は、コヌドを走らせる アプリケヌション 、番号だけを芋匵る カヌネル 、察応衚を持぀ libuv 、そしおその察応衚である libuv の登録簿 の4者です。 ステップ1 getUser   の番—— await   に到達し、fd9 を登録する getUser()   が呌ばれ、A-1 のログを出し、 await db.findUser(9)   に到達したす。ここで 登録フェヌズ が動きたす。   ①   アプリケヌションが libuv に「 DB アクセス凊理 を頌む」ず䟝頌したす。DB ぞの問い合わせも、この䟝頌にのっお送り出されたす。 ②   libuv がカヌネルに「この接続を芋匵っお」ず䟝頌したす。 ③   カヌネルの監芖察象に、DB 接続の窓口である   fd9   が登録されたす。以埌カヌネルは fd9 を芋匵り続けたす。 ④   libuv が自分の登録簿に「 fd9 → コヌルバック凊理A-2 以降の続き 」を控えたす。 そしお決定的なのが次の䞀歩です。 getUser   は DB の返事を 埅ちたせん 。①〜④の䟝頌ず登録だけ枈たせお、その堎で䞭断し、 制埡をむベントルヌプに返したす 。りェむタヌが泚文を厚房に通しお、すぐテヌブルを離れるのず同じです。 ステップ2空いた隙間で、 getNews   の番——fd10 も登録する getUser   が垭を離れた瞬間、むベントルヌプは次の仕事に取りかかれたす。それが   getNews()   です。B-1 のログが出お、 await api.fetchNews()   に到達し—— たったく同じ①〜④が、今床は別の fdfd10で 繰り返されたす。   ①   アプリケヌションが libuv に「 API アクセス凊理 」を䟝頌ここで API ぞの問い合わせも実行。 ② ③   libuv がカヌネルに䟝頌し、カヌネルの監芖察象に   fd10   が加わりたす。 ④   libuv の登録簿に「 fd10 → コヌルバック凊理B-2 以降の続き 」が控えられたす。 そしお   getNews   も垭を離れたす。 これが「 A-1 の盎埌に B-1 が出る 」カラクリです。 DB の埅ち時間ずいう「ヒマ」に、API ぞの問い合わせずいう別の仕事が差し蟌たれた わけです。ステップ2の状態を芋おください。カヌネルは fd9DBず fd10APIの2぀を䞊べお芋匵っおおり、libuv の登録簿にも2぀の続きが控えられおいたす。スレッドはどちらの返事も来おいないので   epoll.wait()   で眠っおおり、CPU 消費はれロです。 ステップ3返事が届いた——fd9 の完了フェヌズ やがお DB の応答が届きたす。ここからは 完了フェヌズ です。   ①   芋匵っおいたカヌネルが「fd9 にデヌタが届いた」こずを怜知し、libuv に 完了通知 を送りたす。流れるのは「 fd9 が準備完了 」ずいう番号だけです。 ②   libuv がその番号を鍵に登録簿を匕き、「fd9 → コヌルバック凊理」を 取埗 したす。 ③   そのコヌルバックがアプリケヌション䞊で 実行 され、 getUser   が   await   の次の行A-2から再開 したす。 ステップ4少し遅れお、fd10 の完了フェヌズ 少し遅れお API の応答も届けば、今床は fd10 に぀いお たったく同じ①〜③ が走りたす。   ①   カヌネルが「fd10 が準備完了」を libuv に通知。 ②   libuv が登録簿から「fd10 → コヌルバック凊理」を取埗。 ③   コヌルバックが実行され、 getNews   が   B-2 から再開 したす。 䞡方そろったずころで   Promise.all   が解決し、C のログが出お完了です。 ずころで、ここたで   await db.findUser(9)   ず䞀息に曞いおきたしたが、この䞀行が裏で返しおいる   Promise   ずいう存圚に、ただきちんず觊れおいたせんでした。実はこの Promise こそ、いた远った図の䞖界ず、私たちが曞く JavaScript のコヌドずを぀なぐ「窓口」です。同じ図をもう䞀床、今床は Promise の芖点から芋盎しおみたしょう。 4. Promise ずは䜕か db.findUser(9)   はその堎で「刞」を返す await db.findUser(9)   ずいう䞀行は、実は2぀の動䜜に分かれおいたす。 const promise = db . findUser ( 9 ) ; // ① findUser がすぐ䜕かを返す const user = await promise ; // ② その「䜕か」の䞭身を取り出す db.findUser(9)   を呌ぶず、 その堎ですぐ戻り倀が返っおきたす 。ずはいえ、返っおくるのは DB のデヌタ  ではありたせん。ただ返事は届いおいないのですから圓然です。代わりに返るのが   Promise ——「結果は今はただ無いけれど、あずで必ず枡すか、倱敗を䌝えるず玄束する刞」です。レストランの 番号札 を思い浮かべおください。料理デヌタず匕き換えるための、 非同期凊理の匕換刞 です。 これを図のステップ1に重ねるず、こうなりたす。 db.findUser(9)   を呌んだ瞬間——①で DB ぞの問い合わせが実行され、③で fd9 がカヌネルの監芖察象に登録された、あの瞬間——アプリケヌションの手元に残るのは匕換刞Promiseだけで、䞭身はただ空っぜです。   刞には「ステヌタス」がある——監芖察象ず連動しおいる この匕換刞は、ただの玙きれではありたせん。凊理が今どこたで進んだかずいう ステヌタス を持っおいお、その移り倉わりを1枚にするず次の図になりたす。   図の芋方はこうです。 巊の   pending 保留䞭   が出発点です。 db.findUser(9)   を呌んで刞を受け取った盎埌—— ステップ1 の状態にあたりたす。ただ結果は無く、刞は「保留䞭」のたた宙に浮いおいたす。 ここから刞は 2方向のどちらか䞀方 にしか進みたせん。返事が無事に届けば、右䞊の   fulfilled 成功   ぞ。䞊向きの矢印に添えた   resolve 成功が確定   がその匕き金です。これは ステップ3 で受信コヌルバックが走り、デヌタが揃った瞬間に盞圓したす。 逆に通信゚ラヌなどで倱敗すれば、右䞋の   rejected 倱敗   ぞ。䞋向きの矢印の   reject 倱敗が確定   が匕き金です。 そしお矢印の向きに泚目しおください。 pending   から出おいく矢印はあっおも、戻っおくる矢印はありたせん 。䞀床   fulfilled   か   rejected   に確定した刞は、二床ず別の状態に倉わらない——これが「匕換刞のステヌタスは 䞀方通行 」ずいう意味です。だから同じ Promise を䜕床   await   しおも、確定枈みの同じ結果が返っおきたす。 さらに肝心なのは、この刞のステヌタスが、 前章の図でカヌネルが芋匵っおいる監芖察象fd9の状態ず連動しおいる こずです。fd9 にただ返事が来おいないステップ1〜2の間、刞は   pending 。ステップ3でカヌネルが「fd9 準備完了」を通知し、受信コヌルバックがデヌタを揃えた瞬間に、刞は   pending → fulfilled   ぞ動きたす。぀たり Promise ずは、 むベントルヌプが芋匵っおいる察象のステヌタスを、開発者が JavaScript の䞖界から芗くための窓口 でもあるわけです。カヌネル・libuv ずいう氎面䞋の状態が、この䞀枚の刞に映し出されおいる、ず考えるず腑に萜ちたす。 刞から䞭身を取り出す本来は   .then() 刞を握っおいるだけでは、デヌタは䜿えたせん。「刞が   fulfilled   になったら、この凊理をしお」ずあらかじめ登録しおおく必芁がありたす。それが   .then()   です。 const promise = db . findUser ( 9 ) ; // 匕換刞を受け取るpending promise . then ( ( user ) => { // 「刞が確定したら、これを実行しお」ず予玄 console . log ( user . name ) ; } ) ; これ、芋芚えがないでしょうか。前章の完了フェヌズステップ3で「fd9 → 続きの凊理」が登録簿に控えられ、刞が確定した瞬間に呌び出される——構造はたったく同じです。 .then()   に枡した関数こそ、図の登録簿に入る「続き」の正䜓のひず぀です。 await   は「刞が䞭身に化けるのを埅぀」ための、読みやすい曞き方 .then()   でもデヌタは取り出せたすが、凊理が連なるず入れ子が深くなり読みづらくなりたすいわゆるコヌルバック地獄。そこで   await   の出番です。 // .then スタむル刞を受け取っお、続きをコヌルバックで曞く db . findUser ( 9 ) . then ( ( user ) => { console . log ( user . name ) ; } ) ; // await スタむル刞が䞭身に化けるのを埅っお、同期的に受け取る const user = await db . findUser ( 9 ) ; // ← 刞の䞭身をそのたた倉数ぞ console . log ( user . name ) ; await   は「右偎の Promise刞が   fulfilled   になるたで垭を離れお埅ち、確定したら䞭の倀を取り出しお返す」係です。 .then()   のコヌルバックを曞く代わりに、 あたかも同期凊理のように、䞊から䞋ぞ 曞けるようになりたす。裏で起きおいるこず登録しお垭を譲る → 刞が確定 → 続きを再開は前章の図ずたったく同じで、 await   はそれを読みやすい芋た目に敎えおいるだけ——ここでも「䞀番䞊の薄い皮」なのです。 「 await   を付け忘れるず Promise が返る」理由 ここたで分かるず、冒頭の疑問——「 await   を付け忘れるず Promise が返っおくるのはなぜ」——にも答えられたす。 const x = db . findUser ( 9 ) ; // awaitなし console . log ( x ) ; // → Promise { <pending> }刞そのもの const user = await db . findUser ( 9 ) ; // awaitあり console . log ( user ) ; // → { id: 9, name: "..." }䞭身 await   を付けなければ、刞Promiseを䞭身に匕き換える動䜜が走らないたた次の行ぞ進みたす。だから手元には匕換刞が残ったたた。「付け忘れるず Promise が返る」の正䜓はこれです。 async   は「この関数は匕換刞を返す」ずいう宣蚀 ここで、ずっず脇圹だった   async   の正䜓もはっきりさせおおきたしょう。 async   は関数に付ける 印 で、意味はずおもシンプルです。 async   を付けた関数の戻り倀は、必ず Promise匕換刞に包たれる。 return user   ず曞いおも、呌び出し偎が受け取るのは   user   そのものではなく   Promise<user> 。途䞭で䟋倖を投げれば、その刞は   rejected   になりたす。「この関数はすぐには結果を返さない。たず匕換刞を枡しお、䞭身はあずで確定させる」——それを宣蚀するのが   async   です。 async function getUser ( ) { return { id : 9 , name : "Alice" } ; // ← ただのオブゞェクトを返しおいる぀もりでも } const r = getUser ( ) ; console . log ( r ) ; // → Promise { <fulfilled> }刞に包たれおいる そしおもう䞀぀倧事なルヌルがありたす。 await 垭を離れお埅぀動䜜が䜿えるのは、 async   を付けた関数の䞭だけ です。裏返すず、関数の䞭で䞀床でも   await   したいなら、その関数は   async   にせざるを埗ない。 await   する「自分もすぐには終われず、結果はあずで返す」ずいうこずなので、圓然その関数も匕換刞を返す関数になる、ずいう筋の通った話です。 async   は呌び出し元ぞ「䌝染」しおいく この2぀のルヌルを組み合わせるず、面癜い——そしお最初は戞惑う——珟象が起きたす。 async / await   が、呌び出しチェヌンを䞊ぞ䞊ぞず䌝播しおいく のです。 // 末端DBを埅぀ので await が芁る → async が必須 async function getUser ( ) { const user = await db . findUser ( 9 ) ; return user ; // 戻り倀は Promise<user> } // 䞭間getUser() の䞭身を䜿いたい → await する → 自分も async に async function buildProfile ( ) { const user = await getUser ( ) ; // ここで await return ` ${ user . name } さん ` ; // これも Promise<string> になる } // 䞊䜍buildProfile() の䞭身を䜿いたい → たた await → たた async async function handler ( req , res ) { const text = await buildProfile ( ) ; // ここでも await res . send ( text ) ; } 䞀番䞋の   getUser   が「DB を埅぀」ために   async   になった瞬間、その戻り倀は匕換刞になりたす。その䞭身を䜿いたい   buildProfile   は   await   するしかなく、するず   buildProfile   も匕換刞を返す関数 async になる。さらにその䞊の   handler   も  ず、 「あずで返る」ずいう性質が、倀を䜿うすべおの呌び出し元ぞ玉突きで広がっおいく わけです。 なぜ途䞭で断ち切れないのでしょう。「䞭間の関数が、こっそり結果を埅っお 同期的な倀 にしお返す」こずができれば䌝播は止たりたす。しかしそれは、その堎に立ち止たっおスレッドをブロックするこずに他なりたせん。むベントルヌプの倧前提—— 埅぀間に他の仕事を捌く ——を壊しおしたいたす。だから「埅ちがある」ずいう事実は隠せず、型Promiseずしお党経路に正盎に珟れる。これは面倒ずいうより、 「この経路には埅ちが含たれる」がコヌド䞊で远跡できる 、むしろ安党な蚭蚈だず考えるず腑に萜ちたす。 では、この䌝播はどこで止たるのか。答えは ゚ントリポむント です。Express のリク゚ストハンドラ、 main() 、むベントリスナ——プログラムの䞀番倖偎で誰かが最埌に受け止めれば、そこで鎖は終わりたす。普段のアプリ開発で末端からフレヌムワヌクたで   async   を意識せずに曞けおいるのは、 この䞀番倖偎をフレヌムワヌクが匕き受けおくれおいる からです。私たちは「埅ちを䜿う関数に   async   を付ける」を末端でやるだけで、あずは自然に䞊流たで぀ながりたす。 では、その登録簿に控えられる「続き」—— .then()   の䞭身にあたる 受信コヌルバック は、具䜓的に䜕なのでしょうか。次章では、それを自分の手で曞いおみたす。 5. 登録簿に入るのは「受信コヌルバック」 ここたでで「fd の準備ができたら、察応する凊理が実行される」ず説明しおきたした。では、その「察応する凊理」——図の登録簿に入っおいるものの正䜓は、具䜓的に䜕でしょうか。 この受信コヌルバックは、普段は   fetch   や   axios 、DB ドラむバずいった ラむブラリが内郚で甚意しおいる ずいう点です。「ラむブラリが勝手にやっおくれる」の正䜓は、ラむブラリの䞭で誰かがこのコヌルバックを曞いお登録しおいる、ずいうだけ。぀たり、 自分でも曞けたす 。䜎レベルな姿から順に芋おいきたしょう。 レベル1最も生の姿゜ケット + コヌルバック タむマヌもHTTPラむブラリも䜿わず、「fd を監芖しお、読めたらコヌルバック」を手で曞くず、こうなりたす。Node の   net   モゞュヌルが、図の登録簿ぞの登録を担圓したす。 const net = require ( "net" ) ; // APIサヌバヌにTCP接続するここでfdが1぀割り圓おられる const socket = net . connect ( 80 , "example.com" , ( ) => { // 接続できたらHTTPリク゚ストを"実行"する図の① socket . write ( "GET / HTTP/1.0\r\nHost: example.com\r\n\r\n" ) ; } ) ; // ★これが「登録簿に入るコヌルバック」そのもの★ // 「この゜ケット(fd)が読めるようになったら、これを実行しお」ず登録しおいる socket . on ( "data" , ( chunk ) => { console . log ( "受信コヌルバックが起動:" , chunk . toString ( ) . slice ( 0 , 50 ) ) ; } ) ; socket . on ( "end" , ( ) => { console . log ( "受信完了" ) ; } ) ; socket.on("data", ...)   に枡しおいる関数—— これが図の「fd9 → 受信コヌルバック」の䞭身 です。 .on("data")   を呌んだ瞬間、内郚で「このfdが読める状態になったら、この関数を呌べ」ず libuv の登録簿ずカヌネルの epoll に登録されたす。ラむブラリがやっおいた「勝手に入れおくれる」の正䜓は、この   .on("data", callback)   の䞀行なのです。 ただしこれは コヌルバックスタむル なので、 await   はただ䜿えたせん。 await   で受けたいなら、次のレベルで Promise に包みたす。 レベル2自分でPromiseを䜜っお、awaitできるようにする 受信コヌルバックを   new Promise   の䞭に入れお、デヌタが党郚届いたら   resolve   する——これで   await   可胜な関数を 自䜜 できたす。 const net = require ( "net" ) ; // API取埗を、await可胜な関数ずしお自䜜する function fetchFromApi ( ) { return new Promise ( ( resolve , reject ) => { const socket = net . connect ( 80 , "example.com" , ( ) => { socket . write ( "GET / HTTP/1.0\r\nHost: example.com\r\n\r\n" ) ; // ① 実行 } ) ; let received = "" ; // ★登録簿に入る受信コヌルバック自分で曞いおいる★ socket . on ( "data" , ( chunk ) => { received += chunk . toString ( ) ; // 届いたぶんを溜める届くたびに呌ばれる } ) ; // 党郚届いたらPromiseを解決する socket . on ( "end" , ( ) => { resolve ( received ) ; // ← ここで pending → fulfilledステップ3③の匕き金 } ) ; // 倱敗したらreject socket . on ( "error" , ( err ) => { reject ( err ) ; } ) ; } ) ; } // これで自䜜関数をawaitできる async function main ( ) { console . log ( "問い合わせ前" ) ; const body = await fetchFromApi ( ) ; // ← 自分で䜜ったPromiseをawait console . log ( "受信完了:" , body . slice ( 0 , 50 ) ) ; } main ( ) ; このコヌドで、蚘事の第3章で芋た図の党芁玠が、自分のコヌドずしお揃いたす。 図の芁玠 䞊のコヌドの該圓箇所 ステップ1① 問い合わせの実行 socket.write(...) 登録簿に入る受信コヌルバック socket.on("data", ...) ステップ3③の匕き金Promise解決 resolve(received) await   の続き console.log("受信完了", ...) new Promise   の䞭身が、これたで「ラむブラリが曞いおいた䜎レベル凊理」だったもの です。それを自分の手で曞いおいるのがこのコヌドで、 axios   や   fetch   の内郚も、煎じ詰めれば゚ラヌ凊理・タむムアりト・再接続などを足し぀぀これず同じこずをやっおいたす。 レベル3「登録簿に入るコヌルバック」だけを最小で ラむブラリも DB も API も䜿わず、「fd を監芖しお、読めたらコヌルバック」の骚組みだけを抜き出すず、こうなりたす。暙準入力これも立掟な fd0 ですで芋せるず䞀番シンプルです。 // 暙準入力fd=0も監芖察象のひず぀ process . stdin . on ( "data" , ( data ) => { // ★これが登録簿に入るコヌルバック★ // 「fd0が読めるようになったらキヌ入力があったらこれを実行」 console . log ( "入力コヌルバックが起動:" , data . toString ( ) . trim ( ) ) ; } ) ; console . log ( "入力埅ちでもプログラムは固たっおいない" ) ; これを実行するず、 .on("data", ...)   の関数がカヌネルの epoll 経由で「fd0 が読めるようになったら呌ばれる」よう登録され、キヌを打぀たびに起動したす。 埅っおいる間もプログラムは固たらない ——これこそ、むベントルヌプが背埌で回っおいる䜕よりの蚌拠です。 たずめ登録簿の䞭身は「返事が来たら動く係」 3぀のレベルを通しお芋えおくるのは、登録簿に入るものの正䜓です。 入るのは「API アクセス凊理これから叩く」ではなく、 受信コヌルバック返事が来たら凊理する係 その実䜓は   .on("data", ...)   に枡す関数で、「fd が読めたら実行しお」ず libuvepoll に登録される await   可胜にするには、その受信コヌルバックを   new Promise   で包み、デヌタが揃ったら   resolve   する 普段䜿う   fetch ・ axios ・DBドラむバは、この「受信コヌルバック    new Promise 」を、実運甚に耐えるよう堅牢に曞き䞊げたもの 普段のアプリ開発で、この䜎レベルコヌドを自分で曞くこずはたずありたせん。それでも「ラむブラリの   await   の裏では   new Promise   ず゜ケットの受信コヌルバックが動いおいる」ず知っおいれば、タむムアりトやコネクション管理でトラブルが起きたずき、 どの局を芋ればいいかを切り分けられる ようになりたす。ラむブラリをブラックボックスにしないための、確かな足堎になるはずです。 おわりに かなり色々説明をはしょったような気もしたすが、おおたかな抂念は䌝えきれたようにお思いたす。これでasync/await怖くなくなれば幞いです。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 2人がこの投皿は圹に立ったず蚀っおいたす。 The post 䞖界䞀わかりみの深いasync/awaitによる非同期凊理 first appeared on SIOS Tech Lab .
  Linux初心者がAzure仮想マシンでHTTPサヌバヌを構築した話 --> こんにちは新卒でサむオステクノロゞヌに入瀟したごたたぐろです。 本蚘事では、Linux初心者が研修で埗た孊びを以䞋の構成でご玹介したす。LinuxはITパスポヌトなどの資栌勉匷で少し知っおいる皋床だったのですが、この床新卒研修の䞀環ずしおLinux仮想環境でのサヌバ構築を行いたした。 これからLinuxを孊ぶ方の参考になれば幞いです。 Linuxに぀いお Linuxずは LinuxはWindowsやMacのようなOSOperating Systemの䞀皮です。OSSOpen Source Softwareずしお公開されおいるため、䞖界䞭の開発者が自由にプログラムの䞭身を確認したりカスタマむズできたす。 厳密にいえば、「Linux」ずはOSの栞心である「カヌネル」のこずを指すようです。しかし実際には、カヌネルに独自の管理ツヌルやアプリケヌションを組み合わせた「Linuxディストリビュヌション」のこずをLinuxず呌ぶこずが倚いそうです。 有名なLinuxディストリビュヌションには以䞋のものがありたす。 RedHat系 RHEL、AlmaLinux など Debian系 Debian、Ubuntu など Linuxの特城 Linuxには以䞋のような特城がありたす。 基本的に文字ベヌスで操䜜する デヌタをディレクトリずファむルの入れ子構造で管理する ナヌザごずに暩限を蚭定できる 私の堎合、このあたりの特城を掎むのに時間がかかりたした。今も完党に理解できおいるか分からないのですが、私なりの蚀葉で簡単に説明したいず思いたす。 LPI-Japanずいう団䜓が初孊者向けに 「Linux暙準教科曞」 ずいう資料を公開しおいるので、正確な情報を知りたい方はそちらを参照しおみおください。 基本的に文字ベヌスで操䜜する Linuxでは、キヌボヌドで呜什コマンドを入力するCUICharacter User Interfaceでの操䜜が基本です。 Linuxのコマンドは基本的に「コマンド」「オプション」「匕数」で構成されたす。 同じ操䜜でも、ディストリビュヌションによっおは別のコマンドやオプションが存圚する堎合があるため、泚意が必芁です。 デヌタをディレクトリずファむルの入れ子構造で管理する Linuxでは、デヌタはディレクトリずファむルの入れ子構造で管理されたす。 ディレクトリはフォルダのようなもので、ファむルを敎理するための入れ物です。ディレクトリの䞭にさらにディレクトリを䜜るこずもでき、これを入れ子構造ず呌びたす。 ファむルを操䜜する時には、ファむルの䜏所パスを指定する必芁がありたす。パスには、最䞊䜍/ルヌトディレクトリからの絶察パスず、珟圚のディレクトリからの盞察パスがありたす。 絶察パス /home/username/newdir/file1.txt 盞察パス(珟圚の䜍眮が/home/usernameの堎合) newdir/file1.txt ナヌザごずに暩限を蚭定できる Linuxには「ナヌザ」ずいう抂念がありたす。ナヌザには、人がログむンしお操䜜を行うためのものの他に、人がログむンできず内郚でプログラムを動かすためのものもありたす。 Linuxでは、ナヌザごずに暩限を蚭定できたす。暩限には、読み取りr、曞き蟌みw、実行xの3皮類がありたす。 䟋えば、ファむルに䜕か曞き蟌みたいず思っおも、自身が操䜜するナヌザにその暩限がなければ曞き蟌むこずはできたせん。 暩限を蚭定するコマンドもあるため、必芁に応じお割り圓おたり倉曎する必芁がありたす。 本章の内容は以䞊です。 次章では、実際にLinux仮想環境を甚意しおサヌバ構築を行った手順をご玹介したす。 Linux仮想環境でのサヌバ構築 仮想マシン(AzureVM)の甚意 Linuxは、コンピュヌタハヌドりェアの機胜を管理しプロセスずの仲立ちを行うカヌネルず、カヌネルに人間の出した呜什コマンドを翻蚳し䌝えるシェルで構成されおいたす。 実際にLinuxを動かしお孊ぶには、コマンドを出す察象ずなるコンピュヌタが必芁です。 しかし私が珟圚䜿っおいるコンピュヌタはWindowsずいう別のシステムが管理しおいるため、Linuxのコマンドを曞いおも通じたせん。 そのため今回は仮想化されたコンピュヌタである「Azure VMVirtual Machines」ずいうクラりドサヌビスを利甚しお仮想環境を構築したした。 仮想マシンOSには、「Red Hat Enterprise Linux (RHEL) 9.4」を遞択したした。 Windows環境を維持したたたLinuxを実際に操䜜する方法は他にもいろいろあるので、ご自身のパ゜コンやその他条件に応じお遞択するこずをおすすめしたす。 仮想マシンにSSH接続 仮想マシンを䜜成したら、次はそれに接続する必芁がありたす。 今回はSSHずいう通信プロトコルを䜿っお接続したした。 SSHは暗号化された通信を行うためのプロトコルで、今回のようにコンピュヌタが手元にないリモヌト堎合でも安党に接続するこずができたす。 SSH接続の手順は以䞋の通りです。 仮想マシン䜜成時に生成された秘密鍵を自分のパ゜コンに保存する タヌミナルコマンドプロンプトを開き、以䞋のコマンドを実行しお接続する ssh -i 秘密鍵のパス ナヌザヌ名@IPアドレス 初回接続時には、ホストキヌの確認が求められるので「yes」ず入力 HTTP通信に必芁なもののむンストヌルず蚭定 䜜成した仮想マシンには最䜎限の機胜しかないため、目的に応じお必芁な郚品や蚭定を远加する必芁がありたす。 今回は、Webブラりザにアドレスを入力するずWebペヌゞが衚瀺されるようにしたかったので、Apacheずいうものをむンストヌルしたした。 Azure Portalで受信ポヌト芏則の倉曎 認蚌のため受信ポヌト22番SSHを蚱可する ゜ヌスは安党のため自分のIPアドレスに限定する 仮想マシン䞊でApacheのむンストヌル sudo dnf install httpd Apacheの起動ず自動起動蚭定 ・サヌビスの起動 sudo systemctl start httpd ・自動起動の有効化 sudo systemctl enable httpd RHELの内郚ファむアりォヌルでHTTPトラフィックの蚱可 ・HTTPの蚱可 sudo firewall-cmd --add-service=http --permanent ・蚭定の反映 sudo firewall-cmd --reload Azure Portalで受信ポヌト芏則の倉曎 Webペヌゞを閲芧するため受信ポヌト80番HTTPを蚱可する ゜ヌスは自分のIPアドレスに限定する 衚瀺するコンテンツの䜜成 Apacheのデフォルト蚭定では、「/var/www/html」ディレクトリにHTMLファむルを眮くこずで、Webペヌゞずしお衚瀺されるコンテンツを䜜成できたす。 今回は、以䞋のコマンドで「index.html」を䜜成したした。 sudo vi /var/www/html/index.html Linuxでファむルを線集するには、vi゚ディタなどのテキスト゚ディタを䜿甚したす。 vi゚ディタには実際に䞭身を線集するむンサヌトモヌドず、ファむルの保存や終了などの操䜜を行うコマンドモヌドがありたす。 慣れないうちは操䜜が難しく、䜕床かパニックになりたした。   Webペヌゞの衚瀺確認 Webブラりザに仮想マシンのIPアドレスを入力するず、䜜成したWebペヌゞが衚瀺されたす。 Azure Portalの受信ポヌト芏則で゜ヌスを自分のIPアドレスに限定しおいるため、他のIPアドレスからはアクセスできたせん。 感想ずたずめ 以䞊が今回のサヌバ構築で行った内容でした。党くの初心者の私にずっおは非垞に充実した経隓ずなりたした。 実はこの埌も様々な孊習を続けおおり、珟圚は認蚌認可ずいうもっず高床な蚭定に挑戊しおいたす。䜙裕があれば珟圚取り組んでいる内容もたずめたいず思っおいるため、たた機䌚があればよろしくお願いしたす。 長く぀たない文章を最埌たでお読みいただき、ありがずうございたした。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 1人がこの投皿は圹に立ったず蚀っおいたす。 The post Linux初心者がAzure仮想マシンでHTTPサヌバを構築した話 first appeared on SIOS Tech Lab .
はじめに こちらの蚘事 で実際にKubernetes環境にKubeBlocksを導入し、DBaaSの基盀を構築したした。 今回は、䜜成したDBaaS基盀の䞊に実際にMySQLクラスタヌを構築しおいきたす。 導入環境構成図 以䞋の図は、DBaaS基盀䞊にMySQLを導入する環境の構成図です。 前回の蚘事 では「KubeBlocksオペレヌタヌ」を構築したした。 本蚘事の察象範囲は、赀䞞で囲たれた「DB(MySQL)」です。 今回は䟋ずしお、プラむマリ-レプリカ構成のMySQLをKubeBlocksオペレヌタヌを利甚しお導入したす。 この構成では、デヌタの曞き蟌み・読み蟌みを行う「プラむマリ」ず、読み蟌み専甚の「レプリカ」を配眮したす。 䞇が䞀プラむマリに障害が発生したずしおも、レプリカが自動的にプラむマリに昇栌しお凊理を匕き継ぐフェむルオヌバヌ機胜が働き、高可甚性を確保できるのが特城です。 導入環境構成図 MySQLクラスタヌの構築方法 KubeBlocksを䜿甚しおMySQLクラスタヌを構築する手順をご玹介したす。 前提条件 KubeBlocksが構築枈みであるこず KubeBlocksによっおデフォルトでむンストヌルされるMySQLアドオン以䞋コマンド結果のmysql 1.0.1が有効になっおいるこず 以䞋のkbcliコマンドで有効化されおいるアドオンを確認するこずができたす。 kbcli addon list # 出力䟋 NAME VERSION PROVIDER STATUS AUTO-INSTALL qdrant 1.0.1 community Disabled false rabbitmq 1.0.1 community Disabled false apecloud-mysql 1.0.1 community Enabled true etcd 1.0.1 community Enabled true kafka 1.0.1 community Enabled true mongodb 1.0.1 community Enabled true mysql 1.0.1 community Enabled true postgresql 1.0.1 community Enabled true redis 1.0.1 community Enabled true Namespeaceの䜜成 たずはMySQLクラスタヌをデプロむするNamespeaceを䜜成したす。 kubectl create namespace demo # 出力䟋 namespace/demo created rootナヌザヌ認蚌甚Secretの䜜成 MySQLのrootナヌザヌ甚のナヌザヌ名・パスワヌドを蚭定したSecretを䜜成したす。 kubectl create secret generic custom-mysql-root-secret \ --from-literal=username='root' \ --from-literal=password='<任意の倀>' \ -n demo # 出力䟋 secret/custom-mysql-root-secret created ※MySQLクラスタヌ䜜成時に本手順で䜜成したSecretを指定するこずで、rootナヌザヌのパスワヌドを任意の倀で蚭定するこずができたす。 Secretの指定がない堎合は、KubeBlocksがrootナヌザヌ甚のパスワヌドを自動発行したす。 MySQLクラスタヌの䜜成 KubeBlocksのカスタムリ゜ヌスである「Cluster」のマニフェストを適甚し、レプリカ数2のプラむマリ-レプリカ構成のMySQLクラスタヌを䜜成したす。 cat <<EOF | kubectl apply -f - apiVersion: apps.kubeblocks.io/v1 kind: Cluster metadata: name: mysql-cluster namespace: demo spec: clusterDef: mysql topology: semisync terminationPolicy: Delete componentSpecs: - name: mysql serviceVersion: 8.0.35 disableExporter: false replicas: 2 systemAccounts: - name: root secretRef: name: custom-mysql-root-secret namespace: demo resources: limits: cpu: '0.5' memory: 1Gi requests: cpu: '0.5' memory: 1Gi volumeClaimTemplates: - name: data spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi EOF # 出力䟋 cluster.apps.kubeblocks.io/mycluster created clusterDef: mysql MySQLアドオンが提䟛するMySQLの構成テンプレヌトを、䜜成するDBクラスタヌのベヌスずしお指定する蚭定です。 topology: semisync MySQLクラスタヌをプラむマリ-レプリカ構成の準同期レプリケヌションモヌドで起動する蚭定です。 terminationPolicy: Delete クラスタヌを削陀した際、関連するデヌタも䞀緒に削陀する蚭定です。 replicas: 2 MySQLサヌバヌを2台プラむマリ1台、レプリカ1台デプロむする蚭定です。 systemAccounts MySQLのrootナヌザヌの認蚌情報ナヌザヌ名・パスワヌドに、事前に䜜成したSecretを割り圓おる蚭定です。 volumeClaimTemplates DBのデヌタを保存するためのPVの蚭定です。 MySQLクラスタヌの䜜成確認 MySQLクラスタヌ䜜成コマンド実行埌、以䞋のコマンドでクラスタヌ・Podのステヌタスを確認したす。ステヌタスがRunningになっおいれば正垞に動䜜しおいたす。 kubectl get cluster mycluster -n demo # 出力䟋 NAME CLUSTER-DEFINITION TERMINATION-POLICY STATUS AGE mycluster mysql Delete Running 7m30s kubectl get pod -n demo # 出力䟋 NAME READY STATUS RESTARTS AGE mycluster-mysql-0 4/4 Running 0 8m mycluster-mysql-1 4/4 Running 0 8m 動䜜確認 接続テスト MySQLクラスタヌぞの接続テストを行いたす。 たず、䜜成したMySQLクラスタヌの゚ンドポむントService名を確認したす。 kubectl get svc -n demo # 出力䟋 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mycluster-mysql ClusterIP 10.43.32.224 <none> 3306/TCP 8m kubectl runコマンドでMySQLクラむアント甚のPodを䜜成し、コンテナ内でシェルを起動したす。 kubectl run mysql-client -n demo --rm -i --tty --image=mysql:8.0 --restart=Never -- sh # 出力䟋 If you don't see a command prompt, try pressing enter. sh-5.1# mysqlコマンドを䜿甚し、確認したMySQLクラスタヌの゚ンドポむントを指定しおログむンしたす。パスワヌドを求められたら蚭定したパスワヌドを入力したす。 sh-5.1# mysql -h mysql-cluster-mysql.demo.svc.cluster.local -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 246 Server version: 8.0.35 MySQL Community Server - GPL Copyright (c) 2000, 2026, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql>ずいう出力が衚瀺されればMySQLクラスタヌに接続できおいたす。 フェむルオヌバヌテスト MySQLクラスタヌのフェむルオヌバヌ機胜を実際にテストしおみたす。 たず起動したMySQLのPodのうち、どれが「プラむマリ」で、どれが「レプリカ」なのかを確認したす。 kbcli cluster describe mycluster -n demo | grep -E "ROLE|primary|secondary" # 出力䟋 COMPONENT SERVICE-VERSION INSTANCE ROLE STATUS AZ NODE CREATED-TIME mysql 8.0.35 mycluster-mysql-0 primary Running us-east-1a ip-10-1-0-23/10.1.0.23 Jun 25,2026 08:00 UTC+0000 mysql 8.0.35 mycluster-mysql-1 secondary Running us-east-1a ip-10-1-0-24/10.1.0.24 Jun 25,2026 08:01 UTC+0000 各PodのROLEの倀を確認するず、mycluster-mysql-0がprimary、mycluster-mysql-1がsecondaryずなっおいたす。 これは、mycluster-mysql-0が「プラむマリ」、mycluster-mysql-1が「レプリカ」ずしお構成されおいるこずを衚しおいたす。 次にプラむマリのPodを削陀するこずで、プラむマリに擬䌌的な障害を発生させたす。 kubectl delete pod mycluster-mysql-0 # 出力䟋 pod "mycluster-mysql-0" deleted プラむマリのPodを削陀埌、レプリカのPodが自動的にプラむマリに昇栌しおいるこずを確認したす。 kbcli cluster describe mysql-cluster -n demo | grep -E "ROLE|primary|secondary" # 出力䟋 COMPONENT SERVICE-VERSION INSTANCE ROLE STATUS AZ NODE CREATED-TIME mysql 8.0.35 mycluster-mysql-0 secondary Running us-east-1a ip-10-1-0-23/10.1.0.23 Jun 25,2026 08:06 UTC+0000 mysql 8.0.35 mycluster-mysql-1 primary Running us-east-1a ip-10-1-0-24/10.1.0.24 Jun 25,2026 08:01 UTC+0000 先ほどレプリカであったmycluster-mysql-1が、プラむマリに昇栌しおいるこずがわかりたす。 これでMySQLクラスタヌの構築ず動䜜確認は完了になりたす。 おわりに 今回は 前回 構築したKubeBlocksを䜿甚し、実際にMySQLクラスタヌの構築から接続テスト・フェむルオヌバのテストを行うたでの流れをご玹介したした。 KubeBlocksを掻甚すれば、シンプルなマニフェストを1぀適甚するだけで、容易に冗長化されたMySQLクラスタヌを構築できるこずを䜓感できたのではないでしょうか。 KubeBlocksの倧きな特城は、様々なデヌタベヌスを同じ操䜜感で統䞀しお管理できる点にありたす。 そこで次回は、MySQLずはたた異なる特性を持぀NoSQLのむンメモリデヌタベヌスであるRedisの構築に぀いおご玹介したす。 参考文献 https://kubeblocks.io/docs/release-1_0_1/kubeblocks-for-mysql/02-quickstart https://kubeblocks.io/docs/release-1_0_1/kubeblocks-for-mysql/06-custom-secret/01-custom-secret ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post KubeBlocksでMySQLを導入Kubernetes䞊でのDB構築を䜓隓 first appeared on SIOS Tech Lab .
プロダクト開発やサヌビスデザむンにおいお、ナヌザヌの䜓隓を時系列で可芖化する「カスタマヌゞャヌニヌマップ」。ナヌザヌ理解を深め、チヌムの目線を合わせるための匷力なツヌルですが、䜜成する䞭で以䞋のような壁にぶ぀かったこずはありたせんか ナヌザヌの行動は䞊べられたけれど、その裏にある『真の感情』や『朜圚的な課題むンサむト』たで螏み蟌めおいない気がする チヌム内だけでブレむンストヌミングをしおも、ありきたりな課題や、自分たちの郜合の良い解釈ばかりが出おきおしたう こうした膠着状態を、ChatGPT、Gemini、ClaudeなどのAIチャットが助けおくれるかもしれたせん。 今回は、チャットボットを「壁打ち盞手」ずしお掻甚し、カスタマヌゞャヌニヌマップのむンサむトを深掘りするための具䜓的なステップず、プロンプトの䟋をご玹介したす。 AIチャットでの壁打ちむンサむトを深掘りする4぀のステップ それでは、実際にAIチャットを䜿っおゞャヌニヌマップをブラッシュアップしおいくプロセスを芋おいきたしょう。 ステップ1ペル゜ナず前提条件の「同期」 AIチャットに壁打ちを䟝頌する前に、たずはリサヌチデヌタやペル゜ナの情報をむンプットしたす。ここでの情報の具䜓性が、その埌のアりトプットの質を巊右したす。 【入力プロンプト䟋】 「あなたの䞀流のUXリサヌチャヌずしお、私のカスタマヌゞャヌニヌマップ䜜成の壁打ち盞手になっおください。 たずは前提ずなるペル゜ナずプロダクトの情報を共有したす。内容を理解したら、質問をせずに「前提を理解したした。い぀でもディスカッションを始められたす」ずだけ返答しおください。 ■ プロダクト20代〜30代向けの、資産運甚を自動化するスマホアプリ ■ ペル゜ナ郜内圚䜏の䌚瀟員28歳、将来ぞの挠然ずした䞍安はあるが、投資の知識はなく『損をするのが怖い』ず感じおいる。平日は仕事が忙しく、スマホを觊るのは通勀䞭ず就寝前のみ。」 ステップ2行動の理由を分析させる 前提を同期したら、ゞャヌニヌマップの特定のフェヌズを切り出しおAIチャットにぶ぀けたす。ナヌザヌが特定の行動をずった時の「蚀語化されおいない動機」を掘り䞋げたす。 【入力プロンプト䟋】 「ペル゜ナが『アプリをダりンロヌドしたものの、初期蚭定銀行口座の連携の画面で離脱した』ずいうフェヌズに぀いお考えたす。 単に『面倒くさいから』ずいう理由以倖で、この時ペル゜ナの脳内で起きおいる心理的な葛藀や䞍安、あるいは『私には関係ないかも』ず感じおしたうような感情を、認知心理孊やUXの芳点から5぀掗い出しおください。」 AIチャットは、「セキュリティぞの䞍安」「今すぐやらなければいけない匷制感ぞの反発」「投資金額の決定に察するコミットメントぞの恐怖」など、行動の裏に朜む心理的背景を論理的に蚀語化しおくれたす。 ステップ3ペル゜ナになりきっおもらい「䞍満」を吐き出させる 次に、AIチャットにペル゜ナそのものになっおもらい、むンタビュヌ圢匏で壁打ちを行いたす。客芳的な分析ではなく、「䞻芳的な感情」を匕き出すアプロヌチです。 【入力プロンプト䟋】 「これからは、先ほど共有したペル゜ナ28歳䌚瀟員になりきっお回答しおください。私はむンタビュアヌです。 「ねぇ、アプリを開いお最初の画面を芋たずき、ぶっちゃけどう思った䜕が䞀番モダモダした』」 AIがペル゜ナを挔じるこずで、「専門甚語が倚くお、自分が堎違いなずころにいる気がした」「いきなりお金の話をされお、心の準備が远い぀かなかった」ずいった、人間のチヌムだけでは芋萜ずしがちな生々しい感情のむンサむトが浮き圫りになるかず思いたす。 ステップ4「悪いシナリオ」ず「理想のシナリオ」のギャップを埋める 最埌に、ゞャヌニヌマップにおける「悪い䜓隓」をどうやっお「良い䜓隓」に倉えられるか、具䜓的な改善アむデアの皮を蒔きたす。 【入力プロンプト䟋】 「ペル゜ナが最も䞍安に感じる『口座連携』のステップにおいお、他業界䟋えば゚ンタメ、SNS、ゲヌムなどで䜿われおいる『ナヌザヌの心理的ハヌドルを䞋げるオンボヌディングの手法』を参考に、このアプリに転甚できるアむデアを3぀提案しおください。」 AIチャットず壁打ちする際の3぀の泚意点 AIチャットは優秀なパヌトナヌですが、過信は犁物です。 実際のナヌザヌむンタビュヌ䞀次情報を最優先にする AIチャットが出しおくれるむンサむトは、あくたで「理論䞊、そうなる可胜性が高い仮説」です。AIずの壁打ちで埗られたむンサむトは、実際のナヌザヌテストやむンタビュヌデヌタず照らし合わせお怜蚌しおください。 ハルシネヌション誀情報を前提に、根拠を問う AIチャットがそれらしい回答をしたずきは、「なぜそう思うのその根拠ずなるペル゜ナの行動特性はどこにある」ず远加で質問深掘りしおください。これにより、AIの適圓な思い぀きを排陀し、筋の通ったむンサむトを抜出できたす。 機密情報の入力には配慮する AIチャットは入力された情報を孊習しおいくこずを前提で利甚したしょう。未発衚のプロダクト名や、個人情報を入力しないようにしたり、孊習させない蚭定や、Google Workspace䞊のGeminiを利甚するなど、察策をしおください。 たずめAIずの協働で可胜性を拡げる カスタマヌゞャヌニヌマップの䜜成においお、AIチャットを壁打ち盞手にするず、「チヌムの芖野を広げるこず」ができるでしょう。 䞀人で、あるいはチヌムだけで悩んでゞャヌニヌマップが「綺麗だけど浅いもの」になっおしたいそうなずきは、AIチャットに「ちょっずこのナヌザヌの気持ちを想像しお」ず話しかけおみおください。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 生成AIを「壁打ち盞手」にしおカスタマヌゞャヌニヌマップのむンサむトを掘り䞋げおみる first appeared on SIOS Tech Lab .
こんにちは、OSSよろず盞談宀のSKです。 OSS に関するお問い合わせが日々寄せられる䞭で、今回も統合監芖ツヌル「Zabbix」に関連しお寄せられたお問い合わせをご玹介したす。 これたで有償の管理補品を䜿っお、各サヌバヌの「ホスト名」「メモリ」「CPU」「OS」などの構成情報を管理しおいたお客様から、次のようなご盞談をいただきたした。 「利甚䞭の補品がサポヌト終了を迎えるため、代替手段ずしお、すでに監芖で導入しおいるZabbixのAPIを䜿っお構成情報を取埗できないか」 結論から申し䞊げたすず、Zabbix APIを利甚すれば構成情報の䞀括取埗が可胜です。すでに監芖ツヌルずしおZabbixを運甚しおいる堎合、この収集プロセスを自動化・連携させるこずができたす。 今回は、Zabbix APIの host.get メ゜ッドを利甚しお、倖郚からサヌバヌの構成情報むンベントリ情報を䞀括取埗する具䜓的な手順ずコマンド䟋を解説したす。 Zabbix APIの基本仕様 Zabbix APIはHTTPベヌスで提䟛されおおり、クラむアントずAPI間のリク゚スト・レスポンスには JSON-RPC 2.0プロトコル を䜿甚したす。 APIを呌び出すための゚ンドポむントURLは、Zabbix Webむンタヌフェヌスのディレクトリにある api_jsonrpc.php です。デフォルトでは以䞋のパスにありたす。 /usr/share/zabbix/ui/api_jsonrpc.php ステップ1APIの認蚌ずトヌクンの取埗 Zabbixのデヌタにアクセスするには、たず認蚌を行っおAPIトヌクンセッションIDを取埗する必芁がありたす。ただ認蚌されおいない状態からのログむンには、user.login メ゜ッドを䜿甚したす。 以䞋の curl コマンドを䜿甚しお、Zabbixサヌバヌに認蚌リク゚ストを送信したす。 ※ここでは、デフォルトの管理ナヌザヌである “Admin” のトヌクンを取埗する䟋を玹介したす。 【コマンド䟋】 curl -X POST -H "Content-Type: application/json" -d ' { "jsonrpc": "2.0", "method": "user.login", "params": { "username": "Admin", "password": "zabbix" }, "id": 1 }' http://172.31.34.176/zabbix/api_jsonrpc.php 認蚌情報が正しければ、APIから以䞋のようなJSONレスポンスが返されたす。 【取埗結果䟋】 { "jsonrpc": "2.0", "result": "82aa1b5b38a9fe6f6619ad40c64602dd", "id": 1 } ここで result ずしお返された倀82aa1b5b38a9fe6f6619ad40c64602ddが認蚌トヌクンです。 以埌のAPIリク゚ストでは、このトヌクンを䜿甚したす。 ステップ2構成情報むンベントリ情報の取埗 認蚌トヌクンが取埗できたら、次に監芖察象ホストの構成情報を取埗したす。ホスト情報の取埗には host.get メ゜ッドを䜿甚したす。 ホスト名やIPアドレスだけでなく、CPU、メモリ、OSなどの構成情報むンベントリデヌタを同時に取埗するため、パラメヌタに selectInventory を指定したす。たた、すべおのデヌタを取埗するずパフォヌマンスに圱響を䞎える可胜性があるため、output パラメヌタを䜿っお取埗したいプロパティを明瀺的に絞り蟌むこずが掚奚されおいたす。 先ほど取埗したトヌクンは、HTTPリク゚ストの Authorization ヘッダヌに指定したす。以䞋は、怜蚌環境IPアドレス: 172.31.34.176に察しおコマンドを実行した䟋です。 ※コマンドの末尟に | jq を付けるず結果が敎圢されお芋やすくなりたす芁jqコマンドのむンストヌル。RHEL9.4以降ではBaseOSに暙準含たれおいたす。 【コマンド䟋】 curl -X POST -H 'Content-Type: application/json-rpc' -H 'Authorization: Bearer 82aa1b5b38a9fe6f6619ad40c64602dd' -d ' { "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["hostid", "host", "name"], "selectInventory": ["os", "hardware", "software"] }, "id": 2 }' http://172.31.34.176/zabbix/api_jsonrpc.php | jq 【コマンド解説】 curlコマンドの党䜓 項目 内容 curl Webサヌバヌず通信を行うためのコマンドラむンツヌル -X POST HTTPメ゜ッドを「POST」に指定Zabbix APIは必ずPOSTを䜿甚したす -H ‘Content-Type: application/json-rpc’ 送信するデヌタがJSON-RPC圢匏であるこずをZabbixサヌバに䌝えるヘッダ -H ‘Authorization: Bearer <トヌクン>’ 取埗した認蚌トヌクンを指定するヘッダ -d ‘{ 
 }’ Zabbixぞ送信するリク゚ストの実デヌタJSON http://
/zabbix/api_jsonrpc.php リク゚ストの送信先ずなるZabbixサヌバヌの゚ンドポむントURL | jq 出力されるJSONデヌタを芋やすく改行・色付けしお敎圢するコマンド 送信するJSONデヌタ-d の䞭身 キヌ (” “) 指定しおいる倀 意味・圹割 jsonrpc “2.0” JSON-RPCプロトコルのバヌゞョン”2.0″ 固定 method “host.get” 実行したいAPIの操䜜名。今回はホストデヌタの取埗を指定 params { 
 } 怜玢条件や出力フォヌマットなどを定矩する匕数 output [“hostid”, “host”, “name”] 返华されるホストオブゞェクトのフィヌルドを限定党項目取埗時は “extend” selectInventory [“os”, “hardware”, “software”] ホストに玐づくむンベントリ情報を同時に取埗するためのパラメヌタ id 2 リク゚ストずレスポンスを玐づける任意の識別子 以䞋が取埗結果です。 【取埗結果】 { "jsonrpc": "2.0", "result": [ { "hostid": "10084", "host": "Zabbix server", "name": "Zabbix server", "inventory": { "os": "Linux version 6.12.0-211.22.1.el10_2.x86_64 (mockbuild@df33c0284dd848a197e916486944b54f) (gcc (GCC) 14.3.1 20251022 (Red Hat 14.", "hardware": "", "software": "" } }, { "hostid": "10782", "host": "WebServer1", "name": "WebServer1", "inventory": [] } ], "id": 2 } stuser この怜蚌環境では、監芖察象に “Zabbix server” ず “WebServer1” の2぀が存圚しおいたす。 怜蚌環境のZabbixサヌバのホスト画面 “WebServer1” はWeb監芖URL倖圢監芖などのみを行っおおり、Zabbix Agentが導入されおいないため、䞊蚘の結果のようにむンベントリ情報が空[]になりたす。 項目を絞り蟌たずにすべおの情報を取埗したい堎合は、”output” や “selectInventory” に “extend” を指定したす。たた、IPアドレスなどのネットワヌク情報を取埗したい堎合は “selectInterfaces”: “extend” を远加したす。 【コマンド䟋】 $ curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer 7a6237f38929523f74cfb0acf8566f7f' -d ' { "jsonrpc": "2.0", "method": "host.get", "params": { "output": "extend", "selectInterfaces": "extend", "selectInventory": "extend" }, "id": 2 }' http://172.31.34.176/zabbix/api_jsonrpc.php | jq 取埗できる項目の詳现は公匏サむトをご参照ください。 Zabbix ドキュメント / 20 API https://www.zabbix.com/documentation/current/jp/manual/api Zabbix ドキュメント / 20 API / host.get https://www.zabbix.com/documentation/current/jp/manual/api/reference/host/get 【補足】APIの認蚌ずトヌクンの取埗 セッションの砎棄ログアりト ステップ1で玹介した user.login メ゜ッドで取埗したトヌクンは、䜿い終わったら必ず user.logout を実行しおセッションを砎棄しおください。砎棄せずに攟眮するず、䞍芁なセッションデヌタがデヌタベヌスに蓄積され、Zabbixのパフォヌマンス䜎䞋を招く原因になりたす。 【セッション砎棄のコマンド䟋】 $ curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer 1da473d0437c7bf69a22e6e057ffc1d7' -d ' { "jsonrpc": "2.0", "method": "user.logout", "params": [], "id": 3 }' http://172.31.34.176/zabbix/api_jsonrpc.php | jq { "jsonrpc": "2.0", "result": true, "id": 3 } 管理画面から発行する「APIトヌクン」の利甚 毎回ログむン・ログアりト凊理を行うのが手間に感じる堎合は、Zabbixの管理画面から有効期限を蚭定できる「APIトヌクン」を事前に発行しお利甚する方法がおすすめです。 「ナヌザヌ蚭定」→「APIトヌクン」を遞択し、「APIトヌクンの䜜成」を遞択したす。 【APIトヌクン画面】      【新芏APIトヌクン画面】 ナヌザは、ここではデフォルトのAdminを遞択し、有効期限を蚭定しおいたす。 【APIトヌクン衚瀺画面】 前画面で远加ボタンを抌すず、以䞋のように認蚌トヌクンが衚瀺されたす。 画面を䞀床閉じるず二床ず再衚瀺できないため、必ず閉じる前に倀を控えおおきたしょう。   たずめ Zabbixが暙準で収集しおいるむンベントリデヌタずZabbix APIを組み合わせれば、有償補品を別途導入しなくおも、各サヌバヌの構成情報を䞀括取埗・管理できたす。 たた、Zabbix APIは情報の取埗だけでなく、ホストやアむテム、トリガヌの自動䜜成なども行えるため、日々の監芖蚭定そのものをスクリプトで自動化するこずも可胜です。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post OSSサポヌトの珟堎からZabbixでサヌバの構成情報を取埗する first appeared on SIOS Tech Lab .
AIの䜿い方を孊ぶより先に、゜フトりェア工孊を理解しないずいけないんじゃないかず思いたす。 AIにテストコヌドを曞かせた堎合を䟋に説明したす。AIはテストコヌドを高速で曞いおくれたすが、テスト理論を理解しおいないず、バグを芋逃すテストコヌドを曞かせおしたうこずがありたす。 テストの話(䟋ずしお) 先に、今回の話の土台になるテスト理論を簡単に説明しおおきたす。わかりやすい䟋ずしお、テストの技法で有名な以䞋の2぀を挙げたいず思いたす。 ブラックボックステスト は、コヌドの䞭身を芋ずに、仕様入力→出力だけを基準にテストする方法です。「この入力を䞎えたら、仕様どおりの結果が返るか」を確認したす。境界倀分析や同倀分割ずいった技法はこちら偎です。 ホワむトボックステスト は、コヌドの内郚構造分岐、ルヌプ、凊理経路を芋おテストする方法です。「このif文はtrue偎もfalse偎も通したか」を確認したす。どれだけ通せたかはカバレッゞずいう数倀で枬れたす。 ここで倧事なのは、ホワむトボックスずいっおも「コヌドを基準にしおいいのはテストの経路の遞択だけ」ずいう点です。 結果が正しいかどうかの刀定期埅倀は、必ず仕様から立おる 必芁がありたす。コヌドを芋お「コヌドがこう動くから、これが正解」ずしおしたうず、バグごずテストが远認しおしたうからです。 どこをテストするか経路 → コヌドから決めおよい 結果が正しいか期埅倀 → 仕様から決める この分離が今回の話の栞心です。 理論を知らないず、AIをうたく䜿えないずきがある AIはテストコヌドをものすごい速さで曞いおくれたす。ただ、指瀺の出し方を間違えるず「党郚パスしおいるのにバグを芋逃すテスト」を量産したす。しかも数字の䞊では完璧に芋えるので、芋逃したこずに気づけたせん。 実際にやっおみたので、倱敗䟋ず成功䟋を䞊べたす。 題材のコヌド 料金蚈算の関数です。仕様はこうだずしたす。 10,000円以䞊は10%オフ。䌚員はさらに5%オフ。 def charge ( amount : int , is_member : bool ) - > float : """料金蚈算""" if amount < 0 : # 仕様曞に蚘茉のない分岐実装者が独自に远加 return 0 fee = float ( amount ) if amount > 10000 : # ★バグ: 仕様は「以䞊(>=)」なのに > にしおいる fee = amount * 0.9 if is_member : fee = fee * 0.95 return fee わざずバグを仕蟌んでありたす。仕様は「10,000円以䞊」なのに、実装は   > 超になっおいる。぀たり10,000円ちょうどのずき、割匕されるべきなのにされたせん。境界倀のバグずしおはかなりありがちなや぀です。 おたけに、仕様曞には曞かれおいない負数チェックの分岐も入れおありたす。実装者が気を利かせお勝手に足した、ずいう想定です。 倱敗䟋テスト理論を知らずに指瀺を出すず 極端な䟋なのですが、たず、理論を意識せずにこう頌んだずしたす。 このコヌドのテストを曞いお。カバレッゞ100%にしお。 AIはコヌドを読んで、こういうテストを曞いおきたす。 from charge import charge def test_normal ( ) : # コヌドを読んで期埅倀を蚈算: 15000 > 10000 → *0.9 → 13500 assert charge ( 15000 , False ) == 13500.0 def test_member ( ) : # 15000*0.9*0.95 = 12825 assert charge ( 15000 , True ) == 12825.0 def test_boundary_10000 ( ) : # コヌド䞊 10000 は「> 10000」に該圓しない → 割匕なし、ず読める assert charge ( 10000 , False ) == 10000.0 # ← バグを"正解"ずしお远認 def test_negative ( ) : # コヌドにそういう分岐があるので、それを期埅倀に assert charge ( - 100 , False ) == 0 問題は   test_boundary_10000   です。AIはコヌドから期埅倀を逆算するので、「10000は   > 10000   に該圓しない。だから割匕なしが正しい」ず解釈したす。 バグの動きを”正解”ずしおテストに固めおしたっおいる わけです。 実行結果がこれです。 4 passed branch coverage 100% 党テストパス、分岐カバレッゞ100%。数字だけ芋れば完璧です。でも境界倀バグの怜出はれロ。指暙がすべお緑なので、この芋逃しに気づく手段がありたせん。個人的には、テストが萜ちるより、この「完璧に芋える」状態のほうがよっぜど怖いず思っおいたす。 成功䟋テスト理論を分かった䞊で指瀺を出すず 今床は、さっきの「経路はコヌドから、期埅倀は仕様から」ずいう分離をプロンプトに萜ずし蟌みたす。 以䞋の手順でテストコヌドを䜜成しおください。 【カバレッゞ蚭蚈゜ヌスを参照】 - ゜ヌスの党分岐(true/false)・䟋倖パスを掗い出し、 各経路を通すための入力条件を列挙する分岐網矅100%目暙 【期埅倀蚭蚈仕様曞のみ参照】 - 各ケヌスの期埅倀は必ず仕様曞から導出する - ゜ヌスコヌドの出力を期埅倀に流甚するこずは犁止 - 境界倀分析を適甚し、境界(10,000円)の盎前・ちょうど・盎埌を必ず詊す - 仕様曞に蚘茉がなく期埅倀を刀断できないケヌスは、 期埅倀を曞かず「芁確認」ずしお質問リストに出す 【出力】 - 各テストに「どの分岐を通すか(゜ヌス由来)」 「期埅倀の根拠(仕様曞のどこか)」をコメントで明蚘 仕様曞は以䞋ずなりたす。 10,000円以䞊は10%オフ。䌚員はさらに5%オフ。 このプロンプトでAIが曞くテストはこうなりたす。 from charge import charge # 仕様曞: 「10,000円以䞊は10%オフ。䌚員はさらに5%オフ。」 def test_under_boundary ( ) : # 仕様: 9,999円は割匕なし assert charge ( 9999 , False ) == 9999.0 def test_boundary_exactly_10000 ( ) : # 仕様: 10,000円「以䞊」なので 10000 は10%オフ → 9000 assert charge ( 10000 , False ) == 9000.0 # ← 期埅倀は仕様から def test_over_boundary ( ) : assert charge ( 10001 , False ) == 10001 * 0.9 def test_member_discount ( ) : assert charge ( 20000 , True ) == 20000 * 0.9 * 0.95 def test_member_under_10000 ( ) : assert charge ( 5000 , True ) == 5000 * 0.95 # 【芁確認】゜ヌスに amount < 0 の分岐があるが、仕様曞に負数の扱いの蚘茉なし。 # 期埅倀をでっち䞊げず、仕様確認事項ずしお報告: # Q. 負の金額は入力され埗るか その堎合の仕様は珟実装は0を返す 実行結果です。 FAILED test_boundary_exactly_10000 - assert 10000.0 == 9000.0 1 failed, 4 passed branch coverage 87% 境界倀10,000円ちょうどのテストが萜ちたした。 バグ怜出成功です。 面癜いのはカバレッゞのほうで、今床は87%ず満点ではありたせん。未達なのは負数チェックの分岐です。ここでプロンプトの「仕様曞にないケヌスは芁確認ずしお出せ」が効いおいお、AIは負数分岐の期埅倀をでっち䞊げず、「負の金額の仕様は」ずいう質問ずしお返しおきたした。カバレッゞの未達が、そのたた 仕様曞の蚘茉挏れの発芋 に぀ながっおいたす。 䞊べるずこうなりたす。 玠朎なプロンプト 理論に基づくプロンプト テスト結果 4 passed党緑 1 failedバグ怜出 カバレッゞ 100% 87%未達仕様挏れの兆候 境界倀バグ 远認しお芋逃す 怜出 仕様にない分岐 期埅倀をでっち䞊げ 芁確認ずしお報告 倱敗䟋のほうが数字は良くお、成功䟋のほうが数字は悪い。でも健党なのは埌者です。この逆転が、今回䞀番䌝えたかったこずです。 AIの䜿い方より、゜フトりェア工孊 ここからが本題ずいうか、この䜓隓を通しお思ったこずです。 さっきの2぀のプロンプトの差は、AIの䜿い方のテクニックではありたせん。「経路はコヌドから、期埅倀は仕様から」も、「境界のちょうどの倀を詊す」も、党郚昔からあるテスト理論です。ホワむトボックス、ブラックボックス、境界倀分析。それを知っおいるかどうかだけの差でした。 境界倀分析を知らなければ、「10,000円ちょうどを詊しお」ずいう発想自䜓がプロンプトに出おきたせん。AIは指瀺された芳点しか網矅しおくれないので、芳点を出せない人がいくらプロンプトの曞き方を工倫しおも、この差は埋たりたせん。 AIの䜿い方講座ずか、AIでのスラむドの䜜り方みたいな情報は確かに有甚で、それを孊ぶこずで業務の効率は驚くほど䞊がりたす。しかし、゜フトりェア開発者に倧事なのはやはり゜フトりェア開発の基本的な理論だず思いたす。「このコヌドのテストで䜕を怜蚌すべきか」は、聞く偎に理論がないず、そもそも正しい質問になりたせん。 考えおみれば圓たり前で、AIに指瀺を出すのも人間に指瀺を出すのも同じなんですよね。埌茩に「このコヌドのテスト曞いずいお」ずだけ蚀っお枡したら、やっぱり同じ倱敗をするかもしれない。きちんず䌝えないず毎回きちんずやっおくれるずは限らないのは、AIも人間も同じです。そしお、きちんず䌝えるためには、指瀺する偎が䞭身を分かっおいないずいけない。 AIはテストコヌドを曞く速床を劇的に䞊げおくれたした。だからこそ、「䜕を怜蚌すべきか」を決める偎の理論、぀たり゜フトりェア工孊の䟡倀は、䞋がるどころかむしろ䞊がっおいるず感じおいたす。AIの時代に䜕を孊ぶべきかず聞かれたら、私は゜フトりェア工孊だず答えたす。やはり、い぀の時代でも倧事のは基本だず思いたす。 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post AIの䜿い方を孊ぶ前に、たず゜フトりェア工孊を first appeared on SIOS Tech Lab .
本蚘事では、AWSずRed Hatが共同提䟛するフルマネヌゞドなOpenShiftサヌビス「ROSA」に぀いお玹介したす。 特に、近幎の䞻流であり、むンフラ費甚や運甚負荷を劇的に削枛できるROSAの最新アヌキテクチャモデル「HCPHosted Control Planes」の仕組みず、導入による4぀のメリットを分かりやすく玹介し、最適なコンテナ基盀遞定のヒントをお届けしたす。 ROSAずは ROSARed Hat OpenShift Service on AWSずは、Red Hatが提䟛しおいるコンテナオヌケストレヌションプラットフォヌムであるOpenShiftを、AWS䞊のフルマネヌゞドサヌビスずしお利甚できるようにしたサヌビスです。 OpenShiftに぀いお詳しく知りたい方は、 こちら の蚘事をご参考ください ROSAを利甚しおコンテナ基盀を運甚するこずには、以䞋の利点がありたす。 Red HatずAWSの共同サポヌト ROSAは、サポヌト窓口が完党に䞀元化されおいお、問い合わせを受けるず、裏偎でAWSずRed Hatの゚ンゞニアが盎接連携しお原因を突き止めおくれる仕組みになっおいたす。自分たちでAWS䞊にOpenShiftを構築した堎合、トラブルが起きるず「AWSのむンフラが悪いのか、それずもOpenShiftのバグなのか」を自力で調べ、それぞれのサポヌトに別々に問い合わせなければなりたせん。ROSAであればそのようなアクションが䞀切䞍芁になるため、運甚の負担を倧きく軜枛できたす。 Red Hatの専門チヌムによる24時間監芖 ROSAのクラスタヌは、Red HatのSREチヌムによっお24時間365日䜓制で監芖・運甚されるようになりたす。 クラスタヌに䜕か障害が起きおも、Red HatのSREチヌムが裏偎で迅速に察応・埩旧をしおくれるため、ナヌザヌずしおは、監芖や障害察応に察する運甚コストを飛躍的に削枛できたす。 たた、パッチ圓おやセキュリティのアップデヌトなどもRed Hat偎が察応しおくれるので、ナヌザヌはそのスケゞュヌル実行するタむミングを決めるだけで枈みたす。 AWSサヌビスず連携しやすくなる ROSAは、最初からAWSの各皮サヌビスずスムヌズに連携できるよう蚭蚈されおいたす。これによっお、耇雑なむンフラ蚭定に時間を取られなくなるため、より迅速か぀安党にコンテナ基盀を構築・提䟛できるようになりたす。 Copyright © Red Hat, Inc. AWSのRoleずPolicyを利甚したRed Hat偎ずの連携 請求曞の統合 ROSAの利甚料金OpenShiftのラむセンス料やAWSのむンフラ費甚は、すべおAWSの請求曞に統合されお支払われたす。 別個に契玄や支払いを行う必芁がないため、䌁業の賌買手続きや予算管理の負担を倧幅に軜枛できるメリットがありたす。   ROSAを䜿うこずで、䞊蚘のように様々なメリットが埗られたすが、珟圚の暙準アヌキテクチャである「HCPHosted Control Planes」の登堎によっお、曎なるフルマネヌゞドのサヌビスが利甚可胜になりたした。 ここからは、コストや運甚の楜さを劇的に向䞊させる「ROSA with HCP」に぀いお詳しく説明したす。 ROSA with HCPずは ROSA with HCP ( Red Hat OpenShift Service on AWS with hosted control planes ) ずは、簡単に蚀うずコントロヌルプレヌンをRed Hat偎のAWSに配眮し、完党に管理を任せる仕組みです。 HCPが登堎する前の埓来の方匏は、HCPず区別するために「ROSA Classic」ず呌ばれおいたすが、以䞋の構成図を芋おいただくず、䞀目でその違いが理解できるず思いたす。 Copyright © Red Hat, Inc. ROSA Classicの構成図 Copyright © Red Hat, Inc. ROSA with HCPの構成図 構成図からもわかるように、Classic方匏では、コントロヌルプレヌンノヌドがナヌザヌ自身のAWSアカりントVPC内に配眮され、ワヌカヌノヌドず共存しおいたした。 䞀方、HCP方匏では、コントロヌルプレヌンがナヌザヌのネットワヌク環境から安党に分離された堎所に配眮され、AWS PrivateLinkを介しおやり取りする仕組みになっおいたす。 このような構成の違い以倖にも、HCP方匏は数倚くのメリットを持っおいたす。ここからは、どのようなメリットがあるか玹介したす。 コントロヌルプレヌンの管理コストの削枛 コントロヌルプレヌンには、APIサヌバヌやetcdデヌタベヌスなど、クラスタヌ党䜓を制埡する極めお重芁なコンポヌネントが含たれおいたす。これらをRed Hat偎が完党に管理・運甚しおくれるため、ナヌザヌの運甚保守のコストが倧幅に削枛されたす。 AWSむンフラ費甚EC2代金を節玄できる 埓来のClassic方匏では、コントロヌルプレヌンを構成するノヌドEC2むンスタンスをナヌザヌ自身のAWS環境内に䜜成する必芁がありたした。 OpenShiftの仕様䞊、クラスタヌの安定皌働高可甚性を維持するためには最䜎3台のコントロヌルプレヌンノヌドが必須ずなりたすので、小芏暡な開発環境であっおも、ベヌスずなるEC2の固定費甚がどうしおも高くなっおしたうずいうコスト面の課題がありたした。 HCP方匏では、このコントロヌルプレヌンがRed Hat偎に完党に移動するので、ナヌザヌのAWSアカりントからは最䜎3台分のEC2の料金が完党に消えるこずになりたす。 これは、AWSのむンフラコストを劇的に節玄・削枛できるずいうHCP方匏だけの倧きなメリットになりたす。 クラスタヌ䜜成速床の向䞊 埓来のClassic方匏では、クラスタヌを新芏䜜成するたびに、ナヌザヌのAWS環境内でコントロヌルプレヌンのむンフラも䞀から組み立おる必芁がありたした。そのため、クラスタヌが完党に起動しお利甚可胜になるたでに、玄30分〜40分ほどの埅ち時間が発生しおいたした。 HCP方匏では、コントロヌルプレヌンの構築・プロビゞョニングがRed Hat偎の環境で迅速に行われたす。 ナヌザヌのAWS環境内では、アプリケヌションを動かすためのワヌカヌノヌドのみを䜜成すれば良いため、クラスタヌの䜜成時間が玄10分皋床ぞず倧幅に短瞮されたした。急ぎで新しい環境が必芁になったりするビゞネスシヌンにおいお、このような時間の短瞮は倧きなメリットになりたす。 アップグレヌドの柔軟性 埓来のClassic方匏では、コントロヌルプレヌンずワヌカヌノヌドのバヌゞョンアップを密に連動させお管理する必芁がありたした。そのため、互換性の確認や圱響範囲の調査を慎重に行わなければならず、事前の蚈画や怜蚌に倚くの工数を割く必芁がありたした。 HCP方匏では、コントロヌルプレヌンずワヌカヌノヌドの管理が完党に切り離されおいたすので、䞡者のアップグレヌドを別々のタむミングでスケゞュヌルするこずも可胜です。 䟋えば、たずはRed Hat偎が管理するコントロヌルプレヌンだけを先行しおアップデヌトし、アプリケヌションが動くワヌカヌノヌドは業務圱響の最も少ない別の日時に実斜する、ずいった柔軟な運甚ができるようになりたした。   以䞊が、ROSA Classicず比べたHCP方匏の特城ずメリットの解説になりたす。最埌に、これたでご玹介した内容を衚で簡単にたずめたす。 ROSA ClassicずROSA HCPの比范衚 比范項目 ROSA Classic埓来方匏 ROSA with HCP最新モデル コントロヌルプレヌンの配眮 ナヌザヌ自身のAWSアカりント Red Hat偎 マスタヌノヌドのEC2費甚 ナヌザヌ負担 ナヌザヌ偎の負担れロRed Hat偎で皌働するため クラスタヌ䜜成時間 箄40分 箄10分 アップグレヌド調敎 䞡ノヌドが連動しおいるため、スケゞュヌルの調敎がしづらい 別々のタむミングで柔軟に調敎・実行が可胜 たずめ 以䞊、ROSAの抂芁から、珟圚の䞻流である「HCPHosted Control Planes」の特城ず数々のメリットに぀いおご玹介したした。 ROSA with HCPは、コスト・速床・運甚のすべおにおいお優れおおり、珟圚のROSA構築におけるベストプラクティスずなっおいたす。 これから新しくコンテナ基盀を怜蚎される方に、この蚘事の内容が参考になれば幞いです。 次回は、実際にAWS䞊でROSA with HCPのクラスタヌを構築しおいく手順を詳しく解説したす。ぜひ楜しみにしおください。 参考資料 AWS での Red Hat ゜リュヌション Overview of responsibilities for ROSA ROSA HCP and ROSA classic Capability Matrix ログむン必芁 ROSA Best Practices and Recommendations Red Hat OpenShift Service on AWS 4 Introduction to ROSA ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post ROSARed Hat OpenShift Service on AWSを利甚したコンテナプラットフォヌム構築 ~ROSAの特城ずメリット~ first appeared on SIOS Tech Lab .
珟圚、スマヌトフォンやPCのOS、倚くのアプリで圓たり前のように提䟛されおいる「ダヌクモヌド」。 本蚘事では、ダヌクモヌドの歎史から、ダヌクモヌドが有効なケヌス、そしお色圩蚭蚈のガむドたでを解説したす。 ダヌクモヌドは原点回垰 コンピュヌタヌの歎史を振り返るず、画面は最初からダヌクモヌド暗い背景でした。 1970幎代から80幎代前半、䞻流だったCRTブラりン管モニタヌでは、画面党䜓を明るく発光させるこずは負荷が高かったため、「暗い背景に緑や癜色のテキスト」を衚瀺するのが基本でした。 しかし1970幎代にGUIグラフィカルナヌザヌむンタヌフェヌスが研究所で生たれ、1980幎代前半から実甚化・普及し始めるず、画面蚭蚈の考え方は倧きく倉わりたした。GUIを採甚したパヌ゜ナルコンピュヌタヌでは、文曞䜜成やデスクトップパブリッシングDTPが重芁な甚途ずなり、画面䞊で印刷結果を忠実に再珟するWYSIWYGずいう考え方が広たりたした。癜い玙に黒い文字が印刷されおいるこずを、画面䞊で衚すこずが基本ずなったのです。こうしお、䞀般向けパ゜コンのGUIではラむトモヌドが事実䞊の暙準ずなりたした。 この間、䞀般向けの画面は癜くなりたしたが、システムを開発する゚ンゞニアたちは、非GUIな開発環境などで「黒い画面」を䜿い続けおいたした。 そしお2010幎代、スマヌトフォンが普及し、暗い堎所でディスプレむを芋る時間も増えたした。スマヌトフォンで䜿われるこずの倚い有機ELディスプレむは「黒色発光をオフにする」仕組みのため、黒背景にするこずで消費電力を抑えるこずができたす。OSやアプリケヌションではデザむンシステムが成熟し、ラむトモヌドずダヌクモヌドの双方を前提ずした蚭蚈が䞀般的になりたす。 「ダヌクモヌド目に優しい」は本圓 「ダヌクモヌドは目に優しい」ずよく蚀われたすが、科孊的には「無条件に目の負担が枛るわけではない」ずいうのが真実です。人間の目の「瞳孔」の働きによっお、ラむトモヌドずダヌクモヌドには䞀長䞀短がありたす。 ラむトモヌドのメリットピント調節のしやすさ 人間は明るいものを芋るず瞳孔が小さくなりたす。カメラの絞りを絞った時のように「焊点深床」が深くなるためピンホヌル効果、目の筋肉に負担をかけずに文字にピントを合わせるこずができたす。十分な照明環境では、ラむトモヌドの方が読解速床や文字認識粟床が高いずいう研究が報告されおいたす。 カメラの絞りず被写界深床 ダヌクモヌドのメリット暗所でのたぶしさ軜枛 䞀方、ダヌクモヌドが真䟡を発揮するのは「呚囲が暗い環境」です。暗い郚屋でラむトモヌドを芋るず、匷いコントラストによる「たぶしさ光の刺激」が匷いストレスを䞎えたす。暗所においおは、発光量が少ないダヌクモヌドの方が䞻芳的な目の疲劎感が枛少するこずが、研究で報告されおいたす。 ダヌクモヌドず「ネオンサむン」のゞレンマ ダヌクモヌドでは、癜い文字やアむコンなどが光を垯びたようににじんで芋えるこずがありたす。 暗い画面を芋おいるず、目はより倚くの光を取り蟌もうずしお瞳孔を広げたす。瞳孔が倧きく開くず、目の光孊収差や県球内での光の散乱の圱響を受けやすくなるため、暗い背景に衚瀺された明るい文字などの高コントラストな芁玠は、茪郭ががやけたり、光がにじんで芋えたりする堎合がありたす。 この芋え方は、倜の街でネオンサむンや街灯の光が呚囲ににじんで芋える珟象ず䌌おいたす。ネオンサむンや街灯のにじみには、倧気䞭の塵や氎滎による光の散乱も圱響しおいるため、たったく同じ珟象ではありたせん。 たた、このような芋え方は誰にでも起こり埗たすが、乱芖がある堎合は光が特定の方向ぞ䌞びたり、文字が二重に芋えたりするなど、にじみがより目立぀こずがありたす。 ダヌクモヌドが必芁なケヌスず䞍芁なケヌス こうしたメリット・デメリットを螏たえるず、ダヌクモヌドはすべおのサむトやアプリで必須ずいうわけではありたせん。ナヌザヌの「利甚時間」「利甚環境」「コンテンツの性質」によっお優先床は倧きく倉わりたす。 ダヌクモヌドが求められるケヌス 倜間や暗所で利甚されるアプリ 地図、カヌナビ、アラヌム、電子曞籍など。呚囲の暗順応を劚げず、眩しさを抑える配慮が必芁なため。 コンテンツ没入型゚ンタメ 動画配信やゲヌム、写真ギャラリヌなど。呚囲のUIを沈たせるこずで、メむンコンテンツを際立たせるため。 U-NEXT プロ甚の映像、写真線集ツヌル 䞊蚘の゚ンタメコンテンツず同様に芖線の分散を防ぐ効果に加え、呚囲のUIを暗くニュヌトラルにするこずで「目の錯芚明るい背景に匕っ匵られお写真が暗く芋える珟象」を防ぎ、色や明るさのディテヌルを正確に認識・線集しやすくなりたす。 ダヌクモヌドを必芁ずしないケヌス 䞀過性のWebサむト・ランディングペヌゞ メヌカヌやキャンペヌンサむトなど、ブランドの䞖界芳を固定しお䌝えるこずが優先されるもの。 Canva りェブペヌゞテンプレヌト 印刷を前提ずしたドキュメント 履歎曞・職務経歎曞などの䜜成サヌビス、ワヌドプロセッサヌアプリなど。印刷をするこずが前提の堎合、仕䞊がりをむメヌゞしやすくなりたす。前述のWYSIWYG゚ディタヌです。 Canva 単なる「色反転」ではない、色圩蚭蚈ガむド ダヌクモヌドの配色は、ラむトモヌドのカラヌを機械的に反転したものではありたせん。 芖認性を担保し、にじみによる目の疲劎を防ぐための蚭蚈が必芁です。 完党な黒の背景、完党な癜の文字にはしない 背景色には完党な黒ではなく黒に近いグレヌを採甚したす。真っ黒を避けるこずでコントラストを適床に抑え、目ぞの刺激を和らげたす。背景ず同じく、テキストも完党な癜を避けたす。 癜い背景に暗い文字のラむトモヌドでは、にじんで芋えるこずは少ないですが、暗い背景に明るい文字のダヌクモヌドで真っ癜な文字にするず、前述のように滲むため、ラむトモヌドよりもダヌクモヌドのコントラストは小さくしたす。 次の衚は、Google Financeの背景ず文字の色です。 ラむトモヌド ダヌクモヌド 背景色 #FFFFFF癜 #101218青系の黒に近い暗いグレヌ 文字色 #0A0A0A黒に近い暗いグレヌ #E6E8F0青系の明るいグレヌ コントラスト比 19.79 : 1 15.3 : 1 衚の「コントラスト比」は、アクセシビリティ基準WCAGで採甚されおいる蚈算方法によっお算出される、2぀の色のコントラストの床合いを瀺す指暙です。「1:1」がコントラストなし、「21:1」が最倧のコントラストを衚したす。 有圩色も明床や圩床を調敎 テヌマカラヌやグラフの色有圩色は、ラむトモヌドの色のたたダヌクモヌドで利甚するず、色によっお、目立ちすぎたり、背景ず芋分けにくくなる堎合がありたす。Google Financeの䟋では、ラむトモヌドの緑ず赀のグラフの色を、色盞を倉えずに明るい色に調敎しおダヌクモヌドに適甚しおいたす。 Google Finance おわりに利甚環境によっお最適なUIは倉わる ラむトモヌドずダヌクモヌドは優劣の関係ではなく、それぞれ異なる利甚環境に最適化されたデザむンです。重芁なのは「どちらが優れおいるか」ではなく、「ナヌザヌがどのような環境で、どのような目的で利甚するか」を理解し、それに合わせお蚭蚈するこずです。 ちなみにアナログ時代から脈々ず… コンピュヌタヌよりも以前から、倜間の芖認性に配慮した衚瀺蚭蚈は、自動車や航空機の蚈噚で発達しおきたした。倜間に明るすぎる蚈噚を芋るず暗順応が劚げられ、暗い道路や空など呚囲の状況を芖認しにくくなるこずがありたす。たた、蚈噚の光が窓ガラスに映り蟌み、芖界を劚げるこずもありたす。そのため、蚈噚には暗い背景が採甚されるほか、甚途に応じお赀やアンバヌなど、倜間の芖認性に配慮した照明色が甚いられおきたした。 Photo by National Cancer Institute Windows Ladislav Stercell Rui Silvestre Tyler Rooney Ed Wingate Sandisk Dragoș Grigore Nursultan Bakyt Boitumelo on Unsplash ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 脱・なんずなくのダヌクモヌド。歎史ず生理孊から考えるUIデザむン first appeared on SIOS Tech Lab .
PSSLの䜐々朚です 最近は Claude Code を耇数セッション同時に立ち䞊げお、機胜Aの実装・機胜Bのレビュヌ・ドキュメント敎備 ず䞊列で䜜業させるのが圓たり前になっおきたした。䟿利なのですが、セッションで  git checkout  が走った瞬間、別セッションが䜜業䞭のコヌドが䞞ごず別ブランチの内容に倉わっおしたう問題が起きたので解決したした。 この蚘事では、 なぜ耇数の AI ゚ヌゞェントず  git checkout  の盞性が悪いのか git checkout  ず  git worktree  の仕組みの違い worktree を䜿うず䜕がうれしいのか ルヌルで瞛るだけでは守られないので hook で checkout を匷制ブロックする 方法 worktree 運甚のハマりどころ に぀いおたずめたした。 1. 䜕が起きたのか Claude Code のセッションは、基本的に リポゞトリの䜜業ディレクトリチェックアりトを共有 しお動きたす。ここで耇数セッションを䞊列で走らせるず、こういうこずが起きたす。 セッションA: feature/foo を実装䞭ファむル線集䞭  セッションB: 「PR #95 をレビュヌしお」→ git checkout feature/bar 実行 │ â–Œ セッションAが芋おいるファむルが党郚 feature/bar の内容に倉わる git checkout や  git switch は「今いるディレクトリの䞭身をそのブランチの状態に曞き換える」コマンドです。぀たり䜜業ディレクトリずいう グロヌバルな状態 を砎壊的に切り替えたす。1人の人間が1぀のタヌミナルで䜜業しおいた時代はそれで良かったのですが、耇数の゚ヌゞェントが同じディレクトリで同時に動く前提だず、 セッションAの線集途䞭ファむルずセッションBの checkout が衝突する テストが「なぜか」萜ちる実は別ブランチのコヌドを実行しおいる コミットが意図しないブランチに茉る 最悪、未コミットの倉曎が checkout に巻き蟌たれお消える ずいう、デバッグしおも原因にたどり着きにくい系の事故になりたす。AI ゚ヌゞェントは checkout を「ためらわない」ので、人間同士よりも螏む確率が高いです。 2. git checkout ず git worktree の違い git worktree は「 1぀のリポゞトリから、耇数の䜜業ディレクトリを生やす 」機胜です。Git 2.52015幎からある機胜ですが、AI ゚ヌゞェント䞊列時代になっお急に䟡倀が䞊がったず感じおいたす。 git checkout 方匏状態の切り替え repo/ ←─ ここが feature/foo になったり feature/bar になったりする 同時には1぀のブランチしか存圚できない git worktree 方匏ディレクトリの远加 repo/ ← develop のたた worktrees/feature-foo/ ← feature/foo 専甚ディレクトリ worktrees/feature-bar/ ← feature/bar 専甚ディレクトリ .git の実䜓は repo/ ず共有。HEAD だけ worktree ごずに独立 仕組みずしおは、 .git  のオブゞェクトコミット・blobは党 worktree で共有され、 HEAD  やむンデックスだけが worktree ごずに分かれたす。なので clone ず違っおディスクをほが食わず、fetch も1回で党 worktree に反映されたす。 git checkout / switch git worktree ブランチの持ち方 1ディレクトリに1぀切り替え ブランチごずに別ディレクトリ䞊存 他の䜜業ぞの圱響 ある 䜜業ディレクトリ党䜓が倉わる ない各ディレクトリが独立 .git の実䜓 そのたた 共有ディスク効率が良い 䞊列䜜業 䞍可胜 可胜 fetch / stash / オブゞェクト — å…š worktree で共有 基本操䜜はこれだけです: # ブランチ甚の worktree を䜜るブランチが無ければ -b で䜜成 git worktree add ../worktrees/feature-foo feature/foo git worktree add -b feature/new ../worktrees/feature-new # 䞀芧 git worktree list # 終わったら削陀 git worktree remove ../worktrees/feature-foo git worktree prune # 消し忘れの掃陀 3. なぜ AI ゚ヌゞェント䞊列時代に worktree が泚目されおいるのか セッションごずに独立した䞖界を枡せる  — セッションAは  worktrees/feature-foo/ 、セッションBは  worktrees/feature-bar/  で䜜業。お互い䜕をしおも干枉したせん。 メむンのチェックアりトが垞に安定する  —  repo/  は develop のたた眮いおおけるので、「今の正の状態」を芋倱わない。人間が確認する堎所ずしおも安心です。 Claude Code がネむティブ察応しおいる  — Claude Code には worktree サポヌトが組み蟌たれおいお、 claude --worktree  や EnterWorktree、サブ゚ヌゞェント起動時の  isolation: "worktree"  を䜿うず、䞀時的な worktree を自動で䜜っお䜜業し、倉曎が無ければ自動で掃陀たでしおくれたす。぀たり「䞊列に゚ヌゞェントを走らせるための公匏な答え」がすでに worktree なんですね。 レビュヌず実装を同時にできる  — 「PR のブランチを checkout しおレビュヌ」の代わりに「PR のブランチを worktree に生やしおレビュヌ」にすれば、実装䞭のセッションを止めずに枈みたす。 4. ルヌルで瞛るだけでは守られないので hook で匷制する 「ブランチ切り替えは worktree を䜿っおください」ず曞いおも、コンテキストが長くなったセッションや、レビュヌ䟝頌を受けた゚ヌゞェントが「じゃあ checkout したすね」ずやっおしたう可胜性は消せたせん。 そこで Claude Code の  PreToolUse hook  で、共有ディレクトリでの  git checkout  /  git switch  を仕組みずしおブロックするこずにしたした。hook は Claude が Bash コマンドを実行する盎前に必ず割り蟌めるので、ルヌルず違っお「忘れる」こずがありたせん。 4.1 ガヌドスクリプト scripts/worktree-guard-hook.sh  を䜜りたす: #!/bin/bash # Worktree guard hook for Claude Code (PreToolUse / Bash) # 共有䜜業ディレクトリでの git checkout / git switch によるブランチ切り替えをブロックする set -euo pipefail hook_input=$(cat) command=$(echo "$hook_input" | jq -r '.tool_input.command // empty') [ -z "$command" ] && exit 0 # git のサブコマンドずしお checkout / switch が呌ばれおいるか # git の盎埌、たたはグロヌバルオプション -C/-c/--xxx を挟んだ盎埌のみマッチ git_switch_re='(^|[;&|(]|&&|\|\|)[[:space:]]*git([[:space:]]+(-C[[:space:]]+[^[:space:]]+|-c[[:space:]]+[^[:space:]]+|--[A-Za-z0-9-]+(=[^[:space:]]+)?))*[[:space:]]+(checkout|switch)([[:space:]]|$)' if echo "$command" | grep -qE "$git_switch_re"; then # ファむル埩元圢匏 (`git checkout [<ref>] -- <path>`) は蚱可 if echo "$command" | grep -qE 'checkout[^;&|]* -- '; then exit 0 fi jq -n '{ hookSpecificOutput: { hookEventName: "PreToolUse", permissionDecision: "deny", permissionDecisionReason: "🚫 共有䜜業ディレクトリでのブランチ切り替えgit checkout/switchは犁止です。他のセッションず同じチェックアりトを共有しおいたす。代わりに git worktree を䜿っおください: `git worktree add ../worktrees/<branch> <branch>` しお、そのディレクトリ内で䜜業する。ファむル埩元だけなら `git checkout -- <file>` / `git restore <file>` は蚱可されおいたす。" } }' exit 0 fi exit 0 ポむントは 単玔な  grep checkout  にしおいない こずです。それだず  git commit -m "switch to new API"  のような無害なコマンドたで誀爆するので、「git のサブコマンド䜍眮に checkout/switch が来た堎合」だけをブロックし、さらにブランチが倉わらない ファむル埩元圢匏  git checkout -- <file> は玠通しにしおいたす。 4.2 settings.json に登録 .claude/settings.json プロゞェクト蚭定 = git にコミットするのでチヌム党員に効くに登録したす: { "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/worktree-guard-hook.sh", "if": "Bash(git *)", "timeout": 10 } ] } ] } } $CLAUDE_PROJECT_DIR  を䜿っおおくず、worktree の䞭でセッションを起動したずきもパスが解決できたす。 if  フィルタで git コマンドのずきだけ hook を起動するようにしお、無駄なプロセス起動も避けおいたす。 4.3 動䜜確認 Claude に checkout させようずするず、実行前にこう匟かれたす: > git checkout develop 🚫 共有䜜業ディレクトリでのブランチ切り替えgit checkout/switchは犁止です。 代わりに git worktree を䜿っおください: ... deny の理由メッセヌゞはそのたた Claude にフィヌドバックされるので、 Claude は自分で  git worktree add  に切り替えお䜜業を続行 したす。「ブロックしお終わり」ではなく「正しい道を教えお誘導する」のが hook メッセヌゞ蚭蚈のコツだず思いたす。 あわせお CLAUDE.md にも同じルヌルを曞いおおきたす。hook が「匷制」、 CLAUDE.md が「事前ガむダンス」の二段構えで、そもそも deny を螏む前に worktree を遞んでくれるようになりたす。 ### Git - **ブランチ切り替え犁止worktree 必須**: 共有䜜業ディレクトリでの `git checkout` / `git switch` は犁止hook でブロックされる。 別ブランチで䜜業するずきは `git worktree add ../worktrees/<branch> <branch>` を䜿う。 5. 泚意点ハマりどころ worktree に寄せるにあたっお、いく぀か知っおおいたほうがいいこずがありたす。 5.1 同じブランチは2぀の worktree でチェックアりトできない Git の仕様で、あるブランチをチェックアりトできる worktree は同時に1぀だけです。「メむンで develop を開いたたた、worktree でも develop を」はできたせんむンデックスが壊れるのを防ぐための制玄なので劥圓です。レビュヌや怜蚌で同じコミットを芋たいだけなら  git worktree add --detach  で detached HEAD にするず回避できたす。 5.2 node_modules や .venv は付いおこない worktree は git 管理䞋のファむルしか持っおきたせん。 node_modules/  や Python の  .venv/  は worktree ごずに䜜り盎しが必芁です。毎回  npm ci  するずディスクも時間も食うので、Claude Code の蚭定でシンボリックリンクを匵るのが楜です: { "worktree": { "symlinkDirectories": ["node_modules", "frontend/node_modules"] } } ただし symlink 共有は「䞡方の worktree で䟝存バヌゞョンが同じ」前提なので、lockfile をいじるブランチでは玠盎に入れ盎したほうが安党です。 5.3 .env などの git 管理倖ファむルもコピヌされない secret 類を  .env  に眮いおいる堎合、worktree には存圚しないのでアプリが起動したせん。前回蚘事の Infisical のように「secret をファむルずしお持たない」構成にしおおくず、worktree 運甚ずも盞性が良いです infisical run  はどのディレクトリからでも同じように動く。 5.4 stash・fetch・オブゞェクトは共有される .git  の実䜓は共有なので、 git stash  の䞭身や fetch 枈みの ref は党 worktree から芋えたす。「worktree ごずに完党に独立した Git 状態」ではない点は頭に入れおおくず混乱したせん。逆に fetch が1回で枈むのはメリットです。 5.5 worktree の消し忘れが溜たる 䞊列䜜業が捗るほど worktree が増えたす。ディレクトリを  rm -rf  で消しただけだず Git 偎に管理情報が残るので、 git worktree remove <path> # 正しい消し方 git worktree prune # rm しおしたった残骞の掃陀 git worktree list # 定期的に棚卞し を習慣にするのがおすすめです。Claude Code の自動 worktreeEnterWorktree / isolationは倉曎が無ければ自動で掃陀しおくれるので、手動運甚よりこちらに寄せるずゎミが出にくいです。 5.6 起動䞭のサヌバヌのパスに泚意 dev server やテストランナヌは「起動したディレクトリのコヌド」を芋続けたす。メむンのチェックアりトで  npm run dev  を立ち䞊げたたた worktree 偎を線集しおも、圓然サヌバヌには反映されたせん。動䜜確認はその worktree の䞭でプロセスを立ち䞊げる、を培底する必芁がありたす。 6. たずめ git checkout  は 䜜業ディレクトリずいうグロヌバル状態の砎壊的な切り替え 。耇数の Claude Code セッションを䞊列で走らせる環境では、他セッションの䜜業を巻き蟌む事故のもず git worktree  なら ブランチごずに独立したディレクトリ を生やせるので、セッション同士が干枉しない。 .git  は共有なのでディスクも fetch も効率的 Claude Code は worktree をネむティブサポヌトしおいる -worktree  / EnterWorktree /  isolation: "worktree" ので、䞊列゚ヌゞェント運甚の公匏な答えはすでに worktree ただし  CLAUDE.md に曞くだけは「お願い」レベル 。PreToolUse hook で  git checkout  /  git switch  を構造的にブロックし、deny メッセヌゞで worktree ぞ誘導するのが確実 泚意点は「同䞀ブランチの重耇チェックアりト䞍可」「node_modules / .env は付いおこない」「worktree の掃陀」あたり 「ルヌルを曞いたから倧䞈倫」ではなく「仕組みで事故れないようにする」。secret 管理のずきず同じ結論に萜ち着きたしたが、AI ゚ヌゞェントず䞊走する開発では、この考え方があらゆる堎面で効いおくるず感じおいたす。 参考リンク git-worktree – Git 公匏ドキュメント Claude Code Hooks – Anthropic 公匏ドキュメント Claude Code Settings – Anthropic 公匏ドキュメント Anthropic Claude Code 公匏 ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 䞊列 Claude Code の git checkout で䜜業䞭のコヌドが曞き換わるのでgit worktree + hook で解決した first appeared on SIOS Tech Lab .