Simple minds think alike

より多くの可能性を

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

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

【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という正規表現チェックツールが…

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

Go言語で実装したWebアプリケーションサイトのDBマイグレーションツールとしてgolang-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を実行している箇所で、以下のエラーが発生するようになっていました。

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

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

CDNを用いたWebアプリケーションの画像のキャッシュについて

最近、CDNを用いたWebアプリケーションにおけるデータの持ち方やCDN等の画像ファイルのキャッシュの設定に関して、どのようにすると最適になるかな、と悩む機会がありました。そして、データの設計やCDN、オリジンサーバー等のキャッシュの設定は多岐に渡り…

Reactコンポーネントをうまく分割するためのテクニック〜カリー化〜

大きくなってしまったReactコンポーネントを小さく分割するにはカリー化が効果的だと感じています。 少しずつ機能を足していったら大きくなってしまって、次第に分割するのが怖くなってしまった そもそも、どう分割したら良いのか分からない というのが、コ…

Github Profileに活動状況、よく使っている言語を載せる(github-profile-summary-cards)

Github上での活動状況、よく使っている言語等をGithub Profileに入れて、セルフブランディングに役立てるようになりました。 得意な技術ややりたいことが、社内外のアピールできるとやっていて楽しい仕事に繋がるかもしれません。 自動的にGithubの活動状況…

【Electron】SpectronでメニューのE2Eテストをする

Electronアプリをバージョンアップした時やリファクタリングした時に動かなくなってしまう恐れがあるので、SpectronでメニューのE2Eテストを書いてみました。 ElectronのテスティングフレームワークSpectronはメニューのテストをする機能はないので、spectro…

【Electron】Circle CIでSpectronのE2Eテストを動くように

先日Circle CIのチュートリアルに「Automated testing with continuous integration for Electron applications」という記事が追加されていたのでやってみました。 ちょっと前にGithub ActionsでSpectronのE2Eテストを自動で動かせるようにならないか試して…

【Electron】remote moduleがdeprecatedになっている背景

Electron 10.0.0が先日リリースされて、remote module がデフォルトで無効になりました。 バージョンを上げた時に、一部機能が動かなくなる場合など出てくると思いますので そもそもremote moduleとは なぜ remote module を使うとよくないのか を整理してみ…

Sentryのエラー通知メールの設定変更方法

Webサービスを運用しているとエラーが来ますが、適切に設定していないと以下のような原因で通知メールが多くなり、見逃してしまうことがよくあります。 関わりがないプロジェクトのメールも飛んできて、重要な通知が埋もれてしまう 同じエラーが何度も飛んで…

【Ruby,Rails】Blazer gemで年月、年月日(Date)を選択するクエリを作り、時系列で指標を把握できるように

RailsアプリケーションのWebサービスを運用・改善するに当たって様々な指標を把握するために、blazerやadhoqといったgemを追加し、SQL集計ダッシュボードを作っています。 特に年月日を絞り込みの条件に入れると時系列の変化を観測し、サービス改善に役にた…

Github actions (image-actions)でWebサイトの画像を常に適切な圧縮サイズに保つ

サイトの画像を変えたりしているうちに気がつかないうちにサイズが大きい画像ファイルが混じっているってことありますよね。サイト表示のパフォーマンスが落ち、離脱に繋がりそうなので避けたいと思っていました。 最近、Githubで管理している画像を自動的に…

nockでHTTP Request (axis)をモックしてjestでテストみた

Webアプリケーションのフロントエンドのテストを書く場合など、APIへのHTTPリクエストをモックしてテストしたい時 nock を使うとスッキリ書けて便利です。nock を読み込むと http.ClientRequestをオーバーライドしてくれて、リクエストに割り込み、特定のリ…

Web開発マシンをMacbook ProからThinkpad X1 Carbon(OS: Ubuntu)に変えてから2年が経ったので感想を書いてみる

MacからUbuntuへの移行の背景や移行に関して、Web開発に必要なアプリケーションがどう変わったか、良かった点・悪かった点・変わらない点を共有したいと思います。

【SQL】limitを使わずグループ毎に先頭N件を取得する

グループ毎に先頭N件を取得したいとき、MySQLやAuroraなどWindow関数が使えない場合のGROUP_CONCAT, FIND_IN_SETを使った書き方を紹介します。

【HTML5】1つのフォームに複数のSubmitボタンをつけるには(formaction, formmethod)

HTML5で に追加された formaction, formmethod プロパティの使い方を紹介します。各ブラウザの対応状況も良い感じです。

Webpackを使っているElectronアプリにSentry導入してみた

ElectronアプリにSentryを導入し、エラーの詳細を把握できるようにしてみました。 Webpackの設定手順が煩雑なので実際のプロジェクトでは electron-webpack (Doc) や electron-react-boilerplate (Doc)などのテンプレートプロジェクトを元にプロジェクトを作…