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開発に必要なアプリケーションがどう変わったか、良かった点・悪かった点・変わらない点を共有したいと思います。

【Rails】範囲オブジェクト(Range)を使ったActiveRecordのwhere比較、範囲検索のコードの書き方

ActiveRecordのwhere比較、範囲検索は、最近では範囲オブジェクト (Range (例: 10..30)) を使ってほとんど実装することができるようになっています。

【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)などのテンプレートプロジェクトを元にプロジェクトを作…

GitHub Actionsで実行中のworkflowを自動的にキャンセルする

時間単位で課金されるGithub Actionsです、新しいワークフローが実行された時、古いワークフローは自動キャンセルされるようにしてみました。2回連続でworkflowを動くと、古い方は自動的にキャンセルされます。

github actionsを使った electron アプリインストーラの自動ビルド (action-electron-builder)

Electronは、MacOSやWindowsといったマルチプラットフォームのデスクトップアプリを簡単に作れますが、複数プラットフォームのアプリを作れる分、ビルド/署名といった作業が手間になっていました。Github Actionsを使ってタグ付けした時にGithub releasesに…

RailsプロジェクトでVisual Studio Code Remote Container使ってみた

コンテナ内のファイルシステムを直接触れるVisual Studio Code Remote Containerを使い始めたのですが、手間を減らしつつも便利開発できていそうな感じがしています。 シンプルなRuby on railsアプリケーションを例に取って導入方法を紹介したいと思います。

【Golangスクレイピング】 Colly と goqueryを一緒に使うには

Golangでスクレイピングする時はとりあえずgoquery使っておけば良さそうーと思って、あまり別のライブラリを使おうとしてこなかった。けれど、高機能なスクレイピング用ライブラリでCollyというのがあって、スクレイピング処理の中でgoqueryのHTMLElementを…

Herokuで動いているGolangプロジェクトをDockerコンテナで動くように

前回の記事で、Herokuで動くようになったGolangプロジェクト(フレームワークはEcho)を今回Dockerコンテナで動くようにしてみました。 simple-minds-think-alike.hatenablog.com 前提 Dockerfileの作成 実行バイナリファイルを作るイメージ 変数ENV_CGO_ENABL…

Golang EchoプロジェクトをHerokuにデプロイしてみた (依存パッケージ管理: go module)

Go modulesが入って、GolangのHerokuへのデプロイがだいぶ簡単になっていたので、備忘録のためプロジェクトの作成から確認までの手順を書いておきます。 環境 前提 ローカルで動くまで プロジェクトディレクトリ作成 簡単なリクエストを受け付けるGolangのコ…

Zendesk widgetをマルチブランド対応せずに複数Webサイトで活用するためのカスタマイズ方法 (ヘルプセンターだけ消したい)

Webサイトを運用しているとユーザの抱えている課題を受け付けるためにも、お問い合わせ機能を作りたいという要望が出てますよね。 そうした時に 低予算で導入できる 導入が容易 といったメリットがあるZendeskを使うことが選択肢として挙がるかと思います。 …

Railsプロジェクトでvue.js + typescriptを使うためのts-loaderの設定

Webpacker gemを導入したRailsプロジェクトにtypescript+vue.jsを導入した時に調べたことのメモ記載しておきます。 TypeScript/vueのインストール/設定 Vue-loaderの動き PnpWebpackPlugin.tsLoaderOptionsについて Pnpとは? PnpWebpackPlugin.tsLoaderOptio…

Pull Requestがマージされた時に自動でブランチを削除するようにしてみた

GithubでPull Requestがマージされた後ブランチを毎回削除するのが面倒だったので、自動で削除されるようにしてみました。 また、Git-flow運用している場合、develop,stagingのようなブランチからPRを出す場合があるので、これらのブランチからPul lRequest…

Heroku SSL Endpoint から Automated Certificate Managementへ移行してみた

Herokuの公式ドキュメントを読むとSSLを導入する方法は Automated Certificate Management (ACM) Heroku SSL SSL Endpoint の3種類がありますが、Automated Certificate Management (ACM)にすると Let's EncryptのSSL証明書を自動更新してくれるので、手動更…

Rails権限管理ライブラリ cancancan gem バージョンアップ(2.x => 3.x)の際の対応と注意点

Ruby on rails の権限管理ライブラリの中で一番ダウンロード数が多いGemであるcancancanのv3.0が2019年4月にリリースされました。 仕事のプロジェクトで使っているcancancanのバージョンは随分前にv3.0に上げていたのですが、結構大きな変更が入っていること…

Rails bulk insertのパフォーマンス比較 (Railsのinsert_allとactiverecord-import)

Railsでbulk insertする方法は主に Rails6のinsert_all activerecord-import gemのimport の2つの方法があります。パフォーマンス観点では、どちらが良いのか知りたくて検証してみました。 activerecord-importに関しては、READMEを読む限り、いくつかimport…

Rails6アプリのデプロイ時にヘルスチェックに失敗した時にやったこと

先日、稼働しているRailsのWebアプリケーションをRails5.2から6.0に上げて本番デプロイしようとした際に、ヘルスチェックに失敗していてデプロイできない状態になっていたのですが、そのときに対応した内容を書いてみます。 何が起こったか まず、AWS EC2イ…

Rails と Firebase Authentication でJWT認証実装してみた

最近スマホアプリの開発は大体firebaseを使うようになっていて、認証もfirebase authenticationを使っておけば、実装がすごく楽になっていると感じます。 既にRuby on railsでwebアプリケーションを開発していて後からJWT認証を付けようとするとちょっと面倒…

Golangとginのリクエストハンドリングについて

最近仕事で使い始めた Golang ( net/http 標準ライブラリ)とWebフレームワーク Gin のリクエストハンドリングについてどのような仕組みで行っているのかをまとめてみます。 前提 Golang マルチプレクサとは goデフォルトのマルチプレクサ goカスタムのマルチ…

Kubernetesクラスタを作ってみた with ラズベリーパイ〜上品なファブリックケーブルを添えて〜

一家に一台Kubernetesクラスタの時代が到来したとちらほらと聞こえ始めてきたので、いまさらながらRaspberry PIでKubernetesクラスタを作ってみました。 Raspberry PIのKubernetesクラスタであれば、EKSのようなクラウドベンダーが提供しているサービスでは…