Carpe Diem

備忘録

Terraformで過去に作ったリソースを別ディレクトリに分けたい

概要

Terraformを使う上で、DBなどのデータ系のリソースはそうそう変更することはないので、オペミスなどを防ぐために別ディレクトリに分けておくと安心です。
しかし既に作ってしまっていた場合、*.tfとともにその部分のterraform.tfstateを移動しなくてはいけないですが、手動でterraform.tfstateをいじるのは非常に大変です。
そこで使えるのがstate mvというコマンドです。

環境

  • Terraform 0.10.2
続きを読む

AngularのInjectorとProviderとDependencyの関係

概要

過去の記事で

christina04.hatenablog.com

を書いた時に、AngularのInjectorProviderDependencyの関係を理解していないとよく分からないと思ったので追記的にまとめます。

環境

  • Angular 4.3.5

覚え方

結論から言うと、以下のように考えるとすっきりします。

項目 役割
Injector 料理人
Provider レシピ
Dependency 料理
続きを読む

Scratch imageでtime: missing Location

概要

以前以下の記事でscratch imageの作成方法を紹介しました。

christina04.hatenablog.com

しかしGoのコードによっては以下のpanicが起きることがあります。

panic: time: missing Location in call to Time.In

今回はその対応方法です。

環境

  • golang 1.8.3
  • docker 17.06.0-ce
続きを読む

BehaviorSubjectでAPIの結果をキャッシュ

概要

クライアントからのAPIコールは可能であれば避けた方がサーバの負荷も下がり、ユーザの体感速度も上がります。
1度取得すればほぼ変わらないデータなどは、最初にAPIコールした後はできれば避けたいです。
一方でcookieやlocalstorageで管理するほどでもない、というときはBehaviorSubjectを利用します。

環境

  • Angular 4.3.4
  • rxjs 5.4.2

BehaviorSubjectとは

基本的な動作

BehaviorSubjectの大きな特徴は直前にonNextで渡された値を保持し、subscribe()getValue()するとその保持していた値を取得できるところです。

f:id:quoll00:20170812194105p:plain

ref: ReactiveX - Subject

続きを読む

ScratchイメージでGoアプリの超軽量イメージをビルド

概要

Alpineベースのイメージが軽量イメージとして認知されていますが、Goの場合は単一バイナリで動くのでイメージ内にgolangが入っている必要はありません。
なので最も軽量と言われているScratch imageを利用することで、dockerイメージを軽量化することができます。

環境

  • golang 1.8.3
  • Docker 17.06.0-ce

ビルド手順

対象ファイル

以下のファイルを扱うことにします。

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

func main() {
    resp, err := http.Get("https://google.com")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(len(body))
}
続きを読む

AngularのHttpClientModuleの使い方

概要

Angular 4.3からこれまでのHttpModuleに代わってより軽量かつ使いやすいHttpClientModuleと言うものが出てきました。
今回はその移行作業を書きます。

環境

  • Angular 4.3.1
  • angular-cli 1.2.3

成果物

今回の成果物は以下です。 github.com

続きを読む

delveでGoのデバッグ

概要

Goでデバッグをする際にdelveというツールがオススメです。

環境

  • golang v1.8.3
  • delve 1.0.0-rc.1

インストール

brewでもインストールできますが、単体テストの実行の際に上手く動かないことがあったのでgo getの方をオススメします。

$ xcode-select --install
$ go get -u github.com/derekparker/delve/cmd/dlv
続きを読む