<?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>szakky's Blog</title><link>https://szakky.github.io/blog/</link><description>Recent content on szakky's Blog</description><generator>Hugo</generator><language>ja-jp</language><lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://szakky.github.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>rodoの技術的な話</title><link>https://szakky.github.io/blog/posts/rodo-tech-stack/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://szakky.github.io/blog/posts/rodo-tech-stack/</guid><description>&lt;h1 id="目次"&gt;目次&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB"&gt;はじめに&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%8A%80%E8%A1%93%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7"&gt;使用した技術スタック一覧&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3"&gt;アプリケーション&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90"&gt;ディレクトリ構成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#golang"&gt;golang&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#1-%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0maingo"&gt;1.ルーティング(main.go)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E6%A9%9F%E8%83%BD-handlergo"&gt;2.アプリケーション機能(handler.go)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9mysqlgo"&gt;3.データベース(mysql.go)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E5%9F%BA%E7%9B%A4"&gt;サービス基盤&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#docker"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#kubernetes"&gt;kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB"&gt;おわりに&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="はじめに"&gt;はじめに&lt;/h1&gt;
&lt;p&gt;前回の[ルーム型To-Doアプリを作ってみた]の技術スタックについてまとめていきます。&lt;/p&gt;
&lt;p&gt;以下はRodoのgithubリポジトリになります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/szakky/rodo"&gt;https://github.com/szakky/rodo&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="使用した技術スタック一覧"&gt;使用した技術スタック一覧&lt;/h1&gt;
&lt;p&gt;使用言語: Go, HTML&lt;/p&gt;
&lt;p&gt;DB: MySQL&lt;/p&gt;
&lt;p&gt;インフラ: docker ,kubernetes ,cloudflare&lt;/p&gt;
&lt;p&gt;&lt;img alt="フローチャート" loading="lazy" src="https://szakky.github.io/blog/images/rodo-flow.png"&gt;&lt;/p&gt;
&lt;h1 id="アプリケーション"&gt;アプリケーション&lt;/h1&gt;
&lt;h2 id="ディレクトリ構成"&gt;ディレクトリ構成&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;├── db/
│ └── mysql.go
├── templates/
│ ├── room.html
│ └── top.html
├── docker-compose.yml
├── dockerfile
├── handler.go
└── main.go
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="golang"&gt;golang&lt;/h2&gt;
&lt;h3 id="1-ルーティングmaingo"&gt;1. ルーティング(main.go)&lt;/h3&gt;
&lt;p&gt;ここでは、アプリケーション機能をどのようにしてルーティングしているか説明していきます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Go" data-lang="Go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;database/sql&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;net/http&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;todo-api/db&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;_&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;github.com/go-sql-driver/mysql&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;conn&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;sql&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;DB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;conn&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; = &lt;span style="color:#a6e22e"&gt;db&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Connect&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Fatal&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;db error:&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;defer&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;conn&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Close&lt;/span&gt;() &lt;span style="color:#75715e"&gt;//kill db connect&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; = &lt;span style="color:#a6e22e"&gt;conn&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Ping&lt;/span&gt;(); &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Fatal&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;db error:&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;db connected&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;ready&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HandleFunc&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;topPage&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HandleFunc&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/room/&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;roomPage&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HandleFunc&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/add&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HandleFunc&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/update&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;updateTask&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HandleFunc&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/delete&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;deleteTask&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;HandleFunc&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/delete-all&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;deleteAll&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;waiting for requests...&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;ListenAndServe&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;:8080&amp;#34;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;todo-api/db&lt;/code&gt; パッケージは次の&lt;code&gt;mysql.go&lt;/code&gt; をインポートしています。グローバル変数&lt;code&gt;conn&lt;/code&gt; は、&lt;code&gt;*sql.DB&lt;/code&gt; dbの接続情報が入っています。&lt;code&gt;todo-api/db&lt;/code&gt; パッケージを使って、データベースと接続し、結果として接続情報（&lt;code&gt;conn&lt;/code&gt;）と、エラー（&lt;code&gt;err&lt;/code&gt;）を受け取ります。&lt;code&gt;db.Connect()&lt;/code&gt; が成功しても、ネットワークの問題で通信ができないこともあるので、&lt;code&gt;conn.Ping()&lt;/code&gt; で通信ができるかチェックします。&lt;code&gt;http.HandleFunc()&lt;/code&gt;は、URLのパスに対して、どの関数を実行させるか設定しています。これで&lt;code&gt;handler.go&lt;/code&gt; のアプリケーション機能を呼び出しています。そして、&lt;code&gt;http.ListenAndServe()&lt;/code&gt; でポート番号&lt;code&gt;8080&lt;/code&gt; 番のサーバーを起動させ、アクセスを待つ状態にします。&lt;/p&gt;</description></item><item><title>ルーム型To-Doアプリを作ってみた</title><link>https://szakky.github.io/blog/posts/rodo-blog/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://szakky.github.io/blog/posts/rodo-blog/</guid><description>&lt;h1 id="目次"&gt;目次&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB"&gt;はじめに&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E9%96%8B%E7%99%BA%E7%B5%8C%E7%B7%AF"&gt;開発経緯&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9"&gt;具体的な使い方&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A8%E3%83%AB%E3%83%BC%E3%83%A0%E4%BD%9C%E6%88%90"&gt;トップページとルーム作成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%83%AB%E3%83%BC%E3%83%A0%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A8%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E8%BF%BD%E5%8A%A0"&gt;ルームページとタスクの追加&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%BF%E3%82%B0%E3%81%A8%E3%83%A1%E3%83%A2%E5%85%A5%E5%8A%9B"&gt;タグとメモ入力&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E6%B4%BB%E7%94%A8%E4%BA%8B%E4%BE%8B"&gt;その他の活用事例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9F%E8%A3%85%E3%81%A8%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%9F%BA%E7%9B%A4"&gt;実装とアプリケーション基盤&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#Docker%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E5%8C%96"&gt;Dockerによるイメージ化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Kubernetes%E3%81%A7%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4"&gt;Kubernetesでのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E9%96%8B%E7%99%BA%E3%81%A7%E8%8B%A6%E5%8A%B4%E3%81%97%E3%81%9F%E7%82%B9%E3%81%A8%E5%AD%A6%E3%81%B3"&gt;開発で苦労した点と学び&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB"&gt;おわりに&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;こんにちは。今回、個人開発で作成したルーム型To-Doアプリ&amp;quot;Rodo&amp;quot;について紹介していきます。&lt;/p&gt;
&lt;p&gt;RodoのURL: &lt;a href="https://rodo.yashiro.org"&gt;https://rodo.yashiro.org&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="開発経緯"&gt;開発経緯&lt;/h2&gt;
&lt;p&gt;一般的なTo-doアプリは、個人を識別するためにアカウントの作成・認証が必要になります。&lt;/p&gt;
&lt;p&gt;サクッと複数人でタスク管理したい場合は、アカウントの作成・認証に時間がかかり不便と感じることが多くありました。&lt;/p&gt;
&lt;p&gt;そこで、ルーム名を入力するだけで「早く」「簡単に」「誰でも」作って共有できるTo-Doアプリを開発しようと考えました。&lt;/p&gt;
&lt;p&gt;チームメンバーや他の人にルーム名を共有し、チームでのプロジェクト管理や、複数人でのタスク管理にも有用です。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="具体的な使い方"&gt;具体的な使い方&lt;/h2&gt;
&lt;p&gt;本アプリは、シンプルかつ迷わず使えるUIを意識して設計しています。&lt;/p&gt;
&lt;h3 id="トップページとルーム作成"&gt;トップページとルーム作成&lt;/h3&gt;
&lt;p&gt;&lt;img alt="toppage" loading="lazy" src="https://szakky.github.io/blog/images/toppage.png"&gt;&lt;/p&gt;
&lt;p&gt;トップページにはルーム名を設けています。 ここで入力した文字列がそのまま「ルーム名」となり、新しいルームが作成されます。次回以降も同じ文字列を入力するだけで、すぐに同じルームにアクセスできる手軽な仕組みにしました。これにより面倒なユーザー登録なしで、すぐに使い始められます。&lt;/p&gt;
&lt;h3 id="ルームページとタスクの追加"&gt;ルームページとタスクの追加&lt;/h3&gt;
&lt;p&gt;&lt;img alt="roompage" loading="lazy" src="https://szakky.github.io/blog/images/roompage.png"&gt;&lt;/p&gt;
&lt;p&gt;ルームに入ると、共有されているタスク一覧が表示されます。 「読書」や「運動」など毎日の作業を、直感的な操作でどんどん追加していくことができます。&lt;/p&gt;
&lt;h3 id="タグとメモ入力"&gt;タグとメモ入力&lt;/h3&gt;
&lt;p&gt;&lt;img alt="tags-memo" loading="lazy" src="https://szakky.github.io/blog/images/tags-memo.png"&gt;&lt;/p&gt;
&lt;p&gt;単にタスク一覧を表示するだけでなく、それぞれのタスクに「タグ」と「メモ」を追加できるようにしています。 これにより、タスクのジャンル分け（例：「日課」「家事」など）や、メモにちょっとした備忘録を残すことができます。&lt;/p&gt;
&lt;h2 id="その他の活用事例"&gt;その他の活用事例&lt;/h2&gt;
&lt;p&gt;以下のように学校のグループワークをする際に作業分担を管理する時にも有用です。&lt;/p&gt;
&lt;p&gt;&lt;img alt="活用事例" loading="lazy" src="https://szakky.github.io/blog/images/example.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="実装とアプリケーション基盤"&gt;実装とアプリケーション基盤&lt;/h2&gt;
&lt;p&gt;バックエンドからフロントエンドまで、できるだけシンプルな構成を目指しました。&lt;/p&gt;
&lt;p&gt;アプリケーション基盤は、dockerやkubernetesを活用して構築しています。&lt;/p&gt;
&lt;h3 id="dockerによるイメージ化"&gt;Dockerによるイメージ化&lt;/h3&gt;
&lt;p&gt;開発に使っているPC上で docker build を行い、アプリケーションのコンテナイメージを作成しています。イメージは、そのまま Docker Hub 上に push して保管しました。&lt;/p&gt;
&lt;h3 id="kubernetesでのデプロイ"&gt;Kubernetesでのデプロイ&lt;/h3&gt;
&lt;p&gt;用意したマニフェストファイル（DeploymentやServiceなど）をkubectl apply -f コマンドでデプロイしています。&lt;/p&gt;
&lt;p&gt;詳しい実装とアプリケーション基盤に関しては別の記事で紹介する予定です。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="開発で苦労した点と学び"&gt;開発で苦労した点と学び&lt;/h2&gt;
&lt;p&gt;今回の開発を通して苦労した点は「Goにおけるルーティング（URL）の設計」です。&lt;/p&gt;
&lt;p&gt;開発の初期段階では、トップページを /topPage、ルーム画面を /roomPage といった具合に、画面の種別に依存したURL設計をしていました。しかし、実装を進めるうちに「もっと自然で直感的なURL構造にすべきだ」と考え、トップページを / に、ルーム画面を /room/（設定したルーム名） となるように設計を変更しました。これにより、URLを見ただけでどのルームにいるのかが分かる直感的なURL設計に改善できました。&lt;/p&gt;
&lt;p&gt;さらにデータの扱い方も見直しました。。Go側で .Query().Get(&amp;ldquo;room_id&amp;rdquo;) を使用してリクエストからルーム名を取得し、それをキーにしてMySQLからタスクや情報を取得するように実装しています。URL設計からデータベースとの連携まで、初期段階から大きくコードを改善できたのは個人的にも良い経験になりました。&lt;/p&gt;</description></item></channel></rss>