emahiro/b.log

日々の勉強の記録とか育児の記録とか。

2019-01-01から1年間の記事一覧

2019 - 振り返り

大晦日なので KPT で今年の振り返りをします。 ちなみに年始の目標はこちら。 ema-hiro.hatenablog.com Keep 登壇 これが今年は一番大きな出来事だったかなと思います。 社内勉強会、そして Go Conference と言う大きなカンファレンスで登壇しました。 20代…

ログを出力する車輪の再発明をしてみた

Go

Go の 標準の log パッケージ の実装をベースに自前で管理のログ出力部分を実装してみました。 やったこと Go の標準の log パッケージをベースにして自前でログを実装する機会があったので、そもそも log パッケージ内の実装を読んで見ようと思ったのがきっ…

node のバージョン管理に n を使い始めた

内容 nodebrew を辞めて n を使い始めた 理由 年末だし、開発周りに環境をアップデートしていたこと node-brew で管理すると、バージョンを切り替えるときに nodebrew を打つのがめんどくさい 割と仕事でもそこそこ頻繁に node のバージョンを切り替えること…

Go で n 番目の要素を削除する

Go

大した話じゃないんですけど、忘れてたので備忘録です。 strs := []string{"a", "b", "c", "d", "e"} // "c" を削除する。 idx := 2 strs = append(strs[:idx], strs[idx+1:]...) fmt.Println(strs) ref: https://play.golang.org/p/3QP4OXw2X0u

Go の httptest で立てたサーバーにアクセスする

Go

テストなどで実際にサーバーを立てずに、HTTP のリクエストをシミュレートしたいときに httptest を使いますが、この httptest で立てたダミーサーバーそのものアクセスする方法はないかを調べてみました。 Motivation あるテストをメンテしていた時に httpt…

Go で意図的に競合状態を発生させる

Go

Summary Go では concrrent map writes のような競合状態の可能性がある実装があるときに排他ロックをかける。 競合状態を回避するためのサンプルとしてロックをかける実装はたくさんインターネット上に情報が出てくるが、そもそも意図的に競合状態を作り出…

LINE Developer Day 2019 に参加して来た

linedevday.linecorp.com 今年も参加してきたので備忘録として感想をつらつらまとめます。 スライドは [こちら https://speakerdeck.com/line_devday2019] 感想 まず会場がすごい。グランドニッコーを二日間使うってどういうことだ。 僕は技術的なカンファレ…

リポジトリのオーナーを移行しました

Go

報告 以下のリポジトリのオーナーを移行しました。 https://github.com/emahiro/aelog -> https://github.com/DeNA/aelog https://github.com/emahiro/aehcl -> https://github.com/DeNA/aehcl App Engine の 2nd Gen 移行のために業務で作っていたものです。…

App Engine Logger の更新

Overview 以前作成した ae-plain-logger を aelog としてパッケージ名を変更した。 github.com Motivation emahiro/aehcl とシリーズものとして合わせたかった。 ローカルだと JSON じゃなくてテキスト出力できた方が便利とコメントもらった。 Testable Exam…

解決済み: net/http.Header の Clone の実装についての疑問点

Go

net/http の Header の Clone の実装について調べる機会があったので、そこで気になったことをまとめました。 net/http.Header の cloneHeader の実装 本家の Clone の処理は以下 // Clone returns a copy of h. func (h Header) Clone() Header { // Find t…

glc(go local cache) というライブラリを作りました

Go

[]byte でローカルにキャッシュを保存する glc (go local cache) というライブラリを作ってみました。 Motivation APIのレスポンスやそんなに頻繁に更新しないデータを一定時間ローカルにキャッシュとして持っておきたいケースは多いと思います。 Go であれ…

Cloud Run を使う

別に目新しいこともないですが、Cloud Run の走りだけ使ってみたので雑な備忘録。 Docker image を用意して gcr に上げる 起動したい Docker image を作成して gcr.io に上げておきます。 Cloud Run を起動するときは gcr.io 上に上がっている image のみ選…

Github Actions (β) を使う

Github Actions (β) がリリースされていたので、せっかくなので自分が現在作成しているプロジェクトをネタに Github Actions の設定を行ってみました。 まずはβに参加する help ページから Github Actions に参加します。 https://help.github.com/ja/articl…

GoogleCloudSDK アップデート後に aetest でインスタンスの起動失敗時の対処

2019/10/09 Google Cloud SDK を v266.0.0 に更新すると aetestの更新せずとも直ります。 2019/10/08 google.golang.org/appengine を最新版にすると本問題は解決します。 ※詳しくは下部の追記参照 Google Cloud SDK を最新版にアップデートした際に aetest …

Struct tag の記法を編集する

Go の struct tag の記法を編集する方法を記載します。 IntelliJ と VSCode の2つでの設定方法を記載しました。 VSCode https://github.com/fatih/gomodifytagsを使います。 これは VSCode に限らず各種 Editor 向けにに Go の Struct tag の自動生成機能を…

ソースコードビューについて考えていること

最近、とある機会にソースコードレビューについて質問されたので、考えてること、意識していることをまとめてみました。 なお、これは私自身の考えていることで人によって異なるところは多いと思いますので一個人のお気持ち表明として読んでもらえればと思い…

git subtree コマンドを使う

Git

git subtree という便利なコマンドを教えてもらいました。 submodule と異なり、取りこむ外部リポジトリのコミットも取り込み元のリポジトリの commit に入れるので、取り込んだリポジトリの編集を commit に含めることが可能です。 How to use help コマン…

IntelliJ から VSCode に移行してみる

もともと JetBrains に魂を売っていた人間なのですが、最近4Kの外部ディスプレイに繋ぐとよく固まってしまってキーボード入力に遅延が発生して体験が圧倒的に不安定になってきているので、これを機に VSCode に乗りかえました。 普段は Go を書いているので…

go get でインストールするツール群を最新にする

Go

goimports, gopls などの go get で入れたツール群を最新版にアップデートする方法 # ツールごとに最新版にする go get -u golang.org/x/tools/cmd/goimports # cmd で使えるツール群を一括で最新版にする go get -u golang.org/x/tools/cmd/... # いっその…

slice 操作や検証のあれこれ

Go

ある slice の操作や検証をするときにスッキリ書く方法を教えてもらったので備忘録。 ※ 随時更新(忘れて新しくエントリ書くこともあるかも) 重複する要素を持つ slice を弾きたいとき func duplicate(arr []string) bool { base := map[string]int{} for _,…

Go で書いた OSS を公開するまでの備忘録

以下のエントリで触れてますが、GitHubにOSSを公開したときの手順を備忘録として記録します。 github.com 手順 GitHubに公開用のリポジトリを作成し、コードをPushする LICENCE を設定する ciを連携する Go Report Card を登録する Godocを書く GitHubに公開…

GAE/Go1.12 において構造化ログを出力する

App Engine 2nd Generation で構造化ログを出力するための ae-plain-logger というライブラリを作成しました。 github.com aelog とは? ログエントリを json ペイロードとして標準出力に出力します。この時 traceID と spanID をログエントリに含めることで…

勤続2年の経過報告

7月も終わって現所属に異動(転籍)してきてから2年と1ヵ月が経ったので勤続エントリを書いてみます。 (これもいつまで続くかな...笑) 去年のエントリは以下 ema-hiro.hatenablog.com 目次 2年終わって 技術スタック的なあれこれ チャレンジしたこと 次の一年…

Intellij で自動 import 折り畳みをoffる

Go で import 順を揃えたい(standard -> 3rd -> local の順)のに、intellij でファイルを開くと最初から自動で import が折りたたまれてて、レビューでフィードバックされるまで気づかないことがよくあったのでその設定方法を off にする方法がないか調べま…

CircleCIの高速化ログ ~キャッシュ先を変更する~

ema-hiro.hatenablog.com これの追記です。 ディレクトリ構造を変更した時に save_cache ディレクティブで新しいキャッシュ先を指定しても restore_cache で新しいキャッシュ先ではなく古いキャッシュが利用されてしまうケースがあってハマってました。 結果…

IntelliJを CLI から起動する ~ Tool Box篇 ~

ema-hiro.hatenablog.com 以前このエントリーを書いたのですが、ここ最近 JetBrains の Tool Box を使い始めたときに従来の方法で Command Line Tool が作れなくなっていたので、再度作成するための手順を記載します。 手順 IntelliJから作成する Tool > Cre…

fish をリロードする

通常 $cd | . ./config/fish/config.fish GitHub - oh-my-fish/oh-my-fish: The Fish Shell Framework を使っているとき $omf reload 以上

Go Conference 2019 Spring に登壇者として参加してきました

Go Conference 2019 Spring - Gocon に登壇者として参加してきました。 登壇の詳細は以下になります。 タイトル: 「Go1.9 で作られた App Engine のサービスを Go1.11 に移行した話」 登壇資料 speakerdeck.com こういった大きなカンファレンスで発表するの…

メモリアロケーションなしで slice をフィルタする

Go

令和最初のエントリです。 連休前に教えてもらったことについてまとめました。 このエントリに記載する内容については、github の SliceTricks · golang/go Wiki · GitHub に記載されてる内容になります。 go の sliceについて go の slice はポインタ型です…

MicroServices本3兄弟を読んで考えたこと

平成最後のエントリです。(ギリギリ間に合った...) 10連休中の目標であった『進化的アーキテクチャ』を読み切ることができたので備忘録を残します。 ※ 僕は別に設計について明るいわけでもマイクロサービスについて明るいわけでもありません。 サマリ 『マク…