2022.03.08 WEBシステム開発 安全性、速度、並行性を兼ね備えた言語と、巷でうわさの「Rust」を覗いてみる(その1) 今回は巷で話題になっている言語「Rust」を覗いていきたいと思います。 私が業務に利用している言語はGoです。 Goはガベージコレクション(以下、GC)があるのですが、RustはGCがありません。 GCのおかげで安全にメモリを利用できるわけですが、RustはGCが無くても安全にメモリを利用できるら [...]
2022.02.22 WEBシステム開発 【Go】go.modのreplaceでローカルのモジュールを参照する goで複数のモジュールを組み合わせて機能を実装する場合にgo.modでモジュールをimportして使うのですが、importしたモジュール側に実際にどんな値が渡されてきているのかを調べたい場合にモジュールにデバッグコードを追加してpushし、利用側で変更したモジュールを更新する必要があります。 1 [...]
2022.01.28 WEBシステム開発 Chromatic で Visual Regression Testingを導入する方法 Visual Regression Testing とは 日本語で画像回帰テストといい、画像の差分を検出するスナップショットテストの一つです。 このテストを導入する理由は改修による予期せぬ UI の崩れを見つけることです。 今回は、Storybook用のツール「Chromatic」で Visual [...]
2022.01.28 WEBシステム開発 「Git」の基本を押さえて、実務で使えるようになるまで(基本編) 弊社ソリューション事業部では、ほとんど全ての案件でgitを導入してプロジェクトの管理をしております。そこでエンジニア歴間もない筆者が、具体的に実務ではどのように使っているかをお伝えしたく、この記事を書きました。 gitが便利なのは知っていて使ってみたいけど、具体的にどうやって使えばいいのか、また実 [...]
2022.01.21 WEBシステム開発 今話題のPHPフレームワーク「Laravel」を使ってみた(準備編) GoogleTrendsで最近のPHPフレームワークの動向を調べるてみると、目に見えて「Laravel」が群を抜いて上昇しています。 引用:GoogleTrends 弊社ソリューション事業部では主にCodeIgniter3やSymfony、Slim4などのフレームワークを用いてPHP開発を行ってき [...]
2021.12.24 WEBシステム開発 goroutineでmapにアクセスするときは排他制御をしよう Goではgoroutineを使って簡単に並行処理を書けますが、何気ないところでエラーが発生してしまうことが(筆者は)度々あります。 さらに偶然にも正常に処理が完了し、何回かに1回しか失敗しないケースの場合、なかなか気付かないこともあります。 今回はmapの競合で発生したエラーと、エラーを起こさない [...]
2021.12.15 WEBシステム開発 goでHTTPリクエストボディのサイズを制限する「MaxBytesReader」 webアプリケーションを作成していると、ユーザが誤って、もしくは悪意を持って巨大なリクエストを送ってくる場合があります。 何も対応しないとリクエストを受け付けてしまい、アプリケーションが不安定になったり無駄にメモリを確保してしまいます。 そこで今回はgoでHTTPのリクエストボディを制限するMax [...]
2021.12.08 WEBシステム開発 database/sqlのrowsのメモリ量を調査する 今回はGoの「database/sql」を使って、結果が大きいクエリを発行したときにヒープのメモリ量を見ていきたいと思います。 INDEX検証理由準備実際に動かしてメモリを計測するまとめ 検証理由 多くの場合LimitとOffsetを指定するのですが、大量の結果が返されるときに row [...]
2021.11.26 WEBシステム開発 React18 beta の新機能を紹介する【Automatic Batching (自動バッチ処理)編】 最近 React18beta がリリースされました。今回は、React18 で追加される大きな新機能の中から「Automatic Batching(自動バッチ処理)」についてご紹介します。 INDEXReact18 の新機能インストールAutomaticBatching(自動バッチ処理)を検証バ [...]
2021.11.08 WEBシステム開発 Reactのprops drilling(バケツリレー)とhooksに我々はどう立ち向かっていけばよいのか 最近Reactに入門しました。 アプリケーションの規模が大きくなってくると問題になってくる一つにprops drilling(バケツリレー)と呼ばれるものがあります。 今回はprops drilling(バケツリレー)が“つらい”と思ってから、どのように立ち向かっていったのか一例をご紹介します。 [...]
2021.10.17 WEBシステム開発 【Go言語】jsonデータをstreamで扱うEncoder、Decoder型を試してみる goのjsonパッケージには、jsonデータをstreamで扱うEncoder、Decoder型があります。 今回はこのEncoder、Decoderについて紹介します。 INDEXEncoderの定義Encoderの使い方Decoderの定義Decoderの使い方さいごに Encoderの定義 [...]
2021.10.08 WEBシステム開発 goroutineリークを排除して安全に並行処理を行う方法 goroutineはgoキーワードを関数の前に書くことで簡単に起動することができます。 しかしながら、goroutineはランタイムによってガベージコレクションされないため、正常に終了させていない場合はリークしていきます。 野放しになったgoroutineたちによってプロセスごと停止にならないよう [...]
2021.10.07 WEBシステム開発 Golangでデッドロックを作って遊んでみる~並行処理でデッドロックを起こさないために~ Goではgoroutineと呼ばれるGoで管理された軽量なスレッドを使って、並行処理を書くことができます。 手軽に並行処理を書けるところがGoの魅力の一つだと思いますが、並行処理ならではの問題が発生することがあります。 今回は起こりやすい問題の一つである「デッドロック」で遊んでみたいと思います。 [...]
2021.09.30 WEBシステム開発 React-transition-groupでモーダルアニメーションを実装する! ReactでCSSアニメーションを扱うためのライブラリを紹介していきます。 INDEXReact-transition-groupとはインストールモーダルを実装まとめ React-transition-groupとは アニメーションそのものを提供しているのではなく、CSSをDOMに反映するタイミ [...]
2021.09.22 WEBシステム開発 コマンド一発でソースコードを本環境に!PHP製のDeployツール「Deployer」を使ってみた 本番環境へのソースコードのDeployにも色々な方法があります。 FTPクライアントを用いてアップロード lftpコマンドを用いてアップロード GitHub等のサービスを介して本環境でclone GitHubActionsを用いてアップロード 等々… 弊社ではセキュリティ等の関係 [...]
2021.09.09 WEBシステム開発 Windowsで至高のターミナル生活を求めて(番外編:ArchLinux on WSL2) 以前の記事「Windowsで至高のターミナル生活を求めて(Windows Terminal編)」 ではWindows Terminal + Ubuntu-20.04 on WSL2をご紹介しました。 Ubuntu-20.04もとてもいいLinuxディストリビューションだと思いますが、MSYS2を使 [...]
2021.08.19 WEBシステム開発 goでデータ形式を識別するためのMIMEタイプを判定する方法 業務でアップロードされた画像ファイルのMIMEタイプを判別する必要があったので調査しました。 INDEXhttpパッケージのDetectContentType説明動作のサンプルファイルを読み込んでMIME判別さいごに httpパッケージのDetectContentType 調べてみるとgoのht [...]