<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gitlab on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog.ponkotools.com/tags/gitlab/</link><description>Recent content in Gitlab on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Sun, 17 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://blog.ponkotools.com/tags/gitlab/index.xml" rel="self" type="application/rss+xml"/><item><title>Cloudflare Pages で静的サイトを公開する（GitLab 連携）</title><link>https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/</link><pubDate>Sun, 17 May 2026 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/</guid><description>&lt;h2 id="前提環境"&gt;&lt;a href="#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;前提・環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;ソース管理: &lt;strong&gt;GitLab&lt;/strong&gt; (GitHub でもやり方は同じ)&lt;/li&gt;
&lt;li&gt;ホスティング: &lt;strong&gt;Cloudflare Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;DNS: &lt;strong&gt;Cloudflare&lt;/strong&gt;（既存ドメインのサブドメインに展開する想定）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="gitlab-側で必要なこと"&gt;&lt;a href="#gitlab-%e5%81%b4%e3%81%a7%e5%bf%85%e8%a6%81%e3%81%aa%e3%81%93%e3%81%a8" class="header-anchor"&gt;&lt;/a&gt;GitLab 側で必要なこと
&lt;/h2&gt;&lt;p&gt;ほぼ何もしなくて構いません。&lt;br&gt;
&lt;code&gt;.gitlab-ci.yml&lt;/code&gt; を書く必要はなく、Cloudflare Pages が直接 git clone してビルドします。&lt;/p&gt;
&lt;p&gt;最低限の準備は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;リポジトリが Cloudflare からアクセスできること（Public ならそのまま、Private なら次節の OAuth で許可します）&lt;/li&gt;
&lt;li&gt;プロダクションブランチ（&lt;code&gt;main&lt;/code&gt; など）を決めておくこと&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ブランチ運用は Cloudflare Pages 側で自動的に処理されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロダクションブランチへの push → 本番デプロイ&lt;/li&gt;
&lt;li&gt;それ以外のブランチへの push → &lt;strong&gt;自動でプレビュー URL が発行される&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cloudflare-pages-側のセットアップ"&gt;&lt;a href="#cloudflare-pages-%e5%81%b4%e3%81%ae%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97" class="header-anchor"&gt;&lt;/a&gt;Cloudflare Pages 側のセットアップ
&lt;/h2&gt;&lt;p&gt;Cloudflare ダッシュボード → &lt;strong&gt;Workers &amp;amp; Pages&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/01.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/01_hu_9ea2c901c150fda5.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/01.webp 1160w" width="1160"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create application&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="529px" data-flex-grow="220" height="529" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/02.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/02_hu_a08f49e8f9b7bb41.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/02.webp 1167w" width="1167"&gt;&lt;/p&gt;
&lt;p&gt;下部にある &lt;strong&gt;Get started&lt;/strong&gt; をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="518px" data-flex-grow="216" height="434" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/03.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/03_hu_6c3acff843249430.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/03.webp 938w" width="938"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Import an existing Git repository&lt;/strong&gt; の &lt;strong&gt;Get started&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="443px" data-flex-grow="184" height="332" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/04.webp" width="614"&gt;&lt;/p&gt;
&lt;h3 id="git-プロバイダの接続"&gt;&lt;a href="#git-%e3%83%97%e3%83%ad%e3%83%90%e3%82%a4%e3%83%80%e3%81%ae%e6%8e%a5%e7%b6%9a" class="header-anchor"&gt;&lt;/a&gt;Git プロバイダの接続
&lt;/h3&gt;&lt;p&gt;GitHub だけでなく &lt;strong&gt;GitLab も公式サポート&lt;/strong&gt;されています。&lt;br&gt;
&lt;strong&gt;GitLab&lt;/strong&gt; のタブを選択し、&lt;strong&gt;Connect GitLab&lt;/strong&gt; から OAuth で認証を行います。&lt;br&gt;
認証後、対象リポジトリを選び、&lt;strong&gt;Begin setup&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="415px" data-flex-grow="173" height="549" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/05.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/05_hu_29852ce65aaaecb.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/05.webp 951w" width="951"&gt;&lt;/p&gt;
&lt;h3 id="ビルド設定で指定する項目"&gt;&lt;a href="#%e3%83%93%e3%83%ab%e3%83%89%e8%a8%ad%e5%ae%9a%e3%81%a7%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b%e9%a0%85%e7%9b%ae" class="header-anchor"&gt;&lt;/a&gt;ビルド設定で指定する項目
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Framework preset&lt;/strong&gt;: 使っているフレームワークに該当があれば選びます。自前のシェルスクリプトでビルドするなら None で構いません&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build command&lt;/strong&gt;: リポジトリ直下から実行されるビルドコマンド&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build output directory&lt;/strong&gt;: 成果物のディレクトリ（例: &lt;code&gt;dist&lt;/code&gt;、&lt;code&gt;public&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root directory&lt;/strong&gt;: 通常は空欄でリポジトリ直下&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: 必要に応じて設定します&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="286px" data-flex-grow="119" height="785" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/06.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/06_hu_7c9afe961a914c17.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/06.webp 936w" width="936"&gt;&lt;/p&gt;
&lt;h3 id="初回デプロイの確認"&gt;&lt;a href="#%e5%88%9d%e5%9b%9e%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4%e3%81%ae%e7%a2%ba%e8%aa%8d" class="header-anchor"&gt;&lt;/a&gt;初回デプロイの確認
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Save and Deploy&lt;/strong&gt; を選択すると数分でビルドが走り、プレビュー URL（&lt;code&gt;&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt;）が発行されます。&lt;br&gt;
ここでまず動作確認をしてから、カスタムドメインを当てに行きます。&lt;/p&gt;
&lt;h2 id="カスタムドメインの設定"&gt;&lt;a href="#%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;カスタムドメインの設定
&lt;/h2&gt;&lt;p&gt;DNS も Cloudflare で管理しているなら、ほぼワンクリックで終わります。&lt;/p&gt;
&lt;p&gt;初回デプロイ完了後、&lt;strong&gt;Add custom domain&lt;/strong&gt; を選択するとカスタムドメインの設定画面に移行します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="336px" data-flex-grow="140" height="685" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/07.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/07_hu_5616fba272d14413.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/07.webp 959w" width="959"&gt;&lt;/p&gt;
&lt;p&gt;メニューからアクセスする場合は、&lt;strong&gt;Workers &amp;amp; Pages&lt;/strong&gt; の &lt;strong&gt;Custom domains&lt;/strong&gt; タブを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="558px" data-flex-grow="232" height="459" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/08.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/08_hu_fda31703fcc12606.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/08.webp 1069w" width="1069"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set up a custom domain&lt;/strong&gt; を選択します。&lt;br&gt;
続いて、適用したいドメインを入力し、&lt;strong&gt;Continue&lt;/strong&gt; をクリックします。&lt;br&gt;
すると、&lt;strong&gt;CNAME レコードが自動で追加されます&lt;/strong&gt;（手動編集は不要です）。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="502px" data-flex-grow="209" height="438" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/09.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/09_hu_4303b6333e2844ea.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/09.webp 917w" width="917"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Activate domain&lt;/strong&gt; をクリックすると設定完了です。&lt;br&gt;
TLS 証明書も Cloudflare 側で自動発行されます（数分待ちます）&lt;/p&gt;
&lt;h3 id="ssltls-モードの変更"&gt;&lt;a href="#ssltls-%e3%83%a2%e3%83%bc%e3%83%89%e3%81%ae%e5%a4%89%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;SSL/TLS モードの変更
&lt;/h3&gt;&lt;p&gt;SSL/TLS モードは &lt;strong&gt;Full (strict)&lt;/strong&gt; にしておきます。&lt;br&gt;
Cloudflare Pages の出口側は有効な証明書を持つので、Full (strict) でもエラーにはならず、Flexible のように HTTPS が中途半端な状態を避けられます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSL/TLS&lt;/strong&gt; の &lt;strong&gt;Overview&lt;/strong&gt; を選択し、SSL/TLS encryption の &lt;strong&gt;Configure&lt;/strong&gt; をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="558px" data-flex-grow="232" height="555" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/10.webp" srcset="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/10_hu_7d12418840684b2a.webp 800w, https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/10.webp 1292w" width="1292"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full (Strict)&lt;/strong&gt; を選択して、&lt;strong&gt;Save&lt;/strong&gt; をクリックして完了です。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="254px" data-flex-grow="105" height="638" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/17/cloudflare-pages-gitlab/11.webp" width="676"&gt;&lt;/p&gt;
&lt;h2 id="気をつけること"&gt;&lt;a href="#%e6%b0%97%e3%82%92%e3%81%a4%e3%81%91%e3%82%8b%e3%81%93%e3%81%a8" class="header-anchor"&gt;&lt;/a&gt;気をつけること
&lt;/h2&gt;&lt;h3 id="node_version-の明示"&gt;&lt;a href="#node_version-%e3%81%ae%e6%98%8e%e7%a4%ba" class="header-anchor"&gt;&lt;/a&gt;&lt;code&gt;NODE_VERSION&lt;/code&gt; の明示
&lt;/h3&gt;&lt;p&gt;Cloudflare Pages のデフォルト Node は古いことがあります。&lt;br&gt;
&lt;code&gt;package.json&lt;/code&gt; の &lt;code&gt;engines&lt;/code&gt; だけでは効かないので、&lt;strong&gt;ビルド設定の環境変数で明示します&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="ビルド時間と無料枠"&gt;&lt;a href="#%e3%83%93%e3%83%ab%e3%83%89%e6%99%82%e9%96%93%e3%81%a8%e7%84%a1%e6%96%99%e6%9e%a0" class="header-anchor"&gt;&lt;/a&gt;ビルド時間と無料枠
&lt;/h3&gt;&lt;p&gt;無料枠は &lt;strong&gt;同時ビルド 1 並列・月 500 回まで&lt;/strong&gt;です。&lt;br&gt;
push のたびにビルドが走るので、頻繁な push を続けると上限に近づきます。CI ライクに何度も push しまくる運用には向きません。&lt;/p&gt;
&lt;p&gt;初回ビルドは &lt;code&gt;npm install&lt;/code&gt; がフレッシュで 5〜10 分かかることもあります。2 回目以降はキャッシュが効きます。&lt;/p&gt;
&lt;h3 id="プレビュー-url-の検索エンジン除外"&gt;&lt;a href="#%e3%83%97%e3%83%ac%e3%83%93%e3%83%a5%e3%83%bc-url-%e3%81%ae%e6%a4%9c%e7%b4%a2%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3%e9%99%a4%e5%a4%96" class="header-anchor"&gt;&lt;/a&gt;プレビュー URL の検索エンジン除外
&lt;/h3&gt;&lt;p&gt;Cloudflare Pages は本番ドメイン以外（&lt;code&gt;&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt; や &lt;code&gt;&amp;lt;branch&amp;gt;.&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt;）にも &lt;strong&gt;自動で &lt;code&gt;X-Robots-Tag: noindex&lt;/code&gt; を付けます&lt;/strong&gt;。Google にプレビュー版がインデックスされる事故は基本的に起きません。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;&lt;a href="#%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;まとめ
&lt;/h2&gt;&lt;p&gt;すべて &lt;strong&gt;無料枠&lt;/strong&gt;で完結し、自前のサーバー運用はゼロです。&lt;br&gt;
GitLab に push して数分で本番反映される、最小構成になっています。&lt;/p&gt;
&lt;p&gt;GitLab Pages + Cloudflare プロキシでも同じことはできますが、TXT 検証や SSL モード調整など「2 サービスを連携させるための作業」が発生します。&lt;br&gt;
Cloudflare 内で完結させると、覚えることが 1 箇所にまとまって精神的に楽です。&lt;/p&gt;</description></item><item><title>Cloudflare で取得した独自ドメインを GitLab Pages に設定する方法</title><link>https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/</link><pubDate>Tue, 12 May 2026 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/</guid><description>&lt;h2 id="全体の流れ"&gt;&lt;a href="#%e5%85%a8%e4%bd%93%e3%81%ae%e6%b5%81%e3%82%8c" class="header-anchor"&gt;&lt;/a&gt;全体の流れ
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitLab側&lt;/strong&gt;: カスタムドメイン登録と検証コードの取得&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitLab側&lt;/strong&gt;: Pagesの公開範囲（Visibility）の設定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare側&lt;/strong&gt;: DNSレコード（CNAME/TXT）の設定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最終確認&lt;/strong&gt;: SSL証明書の発行とプロキシの有効化&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="1-gitlab側でカスタムドメインを追加する"&gt;&lt;a href="#1-gitlab%e5%81%b4%e3%81%a7%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;1. GitLab側でカスタムドメインを追加する
&lt;/h2&gt;&lt;p&gt;まず、GitLabに「このドメインを使います」と伝えて、検証用のコードを発行します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プロジェクトの左メニュー &lt;strong&gt;[Deploy] &amp;gt; [Pages]&lt;/strong&gt; を開きます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domains &amp;amp; settings&lt;/strong&gt; のタブを選択し、&lt;strong&gt;[Add Domain]&lt;/strong&gt; をクリックします。&lt;br&gt;
&lt;img class="gallery-image" data-flex-basis="551px" data-flex-grow="229" height="496" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/01.webp" srcset="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/01_hu_da00e0f781f44ee3.webp 800w, https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/01.webp 1139w" width="1139"&gt;&lt;/li&gt;
&lt;li&gt;使用したいドメイン（例: &lt;code&gt;blog.example.com&lt;/code&gt;）を入力し、&lt;strong&gt;[Create new domain]&lt;/strong&gt; をクリックします。&lt;br&gt;
&lt;img class="gallery-image" data-flex-basis="472px" data-flex-grow="196" height="445" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/02.webp" srcset="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/02_hu_719ccfceb99c9603.webp 800w, https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/02.webp 876w" width="876"&gt;&lt;/li&gt;
&lt;li&gt;表示された画面から以下の2点をメモします。
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TXTレコードの値&lt;/strong&gt;: &lt;code&gt;gitlab-pages-verification-code=...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CNAMEのターゲット&lt;/strong&gt;: &lt;code&gt;username-12345.gitlab.io&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="自分の名前空間targetを確認する方法"&gt;&lt;a href="#%e8%87%aa%e5%88%86%e3%81%ae%e5%90%8d%e5%89%8d%e7%a9%ba%e9%96%93target%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;自分の「名前空間（Target）」を確認する方法
&lt;/h3&gt;&lt;p&gt;GitLab PagesのデフォルトURLを確認してください。
例：&lt;code&gt;https://username-12345.gitlab.io/my-project&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;この場合、Cloudflare側で指定するターゲットは &lt;strong&gt;&lt;code&gt;username-12345.gitlab.io&lt;/code&gt;&lt;/strong&gt; です。
&lt;code&gt;.gitlab.io&lt;/code&gt; の直前まで（スラッシュより前のホスト部分）が、あなたの「名前空間（Namespace）」となります。&lt;/p&gt;
&lt;h2 id="2-プロジェクトはprivateのままpagesだけを公開する"&gt;&lt;a href="#2-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%afprivate%e3%81%ae%e3%81%be%e3%81%bepages%e3%81%a0%e3%81%91%e3%82%92%e5%85%ac%e9%96%8b%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;2. プロジェクトはPrivateのまま、Pagesだけを公開する
&lt;/h2&gt;&lt;p&gt;「ソースコードは見せたくないが、ブログとして誰でも見れるようにしたい」場合は、以下の設定が必須です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;[Settings] &amp;gt; [General]&lt;/strong&gt; を開きます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[Visibility, project features and permissions]&lt;/strong&gt; セクションを展開します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project visibility&lt;/strong&gt; は &lt;strong&gt;[Private]&lt;/strong&gt; のままにします。&lt;/li&gt;
&lt;li&gt;下の方にある &lt;strong&gt;[Pages]&lt;/strong&gt; の権限設定を &lt;strong&gt;[Everyone]&lt;/strong&gt; に変更します。
&lt;ul&gt;
&lt;li&gt;※ここが &lt;code&gt;Only Project Members&lt;/code&gt; だと、独自ドメインにアクセスしてもGitLabのログイン画面が出てしまいます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[Save changes]&lt;/strong&gt; で保存します。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="3-cloudflare側でdnsレコードを設定する"&gt;&lt;a href="#3-cloudflare%e5%81%b4%e3%81%a7dns%e3%83%ac%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;3. Cloudflare側でDNSレコードを設定する
&lt;/h2&gt;&lt;p&gt;Cloudflareの管理画面の左メニューから &lt;strong&gt;[Domains] &amp;gt; [Overview]&lt;/strong&gt; を開き、該当のドメインをクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1048px" data-flex-grow="436" height="357" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/03.webp" srcset="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/03_hu_fa7e6c6c7efaf40f.webp 800w, https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/03.webp 1559w" width="1559"&gt;&lt;/p&gt;
&lt;p&gt;さらに左メニューから &lt;strong&gt;[DNS] &amp;gt; [Records]&lt;/strong&gt; を開き、&lt;strong&gt;Add record&lt;/strong&gt; をクリックして、以下の2つのレコードを追加します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="555px" data-flex-grow="231" height="656" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/04.webp" srcset="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/04_hu_cd257f623ecf097.webp 800w, https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/04.webp 1518w" width="1518"&gt;&lt;/p&gt;
&lt;h3 id="-cnameレコード接続用"&gt;&lt;a href="#-cname%e3%83%ac%e3%82%b3%e3%83%bc%e3%83%89%e6%8e%a5%e7%b6%9a%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;① CNAMEレコード（接続用）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;項目&lt;/th&gt;
 &lt;th style="text-align: left"&gt;設定値の例&lt;/th&gt;
 &lt;th style="text-align: left"&gt;補足&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;CNAME&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;blog&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;サブドメイン部分のみ入力&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Target&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;username-12345.gitlab.io&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;先ほど確認したGitLabのホスト名&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Proxy status&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;DNS only (灰色雲)&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;SSL発行をスムーズにするため最初は必ず「灰色」にする&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="-txtレコードドメイン所有確認用"&gt;&lt;a href="#-txt%e3%83%ac%e3%82%b3%e3%83%bc%e3%83%89%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e6%89%80%e6%9c%89%e7%a2%ba%e8%aa%8d%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;② TXTレコード（ドメイン所有確認用）
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;項目&lt;/th&gt;
 &lt;th style="text-align: left"&gt;設定値の例&lt;/th&gt;
 &lt;th style="text-align: left"&gt;補足&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;TXT&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;_gitlab-pages-verification-code.blog&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;_gitlab-pages-verification-code.&lt;/code&gt; の後にサブドメイン名を付ける&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Content&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;gitlab-pages-verification-code=...&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;GitLabからコピーした検証コード&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="4-仕上げ検証とプロキシ有効化"&gt;&lt;a href="#4-%e4%bb%95%e4%b8%8a%e3%81%92%e6%a4%9c%e8%a8%bc%e3%81%a8%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e6%9c%89%e5%8a%b9%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;4. 仕上げ：検証とプロキシ有効化
&lt;/h2&gt;&lt;h3 id="-gitlabで検証する"&gt;&lt;a href="#-gitlab%e3%81%a7%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;① GitLabで検証する
&lt;/h3&gt;&lt;p&gt;DNS設定後、GitLabのPages設定画面で &lt;strong&gt;[Verify]&lt;/strong&gt;（更新マーク）ボタンを押します。「Verified」になれば成功です。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="451px" data-flex-grow="188" height="470" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/05.webp" srcset="https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/05_hu_e848a83d0f43a8b7.webp 800w, https://blog.ponkotools.com/posts/2026/05/12/cloudflare-gitlab/05.webp 884w" width="884"&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;⚠️ &lt;strong&gt;すぐに認証されない場合があります。&lt;/strong&gt; Cloudflare管理ドメインはDNSのTTLが短いため反映は比較的早いですが、DNSの浸透には最大48時間かかることがあります。Verifyが通らない場合は時間をおいて再試行してください。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="-ssl証明書の発行を待つ"&gt;&lt;a href="#-ssl%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e7%99%ba%e8%a1%8c%e3%82%92%e5%be%85%e3%81%a4" class="header-anchor"&gt;&lt;/a&gt;② SSL証明書の発行を待つ
&lt;/h3&gt;&lt;p&gt;検証完了後、数分〜30分ほどでLet&amp;rsquo;s Encryptの証明書が自動発行され、&lt;code&gt;https://&lt;/code&gt; でアクセスできるようになります。&lt;/p&gt;
&lt;h3 id="-cloudflareのプロキシをonにする"&gt;&lt;a href="#-cloudflare%e3%81%ae%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%82%92on%e3%81%ab%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;③ CloudflareのプロキシをONにする
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;https://&lt;/code&gt; で正常に表示されたことを確認してから、CloudflareのDNSレコードを &lt;strong&gt;[Proxied（オレンジ雲）]&lt;/strong&gt; に切り替えます。&lt;/p&gt;
&lt;h4 id="プロキシを-on-にするメリット"&gt;&lt;a href="#%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%82%92-on-%e3%81%ab%e3%81%99%e3%82%8b%e3%83%a1%e3%83%aa%e3%83%83%e3%83%88" class="header-anchor"&gt;&lt;/a&gt;プロキシを ON にするメリット
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CDNによる高速化&lt;/strong&gt;: 画像やJSがキャッシュされ、表示速度が向上します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;セキュリティ強化&lt;/strong&gt;: DDoS保護やWAFが利用可能になります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;アクセス解析&lt;/strong&gt;: Cloudflare側でトラフィックやアクセス地域を確認できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-cloudflareのssltls設定を変更する"&gt;&lt;a href="#-cloudflare%e3%81%aessltls%e8%a8%ad%e5%ae%9a%e3%82%92%e5%a4%89%e6%9b%b4%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;④ CloudflareのSSL/TLS設定を変更する
&lt;/h3&gt;&lt;p&gt;プロキシを有効にしたら、Cloudflareの &lt;strong&gt;[SSL/TLS] &amp;gt; [Overview]&lt;/strong&gt; を開き、暗号化モードを確認します。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;モード&lt;/th&gt;
 &lt;th style="text-align: left"&gt;説明&lt;/th&gt;
 &lt;th style="text-align: left"&gt;推奨&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;Full&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;GitLab側の証明書を検証せず暗号化&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;初心者・通常利用向け&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;Full (strict)&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;GitLab側にLet&amp;rsquo;s Encryptなど信頼されたCA発行の証明書が必要&lt;/td&gt;
 &lt;td style="text-align: left"&gt;SSL発行が正常に完了していれば利用可&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;⚠️ &lt;code&gt;Full (strict)&lt;/code&gt; はSSL証明書が有効な状態でのみ機能します。証明書の発行前や更新タイミングで一時的にエラーになるリスクがあるため、迷ったら &lt;strong&gt;&lt;code&gt;Full&lt;/code&gt;&lt;/strong&gt; を選択してください。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="5-運用上の注意キャッシュの扱い"&gt;&lt;a href="#5-%e9%81%8b%e7%94%a8%e4%b8%8a%e3%81%ae%e6%b3%a8%e6%84%8f%e3%82%ad%e3%83%a3%e3%83%83%e3%82%b7%e3%83%a5%e3%81%ae%e6%89%b1%e3%81%84" class="header-anchor"&gt;&lt;/a&gt;5. 運用上の注意：キャッシュの扱い
&lt;/h2&gt;&lt;p&gt;Cloudflareのプロキシを有効にすると、CSSや画像などの静的ファイルがキャッシュされます。
&lt;strong&gt;サイトを更新しても古いコンテンツが表示される場合&lt;/strong&gt;は、Cloudflareのキャッシュをクリアしてください。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;手動でキャッシュをクリアする方法:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cloudflareダッシュボードの &lt;strong&gt;[Caching] &amp;gt; [Configuration]&lt;/strong&gt; を開く&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[Purge Cache]&lt;/strong&gt; &amp;gt; &lt;strong&gt;[Purge Everything]&lt;/strong&gt;（または特定URLを指定）を実行する&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="まとめ"&gt;&lt;a href="#%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;まとめ
&lt;/h2&gt;&lt;p&gt;GitLab Pagesを独自ドメインで運用する主なポイントは以下の3点です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;正しいCNAMEターゲットを設定する&lt;/strong&gt; — GitLabのPages URLから実際のホスト名を確認して使う&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PagesのVisibilityを「Everyone」にする&lt;/strong&gt; — Privateプロジェクトでも公開アクセスを許可する&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL発行前はプロキシを灰色に保つ&lt;/strong&gt; — 証明書が発行されてからオレンジ雲に切り替える&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>ターミナルから GitLab を操る：公式 CLI「glab」導入・活用ガイド</title><link>https://blog.ponkotools.com/posts/2026/05/10/glab/</link><pubDate>Sun, 10 May 2026 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2026/05/10/glab/</guid><description>&lt;p&gt;ブラウザを開かずに Issue を確認したり、MR（マージリクエスト）を作成したり、CI/CD パイプラインの状況を監視したりできるため、エンジニアの生産性を大きく向上させてくれます。&lt;/p&gt;
&lt;h2 id="1-インストール方法"&gt;&lt;a href="#1-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;1. インストール方法
&lt;/h2&gt;&lt;p&gt;devcontainer を使っていない場合は、ホスト側に &lt;code&gt;glab&lt;/code&gt; をインストールして使います。devcontainer を使う場合は、コンテナイメージに &lt;code&gt;glab&lt;/code&gt; をインストールしておくか、devcontainer の &lt;code&gt;Dockerfile&lt;/code&gt; / &lt;code&gt;devcontainer.json&lt;/code&gt; で導入しておきます。&lt;/p&gt;
&lt;p&gt;一般的な手順としては、&lt;code&gt;Dockerfile&lt;/code&gt; に &lt;code&gt;curl&lt;/code&gt; で &lt;code&gt;glab&lt;/code&gt; の公式パッケージを取得して &lt;code&gt;apt install&lt;/code&gt; するか、&lt;code&gt;apt&lt;/code&gt; リポジトリからインストールする形です。コンテナ内で &lt;code&gt;glab --version&lt;/code&gt; を実行して、インストールが正しくできていることを確認してください。&lt;/p&gt;
&lt;p&gt;OS ごとの主要なインストールコマンドは以下の通りです。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;OS&lt;/th&gt;
 &lt;th&gt;インストールコマンド&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;brew install glab&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Windows (winget)&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;winget install glab&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Windows (scoop)&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;scoop install glab&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Linux (Ubuntu/Debian)&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;sudo apt install glab&lt;/code&gt;（※公式リポジトリ推奨）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;インストール後、&lt;code&gt;glab --version&lt;/code&gt; で正常にインストールされたか確認しましょう。&lt;/p&gt;
&lt;p&gt;バージョンが古かったり、上記でインストールできない場合は、公式リリースからダウンロードしてインストールします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://gitlab.com/gitlab-org/cli/-/releases" target="_blank" rel="noopener"
 &gt;https://gitlab.com/gitlab-org/cli/-/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば以下です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://gitlab.com/gitlab-org/cli/-/releases/v1.97.0/downloads/glab_1.97.0_linux_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dpkg -i glab_1.97.0_linux_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="2-初期設定認証"&gt;&lt;a href="#2-%e5%88%9d%e6%9c%9f%e8%a8%ad%e5%ae%9a%e8%aa%8d%e8%a8%bc" class="header-anchor"&gt;&lt;/a&gt;2. 初期設定（認証）
&lt;/h2&gt;&lt;p&gt;インストールが完了したら、GitLab アカウントと連携させます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;glab auth login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行すると対話形式で以下の項目を聞かれます：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitLab インスタンスの種類&lt;/strong&gt;: GitLab.com か 自前運用のサーバー（Self-Managed）かを選択。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;認証方法&lt;/strong&gt;: &lt;code&gt;Web&lt;/code&gt; を選択するとブラウザが開いて簡単に認証できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プロトコル&lt;/strong&gt;: &lt;code&gt;SSH&lt;/code&gt; または &lt;code&gt;HTTPS&lt;/code&gt; を選択。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;設定が完了すると、&lt;code&gt;~/.config/glab-cli/config.yml&lt;/code&gt; に設定が保存されます。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-devcontainer-での認証情報共有"&gt;&lt;a href="#3-devcontainer-%e3%81%a7%e3%81%ae%e8%aa%8d%e8%a8%bc%e6%83%85%e5%a0%b1%e5%85%b1%e6%9c%89" class="header-anchor"&gt;&lt;/a&gt;3. devcontainer での認証情報共有
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;glab&lt;/code&gt; の認証情報は &lt;code&gt;~/.config/glab-cli/config.yml&lt;/code&gt; に保存されます。devcontainer をリビルドするとコンテナ内の &lt;code&gt;~/.config/glab-cli&lt;/code&gt; が消えて再ログインが必要になるため、ホスト側の設定を bind mount で共有しておくと便利です。&lt;/p&gt;
&lt;p&gt;一般的には、&lt;code&gt;.devcontainer/devcontainer.json&lt;/code&gt; の &lt;code&gt;mounts&lt;/code&gt; にホストの &lt;code&gt;~/.config/glab-cli&lt;/code&gt; を追加します。例:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsonc" data-lang="jsonc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;mounts&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;source=${localEnv:HOME}/.config/glab-cli,target=/home/vscode/.config/glab-cli,type=bind,consistency=cached&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もし &lt;code&gt;gh&lt;/code&gt; など別の CLI も devcontainer 内で使うなら、同じように &lt;code&gt;~/.config/gh&lt;/code&gt; を共有することもできます。&lt;/p&gt;
&lt;p&gt;ホスト側に &lt;code&gt;~/.config/glab-cli&lt;/code&gt; が存在していれば、ホストで一度 &lt;code&gt;glab auth login&lt;/code&gt; しておけばコンテナ側でも同じ認証を使えます。ホストにディレクトリがない場合は、&lt;code&gt;mkdir -p ~/.config/glab-cli&lt;/code&gt; で空ディレクトリを作成しておけばマウントが通ります。&lt;/p&gt;
&lt;p&gt;このようにしておけば、&lt;code&gt;glab&lt;/code&gt; の認証設定をホストと devcontainer で共通化し、コンテナ再構築後も再ログイン不要で作業を続けやすくなります。&lt;/p&gt;
&lt;h2 id="4-よく使う基本コマンド集"&gt;&lt;a href="#4-%e3%82%88%e3%81%8f%e4%bd%bf%e3%81%86%e5%9f%ba%e6%9c%ac%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e9%9b%86" class="header-anchor"&gt;&lt;/a&gt;4. よく使う基本コマンド集
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;glab&lt;/code&gt; のコマンド体系は &lt;code&gt;glab &amp;lt;リソース名&amp;gt; &amp;lt;アクション&amp;gt;&lt;/code&gt; という形式で、&lt;code&gt;gh&lt;/code&gt; と非常に似ています。&lt;/p&gt;
&lt;h3 id="-merge-request-mr-を操作する"&gt;&lt;a href="#-merge-request-mr-%e3%82%92%e6%93%8d%e4%bd%9c%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;■ Merge Request (MR) を操作する
&lt;/h3&gt;&lt;p&gt;開発のメイン作業となる MR 操作です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MR の一覧表示&lt;/strong&gt;: &lt;code&gt;glab mr list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MR の作成&lt;/strong&gt;: &lt;code&gt;glab mr create --fill&lt;/code&gt;（現在のブランチから自動入力で作成）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MR の詳細表示&lt;/strong&gt;: &lt;code&gt;glab mr view &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MR を承認&lt;/strong&gt;: &lt;code&gt;glab mr approve &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MR をマージ&lt;/strong&gt;: &lt;code&gt;glab mr merge &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-issue-課題-を管理する"&gt;&lt;a href="#-issue-%e8%aa%b2%e9%a1%8c-%e3%82%92%e7%ae%a1%e7%90%86%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;■ Issue (課題) を管理する
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Issue 一覧&lt;/strong&gt;: &lt;code&gt;glab issue list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue 作成&lt;/strong&gt;: &lt;code&gt;glab issue create -t &amp;quot;タイトル&amp;quot; -description &amp;quot;内容&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-cicd-パイプラインを確認する"&gt;&lt;a href="#-cicd-%e3%83%91%e3%82%a4%e3%83%97%e3%83%a9%e3%82%a4%e3%83%b3%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;■ CI/CD パイプラインを確認する
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;glab&lt;/code&gt; 独自の強力な機能の一つが、CI パイプラインのリアルタイム監視です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;パイプラインの状態表示&lt;/strong&gt;: &lt;code&gt;glab pipeline status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;実行中のログをリアルタイム表示&lt;/strong&gt;: &lt;code&gt;glab pipeline ci view&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失敗したジョブの再実行&lt;/strong&gt;: &lt;code&gt;glab ci retry&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-gh-と-glab-の主な対応表"&gt;&lt;a href="#4-gh-%e3%81%a8-glab-%e3%81%ae%e4%b8%bb%e3%81%aa%e5%af%be%e5%bf%9c%e8%a1%a8" class="header-anchor"&gt;&lt;/a&gt;4. &lt;code&gt;gh&lt;/code&gt; と &lt;code&gt;glab&lt;/code&gt; の主な対応表
&lt;/h2&gt;&lt;p&gt;GitHub CLI に慣れている方向けのクイック比較です。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;機能&lt;/th&gt;
 &lt;th&gt;GitHub (&lt;code&gt;gh&lt;/code&gt;)&lt;/th&gt;
 &lt;th&gt;GitLab (&lt;code&gt;glab&lt;/code&gt;)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;認証&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gh auth login&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;glab auth login&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PR / MR 作成&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gh pr create&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;&lt;code&gt;glab mr create&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PR / MR チェックアウト&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gh pr checkout &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;&lt;code&gt;glab mr checkout &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;リポジトリ作成&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gh repo create&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;&lt;code&gt;glab project create&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CI 監視&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gh run watch&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;&lt;code&gt;glab pipeline ci view&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-自社運用の-gitlab-self-managed-で使うコツ"&gt;&lt;a href="#5-%e8%87%aa%e7%a4%be%e9%81%8b%e7%94%a8%e3%81%ae-gitlab-self-managed-%e3%81%a7%e4%bd%bf%e3%81%86%e3%82%b3%e3%83%84" class="header-anchor"&gt;&lt;/a&gt;5. 自社運用の GitLab (Self-Managed) で使うコツ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;glab&lt;/code&gt; は GitLab.com だけでなく、会社などで独自に立てている GitLab サーバーでも使えます。その場合、環境変数でホストを指定しておくと便利です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;GITLAB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gitlab.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="まとめ"&gt;&lt;a href="#%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;glab&lt;/code&gt; を導入することで、「コードを書く → プッシュする → ブラウザで MR を作る → CI の完了を待つ」という一連の流れをターミナルから一歩も出ずに行えるようになります。&lt;/p&gt;
&lt;p&gt;まずは &lt;code&gt;glab mr list&lt;/code&gt; から始めて、快適な GitLab ライフを送りましょう！&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;参考リンク:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/editor_extensions/gitlab_cli/" target="_blank" rel="noopener"
 &gt;GitLab CLI 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://gitlab.com/gitlab-org/cli" target="_blank" rel="noopener"
 &gt;GitHub リポジトリ (gitlab-org/cli)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GitLab Pages でディレクトリ一覧を表示したい</title><link>https://blog.ponkotools.com/posts/2023/12/25/gitlab-pages/</link><pubDate>Mon, 25 Dec 2023 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2023/12/25/gitlab-pages/</guid><description>&lt;p&gt;GitLab Pages で公開しているサイトにアクセスしたときに、配下ディレクトリの一覧を表示させる方法です。&lt;/p&gt;
&lt;p&gt;GitLab 12.8 までは nginx の autoindex を有効にして index of で表示させることができたようですが、セキュリティの観点からその機能は削除されたそうです。&lt;/p&gt;
&lt;p&gt;なので、どうにかしてインデックスページを作成し、GitLab Pages に公開するしかありません。
例えば、Hugo や Jekyll で Sitemap やインデックスページの自動生成機能を使う方法があるようです。&lt;/p&gt;
&lt;p&gt;ただ、今回私はシェルスクリプトファイルで作成することにしました。&lt;/p&gt;
&lt;p&gt;以下、サンプルです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 公開ディレクトリ内のディレクトリ一覧を取得&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;dirs&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;public/*/&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HTMLで一覧を表示するための変数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;ul&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ディレクトリのHTMLリストを生成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; d in &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# フォルダ一覧のみに制限するため、publicディレクトリ内のサブディレクトリのみを対象としています。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$d&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sed -e &lt;span class="s1"&gt;&amp;#39;s/public\///&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/\///&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$list&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#39;&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$list&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/ul&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# index.htmlファイルを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;タイトル&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; public/index.html &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&amp;lt;html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;meta charset=&amp;#34;UTF-8&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;title&amp;gt;$title&amp;lt;/title&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;/head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;h1&amp;gt;$title&amp;lt;/h1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; $list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;lt;/body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&amp;lt;/html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを、&lt;code&gt;.gitlab-ci.yml&lt;/code&gt; の script の最後に実行すれば OK です。&lt;/p&gt;
&lt;p&gt;上記はディレクトリに限定していますが、応用でファイル一覧を出力できると思います。&lt;/p&gt;</description></item><item><title>GitLab Pages でブランチ毎にディレクトリを分けて公開したい</title><link>https://blog.ponkotools.com/posts/2023/12/20/gitlab-pages/</link><pubDate>Wed, 20 Dec 2023 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2023/12/20/gitlab-pages/</guid><description>&lt;p&gt;mkdocs で作成したサイトを GitLab Pages で公開していたのですが、これをブランチ毎にディレクトリを分けて公開するようにしました。&lt;/p&gt;
&lt;p&gt;基本的には、キャッシュを有効にするだけで可能です。&lt;br&gt;
各ブランチでの成果物も一緒に Pages で公開したいため、キャッシュのキーは固定値にします。&lt;br&gt;
以下、 &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; の抜粋です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;mkdocs build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;rm -rf public/${CI_COMMIT_REF_NAME}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;mv site public/${CI_COMMIT_REF_NAME}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# ブランチ毎に別のキャッシュを利用したい場合はブランチ名をキーにするが、&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 今回は全ブランチのビルド結果も一緒に公開したいため、キーは全ブランチで共通の固定値にする&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;common-key&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;#key: &amp;#34;$CI_COMMIT_REF_NAME&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;site&lt;/code&gt; ディレクトリが mkdocs の成果物が入っているディレクトリですが、これを &lt;code&gt;public/ブランチ名&lt;/code&gt; に配置しています。&lt;/p&gt;
&lt;h2 id="注意点"&gt;&lt;a href="#%e6%b3%a8%e6%84%8f%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;注意点
&lt;/h2&gt;&lt;p&gt;デフォルトでは、保護されたブランチと保護されていないブランチではキャッシュが共有されないため、この場合はプロジェクトの設定変更が必要です。&lt;br&gt;
これを知らずに何度試してもキャッシュが共有されずはまっていました・・・。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://gitlab-docs.creationline.com/ee/ci/caching/#use-the-same-cache-for-all-branches" target="_blank" rel="noopener"
 &gt;https://gitlab-docs.creationline.com/ee/ci/caching/#use-the-same-cache-for-all-branches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;変更する設定は以下です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;サイドメニューより、&lt;code&gt;Settings&lt;/code&gt; &amp;gt; &lt;code&gt;CI/CD&lt;/code&gt; を選択&lt;/li&gt;
&lt;li&gt;&lt;code&gt;General pipelines&lt;/code&gt; を開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Use separate caches for protected branches&lt;/code&gt; のチェックボックスをオフにする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Save changes&lt;/code&gt; をクリックして保存&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://dev.to/zenika/gitlab-pages-preview-the-no-compromise-hack-to-serve-per-branch-pages-5599" target="_blank" rel="noopener"
 &gt;https://dev.to/zenika/gitlab-pages-preview-the-no-compromise-hack-to-serve-per-branch-pages-5599&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://gist.github.com/donaldpipowitch/2590b20520b2cf6ae01aab4f7b55f8fa" target="_blank" rel="noopener"
 &gt;https://gist.github.com/donaldpipowitch/2590b20520b2cf6ae01aab4f7b55f8fa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://gitlab-docs.creationline.com/ee/ci/caching/#use-the-same-cache-for-all-branches" target="_blank" rel="noopener"
 &gt;https://gitlab-docs.creationline.com/ee/ci/caching/#use-the-same-cache-for-all-branches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GitLab CI/CD で Uploading artifacts to coordinator... too large archive のエラーが表示された</title><link>https://blog.ponkotools.com/posts/2022/07/08/gitlab/</link><pubDate>Fri, 08 Jul 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/07/08/gitlab/</guid><description>&lt;p&gt;GitLab CI/CD で成果物をアップロードする際に、サイズが大きすぎるとのエラーが表示されました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Uploading&lt;/span&gt; &lt;span class="n"&gt;artifacts&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;coordinator&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;large&lt;/span&gt; &lt;span class="n"&gt;archive&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;XXXX&lt;/span&gt; &lt;span class="n"&gt;responseStatus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;413&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;Entity&lt;/span&gt; &lt;span class="n"&gt;Too&lt;/span&gt; &lt;span class="n"&gt;Large&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;413&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;Entity&lt;/span&gt; &lt;span class="n"&gt;Too&lt;/span&gt; &lt;span class="n"&gt;Large&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;XXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FATAL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;large&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Job&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;exit&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="gitlab-の設定"&gt;&lt;a href="#gitlab-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;GitLab の設定
&lt;/h2&gt;&lt;p&gt;まずは GitLab の以下の設定を確認します。&lt;/p&gt;
&lt;p&gt;「Settings &amp;gt; Continuous Integration and Deployment &amp;gt; Maximum artifacts size (MB) 」&lt;/p&gt;
&lt;p&gt;デフォルトでは 100MB に設定されているので、必要ならここを変更します。&lt;/p&gt;
&lt;p&gt;しかし、今回は 7MB 程度のファイルだったので、これが原因ではありませんでした。&lt;/p&gt;
&lt;h2 id="リバースプロキシの設定"&gt;&lt;a href="#%e3%83%aa%e3%83%90%e3%83%bc%e3%82%b9%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;リバースプロキシの設定
&lt;/h2&gt;&lt;p&gt;今回 nginx でリバースプロキシの設定を行っていたのですが、&lt;code&gt;client_max_body_size&lt;/code&gt; の設定を行っていなかったのが原因でした。&lt;br&gt;
&lt;code&gt;client_max_body_size&lt;/code&gt; のデフォルト値は 1MB だそうです。&lt;br&gt;
とりあえず以下のように &lt;code&gt;0&lt;/code&gt; を設定して無制限にしておきました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen 80;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server_name example.com;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; client_max_body_size 0;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pauledenburg.com/gitlab-ci-upload-artifact-fails-large/" target="_blank" rel="noopener"
 &gt;https://pauledenburg.com/gitlab-ci-upload-artifact-fails-large/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>OpenAPI + Swagger + Redoc + GitLab Pages で API ドキュメントを管理する</title><link>https://blog.ponkotools.com/posts/2022/05/24/openapi/</link><pubDate>Tue, 24 May 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/05/24/openapi/</guid><description>&lt;p&gt;APIドキュメントを簡単に作成・閲覧できるようにしたいと思い、OpenAPI で作成、Swagger および Redoc で表示、GitLab Pages で公開までを行いました。&lt;/p&gt;
&lt;h2 id="概要"&gt;&lt;a href="#%e6%a6%82%e8%a6%81" class="header-anchor"&gt;&lt;/a&gt;概要
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OpenAPI で yaml を作成&lt;/li&gt;
&lt;li&gt;GitLab CI/CD により自動で Swagger および Redoc でビルドし、GitLab Pages に公開&lt;/li&gt;
&lt;li&gt;ローカル環境用に Swagger および Redoc を Docker で動かす&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ディレクトリ構造"&gt;&lt;a href="#%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e6%a7%8b%e9%80%a0" class="header-anchor"&gt;&lt;/a&gt;ディレクトリ構造
&lt;/h2&gt;&lt;p&gt;今回試しに作成したファイル一式は以下となります。
詳細は後述します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tree -a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .gitlab-ci.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── README.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── docker-compose.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── openapi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── openapi.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── public
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── index.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="openapi-の-yaml-を作成"&gt;&lt;a href="#openapi-%e3%81%ae-yaml-%e3%82%92%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;OpenAPI の yaml を作成
&lt;/h2&gt;&lt;p&gt;Open API Specification (OAS) は REST API の仕様を記述するフォーマットです。
記述方法についてはググったらたくさん出てくるので割愛します。&lt;/p&gt;
&lt;p&gt;例えば、以下のような yaml を作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3.0.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;info&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.0.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;OpenAPI Sample&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;get&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Get Users&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;OK&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ローカル環境の作成"&gt;&lt;a href="#%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab%e7%92%b0%e5%a2%83%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;ローカル環境の作成
&lt;/h2&gt;&lt;p&gt;ひとまず GitLab は置いておき、まずはローカル環境で Swagger および Redoc が動くようにしてみます。&lt;br&gt;
３つのサービスを動かしたかったので、docker-compose 使いました。&lt;br&gt;
作成した docker-compose.yml は以下です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# エディター&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;swagger-editor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;swaggerapi/swagger-editor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;8081:8080&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# ビューワー（Swagger-UI 版）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;swagger-ui&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;swaggerapi/swagger-ui&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./openapi:/usr/share/nginx/html/openapi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./openapi/openapi.yaml&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Swagger UIの画面を開いたときに初期値として表示するファイル&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;8082:8080&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# ビューワー（Redoc 版）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redoc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redocly/redoc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./openapi:/usr/share/nginx/html/openapi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SPEC_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./openapi/openapi.yaml&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Redocの画面を開いたときに初期値として表示するファイル&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# nginx port(default:80)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;8083:8080&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;特に難しいところはないかと思います。&lt;br&gt;
&lt;code&gt;docker-compose up&lt;/code&gt; で動かしたあと、ブラウザでアクセスすればOKです。&lt;/p&gt;
&lt;p&gt;http://localhost:8081 で Swagger Editor にアクセスして編集が行えます。&lt;br&gt;
http://localhost:8082 で Swagger UI での表示を確認できます。&lt;br&gt;
http://localhost:8083 で Redoc での表示を確認できます。&lt;/p&gt;
&lt;p&gt;ただ、Swagger Editor は別にいらなかったかもしれません。&lt;br&gt;
私の場合、結局 VSCode で yaml を編集し、ブラウザの表示を更新して確認、ってやってます。&lt;/p&gt;
&lt;p&gt;閲覧に関しては Swagger より Redoc のほうが個人的に見やすいですね。&lt;/p&gt;
&lt;h2 id="gitlab-pages-で公開する"&gt;&lt;a href="#gitlab-pages-%e3%81%a7%e5%85%ac%e9%96%8b%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;GitLab Pages で公開する
&lt;/h2&gt;&lt;p&gt;ローカルでの環境は以上で整ったので、次は GitLab に push したら自動ビルドを行って GitLab Pages に公開するように設定します。&lt;br&gt;
GitLab Pages や GitLab CI/CD については割愛します。&lt;/p&gt;
&lt;p&gt;Swagger + GitLab Pages については以下のページが参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://lab.astamuse.co.jp/entry/2019/11/13/114500" target="_blank" rel="noopener"
 &gt;https://lab.astamuse.co.jp/entry/2019/11/13/114500&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただ、今回 swagger-ui-dist のバージョンを上げたので、&lt;code&gt;sed&lt;/code&gt; コマンドで修正するファイルを &lt;code&gt;index.html&lt;/code&gt; から &lt;code&gt;swagger-initializer.js&lt;/code&gt; に変更する必要がありました。&lt;br&gt;
これについては以下のページが参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/hidao/items/d13e7dda3da02d37dd45" target="_blank" rel="noopener"
 &gt;https://qiita.com/hidao/items/d13e7dda3da02d37dd45&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Redoc + GitLab Pages については以下のページが参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://medium.com/hoursofoperation/auto-generate-swagger-docs-to-gitlab-pages-ca040230df3a" target="_blank" rel="noopener"
 &gt;https://medium.com/hoursofoperation/auto-generate-swagger-docs-to-gitlab-pages-ca040230df3a&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上の２つを組み合わせ、最終的に作成した .gitlab-ci.yml は以下です。&lt;br&gt;
Swagger と Redoc のそれぞれで閲覧できるようにディレクトリを分けてみました。&lt;br&gt;
プロキシ環境下でなければプロキシ関係の設定は不要です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;node:18-alpine&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# プロキシサーバー&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PROXY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://example:8080&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# ドキュメントのあるディレクトリ&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DOCS_FOLDER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;swagger&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# ドキュメントファイル&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SPEC_TO_DISPLAY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;openapi.yaml&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# デプロイ先&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DEPLOY_SWAGGER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;public/swagger&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DEPLOY_REDOC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;public/redoc&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./node_modules&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deploy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;before_script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# プロキシ環境下での下準備&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;npm -g config set proxy $PROXY&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;npm -g config set https-proxy $PROXY&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;npm -g config set registry http://registry.npmjs.org/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;npm config set strict-ssl false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Swagger UI&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;npm install swagger-ui-dist@4.11.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Redoc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;npm install -g redoc-cli@0.13.14&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;mkdir -p $DEPLOY_SWAGGER&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;mkdir -p $DEPLOY_REDOC&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Swagger UI&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;cp -rp node_modules/swagger-ui-dist/* $DEPLOY_SWAGGER&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;cp -rp $DOCS_FOLDER/* $DEPLOY_SWAGGER&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sed -i &amp;#34;s#https://petstore\.swagger\.io/v2/swagger\.json#$SPEC_TO_DISPLAY#g&amp;#34; $DEPLOY_SWAGGER/swagger-initializer.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Redoc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;redoc-cli build -o $DEPLOY_REDOC/index.html $DOCS_FOLDER/$SPEC_TO_DISPLAY&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ちなみに、Swagger の yaml ファイルは GitLab 上で Swagger でプレビュー表示されるので、外部に公開する必要がなければこれで十分かもしれません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.kyanny.me/entry/2020/08/06/012807" target="_blank" rel="noopener"
 &gt;https://blog.kyanny.me/entry/2020/08/06/012807&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://medium.com/hoursofoperation/auto-generate-swagger-docs-to-gitlab-pages-ca040230df3a" target="_blank" rel="noopener"
 &gt;https://medium.com/hoursofoperation/auto-generate-swagger-docs-to-gitlab-pages-ca040230df3a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://overworker.hatenablog.jp/entry/2020/08/10/172207" target="_blank" rel="noopener"
 &gt;https://overworker.hatenablog.jp/entry/2020/08/10/172207&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/WinterYukky/items/366ed76dd4763a9b01e0" target="_blank" rel="noopener"
 &gt;https://qiita.com/WinterYukky/items/366ed76dd4763a9b01e0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://lab.astamuse.co.jp/entry/2019/11/13/114500" target="_blank" rel="noopener"
 &gt;https://lab.astamuse.co.jp/entry/2019/11/13/114500&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.kyanny.me/entry/2020/08/06/012807" target="_blank" rel="noopener"
 &gt;https://blog.kyanny.me/entry/2020/08/06/012807&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>MkDocs + GitLab Pages でドキュメント管理</title><link>https://blog.ponkotools.com/posts/2022/05/23/mkdocs/</link><pubDate>Mon, 23 May 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/05/23/mkdocs/</guid><description>&lt;p&gt;マークダウンで書いたドキュメントを簡単に管理・閲覧できるようにしたいと思い、MkDocs と GitLab Pages を使ってみました。&lt;/p&gt;
&lt;h2 id="概要"&gt;&lt;a href="#%e6%a6%82%e8%a6%81" class="header-anchor"&gt;&lt;/a&gt;概要
&lt;/h2&gt;&lt;p&gt;Markdown で書いたドキュメントを MkDocs を使って静的サイトに変換します。&lt;br&gt;
MkDocs のビルドは GitLab CI/CD を使って自動で行い、出力された静的サイトを GitLab Pages で公開します。&lt;br&gt;
また、ローカル環境での確認用に、Docker を使って MkDocs が動作する環境を作成します。&lt;/p&gt;
&lt;p&gt;GitLab-Runner の設定は済んでいる前提です。&lt;/p&gt;
&lt;h2 id="ローカル環境の構築"&gt;&lt;a href="#%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab%e7%92%b0%e5%a2%83%e3%81%ae%e6%a7%8b%e7%af%89" class="header-anchor"&gt;&lt;/a&gt;ローカル環境の構築
&lt;/h2&gt;&lt;p&gt;ひとまず GitLab は置いておき、まずはローカル環境で MkDocs が動くようにしてみます。&lt;br&gt;
作成した Dockerfile は以下です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FROM python:3.9-slim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RUN pip install \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdocs \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdocs-material \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pygments
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CMD [&amp;#34;mkdocs&amp;#34;, &amp;#34;serve&amp;#34;, &amp;#34;-a&amp;#34;, &amp;#34;0.0.0.0:8000&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ビルドします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker build -t mkdocs .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ドキュメントの新規作成初回のみ"&gt;&lt;a href="#%e3%83%89%e3%82%ad%e3%83%a5%e3%83%a1%e3%83%b3%e3%83%88%e3%81%ae%e6%96%b0%e8%a6%8f%e4%bd%9c%e6%88%90%e5%88%9d%e5%9b%9e%e3%81%ae%e3%81%bf" class="header-anchor"&gt;&lt;/a&gt;ドキュメントの新規作成（初回のみ）
&lt;/h3&gt;&lt;p&gt;ドキュメントを何も作成していない状態でコンテナを起動するとエラーとなります。&lt;br&gt;
まずはコンテナ起動時に &lt;code&gt;mkdocs new doc&lt;/code&gt; を実行してドキュメントを新規作成しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it --rm \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -u &amp;#34;$(id -u $USER):$(id -g $USER)&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v $(pwd)/workspace:/workspace \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --workdir=&amp;#34;/workspace&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdocs mkdocs new doc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下のようにファイルが作成されます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tree workspace/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;workspace/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── doc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── docs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │   └── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── mkdocs.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="コンテナの起動"&gt;&lt;a href="#%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e3%81%ae%e8%b5%b7%e5%8b%95" class="header-anchor"&gt;&lt;/a&gt;コンテナの起動
&lt;/h3&gt;&lt;p&gt;ドキュメント作成済みであれば、以下のようにしてコンテナを起動します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it --rm &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -u &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;id -u &lt;span class="nv"&gt;$USER&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;id -g &lt;span class="nv"&gt;$USER&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;/workspace:/workspace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 8000:8000 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --workdir&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/workspace/doc&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdocs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ブラウザで http://localhost:8000 にアクセスすれば MkDocs のページが表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="467px" data-flex-grow="194" height="625" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2022/05/23/mkdocs/01.webp" srcset="https://blog.ponkotools.com/posts/2022/05/23/mkdocs/01_hu_909a3887eac5dca2.webp 800w, https://blog.ponkotools.com/posts/2022/05/23/mkdocs/01.webp 1217w" width="1217"&gt;&lt;/p&gt;
&lt;h2 id="gitlab-pages-で公開する"&gt;&lt;a href="#gitlab-pages-%e3%81%a7%e5%85%ac%e9%96%8b%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;GitLab Pages で公開する
&lt;/h2&gt;&lt;p&gt;ローカルでの環境は以上で整ったので、次は GitLab に push したら MkDocs のビルドを行って GitLab Pages に公開するように設定します。&lt;br&gt;
作成した &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; は以下です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;python:3.9-slim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;before_script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pip install --upgrade pip&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pip install mkdocs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pip install mkdocs-material&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pip install pygments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;cd workspace/doc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;mkdocs build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;mv site ../../public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;特に難しいところはないかと思います。&lt;br&gt;
&lt;code&gt;mkdocs build&lt;/code&gt; でビルドすると &lt;code&gt;site&lt;/code&gt; に出力されるので、&lt;code&gt;public&lt;/code&gt; にリネームして GitLab Pages に公開しています。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/hykisk/items/ebff2f7cd2e8100a6bbe" target="_blank" rel="noopener"
 &gt;https://qiita.com/hykisk/items/ebff2f7cd2e8100a6bbe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kurotorimkdocs.gitlab.io/kurotorimemo/040-Documents/MkDocs/mkdocsGitLab/" target="_blank" rel="noopener"
 &gt;https://kurotorimkdocs.gitlab.io/kurotorimemo/040-Documents/MkDocs/mkdocsGitLab/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GitLab でプライベートリポジトリの分も草を生やす</title><link>https://blog.ponkotools.com/posts/2022/05/02/gitlab/</link><pubDate>Mon, 02 May 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/05/02/gitlab/</guid><description>&lt;p&gt;GitLab のプロフィールに表示されるコミットグラフですが、デフォルトでは自分以外の人からは Public なリポジトリの分しか見えません。&lt;/p&gt;
&lt;p&gt;Private なリポジトリのコミット分も見えるようにするには、以下の設定を変更します。&lt;/p&gt;
&lt;p&gt;Preferences &amp;gt; Profile &amp;gt; Private contributions&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.igorkromin.net/index.php/2018/09/13/gitlab-finally-shows-private-project-contributions-in-the-profile-commit-graph/" target="_blank" rel="noopener"
 &gt;https://www.igorkromin.net/index.php/2018/09/13/gitlab-finally-shows-private-project-contributions-in-the-profile-commit-graph/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Ubuntu に GitLab-Runner を直接インストールする</title><link>https://blog.ponkotools.com/posts/2022/04/14/gitlab-runner/</link><pubDate>Thu, 14 Apr 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/04/14/gitlab-runner/</guid><description>&lt;p&gt;docker で GitLab-Runner を動かしたことはありましたが、今回初めてホストに直接インストールしました。&lt;/p&gt;
&lt;p&gt;公式ドキュメントは以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/install/" target="_blank" rel="noopener"
 &gt;https://docs.gitlab.com/runner/install/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="インストール"&gt;&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="header-anchor"&gt;&lt;/a&gt;インストール
&lt;/h2&gt;&lt;h3 id="apt-でインストール"&gt;&lt;a href="#apt-%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="header-anchor"&gt;&lt;/a&gt;apt でインストール
&lt;/h3&gt;&lt;p&gt;まずはリポジトリを追加します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -L &lt;span class="s2"&gt;&amp;#34;https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;apt でインストールします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo apt-get install gitlab-runner
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;しかし、この方法でインストールしたら結構古いバージョン (11.2.0) がインストールされてしまいました。&lt;br&gt;
最新のバージョンは 14.9.1 のはずなんですが・・・。&lt;/p&gt;
&lt;p&gt;今動かしている GitLab と互換性がなく上手く動かなったので、最終的には次に示すように deb パッケージからインストールしました。&lt;/p&gt;
&lt;h3 id="deb-パッケージからインストール"&gt;&lt;a href="#deb-%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%81%8b%e3%82%89%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="header-anchor"&gt;&lt;/a&gt;deb パッケージからインストール
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/install/linux-manually.html" target="_blank" rel="noopener"
 &gt;https://docs.gitlab.com/runner/install/linux-manually.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ドキュメントだと curl を使うようになっていますが、上手くダウンロードできなかったのと、環境変数 &lt;code&gt;arch&lt;/code&gt; が空だったので、以下のコマンドでダウンロードしました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ wget &lt;span class="s2"&gt;&amp;#34;https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次のコマンドでインストールします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ dpkg -i gitlab-runner_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="gitlab-への登録"&gt;&lt;a href="#gitlab-%e3%81%b8%e3%81%ae%e7%99%bb%e9%8c%b2" class="header-anchor"&gt;&lt;/a&gt;GitLab への登録
&lt;/h2&gt;&lt;p&gt;インストールが完了したら Gitlab-Runner を GitLab に登録します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/register/index.html#linux" target="_blank" rel="noopener"
 &gt;https://docs.gitlab.com/runner/register/index.html#linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo gitlab-runner register
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;対話形式で入力していきます。&lt;/p&gt;
&lt;p&gt;まず、GitLab の URL を指定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter the gitlab-ci coordinator URL &lt;span class="o"&gt;(&lt;/span&gt;e.g. https://gitlab.com/&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://gitlab.example
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次にトークンを入力します。&lt;br&gt;
トークンは GitLab に管理者でログインし、Menu &amp;gt; Admin &amp;gt; Runner で確認できます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter the gitlab-ci token for this runner:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;U6YYzWyiQYzzfCdDH1dv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ランナーの詳細を入力します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter the gitlab-ci description &lt;span class="k"&gt;for&lt;/span&gt; this runner:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ランナーを識別するためのタグを指定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter the gitlab-ci tags &lt;span class="k"&gt;for&lt;/span&gt; this runner &lt;span class="o"&gt;(&lt;/span&gt;comma separated&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次はオプションなので何も入力せず進みました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter optional maintenance note &lt;span class="k"&gt;for&lt;/span&gt; the runner:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後にスクリプトの実行方法を指定します。&lt;br&gt;
今回はホスト上で直接実行させたかったので、&lt;code&gt;shell&lt;/code&gt; を指定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter the executor: virtualbox, docker+machine, docker, docker-ssh, parallels, kubernetes, shell, ssh, docker-ssh+machine:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GitLab の Menu &amp;gt; Admin &amp;gt; Runner で登録されたことが確認できます。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/install/" target="_blank" rel="noopener"
 &gt;https://docs.gitlab.com/runner/install/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/install/linux-manually.html" target="_blank" rel="noopener"
 &gt;https://docs.gitlab.com/runner/install/linux-manually.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/register/index.html#linux" target="_blank" rel="noopener"
 &gt;https://docs.gitlab.com/runner/register/index.html#linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>git で clone する場合に 503 エラーが表示される</title><link>https://blog.ponkotools.com/posts/2022/04/12/git/</link><pubDate>Tue, 12 Apr 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/04/12/git/</guid><description>&lt;p&gt;ローカルネットワークにある GitLab からクローンをしようとした際、503 エラーが表示されました。&lt;/p&gt;
&lt;p&gt;ググってみるとプロキシ設定が原因という記事が出てきますが、一応プロキシ設定はしているつもりでした。&lt;/p&gt;
&lt;p&gt;しかし、どうやら Git は ワイルドカードを使ったプロキシ設定を認識してくれないようです。&lt;/p&gt;
&lt;p&gt;今回、環境変数 &lt;code&gt;no_proxy&lt;/code&gt; に &lt;code&gt;192.168.1.*&lt;/code&gt; のように設定していたのですが、これを &lt;code&gt;192.168.1.2&lt;/code&gt; のように指定すると正しく表示されました。&lt;/p&gt;</description></item><item><title>GitLab の root の初期パスワードを調べる</title><link>https://blog.ponkotools.com/posts/2022/04/07/gitlab/</link><pubDate>Thu, 07 Apr 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/04/07/gitlab/</guid><description>&lt;p&gt;久しぶりに新規に GitLab を構築したら仕様が変わっていて困ったのでメモ。&lt;/p&gt;
&lt;p&gt;以前は初回アクセス時にパスワード変更の画面が表示されていたと思うのですが、GitLab 14.9 では表示されませんでした。&lt;/p&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;p&gt;Docker で GitLab を動かしています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gitlab-ce:14.9.2-ce&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="root-の初期パスワードの確認"&gt;&lt;a href="#root-%e3%81%ae%e5%88%9d%e6%9c%9f%e3%83%91%e3%82%b9%e3%83%af%e3%83%bc%e3%83%89%e3%81%ae%e7%a2%ba%e8%aa%8d" class="header-anchor"&gt;&lt;/a&gt;root の初期パスワードの確認
&lt;/h2&gt;&lt;p&gt;root でログインするための初期パスワードは &lt;code&gt;/etc/gitlab/initial_root_password&lt;/code&gt; に記載されているそうです。&lt;/p&gt;
&lt;p&gt;今回 Docker で GitLab を動かしているので、以下のようにコンテナに入ってから確認します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker &lt;span class="nb"&gt;exec&lt;/span&gt; -it gitlab bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# cat /etc/gitlab/initial_root_password&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;gitlab&lt;/code&gt; はコンテナ名です。&lt;/p&gt;
&lt;h2 id="root-の初期パスワードの変更"&gt;&lt;a href="#root-%e3%81%ae%e5%88%9d%e6%9c%9f%e3%83%91%e3%82%b9%e3%83%af%e3%83%bc%e3%83%89%e3%81%ae%e5%a4%89%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;root の初期パスワードの変更
&lt;/h2&gt;&lt;p&gt;初期パスワードは24時間経ったら削除されるとあるので、ログインできたらパスワードを変更しておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;右上のユーザーメニューから「Edit Profile」を選択&lt;/li&gt;
&lt;li&gt;サイドメニューより「Password」を選択&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/masa2223/items/78aaf76329637e6ca12d" target="_blank" rel="noopener"
 &gt;https://qiita.com/masa2223/items/78aaf76329637e6ca12d&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GitLab でリストア後に 500 エラーが表示される</title><link>https://blog.ponkotools.com/posts/2021/11/19/gitlab/</link><pubDate>Fri, 19 Nov 2021 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2021/11/19/gitlab/</guid><description>&lt;p&gt;GitLab でリストア自体は成功するのですが、特定のページにアクセスすると 500 エラーが表示されました。&lt;/p&gt;
&lt;p&gt;原因は以下と同じでした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2020/01/gitlab-admin-runners-500.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2020/01/gitlab-admin-runners-500.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記と同じ方法で解決もしました。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://forum.gitlab.com/t/after-restoring-a-backup-project-page-is-not-loading-all-other-pages-are-loading-easily/41447" target="_blank" rel="noopener"
 &gt;https://forum.gitlab.com/t/after-restoring-a-backup-project-page-is-not-loading-all-other-pages-are-loading-easily/41447&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/69525251/when-i-click-a-project-500-whoops-something-went-wrong-on-our-end" target="_blank" rel="noopener"
 &gt;https://stackoverflow.com/questions/69525251/when-i-click-a-project-500-whoops-something-went-wrong-on-our-end&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>