[{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/tags/go/","section":"Tags","summary":"","title":"Go","type":"tags"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/series/go-tips/","section":"Series","summary":"","title":"Go Tips","type":"series"},{"content":"Goで「これどう書くんやっけ」となった時に見返すためのTips集．まずは for の書き方から．\n早見表 # やりたいこと 書き方 カウンタを増やす for i := 0; i \u0026lt; n; i++ { ... } n回繰り返す（Go 1.22以降） for range n { ... } 0からn−1を使う（Go 1.22以降） for i := range n { ... } 条件を満たす間繰り返す for 条件 { ... } 無限ループ for { ... } スライスの添字と値を使う for i, v := range items { ... } スライスの値だけ使う for _, v := range items { ... } スライスの添字だけ使う for i := range items { ... } 逆順に処理する for i := len(items) - 1; i \u0026gt;= 0; i-- { ... } 以下のコードは，特記がなければ main 関数内に書く想定．fmt を使う例では import \u0026quot;fmt\u0026quot; が必要です．\n基本形：初期化・条件・更新 # for i := 0; i \u0026lt; 5; i++ { fmt.Println(i) // 0, 1, 2, 3, 4 } for 初期化; 条件; 更新 の形．2つ飛ばしなら i += 2 のように，刻み幅も変えられます．\n回数だけ指定する（Go 1.22以降） # for range 3 { fmt.Println(\u0026#34;hello\u0026#34;) // 3回表示 } for i := range 3 { fmt.Println(i) // 0, 1, 2 } 整数への range はGo 1.22で追加されました．n 回繰り返し，添字は 0 から n-1．n が0以下なら一度も実行しません．利用するモジュールの go.mod でも go 1.22 以降を指定します．Go 1.22リリースノート\nwhile風：条件だけ書く # Goには while がないので，for に条件だけ書きます．\nn := 1 for n \u0026lt; 10 { fmt.Println(n) // 1, 2, 4, 8 n *= 2 } 無限ループとdo-while風 # 条件を省略すると無限ループ．終了条件で break します．\nn := 0 for { fmt.Println(n) n++ if n \u0026gt;= 3 { break } } do-while もありませんが，このようにループの末尾で終了判定すると，最低1回は処理を実行できます．\nスライス・配列をrangeで回す # names := []string{\u0026#34;Go\u0026#34;, \u0026#34;Rust\u0026#34;, \u0026#34;Python\u0026#34;} for i, name := range names { fmt.Println(i, name) } // 値だけ使う for _, name := range names { fmt.Println(name) } // 添字だけ使う for i := range names { fmt.Println(i) } 変数を1つだけ書くと，受け取るのは値ではなく添字です．値だけ欲しい時は _, name と書きます．\n元の要素を更新する # range で受け取る値は要素のコピーなので，元の要素への代入には添字を使います．\nnums := []int{1, 2, 3} for i := range nums { nums[i] *= 2 } fmt.Println(nums) // [2 4 6] ポインタなどを含む要素の場合，コピー先から参照先を変更することはできます．「値がコピーされる」と「参照先も複製される」は別の話です．\n逆順に回す # names := []string{\u0026#34;Go\u0026#34;, \u0026#34;Rust\u0026#34;, \u0026#34;Python\u0026#34;} for i := len(names) - 1; i \u0026gt;= 0; i-- { fmt.Println(names[i]) // Python, Rust, Go } 空のスライスなら i の初期値が -1 になり，一度も実行しません．\nmapを回す # scores := map[string]int{\u0026#34;alice\u0026#34;: 90, \u0026#34;bob\u0026#34;: 80} for name, score := range scores { fmt.Println(name, score) } // キーだけ使う for name := range scores { fmt.Println(name) } mapの走査順は保証されません．順番が必要なら，キーをスライスに集めてソートしてからアクセスします．\n文字列を回す：runeとbyte # s := \u0026#34;Go言語\u0026#34; // Unicodeコードポイント単位 for i, r := range s { fmt.Printf(\u0026#34;%d: %c\\n\u0026#34;, i, r) } // 0: G // 1: o // 2: 言 // 5: 語 // byte単位 for i := 0; i \u0026lt; len(s); i++ { fmt.Printf(\u0026#34;%d: %02x\\n\u0026#34;, i, s[i]) } 文字列への range は rune 単位ですが，添字はUTF-8のバイト位置です．また，結合文字や絵文字では，1つの見た目の文字が複数の rune になることがあります．\nchannelから受信する # ch := make(chan string, 2) ch \u0026lt;- \u0026#34;Go\u0026#34; ch \u0026lt;- \u0026#34;Rust\u0026#34; close(ch) for name := range ch { fmt.Println(name) } 送信済みの値を受信し終え，channelが閉じられるとループが終了します．閉じられていないchannelは，値がなければ受信待ちになります．この例ではバッファを2つ用意しているので，受信前に2回送信できます．\ncontinueとbreak # for i := 0; i \u0026lt; 10; i++ { if i%2 == 0 { continue // 偶数はスキップ } if i \u0026gt;= 7 { break // ループ終了 } fmt.Println(i) // 1, 3, 5 } この形の for では，continue しても更新処理の i++ は実行されます．条件だけのループで自分でカウンタを更新する場合は，更新を飛ばさないように注意．\n入れ子のループから抜ける # Outer: for i := 0; i \u0026lt; 3; i++ { for j := 0; j \u0026lt; 3; j++ { if i+j == 3 { break Outer } fmt.Println(i, j) } } break Outer でラベルの付いた外側のループを終了できます．continue Outer なら外側のループの次の反復に進みます．\nイテレータを回す（Go 1.23以降） # Go 1.23以降はイテレータ関数にも range を使えます．例えば，標準ライブラリの slices.Backward で逆順に走査できます．公式ブログの解説\npackage main import ( \u0026#34;fmt\u0026#34; \u0026#34;slices\u0026#34; ) func main() { names := []string{\u0026#34;Go\u0026#34;, \u0026#34;Rust\u0026#34;, \u0026#34;Python\u0026#34;} for i, name := range slices.Backward(names) { fmt.Println(i, name) // 2 Python, 1 Rust, 0 Go } } ループ変数とGoのバージョン # Go 1.22以降の言語仕様では，:= でループ内に宣言した変数は反復ごとに新しく作られます．古い記事にある，クロージャのための v := v という退避は，この条件では不要です．ただし，外で宣言した変数へ = で代入する場合は同じ変数を使い回します．Go 1.22リリースノート\n基本構文と range の詳しい仕様は，Go言語仕様のFor statementsを参照．\n","date":"2026年10月26日","externalUrl":null,"permalink":"/blog/go-tips-for/","section":"Blog","summary":"回数指定，while風のループ，range，逆順，break / continueなど，Goのforを用途別にまとめます．","title":"Go Tips: forの書き方集","type":"blog"},{"content":" ","date":"2026年10月26日","externalUrl":null,"permalink":"/","section":"pochizo","summary":" ","title":"pochizo","type":"page"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/tags/tips/","section":"Tags","summary":"","title":"Tips","type":"tags"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/categories/%E6%8A%80%E8%A1%93/","section":"Categories","summary":"","title":"技術","type":"categories"},{"content":"","date":"2026年10月3日","externalUrl":null,"permalink":"/categories/%E3%81%9D%E3%81%AE%E4%BB%96/","section":"Categories","summary":"","title":"その他","type":"categories"},{"content":" はじめに # お出かけ先でこんなものを見つけて衝動買いしました。\n機械ばっかり触ってると自然の生き物に触れたくなるのでしょう･･\n何が出るかな # 商品はカプセルに入っていて全部で4種類でした\nお目当ては黒松ですが当てられる気がしません．．\nと思ってたらでた！はっぴ〜\n早速植えてみる # 種と一緒にみに植木鉢と土が入っているので、早速植えてみました。（元気に育て〜）\n発芽 # 約10日後、朝起きると新たな命が芽吹いていました！（かわいい）\nさらに夜帰宅すると、横からもう1人！\nおわりに # 500円のガチャガチャだったので、ちゃんと発芽するか心配でしたが元気に顔を出してくれました(^o^)\n今後も観察日記をつけていけたらいいなと思ってます\n","date":"2026年10月3日","externalUrl":null,"permalink":"/blog/mame-bonsai/","section":"Blog","summary":"育てるカプセルで買った黒松を、種から育ててみます。","title":"豆盆栽を種から育ててみる","type":"blog"},{"content":"","date":"2026年10月3日","externalUrl":null,"permalink":"/tags/%E7%9B%86%E6%A0%BD/","section":"Tags","summary":"","title":"盆栽","type":"tags"},{"content":" はじめに # 『リーダブルコード』で紹介されている、読みやすいコードを書くための考え方をまとめます。\n『リーダブルコード』をAmazonで見る\n1. 理解しやすいコード # 良いコードとは、他の人が最短時間で理解できるコードである コードの行数よりも、理解にかかる時間を重視する 2. 名前に情報を詰め込む # 明確な単語を選ぶ：Getよりも、動作が伝わるFetchやDownloadを使う 汎用的な名前を避ける：ただし、値を一時的に入れ替えるtmpなど、役割が明らかな場合はよい 具体的に表現する：何を表す値なのか、名前だけで分かるようにする 大切な情報を加える：ミリ秒ならstart_msのように、単位や属性を名前に含める スコープに合わせて長さを変える：短い名前は、小さなスコープだけで使う 表記に意味を持たせる：大文字やアンダースコアの使い方を統一する 3. 誤解されない名前 # 上限・下限にはmax_・min_を付ける 両端を含む範囲にはfirst・last、終端を含まない範囲にはbegin・endを使う 真偽値にはis・hasなどを使う 4. 美しさ # インデントをそろえる 対応する要素は、どこでも同じ順番に並べる 大きなコードの塊は、空行を使って意味のある段落に分ける 5. コメントすべきことを知る # コメントしないこと\nコードを読めばすぐに分かること 分かりにくいコードの説明。コメントを足す前にコードを直す コメントすること\nその手法を選んだ理由 TODOや既知の問題 定数の値を決めた背景 ファイル、クラス、コードブロックの概要 6. コメントは正確で簡潔に # 「これ」「それ」などの代名詞を避ける コードの意図を、正確かつ簡潔に書く 7. 制御フローを読みやすくする # 比較では、変化する値を左、安定した値を右に置く if/elseでは、肯定形・単純・目立つ条件を先に扱う 読みにくくなる三項演算子、do/while、gotoは避ける 早期リターンを使ってネストを浅くする 8. 巨大な式を分割する # 説明変数を使って、巨大な式やコードブロックを意味のある単位に分ける。\n9. 変数と読みやすさ # 複雑な式の分割、意味の明確化、重複の削除に役立たない変数は消す 変数のスコープを小さくする できるだけイミュータブルな変数を使う 10. 無関係の下位問題を抽出する # プロジェクト固有の処理から、汎用的な処理を分離する ただし、細かい関数が増えすぎても読みにくい。再利用の必要性が見えてから切り出す 11. 一度に1つのことを # 1つのコードブロックでは、1つのタスクだけを扱う 複数の処理が混ざっている場合は、タスクを列挙して別々の処理に分ける 12. コードに思いを込める # 複雑な考えも、まず簡単な言葉で説明する。細部を詰め込みすぎると、かえって意図が伝わらない。\nコードを明確にする手順は次のとおりです。\nコードの動作を、同僚にも伝わる簡単な言葉で説明する 説明に使ったキーワードやフレーズに注目する その説明に合わせてコードを書く 13. 短いコードを書く # コードが増えるほど、保守や開発は難しくなる。新しいコードを増やさないためには、次の点を意識する。\n不要な機能を削除し、過剰な機能を持たせない 最も簡単に問題を解決できる要件を考える APIや標準ライブラリを知り、既存の機能を活用する 14. テストと読みやすさ # 失敗の原因がすぐ分かるエラーメッセージを書く テストしやすいコードを意識すると、責務が整理された読みやすいコードになる ","date":"2026年9月27日","externalUrl":null,"permalink":"/blog/readable-code/","section":"Blog","summary":"読みやすいコードを書くためのTipsをまとめています","title":"『リーダブルコード』の要点まとめ","type":"blog"},{"content":"","date":"2026年9月27日","externalUrl":null,"permalink":"/tags/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/","section":"Tags","summary":"","title":"プログラミング","type":"tags"},{"content":"","date":"2026年9月27日","externalUrl":null,"permalink":"/categories/%E6%9C%AC/","section":"Categories","summary":"","title":"本","type":"categories"},{"content":"","date":"2026年9月26日","externalUrl":null,"permalink":"/tags/kubernetes/","section":"Tags","summary":"","title":"Kubernetes","type":"tags"},{"content":"","date":"2026年9月26日","externalUrl":null,"permalink":"/tags/metal3/","section":"Tags","summary":"","title":"Metal3","type":"tags"},{"content":"Kubernetesでベアメタルマシンを管理するOSS、Metal3.ioのメンテナとして活動しています。\nMetal3とは # Metal3は、物理サーバーの登録やOSイメージのプロビジョニングから、Kubernetesクラスターの構築・更新までをKubernetes APIで管理するOSSです。 Metal3.io自体もKubernetes上で動作し、KubernetesのリソースとAPIをインターフェースとして利用します。\n2019年にRed Hatによって開始され、同年にEricssonが参加しました。 2020年9月にCNCF Sandboxへ入り、2025年8月にCNCF Incubating Projectへ昇格しました。\n活動内容 # リリースチームの一員として、各コンポーネントのリリース作業やパッチ修正などを行っています。\n変更内容と依存関係を確認し、リリースノートの作成、テスト結果の確認、パッケージ更新、リリース後の成果物の検証などを行います。\nContributions # OCI image URLs without checksum Fix Linux detection for kubectl installation in Leap CI Run zizmor for release branch PRs [release-0.14]Run zizmor for release branch PRs Bump OpenTelemetry to v1.45.0 CAPM3 v1.13.5 release IPAM v1.13.6 release IPAM v1.14.1 release BMO v0.14.2 release Bump Go to 1.26.9, osv-scanner to v2.6.0 and go group dependencies BMO v0.13.6 release CAPM3 v1.14.2 release Bump BMO to v0.14.2, IPAM to v1.14.2, Go to 1.26.9, osv-scanner to v2.6.0 and Go dependencies ","date":"2026年9月26日","externalUrl":null,"permalink":"/work/metal3-maintainer/","section":"Work","summary":"CNCF Incubating ProjectであるMetal3.ioのリリースチームに所属","title":"Metal3.ioメンテナ","type":"work"},{"content":"","date":"26 9月 2026","externalUrl":null,"permalink":"/en/tags/open-source/","section":"Tags","summary":"","title":"Open Source","type":"tags"},{"content":"","date":"2026年9月26日","externalUrl":null,"permalink":"/tags/oss/","section":"Tags","summary":"","title":"OSS","type":"tags"},{"content":"","date":"2026年9月26日","externalUrl":null,"permalink":"/work/","section":"Work","summary":"","title":"Work","type":"work"},{"content":"","date":"2026年9月20日","externalUrl":null,"permalink":"/photos/","section":"Gallery","summary":"","title":"Gallery","type":"photos"},{"content":"","date":"2026年9月20日","externalUrl":null,"permalink":"/photos/2026/","section":"Gallery","summary":"","title":"Gallery 2026","type":"photos"},{"content":" 著作権について # 当サイトに掲載している文章、画像、動画、ソースコード、デザインなどの著作権は、特に記載がない限り運営者または各権利者に帰属します。法律で認められる場合を除き、無断で複製、転載、改変、配布することを禁止します。\n引用を行う場合は、引用元として当サイトのページURLを明記し、引用の範囲を超えないようにしてください。\n免責事項 # 当サイトでは、掲載情報の正確性や完全性の確保に努めていますが、その内容を保証するものではありません。掲載情報は予告なく変更・削除されることがあります。\n当サイトの利用、または当サイトを利用できなかったことによって生じた損害について、運営者は責任を負いません。\nリンクについて # 当サイトへのリンクは、原則として自由です。リンクを設定する際は、当サイトへのリンクであることが分かるようにしてください。\n当サイトからリンクしている外部サイトの内容、サービス、個人情報の取扱いについて、運営者は責任を負いません。\n個人情報の取扱い # お問い合わせなどを通じて提供された氏名、メールアドレス、メッセージなどの情報は、連絡および必要な対応のために利用します。取得した情報を、本人の同意なく第三者へ提供することはありません。ただし、法令に基づく場合や、適切な業務委託に必要な場合を除きます。\nCookie・アクセス情報について # 当サイトでは、利便性の向上、表示の改善、利用状況の把握を目的として、Cookieやアクセスログを利用する場合があります。これらの情報だけで個人を特定することはありません。\nブラウザの設定によりCookieを拒否できますが、その場合、当サイトの一部機能が利用できないことがあります。\nポリシーの変更 # 当サイトポリシーは、必要に応じて予告なく変更することがあります。変更後のポリシーは、当サイトに掲載した時点から適用されます。\nお問い合わせ # 当サイトポリシーに関するお問い合わせは、メールからご連絡ください。\n","date":"2026年8月15日","externalUrl":null,"permalink":"/policy/","section":"pochizo","summary":"著作権について # 当サイトに掲載している文章、画像、動画、ソースコード、デザインなどの著作権は、特に記載がない限り運営者または各権利者に帰属します。法律で認められる場合を除き、無断で複製、転載、改変、配布することを禁止します。\n引用を行う場合は、引用元として当サイトのページURLを明記し、引用の範囲を超えないようにしてください。\n免責事項 # 当サイトでは、掲載情報の正確性や完全性の確保に努めていますが、その内容を保証するものではありません。掲載情報は予告なく変更・削除されることがあります。\n当サイトの利用、または当サイトを利用できなかったことによって生じた損害について、運営者は責任を負いません。\nリンクについて # 当サイトへのリンクは、原則として自由です。リンクを設定する際は、当サイトへのリンクであることが分かるようにしてください。\n当サイトからリンクしている外部サイトの内容、サービス、個人情報の取扱いについて、運営者は責任を負いません。\n個人情報の取扱い # お問い合わせなどを通じて提供された氏名、メールアドレス、メッセージなどの情報は、連絡および必要な対応のために利用します。取得した情報を、本人の同意なく第三者へ提供することはありません。ただし、法令に基づく場合や、適切な業務委託に必要な場合を除きます。\nCookie・アクセス情報について # 当サイトでは、利便性の向上、表示の改善、利用状況の把握を目的として、Cookieやアクセスログを利用する場合があります。これらの情報だけで個人を特定することはありません。\n","title":"サイトポリシー","type":"page"},{"content":"","date":"2026年6月14日","externalUrl":null,"permalink":"/tags/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9/","section":"Tags","summary":"","title":"インフラ","type":"tags"},{"content":" はじめに # AWS，Azure，GoogleCloudなどパブリッククラウドはすごく便利ですが，個人で使うには高いですよね．（貧乏学生にはきちぃ） 一生無料で，使い放題なクラウドがほしいな〜\nせや自分で作ればいいやん！\nということでパブリッククラウドを自作してみました\nシステム構成は大体下図の通りです（図Gemini作）． 宣伝 # 自作クラウドのコンテナサービス（ECS風）で運用しているポートフォリオサイトです https://daigo-suhara.com\nフェーズ1：kubernetesクラスタ自動構築化 # 基盤にはkubernetesを採用することにしました． しかしベアメタルにクラスタ構築するのめんどいなーということで自動的にクラスタ構築してくれるようにしました．\n具体的には，Tinkerbellというソフトウェアを使用しています．これによりストレージ空っぽ，電源OFFの状態から，クラスタ構築に必要最低限なパッケージ（kubeadmなど）のみ含んだOSが勝手にインストールされます． （Tinkerbell：ベアメタルにipxe経由でOSや初期設定を自動的にプロビジョニングしてくれる） さらにClusterAPI Provider Tinkerbellを使用することで，OSプロビジョニング後のクラスタ構築作業も自動化してくれます．\n自分はこれを，ノートPCにmicrok8sで作ったクラスタの上にargocdをインストして，argocdリソースとしてtinkerbell環境を構築しています．\nフェーズ2：クラウドコアシステムの作成 # まず現状ですが，\n認証系（IAM的な） テナント コンテナサービス(ECS) 仮想マシン(EC2) WEBコンソール API が作成できています．\nそれぞれの内部システムはgrpcサーバとして切り離されていて，GitHub Actionsでコンテナ化してociレジストリにPushしたものを，ArgoCDが呼び出します． （＊APIはFastAPI，WEBコンソールはReact製です）\nコンテナサービスについて # 基盤はknativeで動いています．それをFastAPIからの指示に基づいてGo製のシステムで操作しています．\nオートスケールやコンテナイメージURLの指定などができます．ソースコードからの継続デプロイ機能はまだ開発できていません．\nまた，ドメインマッピング機能もあるので，\u0026lt;サービスID\u0026gt;.drkatana.comという名前で公開URLもつきますし，CNAMEでカスタムドメインも設定できます． 仮想マシンについて # 基盤はkubevirtで動いています．ubuntu，fedora，debianなどのテンプレートの他，カスタムociイメージを指定することができます．コア数やメモリ数の指定と，コンソール画面からの操作ができます． コンソール画面はwebsocketとxterm.jsで実装しています． おわりに # 自分用クラウドとしてはOpenStackなどのOSSを使うと楽ですが，自分で１から作るというのは勉強も兼ねつつ，つい時間を忘れて徹夜してしまうくらい楽しむことができたので，ぜひクラウド自作erが増えるといいなと思いました．\n謝辞 # 今回開発作業にあたり，私の無茶なアーキテクチャを実装するコーディング作業の多くを担当してくださったCodexに感謝を表します．\nQiitaで元の記事を読む\n","date":"2026年6月14日","externalUrl":null,"permalink":"/blog/build-your-own-public-cloud/","section":"Blog","summary":"Kubernetesを基盤に、ベアメタル管理や仮想マシンなどを組み合わせてパブリッククラウドを自作する取り組みを紹介します。","title":"パブリッククラウド自作入門１","type":"blog"},{"content":" はじめに # 富士通の業務用サーバをお出迎えしたのですが，proxmoxをインストールしたいのになぜかディスクが認識されない？となったので解決した方法を一応メモしておきます．\n原因 # IOMMUが物理アドレスと仮想アドレスの再マッピングを厳格に行うため、一部のMegaRAIDコントローラが期待するDMA転送と衝突するとかなんとか ちなみにOSによってはいけるっぽい\n解決策 # proxmoxのインストール時に，インストール方法を選択する画面でeキーを押してgrubの編集画面に飛び，linuxと書かれてる行の末尾にスペースを空けて，\nintel_iommu=off と追記して，F10で確定すると普通にインストールできた．\nもしくは，UEFIからAdvanced -\u0026gt; CPU Configuration -\u0026gt; VT-dをDisabledにすることで永続的にiommuをオフにできます．（この後MegaRAIDのキャッシュエラーが出たのでUEFIからhealth checkみたいなとこでXキー押したら治った）\nRAID使いたくない場合（ディスクを単体で使いたい場合） # JBOD Modeに切り替えることでディスクがそのまま認識される\nUEFIにて Advanced -\u0026gt; AVAGO MegaRAID -\u0026gt; Main Menu -\u0026gt; Controller Manegement -\u0026gt; Advanced Controller Properties -\u0026gt; JBOD ModeをEnabledに変更 -\u0026gt; Apply Changes\n試したこと1 # マザボからRAIDカードをぶち抜いた\nhddケースのSASをマザボに挿しても認識しないみたいで，SAS-\u0026gt;SATAの変換が必要なので，どっちにしろ認識はしない（RAIDキャッシュのエラーは無くなったけど）．\n試したこと2 # Raid0をストレージの数（２枚）組んだ．\nUEFIにて Advanced -\u0026gt; AVAGO MegaRAID -\u0026gt; Configure -\u0026gt; Create Virtual Drive あとはraid0を選択してdriveを一つだけ選択して，applyを2回やる\nしかしダメだった\n付録（エラー画面） # Windows Serverが入ったRAIDをクリーンしてからずっと出るエラー # L2/L3 Cache error was detected on the RAID controller. Please contact technical support to resolve this issue. Press \u0026#39;X\u0026#39; to continue or else power off the system, replace the controller and reboot. Enter Your Input Here: OSインストールしようとした時のエラー # [ 78.431957] megaraid_sas 0000:01:00.0: megasas_get_ld_map_info DCMD timed out, RAID map is disabled [ 78.433510] megaraid_sas 0000:01:00.0: megasas_enable_intr_fusion is called outbound_intr_mask:0x40000000 [ 78.434796] megaraid_sas 0000:01:00.0: INIT adapter done Timed out for waiting the udev queue being empty. Begin: Loading essential drivers ... [ 121.164801] raid6: avx2x4 gen() 41207 MB/s [ 121.181805] raid6: avx2x2 gen() 40382 MB/s [ 121.198804] raid6: avx2x1 gen() 32882 MB/s [ 121.199111] raid6: using algorithm avx2x4 gen() 41207 MB/s [ 121.215805] raid6: .... xor() 13554 MB/s, rmw enabled [ 121.216100] raid6: using avx2x2 recovery algorithm [ 121.217759] xor: automatically using best checksumming function avx [ 121.219041] async_tx: api initialized (async) done. Begin: Running /scripts/init-premount ... Timed out for waiting the udev queue being empty. done. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... Begin: Waiting up to 180 secs for BOOTIF to become available ... _ Qiitaで元の記事を読む\n","date":"2026年4月19日","externalUrl":null,"permalink":"/blog/fujitsu-tx1320-m3-setup/","section":"Blog","summary":"Fujitsu TX1320 M3へのProxmox導入時にディスクが認識されない問題と、その解決方法を紹介します。","title":"TX1320 M3（富士通業務用サーバ）の設定でハマったこと","type":"blog"},{"content":" nixとは # 環境構築の苦悩から私たちを解き放ってくれる救世主（dockerのような仮想環境ではなくネイティブで動作する） 超便利なパッケージマネージャ（および設定用言語） OSの環境（開発環境以外も含む）をコード化し，どのマシンでも全く同じ環境を構築できる 時系列 # aptを知る 初めてUbuntuを使用した時にパッケージマネージャの存在を知った homebrewを知る linuxだけでなくmacにもパッケージマネージャがあることを知った dockerを知る コンテナを使うことで簡単に環境を再現することができると知った dotfilesを知る 今まで手動で管理していたconfigファイル達をgitで一元管理するという概念があることを知った nixを知る マシンごとにdotfilesを切り替えたいと思っている時に出会ってしまった 付録 # 私のdotfiles：https://github.com/daigo-suhara/dotfiles Qiitaで元の記事を読む\n","date":"2026年4月10日","externalUrl":null,"permalink":"/blog/journey-to-nix/","section":"Blog","summary":"apt、Homebrew、Dockerを経て、再現可能な開発環境を実現するNixへたどり着いた過程を振り返ります。","title":"[環境構築沼からの解放]私がnixに出会うまでの旅路","type":"blog"},{"content":" はじめに # neovimをビルドしようと\nmake CMAKE_BUILD_TYPE=RelWithDebInfo を実行したところ\nfatal error: CoreServices/CoreServices.h: No such file or directory というエラーが出た．\n原因 # （nixでインストールした？）gccを使用していると，macOSの最新SDKと互換性のないヘッダーファイルを参照してしまうらしい\n解決策 # clangを使用すると，無事にビルドできた\nオプションで指定するなら下記\nmake CMAKE_BUILD_TYPE=RelWithDebInfo CC=clang CXX=clang++ Qiitaで元の記事を読む\n","date":"2026年3月14日","externalUrl":null,"permalink":"/blog/neovim-build-macos-header-error/","section":"Blog","summary":"macOSでNeovimをビルドする際にCoreServicesヘッダーが見つからないエラーの解決方法を紹介します。","title":"macosでneovimのbuild時にヘッダファイルが見つからないエラー","type":"blog"},{"content":"","date":"2026年3月14日","externalUrl":null,"permalink":"/tags/neovim/","section":"Tags","summary":"","title":"Neovim","type":"tags"},{"content":"","date":"2025年10月1日","externalUrl":null,"permalink":"/tags/dart/","section":"Tags","summary":"","title":"Dart","type":"tags"},{"content":"","date":"2025年10月1日","externalUrl":null,"permalink":"/tags/firebase/","section":"Tags","summary":"","title":"Firebase","type":"tags"},{"content":"","date":"2025年10月1日","externalUrl":null,"permalink":"/tags/flutter/","section":"Tags","summary":"","title":"Flutter","type":"tags"},{"content":"","date":"2025年10月1日","externalUrl":null,"permalink":"/tags/github-actions/","section":"Tags","summary":"","title":"GitHub Actions","type":"tags"},{"content":"期間: 2025\n宿泊事業を展開する企業から依頼を受け、宿泊施設の検索・予約ができるモバイルアプリを開発しました。\nDevelopment # 企画されたサービスをモバイルアプリとして実現するため、設計から実装までを担当しました。AndroidとiOSの両方へ対応するため、FlutterとDartによるクロスプラットフォーム構成を採用しました。\nInfrastructure # アプリ開発に加えて、宿泊施設を紹介するWebサイトのインフラ構築も担当しました。また、GitHub Actionsを利用してCI/CD環境を整備し、継続的にビルド・デプロイできる開発環境を構築しました。\nTechnology # Flutter / Dart / Firebase / GitHub Actions\n","date":"2025年10月1日","externalUrl":null,"permalink":"/work/minpaku-app/","section":"Work","summary":"FlutterとFirebaseで開発した、Android・iOS対応の宿泊予約アプリ。","title":"株式会社SYNASIA HOTELS｜宿泊予約アプリ","type":"work"},{"content":" はじめに # ROSConJP2025のワークショップ（ROS 2とモデルベースデザイン(MBD)の実践入門）に参加したことにより，SimulinkでROS開発楽しいー！となったので，今回は物体認識を試してみます．\n注意 # この記事では，MATLAB/SimulinkとROSの連携に関する詳しい操作などは省いております．\n構成 # MacbookAir M3 (16GB) matlab/simulink起動 カメラデータのSubscribeと物体認識 RaspberryPi4B (8GB) カメラデータのPublish ラズパイ側 # 必要パッケージインストール # sudo apt update sudo apt install raspi-config v4l-util 設定の変更 # sudo raspi-config [3 Interface Options] を選択して [I1 Legacy Camera] を Enableにして再起動します．\nカメラノードの起動 # sudo apt install ros-jazzy-v4l2-camera ros2 run v4l2_camera v4l2_camera_node --ros-args -p video_device:=/dev/video0 MATLAB/Simulink側 # Simulinkモデルは上図のようになりました． ラズパイ側でパプリッシュしたカメラ画像をサブスクライブして，ObjectDetectorで物体認識しています． なお認識に使用するモデルは下記コマンドで，モデルファイルを作成して読み込ませました．\ndetector=yolov4ObjectDetector(\u0026#34;tiny-yolov4-coco\u0026#34;); save(\u0026#39;detector.mat\u0026#39;, \u0026#39;detector\u0026#39;); 人の検出のみフィルタリングするfunctionは下記のように定義しました．\nfunction [bboxes_person, isDetected] = filter_detections(boundingBoxes, labels) % 検出された物体の数を取得 numDetections = size(labels, 1); % personかどうかを格納するための論理配列を初期化 isPerson = false(numDetections, 1); % forループを使って、ラベルを一つずつチェックする for i = 1:numDetections % ラベルを一つだけ取り出して文字列に変換し、\u0026#34;person\u0026#34;と比較 if string(labels(i)) == \u0026#34;person_label\u0026#34; isPerson(i) = true; end end % 1つでもpersonが検出されたかチェック if any(isPerson) % personのバウンディングボックスのみを抽出 bboxes_person = boundingBoxes(isPerson, :); isDetected = true; else % personが検出されなかった場合、空行列を返す bboxes_person = zeros(0, 4, \u0026#39;single\u0026#39;); isDetected = false; end end Qiitaで元の記事を読む\n","date":"2025年9月12日","externalUrl":null,"permalink":"/blog/ros2-matlab-raspberry-pi-human-detection/","section":"Blog","summary":"Raspberry Piカメラの映像をROS 2で配信し、MATLAB/Simulinkで人を検出する構成を紹介します。","title":"[ROS2+MATLAB/Simulink]ラズパイカメラから人間の検出","type":"blog"},{"content":"","date":"2025年9月12日","externalUrl":null,"permalink":"/tags/%E3%83%AD%E3%83%9C%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9/","section":"Tags","summary":"","title":"ロボティクス","type":"tags"},{"content":" はじめに # 「クラウド破産を気にせずインフラを触り倒したい…」「自宅にもっとパワフルで柔軟な開発環境が欲しい…」 そんな思いから、自宅にプライベートクラウドを構築することにしました。\nこの記事では、3台のミニPCと1台のRaspberry Piを使って、OSのプロビジョニングからOpenStackのデプロイまでを自動化した、本格的なお家クラウドの構築手順を記録します。\n構成紹介: 今回のお家クラウドを支える機材たち # 🖥️ サーバー群 # 役割 機材 台数 スペック OpenStackノード (Control x1, Compute x2) ミニPC 3台 CPU: Intel Processor N150 Memory: 16GB Storage: 512GB NVMe SSD NIC: 1ポート MAASサーバー (OSプロビジョニング) Raspberry Pi 4 1台 8GB モデル 💡 NICの追加について # OpenStack (Kolla-Ansible) の標準的な構成では、コントロールノードに管理用と外部接続用の2つのネットワークインターフェースが必要です。 今回使用したミニPCはNICが1ポートだったため、コントロールノード用の1台にだけ、USB接続のNICを1つ追加しました。\n🌐 ネットワーク機器 # 役割 機材 備考 ルーター Ubiquiti EdgeRouter X OpenWrt ファームウェアを使用 スイッチングハブ TP-Link TL-SG605 5ポート・マネージメントスイッチ なぜこの構成？ # MAAS on Raspberry Pi: Raspberry Piは省電力で常時起動させておくMAASサーバーに最適です。MAASを導入することで、ミニPCのOSインストールや再設定が完全に自動化され、「サーバーを物理的なモノとしてではなく、APIで操作できるリソース」として扱えるようになります。\nミニPC: 省スペースかつ、近年のモデルは仮想化基盤として十分な性能を持っています。3台用意することで、OpenStackのマルチノード構成を試すことができます。\nSTEP 1: MAASによるOSプロビジョニング自動化 # まずは、お家クラウドの心臓部となるMAASをRaspberry Piにセットアップし、ミニPCたちを支配下に置きます。\nRaspberry PiにMAASをインストール Raspberry PiにはUbuntu Serverをインストールしておきます。 その後、SSHでログインし、MAASをインストールします。\nMAASの初期設定 Web UIにアクセスし、初期設定を進めます。\nミニPCのPXEブート設定とOSデプロイ 次に、ミニPC側の準備です。\n各ミニPCのBIOS/UEFI設定画面を開き、Network Boot (PXE Boot) を有効にします。\n起動順序をPXE Bootが最優先になるように変更します。\n設定を保存してミニPCを起動すると、MAASのDHCPサーバーからIPアドレスを取得し、ネットワークブートが開始されます。\nしばらくすると、MAASのWeb UIのMachinesタブに、新しいマシンがNewステータスで表示されるはずです。\nMAASは自動でマシンのハードウェア情報（CPU, メモリ, ストレージ等）を収集（Commissioning）します。Commissioningが完了したら、マシンを選択してAcquireし、最後にDeployボタンを押して Ubuntu 24.04 のデプロイを開始します。\nこの操作を3台のミニPCすべてで行います。 デプロイが完了すると、MAASが払い出したIPアドレスに対して、先ほど登録したSSHキーでパスワードレスログインができるようになっているはずです。最高ですね！\nSTEP 2: Kolla-AnsibleによるOpenStackマルチノード構築 # OSの準備が整ったので、いよいよOpenStackを構築していきます。 コンテナベースでOpenStack環境を構築できるKolla-Ansibleを使い、マルチノード構成に挑戦します。\ncontrol01: コントロールノード \u0026amp; etc\ncompute01: コンピュートノード\ncompute02: コンピュートノード\nHorizon (ダッシュボード) へのアクセス # ブラウザで http://\u0026lt;kolla_internal_vip_address\u0026gt; にアクセスすると、OpenStackのダッシュボード（Horizon）が表示されるはずです。 /etc/kolla/passwords.yml に記載されているkeystone_admin_passwordでログインできます。\n🚀 今後の展望: MagnumでKubernetesクラスタを！ # OpenStackという強力なIaaS基盤が手に入りました。 次のステップとして、OpenStackのコンテナオーケストレーションエンジンサービスである Magnum を利用して、オンデマンドでKubernetesクラスタを構築できる環境を目指します。\nおわりに # 今回は、MAASとKolla-Ansibleという強力なツールを組み合わせることで、OSのプロビジョニングからOpenStackのデプロイまでを自動化したお家クラウドの構築手順をご紹介しました。\n物理サーバーのセットアップが驚くほど楽になり、オンプレ環境でのインフラをコードで管理する楽しさとパワフルさを実感できました。 ミニPCとRaspberry Piで、皆さんも自分だけのクラウドを手に入れてみてはいかがでしょうか？\nこの記事が、お家クラウドに挑戦する誰かの助けになれば幸いです。\nQiitaで元の記事を読む\n","date":"2025年6月29日","externalUrl":null,"permalink":"/blog/home-cloud-maas-openstack/","section":"Blog","summary":"ミニPC 3台とRaspberry Piを使い、MAASによるOS展開からOpenStackの構築までを自動化する手順を紹介します。","title":"ミニPC 3台とラズパイで始める！MAASとOpenstackで作る本格お家クラウド構築録","type":"blog"},{"content":"警告ページでthisisunsafeと打ち込む\nQiitaで元の記事を読む\n","date":"2025年6月25日","externalUrl":null,"permalink":"/blog/bypass-chrome-certificate-warning/","section":"Blog","summary":"Chromeの証明書警告画面を一時的に回避する隠し操作を紹介します。","title":"Chromeで証明書警告を回避する方法","type":"blog"},{"content":"","date":"2025年6月25日","externalUrl":null,"permalink":"/tags/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3/","section":"Tags","summary":"","title":"セキュリティ","type":"tags"},{"content":" 環境 # MAASサーバ IP：192.168.100.50 node1 OS：Ubuntu24.04 IP：192.168.100.8 node2 OS：Ubuntu24.04 IP：192.168.100.9 （不要）dockerのインストール # sudo snap install docker # docker実行権限付与 sudo addgroup --system docker sudo adduser $USER docker microk8sのインストール # sudo snap install microk8s # 起動 sudo microk8s start これを２台のサーバーで実行\nクラスタの作成 # node1に参加させるためのコマンドを確認します\nsudo microk8s.add-node 以下のように出力されるはず\nFrom the node you wish to join to this cluster, run the following: microk8s join 192.168.100.8:25000/3039a88b56eaa8aa4b37fcc6ee281bdf/f8d2731d0c54 Use the \u0026#39;--worker\u0026#39; flag to join a node as a worker not running the control plane, eg: microk8s join 192.168.100.8:25000/3039a88b56eaa8aa4b37fcc6ee281bdf/f8d2731d0c54 --worker node2でクラスタに参加します\nmicrok8s join 192.168.100.8:25000/3039a88b56eaa8aa4b37fcc6ee281bdf/f8d2731d0c54 少し待つと， Successfully joined the cluster. と出力されてクラスタに参加できました\n# エイリアス作成 sudo snap alias microk8s.kubectl kubectl sudo microk8s.kubectl get nodes とコマンドを打って確認すると\nNAME STATUS ROLES AGE VERSION node1 Ready \u0026lt;none\u0026gt; 15m v1.32.3 node2 Ready \u0026lt;none\u0026gt; 77s v1.32.3 しっかりノードが登録されていますね\nargoCDインストール # #　ネームスペースの作成 sudo kubectl create namespace argocd # 公式マニフェストでデプロイ sudo kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml # サービスポート確認 sudo kubectl get svc argocd-server -n argocd # パスワード確認 sudo kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\u0026#34;{.data.password}\u0026#34; | base64 -d; echo 参考 # https://devops-blog.virtualtech.jp/entry/20220322/1647924202 Qiitaで元の記事を読む\n","date":"2025年6月15日","externalUrl":null,"permalink":"/blog/microk8s-cluster-mini-pcs/","section":"Blog","summary":"複数のミニPCへMicroK8sを導入し、Kubernetesクラスタを構築する手順をまとめます。","title":"ミニPCでmicrok8sクラスタ","type":"blog"},{"content":" 1. はじめに # AIアプリがWEBUI上で簡単に作れるdifyを，terraformを使用してGoogle Cloud Platform(gcp)上でセルフホスティングする方法を記述します．\nこの記事でできること # terraformを用いたgcp上でのdifyのセルフホスティング この記事の対象者 # AIアプリを簡単に外部公開したい方 difyをローカルだけでなく，クラウドで運用したい方 動作環境 # OS バージョン MacOS Sequoia 15.5 事前準備 # リポジトリのクローン # difyをgcpでホスティングする場合，クラウド上でのインフラ構築などを自動化するterraformの設定ファイルを公開してくれている以下のリポジトリがあるのでクローンします．\ngit clone https://github.com/DeNA/dify-google-cloud-terraform パッケージのインストール # terraformのインストール # brew install terraform google cloud sdkのインストール # brew install --cask google-cloud-sdk gcpプロジェクトの作成 # コンソールから任意の名前でプロジェクトを作成します． 詳細は割愛します．\ncliからgcpにログイン # gcloud auth login コマンド入力後webページが開くのでログインします．\ntfvars保管用バケットの作成 # terraformの状態をクラウドで管理するためのストレージを作成します GCPコンソールからbucketsを選択します． 任意の名前でバケットを作成しておいてください\nファイルの修正 # 先ほどクローンしてきたリポジトリを修正して，自分用にカスタムします．\ngitignoreの修正 # 機密情報をリモートに上げないように，gitignoreに追記します\nterraform.tfvars terraform/environments/dev を terraform/environments/prod という名前でコピーします． provider.tfの修正 # 先ほど作成したバケットをterraformの状態管理に適用します\nterraform { backend \u0026#34;gcs\u0026#34; { + bucket = \u0026#34;\u0026lt;バケットの名前\u0026gt;\u0026#34; prefix = \u0026#34;dify\u0026#34; } } tfvarsの修正 # コピーしたprod内のterraform.tfvarsを修正します keyについては，\nopenssl rand -base64 42 を実行して，作成するといいでしょう\n+ project_id = \u0026#34;例：dify-sample-app\u0026#34; + region = \u0026#34;例：asia-northeast1\u0026#34; + plugin_daemon_key = \u0026#34;\u0026lt;opensslコマンドで作成\u0026gt;\u0026#34; + plugin_dify_inner_api_key = \u0026#34;\u0026lt;opensslコマンドで作成\u0026gt;\u0026#34; デプロイ # ここまできたらいよいよGCPにデプロイします\nterraform初期化 # cd terraform/environments/prod terraform init Artifact Registry リポジトリを作成 # terraform apply -target=module.registry コンテナイメージをビルド＆プッシュ # cd ../../.. sh ./docker/cloudbuild.sh \u0026lt;project-id\u0026gt; \u0026lt;region\u0026gt; terraformプランニング # cd terraform/environments/dev terraform plan terraform適用 # terraform apply 注意 # terraformの適用中にapi関連のエラーが発生することがあります，その場合はエラー文に従って，必要なapiを有効化してください． GCPコンソールから有効化ボタン押すだけです\n参考資料 # https://github.com/DeNa/dify-google-cloud-terraform\nQiitaで元の記事を読む\n","date":"2025年5月24日","externalUrl":null,"permalink":"/blog/self-host-dify-gcp-terraform/","section":"Blog","summary":"Terraformを使い、DifyをGoogle Cloud上へ本番運用を想定した構成でセルフホストする方法を紹介します。","title":"【 本番向け】terraformを使ってdifyをGCP上にセルフホスティングする","type":"blog"},{"content":"","date":"2025年5月24日","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":" プロローグ # vim大好きな自分が，ときたまVScodeを使わざるを得ない時がありました． それは，サーバー内orコンテナ内のファイルをローカルから直接編集したい時． vimでもできないかと半年くらい前から思って色々探していましたが見つからず． でも見つけちゃいました． その名はremote-nvim.nvim\nremote-nvimについて # これマジで神です👼 OSはLinux, mac, FreeBSDにサポート対応していて, ssh, docker-container/image, dev-containerに対応してます．\nやってることとしては\nリモート先にneovimをshで自動インストール ローカルのオレオレnvimコンフィグをリモートにプッシュ リモートのnvimを起動し，ローカルのnvimと接続 実質ローカルからオレオレnvimでリモート先のファイルを操作できる．もちろんさまざまなプラグインをほとんど使えるし，他にインストーしたい依存ツールとかも設定で自動インストできる（自分はlazygitとか入れてる） しかも使い終わったらちゃんとクリーンアップして，サーバーの環境を汚さない インストール # lazy.nvimでプラグインごとにファイル分割してる場合\nreturn { \u0026#34;amitds1997/remote-nvim.nvim\u0026#34;, version = \u0026#34;*\u0026#34;, -- Pin to GitHub releases dependencies = { \u0026#34;nvim-lua/plenary.nvim\u0026#34;, -- For standard functions \u0026#34;MunifTanjim/nui.nvim\u0026#34;, -- To build the plugin UI \u0026#34;nvim-telescope/telescope.nvim\u0026#34;, -- For picking b/w different remote methods }, config = true, } あとは，githubとか見て各々でconfigのパラメータとか設定していけば使えるようになります． 自分はssh_promptsのEnter passphrase for keyの設定してなくて，ssh接続するときにパスワード入力できひんってなりました．\nlocal ssh_config = { ssh_binary = \u0026#34;ssh\u0026#34;, scp_binary = \u0026#34;scp\u0026#34;, ssh_config_file_paths = { \u0026#34;$HOME/.ssh/config\u0026#34; }, ssh_prompts = { { match = \u0026#34;Enter passphrase for key\u0026#34;, type = \u0026#34;secret\u0026#34;, -- パスフレーズはシークレットとして扱う value_type = \u0026#34;static\u0026#34;, -- 毎回新しいパスフレーズを入力するか value = \u0026#34;\u0026#34;, -- 初期値 }, { match = \u0026#34;password:\u0026#34;, type = \u0026#34;secret\u0026#34;, value_type = \u0026#34;static\u0026#34;, value = \u0026#34;\u0026#34;, }, { match = \u0026#34;continue connecting (yes/no/[fingerprint])?\u0026#34;, type = \u0026#34;plain\u0026#34;, value_type = \u0026#34;static\u0026#34;, value = \u0026#34;\u0026#34;, }, }, } 使い方 # デモ動画がgithubに載っています． 起動はRemoteStartコマンド打って，ssh接続の必要項目などをtelescope上で選択していくだけで簡単にできます．\n:RemoteStart リモートインスタンスに接続する。リモートneovimサーバーがすでに実行されている場合、ユーザーはローカルクライアントを起動できる\n:RemoteStop Neovimサーバーの実行を停止し、セッションを閉じる\n:RemoteInfo 現在の Neovim 実行で作成されたセッションに関する情報を取得する．進行状況ビューアーを開く\n:RemoteCleanup リモートインスタンスからワークスペースおよびリモートneovimセットアップ全体を削除する．また，リモートリソースの構成をクリーンアップする．\n:RemoteConfigDel 保存されたセッションレコードから、存在しなくなったリモートインスタンスのレコードを削除する．\n:RemoteLog プラグインのログファイルを開く．エラーが出たらここ見れば大体わかる．\n:RemoteInfo 接続に関する情報などが表示される．\nQiitaで元の記事を読む\n","date":"2024年10月16日","externalUrl":null,"permalink":"/blog/neovim-remote-ssh/","section":"Blog","summary":"remote-nvim.nvimを使い、NeovimからSSH先やコンテナ内のファイルを直接編集する方法を紹介します。","title":"NeovimでVSCodeみたいにRemoteSSHする方法を見つけた","type":"blog"},{"content":" はじめに # LinuxのインストールをするたびにUSBメモリにisoを書き込むのが面倒なので，複数のLinuxディストリビューションを一つのUSBに入れた，オールインワンパッケージを作りたいと思いました．\n手順 # 今回はVentoyを使って作業していきます．Ventoyは、ブート可能なUSBドライブを作成するオープンソースツールです。\nVentoy公式ページにアクセスして，Downloadを選択すると，候補が出てきます．今回はlinuxで作業するのでventoy-1.0.97-linux.tar.gzをダウンロード．\nフォルダを解凍して，直下のパスでターミナルを開き，以下のコマンドを実行する．\n$./VentoyGUI.x86_64 GUIが立ち上がるので，インストールをクリックして，警告には全てOKで進める．\nこれで万能USBディスクが完成するので，あとはここに，好きなisoファイルをそのまま突っ込むだけ\n注意点 # BIOSのSecure Bootが有効になっていると起動時にエラーが出るのでBIOSで無効化する設定を行なってください\nQiitaで元の記事を読む\n","date":"2024年5月13日","externalUrl":null,"permalink":"/blog/all-in-one-live-usb/","section":"Blog","summary":"Ventoyを使い、複数のLinuxディストリビューションを1本のUSBから起動できる環境を構築する方法を紹介します。","title":"オールインワンなライブUSBの作り方","type":"blog"},{"content":" はじめに # 今回はneovim完全対応でeasymotionのように，画面を縦横無尽に飛び回れるプラグインを見つけたので紹介します．これがあれば開発効率上がること間違いなし！\n使い方（単語全表示の場合) # 1 # 現在カーソルが25行にあり画面一番下71行の後ろにあるmethodsという単語に飛びたいとします 2 # コマンドを呼び出すと，全ての単語にバインドが割り振られるので，今回はjjと入力します 3 # はい．もう移動できました！ hop.nvim # https://github.com/hadronized/hop.nvim\n自分はこの手のプラグインはeasymotionしか知らなかったので，ずっと使っていたのですがバッファが書き換わるのでLSPがいちいち反応してうるさいなと思っていました． hop.nvimは，この問題を解決するためにUIプラグインは既存のバッファに変更を加えるべきではないというコンセプトをもとに最新のneovimに実装したプラグインのようです．最高だ．\nインストール方法 # 僕と同じ，lazy.nvimの場合は\nreturn { \u0026#34;phaazon/hop.nvim\u0026#34;, branch = \u0026#34;v2\u0026#34;, config = function() require(\u0026#34;hop\u0026#34;).setup { multi_windows = true, } end, keys = { {mode = \u0026#34;\u0026#34;, \u0026#34;\u0026lt;leader\u0026gt;s\u0026#34;, \u0026#34;\u0026lt;cmd\u0026gt;HopChar\u0026lt;CR\u0026gt;\u0026#34;, desc = \u0026#34;説明\u0026#34;}, } } でインストールと設定ができます． multi_windowsはウィンドウをいくつか広げているときに，全てのウィンドウが検索対象にすることができる設定です． 他にも色々設定項目ありましたが，基本的にはデフォルトから変えることはあまりなさそうでした．\n機能紹介 # 個人的に特に便利だと思うコマンドを３つ紹介します．\n:HopWord バッファ内の全ての単語がある場所に移動できます\n:HopChar2 2文字を指定して，検索をかけて移動することができます\n:HopPattern vim標準の/と同じように検索をかけることができます．標準では１つずつしか移動できないのに対して，こっちはヒットした対象から任意の箇所に一瞬で飛べちゃう．\nこの辺りをキーバインディングに設定しておけばかなり便利だと思います．\nQiitaで元の記事を読む\n","date":"2024年4月29日","externalUrl":null,"permalink":"/blog/hop-nvim/","section":"Blog","summary":"画面内の任意の位置へ素早く移動できるNeovimプラグイン、hop.nvimの使い方を紹介します。","title":"思考のスピードで飛び回れるNvimプラグインhop.nvimの紹介","type":"blog"},{"content":" はじめに # 神エディタneovim（初心者です）で，texプラグインを使ってレポートを執筆するための環境構築を行ったので，まとめておきます．\n筆者の開発環境 # M3macbookair(13-inch) homebrewインストール済み nvimはinit.luaで管理 latexmkのセットアップ # まずは，texの面倒なコンパイルをコマンド一発で行ってくれるという便利ツールlatexmkを設定していきます．vimでtexを動かすプラグインはlatexmkが裏で動くので必須です． そもそもtex環境入ってないって場合は以下のコマンドでインストールしましょう．\nbrew install mactex GUIはいらねーって人は下記のコマンドでインストールしてください\nbrew install mactex-no-gui パスを通してあげます（gui版はインストール時にやってくれてたかも？） 2024の部分は変わってきます．\nexport PATH=$PATH:/usr/local/texlive/2024/bin/universal-darwin mactexにはlatexmkも入っているので，あとは設定ファイル書くだけで使えちゃいます．\nnvim ~/.latexmkrc で設定ファイルを開いて，以下の内容を記述します\n#!/usr/bin/perl $latex = \u0026#39;platex -guess-input-enc -src-specials -interaction=nonstopmode -synctex=1\u0026#39;; $latex_silent = \u0026#39;platex -interaction=batchmode\u0026#39;; $dvips = \u0026#39;dvips\u0026#39;; $bibtex = \u0026#39;pbibtex\u0026#39;; $makeindex = \u0026#39;mendex -r -c -s jind.ist\u0026#39;; $dvi_previewer = \u0026#39;start dviout\u0026#39;; # -pv option $dvipdf = \u0026#39;dvipdfmx %O -o %D %S\u0026#39;; if ($^O eq \u0026#39;darwin\u0026#39;) { #$pdf_previewer = \u0026#39;open -a Preview %S\u0026#39;; #プレビュー使うならこっち $pdf_previewer = \u0026#39;open -a Skim\u0026#39;; #skimはこっち } elsif ($^O eq \u0026#39;linux\u0026#39;) { $pdf_previewer = \u0026#39;evince\u0026#39;; } $preview_continuous_mode = 1; $pdf_mode = 3; $pdf_update_method = 4; これだけで\nlatexmk *.tex とコマンドを打つだけでpdfの生成までやってくれます． オプションもありますが，今回はコマンドを使うことが目的ではないので割愛します．\nvimtexのセットアップ # ここからはvim/nvimにtexの便利機能を与えてくれるvimtexプラグインをインストールしていきます．僕の場合はlazy.nvimでプラグインを管理しているので，nvim/lua/plugins下にvimtex.luaを作成し，\nreturn { \u0026#34;lervag/vimtex\u0026#34;, lazy = false, tag = \u0026#34;v2.15\u0026#34;, init = function() vim.g.vimtex_view_method = \u0026#39;skim\u0026#39; end } と記述します． 僕の環境では最新版はうまく動いてくれなかったので，以前のv2.15を指定しています． 初めなぜか動かないってなったので注意 また僕はビューアーにはskimを指定していますが，プレビューなどを使用している人は変更しておいてください． あとは，nvimを再起動すればインストールが始まるので最低限の機能が使える用になります．\nnvimでtexファイルを開き，ノーマルモードで\n\u0026lt;localleader\u0026gt;ll と入力しましょう．（デフォルトでlocalleaderは\\なので，キーマップ設定してない場合は\\llです） すると，自動的にコンパイルが行われるとともに，ビューアーが開いてpdfが表示されるはずです．コードを編集した場合:wで保存すると勝手に再コンパイルされますが，これが嫌な人は設定で変えれます．\n（skimの場合，skim→設定→同期から，ファイルの変更をチェックと自動的にリロードするを選択しておくことで，編集したら自動でコンパイルして表示の更新までできちゃいます．）\nおわり # vimだけでpcの作業をできるだけ完結したいと思っていたので，またひとつvimでできることが増えて嬉しいです．またこの記事が誰かの一助になれば幸いです．\n参考 # https://qiita.com/tdrk/items/16f31e45826c57bce412 (2024年4月24日確認済み) Qiitaで元の記事を読む\n","date":"2024年4月24日","externalUrl":null,"permalink":"/blog/neovim-latex-setup/","section":"Blog","summary":"NeovimでLaTeX文書を執筆・コンパイルするための開発環境を構築する手順を紹介します。","title":"Neovim用のLatex環境を整えてみた","type":"blog"},{"content":"","date":"2024年4月1日","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","date":"2024年4月1日","externalUrl":null,"permalink":"/tags/flask/","section":"Tags","summary":"","title":"Flask","type":"tags"},{"content":"","date":"2024年4月1日","externalUrl":null,"permalink":"/tags/jinja2/","section":"Tags","summary":"","title":"Jinja2","type":"tags"},{"content":"","date":"2024年4月1日","externalUrl":null,"permalink":"/tags/nginx/","section":"Tags","summary":"","title":"Nginx","type":"tags"},{"content":"","date":"2024年4月1日","externalUrl":null,"permalink":"/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"期間: 2023–2024\n関西大学高槻キャンパスで運行されるシャトルバスの予約システムを開発しました。\nBackground # 大学ではこれまでシャトルバスが運行されておらず、新たな運行開始に合わせて予約システムを開発することになりました。乗車人数と座席を管理するため、学生がWeb上から希望する便と座席を予約し、乗車時に学生証で認証できる仕組みを構築しました。\nSystem # 4台のバスに対して各20席の座席を管理します。学生はWebアプリから希望する便と座席を予約でき、予約情報はオンプレミスサーバー上に構築したFlask APIとデータベースで管理されます。\nWebアプリと各バスに設置するRaspberry Piベースの認証機器は、Flask APIを通して予約情報を取得します。認証機器では、学生証から読み取った情報と予約情報を照合して乗車可否を画面に表示し、実際に乗車したことをデータベースへ記録します。\nまた、管理者用システムから予約情報や乗車状況を確認・操作できるため、シャトルバスの利用状況を一元的に管理できます。\nCard Reader # 学生証による乗車確認のため、NFCリーダー、Raspberry Pi、表示画面を組み込んだタッチ認証機器を製作しました。学生証をかざすだけで予約状況を確認できるため、乗車時の確認作業を円滑に行えます。\n自作した学生証タッチ認証機器 Development # システムの稼働基盤としてオンプレミスサーバーを構築し、現地でのセットアップと動作検証を行いました。\nオンプレミスサーバー構築のため、大学に泊まり込みで作業した際の様子 Technology # Docker / Nginx / Python / Flask / Jinja2 / Ubuntu / Raspberry Pi\n","date":"2024年4月1日","externalUrl":null,"permalink":"/work/shuttle-bus-reservation/","section":"Work","summary":"学生証認証と座席管理に対応した、関西大学高槻キャンパスのシャトルバス予約システム。","title":"関西大学｜シャトルバス予約システム","type":"work"},{"content":"期間: 2024\n不動産・建設事業を展開する企業の既存アプリを引き継ぎ、機能追加と運用改善を行いました。\nDevelopment # 既存のアプリを引き継ぎ、ユーザーのログイン機能と管理者とのチャット機能を追加しました。また、管理者が物件情報を更新できるCMSを、Flutter WebによるWebアプリとして構築しました。\nFlutter Webは初期表示速度やSEOに課題がある一方、このCMSは検索流入を必要としない社内向けツールです。既存アプリと技術スタックを共通化でき、開発・保守を効率化できることから採用しました。\n","date":"2024年1月1日","externalUrl":null,"permalink":"/work/property-company-app/","section":"Work","summary":"ログイン、管理者とのチャット、物件情報CMSを追加した不動産系企業の公式アプリ。","title":"株式会社FDS｜公式アプリ","type":"work"},{"content":"","date":"2022年6月13日","externalUrl":null,"permalink":"/blog/","section":"Blog","summary":"","title":"Blog","type":"blog"},{"content":"大学院でロボットの研究に取り組んでいます。また、Metal3というOSSのメンテナーとして活動しています。趣味はカメラとドライブです。\n経歴 # 期間 学校 2026‑現在 関西大学大学院 総合情報学研究科 修士課程 2023‑2026 関西大学 総合情報学部（編入） 2018‑2023 舞鶴工業高等専門学校 電子制御工学科 ","externalUrl":null,"permalink":"/about/","section":"pochizo","summary":"大学院でロボットの研究に取り組んでいます。また、Metal3というOSSのメンテナーとして活動しています。趣味はカメラとドライブです。\n経歴 # 期間 学校 2026‑現在 関西大学大学院 総合情報学研究科 修士課程 2023‑2026 関西大学 総合情報学部（編入） 2018‑2023 舞鶴工業高等専門学校 電子制御工学科 ","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":" Blog [ROS2\u0026#43;MATLAB/Simulink]ラズパイカメラから人間の検出 [環境構築沼からの解放]私がnixに出会うまでの旅路 『リーダブルコード』の要点まとめ 【 本番向け】terraformを使ってdifyをGCP上にセルフホスティングする Chromeで証明書警告を回避する方法 Go Tips: forの書き方集 macosでneovimのbuild時にヘッダファイルが見つからないエラー NeovimでVSCodeみたいにRemoteSSHする方法を見つけた Neovim用のLatex環境を整えてみた TX1320 M3（富士通業務用サーバ）の設定でハマったこと オールインワンなライブUSBの作り方 パブリッククラウド自作入門１ ミニPC 3台とラズパイで始める！MAASとOpenstackで作る本格お家クラウド構築録 ミニPCでmicrok8sクラスタ 思考のスピードで飛び回れるNvimプラグインhop.nvimの紹介 豆盆栽を種から育ててみる Work Metal3.ioメンテナ 株式会社FDS｜公式アプリ 株式会社SYNASIA HOTELS｜宿泊予約アプリ 関西大学｜シャトルバス予約システム About サイトポリシー ","externalUrl":null,"permalink":"/site-map/","section":"pochizo","summary":"Blog [ROS2+MATLAB/Simulink]ラズパイカメラから人間の検出 [環境構築沼からの解放]私がnixに出会うまでの旅路 『リーダブルコード』の要点まとめ 【 本番向け】terraformを使ってdifyをGCP上にセルフホスティングする Chromeで証明書警告を回避する方法 Go Tips: forの書き方集 macosでneovimのbuild時にヘッダファイルが見つからないエラー NeovimでVSCodeみたいにRemoteSSHする方法を見つけた Neovim用のLatex環境を整えてみた TX1320 M3（富士通業務用サーバ）の設定でハマったこと オールインワンなライブUSBの作り方 パブリッククラウド自作入門１ ミニPC 3台とラズパイで始める！MAASとOpenstackで作る本格お家クラウド構築録 ミニPCでmicrok8sクラスタ 思考のスピードで飛び回れるNvimプラグインhop.nvimの紹介 豆盆栽を種から育ててみる Work Metal3.ioメンテナ 株式会社FDS｜公式アプリ 株式会社SYNASIA HOTELS｜宿泊予約アプリ 関西大学｜シャトルバス予約システム About サイトポリシー","title":"サイトマップ","type":"page"}]