もうSSHログインはいらない?GitHub Actionsで自宅サーバーをプロ仕様に自動化(CI入門)【第3回:GitHubで『自宅DevOps』構築編!】

PC

こんにちは、てつです!

前回の第2回記事「GitHub Actionsを自宅で動かす!Self-hosted Runner構築ガイド」では、自宅サーバーにSelf-hosted Runner(セルフホステッド・ランナー:GitHubからの命令を自宅サーバー内で受け取って実行する仕組み)を導入し、クラウドと自宅の拠点を安全に繋ぐ土台を完成させました。

「これで自宅サーバーを自動化する準備はバッチリだ!」とワクワクしている方も多いのではないでしょうか。

しかし、いざ自動化を進めるにあたって、避けて通れない「巨大な壁」があります。それが設定ファイルの書き間違い(構文エラー)です。

今回は、プロの現場では絶対に欠かせない「ミスを仕組みで防ぐ防衛網」を自宅サーバーに構築していきましょう!

「よし、自宅サーバーの設定を変えよう!」と、docker-compose.yml などの設定ファイルを書き換えてサーバーに反映させた際、画面にエラーが吐き出されてサーバーが起動しなくなった経験はありませんか?

「原因を調べてみたら、インデント(文字の前のスペース)が1マスずれていただけだった……」なんていうのは、インフラエンジニアの“あるある”です。

YAML(ヤムル:docker-compose.ymlなどの設定ファイルを読みやすく書くためのデータ形式)というフォーマットは、スペースの数が意味を持つため、タイポ(打ち間違い)に対して非常にデリケートです。

手動でのチェックには限界があります。

特に、深夜の作業や、仕事終わりの限られた時間での作業では、人間の注意力はどうしても落ちてしまいます。

プロのインフラエンジニアの現場では、「人間は必ずミスをする」という前提でシステムを組みます。どれだけ熟練したエンジニアであっても、「気をつけます」という精神論でミスを防ぐことはしません。

そこで登場するのが、今回のテーマである CI(Continuous Integration:継続的インテグレーション) です。

簡単に言うと、「コードを修正してGitHubにアップロード(push)した瞬間に、ロボットが自動で文法チェックをしてくれる仕組み」のこと。

[Image: コードをPush ➔ ロボットが構文チェック ➔ OKなら緑、ダメなら赤で通知するパイプラインのイメージ]

この「自動チェックというガードレール」を1本敷くだけで、お粗末な構文ミスのせいで自宅サーバーが突然止まるリスクを物理的にゼロにできます。

趣味のホームラボとはいえ、やってることは「プロの開発現場と全く同じ仕様」です。最高にワクワクしてきませんか?

この記事を進めるにあたって、必要な環境を整理します。

  • 前提条件(前回の振り返り):
    • 第2回の「Self-hosted Runner構築ガイド」を完了しており、GitHub Actionsが自宅サーバー上で動かせる状態になっていること。
    • 自宅サーバーのOSがLinux(Ubuntuなど)で、Docker環境があること。
  • 今回導入するツール:
    • Yamllint(ヤムル・リント):YAMLファイルの文字のズレや、不要なスペース、書き方のルール違反を瞬時に見つけ出す「校正ロボット」のようなツールです。

手順はシンプルに3つのステップです。黒い画面(コマンドライン)での作業は最小限ですので、ステップ・バイ・ステップで進めていきましょう。

GitHub Actionsを動かすためには、リポジトリの中に「こういう順番で自動化してね」という指示書(ワークフローファイル)を置いておく必要があります。

まずは、ご自身のPCの作業ディレクトリ(またはGitHubのウェブ画面)で、以下の通りフォルダとファイルを作成してください。

  1. プロジェクトの1番上の階層(ルートディレクトリ)に、 .github というフォルダを作ります。
  2. その中に、さらに workflows というフォルダを作ります。
  3. 最後に、その中に yaml-check.yml という名前のファイルを作成します。

全体の配置イメージはこうなります: (あなたのプロジェクト)/.github/workflows/yaml-check.yml

作成した yaml-check.yml に、以下のコードをそのまま貼り付けて保存してください。

プログラミングやインフラの学習中の方に向けて、1行ずつ何をしているのか解説を入れました。変数や設定の意味をセットで掴んでみてください。

仕組みができたら、本当にロボットが機能しているか「テスト」をしてみましょう。インフラの世界では、「あえて失敗させてみて、想定通りにエラーを検知できるか」を確認するまでがセットです。

1.テストとして、リポジトリ内にある適当なYAMLファイル(docker-compose.yml など)のインデントをあえて1マスだけずらして保存します。

2.コマンドで、いつも通りGitHubへ変更を送信します。

3.GitHubのブラウザ画面を開き、「Actions」タブをクリックしてください。

上の画像のように、ワークフローが赤色(Fail:失敗)で停止していれば大成功です! エラーの詳細を開くと、「○行目のスペースの数がおかしいよ」とロボットが英語で的確に指摘してくれているはずです。

確認できたら、ファイルのインデントを正しい状態に戻し、再度 git push してみましょう。今度は緑色のチェックマーク(Success:成功)に変わるはずです。

この瞬間、あなたの自宅サーバー環境に最強の「盾」が備わりました!

今回構築した環境は、企業の数百万〜数千万円規模の本番システムで採用されている構成と、本質的には全く同じです。

実務における最大のメリットは、「不完全な設定ファイルが本番環境(自宅サバ)に適用されるのを物理的にブロックできる」という点にあります。

もしこのCI(自動チェック)を挟まずに、直接サーバー上でファイルを書き換えていたら、修正が終わるまでコンテナが落ち続け、サービスが停止してしまいます。

また、前回の「Self-hosted Runner」を引き継いで使っているため、コードの検証はすべて「自宅サーバーの内部」で完結します。

クラウド側のマシンパワーを消費しないため、GitHub Actionsの無料枠(実行時間制限)を一切気にせず、24時間いつでも、何回でもプッシュしてテストできるのもホームラボならではの特権であり、プロ仕様の設計思想です。

エラーメッセージのどこに注目すべきか:GitHub Actions画面のステータスランプ(黄色いグルグルがずっと回っている)

原因と解決策:前回設定した自宅サーバー側の「Runnerサービス」が眠っている(停止している)可能性が高いです。自宅サーバーにログインし、次のコマンドで生存確認をしてください。

もし inactive (dead) と表示されていたら、 sudo systemctl start actions-runner.service で起こしてあげましょう。

エラーメッセージのどこに注目すべきか:ログ内の [error] line length...(1行が長すぎる)や [error] trailing spaces(行の最後に無駄なスペースがある)

原因と解決策:このチェックツールはデフォルトだとかなり「潔癖症」です。実用的なバランスにするために、ルールを少し緩めてあげましょう。 プロジェクトの一番上の階層に .yamllint という名前のファイルを作り、以下の設定を書き込むことで、1行の長さ制限などを無視させることができます。

お疲れ様でした! これで設定ファイルの「構文ミス」を全自動で検知する、自宅DevOpsの強力なCI環境が完成しました。もう、タイポひとつでサーバーを壊す恐怖に怯える必要はありません。

安全な「盾」を手に入れたら、次に欲しくなるのは「圧倒的な楽(スピード)」ですよね。

次回・第4回は、「git pushで即反映!自宅サバをGitOps(ギットオプス)化してSSHログインを卒業する方法」をお届けします。

もう、設定を変えるたびに毎回黒い画面(SSH)でサーバーにログインし、手動で docker compose restart を叩く面倒な運用からは卒業です。コードをプッシュした瞬間に、自宅のコンテナがシュッと最新化される快感を、ぜひ一緒に体験しましょう!

「手元の環境で動いた!」「こんなエラーで詰まった」などがあれば、ぜひコメントや note の「スキ」で教えてもらえると励みになります!

また、今回の連載で構築する「自宅自動化環境」のより高度なエラーハンドリング集や、ワンクリックで環境を爆速構築できる「自動化シェルスクリプトの完成版テンプレート」は、将来的にnoteにて販売も予定しています。

気になる方は今のうちにブログのブックマークとnoteのフォローをお願いします!

それでは、また次回の記事でお会いしましょう!

【自己紹介】「エラーとの格闘」を資産に変える。インフラエンジニアが教える自動化の生存戦略|tetsu
「毎日、定型業務に追われて気づけば一日が終わっている」 「副業で稼ぎたいけれど、何から手をつけていいか分からない」 もしあなたが今、IT現場で働きながら、そんな焦燥感を抱えているなら、少しだけ時間をください。 今の会社での仕事は決して嫌いじ…

コメント

タイトルとURLをコピーしました