<?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>Golang on Debimate</title><link>https://debimate.jp/tags/golang/</link><description>Recent content in Golang on Debimate</description><image><title>Debimate</title><url>https://debimate.jp/images/default-ogp.jpg</url><link>https://debimate.jp/images/default-ogp.jpg</link></image><generator>Hugo -- 0.161.1</generator><language>ja-jp</language><lastBuildDate>Thu, 28 Aug 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://debimate.jp/tags/golang/index.xml" rel="self" type="application/rss+xml"/><item><title>【Golang】CSV, TSV, LTSVをsql.DBで操作するfilesqlパッケージを作った話</title><link>https://debimate.jp/post/ja/2025-08-28-golangcsv-tsv-ltsv%E3%82%92sql-db%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8Bfilesql%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E8%A9%B1/</link><pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2025-08-28-golangcsv-tsv-ltsv%E3%82%92sql-db%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8Bfilesql%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E8%A9%B1/</guid><description>&lt;h3 id="前書き同じ機能を持つコマンドのメンテが面倒だった"&gt;前書き：同じ機能を持つコマンドのメンテが面倒だった&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/nao1215/filesql"&gt;filesql&lt;/a&gt; パッケージは、SQL ドライバーであり、SQLite3 のSQL 構文を使用してCSV、TSV、LTSV ファイルにクエリを実行できます。リリースして1週間経っていませんが、過去2番目の勢いで GitHub Star を獲得できています。嬉しいことですね。&lt;/p&gt;</description></item><item><title>GoユーザーがHaskell／OCamlのライブラリ配布で面食らった話</title><link>https://debimate.jp/post/ja/2025-06-28-go%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8Chaskellocaml%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E9%85%8D%E5%B8%83%E3%81%A7%E9%9D%A2%E9%A3%9F%E3%82%89%E3%81%A3%E3%81%9F/</link><pubDate>Sat, 28 Jun 2025 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2025-06-28-go%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8Chaskellocaml%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E9%85%8D%E5%B8%83%E3%81%A7%E9%9D%A2%E9%A3%9F%E3%82%89%E3%81%A3%E3%81%9F/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事画像には、Gopherを用いています。オリジナルの&lt;a href="https://go.dev/blog/gopher"&gt;The Go gopher&lt;/a&gt;（Gopherくん）は、Renée Frenchによってデザインされ、&lt;a href="https://creativecommons.org/licenses/by/4.0/"&gt;CC BY 4.0ライセンス&lt;/a&gt;が適用されています。&lt;/p&gt;</description></item><item><title>【機能強化】RDBMS／CSV／TSV／LTSVクライアントであるsqluvをhttps／s3／圧縮フォーマットに対応させ、カラースキームを追加</title><link>https://debimate.jp/post/ja/2025-03-22-%E6%A9%9F%E8%83%BD%E5%BC%B7%E5%8C%96rdbmscsvtsvltsv%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%A7%E3%81%82%E3%82%8Bsqluv%E3%82%92https/</link><pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2025-03-22-%E6%A9%9F%E8%83%BD%E5%BC%B7%E5%8C%96rdbmscsvtsvltsv%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%A7%E3%81%82%E3%82%8Bsqluv%E3%82%92https/</guid><description>&lt;h3 id="前書き大幅に機能追加"&gt;前書き：大幅に機能追加&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/nao1215/sqluv"&gt;nao1215/sqluv&lt;/a&gt;は、2週間前に「&lt;a href="https://debimate.jp/post/2025-03-08-gosqluv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89dbms%E7%94%A8%E3%81%AEtui-csvtsvltsv%E3%81%ABsql%E3%82%92%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD/"&gt;【Go】sqluvコマンド：DBMS用のTUI + CSV／TSV／LTSVにSQLを実行可能【開発背景や使い方、生成AIの活用】&lt;/a&gt;」に記事で紹介しました。この記事に対する反応がそこそこあったので、「これはチャンスだ」と考えて、大幅に機能追加／バグ修正をしました。&lt;/p&gt;</description></item><item><title>【Go】sqluvコマンド：DBMS用のTUI + CSV／TSV／LTSVにSQLを実行可能【開発背景や使い方、生成AIの活用】</title><link>https://debimate.jp/post/ja/2025-03-08-gosqluv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89dbms%E7%94%A8%E3%81%AEtui-csvtsvltsv%E3%81%ABsql%E3%82%92%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD/</link><pubDate>Sat, 08 Mar 2025 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2025-03-08-gosqluv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89dbms%E7%94%A8%E3%81%AEtui-csvtsvltsv%E3%81%ABsql%E3%82%92%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD/</guid><description>&lt;h3 id="sqluvとは"&gt;sqluvとは&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/nao1215/sqluv"&gt;nao1215/sqluv&lt;/a&gt; は、DBMS（例：MySQLやPostgreSQL）クライアントの一種であり、Text User Interfaceを提供します。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://debimate.jp/post/ja/2025-03-08-gosqluv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89dbms%E7%94%A8%E3%81%AEtui-csvtsvltsv%E3%81%ABsql%E3%82%92%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD/images/dbms_demo-1.gif"&gt;&lt;/p&gt;
&lt;p&gt;sqluvは、ローカルのCSV／TSV／LTSVファイルをインポートし、それらのファイルに対してSQLを実行する機能も持ちます。この機能は、私が以前開発した&lt;a href="https://github.com/nao1215/sqly"&gt;nao1215/sqlyコマンド&lt;/a&gt;から移植しています。&lt;/p&gt;</description></item><item><title>【Golang】Value Objectを生成するvogenライブラリをお試しで作った話</title><link>https://debimate.jp/post/ja/2024-12-28-golangvalue-object%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bvogen%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E3%81%8A%E8%A9%A6%E3%81%97%E3%81%A7%E4%BD%9C%E3%81%A3/</link><pubDate>Sat, 28 Dec 2024 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2024-12-28-golangvalue-object%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bvogen%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E3%81%8A%E8%A9%A6%E3%81%97%E3%81%A7%E4%BD%9C%E3%81%A3/</guid><description>&lt;h3 id="前書きgolangでvalue-objectを作りづらい"&gt;前書き：GolangでValue Objectを作りづらい&lt;/h3&gt;
&lt;p&gt;2025年の抱負で&lt;a href="https://debimate.jp/post/2024-12-27-2024%E5%B9%B4%E3%81%AE%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A-2025%E5%B9%B4%E3%81%AE%E6%8A%B1%E8%B2%A0/"&gt;「ブログのアウトプットを増やす（リンク先の末尾を参照）」&lt;/a&gt;と宣言したので、早速アウトプットします。&lt;/p&gt;
&lt;p&gt;今回取り扱うValue Objectとは、主に以下のような特徴を持ちます（本記事の本題と関係ない要素は意図的に省略しています）&lt;/p&gt;</description></item><item><title>【Golang】AWS Rainbowプロジェクト始めました - インタラクティブにS3操作するs3hubコマンド</title><link>https://debimate.jp/post/ja/2024-02-05-golangaws-rainbow%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%A7%8B%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3/</link><pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2024-02-05-golangaws-rainbow%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%A7%8B%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;2023年に&lt;a href="https://debimate.jp/post/2023-12-27-2023%E5%B9%B4%E3%81%AE%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A-2024%E5%B9%B4%E3%81%AE%E6%8A%B1%E8%B2%A0/"&gt;「2024年のOSS活動は、AWSユーティリティツールに絞ること」&lt;/a&gt;と目標を立て、AWS関連のOSSをまとめる&lt;a href="https://github.com/nao1215/rainbow"&gt;Rainbowプロジェクト（nao1215/rainbow）&lt;/a&gt;を作り始めました。早いもので2024年も1ヶ月経ったので、何か作ってないと進捗上マズイですよね！一つ作りましたよ！（後述）&lt;/p&gt;
&lt;p&gt;Rainbowは、私の好きなRitchie Blackmore&amp;rsquo;s Rainbowから拝借しました。複数のツールやライブラリを集約する予定なので、虹というネーミングは無難なところだと思ってます。&lt;/p&gt;</description></item><item><title>【Golang】hottest - ユニットテストのエラーメッセージを抽出するCLI／GitHub Actionsを作った話</title><link>https://debimate.jp/post/ja/2023-12-03-golanghottest-%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%BD/</link><pubDate>Sun, 03 Dec 2023 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2023-12-03-golanghottest-%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%BD/</guid><description>&lt;h3 id="前書き"&gt;前書き &lt;/h3&gt;
&lt;p&gt;本記事は、&lt;a href="https://qiita.com/advent-calendar/2023/fuller-inc"&gt;フラー株式会社 Advent Calender 2023&lt;/a&gt; の4日目の記事です。3日目は、&lt;a href="https://qiita.com/ujikawa1026"&gt;@ujikawa1026&lt;/a&gt;さん の「&lt;a href="https://namaninotiteti1026.hatenadiary.jp/entry/2023/12/02/232218"&gt;マネージャーはなぜ忙しいのか。3年間やって少し分かってきたこと&lt;/a&gt;」です。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="本記事の主題hottestの紹介宣伝"&gt;本記事の主題：hottestの紹介／宣伝&lt;/h3&gt;
&lt;p&gt;本記事では、2023年に私が開発したOSSの中で出来が良い部類の&lt;a href="https://github.com/nao1215/hottest"&gt;nao1215/hottest&lt;/a&gt; を紹介します。hottestは、E2Eテスティングフレームワークである&lt;a href="https://github.com/go-spectest/spectest"&gt;go-spectest/spectest&lt;/a&gt;の開発中に生まれたサイドプロジェクトです。&lt;/p&gt;</description></item><item><title>GitHub ActionsでBSD（FreeBSD、OpenBSD、NetBSD、Dragonfly BSD）のユニットテスト環境を構築する方法</title><link>https://debimate.jp/post/ja/2023-09-16-github-actions%E3%81%A7bsdfreebsdopenbsdnetbsddragonfly-bsd%E3%81%AE%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E7%92%B0%E5%A2%83/</link><pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2023-09-16-github-actions%E3%81%A7bsdfreebsdopenbsdnetbsddragonfly-bsd%E3%81%AE%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E7%92%B0%E5%A2%83/</guid><description>&lt;h3 id="前書きbsdはクロスプラットフォーム対応の鬼門"&gt;前書き：BSDはクロスプラットフォーム対応の鬼門&lt;/h3&gt;
&lt;p&gt;私は、GolangでOSSを開発することが多く、Golangは様々なOS向けの実行バイナリを簡単に作成できる特徴があります。この特徴を活かして、「クロスプラットフォーム対応しよう！」と考えるのは自然なことです。&lt;/p&gt;</description></item><item><title>【golang】io.Readerを使いまわしてContentType判定、S3アップロードしたらハマった話</title><link>https://debimate.jp/post/ja/2023-09-10-golangio-reader%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%82%8F%E3%81%97%E3%81%A6contenttype%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%97%E3%81%9F%E3%82%89%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F/</link><pubDate>Sun, 10 Sep 2023 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2023-09-10-golangio-reader%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%82%8F%E3%81%97%E3%81%A6contenttype%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%97%E3%81%9F%E3%82%89%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F/</guid><description>&lt;h3 id="前書き同じハマりを繰り返す"&gt;前書き：同じハマりを繰り返す&lt;/h3&gt;
&lt;p&gt;Single Page Application（SPA）をAmazon S3にアップロードする機能を持つ&lt;a href="https://github.com/nao1215/spare"&gt;spareコマンド&lt;/a&gt;を開発しているとき、io.Readerの使い方を間違えて少しハマってしまいました。ハマりの原因はio.Readerで読み出すデータが欠損していたことであり、欠損の原因はio.Readerを使いまわしたことです。&lt;/p&gt;
&lt;p&gt;このハマり方は2回目なので、備忘録として記事にします。&lt;/p&gt;</description></item><item><title>Golangを用いたサーバーサイド：技術選定と現状の小さな課題</title><link>https://debimate.jp/post/ja/2023-05-19-golang%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E6%8A%80%E8%A1%93%E9%81%B8%E5%AE%9A%E3%81%A8%E7%8F%BE%E7%8A%B6%E3%81%AE%E5%B0%8F/</link><pubDate>Fri, 19 May 2023 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2023-05-19-golang%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E6%8A%80%E8%A1%93%E9%81%B8%E5%AE%9A%E3%81%A8%E7%8F%BE%E7%8A%B6%E3%81%AE%E5%B0%8F/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事では、Golangを用いてRESTful APIを開発する上で私が使用している技術（OSS）を述べた後、より良い開発体験を得るための改善したい点（解消したい課題）について述べます。&lt;/p&gt;</description></item><item><title>【Golang】CSV／TSV／LTSV／JSONにSQLを実行するsqlyコマンドを作った話【開発背景／設計／使い方】</title><link>https://debimate.jp/post/ja/2022-12-02-golangcsvtsvltsvjson%E3%81%ABsql%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8Bsqly%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F/</link><pubDate>Fri, 02 Dec 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-12-02-golangcsvtsvltsvjson%E3%81%ABsql%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8Bsqly%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事は、&lt;a href="https://www.fuller-inc.com/"&gt;フラー株式会社&lt;/a&gt; &lt;a href="https://qiita.com/advent-calendar/2022/fuller-inc"&gt;Advent Calendar 2022&lt;/a&gt;の5日目の記事です。4日目の記事は、「&lt;a href="https://furusax0621.hatenablog.com/entry/2022/12/04/000000"&gt;フラーを卒業していった優秀な学生アルバイトに向けたポエム&lt;/a&gt;（&lt;a href="https://twitter.com/furusax"&gt;@furusax&lt;/a&gt;）」です。ポエムと言いつつ、技術的なお話でしたね。&lt;/p&gt;
&lt;p&gt;本記事では、CSV／TSV／LTSV／JSONに対してSQLを実行する&amp;quot;sqly&amp;quot;コマンド（自作ツール）について解説します。sqlyの基本機能を簡単に説明した後、開発した背景、設計、使用しているパッケージについて説明し、利用例と今後の展望を説明します。&lt;/p&gt;</description></item><item><title>【Golang】Windows対応でハマった箇所【ファイルパス、一時ファイル削除エラー】</title><link>https://debimate.jp/post/ja/2022-11-27-golangwindows%E5%AF%BE%E5%BF%9C%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E7%AE%87%E6%89%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%91%E3%82%B9%E4%B8%80/</link><pubDate>Sun, 27 Nov 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-11-27-golangwindows%E5%AF%BE%E5%BF%9C%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E7%AE%87%E6%89%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%91%E3%82%B9%E4%B8%80/</guid><description>&lt;h3 id="前書きwindows君さぁ"&gt; 前書き：Windows君さぁ&amp;hellip;&amp;hellip;&lt;/h3&gt;
&lt;p&gt;私は、GolangでCLIツールをよく作ります。CLIツールの品質を担保するために、GitHub Actionsでユニットテスト（Linux、Mac、Windows向け）を継続的に実施しています。&lt;/p&gt;</description></item><item><title>【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい</title><link>https://debimate.jp/post/ja/2022-06-25-golangsqlc%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7sql%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%8B%E3%82%89%E5%9E%8B%E5%AE%89%E5%85%A8%E3%81%AAgo%E3%82%B3%E3%83%BC%E3%83%89/</link><pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-06-25-golangsqlc%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7sql%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%8B%E3%82%89%E5%9E%8B%E5%AE%89%E5%85%A8%E3%81%AAgo%E3%82%B3%E3%83%BC%E3%83%89/</guid><description>&lt;h3 id="前書きsqlcとは"&gt;前書き：sqlcとは&lt;/h3&gt;
&lt;p&gt;本記事は、&lt;a href="https://github.com/kyleconroy/sqlc"&gt;kyleconroy/sqlc&lt;/a&gt;の基本的な情報を紹介します。&lt;/p&gt;
&lt;p&gt;sqlcは、DBスキーマ（DBテーブル定義）、SQLクエリ定義、設定ファイルの3点をインプットとして、型安全なCRUDコード + DBテーブルに対応したモデル（構造体）を自動生成します。ここでのモデルの自動生成には、複数テーブルをJOINしたクエリ用の構造体も含まれます。&lt;/p&gt;</description></item><item><title>【Golang】spf13/cobraが提供する入力補完（shell completion）をファイル形式でインストールする方法【bash, zsh, fish】</title><link>https://debimate.jp/post/ja/2022-04-17-golangspf13-cobra%E3%81%8C%E6%8F%90%E4%BE%9B%E3%81%99%E3%82%8B%E5%85%A5%E5%8A%9B%E8%A3%9C%E5%AE%8Cshell-completion%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/</link><pubDate>Sun, 17 Apr 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-04-17-golangspf13-cobra%E3%81%8C%E6%8F%90%E4%BE%9B%E3%81%99%E3%82%8B%E5%85%A5%E5%8A%9B%E8%A3%9C%E5%AE%8Cshell-completion%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/</guid><description>&lt;h3 id="前書きspf13cobraのシェル補完は便利"&gt;前書き：spf13/cobraのシェル補完は便利&lt;/h3&gt;
&lt;p&gt;本記事は、&lt;a href="https://github.com/spf13/cobra"&gt;spf13/cobra&lt;/a&gt;が提供する「シェル補完（文字列）」をファイルとしてシステムにインストールする例を紹介します。今回の例を実践すると、cobraを用いたCLIコマンドでシェル補完が有効になります。ここでのシェル補完とは、ターミナルでコマンド入力中に[TAB]キーを押すと、自動で単語を補完する機能です。&lt;/p&gt;
&lt;p&gt;対象シェルは、bash、zsh、fishです。PowerShellは、私が詳しくないので除外します。&lt;/p&gt;
&lt;p&gt;cobraは、Golang用のCLIコマンド作成補助ライブラリです。代表的な機能は、CLIコマンド実行時にオプション／サブコマンドが指定されたかどうかを判定する機能です。cobraを使用した場合、自動的にcompletionサブコマンドが追加され（例：以下に示すposixerコマンドのhelp参照）、このサブコマンドはシェル補完用の文字列を出力します。&lt;/p&gt;</description></item><item><title>GitHubで初めてStar 50個以上を獲得した感想と実施した内容【Redditで宣伝】</title><link>https://debimate.jp/post/ja/2022-02-26-github%E3%81%A7%E5%88%9D%E3%82%81%E3%81%A6star-50%E5%80%8B%E4%BB%A5%E4%B8%8A%E3%82%92%E7%8D%B2%E5%BE%97%E3%81%97%E3%81%9F%E6%84%9F%E6%83%B3%E3%81%A8%E5%AE%9F%E6%96%BD%E3%81%97%E3%81%9F%E5%86%85/</link><pubDate>Sat, 26 Feb 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-02-26-github%E3%81%A7%E5%88%9D%E3%82%81%E3%81%A6star-50%E5%80%8B%E4%BB%A5%E4%B8%8A%E3%82%92%E7%8D%B2%E5%BE%97%E3%81%97%E3%81%9F%E6%84%9F%E6%83%B3%E3%81%A8%E5%AE%9F%E6%96%BD%E3%81%97%E3%81%9F%E5%86%85/</guid><description>&lt;h3 id="前書き人生で初めてgithub-star-50個超え"&gt;前書き：人生で初めてGitHub Star 50個超え&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/nao1215/gup"&gt;&amp;ldquo;go install&amp;quot;したバイナリをアップデートするgupコマンド&lt;/a&gt;が、公開から一週間でGitHub Starを50個以上獲得しました！ちょっと嬉しい。最新の仕様は、&lt;a href="https://zenn.dev/nao1215/articles/aef3fe318848d6"&gt;Zenn&lt;/a&gt;で説明しています。&lt;/p&gt;</description></item><item><title>【Golang】go installで取得した$GOPATH/bin以下のバイナリを一括更新するgupコマンドを試作</title><link>https://debimate.jp/post/ja/2022-02-20-golanggo-install%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9Fgopath-bin%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%92%E4%B8%80%E6%8B%AC%E6%9B%B4%E6%96%B0/</link><pubDate>Sun, 20 Feb 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-02-20-golanggo-install%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9Fgopath-bin%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%92%E4%B8%80%E6%8B%AC%E6%9B%B4%E6%96%B0/</guid><description>&lt;h3 id="前書きバイナリの更新が面倒"&gt;前書き：バイナリの更新が面倒&lt;/h3&gt;
&lt;p&gt;Golangでは、MacやLinuxのパッケージマネージャ（brew, apt, dnf, snap, etc）を利用せずに、&amp;quot;$ go install&amp;quot;でバイナリをインストールできます。&amp;quot;$ go install&amp;quot;は、開発者がパッケージのスペックファイルを作成せずにバイナリを配布できるメリットがあります。&lt;/p&gt;</description></item><item><title>【Golang】goa（ver 1.x）frameworkのlinter（goavl）を試作【go/astを利用】</title><link>https://debimate.jp/post/ja/2022-02-11-golanggoaver-1-xframework%E3%81%AElintergoavl%E3%82%92%E8%A9%A6%E4%BD%9Cgo-ast%E3%82%92%E5%88%A9%E7%94%A8/</link><pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-02-11-golanggoaver-1-xframework%E3%81%AElintergoavl%E3%82%92%E8%A9%A6%E4%BD%9Cgo-ast%E3%82%92%E5%88%A9%E7%94%A8/</guid><description>&lt;h3 id="前書きdslに半日悩みカッとなって作った"&gt;前書き：DSLに半日悩み、カッとなって作った&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/shogo82148/goa-v1"&gt;goa&lt;/a&gt;は、&lt;a href="https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%9B%BA%E6%9C%89%E8%A8%80%E8%AA%9E"&gt;DSL&lt;/a&gt;で記述されたデザインをもとに、Web APIホスティングに必要なベース処理（ルーティング、コントローラ、Swaggerなど）を生成するFrameworkです。&lt;a href="https://logmi.jp/tech/articles/323091"&gt;goaを採用している会社の例は、DMM&lt;/a&gt;。goaを使うとコード記述量が減り、APIドキュメントが自動生成される利点があります。&lt;/p&gt;
&lt;p&gt;私は、2022年1月からgoaを開発で使用するようになりました。goaは、DSLを覚えるコストが小さくはありません。DSLを書き間違えると、当然goa-designから各種ファイルの生成処理でエラーとなります。&lt;/p&gt;</description></item><item><title>【Golang】2022年に開発した自作CLIコマンド／ライブラリに対する所感と宣伝【OSS】</title><link>https://debimate.jp/post/ja/2022-02-05-golang2022%E5%B9%B4%E3%81%AB%E9%96%8B%E7%99%BA%E3%81%97%E3%81%9F%E8%87%AA%E4%BD%9Ccli%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-02-05-golang2022%E5%B9%B4%E3%81%AB%E9%96%8B%E7%99%BA%E3%81%97%E3%81%9F%E8%87%AA%E4%BD%9Ccli%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/</guid><description>&lt;h3 id="前書きgolangでの開発が増えた"&gt;前書き：Golangでの開発が増えた&lt;/h3&gt;
&lt;p&gt;最近、Golangで小さいCLIコマンド／ライブラリを書き殴る事が増えました。&lt;/p&gt;
&lt;p&gt;その理由としては、環境の変化が大きいです。前職では組み込みエンジニアとして複数言語を使用していましたが、現職ではGolang固定です。Golangを書けば書くほど現職に関係するスキルが上がるので、積極的にGolangを使うようになりました。&lt;/p&gt;</description></item><item><title>【Golang】go:embedを用いて格言表示コマンド（subaru）を開発</title><link>https://debimate.jp/post/ja/2022-02-05-golanggoembed%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E6%A0%BC%E8%A8%80%E8%A1%A8%E7%A4%BA%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89subaru%E3%82%92%E9%96%8B%E7%99%BA/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-02-05-golanggoembed%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E6%A0%BC%E8%A8%80%E8%A1%A8%E7%A4%BA%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89subaru%E3%82%92%E9%96%8B%E7%99%BA/</guid><description>&lt;h3 id="前書きgoembedを試したかった"&gt;前書き：go:embedを試したかった&lt;/h3&gt;
&lt;p&gt;Golangでは、&lt;a href="https://pkg.go.dev/embed"&gt;go:embed&lt;/a&gt;がVersion1.16から組み込まれています。&lt;/p&gt;
&lt;p&gt;go:embedの利点は、「バイナリインストール（設定ファイルや関連ファイル含む）がより簡単になる事」でしょうか。go:embedを用いる事によって、バイナリの中に設定ファイルやスクリプトなどを埋め込めます。そのため、バイナリをシステムに置くだけで、インストール作業が完了となります。&lt;/p&gt;</description></item><item><title>【Golang】プロジェクトテンプレート生成ツール（ubume）を試作【改善案を募集】</title><link>https://debimate.jp/post/ja/2022-01-11-golang%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E7%94%9F%E6%88%90%E3%83%84%E3%83%BC%E3%83%ABubume/</link><pubDate>Tue, 11 Jan 2022 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2022-01-11-golang%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E7%94%9F%E6%88%90%E3%83%84%E3%83%BC%E3%83%ABubume/</guid><description>&lt;h3 id="前書きプロジェクトを新規で作るのはダルい"&gt;前書き：プロジェクトを新規で作るのはダルい&lt;/h3&gt;
&lt;p&gt;Golangの勉強中に、「サンプルコードを試すためのプロジェクト」や「検証用プロジェクト」を手動で作るのは、面倒だなと感じてきました。また、どこかのプロジェクトをコピーして流用すると、名称の変更忘れ（誤記、typo）が発生しがちです。&lt;/p&gt;</description></item><item><title>【golang】errorsパッケージ New(), Unwrap(), Is(), As()の使い方と注意点</title><link>https://debimate.jp/post/ja/2021-12-13-golangerrors%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8-new-unwrap-is-as%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%A8%E6%B3%A8%E6%84%8F%E7%82%B9/</link><pubDate>Mon, 13 Dec 2021 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2021-12-13-golangerrors%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8-new-unwrap-is-as%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%A8%E6%B3%A8%E6%84%8F%E7%82%B9/</guid><description>&lt;h3 id="前書き君err--nilしかできないの"&gt;前書き：君、err != nilしかできないの?&lt;/h3&gt;
&lt;p&gt;Golangでは、errorがnilでなければ上位関数にそのままerrorを戻す処理が頻繁にあります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;f, err := os.Create(path)
if err != nil {
return err
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;「エラーが発生した事実」を上位関数へ伝えるだけであれば、上記コードの対応で問題ありません。しかし、エラーの種類によって異なる対応をしたい場合は、nilチェックだけでは物足りません。&lt;/p&gt;</description></item><item><title>MimixBox（BusyBoxインスパイア）の概要、開発時の気づき、PR募集について【Golang学習】</title><link>https://debimate.jp/post/ja/2021-11-28-golang%E5%AD%A6%E7%BF%92mimixboxbusybox%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%91%E3%82%A4%E3%82%A2%E3%81%AE%E6%A6%82%E8%A6%81%E9%96%8B%E7%99%BA%E6%99%82/</link><pubDate>Sun, 28 Nov 2021 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2021-11-28-golang%E5%AD%A6%E7%BF%92mimixboxbusybox%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%91%E3%82%A4%E3%82%A2%E3%81%AE%E6%A6%82%E8%A6%81%E9%96%8B%E7%99%BA%E6%99%82/</guid><description>&lt;h3 id="mimixboxはgolang学習用アプリとして開始"&gt;MimixBoxはGolang学習用アプリとして開始 &lt;/h3&gt;
&lt;p&gt;Golang製の&lt;a href="https://github.com/nao1215/mimixbox"&gt;MimixBox&lt;/a&gt;は、&lt;a href="https://www.busybox.net/"&gt;BusyBox&lt;/a&gt;（多数のUnixコマンドをシングルバイナリに詰め込んだCLIアプリ）と共通点を持ちつつ、独自の目標を持つCLIアプリとして開発しています。&lt;/p&gt;
&lt;p&gt;開発のキッカケは、Golangを学習するためです。&lt;a href="https://debimate.jp/post/2021-11-13-%E9%80%80%E8%81%B7%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA%E6%96%B0%E6%BD%9F%E5%9C%A8%E4%BD%8F%E3%81%AE%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2/"&gt;前職を退職&lt;/a&gt;して、新しい会社では開発経験のないGolangがメイン言語となりました。即戦力となれるよう、私は勉強のためにCLIツールや独自シェルを作り始めましたが、「全部混ぜて開発すればプロジェクト数が増えず、管理が楽では？それなら、BusyBoxを真似するか」という考えに至りました。&lt;/p&gt;
&lt;p&gt;ここまで来れば「MimixBox - Mimic BusyBox on Linux（Linux上でBusyBoxを模倣する）」という名称を考えつくのは、一瞬でした。ちなみに、同様のプロジェクトには&lt;a href="https://github.com/shirou/toybox"&gt;toybox&lt;/a&gt;と&lt;a href="https://github.com/surma/gobox"&gt;gobox&lt;/a&gt;があります（皆、考える事は大体一緒）。&lt;/p&gt;</description></item><item><title>Golangで無名パイプからデータを受け取る方法【term.IsTerminalによる判定】</title><link>https://debimate.jp/post/ja/2021-11-23-golang%E3%81%A7%E7%84%A1%E5%90%8D%E3%83%91%E3%82%A4%E3%83%97%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B%E6%96%B9%E6%B3%95terminal-isterminal/</link><pubDate>Tue, 23 Nov 2021 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2021-11-23-golang%E3%81%A7%E7%84%A1%E5%90%8D%E3%83%91%E3%82%A4%E3%83%97%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B%E6%96%B9%E6%B3%95terminal-isterminal/</guid><description>&lt;h3 id="前書きosargs1にはパイプのデータがない"&gt;前書き：os.Args[1]にはパイプのデータがない&lt;/h3&gt;
&lt;p&gt;無名パイプは、Terminal上で用いる&amp;quot;|&amp;ldquo;の事です。例えば、以下の例ではechoコマンドがパイプで&amp;quot;PIPE test&amp;quot;を渡し、受け取り側のcatコマンドがパイプから受け取ったデータを標準出力しています。&lt;/p&gt;</description></item><item><title>【Go言語(Golang)】os.Exit()をユニットテストする方法(カバレッジも取得する方法)</title><link>https://debimate.jp/post/ja/2020-11-20-go%E8%A8%80%E8%AA%9Egolangos-exit%E3%82%92%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%AB%E3%83%90%E3%83%AC%E3%83%83/</link><pubDate>Fri, 20 Nov 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-11-20-go%E8%A8%80%E8%AA%9Egolangos-exit%E3%82%92%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%AB%E3%83%90%E3%83%AC%E3%83%83/</guid><description>&lt;h3 id="前書きosexitの結果は親プロセスが受信"&gt;前書き：os.Exit()の結果は親プロセスが受信&lt;/h3&gt;
&lt;p&gt;Go言語のos.Exit()は以下に示すコードで実装されており、最終的にシステムコールのexit()を呼び出し、プロセスを終了させます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;func Exit(code int) {
if code == 0 {
// Give race detector a chance to fail the program.
// Racy programs do not have the right to finish successfully.
runtime_beforeExit()
}
syscall.Exit(code)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;システムコールExit()の引数codeは、そのプロセスの終了状態として親プロセスに伝わる仕様です（他言語のexit()コードも同等の挙動をします）。つまり、テストコードからos.Exit()をコールするメソッドを呼び出しても、その結果を取得できません。&lt;/p&gt;</description></item><item><title>【Go言語(Golang)】ユニットテスト時にgo-flagsに任意の引数を渡す方法</title><link>https://debimate.jp/post/ja/2020-11-20-go%E8%A8%80%E8%AA%9Egolang%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E6%99%82%E3%81%ABgo-flags%E3%81%AB%E4%BB%BB%E6%84%8F%E3%81%AE%E5%BC%95%E6%95%B0%E3%82%92/</link><pubDate>Fri, 20 Nov 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-11-20-go%E8%A8%80%E8%AA%9Egolang%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E6%99%82%E3%81%ABgo-flags%E3%81%AB%E4%BB%BB%E6%84%8F%E3%81%AE%E5%BC%95%E6%95%B0%E3%82%92/</guid><description>&lt;h3 id="前書きflaggo標準のテスト方法ばかり検索ヒット"&gt;前書き：flag(Go標準)のテスト方法ばかり検索ヒット&lt;/h3&gt;
&lt;p&gt;Go言語は、&lt;a href="https://golang.org/pkg/flag/"&gt;コマンドライン引数をパースする機能を持つflagパッケージ&lt;/a&gt;が標準機能として提供されています。flagパッケージは、引数パース機能に対するユニットテストを簡単にするために、&amp;ldquo;flag.Commandline.Set()&amp;ldquo;が用意されています。&lt;/p&gt;
&lt;p&gt;その一方で、OSSとして公開されている&lt;a href="https://github.com/jessevdk/go-flags"&gt;go-flags&lt;/a&gt;パッケージはどうでしょうか？flagパッケージよりも、go-flagsの方がコマンドライン引数を簡単に扱える特徴（ショート／ロングオプションサポート、Helpメッセージ自動生成など）がありますが、テスト用の仕組みが見当たりません。&lt;/p&gt;
&lt;p&gt;Googleで検索しても、go-flagsパッケージによるコマンドライン引数パースをテストする方法が出てこなかったため、本記事ではその方法（ベストな方法ではなく、妥協した方法）を紹介します。&lt;/p&gt;</description></item></channel></rss>