<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>開発環境 on 或る阿呆の記</title><link>https://hack-le.com/tags/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/</link><description>Recent content in 開発環境 on 或る阿呆の記</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Thu, 17 Sep 2026 14:11:40 +0900</lastBuildDate><atom:link href="https://hack-le.com/tags/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/index.xml" rel="self" type="application/rss+xml"/><item><title>LAN内のGiteaをCloudflare Tunnel経由で公開する</title><link>https://hack-le.com/lan-gitea-cloudflare-tunnel/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/lan-gitea-cloudflare-tunnel/</guid><description>&lt;p&gt;LAN内でええやんと思っていたのだが、色々と面倒臭くなったので、結局外部公開する。例によってCloudflare Tunnel経由で……。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini, Intel Mac mini 2018&lt;/li&gt;&#10;&lt;li&gt;macOS 14.7.7 (Sonoma)&lt;/li&gt;&#10;&lt;li&gt;gitea 1.24.5 (via brew)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;brew services start gitea&lt;/code&gt;で起動&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="構成"&gt;構成&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD&#10;cfi(Cloudflare)&#10;cfi --&gt; cf&#10;subgraph LAN&#10;cf(Cloudflare Tunnel)&#10;gitea(Gitea)&#10;end&#10;cf --&gt;|プライベートIP| gitea&lt;/pre&gt;&lt;p&gt;Giteaから見るとリバースプロキシを噛ませたような感じになる。&lt;/p&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="サインアップの禁止"&gt;サインアップの禁止&#10;&lt;/h3&gt;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/gitea-on-mac-signup/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Gitea on Macのサインアップ（登録）を禁止する&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/gitea-on-mac-signup/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2025/10/output-73.webp" alt="Gitea on Macのサインアップ（登録）を禁止する" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h3 id="既存リポジトリを最新に反映する"&gt;既存リポジトリを最新に反映する&#10;&lt;/h3&gt;&lt;p&gt;remoteと差分があると面倒くさくなるので、できるだけ最新を反映しておく。&lt;/p&gt;&#10;&lt;h3 id="web画面の設定"&gt;Web画面の設定&#10;&lt;/h3&gt;&lt;p&gt;Cloudflare TunnelでWebの外部公開用のサブドメインを作成する。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;app.ini&lt;/code&gt;の&lt;code&gt;[server]&lt;/code&gt;より以下となるようにする。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;値&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;説明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;PROTOCOL&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;http&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CloudflareがHTTPSを終端&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;HTTP_ADDR&lt;/code&gt;（または&lt;code&gt;DOMAIN&lt;/code&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Giteaが実際に待ち受けるアドレス&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;HTTP_PORT&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;3000&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;内部ポート（自由）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;ROOT_URL&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;https://git.example.com/&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;外部公開URL&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;https経由ではこれでできる。&lt;/p&gt;&#10;&lt;h3 id="やるならsshの設定"&gt;（やるなら）sshの設定&#10;&lt;/h3&gt;&lt;p&gt;sshを使う場合、Cloudflareでssh用の別口のサブドメインを作成し、ssh over httpsでアクセスする。Web用の設定と併せて以下のような感じになる。&lt;/p&gt;&#10;&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="o"&gt;[&lt;/span&gt;server&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PROTOCOL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; http&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 127.0.0.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HTTP_PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Web用ポート&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ROOT_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; https://Web用ドメイン&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DISABLE_SSH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;START_SSH_SERVER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;SSH_DOMAIN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; SSH用ドメイン&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;SSH_PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LFS_START_SERVER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LFS_JWT_SECRET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; hoge&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;OFFLINE_MODE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;サーバーは再起動する。&lt;/p&gt;&#10;&lt;p&gt;クライアント側でover httpsをとなるように &lt;code&gt;~/.ssh/config&lt;/code&gt;に以下を入れる。&lt;/p&gt;&#10;&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;Host SSH用ドメイン&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ProxyCommand cloudflared access ssh --hostname %h&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User SSHユーザ名&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="既存のリポジトリでremote変更"&gt;既存のリポジトリでremote変更&#10;&lt;/h3&gt;&lt;p&gt;現在の設定の確認。&lt;/p&gt;&#10;&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;git remove -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを置き換える。Web画面からリポジトリを見て、ssh用のcloneコマンドから以下のように置き換え。&lt;/p&gt;&#10;&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;git remote set-url origin SSHユーザ名@SSHドメイン:user/repo.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;動作確認。&lt;/p&gt;&#10;&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;git fetch origin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin main&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;リモートにコミットがあってマージするなら &lt;code&gt;git pull --rebase origin master&lt;/code&gt;、強制的に上書きするときは&lt;code&gt;git push -f&lt;/code&gt;。&lt;/p&gt;&#10;</description></item><item><title>Gitea on Macのサインアップ（登録）を禁止する</title><link>https://hack-le.com/gitea-on-mac-signup/</link><pubDate>Wed, 29 Oct 2025 13:05:37 +0900</pubDate><guid>https://hack-le.com/gitea-on-mac-signup/</guid><description>&lt;p&gt;大した内容ではない。GiteaをずっとLAN内で運用していたが、やはりそれだと不便なので外部公開の必要を感じた。とはいえお一人様なのでサインアップはさせたくない。ので、設定するだけ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini, Intel Mac mini 2018&lt;/li&gt;&#10;&lt;li&gt;macOS 14.7.7 (Sonoma)&lt;/li&gt;&#10;&lt;li&gt;gitea 1.24.5 (via brew)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;brew services start gitea&lt;/code&gt;で起動&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;p&gt;まず現状を確認する。右上に登録がある。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-18-700x404.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;これを殺す。とりあえずサービスを止める。&lt;/p&gt;&#10;&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;brew services stop gitea&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;app.ini&lt;/code&gt;を書き換える。&lt;code&gt;brew services&lt;/code&gt;を使っている場合は&lt;code&gt;ps ax&lt;/code&gt;でわかるとおり以下となる。&lt;/p&gt;&#10;&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="m"&gt;58271&lt;/span&gt; ?? S 0:00.75 /opt/homebrew/opt/gitea/bin/gitea web --work-path /opt/homebrew/var/gitea&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そんなわけで以下を編集する。&lt;/p&gt;&#10;&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;emacs /opt/homebrew/var/gitea/custom/conf/app.ini&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そうしたら&lt;code&gt;[service]&lt;/code&gt;セクションより以下の項目を操作する。&lt;/p&gt;&#10;&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="o"&gt;[&lt;/span&gt;service&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DISABLE_REGISTRATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;いけたらサービス再起動。&lt;/p&gt;&#10;&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;brew services start gitea&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Web画面を確認する。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/10/image-19-700x404.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;右上から「登録」が消えていることを確認。これでOK。&lt;/p&gt;&#10;</description></item><item><title>Homebrew環境におけるGiteaのエクスポート：brew services start giteaとgitea webの違いがわかる男</title><link>https://hack-le.com/homebrew-gitea-brew-services-start-gitea-gitea-web/</link><pubDate>Fri, 12 Sep 2025 00:00:00 +0900</pubDate><guid>https://hack-le.com/homebrew-gitea-brew-services-start-gitea-gitea-web/</guid><description>&lt;p&gt;なんか色々躓いたので、復元は後日にして、今回はエクスポートについてのみ。なんか色々ハマった。&lt;/p&gt;&#10;&lt;p&gt;具体的には、最初に &lt;code&gt;gitea web&lt;/code&gt; で動かして、その後 &lt;code&gt;brew services start gitea&lt;/code&gt;のほうがいいやんけと思ってそっちにしたんだが、その後バックアップ手順を確認しようと &lt;code&gt;gitea dump&lt;/code&gt;したら、なぜか最初に &lt;code&gt;gitea web&lt;/code&gt; で作ったほうがバックアップされる。よく見たら実行プログラムのパスが違っており、それによって読み込まれる設定ファイルが違ったと思われる。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini, Intel Mac mini 2018&lt;/li&gt;&#10;&lt;li&gt;macOS 14.7.7 (Sonoma)&lt;/li&gt;&#10;&lt;li&gt;gitea 1.24.5 (via brew)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;brew services start gitea&lt;/code&gt;で起動&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="giteaが分裂した"&gt;giteaが分裂した。&#10;&lt;/h2&gt;&lt;p&gt;公式: &lt;a class="link" href="https://docs.gitea.com/administration/backup-and-restore" target="_blank" rel="noopener"&#10; &gt;Backup and Restore | Gitea Documentation&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;公式にあるとおり、エクスポートはコマンドが用意されており、 &lt;code&gt;gitea dump -c /path/to/app.ini&lt;/code&gt;に尽きる。ただここで問題は、 &lt;code&gt;gitea&lt;/code&gt; のパスとコンフィグファイルのパスである。&lt;/p&gt;&#10;&lt;p&gt;たとえばコイツを見てくれ。コイツをどう思う？&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ps&lt;/span&gt; &lt;span class="nx"&gt;aux&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;grep&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="mi"&gt;19745&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="mi"&gt;412867040&lt;/span&gt; &lt;span class="mi"&gt;168992&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="nx"&gt;PM&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;00.56&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt; &lt;span class="nx"&gt;web&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;work&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="err"&gt;/gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;which&lt;/span&gt; &lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;/opt/homebrew/bin/gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;すごく……パスが違います……。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;gitea&lt;/code&gt;コマンドは &lt;code&gt;/opt/homebrew/bin/gitea&lt;/code&gt;なんだが、brewで起動する &lt;code&gt;gitea&lt;/code&gt;は &lt;code&gt;/opt/homebrew/opt/gitea/bin/gitea&lt;/code&gt;という。&lt;/p&gt;&#10;&lt;p&gt;ただ、こいつらはバイナリとしては同じ臭い。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;/opt/homebrew/bin/gitea@ -&amp;gt; ../Cellar/gitea/1.24.5/bin/gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Cellar&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;1.24&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mi"&gt;251898619&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;admin&lt;/span&gt; &lt;span class="mi"&gt;107386178&lt;/span&gt; &lt;span class="nx"&gt;Aug&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;/opt/homebrew/opt/gitea/bin/gitea*&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mi"&gt;251898619&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;admin&lt;/span&gt; &lt;span class="mi"&gt;107386178&lt;/span&gt; &lt;span class="nx"&gt;Aug&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なので、実行プログラムのパスで、読み込まれる暗黙のコンフィグパスが異なったものと思われる。brewで起動した方は、&amp;ndash;work-pathを指定しているね。ここにコンフィグファイルもある。&lt;/p&gt;&#10;&lt;h2 id="パスの違いがわかる男"&gt;パスの違いがわかる男&#10;&lt;/h2&gt;&lt;p&gt;ということで、work-pathも踏まえて、dumpのコマンドは以下となる。停止できるなら停止したほうが安全だね。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;brew&lt;/span&gt; &lt;span class="nx"&gt;services&lt;/span&gt; &lt;span class="nx"&gt;stop&lt;/span&gt; &lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt; &lt;span class="nx"&gt;dump&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="err"&gt;/gitea/custom/conf/app.ini&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;brew&lt;/span&gt; &lt;span class="nx"&gt;services&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="nx"&gt;gitea&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイル名に日付けを入れるなら&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt; &lt;span class="nx"&gt;dump&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;homebrew&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="err"&gt;/gitea/custom/conf/app.ini -f gitea-backup-$(date +%Y%m%d-%H%M%S).zip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;こいつをunzipすると以下のような感じだ。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;backup&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;YYYYMMDD&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;HHMMSS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;zip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ini&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;設定ファイル&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;アプリケーションデータ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;attachments&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;添付ファイル&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;avatars&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;アバター画像&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;データベースファイル&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;repos&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Gitリポジトリ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;git&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;実際のGitリポジトリ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;gitea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;データベースダンプ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このうち、&lt;code&gt;app.ini&lt;/code&gt;は違うマシンでやるときにはゴチャゴチャと手動調整しないといけなくなると思う。ネットワーク環境とか、リポジトリのパスとか、環境によって変わるはずなので。特にMacからLinux……とかやるとね。&lt;/p&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;サクッとできるだろうと思ったら思いのほか躓いた。LLMは永遠に存在しないパスを教えてくれるので10倍疲れた。インフラ周りになると途端に無能になるLLMさんェ……。それでもいるだけマシだろうと言われたらそうかもしれないんだが、昔は検索したら同じようなところで躓いた人の記事が出たもんだけどなぁと思ってしまう。&lt;/p&gt;&#10;&lt;p&gt;まぁ今回は &lt;code&gt;brew services&lt;/code&gt; あんまり使ったことなかったから、それでちょっとハマったよね。自分でplist作ったら問題なかったんだろうけど。&lt;/p&gt;&#10;&lt;p&gt;今回はMacかつHomebrew経由特有の問題があったので、Dockerコンテナなら環境の共通化は多少できると思う。けど、ネットワーク環境とかはやっぱり違うだろうし、 &lt;code&gt;app.ini&lt;/code&gt;は同一マシンでの復元以外は基本的に編集しないといけないんじゃないかな。となると、編集項目が1箇所でも5箇所でも、編集しないといけない時点で大して変わらないし、Docker使うと &lt;code&gt;docker-compose.yml&lt;/code&gt;の管理もあるから、どっちがいいかはちょっとわかんないね。&lt;/p&gt;&#10;&lt;p&gt;疲れたので、復元はまた後日。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/github-gitea-1/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;脱GitHubに向けて：Giteaを試し始める on Mac&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/github-gitea-1/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_19169_1789090146.webp" alt="脱GitHubに向けて：Giteaを試し始める on Mac" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>脱GitHubに向けて：Giteaを試し始める on Mac</title><link>https://hack-le.com/github-gitea-1/</link><pubDate>Wed, 03 Sep 2025 17:22:19 +0900</pubDate><guid>https://hack-le.com/github-gitea-1/</guid><description>&lt;p&gt;最近のMSはまたMSになってきたので、GitHubもいつどうなるかわからない、ということで、コード管理をセルフホストにしていきたい。&lt;/p&gt;&#10;&lt;h2 id="環境とインストール"&gt;環境とインストール&#10;&lt;/h2&gt;&lt;p&gt;ひとまず手元のMacで動かす&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&lt;/li&gt;&#10;&lt;li&gt;Intel Mac mini 2018&lt;/li&gt;&#10;&lt;li&gt;macOS 14.7.7&lt;/li&gt;&#10;&lt;li&gt;gitea 1.24.5 via Homebrew&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;インストールは 「&lt;a class="link" href="https://docs.gitea.com/category/installation" target="_blank" rel="noopener"&#10; &gt;Installation | Gitea Documentation&lt;/a&gt;」色々あるわけだが、楽なのでbrew install。もしVPSでやるときは、Linuxなのでまた考える。でも別に家のMac miniでいい気もしている。Dockerは特に使う必要性を感じなかったので使わない。データベースでSQLite以外使うならコンテナでまとめてやったほうがいいかなと思う。今回はデータベースもSQLiteでファイル管理するつもりだし、無駄にオーバーヘッド作る必要もないかなって。&lt;/p&gt;&#10;&lt;p&gt;（2025-09-11）この記事を書いた時はDockerいらんかなと思ったんだけれど、バックアップ/復元まで考えたときに、パスなど環境の差分がけっこうしんどい感じだった。Dockerのほうがその点は吸収できそうだが、ただ結局IPアドレスやポート番号など、差分はやはりあるし、docker-compose.ymlの管理もあるので、どちらが良いかは一概には言えないかなぁという感じ。&lt;/p&gt;&#10;&lt;p&gt;公式: &lt;a class="link" href="https://about.gitea.com/" target="_blank" rel="noopener"&#10; &gt;Gitea Official Website&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="セットアップ"&gt;セットアップ&#10;&lt;/h2&gt;&lt;p&gt;インストールしたら &lt;code&gt;brew services start gitea&lt;/code&gt; で開始する。これはつまり&lt;code&gt;gitea web&lt;/code&gt;をしてそれ用のplistも作って登録する感じなんだが、わざわざ自分で頑張る意味もないので、Homebrew勢は黙ってstart gitea。&lt;/p&gt;&#10;&lt;p&gt;そしたら、 &lt;code&gt;http://&amp;lt;サーバのIPアドレス&amp;gt;:3000&lt;/code&gt; にWebブラウザでアクセスして初期設定をする。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;データベースはSQLite3&lt;/strong&gt;にする。ファイルで管理したいから。&#10;&lt;ul&gt;&#10;&lt;li&gt;Homebrewだとファイルパスの初期設定は &lt;code&gt;/opt/homebrew/bin/data/gitea.db&lt;/code&gt; になるようだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リポジトリのルートパス（リモートリポジトリのデータの実体）、LFSファイルパス（Large File Storage……でかいファイルは別におくようだ）はひとまず初期値で続行&lt;/li&gt;&#10;&lt;li&gt;サーバードメインはLAN内の固定したプライベートIPアドレスを割り当て&lt;/li&gt;&#10;&lt;li&gt;HTTPポートは3000使いたくないので変更&lt;/li&gt;&#10;&lt;li&gt;内部でしか使わないのでベースURLはサーバードメインとポートそのまま&lt;/li&gt;&#10;&lt;li&gt;オプション眺めたが、ひとまず初期値で続行&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;新しいURLで入り直すと、初期画面がある。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2025/09/605375b117ae067b2f378449ace1d898-700x575.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;右上の登録から最初のユーザを登録する。これが管理者になる。&lt;/p&gt;&#10;&lt;h2 id="試す"&gt;試す&#10;&lt;/h2&gt;&lt;h3 id="リポジトリの作成とpullpush"&gt;リポジトリの作成とpull/push&#10;&lt;/h3&gt;&lt;p&gt;とりあえずリポジトリを適当に作って試す。まずWeb画面上でリポジトリを作成する。宗教上の理由によりブランチ名をmain-&amp;gt;masterにし、それ以外は初期値でGo。リポジトリはできた。&lt;/p&gt;&#10;&lt;p&gt;クローンする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;clone&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//&amp;lt;サーバアドレス&amp;gt;:&amp;lt;ポート&amp;gt;/&amp;lt;リポジトリ名&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;cloneは可能。移動してpushまで試す。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;touch&lt;/span&gt; &lt;span class="nx"&gt;hoge&lt;/span&gt;&#10;&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 class="nx"&gt;master&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;hoge&lt;/span&gt;&#10;&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 class="nx"&gt;master&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;first commit&amp;#34;&lt;/span&gt;&#10;&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 class="nx"&gt;master&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;push&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;user名とパスワードを求められるが、入力すればとおる。ふむ。&lt;/p&gt;&#10;&lt;p&gt;いったん作ったディレクトリを削除して、次にssh経由を試す。&lt;/p&gt;&#10;&lt;h3 id="ssh鍵"&gt;ssh鍵&#10;&lt;/h3&gt;&lt;p&gt;ssh鍵くらいは登録しておく。ここでは既存の公開鍵 &lt;code&gt;id_rsa.pub&lt;/code&gt; を使う。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;右上のプロフィールアイコンから「設定」&lt;/li&gt;&#10;&lt;li&gt;左メニューの「SSH/GPGキー」&lt;/li&gt;&#10;&lt;li&gt;SSHの「キーを追加」で &lt;code&gt;id_rsa.pub&lt;/code&gt; の中身を登録&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;そしたら &lt;code&gt;git clone ssh://ほげほげ&lt;/code&gt; でクローンする（適当）。入って適当にファイル作ってaddしてpushできるかを確認。特にパスワードを求められずに登録できたらOK。&lt;/p&gt;&#10;&lt;p&gt;その後気づいたのだが、Giteaはsshについてだいぶトリッキーなことをしているようで、~/.ssh/authorized_keysにcommandを記述している。で、リモートログインの時に支障をきたす。また、アンインストール時にはここの部分を削除しないといけない。&lt;/p&gt;&#10;&lt;h2 id="少しずつ試していく"&gt;少しずつ試していく&#10;&lt;/h2&gt;&lt;p&gt;ということで、今回はさらっと最低限のssh経由のpush/pullをやっただけだが、一応これだけでもローカル内にあるちょっとしたプロジェクトの管理には使える格好だ。とはいえ実際のバックアップ・復元手順なども確認する必要もあるし、GitHub Actionsみたいなことをしたくなったらどうなるんだろう、とかわからないことも多いので、これから少しずつ試していきたい。&lt;/p&gt;&#10;</description></item><item><title>Macでキーボードの挙動が変？VivaldiとVisualStudio Code でだけ Cmd + [ がきかない現象</title><link>https://hack-le.com/vivaldi-visualstudio-code-cmd/</link><pubDate>Sat, 15 Mar 2025 09:57:36 +0900</pubDate><guid>https://hack-le.com/vivaldi-visualstudio-code-cmd/</guid><description>&lt;p&gt;何を言っているのか意味不明だと思うが僕も何が起きているのか意味不明だった。とりあえずなおったのでメモ。&lt;/p&gt;&#10;&lt;h2 id="環境"&gt;環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;M2 Pro Mac mini&#10;&lt;ul&gt;&#10;&lt;li&gt;ただし MBP 2019 でも起きていた&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Vivaldi, VSCode&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="事象"&gt;事象&#10;&lt;/h2&gt;&lt;p&gt;一部のアプリ、具体的はVisualStudioCode、Vivaldiにおいて、Cmdキーを押すと &lt;code&gt;[&lt;/code&gt; キーを認識しないという謎の事象が発生していた。これはMacの再起動などではなおらない。&lt;/p&gt;&#10;&lt;p&gt;キーストローク自体はシステム全体では認識されており、Karabinerを使うと押されていることがわかるし、Braveなど別のアプリでは認識されているため、一部のアプリでのみ生じている問題だといえる。&lt;/p&gt;&#10;&lt;p&gt;Vivaldiにおいて、実際にDevToolsを起動してキーストロークを検出したところ、 &lt;code&gt;[&lt;/code&gt;単体ならば問題ないが、Cmdキーを押した状態だと認識しないことがわかった。VisualStudioCodeも同様の状態だったと考えられる。&lt;/p&gt;&#10;&lt;h2 id="原因と対応"&gt;原因と対応&#10;&lt;/h2&gt;&lt;p&gt;なぜ複数のアプリでこんなことになるのか意味不明で、ずっと僕の頭を悩ませていたが、以下の措置を実行したところ、なおった（？）。少なくとも事象は再現しなくなった（削除コマンドなので、一応バックアップはとっておくとよい）。&lt;/p&gt;&#10;&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;rm ~/Library/Preferences/com.apple.symbolichotkeys.plist&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意味不明だったのでChatGPTに理由を聞いたところ、以下のような回答を得られたが、あまり納得していない。&lt;/p&gt;&#10;&lt;details class="swell-block-accordion__item" data-swl-acc="wrapper"&gt;&lt;summary class="swell-block-accordion__title" data-swl-acc="header"&gt;ChatGPTによる回答&lt;/summary&gt;&#10;&lt;p&gt;問題が解決したことから、&lt;strong&gt;macOSのシステム設定（symbolic hotkeys）が影響していた&lt;/strong&gt; ことが明らかになりました。&lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; は、macOSのキーボードショートカット設定を管理するファイルであり、これが何らかの理由で &lt;code&gt;Cmd + [&lt;/code&gt; の入力を阻害していたと考えられます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-なぜ-comapplesymbolichotkeysplist-の削除で解決したのか"&gt;(ChatGPT) なぜ &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; の削除で解決したのか？&#10;&lt;/h2&gt;&lt;h3 id="1-cmd---がシステムレベルのホットキーに誤って割り当てられていた"&gt;1. &lt;code&gt;Cmd + [&lt;/code&gt; がシステムレベルのホットキーに誤って割り当てられていた&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; には、Mission Control、アプリケーションスイッチャー、ウィンドウ管理などのショートカット設定が保存されている。&lt;/li&gt;&#10;&lt;li&gt;何らかの理由で、&lt;code&gt;Cmd + [&lt;/code&gt; がVivaldiやVSCodeでは動作しない形でシステムに割り当てられていた可能性がある。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;rm&lt;/code&gt; でこのファイルを削除したことで、&lt;strong&gt;すべてのショートカット設定がリセットされ、デフォルトの挙動に戻った&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-設定が壊れていた--予期せぬキー競合が発生していた"&gt;2. 設定が壊れていた / 予期せぬキー競合が発生していた&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;macOSアップデートや外部アプリの影響で、&lt;strong&gt;システムショートカット設定が壊れたり、不要な競合が発生したりすることがある&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;特に、VSCodeやVivaldiは&lt;strong&gt;標準的なmacOSのUIではなく、独自のキーボードイベント処理を持っている&lt;/strong&gt;ため、壊れた設定が影響を与えやすい。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-vivaldiとvscodeで-cmd---が特定の条件で無視されていた"&gt;3. VivaldiとVSCodeで &lt;code&gt;Cmd + [&lt;/code&gt; が特定の条件で無視されていた&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;システムの &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; に &lt;code&gt;Cmd + [&lt;/code&gt; に関する設定が存在し、それが&lt;strong&gt;特定のアプリでのみ適用される&lt;/strong&gt; 形になっていた可能性がある。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;defaults read -g&lt;/code&gt; で確認できるようなグローバルショートカットではなく、個別のアプリに影響を与える設定だった可能性。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-この問題の発生原因は"&gt;(ChatGPT) この問題の発生原因は？&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;過去に &lt;strong&gt;システム設定でショートカットをカスタマイズ&lt;/strong&gt; したことがある&lt;/li&gt;&#10;&lt;li&gt;macOSの&lt;strong&gt;アップデートによる設定変更&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部アプリ（Karabiner、BetterTouchToolなど）の影響&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;何らかの&lt;strong&gt;バグや意図しないシステム設定の競合&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;いずれかが影響して &lt;code&gt;Cmd + [&lt;/code&gt; が特定のアプリで無効になっていたと考えられます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-再発を防ぐためには"&gt;(ChatGPT) 再発を防ぐためには？&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;「システム設定」→「キーボード」→「キーボードショートカット」で、意図しない割り当てがないか確認&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;影響を受けやすい &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; のバックアップを定期的に取る&lt;/strong&gt; &lt;code&gt;cp ~/Library/Preferences/com.apple.symbolichotkeys.plist ~/Desktop/symbolichotkeys_backup.plist&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;再発した場合は、再度 &lt;code&gt;rm ~/Library/Preferences/com.apple.symbolichotkeys.plist&lt;/code&gt; を実行&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部アプリ（Karabiner-Elements, BetterTouchTool, Alfredなど）の設定を見直す&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;macOSアップデート後にショートカットの挙動をチェック&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatgpt-結論"&gt;(ChatGPT) 結論&#10;&lt;/h2&gt;&lt;p&gt;この問題の根本原因は、&lt;strong&gt;macOSの &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; に &lt;code&gt;Cmd + [&lt;/code&gt; の動作を妨げる何らかの設定が記録されていた&lt;/strong&gt; ことです。このファイルを削除してリセットすることで、VivaldiやVSCodeで &lt;code&gt;Cmd + [&lt;/code&gt; のショートカットが正常に機能するようになりました。&lt;/p&gt;&#10;&lt;p&gt;この現象は比較的珍しいですが、macOSのショートカット設定が予期せず影響を及ぼすことは時々あります。同様の問題が再発した場合は、まず &lt;code&gt;com.apple.symbolichotkeys.plist&lt;/code&gt; のリセットを試すのが最も確実な解決策となるでしょう。&lt;/p&gt;&#10;&lt;/details&gt;&#10;&lt;h2 id="所感"&gt;所感&#10;&lt;/h2&gt;&lt;p&gt;特に副作用らしきことも起きていない。事象が再発しなくなったのでよかったが、それにしても意味不明だなとは思っている。&lt;/p&gt;&#10;&lt;p&gt;こういうイレギュラーなことにおいて、ChatGPTは無力の極みなので、まともに聞くのではなく、とにかくそれらしい事象を検索させて、可能性がありそうなことを試すしかない。最終的にとりあえずなんとかなったので、よかったのかな。&lt;/p&gt;&#10;</description></item><item><title>NotionのMermaid記法でお絵かきするのが良いと伝える動画</title><link>https://hack-le.com/notion%E3%81%AEmermaid%E8%A8%98%E6%B3%95%E3%81%A7%E3%81%8A%E7%B5%B5%E3%81%8B%E3%81%8D%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8C%E8%89%AF%E3%81%84%E3%81%A8%E4%BC%9D%E3%81%88%E3%82%8B%E5%8B%95%E7%94%BB/</link><pubDate>Sat, 07 Dec 2024 12:09:35 +0900</pubDate><guid>https://hack-le.com/notion%E3%81%AEmermaid%E8%A8%98%E6%B3%95%E3%81%A7%E3%81%8A%E7%B5%B5%E3%81%8B%E3%81%8D%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8C%E8%89%AF%E3%81%84%E3%81%A8%E4%BC%9D%E3%81%88%E3%82%8B%E5%8B%95%E7%94%BB/</guid><description>&lt;p&gt;姉とNotion談義していた時に、Mermaid記法を普及しようと思った。スクリーンレコードで動画をとって見せてみたが、「何が起きてるのかわからないｗ」と言われて撃沈した。まぁそうか……。&lt;/p&gt;&#10;&lt;p&gt;まぁでもせっかく撮影したので、なんとなく雰囲気を察せられる動画として残すだけの記事。&lt;/p&gt;&#10;&lt;h2 id="notion--mermaid記法の動画"&gt;Notion &amp;amp; Mermaid記法の動画&#10;&lt;/h2&gt;&lt;p&gt;動画は以下。&lt;/p&gt;&#10;&lt;p&gt;&lt;video controls src="https://hack-le.com/images/uploads/2024/11/01035f564973c8fd1266bf76b09358cc.mov"&gt;&lt;/video&gt;&lt;/p&gt;&#10;&lt;p&gt;動画にしてしまうと記事文本文では言うことがない。言わなきゃ気づかないと思うけど、変換候補があれなのは固有名詞です笑&lt;/p&gt;&#10;&lt;h2 id="動画もアリか"&gt;動画もアリか&#10;&lt;/h2&gt;&lt;p&gt;今さらだけれど動画や音声をアップロードしていくのもアリかなと思った。本当に今さらだけど。&lt;/p&gt;&#10;</description></item><item><title>Macで最初に設定していること macOS 14 Sonoma版</title><link>https://hack-le.com/mac-sonoma-14-6-1/</link><pubDate>Sun, 06 Oct 2024 05:37:03 +0900</pubDate><guid>https://hack-le.com/mac-sonoma-14-6-1/</guid><description>&lt;p&gt;自分用のメモ書き。前回からけっこう間がたったけど改訂。Sequoia？知らないな。コードネームどんどん覚えづらいやつにしてくるのなんなんよ。しかしなんだかんだMac使い始めてもうすぐ15年だよ。&lt;/p&gt;&#10;&lt;p&gt;Macの購入時とかクリーンインストール時のやることリスト。最近はもうクリーンインストールもあんまりやらなくなったけど。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-init-mojave/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Macで最初に設定していること(macOS 10.14 mojave)&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-init-mojave/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2015/11/2701dee433ee744cd977d529ba9057c5.webp" alt="Macで最初に設定していること(macOS 10.14 mojave)" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="miniのみ-外付けssdを起動ディスクにする"&gt;(miniのみ) 外付けSSDを起動ディスクにする&#10;&lt;/h2&gt;&lt;p&gt;ドケチなのでApple公式のクソ高CTOには付き合わない。以下の記事を参考に、外付けSSDを起動ディスクにする。さすがにラップトップではやらない。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/mac-mini-2018-nvme-ssd-boot/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;Mac mini 2018に外付けSSDをつけて起動ディスクにした&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/mac-mini-2018-nvme-ssd-boot/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_12018_1789620831.webp" alt="Mac mini 2018に外付けSSDをつけて起動ディスクにした" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Blackmagic Disk Speed Testでベンチとっておく。&lt;/p&gt;&#10;&lt;h2 id="環境設定"&gt;環境設定&#10;&lt;/h2&gt;&lt;p&gt;サードパーティとか使わず、システム環境設定とかいじらないといけないやつ。スマート引用符とか地味に忘れていた。&lt;/p&gt;&#10;&lt;h3 id="キーボードマウス"&gt;キーボード、マウス&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;キーボードでキーリピート速める&lt;/li&gt;&#10;&lt;li&gt;キーボードでスマート引用符とスマートダッシュを使わないようにする&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://blog.piyo.tech/posts/2014-01-06-205101/" target="_blank" rel="noopener"&#10; &gt;Macで引用符を入力すると勝手に変換されるのをやめたい - ぴよログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;トラックパッドでタップでクリック、ポインタ速度速める&lt;/li&gt;&#10;&lt;li&gt;アクセシビリティからトラックパッドの3本指ドラッグ解禁&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ネットワーク"&gt;ネットワーク&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;ファイアウォールを「入」にする&#10;&lt;ul&gt;&#10;&lt;li&gt;インストール時にホームディレクトリの暗号化まで推奨してきたのに、何故FWがデフォルトで「切」なんだ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイル共有を「入」にする&lt;/li&gt;&#10;&lt;li&gt;（サーバ用の場合）リモートログインを「入」にする&#10;&lt;ul&gt;&#10;&lt;li&gt;他のMacから入るための公開鍵を &lt;code&gt;authorized_keys&lt;/code&gt; に登録する&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; をいじって &lt;code&gt;PasswordAuthentication&lt;/code&gt;を &lt;code&gt;no&lt;/code&gt; にする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="アプリケーションからのインストール"&gt;アプリケーションからのインストール&#10;&lt;/h2&gt;&lt;h3 id="app-storeから"&gt;App Storeから&#10;&lt;/h3&gt;&lt;p&gt;一時期流行りかけたけど、結局あまり定着しなかった。ただいくつかのソフトウェアはこっから入れている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Xcode&lt;/li&gt;&#10;&lt;li&gt;QSpace Pro&#10;&lt;ul&gt;&#10;&lt;li&gt;QSpaceからアップグレードする。確かライセンス2台だったので古い機種は削除がいるのかな&lt;/li&gt;&#10;&lt;li&gt;ForkLiftは使いやすかったけどライセンス形態を実質サブスクに移行して許されなくなった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;CotEditor&lt;/li&gt;&#10;&lt;li&gt;LanScan&lt;/li&gt;&#10;&lt;li&gt;Readkit&#10;&lt;ul&gt;&#10;&lt;li&gt;ほぼ購読登録ソフトと化している&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;PopClip&lt;/li&gt;&#10;&lt;li&gt;Capo&lt;/li&gt;&#10;&lt;li&gt;Whisper Transcription&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="webから"&gt;Webから&#10;&lt;/h3&gt;&lt;p&gt;結局PCソフトはWebサイトからDLが王道なんだということを、10年かけてわからされた僕たち。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;文字入力&#10;&lt;ul&gt;&#10;&lt;li&gt;ATOK&lt;/li&gt;&#10;&lt;li&gt;Karabiner-Elements&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Web関係&#10;&lt;ul&gt;&#10;&lt;li&gt;Brave&lt;/li&gt;&#10;&lt;li&gt;Firefox&lt;/li&gt;&#10;&lt;li&gt;Google Chrome&lt;/li&gt;&#10;&lt;li&gt;DeepL&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;開発ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;Visual Studio Code&lt;/li&gt;&#10;&lt;li&gt;Android Studio&lt;/li&gt;&#10;&lt;li&gt;ChatGPT&lt;/li&gt;&#10;&lt;li&gt;Cloudflare WARP&lt;/li&gt;&#10;&lt;li&gt;Docker Desktop&lt;/li&gt;&#10;&lt;li&gt;Figma&lt;/li&gt;&#10;&lt;li&gt;Postman&lt;/li&gt;&#10;&lt;li&gt;Raspberry Pi Imager&#10;&lt;ul&gt;&#10;&lt;li&gt;まぁ必要になったらでいいかも&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ApplePiBaker&#10;&lt;ul&gt;&#10;&lt;li&gt;ddコマンドよりはまぁ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;AWSCLI&#10;&lt;ul&gt;&#10;&lt;li&gt;いつのまにかbrewで管理できなくなった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;volta&#10;&lt;ul&gt;&#10;&lt;li&gt;いつも忘れそうになるが、うちのnode.jsバージョン管理はvolta&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;電子書籍&#10;&lt;ul&gt;&#10;&lt;li&gt;Calibre&lt;/li&gt;&#10;&lt;li&gt;Simple Comic&#10;&lt;ul&gt;&#10;&lt;li&gt;2010年で更新止まってるけどMac用の漫画ビューアっていまだにこれが一番なんじゃなかろうか…&lt;/li&gt;&#10;&lt;li&gt;検索すると変なサイト出るけど本家は「&lt;a class="link" href="http://dancingtortoise.com/simplecomic/" target="_blank" rel="noopener"&#10; &gt;Dancing Tortoise | Simple Comic&lt;/a&gt;」GitHubにソースもある&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Kindle&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メディア&#10;&lt;ul&gt;&#10;&lt;li&gt;Vox for mac&lt;/li&gt;&#10;&lt;li&gt;Steam&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;リモート&#10;&lt;ul&gt;&#10;&lt;li&gt;Splash Streamer&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;オフィスソフト&#10;&lt;ul&gt;&#10;&lt;li&gt;LibreOffice&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ツール&#10;&lt;ul&gt;&#10;&lt;li&gt;BetterTouchTool&lt;/li&gt;&#10;&lt;li&gt;Clipy&lt;/li&gt;&#10;&lt;li&gt;Logi Options+&lt;/li&gt;&#10;&lt;li&gt;QR Journal&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイル&#10;&lt;ul&gt;&#10;&lt;li&gt;Adobe Acrobat DC&lt;/li&gt;&#10;&lt;li&gt;Adobe Bridge&lt;/li&gt;&#10;&lt;li&gt;Dropbox&lt;/li&gt;&#10;&lt;li&gt;FreeFileSync&lt;/li&gt;&#10;&lt;li&gt;QSync Client&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;デザイン&#10;&lt;ul&gt;&#10;&lt;li&gt;Affinity Designer, Photo, Publisher 2&lt;/li&gt;&#10;&lt;li&gt;Pixelmator Pro&#10;&lt;ul&gt;&#10;&lt;li&gt;超解像をAutomatorで右クリックコマンドに組み込めるのが便利なので&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;コミュニケーション&#10;&lt;ul&gt;&#10;&lt;li&gt;LINE&#10;&lt;ul&gt;&#10;&lt;li&gt;しゃーない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Slack&lt;/li&gt;&#10;&lt;li&gt;zoom&lt;/li&gt;&#10;&lt;li&gt;Zoho Mail Desktop&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="homebrewから"&gt;Homebrewから&#10;&lt;/h3&gt;&lt;p&gt;必要になった時に都度入れたらいいんだけどさ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;開発&#10;&lt;ul&gt;&#10;&lt;li&gt;shellcheck&lt;/li&gt;&#10;&lt;li&gt;emacs&lt;/li&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;li&gt;fish&#10;&lt;ul&gt;&#10;&lt;li&gt;メイン端末&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;git&lt;/li&gt;&#10;&lt;li&gt;poetry&lt;/li&gt;&#10;&lt;li&gt;jq&lt;/li&gt;&#10;&lt;li&gt;cliclick&lt;/li&gt;&#10;&lt;li&gt;lazygit&lt;/li&gt;&#10;&lt;li&gt;lazydocker&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メディア&#10;&lt;ul&gt;&#10;&lt;li&gt;imagemagick&lt;/li&gt;&#10;&lt;li&gt;poppler&lt;/li&gt;&#10;&lt;li&gt;ffmpeg&lt;/li&gt;&#10;&lt;li&gt;youtube-dl&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ファイル操作&#10;&lt;ul&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;peco&lt;/li&gt;&#10;&lt;li&gt;zip&lt;/li&gt;&#10;&lt;li&gt;tree&lt;/li&gt;&#10;&lt;li&gt;fzf&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="細かな設定"&gt;細かな設定&#10;&lt;/h2&gt;&lt;p&gt;ターミナルの設定はなんだかんだ妙にこれで慣れてしまったので……。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;NASの設定（「&lt;a class="link" href="https://hack-le.com/rnas104smbup/" &gt;MacとReadyNAS 104の通信速度が遅い時の対処法(SMB)&lt;/a&gt;」）&lt;/li&gt;&#10;&lt;li&gt;fishの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;パスの設定、履歴数など&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;ターミナルの設定&#10;&lt;ul&gt;&#10;&lt;li&gt;monaco 12pt.&lt;/li&gt;&#10;&lt;li&gt;背景黒&lt;/li&gt;&#10;&lt;li&gt;Optionをメタキー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;自分用binディレクトリのソフトリンクとパス設定&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>テキストで図を書けるWordPressのMermaidプラグインは最高だぜ</title><link>https://hack-le.com/wp-mermaid/</link><pubDate>Wed, 08 May 2024 17:53:21 +0900</pubDate><guid>https://hack-le.com/wp-mermaid/</guid><description>&lt;p&gt;ブログ記事を書いていると、ちょっとした図を書きたくなることがある。だがブログ書きにとって、図は一つの鬼門である。というかめんどくさい。&lt;strong&gt;ただただめんどくさい&lt;/strong&gt;。いくつかのコンポーネントを矢印で繋ぐ程度のしょっぱいシステム図を書くために、編集ソフトを起動し、エクスポートし、アップロードして貼り付けるのは苦行である。そんなことはやりたくない。&lt;/p&gt;&#10;&lt;p&gt;できるぞ、Mermaid記法なら。&lt;/p&gt;&#10;&lt;h2 id="救いのmermaidプラグイン"&gt;救いのMermaidプラグイン&#10;&lt;/h2&gt;&lt;p&gt;Mermaid記法とは図をテキストで記述するもので、図の種類によっては手で頑張って書くより余程楽に書ける。テキストであるため、最近ならばAIに下書きさせることも可能だ。Notionなんかも対応している。というかNotionで図を書く方法は標準的にはこれしかない（Draw.ioがブラウザで使えるエクステンション出していたりするが）。WordPressでもプラグインを導入してMermaid記法に対応することにより、&lt;strong&gt;手をキーボードから離すことなくブログで図を書くことができる&lt;/strong&gt;というわけだ。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR&#10;hoge(Hoge)&#10;fuga(Fuga)&#10;db[(謎のデータベース)]&#10;hoge --&gt;|hogehoge| fuga&#10;hoge -.- db&lt;/pre&gt;&lt;p&gt;こんな感じでさらっと図が書ける。描けるじゃなくて書ける。正直これくらいの絵でも、あるのとないのとではわかりやすさが全然違うことはよくあるのだが、そうは言ってもこの程度の絵でも描くのは非常に面倒なので、ブログ記事だとついつい端折ってしまいがちである。でもテキストなら書ける。&lt;/p&gt;&#10;&lt;h2 id="gutenbergとの相性よし"&gt;Gutenbergとの相性よし&#10;&lt;/h2&gt;&lt;p&gt;実際これは非常に便利で、手放せないプラグインの一つになった。また、このプラグインはブロックエディターであるGutenbergと非常に相性が良い。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2024/05/86a7115eff3e45c4f89255f72315c924-700x349.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Screenshot&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;このように/mermaidと記述するだけで、ブロックを呼び出してコードを書くことができる。これがクラシックエディタだとそうはいかない。&lt;/p&gt;&#10;&lt;p&gt;Gutenbergは出始めは全文コピペすらままならず阿鼻叫喚で、その時の印象が悪すぎたためにクラシックエディタをずっと使い続けていたのだが、ひたすら改良されていったようで、今はだいぶ使いやすくなった。箇条書きをシフトでインデントできない（スペースでできるけど……）のはなんとかしてもらいたいし、htmlコードのタグも複雑になってしまっている（REST APIで頑張ろうと思った時に壁になりそうなんだよなぁ）が、エディタとして使う分には良いと思う。&lt;/p&gt;&#10;&lt;h2 id="記法は覚える価値あり"&gt;記法は覚える価値あり&#10;&lt;/h2&gt;&lt;p&gt;Mermaid記法はテキストベースであるので、ChatGPTをはじめとする昨今の生成AIとは非常に相性が良い。言えばスニペットを書いてくれる。書いてくれるが、&lt;strong&gt;そもそも「編集ソフト起動するのめんどくせぇ」が根幹にあるわけで、当然「AIに聞くのもめんどくせぇ」のである&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;したがって、いちいち調べながら書かずに、書きたい図が書ける程度には覚える必要はある。必要はあるが、これは気合いを入れて&lt;strong&gt;2,3時間ほどチュートリアルを頑張ればほぼほぼやりたいことはできるようになる&lt;/strong&gt;と思われる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://mermaid.js.org/intro/getting-started.html" target="_blank" rel="noopener"&#10; &gt;Mermaid User Guide | Mermaid&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://mermaid.live/edit#pako:eNpVjk2Lg0AMhv9KyGkL9Q94WGh1t5fCFurN6SFo7AztfDBGpKj_fcd62c0pvM_zhkzY-JYxx-7px0ZTFKhK5SDNoS50NL1Y6m-QZZ_ziQWsd_ya4fhx8tBrH4Jx993mH1cJium8agyijXssGyre_R_HM5T1mYL4cPtLqtHP8FWbi07n_xMdObW-647yjrKGIhQU3wru0XK0ZNr0_rQmCkWzZYV5WlvuaHiKQuWWpNIg_vpyDeYSB97jEFoSLg3dI9ktXH4B_cJWqw" target="_blank" rel="noopener"&#10; &gt;Online FlowChart &amp;amp; Diagrams Editor - Mermaid Live Editor&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この知識はずっと使えるうえに実践的なので、&lt;strong&gt;学習コストという観点で見たとき、非常にコスパ・タイパに優れる&lt;/strong&gt;。Mermaid記法はWordPressだけではなく、Notionで使えるし、拡張機能入れればVSCodeでも使える。テキストで書けるということはコード管理することも可能である。まぁあまり複雑な図を書くのには向いていないので、本格的にやるならそれ用のツールを使うべきだけれど、そんな図を書くことばかりじゃない、というか書きたい図の9割はドラフトだと思う。そんな&lt;strong&gt;9割の需要をMermaid記法は汲んでくれるのです&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ということで、WordPressでMermaidは最高だぜという記事でした。Mermaid記法は食わず嫌いの人が多いように思うのですが（というか自分がそうだった）、学習する価値はあるので是非やると良いと思います。使う人を増やしたい。自分はプラグインで&lt;a class="link" href="https://wordpress.com/plugins/wp-mermaid" target="_blank" rel="noopener"&#10; &gt;WP Mermaid Plugin — WordPress.com&lt;/a&gt;を使っているのですが、もう一年ほどメンテされてないのですよね。良いプラグインだけれど、インストール数も1000+程度。使う人が増えればお金にもできるだろうしメンテナンス意欲も沸くはず……。&lt;/p&gt;&#10;&lt;p&gt;みんなで使おうMermaid。&lt;/p&gt;&#10;</description></item><item><title>WordPressでGutenbergを使うようになった</title><link>https://hack-le.com/wordpress-gutenberg/</link><pubDate>Sun, 22 Oct 2023 14:50:47 +0900</pubDate><guid>https://hack-le.com/wordpress-gutenberg/</guid><description>&lt;p&gt;僕はずっとクラシックエディタを愛用していた。普通に文章を書くだけならそのほうが使いやすかったからだ。クラシックエディタが使いやすいというより、Gutenbergが使いづらかったというほうが正確だろう。特に最初の頃、全文コピペすら手間がかかったのには閉口した。箇条書きのインデントの挙動もタブやShift + Tabで思ったように動いてくれず、あまりよくない（これは今もそう）。&lt;/p&gt;&#10;&lt;h2 id="gutenbergを使い始めた"&gt;Gutenbergを使い始めた&#10;&lt;/h2&gt;&lt;p&gt;しかし、そんな僕も今はGutenbergをメインで使うようになっている。クラシックエディタは過去記事を編集する時くらいにしか使わない。その時には、クラシックエディタを不便に思うこともある。&lt;/p&gt;&#10;&lt;p&gt;いくつかのプラグインが、従来のクラシックエディタよりも使いやすいことがGutenbergを使うようになった大きな理由だ。特にMermaid記法を使えるようになるプラグインは有り難かった。また、このブログは比較的プログラミングのネタもちょくちょくあるから、コードのシンタックスハイライトがやりやすいことも助かっている。Gutenbergのプラグインを使えばビジュアルエディタのままシームレスに作業することができるのは楽だ。クラシックエディタの時はコード部分だけhtmlで記述するなど涙ぐましいことをしていた。ギャラリー機能なんかも、ちょっと画像をリッチに貼りたい時には便利なものだと思った。&lt;/p&gt;&#10;&lt;p&gt;ということで、僕程度のブログ書きでも、Gutenbergの機能はちゃんと使ってみるとけっこう便利なものが多い。確かにまぁ、単なるテキストだけで完結しないことも多くなったこの時代、ブロックエディタは必要な進化だったのかなと、ようやく僕も感じるようになった。&lt;/p&gt;&#10;&lt;h2 id="クラシックエディタのほうが今なお使いやすい面もある"&gt;クラシックエディタのほうが今なお使いやすい面もある&#10;&lt;/h2&gt;&lt;p&gt;しかしそうは言っても、ただテキストを書いて、いくつかの画像を添えるだけならば、今なおクラシックエディタのほうが使いやすいこともまた事実だ。だからこそ僕は長いことクラシックエディタを使い続けてきたのだし、今でもクラシックエディタを愛好している人がいることはとても理解できる。&lt;/p&gt;&#10;&lt;p&gt;Gutenberg、箇条書きの挙動はそろそろなんとかならんものだろうか。やはりShiftを押したときにはインデントをしてほしい。ネストが深くなった時にあれこれ編集していると、意図しない挙動になることもままある。箇条書きはテキストにおいてはもっともよく使う機能の一つなので、これはけっこうストレスフルだ。&lt;/p&gt;&#10;&lt;p&gt;あとあまり使っている人はいないかもしれないのだが、REST APIなんか使って編集しようとした時、Gutenbergは独自のタグが多すぎてとてもついていけない。まぁREST APIユーザはどちらかというとWordPressをバックエンドとして使う人のためのものかもしれないが……。&lt;/p&gt;&#10;&lt;p&gt;WordPressの開発はたいへんだろうが、クラシックエディタのほうが明確に良いと言えるユースケースが存在する以上、サポートはまだまだ続けざるを得ないのではないだろうか。&lt;/p&gt;&#10;&lt;h2 id="wordpressいいよね"&gt;WordPressいいよね……&#10;&lt;/h2&gt;&lt;p&gt;とは言うものの、基本的にはGutenbergで良いんじゃないの、と思う程度には、Gutenbergも熟れたように思う。あとはもうちょっとMarkdownっぽいコマンドがきくといいんだけどな。Notion並の操作感にならんかな。などと勝手なことを言っているが、WordPressにまったく金を出していない身なので、正直使えるだけでも有り難い。&lt;/p&gt;&#10;&lt;p&gt;WordPressの素晴らしいところは、多くのホスティングサービスが存在するところだ。昔は自分でサーバたててブログ運営するのも楽しかったが、今となってはひたすらめんどくさいだけなので、ホスティングサービスが多数存在し、切磋琢磨しているのはただただ有り難い。インストールも楽だ。&lt;/p&gt;&#10;&lt;p&gt;僕はカラフルボックスというサービスを使っているのだが、一つの契約に複数のWordPressをのっけることもできるので、だいぶお得だと思う。GUIでサクッと作ったり壊したりできるから、サイトのスクラップ&amp;amp;ビルドも手軽にできる。実際、運用するサイトの数を増やすことができたのはホスティングサービスのおかげだ。まぁ可用性については微妙なところもあるが、99.5-99.9%くらいは出せているようだ。ちょいちょい落ちるけど。とはいえ、自分でPHPとかDBのアップグレードする作業を思えば楽すぎてもう。証明書の更新失敗とかもないし。&lt;/p&gt;&#10;&lt;p&gt;これだけ使いやすい体系を世界的に構築したWordPressには、ただただ頭が下がる。WordPressは良いものだ。&lt;/p&gt;&#10;</description></item><item><title>NotionはWebブラウザのほうが便利</title><link>https://hack-le.com/notion-web/</link><pubDate>Wed, 27 Sep 2023 23:18:07 +0900</pubDate><guid>https://hack-le.com/notion-web/</guid><description>&lt;p&gt;最近あった良いこととして、会社でNotionを使えるようになったことがある。プライベートでも使っているツールを、チームとして使える経験をもらえたのは良いことだ。また幸いなことに、一定程度の影響力を行使できる立場にあるので、限定的ではあるけれど、Notionをフルに使って開発作業にあたることができている。&lt;/p&gt;&#10;&lt;h2 id="デスクトップアプリの出来はあまりよくない"&gt;デスクトップアプリの出来はあまりよくない&#10;&lt;/h2&gt;&lt;p&gt;Notionにはデスクトップアプリがある。昔からのPCユーザの感覚だと、専用アプリがあるならそちらのほうがいいに決まっているだろう、と思ってしまうのだが、Notionについては残念な結果だった。&lt;/p&gt;&#10;&lt;p&gt;UIなど、何から何までWebアプリ版と同じで、違うところと言えば複数タブが開けるところくらいだと思う。でもタブの入れ替えという基本的なことも出来ず、ブラウザのタブ機能よりハッキリ言って貧弱であるため、これが機能アップとは言いがたい。&lt;/p&gt;&#10;&lt;p&gt;あとはまぁスタンドアロンのアプリなので、Dockから多少呼び出すやすくなった。&lt;/p&gt;&#10;&lt;p&gt;以上がデスクトップアプリを使って良かったことのすべて。ネイティブのアプリならパフォーマンスなどに期待したいところだが、残念ながら別にはやくなる感じはない。&lt;/p&gt;&#10;&lt;h2 id="webアプリには拡張機能がある"&gt;Webアプリには拡張機能がある&#10;&lt;/h2&gt;&lt;p&gt;まぁそれでも多少なりともいいところがあるなら使えばいいんじゃないの？という考えもあるかもしれないが、残念ながら（？）Webアプリ版のほうにこそデスクトップ版にはない大きなメリットがある。それは拡張機能だ。&lt;/p&gt;&#10;&lt;p&gt;特にsvgを直接編集できるようになるDraw.ioのNotion向けChomeエクステンションはめちゃくちゃ強力だ。&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://chrome.google.com/webstore/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle/related?hl=ja" target="_blank" rel="noopener"&#10; &gt;https://chrome.google.com/webstore/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle/related?hl=ja&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;これだけのためにWebブラウザ版使う価値がある。Notionの絵を描くにはMermaid記法しか使えないという大きな弱点を克服するものだ。プログラマはともかく、ビジネス層にMermaid記法で書いてくれとは言えないからねぇ。まぁそうでなくても、それなりに大きなアーキテクチャ図なんか、Mermaidで描いたらカオスだしね。カオスだった。&lt;/p&gt;&#10;&lt;p&gt;あと、個人的に最近使っているタイマーアプリTogglのエクステンションがNotionにも対応しているのがよかった。まだあんまり使いこなせてないけど。&lt;/p&gt;&#10;&lt;p&gt;ということで、拡張機能がある分Webアプリ版のほうがNotionについては明確に良い。&lt;/p&gt;&#10;&lt;h2 id="webアプリにネイティブの皮を被せても"&gt;Webアプリにネイティブの皮を被せても……&#10;&lt;/h2&gt;&lt;p&gt;まぁNotionに限らず、一時期からよく見かけるようになったWebアプリをそのまんまネイティブアプリにしたようなやつは、だいたいどれも拡張機能的な理由でWebアプリ版より劣る。アカウントの切り替えとかで多少の優位性があったりするが、それは拡張機能の不足を補えるものではない。開発費の関係でそうなってしまうんだろうなと思いつつ、だったらなくてええわ、というのがイチユーザとしての感触である。&lt;/p&gt;&#10;&lt;p&gt;むしろ、なまじっかWebアプリの出来がよいからこそ起きた悲劇なのかもしれない。EvernoteとかWebアプリ酷かったのに無理矢理UI統合して阿鼻叫喚だったからなぁ……今はもうよくなったのだろうか。&lt;/p&gt;&#10;&lt;p&gt;そんなこんなで、結局ブラウザ版のNotionを使っている。&lt;/p&gt;&#10;</description></item><item><title>久しぶりのGutenberg</title><link>https://hack-le.com/gutenberg/</link><pubDate>Wed, 05 Jul 2023 17:54:58 +0900</pubDate><guid>https://hack-le.com/gutenberg/</guid><description>&lt;p&gt;いくつかの機能を試すために、久しぶりにGutenbergを起動している。中途半端ではあるがMarkdownも使えるし。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;p&gt;コードの入力がどれだけ楽にできるか。クラシックエディタだと直接htmlを書かざるを得ず苦痛ではあった。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import boto3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def main():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pass&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if __name__ == &amp;#39;__main__&amp;#39;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; main()&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;テーマ変えたからシンタックスハイライトはされない。確かCDNでなんか入れたんだよな……。もはやそれも面倒くさい……プラグインをそのうちなんか入れよう……。&lt;/p&gt;&#10;&lt;h2 id="mermaid記法"&gt;Mermaid記法&#10;&lt;/h2&gt;&lt;p&gt;今回Gutenbergを使い始めようと思った理由の一つで、プラグインを入れたらいい感じでMermaid記法のブロックが使えるからだ。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR&#10;test(hoge)&#10;test2(hoge2)&#10;test --&gt; test2&lt;/pre&gt;&lt;p&gt;なるほど🤔&lt;/p&gt;&#10;&lt;p&gt;まぁ書きやすいといえば書きやすいか。tabキーでフォーカス外れるのはつらいけど……。&lt;/p&gt;&#10;&lt;h2 id="数式"&gt;数式&#10;&lt;/h2&gt;&lt;p&gt;まぁ今となってはあまり使うことはないのだが……。MathJaxを使っていたのだが、コードをいじってヘッダに直接つっこんでいたため、テーマを切り替えたタイミングで見事に死んだ。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/wordpress-mathjax/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;WordPressの数式表現はMathJaxが一等便利&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/wordpress-mathjax/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/09/eyecatch_5155_1789578634.webp" alt="WordPressの数式表現はMathJaxが一等便利" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;まぁもう一回コード差し込んでもいいんだけど、、、僕は気づいたんだ。コードの修正は忘れるけど、プラグインを入れたことは忘れないことに……。運用を考えた時、プラグインに頼るほうが楽。&lt;/p&gt;&#10;&lt;p&gt;ということでMathJax-LaTeXプラグインを入れさせていただきました。。。既存のコードについて、無事きれいに表示されたのを確認。&lt;/p&gt;&#10;&lt;p&gt;そんでショートコードのlatexで囲んだら、インラインで表示される。&lt;/p&gt;&#10;&lt;p&gt;[latex]ax^2 + bx + c = 0[/latex]&lt;/p&gt;&#10;&lt;p&gt;表示されている。またちゃんと数式使うような仕事をしたいもんだね……。&lt;/p&gt;&#10;&lt;h2 id="使えそう"&gt;使えそう&#10;&lt;/h2&gt;&lt;p&gt;いくつか気になる機能について試してみたが、特に問題なさそう。個人的にはMermaidをブロックで書けるのがけっこうキラーアプリだった。このサイトはテキストがメインだから、クラシックエディタのほうが使いやすかったんだけれど、図示したいことは多いからね。Gutenberg使っていくか……。&lt;/p&gt;&#10;</description></item><item><title>GitHubのIssueの初期ラベルについて</title><link>https://hack-le.com/github-label/</link><pubDate>Mon, 03 Apr 2023 13:07:10 +0900</pubDate><guid>https://hack-le.com/github-label/</guid><description>&lt;p&gt;GitHubのProjects機能を使ってタスク管理をしようとしている。そこで、Issueのラベルについても今一度整理しておこうと思った。で、ChatGPTに聞いた😂&lt;/p&gt;&#10;&lt;p&gt;真面目なことをやる時には真面目に役にたつな。&lt;/p&gt;&#10;&lt;h2 id="ラベル一覧"&gt;ラベル一覧&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ラベル&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;意味&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;bug&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;バグがあることを示す。修正が必要な問題がある場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;documentation&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ドキュメンテーションに関する問題を示す。ドキュメンテーションが欠けている場合や改善が必要な場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;duplicate&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;既に報告されている問題と重複していることを示す。同じ問題が複数回報告された場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;enhancement&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;機能の改善や追加を示す。機能を追加することで問題が解決する場合や機能の改善が必要な場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;good first issue&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;初めてのコントリビューションに適した問題を示す。新しいコントリビューターにとって、解決しやすい問題を見つけるのに役立つ。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;help wanted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;コントリビューターの助けを必要とする問題を示す。問題を解決するための手順が不明確な場合や、コントリビューターに知識やスキルが必要な場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;invalid&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不適切な問題報告であることを示す。報告された問題が実際には問題ではない場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;question&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;質問に関する問題を示す。ユーザーが質問をしている場合や、問題についての追加情報を求める場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;wontfix&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;問題を修正しないことを示す。問題が修正不可能である場合や、修正することが望ましくない場合に使用される。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="ラベルの詳細"&gt;ラベルの詳細&#10;&lt;/h2&gt;&lt;p&gt;よくわからんものについて教えてもらった。&lt;/p&gt;&#10;&lt;h3 id="help-wanted"&gt;help wanted&#10;&lt;/h3&gt;&lt;p&gt;help wantedとして、具体的にどのようなIssueがあるか例示をあげてください。&lt;/p&gt;&#10;&lt;p&gt;help wantedのラベルは、開発者がコントリビューションを提供するために、外部のユーザーやコミュニティからのサポートを必要としている問題を示すために使用されます。以下に、help wantedとして設定される可能性のあるIssueの例をいくつか挙げてみます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;バグ報告：バグが報告されており、開発者が問題を解決するために外部のユーザーやコミュニティのサポートを必要としている場合。&lt;/li&gt;&#10;&lt;li&gt;機能追加：新しい機能の追加が必要で、外部のユーザーやコミュニティのサポートを必要としている場合。&lt;/li&gt;&#10;&lt;li&gt;ドキュメンテーション：ドキュメンテーションの更新が必要で、開発者が外部のユーザーやコミュニティのサポートを必要としている場合。&lt;/li&gt;&#10;&lt;li&gt;テスト作成：新しい機能や修正のためのテスト作成が必要で、開発者が外部のユーザーやコミュニティのサポートを必要としている場合。&lt;/li&gt;&#10;&lt;li&gt;コードレビュー：新しい機能や修正のためのコードレビューが必要で、開発者が外部のユーザーやコミュニティのサポートを必要としている場合。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上のように、help wantedとして設定される問題は、開発者が外部のユーザーやコミュニティのサポートを必要とする、幅広い種類の問題があります。&lt;/p&gt;&#10;&lt;p&gt;Q: そうすると、たとえば、運用やビジネス側の協力が必要なタスクなどはhelp wantedになる可能性が高いですか？&lt;/p&gt;&#10;&lt;p&gt;A: はい、運用やビジネス側の協力が必要なタスクも、help wantedとして設定される可能性があります。例えば、開発者が新しい機能を追加しようとしている場合、その機能がビジネス要件を満たしていることを確認するために、ビジネス側の協力が必要になる場合があります。同様に、アプリケーションの運用や監視に関する問題でも、運用チームやインフラストラクチャチームの協力が必要になる場合があります。このような場合、開発者はhelp wantedラベルを設定して、外部のユーザーやコミュニティからのサポートを求めることができます。ただし、help wantedのラベルは主にコード開発に関する問題に使用されるため、他のラベル（例えば、questionやdiscussionなど）も適切な場合があります。&lt;/p&gt;&#10;&lt;h3 id="invalid"&gt;invalid&#10;&lt;/h3&gt;&lt;p&gt;invalidのラベルは、不適切な問題報告であることを示すために使用されます。以下に、invalidとして設定される可能性のあるIssueの例をいくつか挙げてみます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;開発者が再現できない問題：ユーザーが報告した問題を開発者が再現できなかった場合。問題が解決済みであるか、報告された問題があるわけではない可能性があるため、invalidとしてマークされる場合があります。&lt;/li&gt;&#10;&lt;li&gt;ドキュメンテーションの不備：ユーザーがドキュメンテーションに関する問題を報告した場合、報告内容が不十分である場合や、問題が実際には存在しない場合は、invalidとしてマークされる場合があります。&lt;/li&gt;&#10;&lt;li&gt;意図的な問題報告：ユーザーが意図的に問題を報告した場合。報告された問題が実際には問題ではない場合や、問題が意図的に作成された場合には、invalidとしてマークされる場合があります。&lt;/li&gt;&#10;&lt;li&gt;フィーチャーリクエスト：ユーザーがフィーチャーの追加を要望する問題を報告した場合。これは、既存の機能に関する問題ではなく、開発者が実装を検討する必要がある新しい機能の提案です。この場合、invalidとしてマークされる場合があります。&lt;/li&gt;&#10;&lt;li&gt;フォーラムの質問：ユーザーがフォーラムで質問をした場合。これは、Issueとして報告するべきではなく、フォーラムやコミュニティで回答されるべき質問です。この場合、invalidとしてマークされる場合があります。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上のように、invalidとして設定される問題は、実際には問題ではない、あるいは報告の仕方が適切でない場合があります。ただし、適切な報告の仕方やIssueの種類について疑問がある場合には、開発者とのコミュニケーションが必要です。&lt;/p&gt;&#10;&lt;h3 id="good-first-issue"&gt;good first issue&#10;&lt;/h3&gt;&lt;p&gt;good first issueのラベルは、新しいコントリビューターがプロジェクトに貢献するための簡単な問題を示すために使用されます。以下に、good first issueとして設定される可能性のあるIssueの例をいくつか挙げてみます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;ドキュメンテーションの修正：プロジェクトのドキュメンテーションが不十分または誤っている場合、その修正を要求する問題。例えば、タイポの修正や文法の改善など。&lt;/li&gt;&#10;&lt;li&gt;テストの追加：既存の機能に対してテストを追加する問題。これは、新しい機能の実装よりも簡単で、コントリビューターがプロジェクトのテストスイートに貢献することができます。&lt;/li&gt;&#10;&lt;li&gt;バグの修正：プロジェクトで報告された単純なバグの修正を要求する問題。これは、プロジェクトにコントリビュートするために必要な最初のステップの1つです。&lt;/li&gt;&#10;&lt;li&gt;コードのリファクタリング：既存のコードのリファクタリングを要求する問題。これは、コントリビューターがコードベースに慣れている場合に実行できる作業であり、プロジェクトの改善につながります。&lt;/li&gt;&#10;&lt;li&gt;軽微な機能の追加：小規模な機能の追加を要求する問題。例えば、新しいボタンの追加や、新しいコマンドラインフラグの追加など。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上のように、good first issueとして設定される問題は、新しいコントリビューターがプロジェクトに貢献するための簡単な問題が多く含まれています。これらの問題は、コントリビューターがプロジェクトに慣れて、より大規模な問題に取り組む準備をするための最初のステップとして非常に役立ちます。&lt;/p&gt;&#10;&lt;p&gt;Q: 社内プロジェクトで用いるリポジトリでは、新人のトレーニングに使える問題ですね。&lt;/p&gt;&#10;&lt;p&gt;A: はい、その通りです。社内プロジェクトで用いるリポジトリにおいて、good first issueとして設定される問題は、新しいコントリビューターや新人のトレーニングに役立ちます。これらの問題は、より大規模な問題に取り組むために必要なスキルを習得するのに適した、プロジェクトに参加する初心者にとって理想的なものです。&lt;/p&gt;&#10;&lt;p&gt;例えば、新人には、プロジェクトの構造やテスト、ドキュメンテーションの仕組みに慣れることが必要です。good first issueとして設定される問題には、既存のドキュメンテーションの修正や、新しいドキュメンテーションの追加、簡単なテストの追加、軽微なバグの修正、小規模な機能の追加などが含まれます。これらの問題に取り組むことで、新人はプロジェクトに慣れることができ、より大規模な問題に取り組むためのスキルを習得することができます。&lt;/p&gt;&#10;&lt;p&gt;また、good first issueとして設定される問題は、コントリビューターがプロジェクトに貢献するためのモチベーションを高めることができます。初心者でも解決できる簡単な問題があることで、コントリビューターは自信を持って、より大規模な問題に取り組むことができます。&lt;/p&gt;&#10;&lt;p&gt;したがって、社内プロジェクトで用いるリポジトリにおいて、good first issueとして設定される問題は、新人のトレーニングや、プロジェクトへの貢献を促すための重要な役割を果たします。&lt;/p&gt;</description></item></channel></rss>