<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Toru Ikeda</title>
    <description>The latest articles on DEV Community by Toru Ikeda (@torudev).</description>
    <link>https://dev.to/torudev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4084967%2Ffe402a96-5e2a-4ed9-992c-ea6ff246d28d.jpg</url>
      <title>DEV Community: Toru Ikeda</title>
      <link>https://dev.to/torudev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/torudev"/>
    <language>en</language>
    <item>
      <title>Say Goodbye to "It Works on My Machine": Why I Built a New Task Runner 🚀</title>
      <dc:creator>Toru Ikeda</dc:creator>
      <pubDate>Wed, 19 Aug 2026 12:00:46 +0000</pubDate>
      <link>https://dev.to/torudev/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner-3mi9</link>
      <guid>https://dev.to/torudev/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner-3mi9</guid>
      <description>&lt;p&gt;Have you ever spent hours—or even days—debugging a failed build or deployment, only to realize the issue was a slight difference in local environments?&lt;/p&gt;

&lt;p&gt;Maybe your colleague had Go 1.21 installed instead of Go 1.22. Maybe they were on Windows while you were on a Mac. Or maybe their AWS CLI version was slightly outdated.&lt;/p&gt;

&lt;p&gt;We've all been there. It's the classic "It works on my machine" problem.&lt;/p&gt;

&lt;p&gt;To solve this, I built &lt;a href="https://github.com/lask-task-runner/lask" rel="noopener noreferrer"&gt;Lask&lt;/a&gt;, a task runner that eliminates environment discrepancies by embedding the execution environment directly into the syntax. Here is why I built it and how it works.&lt;/p&gt;

&lt;p&gt;🛑 &lt;strong&gt;The limitations of current solutions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When trying to standardize tasks, teams usually lean on two approaches:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Shell Scripts &amp;amp; Makefiles&lt;/strong&gt;: Writing scripts automates the steps, but it doesn't standardize the execution environment. You are still at the mercy of whatever is installed on the host OS. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD Pipelines&lt;/strong&gt;: Running tasks in GitHub Actions or CI provides a perfectly clean, reproducible environment. However, it sacrifices the fast feedback loop of local development. Developers often struggle to test the exact same CI pipeline locally.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted a tool that combines the reproducibility of CI/CD with the speed and convenience of local execution.&lt;/p&gt;

&lt;p&gt;✨ &lt;strong&gt;Enter: Lask&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lask is an open-source task runner designed around three core principles: Reproducibility, Portability, and Ease of Execution.&lt;/p&gt;

&lt;p&gt;Instead of relying on whatever tools are installed on your host machine, Lask lets you define the execution environment inline, right next to your command.&lt;/p&gt;

&lt;p&gt;Here is what a &lt;code&gt;publish&lt;/code&gt; task looks like in Lask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// main.lask
publish(--var: String = "1.0.0") = do {
  // Run inside a Go 1.22 container
  $[#golang:1.22] GOOS=linux GOARCH=arm64 go build -o bootstrap ./cmd/lambda

  // Run inside a Zip container
  $[#zip:latest] zip function.zip bootstrap

  // Run inside an AWS CLI container
  $[#aws-cli:2.36] aws lambda update-function-code \
    --function-name my-function \
    --zip-file fileb://function.zip
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By simply typing lask run publish in your terminal, Lask uses containers under the hood to execute each step in its exact required environment.&lt;/p&gt;

&lt;p&gt;Why this changes the game:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔒 &lt;strong&gt;True Reproducibility&lt;/strong&gt;: Because the environment (#golang:1.22, #aws-cli:2.36) is hardcoded into the task, anyone running the script gets the exact same result. No more accidental mismatches.&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Portability&lt;/strong&gt;: Whether you are on Linux, macOS, Windows, or inside a CI runner, the behavior is identical. You effectively bring the CI environment down to your local machine.&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Zero Setup&lt;/strong&gt;: Lask is delivered as a single binary. It also features static typing for safety and a built-in REPL for int
eractive experimentation!
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;lask repl
lask&amp;gt; &lt;span class="nv"&gt;$[&lt;/span&gt;&lt;span class="c"&gt;#rancher/cowsay] cowsay "Hello, Lask!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🤝 &lt;strong&gt;I'd love your feedback!&lt;/strong&gt;&lt;br&gt;
Lask is completely open-source and actively being developed. If you are tired of debugging local environment issues, I would be thrilled if you gave it a try or checked out the code.&lt;/p&gt;

&lt;p&gt;⭐ GitHub: &lt;a href="https://github.com/lask-task-runner/lask" rel="noopener noreferrer"&gt;lask-task-runner/lask&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What tools do you currently use to keep dev environments in sync across your team? Let me know in the comments below! 👇&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
