<?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>Forem: nabbisen</title>
    <description>The latest articles on Forem by nabbisen (@nabbisen).</description>
    <link>https://forem.com/nabbisen</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F87972%2Fb8906b69-d11d-4d7c-b3b7-ba77da28d654.jpg</url>
      <title>Forem: nabbisen</title>
      <link>https://forem.com/nabbisen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nabbisen"/>
    <language>en</language>
    <item>
      <title>jwt-encde 1.1: npm packages for cross-platform published</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Fri, 30 Jan 2026 09:11:20 +0000</pubDate>
      <link>https://forem.com/nabbisen/jwt-encde-11-npm-packages-for-cross-platform-published-504l</link>
      <guid>https://forem.com/nabbisen/jwt-encde-11-npm-packages-for-cross-platform-published-504l</guid>
      <description>&lt;p&gt;&lt;a href="https://scqr.net/en/blog/2026/01/21/jwt-encde-1_0-auth-test-helper//index.html" rel="noopener noreferrer"&gt;jwt-encde&lt;/a&gt;, local and fast GUI JWT encoder/decoder, 1.1 🎉 now supports installation via &lt;code&gt;npm&lt;/code&gt; 🤍&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; jwt-encde
npx jwt-encde
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>jwt</category>
      <category>test</category>
      <category>gui</category>
      <category>security</category>
    </item>
    <item>
      <title>jwt-encde: A simple way to handle JWTs on your desktop</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Wed, 21 Jan 2026 13:20:08 +0000</pubDate>
      <link>https://forem.com/nabbisen/jwt-encde-a-simple-way-to-handle-jwts-on-your-desktop-3fln</link>
      <guid>https://forem.com/nabbisen/jwt-encde-a-simple-way-to-handle-jwts-on-your-desktop-3fln</guid>
      <description>&lt;p&gt;If you're looking for a way to analyze JWTs without using online tools, &lt;a href="https://github.com/nabbisen/jwt-encde" rel="noopener noreferrer"&gt;&lt;strong&gt;jwt-encde&lt;/strong&gt;&lt;/a&gt; might be helpful.&lt;/p&gt;

&lt;p&gt;It is a dedicated GUI app that brings JWT decoding and encoding to your local desktop. The first stable version was released today, built with Rust and iced.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F647evd6uh7d6m646dqff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F647evd6uh7d6m646dqff.png" alt="screenshot" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why and when &lt;strong&gt;jwt-encde&lt;/strong&gt; ?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100% Offline: Total privacy and information security. No logs, no tracking, no leaks.&lt;/li&gt;
&lt;li&gt;Robust Design. Simple &amp;amp; Intuitive: Just a clean, high-performance and error-prevention UI ensures you focus on what's relevant to your current data.&lt;/li&gt;
&lt;li&gt;Smart Analysis: Includes JSON syntax highlighting and a built-in Unix timestamp converter to make debugging easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And &lt;strong&gt;NOT&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn't support signature verification, as typically handled during integration tests with an IDaaS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Available for Windows, macOS, and Linux: &lt;a href="https://github.com/nabbisen/jwt-encde" rel="noopener noreferrer"&gt;https://github.com/nabbisen/jwt-encde&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jwt</category>
      <category>gui</category>
      <category>iced</category>
      <category>security</category>
    </item>
    <item>
      <title>MariaDB 11.4 on OpenBSD 7.8: Install</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Wed, 03 Dec 2025 14:27:55 +0000</pubDate>
      <link>https://forem.com/nabbisen/mariadb-114-on-openbsd-78-install-9kc</link>
      <guid>https://forem.com/nabbisen/mariadb-114-on-openbsd-78-install-9kc</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mariadb.com/" rel="noopener noreferrer"&gt;MariaDB&lt;/a&gt; is one of the most popular relational database management systems (RDBMS), forked from &lt;a href="https://www.mysql.com/" rel="noopener noreferrer"&gt;MySQL&lt;/a&gt; by some of the original developers.&lt;br&gt;
It is open source &lt;a href="https://mariadb.com/kb/en/mariadb-licenses/" rel="noopener noreferrer"&gt;licensed&lt;/a&gt; under &lt;a href="http://www.gnu.org/licenses/gpl-2.0.html" rel="noopener noreferrer"&gt;GNU GPL 2&lt;/a&gt;, and ready for both community and enterprise use with long history and large knowledge to manage and maintain.&lt;/p&gt;

&lt;p&gt;To Install it on &lt;a href="https://www.openbsd.org/" rel="noopener noreferrer"&gt;OpenBSD&lt;/a&gt;, the solid and clean operating system, is easy thanks to the &lt;a href="https://www.openbsd.org/faq/faq15.html" rel="noopener noreferrer"&gt;Package Management&lt;/a&gt; system ("ports") maintained by the great project and the community.&lt;/p&gt;

&lt;p&gt;This post shows how to do it.&lt;/p&gt;
&lt;h3&gt;
  
  
  Environment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OS: OpenBSD &lt;a href="https://www.openbsd.org/78.html" rel="noopener noreferrer"&gt;7.8&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Database: MariaDB &lt;a href="https://mariadb.com/resources/blog/mariadb-community-server-11-4-with-improved-query-performance-now-ga-with-long-term-maintenance/" rel="noopener noreferrer"&gt;11.4&lt;/a&gt;.9

&lt;ul&gt;
&lt;li&gt;It's &lt;a href="https://mariadb.org/about/#maintenance-policy" rel="noopener noreferrer"&gt;LTS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Basic steps
&lt;/h3&gt;

&lt;p&gt;Just a few !!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pkg_add mariadb-server
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;rcctl &lt;span class="nb"&gt;enable &lt;/span&gt;mysqld
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mariadb-install-db
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;rcctl start mysqld
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mariadb-secure-installation
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# several questions will be given&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All of the description is below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install the package
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas pkg_add mariadb-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;quirks-7.147 signed on 2025-12-01T09:05:47Z
mariadb-server-11.4.9v1:(...): ok
mariadb-server-11.4.9v1: ok
The following new rcscripts were installed: /etc/rc.d/mysqld
See rcctl(8) for details.
New and changed readme(s):
    /usr/local/share/doc/pkg-readmes/mariadb-server
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As above, the pkg-readme is brought as &lt;code&gt;/usr/local/share/doc/pkg-readmes/mariadb-server&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Activate daemon
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas rcctl &lt;span class="nb"&gt;enable &lt;/span&gt;mysqld
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run &lt;code&gt;mariadb-install-db&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Create the default database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas mariadb-install-db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Installing MariaDB/MySQL system tables in '/var/mysql' ...
OK


Two all-privilege accounts were created.
One is root@localhost, it has no password, but you need to
be system 'root' user to connect. Use, for example, sudo mariadb
The second is _mysql@localhost, it has no password either, but
you need to be the system '_mysql' user to connect.
After connecting you can set the password, if you would need to be
able to connect as any of these users with a password and without sudo

See the MariaDB Knowledgebase at https://mariadb.com/kb

You can start the MariaDB daemon with:
/etc/rc.d/mysqld start

Please report any problems at https://mariadb.org/jira

The latest information about MariaDB is available at https://mariadb.org/.

Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start daemon
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas rcctl start mysqld
&lt;span class="go"&gt;mysqld(ok)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run &lt;code&gt;mariadb-secure-installation&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas mariadb-secure-installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Start (Before the questions)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Several questions given
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Q1: Current root password
&lt;/h5&gt;

&lt;p&gt;It must be none for the first time. Just push Enter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At all the questions below, my choice is written down. Actually, they are up to your environment.&lt;/p&gt;

&lt;h5&gt;
  
  
  Q2: Use unix_socket authentication instead of root password
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Q3: Set root password
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Q4: Remove anonymous users
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Q5: Disallow root login remotely
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Q6: Remove test database
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Q7: Reload privilege tables
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  End (The rest)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You may confirm your daemon is fine with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas rcctl check mysqld
&lt;span class="go"&gt;mysqld(ok)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well, let's login to the server as client with &lt;code&gt;root&lt;/code&gt;, the superuser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After entering the password, you must be welcomed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;Welcome to the MariaDB monitor.  Commands end with ;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;or &lt;span class="se"&gt;\g&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="go"&gt;Your MariaDB connection id is 11
Server version: 11.4.9-MariaDB OpenBSD port: mariadb-server-11.4.9v1

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

&lt;/span&gt;&lt;span class="gp"&gt;Type 'help;&lt;/span&gt;&lt;span class="s1"&gt;' or '&lt;/span&gt;&lt;span class="se"&gt;\h&lt;/span&gt;&lt;span class="s1"&gt;' for help. Type '&lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;&lt;span class="s1"&gt;' to clear the current input statement.
&lt;/span&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;MariaDB [(none)]&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command line examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- create database&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;database&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;CHARACTER&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;utf8mb4&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;COLLATE&lt;/span&gt; &lt;span class="n"&gt;utf8mb4_unicode_ci&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- create user for it&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;database&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;dbuser&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;
    &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;dbpass&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- reload privileges&lt;/span&gt;
&lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;🎵 🐬 Happy storing digitally 🐬 🎵&lt;/p&gt;

</description>
      <category>mariadb</category>
      <category>database</category>
      <category>server</category>
      <category>install</category>
    </item>
    <item>
      <title>OpenBSD 7.7 を 7.8 へ アップグレード</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Sun, 16 Nov 2025 09:50:02 +0000</pubDate>
      <link>https://forem.com/nabbisen/openbsd-77-wo-78-he-atupuguredo-4g15</link>
      <guid>https://forem.com/nabbisen/openbsd-77-wo-78-he-atupuguredo-4g15</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.openbsd.org/" rel="noopener noreferrer"&gt;OpenBSD&lt;/a&gt; プロジェクトから 2025 年 10 月 22 日に OS の &lt;a href="https://www.openbsd.org/78.html" rel="noopener noreferrer"&gt;7.8&lt;/a&gt; がリリースされました 🌷 59 回目のリリースに当たります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs8q5lf87aldlrzghgvk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs8q5lf87aldlrzghgvk.gif" alt="openbsd release" width="200" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;a href="https://www.openbsd.org/78.html#new" rel="noopener noreferrer"&gt;What's New&lt;/a&gt; | &lt;a href="https://www.openbsd.org/plus78.html" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
&lt;/center&gt;

&lt;p&gt;本記事で OpenBSD 7.7 を 7.8 にアップグレードする手順を説明します。&lt;br&gt;
各手順はすばらしい &lt;a href="https://www.openbsd.org/faq/upgrade78.html" rel="noopener noreferrer"&gt;公式ガイド (英語)&lt;/a&gt; に基づいています。&lt;/p&gt;
&lt;h2&gt;
  
  
  チュートリアル
&lt;/h2&gt;

&lt;p&gt;実行するコマンド一式を示しながら、ステップ・バイ・ステップ形式で書いた、アップグレード用のガイドです。&lt;/p&gt;

&lt;center&gt;🌊 🐡 🌊&lt;/center&gt;
&lt;h3&gt;
  
  
  1. アップグレード前準備: 検証とカスタイマイズ
&lt;/h3&gt;

&lt;p&gt;公式のチュートリアルには &lt;a href="https://www.openbsd.org/faq/upgrade78.html#BeforeUpdate" rel="noopener noreferrer"&gt;Before using any upgrade method&lt;/a&gt; (私訳: アップグレード方法に関わらずその前に行うこと) セクションが設けられています。&lt;/p&gt;

&lt;p&gt;アップグレード方法としては &lt;a href="https://man.openbsd.org/sysupgrade" rel="noopener noreferrer"&gt;&lt;code&gt;sysupgrade&lt;/code&gt;&lt;/a&gt; を使うのが、たいていの場合、良い選択になるでしょう。&lt;/p&gt;
&lt;h4&gt;
  
  
  ディスク空き容量の確認
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;/usr&lt;/code&gt; に 1.1GB 以上の空きがあることが必要です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;span class="go"&gt;Filesystem     Size    Used   Avail Capacity  Mounted on
(...)
/dev/sd1e      7.6G    3.5G    3.7G    50%    /usr
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OK のようです :)&lt;/p&gt;

&lt;h4&gt;
  
  
  現在の利用内容がアップグレード結果に適合することの確認
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.openbsd.org/faq/upgrade78.html#ConfigChanges" rel="noopener noreferrer"&gt;設定と構文の変更 (英語)&lt;/a&gt; と &lt;a href="https://www.openbsd.org/faq/upgrade78.html#SpecialPackages" rel="noopener noreferrer"&gt;特別なパッケージ (英語)&lt;/a&gt; を確認しましょう。&lt;br&gt;
後者に関して、今回は &lt;a href="https://www.php.net/" rel="noopener noreferrer"&gt;PHP&lt;/a&gt; が含まれています。デフォルトバージョンが &lt;a href="https://www.php.net/releases/8.3/ja.php" rel="noopener noreferrer"&gt;8.3&lt;/a&gt; に変更されています:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The default version of PHP in ports has changed from 8.2 to 8.3.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h4&gt;
  
  
  バックアップ (必要な場合)
&lt;/h4&gt;

&lt;p&gt;適宜、事前にバックアップを取得しておきましょう。&lt;/p&gt;
&lt;h4&gt;
  
  
  アップグレード内容のカスタマイズ (必要な場合)
&lt;/h4&gt;

&lt;p&gt;ここは参照用であり、標準のアップグレードではスキップできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://man.openbsd.org/sysupgrade" rel="noopener noreferrer"&gt;/auto_upgrade.conf&lt;/a&gt; をレスポンス・ファイルとして利用できます。&lt;br&gt;
OpenBSD の &lt;a href="https://man.openbsd.org/autoinstall.8" rel="noopener noreferrer"&gt;autoinstall&lt;/a&gt; のドキュメントに、次のように書かれています:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If either &lt;em&gt;&lt;code&gt;/auto_install.conf&lt;/code&gt;&lt;/em&gt; or &lt;em&gt;&lt;code&gt;/auto_upgrade.conf&lt;/code&gt;&lt;/em&gt; is found on &lt;em&gt;&lt;code&gt;bsd.rd&lt;/code&gt;&lt;/em&gt;'s built-in RAM disk, &lt;strong&gt;&lt;code&gt;autoinstall&lt;/code&gt;&lt;/strong&gt; behaves as if the machine is netbooted, but uses the local response file. In case both files exist, &lt;em&gt;&lt;code&gt;/auto_install.conf&lt;/code&gt;&lt;/em&gt; takes precedence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(私訳: &lt;em&gt;&lt;code&gt;/auto_install.conf&lt;/code&gt;&lt;/em&gt; または &lt;em&gt;&lt;code&gt;/auto_upgrade.conf&lt;/code&gt;&lt;/em&gt; が &lt;em&gt;&lt;code&gt;bsd.rd&lt;/code&gt;&lt;/em&gt; 内蔵の RAM ディスクに存在する場合、&lt;strong&gt;&lt;code&gt;autoinstall&lt;/code&gt;&lt;/strong&gt; は、ネットブートモードで起動されたマシンのように振る舞いますが、ローカルにあるレスポンス・ファイルを使用します。両方のファイルが存在する場合、&lt;em&gt;&lt;code&gt;/auto_install.conf&lt;/code&gt;&lt;/em&gt; が優先されます。)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/auto_upgrade.conf&lt;/code&gt; の完全な内容の一例は次のようなものです:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="err"&gt;Location&lt;/span&gt; &lt;span class="err"&gt;of&lt;/span&gt; &lt;span class="py"&gt;sets&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;disk&lt;/span&gt;
&lt;span class="err"&gt;Pathname&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="py"&gt;sets&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/home/_sysupgrade/&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;-x*&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;+xbase*&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;-game*&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;done&lt;/span&gt;
&lt;span class="err"&gt;Directory&lt;/span&gt; &lt;span class="err"&gt;does&lt;/span&gt; &lt;span class="err"&gt;not&lt;/span&gt; &lt;span class="err"&gt;contain&lt;/span&gt; &lt;span class="err"&gt;SHA256.sig.&lt;/span&gt; &lt;span class="err"&gt;Continue&lt;/span&gt; &lt;span class="err"&gt;without&lt;/span&gt; &lt;span class="py"&gt;verification&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;この場合、xbase を除く x 一式と game が、インストール対象外になります。&lt;/p&gt;

&lt;p&gt;それから &lt;a href="https://man.openbsd.org/upgrade.site.5" rel="noopener noreferrer"&gt;/upgrade.site&lt;/a&gt; を用いた指定も可能です。&lt;/p&gt;




&lt;h3&gt;
  
  
  2. &lt;code&gt;sysupgrade&lt;/code&gt; によるアップグレード
&lt;/h3&gt;

&lt;p&gt;準備は良いですか。&lt;/p&gt;

&lt;p&gt;* 注意: 以下のコマンド &lt;code&gt;sysupgrade&lt;/code&gt; は、ひとたび実行すると中断はできません。&lt;/p&gt;

&lt;p&gt;準備ができたら、以下のコマンドを実行しましょう。実行するのはこれだけです:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas sysupgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のように出力されるでしょう:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Fetching from https://cdn.openbsd.org/pub/OpenBSD/7.8/amd64/
SHA256.sig   100% |***********************************************************|  2324       00:00    
Signature Verified
BUILDINFO    100% |***********************************************************|    54       00:00    
Verifying old sets.
INSTALL.amd64 100% |**********************************************************| 44889       00:00    
base78.tgz   100% |***********************************************************|   498 MB    00:40    
bsd          100% |***********************************************************| 31408 KB    00:02    
bsd.mp       100% |***********************************************************| 31506 KB    00:02    
bsd.rd       100% |***********************************************************|  4691 KB    00:00    
comp78.tgz   100% |***********************************************************| 88484 KB    00:07    
game78.tgz   100% |***********************************************************|  2742 KB    00:00    
man78.tgz    100% |***********************************************************|  8286 KB    00:00    
xbase78.tgz  100% |***********************************************************| 74882 KB    00:06    
xfont78.tgz  100% |***********************************************************| 23018 KB    00:01    
xserv78.tgz  100% |***********************************************************| 11812 KB    00:00    
xshare78.tgz 100% |***********************************************************|  4553 KB    00:00    
Verifying sets.
Fetching updated firmware.
&lt;/span&gt;&lt;span class="gp"&gt;fw_update: add none;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;update intel 
&lt;span class="go"&gt;Upgrading.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;マシンの再起動とシステムのアップグレードが行われます。ふたたび再起動が行われて、&lt;a href="https://man.openbsd.org/sysmerge" rel="noopener noreferrer"&gt;&lt;code&gt;sysmerge&lt;/code&gt;&lt;/a&gt; が自動で実行されます。それから &lt;code&gt;sshd&lt;/code&gt; 等のデーモンが、従来のように起動されます。"Checking for available binary patches..." と出力されて、もし対象が存在すれば "Run syspatch(8) to install:" と表示されるでしょう。&lt;/p&gt;

&lt;p&gt;最終的に以下が表示されます:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;starting local daemons: cron.
Sat Nov 15 16:45:30 JST 2025

OpenBSD/amd64 ... (ttyC0)

login:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ログインメッセージが表示されています。"OpenBSD 7.8 (GENERIC.MP)" とあります。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. アップグレード後の操作: &lt;code&gt;sysmerge&lt;/code&gt; (必要に応じて)
&lt;/h3&gt;

&lt;p&gt;公式ドキュメントに &lt;a href="https://www.openbsd.org/faq/upgrade78.html#AfterSets" rel="noopener noreferrer"&gt;アップグレード後に行うこと (英語)&lt;/a&gt; が書かれています。大いに参考になるでしょう。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In some cases, configuration files cannot be modified automatically. Run&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# sysmerge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;to check and perform these configuration changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ここで言われているのは、手動で &lt;code&gt;sysmerge&lt;/code&gt; を実行することが必要な場合もある、ということです。&lt;br&gt;
以下のような conf ファイルを、手動でマージすることが必要な場合もあります。気を付けてください:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/login.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;コマンドを実行してみましょう:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas sysmerge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;まず差分が出力されるでしょう。それから以下のようにたずねられます:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;  Use 'd' to delete the temporary ./etc/login.conf
  Use 'i' to install the temporary ./etc/login.conf
  Use 'm' to merge the temporary and installed versions
  Use 'v' to view the diff results again

  Default is to leave the temporary file to deal with by hand

How should I deal with this? [Leave it for later]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;最初の 3 つは、以下のような挙動になります:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;d&lt;/code&gt;: 現在の (ローカルの) ファイルを保持する。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;i&lt;/code&gt;: &lt;code&gt;sysupgrade&lt;/code&gt; が取得した新しいファイルでローカルを上書きする。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;m&lt;/code&gt;: 対話型形式で手動でマージする。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;m&lt;/code&gt; を入力するとマージモードが立ち上がります。一つ一つの差分について、いずれを採用するのかを確認されるでしょう:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;l&lt;/code&gt; を入力すると左側が採用されます。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; は右側です。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;その後に、マージ結果ファイルに対して、どの操作を行うのかをたずねられます:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Use 'e' to edit the merged file
  Use 'i' to install the merged file
  Use 'n' to view a diff between the merged and new files
  Use 'o' to view a diff between the old and merged files
  Use 'r' to re-do the merge
  Use 'v' to view the merged file
  Use 'x' to delete the merged file and go back to previous menu
  Default is to leave the temporary file to deal with by hand

===&amp;gt; How should I deal with the merged file? [Leave it for later]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;e&lt;/code&gt; を入力すると、エディタが起動されてマージ結果ファイルを編集できるようになります。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;i&lt;/code&gt; を入力すると、マージ結果ファイルをマシンにインストールします:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;===&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Merging /etc/login.conf &lt;span class="o"&gt;(&lt;/span&gt;running cap_mkdb&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;, needs a relog&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. &lt;code&gt;syspatch&lt;/code&gt; の適用 (スキップ可能)
&lt;/h3&gt;

&lt;p&gt;ここからの 2 つのタスクは、日常的なメンテナンスで、システムをアップデートする時にも実施するものです。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;syspatch&lt;/code&gt; は重要なコマンドです。OpenBSD から、必要と判明し次第都度、継続的に提供される公式のバイナリ・パッチです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas syspatch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. パッケージのアップデート
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.openbsd.org/78.html#new" rel="noopener noreferrer"&gt;What's new (英語)&lt;/a&gt; セクションがリリースページにありますが、そこの "Ports and packages" (Ports とパッケージ (英語)) に "Some highlights" (注目点 (英語)) が記載されています。例えば、VMM/VMD が今回も更新されています。&lt;/p&gt;

&lt;p&gt;次のコマンドはマシンにインストールされているすべてのパッケージをアップデートします:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas pkg_add &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;大量の出力が現れるでしょう。これらは慎重に読む必要があります。終わりの部分は特に、です。そこに重要な変更点や実施すべきアクションが書かれているかもしれません。私の場合、&lt;a href="https://fishshell.com/" rel="noopener noreferrer"&gt;fish&lt;/a&gt; をデフォルトのシェルとして使っているのですが、こちらが正常に起動することをいつも確認しています。というのも、かつて &lt;a href="https://www.python.org/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; のアップグレードの影響でクラッシュするようになったことがあるからです 😅&lt;/p&gt;

&lt;h3&gt;
  
  
  6. 設定と構文の変更
&lt;/h3&gt;

&lt;p&gt;必要に応じて conf を更新して、&lt;a href="https://www.openbsd.org/faq/upgrade78.html#ConfigChanges" rel="noopener noreferrer"&gt;設定と構文の変更 (英語)&lt;/a&gt; に書かれている内容を適用しましょう。&lt;/p&gt;

&lt;p&gt;今回、&lt;code&gt;build&lt;/code&gt; ユーザーへの言及があります。LLVM 19 のビルドに関わることで、ログインクラスを変更する必要があります。&lt;/p&gt;

&lt;h3&gt;
  
  
  7. 古くなったファイルの削除
&lt;/h3&gt;

&lt;p&gt;ここはシンプルな手順です。公式チュートリアルの &lt;a href="https://www.openbsd.org/faq/upgrade78.html#RmFiles" rel="noopener noreferrer"&gt;削除すべきファイル (英語)&lt;/a&gt; に書かれていることを行うだけです。&lt;/p&gt;

&lt;p&gt;今回の対象はありません。&lt;/p&gt;

&lt;h3&gt;
  
  
  8. 特別なパッケージ
&lt;/h3&gt;

&lt;p&gt;公式チュートリアルの &lt;a href="https://www.openbsd.org/faq/upgrade78.html#SpecialPackages" rel="noopener noreferrer"&gt;特別なパッケージ (英語)&lt;/a&gt; を確認しましょう。使っているものがあるかもしれません:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freetds&lt;/li&gt;
&lt;li&gt;php&lt;/li&gt;
&lt;li&gt;rbw&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. 再起動
&lt;/h3&gt;

&lt;p&gt;ゴールが見えて来ました ! 最後に必須では無いですが再起動しておくと良いしれません:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  おわりに
&lt;/h2&gt;

&lt;p&gt;新しいシステムとあなたが長く楽しい時間を過ごせますように :)&lt;/p&gt;

&lt;p&gt;OpenBSD プロジェクトとコミュニティへの深い感謝を込めつつ。&lt;/p&gt;

</description>
      <category>openbsd</category>
      <category>os</category>
      <category>upgrade</category>
      <category>migration</category>
    </item>
    <item>
      <title>OpenBSD Upgrade 7.7 to 7.8</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Sun, 16 Nov 2025 09:37:28 +0000</pubDate>
      <link>https://forem.com/nabbisen/openbsd-upgrade-77-to-78-3b75</link>
      <guid>https://forem.com/nabbisen/openbsd-upgrade-77-to-78-3b75</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.openbsd.org/" rel="noopener noreferrer"&gt;OpenBSD&lt;/a&gt; project released &lt;a href="https://www.openbsd.org/78.html" rel="noopener noreferrer"&gt;7.8&lt;/a&gt; of their OS on 22 Oct 2025, as their 59th release 💫&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs8q5lf87aldlrzghgvk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs8q5lf87aldlrzghgvk.gif" alt="openbsd release" width="200" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;a href="https://www.openbsd.org/78.html#new" rel="noopener noreferrer"&gt;What's New&lt;/a&gt; | &lt;a href="https://www.openbsd.org/plus78.html" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
&lt;/center&gt;

&lt;p&gt;This post shows how to upgrade OpenBSD 7.7 to 7.8.&lt;br&gt;
The steps are based on &lt;a href="https://www.openbsd.org/faq/upgrade78.html" rel="noopener noreferrer"&gt;their official guide&lt;/a&gt; with appreciation to them.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;p&gt;Here is a step-by-step guide with a set of command-lines to run.&lt;/p&gt;

&lt;center&gt;🌷 🐡 🌅&lt;/center&gt;
&lt;h3&gt;
  
  
  1. Pre-upgrade: Validate and customize
&lt;/h3&gt;

&lt;p&gt;The official tutorial includes &lt;a href="https://www.openbsd.org/faq/upgrade78.html#BeforeUpdate" rel="noopener noreferrer"&gt;Before using any upgrade method&lt;/a&gt; section.&lt;/p&gt;

&lt;p&gt;Using &lt;a href="https://man.openbsd.org/sysupgrade" rel="noopener noreferrer"&gt;&lt;code&gt;sysupgrade&lt;/code&gt;&lt;/a&gt; is usually a good choice.&lt;/p&gt;
&lt;h4&gt;
  
  
  Validate available disk size
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;/usr&lt;/code&gt; should be greater than 1.1GB.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;span class="go"&gt;Filesystem     Size    Used   Avail Capacity  Mounted on
(...)
/dev/sd1e      7.6G    3.5G    3.7G    50%    /usr
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OK :)&lt;/p&gt;

&lt;h4&gt;
  
  
  Validate compatibility with the current usage
&lt;/h4&gt;

&lt;p&gt;See &lt;a href="https://www.openbsd.org/faq/upgrade78.html#ConfigChanges" rel="noopener noreferrer"&gt;Configuration and syntax changes&lt;/a&gt; and &lt;a href="https://www.openbsd.org/faq/upgrade78.html#SpecialPackages" rel="noopener noreferrer"&gt;Special packages&lt;/a&gt;.&lt;br&gt;
The latter this time includes &lt;a href="https://www.php.net/" rel="noopener noreferrer"&gt;PHP&lt;/a&gt; default version switched to &lt;a href="https://www.php.net/releases/8.3/en.php" rel="noopener noreferrer"&gt;8.3&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The default version of PHP in ports has changed from 8.2 to 8.3.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h4&gt;
  
  
  Backups (Optional)
&lt;/h4&gt;

&lt;p&gt;You might have to create some backups.&lt;/p&gt;
&lt;h4&gt;
  
  
  Customize upgrade (Optional)
&lt;/h4&gt;

&lt;p&gt;This step is just for reference, skippable with standard upgrade.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://man.openbsd.org/sysupgrade" rel="noopener noreferrer"&gt;/auto_upgrade.conf&lt;/a&gt; is available as the response file.&lt;/p&gt;

&lt;p&gt;Of course, you can skip this and go next if it's unnecessary. The default behavior is sufficient in most cases.&lt;/p&gt;

&lt;p&gt;Well, the OpenBSD manual page on &lt;a href="https://man.openbsd.org/autoinstall.8" rel="noopener noreferrer"&gt;autoinstall&lt;/a&gt; says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If either &lt;em&gt;&lt;code&gt;/auto_install.conf&lt;/code&gt;&lt;/em&gt; or &lt;em&gt;&lt;code&gt;/auto_upgrade.conf&lt;/code&gt;&lt;/em&gt; is found on &lt;em&gt;&lt;code&gt;bsd.rd&lt;/code&gt;&lt;/em&gt;'s built-in RAM disk, &lt;strong&gt;&lt;code&gt;autoinstall&lt;/code&gt;&lt;/strong&gt; behaves as if the machine is netbooted, but uses the local response file. In case both files exist, &lt;em&gt;&lt;code&gt;/auto_install.conf&lt;/code&gt;&lt;/em&gt; takes precedence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The whole example of &lt;code&gt;/auto_upgrade.conf&lt;/code&gt; is like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="err"&gt;Location&lt;/span&gt; &lt;span class="err"&gt;of&lt;/span&gt; &lt;span class="py"&gt;sets&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;disk&lt;/span&gt;
&lt;span class="err"&gt;Pathname&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="py"&gt;sets&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/home/_sysupgrade/&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;-x*&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;+xbase*&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;-game*&lt;/span&gt;
&lt;span class="err"&gt;Set&lt;/span&gt; &lt;span class="err"&gt;name(s)&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;done&lt;/span&gt;
&lt;span class="err"&gt;Directory&lt;/span&gt; &lt;span class="err"&gt;does&lt;/span&gt; &lt;span class="err"&gt;not&lt;/span&gt; &lt;span class="err"&gt;contain&lt;/span&gt; &lt;span class="err"&gt;SHA256.sig.&lt;/span&gt; &lt;span class="err"&gt;Continue&lt;/span&gt; &lt;span class="err"&gt;without&lt;/span&gt; &lt;span class="py"&gt;verification&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, x sets except xbase and game are excluded.&lt;/p&gt;

&lt;p&gt;Also, &lt;a href="https://man.openbsd.org/upgrade.site.5" rel="noopener noreferrer"&gt;/upgrade.site&lt;/a&gt; can be applied.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Upgrade with &lt;code&gt;sysupgrade&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;OK. You must be ready.&lt;/p&gt;

&lt;p&gt;* Caution: The command below, &lt;code&gt;sysupgrade&lt;/code&gt;,  is &lt;strong&gt;unable to stop&lt;/strong&gt; once it is run.&lt;/p&gt;

&lt;p&gt;Let's just run it, if ready:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas sysupgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will print out like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Fetching from https://cdn.openbsd.org/pub/OpenBSD/7.8/amd64/
SHA256.sig   100% |***********************************************************|  2324       00:00    
Signature Verified
BUILDINFO    100% |***********************************************************|    54       00:00    
Verifying old sets.
INSTALL.amd64 100% |**********************************************************| 44889       00:00    
base78.tgz   100% |***********************************************************|   498 MB    00:40    
bsd          100% |***********************************************************| 31408 KB    00:02    
bsd.mp       100% |***********************************************************| 31506 KB    00:02    
bsd.rd       100% |***********************************************************|  4691 KB    00:00    
comp78.tgz   100% |***********************************************************| 88484 KB    00:07    
game78.tgz   100% |***********************************************************|  2742 KB    00:00    
man78.tgz    100% |***********************************************************|  8286 KB    00:00    
xbase78.tgz  100% |***********************************************************| 74882 KB    00:06    
xfont78.tgz  100% |***********************************************************| 23018 KB    00:01    
xserv78.tgz  100% |***********************************************************| 11812 KB    00:00    
xshare78.tgz 100% |***********************************************************|  4553 KB    00:00    
Verifying sets.
Fetching updated firmware.
&lt;/span&gt;&lt;span class="gp"&gt;fw_update: add none;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;update intel 
&lt;span class="go"&gt;Upgrading.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The machine will reboot and upgrade the system. It will reboot again and &lt;a href="https://man.openbsd.org/sysmerge" rel="noopener noreferrer"&gt;&lt;code&gt;sysmerge&lt;/code&gt;&lt;/a&gt; will follow automatically. Then daemons such as &lt;code&gt;sshd&lt;/code&gt; will be started as usual. It will print out "Checking for available binary patches...", and you will see "Run syspatch(8) to install:" if there are.&lt;/p&gt;

&lt;p&gt;Finally, you will see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;starting local daemons: cron.
Sat Nov 15 16:45:30 JST 2025

OpenBSD/amd64 ... (ttyC0)

login:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After all, when login is successful, you will see the login message including "OpenBSD 7.8 (GENERIC.MP)".&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Post-upgrade: &lt;code&gt;sysmerge&lt;/code&gt; if necessary
&lt;/h3&gt;

&lt;p&gt;The official documentation &lt;a href="https://www.openbsd.org/faq/upgrade78.html#AfterSets" rel="noopener noreferrer"&gt;describes on them&lt;/a&gt; and helps a lot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In some cases, configuration files cannot be modified automatically. Run&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# sysmerge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;to check and perform these configuration changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It means manually running &lt;code&gt;sysmerge&lt;/code&gt; in addition may be sometimes necessary.&lt;br&gt;
Remember you sometimes have to manually merging conf files such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/login.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas sysmerge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When there is difference to be manually merged, you will see the results first. Then you will be asked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;  Use 'd' to delete the temporary ./etc/login.conf
  Use 'i' to install the temporary ./etc/login.conf
  Use 'm' to merge the temporary and installed versions
  Use 'v' to view the diff results again

  Default is to leave the temporary file to deal with by hand

How should I deal with this? [Leave it for later]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each of the top 3 options work like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;d&lt;/code&gt;: to preserve the current file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;i&lt;/code&gt;: to overwrite it with the new file &lt;code&gt;sysupgrade&lt;/code&gt; brought.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;m&lt;/code&gt;: to merge them manually and interactively.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you type &lt;code&gt;m&lt;/code&gt; to start merge mode, you will be asked to type each of them at each difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;l&lt;/code&gt; to choose the left diff,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; to choose the right.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you will see the options to deal with the merged file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Use 'e' to edit the merged file
  Use 'i' to install the merged file
  Use 'n' to view a diff between the merged and new files
  Use 'o' to view a diff between the old and merged files
  Use 'r' to re-do the merge
  Use 'v' to view the merged file
  Use 'x' to delete the merged file and go back to previous menu
  Default is to leave the temporary file to deal with by hand

===&amp;gt; How should I deal with the merged file? [Leave it for later]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you type &lt;code&gt;e&lt;/code&gt;, editor will run with the merged file.&lt;/p&gt;

&lt;p&gt;If you type &lt;code&gt;i&lt;/code&gt;, the merged file will be installed directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;===&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Merging /etc/login.conf &lt;span class="o"&gt;(&lt;/span&gt;running cap_mkdb&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;, needs a relog&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Apply &lt;code&gt;syspatch&lt;/code&gt; (skippable)
&lt;/h3&gt;

&lt;p&gt;The next two tasks below are usual just in order to update the system, too.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;syspatch&lt;/code&gt; is an important command to install binary patches officially offered by OpenBSD successively as found to be needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas syspatch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Update packages
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.openbsd.org/78.html#new" rel="noopener noreferrer"&gt;What's new&lt;/a&gt; section in the release page also shows "Some highlights" in "Ports and packages". For example, VMM/VMD was improved this time, too.&lt;/p&gt;

&lt;p&gt;The command-line below will update all of the packages installed in the machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas pkg_add &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see a lot printed out, but should be careful to read, especially the trailings. They may tell there are some important changes or tasks to do. As to me, I always check if &lt;a href="https://fishshell.com/" rel="noopener noreferrer"&gt;fish&lt;/a&gt;, my default shell, starts normally, because I have experienced trouble which crashed it with &lt;a href="https://www.python.org/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; upgrade 😅&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Configuration and syntax changes
&lt;/h3&gt;

&lt;p&gt;Update some conf as needed to apply what &lt;a href="https://www.openbsd.org/faq/upgrade78.html#ConfigChanges" rel="noopener noreferrer"&gt;Configuration and syntax changes&lt;/a&gt; describes.&lt;/p&gt;

&lt;p&gt;This time &lt;code&gt;build&lt;/code&gt; user is referred to around LLVM 19 build: the login class needs to be modified.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Remove old files
&lt;/h3&gt;

&lt;p&gt;This is a simple step. All what to do is just follow &lt;a href="https://www.openbsd.org/faq/upgrade78.html#RmFiles" rel="noopener noreferrer"&gt;Files to remove&lt;/a&gt; in the official tutorial.&lt;/p&gt;

&lt;p&gt;There is nothing this time.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Special packages
&lt;/h3&gt;

&lt;p&gt;Check &lt;a href="https://www.openbsd.org/faq/upgrade78.html#SpecialPackages" rel="noopener noreferrer"&gt;Special packages&lt;/a&gt; in the official tutorial. You may use some of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freetds&lt;/li&gt;
&lt;li&gt;php&lt;/li&gt;
&lt;li&gt;rbw&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Reboot
&lt;/h3&gt;

&lt;p&gt;Almost done ! Finally and optionally run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;doas reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Hope the new system and you enjoy together long :)&lt;/p&gt;

&lt;p&gt;With great appreciation to the OpenBSD project and the community.&lt;/p&gt;

</description>
      <category>openbsd</category>
      <category>os</category>
      <category>upgrade</category>
      <category>migration</category>
    </item>
    <item>
      <title>apimock-rs features: external interfaces and ipv6 support</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Sun, 09 Nov 2025 10:57:58 +0000</pubDate>
      <link>https://forem.com/nabbisen/apimock-rs-features-external-interfaces-and-ipv6-support-59j5</link>
      <guid>https://forem.com/nabbisen/apimock-rs-features-external-interfaces-and-ipv6-support-59j5</guid>
      <description>&lt;p&gt;Confirmation was finished ✅️ ✅️&lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://github.com/apimokka/apimock-rs" rel="noopener noreferrer"&gt;apimock-rs&lt;/a&gt; supports both of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚪 Listener to external interfaces (all interfaces)&lt;/li&gt;
&lt;li&gt;❄️ IPv6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apimokka.github.io/apimock-rs/advanced-topics/listener/index.html" rel="noopener noreferrer"&gt;https://apimokka.github.io/apimock-rs/advanced-topics/listener/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is a developer-friendly, featherlight and functional HTTP(S) mock server built in Rust 🩵&lt;/p&gt;

</description>
      <category>api</category>
      <category>microservices</category>
      <category>webdev</category>
      <category>rust</category>
    </item>
    <item>
      <title>apimock-rs 4.4.0 is released: HTTPS is now supported</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Sat, 08 Nov 2025 12:21:25 +0000</pubDate>
      <link>https://forem.com/nabbisen/apimock-rs-440-is-released-https-is-now-supported-291e</link>
      <guid>https://forem.com/nabbisen/apimock-rs-440-is-released-https-is-now-supported-291e</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/apimokka/apimock-rs" rel="noopener noreferrer"&gt;&lt;code&gt;apimock-rs&lt;/code&gt;&lt;/a&gt; is a developer-friendly, featherlight and functional HTTP(S) mock server built in Rust.&lt;/p&gt;

&lt;p&gt;We are happy to announce HTTPS is now supported after much effort made :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apimokka.github.io/apimock-rs/user-guide/getting-started/https-support.html" rel="noopener noreferrer"&gt;https://apimokka.github.io/apimock-rs/user-guide/getting-started/https-support.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>microservices</category>
      <category>webdev</category>
      <category>rust</category>
    </item>
    <item>
      <title>おわりに - Vue フロントエンド開発入門</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Tue, 24 Jun 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/nabbisen/owarini-vue-hurontoendokai-fa-ru-men-1j75</link>
      <guid>https://forem.com/nabbisen/owarini-vue-hurontoendokai-fa-ru-men-1j75</guid>
      <description>&lt;p&gt;おつかれさまでした ! この学習セットを通じて、あなたはフロントエンド開発、特に Vue を使った Web アプリ開発の基礎から始めて、多くのことを学びました。&lt;/p&gt;

&lt;h2&gt;
  
  
  ふりかえり
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web 開発の全体像&lt;/strong&gt;: フロントエンドとバックエンドの役割、そしてそれらが連携して Web アプリを構成するしくみを理解しました。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;開発環境の構築&lt;/strong&gt;: Node.js、npm、VS Code、Vite といった開発に必要なツールをセットアップしました。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vue の基本&lt;/strong&gt;: Composition API を使ったリアクティブなデータ管理、&lt;code&gt;v-bind&lt;/code&gt; や &lt;code&gt;v-if&lt;/code&gt; といった Vue 独自の強力な構文を学びました。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vue コンポーネント&lt;/strong&gt;: アプリを再利用可能な部品に分割し、&lt;code&gt;props&lt;/code&gt; と &lt;code&gt;emit&lt;/code&gt; を使ってコンポーネント間でデータをやり取りする方法を学びました。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SPA と状態管理&lt;/strong&gt;: Vue Router で複数ページを扱う SPA の概念と、Pinia を使ってアプリ全体のデータを効率的に管理する方法を学びました。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;型安全な開発&lt;/strong&gt;: TypeScript を導入することで、バグを減らし、コードの品質を高める方法を知りました。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI/UX の重要性&lt;/strong&gt;: ユーザー視点に立ったデザインの考え方と、 CSS / SCSS を使ったスタイリングの基本を学びました。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;これらは、現代のフロントエンド開発において非常に重要なスキルセットです。&lt;/p&gt;

&lt;h2&gt;
  
  
  さらなる向上のために
&lt;/h2&gt;

&lt;p&gt;学習はこれで終わりではありません。ここからが、あなたの本当の旅の始まりです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;実際に手を動かす&lt;/strong&gt;: 学習セットで学んだ知識を使い、自分自身のアイデアで小さな Web アプリをつくってみましょう。例えば、簡単な Todo アプリ、天気予報アプリ、お気に入りのレストランリストなど。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;エラーを恐れない&lt;/strong&gt;: エラーは、あなたが次に何を学ぶべきかを教えてくれる最高の先生です。エラーメッセージを読み、AI や検索エンジンを活用して解決策を探しましょう。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;公式ドキュメントを読む&lt;/strong&gt;:  Vue、Vue Router、Pinia、TypeScript などの &lt;strong&gt;公式ドキュメント&lt;/strong&gt; は、最も正確で最新の情報源です。困ったときや、より深く理解したいときに活用しましょう。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;コミュニティに参加する&lt;/strong&gt;: 技術系のイベント、オンラインフォーラム、SNS などで他の開発者と交流し、質問したり、自分の知識を共有したりするのも、良い経験になります。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;新しい技術に挑戦する&lt;/strong&gt;: Web 開発の世界は常に進化しています。新しいライブラリやツール、トレンドにアンテナを張り、興味を持ったものには積極的に挑戦してみましょう。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;バックエンドに興味を持つ&lt;/strong&gt;: フロントエンドだけでなく、サーバーサイドの技術 (Node.js の Express、Python の Django / Flaskなど) を学ぶと、フルスタック開発者として、より幅広いアプリを構築できるようになります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;あなたの Web 開発の旅がすばらしいものになることを、こころから願って、応援しています !&lt;/p&gt;

</description>
      <category>vue</category>
      <category>typescript</category>
      <category>spa</category>
      <category>webdev</category>
    </item>
    <item>
      <title>UI/UX - 大規模な CSS への対応</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Mon, 23 Jun 2025 21:00:00 +0000</pubDate>
      <link>https://forem.com/nabbisen/uiux-da-gui-mo-na-css-henodui-ying-3563</link>
      <guid>https://forem.com/nabbisen/uiux-da-gui-mo-na-css-henodui-ying-3563</guid>
      <description>&lt;p&gt;大規模なスタイルセットを記述する場合、CSS では限界があります。そこで登場するのが、&lt;strong&gt;CSS プリプロセッサ&lt;/strong&gt; と呼ばれるツールです。その中でも代表的なのが &lt;strong&gt;SCSS (サス、Sassy CSS)&lt;/strong&gt; です。&lt;/p&gt;

&lt;h2&gt;
  
  
  SCSS - CSS プリプロセッサ
&lt;/h2&gt;

&lt;p&gt;SCSS は CSS をより効率的かつ構造的に書くための拡張言語です。SCSS コードは、CSS に変換可能であり、実行時には CSS としてブラウザに解釈されます。&lt;/p&gt;

&lt;h3&gt;
  
  
  SCSS の主な機能とメリット
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メリット&lt;/th&gt;
&lt;th&gt;SCSS 記法&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;変数&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$primary-color: #007bff;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;一括変更、管理のしやすさ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ネスト&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.parent { .child { ... } }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;コードの可読性、構造の把握が容易&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ミックスイン&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@mixin my-btn { ... }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;スタイルの再利用、記述量の削減&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;インポート&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@import 'variables';&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ファイル分割、管理のしやすさ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  解説
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;変数&lt;/strong&gt;: 色やフォントサイズなど、繰り返し使う値を定義して管理できます。変更があった際に一箇所修正するだけで済むため、メンテナンスが容易です。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ネスト&lt;/strong&gt;: CSS セレクタを入れ子 (ネスト) にして書くことができ、HTML の構造を反映した、より読みやすいコードにできます。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ミックスイン&lt;/strong&gt;: 繰り返し使う CSS のまとまりを関数のように定義し、必要な場所で呼び出して使えます。ベンダープレフィックスの管理などにも役立ちます。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;インポート&lt;/strong&gt;: CSS ファイルを分割して管理し、必要な場所でまとめて読み込むことができます。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SCSS コード例
&lt;/h3&gt;

&lt;h4&gt;
  
  
  変数
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#007bff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$font-size-base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ネスト
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f8f9fa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// 変数を使った計算も可能&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$font-size-base&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="mi"&gt;.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;list-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

          &lt;span class="c1"&gt;// &amp;amp; で親セレクタを参照&lt;/span&gt;
          &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// 色を暗くする関数&lt;/span&gt;
            &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;darken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ミックスイン (mixin)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;button-style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$bg-color&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$text-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$bg-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$text-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.primary-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ミックスインを呼び出す&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;button-style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.secondary-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;button-style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;#6c757d&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Vue プロジェクトとの統合
&lt;/h3&gt;

&lt;p&gt;Vue プロジェクトで SCSS を使うには、SCSS をコンパイルするためのローダー (&lt;code&gt;sass&lt;/code&gt; 等) をインストールする必要があります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; sass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;そして Vue コンポーネントの &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; タグに &lt;code&gt;lang="scss"&lt;/code&gt; を追加します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;style&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"scss"&lt;/span&gt; &lt;span class="na"&gt;scoped&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c1"&gt;// ここに SCSS を記述&lt;/span&gt;
  &lt;span class="nc"&gt;.my-component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;style&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;SCSS を導入することで、CSS によるスタイル定義を構造的に整理できるようになります。それによって大規模アプリでもスタイリングの管理がしやすくなります。&lt;/p&gt;

</description>
      <category>vue</category>
      <category>webdev</category>
      <category>design</category>
      <category>css</category>
    </item>
    <item>
      <title>UI/UX - CSS でスタイル定義</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Mon, 23 Jun 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/nabbisen/uiux-css-desutairuding-yi-2adm</link>
      <guid>https://forem.com/nabbisen/uiux-css-desutairuding-yi-2adm</guid>
      <description>&lt;h2&gt;
  
  
  CSS とは
&lt;/h2&gt;

&lt;p&gt;Web ページの見た目を装飾するのが &lt;strong&gt;CSS (Cascading Style Sheets)&lt;/strong&gt; です。HTML でページの骨格を作り、それに対して CSS で色、フォント、レイアウトなどを指定します。&lt;/p&gt;

&lt;h3&gt;
  
  
  CSS 基本構文
&lt;/h3&gt;

&lt;p&gt;CSS では、HTML 要素にスタイルを適用するためのルールを記述します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;セレクタ&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;プロパティ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;値&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;プロパティ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;値&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用語&lt;/th&gt;
&lt;th&gt;説明&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;セレクタ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;どの HTML 要素にスタイルを適用するかを指定します。&lt;/td&gt;
&lt;td&gt;(下記「セレクタの種類」参照)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;プロパティ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;変更したいスタイルの種類&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;color&lt;/code&gt;, &lt;code&gt;font-size&lt;/code&gt;, &lt;code&gt;margin&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;値&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;プロパティに設定する具体的な値&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;blue&lt;/code&gt;, &lt;code&gt;16px&lt;/code&gt;, &lt;code&gt;10px 20px&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  セレクタの種類
&lt;/h4&gt;

&lt;p&gt;セレクタは以下の 3 種類に大別されます。(疑似要素を含めるともう少し増えます。) これらを使い分けることで、スタイル適用範囲に幅と柔軟性を持たせることができます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&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;/td&gt;
&lt;td&gt;
&lt;code&gt;p { color: blue; }&lt;/code&gt; (すべての &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; 要素)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;class セレクタ&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.my-button { background-color: green; }&lt;/code&gt; (タグに　&lt;code&gt;class="my-button"&lt;/code&gt; 属性を持つ要素)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID セレクタ&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;#header { font-size: 24px; }&lt;/code&gt; (タグに &lt;code&gt;id="header"&lt;/code&gt; 属性を持つ要素)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  CSS コード例
&lt;/h3&gt;

&lt;h4&gt;
  
  
  テキスト: 色やフォントサイズ
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* 文字色を濃いグレーに */&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* フォントサイズを 32 ピクセルに */&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* テキストを中央揃えに */&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ボタン: UI 要素のスタイル
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* 背景色を青に */&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#007bff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* 文字色を白に */&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* 内側の余白 */&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.2em&lt;/span&gt; &lt;span class="m"&gt;0.4em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* 枠線をなくす */&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* 角を丸くする */&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* マウスカーソルをポインターに */&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  レイアウト (Flexbox の基本)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* この要素を Flexbox コンテナにする */&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* 子要素の水平方向: 両端に配置 */&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* 子要素の垂直方向: 中央に配置 */&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Vue ではスタイルをどこに書くのでしょうか。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;一つの方法は、すでに見た単一ファイルコンポーネント (SFC) すなわち &lt;code&gt;.vue&lt;/code&gt; ファイルの中で &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; タグに記述する方法です。そのコンポーネントに特化した CSS を記述できます。&lt;/li&gt;
&lt;li&gt;共通のスタイルやユーティリティ class 定義を外部ファイル (&lt;code&gt;.css&lt;/code&gt;) に記述することも可能です。希望の場所で読み込んで使用します。&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vue</category>
      <category>webdev</category>
      <category>design</category>
      <category>css</category>
    </item>
    <item>
      <title>apimock-rs v4.3: Dynamic response generation support</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Sun, 22 Jun 2025 22:00:00 +0000</pubDate>
      <link>https://forem.com/nabbisen/apimock-rs-v43-dynamic-response-generation-support-4f0i</link>
      <guid>https://forem.com/nabbisen/apimock-rs-v43-dynamic-response-generation-support-4f0i</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/apimokka/apimock-rs" rel="noopener noreferrer"&gt;API mock (apimock-rs)&lt;/a&gt; is a developer-friendly, featherlight and functional HTTP mock server built in Rust.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://apimokka.github.io/apimock-rs/" rel="noopener noreferrer"&gt;https://apimokka.github.io/apimock-rs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've rolled out its new minor version which brings upgrade on crafting responses. While the server has supported flexible routing for static responses based on file paths and rule sets, this update focuses on improving the Rhai middleware scripting.&lt;/p&gt;

&lt;p&gt;The key improvement is that &lt;a href="https://rhai.rs/book/language/statements.html" rel="noopener noreferrer"&gt;Rhai&lt;/a&gt; scripts now can dynamically generate response data. Previously, a script could only point to a static file path once a condition was met. Now, your scripts can directly create the response body, whether it's a JSON string or plain text. This means more powerful mocking capabilities with programmatically generated content for your development workflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;json_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{ &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;greetings&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Hello, world.&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; }&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// debug print:&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url_path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;url_path&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/middleware-test/map/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;json_str&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We've also updated our documentation to &lt;a href="https://apimokka.github.io/apimock-rs/advanced-topics/middleware-map-based-response-variation.html" rel="noopener noreferrer"&gt;guide you through these new features&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>microservices</category>
      <category>webdev</category>
      <category>rust</category>
    </item>
    <item>
      <title>UI/UX - デザインの基本的な原則</title>
      <dc:creator>nabbisen</dc:creator>
      <pubDate>Sun, 22 Jun 2025 17:00:00 +0000</pubDate>
      <link>https://forem.com/nabbisen/uiux-dezainnoji-ben-de-nayuan-ze-lf2</link>
      <guid>https://forem.com/nabbisen/uiux-dezainnoji-ben-de-nayuan-ze-lf2</guid>
      <description>&lt;p&gt;デザインの基本的な原則について概説します。これらはシンプルながら強力で、ユーザーにとって直感的で快適なフロントエンドを実現するのに役立ちます。&lt;/p&gt;

&lt;h2&gt;
  
  
  デザインの基本的な原則
&lt;/h2&gt;

&lt;h3&gt;
  
  
  情報の階層化 - 見やすさ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;「何が大事か」をハッキリ見せる&lt;/strong&gt; こと。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;強弱をつける:&lt;/strong&gt; タイトルは大きく、本文は小さく。見出しは太くするなど、メリハリで情報の重要度を示します。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;まとまりを作る:&lt;/strong&gt; 関連する情報を近くに置いたり、グループ化したりして、ゴチャつきを無くします。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  視線の誘導
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ユーザーの目が自然と動く&lt;/strong&gt; ように、うながすこと。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;目印を作る:&lt;/strong&gt; 重要なボタンや情報は、色を変えるなどして「次、ここ !」と示します。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;流れを作る:&lt;/strong&gt; ユーザーが読みやすいように、要素を配置します (例: 左上から始めて、右下へ)。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  一貫性 - 統一感
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;どこでも「いつもの感じ」&lt;/strong&gt; を保つこと。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ルールを決める:&lt;/strong&gt; 色、フォント、ボタンの形など、サイト全体で統一します。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;同じ機能は同じ場所:&lt;/strong&gt; 検索ボタンなど、同じ機能は常に同じ見た目・位置にします。同じ場所にあるのでユーザーは迷わずにたどり着けます。&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vue</category>
      <category>webdev</category>
      <category>design</category>
      <category>css</category>
    </item>
  </channel>
</rss>
