Go

データベースにクエリを投げて結果をプリントするライブラリqpを作った

Go

データベースを伴うテストを書いていて、何故かテスト結果が安定しない事象に出くわして「なんでだ?????」と混乱した結果、データベースの状況をprintデバッグをしたくなって作りました*1。 github.com 使い方は package main import ( "database/sql" …

ファイルの一部の文字列を差し替えするためのコマンド/パッケージ repin を作った

Go

継続的ドキュメンテーション関連です。 README.mdなどのドキュメントを運用していると、そのドキュメントの一部を(CIなどで)自動で差し替えたいことがあります。 例えば xxx help コマンドの出力をもって機能一覧にしているようなREADMEだと、機能が追加さ…

awsdoに ~/.aws/(config|credentials)の設定情報がなくてもAssumeRoleできるようにするためのオプションと、AssumeRoleしたロールでAWSコンソールにログインするオプションを追加した

1年以上前からの久しぶりのアップデートです。 k1low.hatenablog.com --role-arn --source-profile 複数のAWSアカウントを横断して作業することがあり、AssumeRoleのための設定を~/.aws/(config|credentials)に書くのすら面倒になってきたので、設定なしでAs…

せめてリポジトリの各ディレクトリの概要説明だけでも欲しい思ったので dirmap というツールを作ってみた

Go

既存の開発に参加するときや、0->1の開発をしているとき、いつも「せめてリポジトリの各ディレクトリの概要説明だけでも欲しい」と思っていました。 既存のプロジェクトに参加するときは「プロジェクトの理解をする側」、0->1のプロジェクトで開発をしている…

ディレクトリ内のPDFとEPUBをタイトル付きでリストアップする ebk ls を作った

Go

1つのディレクトリに雑に放り込んでいた電子書籍をPDFとEPUB横断でCLIからタイトル検索して開けるようになった。オライリーとかファイル名から中身を類推できなくて困っていたのでこれで「あの書籍どのファイルだっけ?」がはかどる。 pic.twitter.com/0wVSj…

go-githubのClientをいい感じに組み立ててインスタンスを生成するだけのgo-github-clientを作った

毎回、go-githubのclientをGITHUB_*やらGH_*やらを判定して組み立てたり、外部パッケージのgo-githubのバージョンに合わせたりするのが面倒になって、カッとなって作ったhttps://t.co/8zhsP3V8cvサブディレクトリの使い方がひどい(go-githubのバージョンに…

Monorepoなリポジトリでgo.modがネストされた位置にあるときのgoplsの設定

$ gopls version golang.org/x/tools/gopls v0.7.3 golang.org/x/tools/gopls@v0.7.3 h1:Lru57ht8vtDMouRskFC085VAjBAZRAISd/lwvwOOV0Q= Monorepoなリポジトリ内のサブプロジェクトの開発でEmacs + goplsが動かないなーと思っていて *lsp-log* bufferをみる…

GitHub上にあるリポジトリに対してAPIを通じてgit grepライクに走査できるツール gh-grep (gh grep) を作った

git grep 便利ですよね。 私は git grep と git gsub は本当によく使います。 ところで git grep はローカルリポジトリがないと実行できません。 ローカルにリポジトリがなければ git clone して、 git grep すればいいのですが、もう少し簡単にgrepするため…

YAMLファイルの全ての値にos.Expandenv(os.Expand)を適用するgithub.com/k1LoW/expandを作った

Go

私は作るツールの設定ファイルのフォーマットをYAMLにすることが多いです。 そして各値で環境変数を展開できるようにする機能を追加することがあります。 以下のような設定ファイルを読み込んだ際に、 ${COVERAGE_ACCEPTABLE} や ${COVERAGE_BADGE_PATH} を…

メンテナンスが終了しているgithub.com/dgrijalva/jwt-goの脆弱性CVE-2020-26160に対応する

go.modでコミュニティメンテナンスバージョンの github.com/golang-jwt/jwt に replace すれば良さそうです。 replace github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt v3.2.2+incompatible github.com/dgrijalva/jwt-goは様々なパッケージで利用…

GitHub Actionsのサプライチェーンを構成しているDockerイメージやサードパーティActionのコード対して任意のコマンドを実行するツールを作ってみた

注意: 本エントリで紹介するツールは現時点でPoCな実装であり、効果や効率を保証するものではありません。 ちょっと前に社内でGitHub Actionsのサプライチェーン攻撃についての話題があがって、「なるほどー。今時は、リポジトリのコードだけの脆弱性や第三…

任意のPull Requestの内容を複数のリポジトリに対して一括コピーするツールpr-bulletを作った

GitHub Actions便利ですよね。 ペパボではGitHub Enterprise Server(以下、GHES)が運用されており、GHESでもGitHub Actionsが利用できます。 uses: だけで利用できるリポジトリを横断で再利用可能なActionの存在はかなり生産性を上げていると思います。 そ…

フォント周りで作成したGoパッケージの紹介

Go

Goでフォントを扱うことって(おそらく、たぶん、きっと)ほとんどないと思うのですが、私はなぜか文字が入っているpngファイルの生成とかER図とかを出すようなOSSを開発していることから、フォント周りのGoパッケージを作る機会がありました。 どれもパッケ…

Trivy DBを他のデータベースにマイグレーションするツール trivy-db-toを作った

Trivyは言わずと知れた脆弱性スキャナです。 私は最近までコンテナ専用のスキャナだと思っていましたがそんなことはなく、様々な環境に対してOSパッケージやアプリケーションの依存ライブラリの脆弱性を高速に検知してくれる汎用的なスキャナです。 k1low.ha…

データベースドキュメント生成コマンド tbls 更新情報 (テンプレート変更機能/ドキュメント内リンクのbaseUrl変更機能/テーブルリレーション自動検出機能)

Go

https://t.co/bxDrGgWriy がマージされたらtblsの新機能紹介エントリ書く— k1LoW (@k1LoW) 2020年11月9日 無事マージされてさらに便利になったtblsの新機能紹介エントリです。ちなみに、自分が追加した機能は1つもありません。 tblsをさらに便利にしてくれる…

GitHubやSTNSと会話して公開鍵を取得・更新するツールkeypを作った

GMOペパボではLinuxユーザ、グループの管理にSTNSやOCTOPASSを利用しています*1。 stns.jp github.com これらは簡単に言うとそれぞれTOMLファイルやGitHub(GHE)のユーザ情報をデータソースとしてLinuxユーザ、グループ、さらに公開鍵の管理をするものです。…

~/.aws/(config|credentials)の設定情報を元にMFAを行い、一時的なセキュリティ認証情報を取得してコマンドを実行するawsdoを作った

久しぶりに使うAWSのprofileがありまして、そのprofileについての記憶が失われていた結果、コマンド実行成功までに時間を溶かしてしまいました。 というのも、私は普段使うprofileではaswrapでAssumeRole(と多要素認証)を透過的に便利に実行していた結果、…

生ログを構造化ログに変換するツールlrepに日時パース機能をつけた

Go

k1low.hatenablog.com の続きです。 ログからSQLiteのDDLやクエリを生成できるなら日時は日時としてパースできたほうが使い勝手がいいと思い実装しました*1。 github.com 名前付き正規表現でログの日時部分に名前をつけて(以下のサンプルだと time )、その…

正規表現を使ってログをカジュアルに構造化ログ/データに変換するツールlrepを作った

Go

正規表現でついつい頑張ってしまう人のための正規表現で頑張るどこかで見たことあるツールできた— k1LoW (@k1LoW) 2020年7月25日 tl;dr Fluentdのregexp parser pluginのCLI版っぽいツールを作りました(個人的に一番伝わりやすい言い方だと思っている)。 …

プロセスやファイルのケーパビリティを確認できるツールを再発明しつつLinux capabilitiesの理解を進めている

最近社内でLinux capabilitiesの話題がでていて「そういえばちゃんと理解していないな」と思ったので、夜ちょこちょこと技術エントリとかmanとかを読んでいました。 Linux Capability - ケーパビリティについての整理 - ローファイ日記 第42回 Linuxカーネル…

spf13/cobraでサブコマンドとして外部コマンドを実行する

Go

tblsには、tbls-cacoo のような外部コマンドをtbls cacoo のようなサブコマンドとして実行できるような機能を実装しています。私はこれを取り敢えず”外部サブコマンド機能”と呼んでいます。 外部サブコマンド機能は、 コマンド名が tbls-XXX という命名規則…

GitHubに1コマンドでいろいろPUTできるツールghputを作った

ghput pr-comment ghput issue-comment のデフォルトの挙動について注意点を追記しました 最近はGitHubやGH:Eといったサービスのリポジトリと、そのリポジトリと連携するCI/CD環境がある前提で、様々なパイプラインを作ることが普通になってきています。 git…

Cacooのデータベーススキーマ機能で、例えばBigQueryのER図を出力する

Go

Cacooで「データベーススキーマを自動生成できる」という素晴らしい機能が先週発表されました。 cacoo.com Cacooが提供するSQLクエリをデータベースで実行して、その結果をCSVファイルとしてエクスポートしてCacooにアップロードするだけでER図が生成される…

データベースドキュメント生成コマンド tbls 更新情報 ( PostgreSQL publicスキーマ表示仕様変更/Amazon DynamoDB対応/goccy ware etc)

Go

ここ最近tblsのアップデートエントリを書いていなかったのですが、最近変更をいくつか行いました。 このまま放置するとちょっと紹介しきれなくなりそうなので、ここら辺で放出しておこうと思います。 紹介時点のtblsのバージョンはv1.29.0です。 PostgreSQL…

いつの間にか https://play.golang.org/ でサードパーティパッケージをimportできるように、なんならgo.modでバージョンやコミットハッシュを指定できるようになっていた(続きあり)

Go

結論は最後に書いてあります。 PTFという社内勉強会で、私が端々が間違っていたりするちょっと微妙な紹介をしてしまったので、改めてエントリに記載しておこうと思います。 PTFについては以下をご覧ください。 tech.pepabo.com The Go Playgroundでいつの間…

MacBookの電源やWi-Fi、Bluetoothの接続が切れたのをトリガーにコマンドを実行しつづけるCLIツールを作った

Go

2014年のアイデアを実装している— k1LoW (@k1LoW) 2020年1月18日 2週に1度くらいFukuoka Growth Nextのコワーキングスペースを使わせてもらっています*1。 その時ちょっとだけ席を立ちたいときに、展開しているMacBookやバックパックを「置いておくか」「持…

色つけツール colr に、逆に受け取った標準入力から色を消す --erase オプションを追加した

Go

地味に普段から重宝している colr に --erase オプションを追加しました。 colr についての紹介エントリは以下をご覧ください。 k1low.hatenablog.com 色をつけたいことがある。そして色を消したい時がある colrによってカジュアルに色をつけた標準出力を得…

filtに tail -Fなストリームだけでなくcat /path/to/access.log のような標準出力に対しても何度でもコマンドを試行錯誤できる機能を追加した

Go

"トライアルアンドエラーパイプ"ことfiltに、tail -F /path/to/access.log なストリームだけでなく cat /path/to/access.log な標準出力に対しても何度でもコマンドをパイプで繋げて試行錯誤できる機能を追加しました。 k1low.hatenablog.com 今回新たに追加…

filtのコマンド履歴を保存できるようにした

Go

"トライアルアンドエラーパイプ"ことfiltで、パイプに繋いだコマンドの実行履歴を保存して次回filt実行時に補完候補として利用できるようにしました k1low.hatenablog.com コマンド履歴保存の有効化方法 以下のコマンドを実行することで有効化できます。 $ f…

"2 hours" のような文字列をパースして time.Duration を取得する duration パッケージを作った

Go

Harvest のログ取得期間指定をより柔軟にできるように --duration オプションを追加したかったのですが、 標準の time.ParseDuration() ではあまり柔軟ではない 既存パッケージを探したけれども time.Duration を返すものを見つけられなかった ので作りまし…