【Golang】UniPDFでPDFファイルにデジタル署名する

PDFファイルにデジタル署名ができるGo言語のライブラリ( UniPDF )を使ってみました。 今年(2021年)4月頃に従量課金プランにフリー層ができたとブログ記事に掲載があり、月100件は無料で使える状態になったようです。 以下の公式のブログ記事を参考にやってみ…

【Github actions】DependabotのPull RequestでSecretsが参照できずワークフローがFailになった場合の対処

Dependabot のPull Request(以下PR)が作られた際に開始したGithub Actionsワークフローが Secrets を参照できずに失敗していたので原因を調べてみました。 2021/3/1から適用になった以下のUpdateが影響していて、 Dependabot から実行される Github Actions…

DockerイメージをAmazon ECRパブリックレジストリで公開してみた

2020年12月にリリースが発表されたAmazon ECRのパブリックレジストリを試したくて、 cawsay (牛(cow)に喋らせる(say)というジョークコマンド) を実行するだけのDockerファイルをビルドしてイメージを公開してみました。手順を共有してみたいと思います。 以…

【Golang】共有された変数を平行的に安全するには(単一のゴルーチンに閉じ込める、相互排他)

「プログラミング言語Go」オンライン読書会で学んだ第9章「共有された変数による平行性」に関して共有したいと思います。 並行的に安全(concurrency-safe)とは 実装 並行的に安全ではない理由 対処方法 変数を単一のゴルーチンに閉じ込める 相互排他(mutual …

【Golang】apitest でEchoを使ったREST APIのテストを書く

apitestとは GoのAPIテスティング用のライブラリの1つです。 github.com apitestは シンプルな記法 GraphQLのテストも書ける 外部APIコールをモックできる ドキュメントがしっかりしている という特徴があり、個人的に好きでAPIのテスト書くのに使っています…

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces が発生した時の対処

先日、 mysqldump でAWS RDSインスタンス(aurora)に繋いでデータをdumpしようとしたら、見たことがないErrorが発生していたので調べました。 mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' w…

【Golang】Github actionsでカバレッジを取得しCodecovにアップロードする

Go言語で作ったアプリケーションのGithubリポジトリでGithub actionsワークフローを設定し、 codecov にカバレッジを送る設定方法を紹介したいと思います。 codecov は、テストのコードカバレッジを取得してくれるツールです。テストスイートを実行した時に…

【Golang】go-sqlmock でGorm を使ったアプリケーションのテストを書く

go-sqlmock を使ったことがなかったので、Gormを使ってデータベースにアクセスするアプリケーションをテストするコードを書いてみました。 go-sqlmock の READMEに sqlmock is a mock library implementing sql/driver. Which has one and only purpose - to…

【Golang】testingパッケージのError/ErrorfとFatal/Fatalfの違い

Golangのプログラムのテストを書く際、 testingパッケージ の関数 Error / Errorf と Fatal / Fatalf の違いが分からなくなる時があるので整理してみました。 まとめの表 Error / Errorf / Fatal / Fatalf は簡易関数で、以下の ログ出力の処理(Log、Logf) F…

【Golang】ビルドしたバイナリのバージョン情報を表示、コマンドラインオプションを受け取るには (flag, spf13/pflag パッケージ)

本番環境にデプロイしたビルド済のバイナリのバージョンを確認したいことがあります。 また、開発環境で使うちょっとしたツールを作る場合、ほとんどの場合いくつかのコマンドラインオプションを受け取れるようにしたいです。 これらのバージョン表示、コマ…

【Golang】GitHubのOSSをフォークしてPull Requestを送ってみた

pdfcpu という golang で書かれたコマンドラインツールを使って、複数のPDFファイルを1つにまとめるという作業をたまに行っているのですが、ふとOSSだしPRを送ってみようかと思い立ったのでやってみました。 github.com Pull Requestの内容 まずは簡単なPull…

Linuxマシンでgit(github)のコミットにGPG署名をする

コミットに署名が求められるOSSにPRを送りたくて、Linuxマシンのローカル環境で gpg 署名付きコミットできるようにしてみたので、手順を残しておきます。 貢献したいOSSのREADME.mdやCONTRIBUTING.md等に sign your commit のように記載がある場合にgpg 署名…

【Golang】cobraで作ったコマンドラインツール(CLI)にフラグを追加する (pflag)

cobra の中のフラグの実装はspf13/pflagという cobra と同じ方が作られている別のライブラリが使われています。このライブラリは標準の flag パッケージと似ているので、使ったことある方は使用感に違和感は感じないかと思います。 以下の記事で作った簡単な…

【Golang】cobraでコマンドラインツール(CLI)を作る

Go言語でコマンドラインツール(CLI)を作る際cobraというライブラリを使うと、ヘルプや設定ファイルの読み込みなど一般的な機能を持ったCLIを簡単に作れるようになっていて便利です。 kubernetesのkubectl docker/cli Github CLI hugo といった様々なツールが…

【Rails】sqlcommenterのデモアプリを試してみた

先日2021/1/29にGoogle Cloudのブログでリリースが発表されたSqlcommenterのRuby on Railsデモアプリを触ってみたので、試した手順と感想を書いてみたいと思います。 cloud.google.com sqlcommenterとは sqlcommenter の文章を引用すると sqlcommenter is a …

Go Language Specification 輪読会の感想と学んだこと(型アサーション、スライス式)

先日、初めてGo Language Specification 輪読会 (#14) 2021/1/27開催に参加した感想と、型アサーションとスライス式に関して学んだことを書いてみたいと思います。 Go Language Specification 輪読会に参加した感想 The Go Programming Language Specificati…

【Golang】ポインタの値で把握するスライスの挙動 ( スライス式 / copy / append ) について

前回のスライスと配列の特徴、違いについての記事に引き続き、今回はスライスの様々な操作の挙動に関して整理していきます。 simple-minds-think-alike.hatenablog.com 新しいメモリ領域の確保は比較的重い処理なので、できるだけ行われないように工夫してプ…

【Golang】スライスと配列の特徴、違いについて

スライスはGo言語の中でもっとも利用されるデータ構造だと思いますが、挙動が複雑で仕様を把握するのが難しく、利用頻度が高いがゆえによく分からず使っているとパフォーマンスの低下を招き易い機能と言えるかと思います。 スライス及び配列の特徴を把握する…

【Golang】正規表現チェックツールRegoについて

Go言語で正規表現のコードを書く際に、どういう表現ができるんだっけ?と思う時がありますよね。 Ruby(Ruby on Rails)の正規表現のコードを書く際はRubularというツールを使う方は多いと思いますが、Golangでも同じようなRegoという正規表現チェックツールが…

Webサイトクローラー(スクレイピング)の目的・メリット、適切な設定とは

とあるWebサイトクローラーを開発していて、クローラーにとって適切な設定にしたいと考えることがありました。 クローラーの設定のように、選択肢が複数あり複雑なものは判断が難しくなります。そのようなものは、まず考えるための観点(例えば、セキュリティ…

【Golang】migrateでDBマイグレーションをする

go言語で実装したWebアプリケーションサイトのDBマイグレーションツールとしてgolang-migrate/migrateを使っていて、そこそこ便利につかえているので紹介してみたいと思います。 migrateを使うメリット migrateを使うことにした背景 環境/前提 インストール …

Goのインタフェースを使って、共通のメソッド・属性を持つ構造体を作る

以前Goで開発をしている時に、インタフェースと構造体の理解が曖昧でハマることがあったので、理解を深めるためのサンプルコードを書いてみました。 要件 サンプルコードは、掃除機の共通のインタフェース(操作) ①電源を入れる(TrunOn) ②電源を切る(TrunOf…

PostgreSQL10 から PostgreSQL12 へのアップグレード手順(pg_upgrade)

古いPostgreSQLのバージョンがインストールされている開発マシンがあったので、pg_upgradeの公式ドキュメントを参考に、PostgreSQL10.15 から PostgreSQL12.5 に移行してみました。 ドキュメントに よると pg_upgradeは8.4.X以降から現時点のPostgreSQLのメ…

【React hooks】"Warning: Can't perform a React state update on an unmounted component."の止め方

React hooksで実装したSPAアプリをChromeで動かした際に、以下のWarningが表示されていたので対処してみました。 Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your applic…

DockerのRootless modeで、rootユーザ以外でデーモンを実行してみた

Docker 19.03(2019年7月リリース)で入った機能の1つであるRootless modeを触ってみました。 Rootless モード(Rootless mode)は Docker デーモンとコンテナを root 以外のユーザが実行できるようにするもので、デーモンやコンテナ・ランタイムにおける潜…

Github ActionsでGolangプロジェクトをHerokuに自動デプロイしてみた

前々回、前回の記事でHerokuでGolangプロジェクトを動かすのと、Heroku Container RegistoryにDockerイメージをPushし、web dynoにリリースするというのをやりました。 今回は、Github Actionsを使ってHerokuに自動デプロイしてみます。 simple-minds-think-…

Docker イメージのレイヤーの概念とファイルの整理

Docker イメージのレイヤーの理解を深めるために、Dockerホストのコンソール上で牛にMooと言わせるだけのコンテナを動かし、そのコンテナを例にとってDockerイメージのレイヤーの状態を整理してみました。 いまいちDockerイメージのレイヤーの概念がよく分か…

【トラブルシューティング】Docker (daemon) の手動起動、デバッグ・ログ出力に関して調べてみた

Dockerのトラブルシューティングがうまくできるようになりたいと思い docker daemonの手動起動 systemdで自動起動しない場合の確認手段 docker daemonのログ出力 docker daemonで発生したエラーの確認手段 docker daemonの強制スタックトレース出力 daemonの…

【node-sass】 nodeバージョンを上げた時に発生したError: Can't find Python executable "python", you can set the PYTHON env variable.の直し方

最近触っていなかったReactアプリを久しぶりにheroku (Container Registry) 環境にデプロイしようとしたら、Dockerfileのreact-scripts buildを実行している箇所で、以下のエラーが発生するようになっていた。 remote: npm ERR! gyp verb check python check…

AWSのEC2 macインスタンスにVNCクライアントから接続してみた

re:Invent 2020の前夜祭でAmazon EC2 Mac Instancesが公開されたということを聞き、iOS用アプリを開発する時とかに便利そうだな〜と思い、試しに触ってみました。最後に使用感に関しても書いてますので、よかったら参考にしてみて下さい! 試すにあたって、…