<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>自動テスト on gkzz.dev</title>
    <link>https://gkzz.dev/tags/%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88/</link>
    <description>Recent content in 自動テスト on gkzz.dev</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 04 Oct 2026 00:00:00 +0900</lastBuildDate>
    <atom:link href="https://gkzz.dev/tags/%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>dry-run と GitHub Actions でメンテしている dotfiles を mise に寄せた</title>
      <link>https://gkzz.dev/posts/towards-testable-dotfiles/</link>
      <pubDate>Sun, 04 Oct 2026 00:00:00 +0900</pubDate>
      <guid>https://gkzz.dev/posts/towards-testable-dotfiles/</guid>
      <description>&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;私の dotfiles では、ローカルの dry-run と GitHub Actions で、設定の変更を確認できるようにしています。dotfiles の設定適用にはスクリプトを使っていたのですが、手を入れるうちにスクリプトとテストコードが増えてきました。&lt;/p&gt;
&lt;p&gt;そこで、シンボリックリンクの作成・解除や、パッケージ・開発ツールの導入を &lt;code&gt;mise bootstrap&lt;/code&gt; に寄せました。&lt;/p&gt;
&lt;p&gt;この記事では、もともとスクリプトで行っていた処理と、mise に移したあとの設定やコマンドを紹介します。&lt;/p&gt;
&lt;h2 id=&#34;1-もともとはスクリプトで導入解除していた&#34;&gt;1. もともとはスクリプトで導入・解除していた&lt;/h2&gt;
&lt;p&gt;dotfiles のセットアップは、PC のリプレイスなどを除けば頻繁に実行するものではありません。&lt;/p&gt;
&lt;p&gt;そこで、ローカルでは dry-run で適用・解除の内容を確認し、GitHub Actions では自動テスト用に HOME 相当のディレクトリを用意して、一連の操作を試せるようにしていました。&lt;/p&gt;
&lt;p&gt;当初は、複雑なことをしていなかったので、mise のようなツールを使うのはオーバーキルだと考えていました。そのため、install / uninstall といった操作に使うスクリプトを書いていました。&lt;/p&gt;
&lt;p&gt;その後、適用前に dry-run で内容を確認したい、ローカルと CI でできるだけ同じ操作を使いたい、と要件が増えていきました。導入処理とは別に、それらを支えるスクリプトやテストコードも増え、構成が複雑になってきました。&lt;/p&gt;
&lt;p&gt;要件が増えるたびに、実装とテストの両方を変更する必要がありました。dotfiles の設定に加えて、導入・解除の仕組みも自分でメンテすることになっていました。そこで、&lt;code&gt;mise bootstrap&lt;/code&gt; を使って、このあたりをまとめて管理することにしました。&lt;/p&gt;
&lt;h2 id=&#34;2-dotfiles-の配置とツールの導入を-mise-bootstrap-にまとめる&#34;&gt;2. dotfiles の配置とツールの導入を mise bootstrap にまとめる&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://mise.jdx.dev/bootstrap.html&#34;&gt;mise bootstrap&lt;/a&gt; は、[dotfiles]、[bootstrap.packages]、[tools] などの設定をまとめて扱います。dotfiles だけを操作したい場合は mise dotfiles のコマンドを使えます。&lt;/p&gt;
&lt;p&gt;dotfiles だけを操作するには、&lt;a href=&#34;https://mise.jdx.dev/dotfiles.html&#34;&gt;mise dotfiles&lt;/a&gt; を使えます。&lt;/p&gt;
&lt;h3 id=&#34;2-1-シンボリックリンクの配置先を-dotfiles-に書く&#34;&gt;2-1. シンボリックリンクの配置先を [dotfiles] に書く&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;mise.toml&lt;/code&gt; の &lt;code&gt;[dotfiles]&lt;/code&gt; に、どのファイルをどこへ配置するかを記述します。下記は一例です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;dotfiles&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# &amp;#34;&amp;lt;target&amp;gt;&amp;#34; = { source = &amp;#34;&amp;lt;リポジトリをルートとした相対パス&amp;gt;&amp;#34;, mode = &amp;#34;&amp;lt;symlink/シンボリックリンクなど指定したいモード&amp;gt;&amp;#34; }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.dotfiles&amp;#34;&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;symlink&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.bashrc&amp;#34;&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.bashrc&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;symlink&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.bash_profile&amp;#34;&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.bash_profile&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;symlink&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.gitconfig&amp;#34;&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.gitconfig&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;symlink&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.config/mise/config.toml&amp;#34;&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mise.toml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;symlink&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;各エントリに &lt;code&gt;mode = &amp;quot;symlink&amp;quot;&lt;/code&gt; を明示して、シンボリックリンクで配置するようにしています。たとえば、&lt;code&gt;~/.bashrc&lt;/code&gt; にはリポジトリ内の &lt;code&gt;.bashrc&lt;/code&gt; へのリンクを作ります。リンクの作成・解除は mise に任せるので、dotfiles 側では配置先の設定をメンテすることになります。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
