suguru.dev

バンクーバーで働くエンジニアの備忘録

tsyringeによる依存性の注入と循環参照との戦い

概要 tsyringeを弊社のプロジェクトに導入して2年くらい経ちました。このDIライブラリの導入により、 インターフェースによる依存性の注入 循環参照 の問題が発生し、多くのことを学ぶことができたのでいくつか紹介します。 今回はライブラリの基本的な使い…

Assert.Equal どっち派?

概要 Expectedは左なのか右なのか。 言語によって使い分けたいのでザックリ調べてみました。 Assert.Equal とは 言語によって細かい仕様は異なると思いますが、 引数に2つの値を取り、その値がマッチしているかをチェックする関数です。 その2つの値をよく…

NPMのパッケージの所有権を乗っ取られそうになった話

概要 ある日突然「あなたの所有するパッケージの所有権を取得するためにDispute Resolutionに従って申請を始めている」というメールをNPM経由で頂きました。 ビビりました。それをお断りするまでの軌跡です。 TL;DR メールきたら無視しちゃダメ はっきりと断…

Node.js + Github Private Registry

概要 Github Private Registryにより、プライベートなモジュールを簡単に作成することができるようになりました。 今回はGithub Actionsを用いてNPMモジュールをGithub Private registryに登録・利用する方法を紹介します。 モジュール化したいリポジトリの…

AST + Prettierで快適にコードを一括変換しよう

概要 この記事はQiita Node.js Advent Calendar 2019 5日の記事です。 「Node.jsのプロジェクトにTypeScriptを導入したい」 ちょうど去年の12月に面接で聞かれたことでした。 あなたならどう答えますか? 今回は面接のネタとしても使える、ASTとPrettierを利…

Unity Editor上でのVersion Controlの使い方 〜Perforce編〜

概要 UnityにはBuilt-inのVersionControlという関数があり、これを利用することでシェルコマンドを叩くこと無くGitやPerforceなどにCommit・Submitすることができます。 Unity Editor上からファイルを自動生成・削除、及びPerfoceに反映させるツールを作った…

FlatBuffers導入

概要 FlatBuffersを導入手順についての記事です。 FlatBufferとは FlatBuffersとはGoogle社が開発しているクロスプラットフォーム対応のシリアライゼーションライブラリです。主にゲームで使われることを目的として開発されています。Protocol Bufferに似て…

Serverless + AWS Lambda + API Gatewayのヘッダマッピング

概要 AWS Lambda上でリクエストヘッダの取得とレスポンスヘッダの追加をServerless上で設定する方法がわからなくハマったので、それについてまとめました。 リクエストヘッダのマッピング AWS Lambdaで生のリクエストヘッダを取得するためには、API Gateway…

Serverless + TypeScript + AWS Lambdaの開発環境構築

概要 Serverless FrameworkとはLambda関数などを開発・デプロイするためのツールです。今回はServerless + TypeScript + AWS Lamdbaのローカル開発環境の導入手順について書きます。 プロジェクトの作成 はじめにServerlessの環境構築をします。今回はAWS La…

MetabaseをElastic Beanstalkにデプロイする

概要 Metabaseを導入したので、それの手順についてまとめます。 Metabaseのデプロイ こちらのリンクからAWSにデプロイするボタンがあるのですが、うまく動かなかったため今回は手動でセットアップします。 まずはじめにElastic Beanstalkのサーバを構築しま…

VM moduleを利用してLambdaのような機能を提供する

概要 Express + VMモジュールを使用し、Lambdaのような機能を提供するサーバの構築方法、またVMの注意点についてまとめます。 vmとは VMとは同プロセス上で別のNodeスクリプトの実行をサポートするモジュールです。evalに似ていますが、Contextの値を外から…

Node.js with TypeScriptのCode Coverageを計測する

概要 Node.js with TypeScriptでcode coverageを計測できるようにしたので、その導入手順について書きます。 NYCのセットアップ はじめにNYCのセットアップします。 NYCとはIstanbulのコマンドラインツールで、Istanbulとはcode coverageを計測してくれるツ…

direnvを使ってgithubのアカウントを複数設定する

はじめに 仕事のGithubアカウントと個人のGithubアカウントが別のため、direnvを使用してディレクトリごとに別のアカウントを使用できるようにしました。 direnvとは direnvとはディレクトリごとに.envrcを設定することによりディレクトリごとに環境を変更す…

Async HooksとAsync Resourcesの導入

概要 この記事はNode.js Advent Calendar 2017 15日目の記事です。 カナダから非同期で失礼します。 Async hooksとはNode.jsの非同期イベントをトレースすることができるネイティブライブラリです。まだ試験段階なのでAPIが変わる可能性がありますが、Async …

Sidekiqのベストプラクティス

概要 Sidekiqのベストプラクティスに沿って、メッセージ機能を実装していきます。 0. Sidekiqとは Sidekiqとはbackgroundでタスクを処理してくれるライブラリです。日付指定でセットして実行したりもできます、便利そうです。 ベストプラクティスに沿ってWor…

ESLintのメソッドチェインのindentの設定について

概要 ESLintのメソッドチェイン(chain)のindentの設定に問題があり3 -> 4のアップグレードができなかったのですが、なんとか苦戦してなんとかアップグレードした話です。 もっといい方法知っている方いたら教えて欲しいです、ホントに。 問題のコード 例とし…

Perforce + Vim

概要 PerforceをVimで仲良くやっていくためのセットアップを考え中なのですが、特に良いライブラリもなく、はたまた需要もそこまで大きくなく… いったん作業ができるようvim-perforceとvimdiffのセットアップをしました。 vim-perforce ドキュメントによると…

Perforceのセットアップ for Mac

はじめに PerforceはSubversionのようなバージョン管理システムでbinaryの管理に向いているそうです。今回はp4vというツールとp4というコマンドラインツールを導入したのでそのセットアップ方法について書きます。 p4vのセットアップ こちらのリンクからmac…

Ruby on Railsのセットアップ

はじめに Rubyデビューしたので初心に戻ってその勉強記録を記して行きたいと思います。 手順は rbenv (バージョン管理システム) nokogiriのインストール Railsのインストール アプリの起動 です。 rbenvのインストール rbenvは最も有名なバージョン管理ツー…

classの継承についての考察

概要 ES6の継承が遅すぎると話題なので検証・最適化をしました。 どれくらい遅いのか こちらのベンチマークによると、少しずつ改善は見られるものの、2.3-17倍程度遅い様子です。 実際に検証しました。 Node v6.10.1 benchmark.js v2.1.4 継承 // classes fu…

Powerlineの導入

概要 Powerlineとはshell・vimにちょっとした情報をカッコよく表示してくれるツールです。何よりカッコいい。導入手順はこちらです。 Powerline for Shell まずはshellからカッコよくしていきます。はじめにpowerline-shellをクローンします。 $ cd ~ $ git …

AnyenvでGoのバージョン管理

概要 Anyenvとはこれ一つで色々なパッケージ管理ができるスグレモノのようです。今回はGolangまわりだけ整理していたので、Golangのセットアップ手順について書きます。 インストール まずはリポジトリをクローン。 $ git clone https://github.com/riywo/an…

Dockerのお掃除

概要 MBPの容量が圧迫しておりどうやら犯人はDocker for Macのようなのでお掃除していきます。 不要なコンテナの削除 Docker – Clean Up After Yourself! | Yohan Liyanage こちらのブログより。 exited containersは自動削除されないとのことで、こちらを実…

Node.jsで内部変数・関数の取得

概要 テストやちょっとしたツールを作りたいときに内部変数・関数にアクセスしたい時がありますが、 そんなときに便利なのがvmモジュールです。しかしvmではvarの変数は取得できるものの、letやconstの変数は取得できません。 そこで色々試行錯誤して作った…

Objective-CにおけるDate型の扱い

概要 なぜか最近仕事でObjective-Cを書いています。 サーバからmsのtimestampを受け取っているにも関わらず、時系列順に表示されなかったので調べてみました。 Types in Objective-C まずはじめにハマったのが、msはint型には収まりません。JavaScriptの住人…

Google Cloud Platform上にContainer Clusterを作成する

概要 Google Cloud PlatformのContainer Cluster(Kubernetes)のセットアップからデプロイまでの手順です。プロジェクトの作成手順は省略します。 Container Clusterの作成 メニューから [Container Engine] -> [Container Clusters] を開き、[CREATE CLUSTER…

Pokemon Goのちょっと得する情報

カナダで一足先にプレイしています。ポケモン効果はすごいです、家から基本出なかったカナディアンの友達が毎日外出してます。 さて色々損してきたのでさくっと箇条書きでまとめときます。 ピカチュウをゲットする 最初の三匹を選ばずに待っていると現れます…

GAEからCloud Storageに画像をアップロードする

はじめに Google App Engine (GAE)のGolangのAPI仕様がガラッと変わったようなので、古いバージョンを使っている方はここを参考に書き換えてください。 GitHub - golang/appengine: Go App Engine packages Goのversionは1.6.2を使用しています。 画像のアッ…

Image.Decodeでunknown formatになったときの対処法

Go

いまいち条件がわかりませんが、一度Decodeされたデータは再度Decodeしようとするとunknown formatになるようです。 Goのバージョンは1.6.2を使用しています。 依存ファイルは以下のとおりです。 import ( "bytes" "image" "image/gif" "image/jpeg" "image/…

Benchmark: Async vs Neo-Async

What is Neo-Async? Neo-Async is meant to be used as a drop-in replacement for the Async library. It implements the same API, and adds extra functionality. I have been trying to make it faster and safer than Async. https://github.com/suguru…