
【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい
前書き:sqlcとは 本記事は、kyleconroy/sqlcの基本的な情報を紹介します。 sqlcは、DBスキーマ(DBテーブル定義)、SQLクエリ定義、設定ファイルの3点をインプットとして、型安全なCRUDコード + DBテーブルに対応したモデル(構造体)を自動生成します。ここでのモデルの自動生成には、複数テーブルをJOINしたクエリ用の構造体も含まれます。 ...

前書き:sqlcとは 本記事は、kyleconroy/sqlcの基本的な情報を紹介します。 sqlcは、DBスキーマ(DBテーブル定義)、SQLクエリ定義、設定ファイルの3点をインプットとして、型安全なCRUDコード + DBテーブルに対応したモデル(構造体)を自動生成します。ここでのモデルの自動生成には、複数テーブルをJOINしたクエリ用の構造体も含まれます。 ...

前書き:人生初の転職。その感想 2022年1月にフラー株式会社へ入社してから、約半年経ちました(実際は5ヶ月と少し)。参加プロジェクトも区切りが付きそうであり、良い節目なので記録を残します。社内の細かいことは書きません。 個人的な日記に近いので、SEO(検索エンジン最適化)を気にせず、文章多めです。 自己紹介と転職の経緯 転職経緯の詳細版は、別記事に書いています。 私は、前職で組み込みエンジニアとしてキャリアを歩んできました。しかし、使う技術が古く、業務内容もマネージメント寄りになってきていました。そのため、「エンジニアとして使えないオッサンになるのではないか(今31歳なのでオッサンなのは否定しない)」と漠然と不安を抱えていました。 ...

Software Design誌 2回目の寄稿! 技術評論社のSoftware Design 2022年6月号 第1特集 第3章 「シェルスクリプトの使い方」に寄稿する機会をいただきました!2022年1月号に続いて、2回目の寄稿です。表紙がワンちゃんからネコちゃんに戻っています! ...

資格有効期限切れ 2週間前の滑り込み合格 LPIC有効期限2022年6月3日の約2週間前に、LPIC Level3 303-200(Version 2.0)に合格しました。「転職(組み込みからサーバサイドへのキャリアチェンジ)」「息子の誕生」「Software Designへの記事寄稿」と、生活の変化が多い中でギリギリ合格できて、安心しました。 ...

前書き:spf13/cobraのシェル補完は便利 本記事は、spf13/cobraが提供する「シェル補完(文字列)」をファイルとしてシステムにインストールする例を紹介します。今回の例を実践すると、cobraを用いたCLIコマンドでシェル補完が有効になります。ここでのシェル補完とは、ターミナルでコマンド入力中に[TAB]キーを押すと、自動で単語を補完する機能です。 対象シェルは、bash、zsh、fishです。PowerShellは、私が詳しくないので除外します。 cobraは、Golang用のCLIコマンド作成補助ライブラリです。代表的な機能は、CLIコマンド実行時にオプション/サブコマンドが指定されたかどうかを判定する機能です。cobraを使用した場合、自動的にcompletionサブコマンドが追加され(例:以下に示すposixerコマンドのhelp参照)、このサブコマンドはシェル補完用の文字列を出力します。 ...

前書き:人生で初めてGitHub Star 50個超え “go install"したバイナリをアップデートするgupコマンドが、公開から一週間でGitHub Starを50個以上獲得しました!ちょっと嬉しい。最新の仕様は、Zennで説明しています。 ...

前書き:バイナリの更新が面倒 Golangでは、MacやLinuxのパッケージマネージャ(brew, apt, dnf, snap, etc)を利用せずに、"$ go install"でバイナリをインストールできます。"$ go install"は、開発者がパッケージのスペックファイルを作成せずにバイナリを配布できるメリットがあります。 ...

前書き:DSLに半日悩み、カッとなって作った goaは、DSLで記述されたデザインをもとに、Web APIホスティングに必要なベース処理(ルーティング、コントローラ、Swaggerなど)を生成するFrameworkです。goaを採用している会社の例は、DMM。goaを使うとコード記述量が減り、APIドキュメントが自動生成される利点があります。 私は、2022年1月からgoaを開発で使用するようになりました。goaは、DSLを覚えるコストが小さくはありません。DSLを書き間違えると、当然goa-designから各種ファイルの生成処理でエラーとなります。 ...

前書き:Golangでの開発が増えた 最近、Golangで小さいCLIコマンド/ライブラリを書き殴る事が増えました。 その理由としては、環境の変化が大きいです。前職では組み込みエンジニアとして複数言語を使用していましたが、現職ではGolang固定です。Golangを書けば書くほど現職に関係するスキルが上がるので、積極的にGolangを使うようになりました。 ...

前書き:go:embedを試したかった Golangでは、go:embedがVersion1.16から組み込まれています。 go:embedの利点は、「バイナリインストール(設定ファイルや関連ファイル含む)がより簡単になる事」でしょうか。go:embedを用いる事によって、バイナリの中に設定ファイルやスクリプトなどを埋め込めます。そのため、バイナリをシステムに置くだけで、インストール作業が完了となります。 ...

前書き:gem installでコケる 原因は単なる権限の問題。Ruby初心者なので自分用にメモします。 まずは、前提情報です。Ubuntu 21.10、Ruby 2.7.4[x86_64-linux-gnu]で、femパッケージ(パッケージ作成ツール)のインストールを試みました。結果は、/var/lib/gems以下のパーミッションエラー。 ...

前書き:プロジェクトを新規で作るのはダルい Golangの勉強中に、「サンプルコードを試すためのプロジェクト」や「検証用プロジェクト」を手動で作るのは、面倒だなと感じてきました。また、どこかのプロジェクトをコピーして流用すると、名称の変更忘れ(誤記、typo)が発生しがちです。 ...

前書き:学生時代の曲を振り返る機会が増加 「2020年に聴いてハマったメタルバンド4選」に引き続き、今年は2021年に聴いてハマったアルバムを取り上げようと思います(1年の振り返り)。 31歳という年齢のせいか、最近は学生時代(90年代後半、2000年代前半)の曲が刺さります。GLAY、B’z、Kinki Kids……しかし、なるべく聴かないようにしています。理由は、以下のツイートの通りです。 ...

マイナーなプログラミング言語:Vala言語とは あなたはVala言語をご存知でしょうか? Vala言語は、プログラミング言語ランキングでは圏外(50位以下)であり、クロスプラットホーム言語にも関わらずLinux環境のGUIプログラミングでしか用いられる機会がありません。GUIに強みを持つ言語であるため、Linuxでシステムプログラミング開発する人でも、Vala言語の存在を知らない可能性があります。THE マイナー言語。 ...

前書き:人生初!ソフト雑誌への寄稿 技術評論社のSoftware Design 2022年1月号 第2特集(第1章、第2章)に寄稿させていただきました。 間違いなく、2021年で最も嬉しい出来事です!(エンジニア人生の中でトップクラスの嬉しさ) ...

前書き:君、err != nilしかできないの? Golangでは、errorがnilでなければ上位関数にそのままerrorを戻す処理が頻繁にあります。 f, err := os.Create(path) if err != nil { return err } 「エラーが発生した事実」を上位関数へ伝えるだけであれば、上記コードの対応で問題ありません。しかし、エラーの種類によって異なる対応をしたい場合は、nilチェックだけでは物足りません。 ...

前書き:災害レベルの脆弱性 本記事は、紛うことなきポエム記事です。Log4j2の脆弱性問題を追っている間に「OSS開発の醜い部分」を目の当たりにしたので、本記事では「せめてOSS開発者が金銭的もしくは他の手段で報われればいいのに」と主張します。 ...

MimixBoxはGolang学習用アプリとして開始 Golang製のMimixBoxは、BusyBox(多数のUnixコマンドをシングルバイナリに詰め込んだCLIアプリ)と共通点を持ちつつ、独自の目標を持つCLIアプリとして開発しています。 開発のキッカケは、Golangを学習するためです。前職を退職して、新しい会社では開発経験のないGolangがメイン言語となりました。即戦力となれるよう、私は勉強のためにCLIツールや独自シェルを作り始めましたが、「全部混ぜて開発すればプロジェクト数が増えず、管理が楽では?それなら、BusyBoxを真似するか」という考えに至りました。 ここまで来れば「MimixBox - Mimic BusyBox on Linux(Linux上でBusyBoxを模倣する)」という名称を考えつくのは、一瞬でした。ちなみに、同様のプロジェクトにはtoyboxとgoboxがあります(皆、考える事は大体一緒)。 ...

前書き:技術レイヤーが変わる前に振り返り 2021年12月に新卒入社した会社を退職しました。 退職前の会社では、組み込みエンジニアとして働いていましたが、次の職場ではバックエンドエンジニアとして働きます。組み込みエンジニアは、ハード(機密情報)と近い関係からか、あまり情報発信しない印象があります。情報発信しようにも、「会社独自技術のネタしか無い」という業界な気がしています。 ...

前書き:os.Args[1]にはパイプのデータがない 無名パイプは、Terminal上で用いる"|“の事です。例えば、以下の例ではechoコマンドがパイプで"PIPE test"を渡し、受け取り側のcatコマンドがパイプから受け取ったデータを標準出力しています。 ...

C言語とオブジェクト指向は相性悪い オブジェクト指向は、C言語でも実現できます。 C言語は、言語によるオブジェクト指向プログラミングのサポートがありません。しかし、開発者が注意深く実装する事によって、オブジェクト指向プログラミングが可能です。 ...

本画像は新潟駅南の写真であり、著作権およびその他の権利はtownphoto.net様が保有しています。 前書き 2015年4月から2021年12月まで勤めていた会社を退職しました。 退職間近では、私は組み込みソフト開発およびGUIコンソール開発を担当するプロジェクトリーダーでした。多くの方に期待されている事を理解していましたが、様々な要因が積み重なった結果として退職を選択しました。 ...

前書き:Shell Scriptの中身を見せたくない 通常の開発業務では、Shell Scriptをバイナリ化(かつ暗号化)する利点はありません。自分しか解読できないShell Scriptは、他のチームメンバにとっては迷惑な存在(負債)になります。 ...

前書き:スクリプトサイズが大きい理由 プロプラエタリソフト(例:商用ソフト)のShell Scriptインストーラのサイズを見たら、数百MBだった事はありませんか? そのような場合は、.deb/.rpmパッケージやtarball等のバイナリがShell Scriptに埋め込まれている可能性が高いです。このようなインストーラは、実行時にバイナリ部分だけを取り出してから、バイナリを操作します。 ...

前書き:UbuntuはWelcomeメッセージが立派で邪魔 ラズパイサーバ(Raspberry Pi OS)からHP小型PC(Ubuntu 20.04)にサーバ移行した時、UbuntuのWelcomeメッセージがラズパイより立派な事に気づきました。 例えば、Ubuntuにsshログインした時、以下のようなWelcomeメッセージが出ます。 ...

前書き:これだからC言語プログラマは…… Immutable object(不変クラス)とは、コンストラクタによるインスタンス生成時から状態(フィールド変数の値)が変わらないクラスを意味します。代表例はStringクラス。 ...

前書き:オススメ?当たり前? 本記事は、読者の皆様にLinuxアプリをオススメするように見せかけた備忘録記事です。 私は、2018年から開発環境(≒普段使いのPC)をMacからLinuxに移行しました。Linux環境に移行した後もDebian → elementary OSと移行を続けていて、開発や余暇で使用するアプリを記録しておく必要性が出てきました。 ...

前書き:ネストの深さを指摘する時間が勿体無い コードレビューを効果的に実施したいと考えた事はありませんか? 例えば、短い期間でソフト開発する場合、レビュー時間を潤沢に取れないケースがあります。このような場合は、 ...

前書き:"==“や”!=“による判定と何が違う? Javaでコードを書くと、nullチェック(NullPointerException防止)は避けられません。 私のようにC言語脳の人は、"=="(等価演算子)や”!="(不等価演算子)を用いてnullチェックを行うかもしれません。しかし、Java SE8以降は、null関係の判定メソッドとしてjava.utils.ObjectsにisNull()やnonNull()が用意されています。 ...

前書き:Abstract Factoryパターンとは Abstract Factoryパターンは、関連するインスタンスの生成APIを抽象化クラスに集約し(= 生成に関するインターフェースを定義し)、生成処理は抽象化クラスを継承(実装)したクラスに任せる設計手法です。 ...