goenvを使うのをやめた

Goを書き始めた当初からずっとgoenvを使っていましたが、Gophers Slackを見ているとgoenvを使わずにGoをインストールしている人が多い印象を受けたのでgoenvから脱却してみました。

以下、メモ書きとして残します。

1. go getしてくる

$ go get golang.org/dl/go1.12.15

2. go1.12.15コマンドが使えるようになったのでdownloadする

$ go1.12.15 download

3. シンボリックリンクを作成してgoコマンドが使えるようにする

$ ln -s $GOPATH/bin/go1.12.15 /usr/local/bin/go

これだけでgoenvから脱却できました。

2019年買ってよかったもの

今年買ってよかったものを記録として残します。

Soundcore Liberty Air

rebuild.fm で紹介されていたので買ってみました。
値段も手頃で、半年くらい使っていました。

LG 27インチ 4K モニター

会社で4Kモニターを使っていると、家でフルHDのモニターを使うのが辛くなってきたので買いました。
LGのモニターはType-Cのケーブル1本で繋げられて給電もできるタイプもありますが、予算オーバーだったので安いのを。
モニターアームを付ける予定だったので、ピボット・高さ調整のできないタイプです。
モニター自体は満足しています。

モニターアーム

YouTubeで紹介されているのを見て買いました。
USBポートがアームに付いているのが地味に便利です。
モニターの下のスペースを有効に活用できていいですね。

www.instagram.com

PS4

LGのモニターに繋げて使っています。 買ったらゲームするようになるかと思いましたが、週に1回やるかどうかといったところですね。

WH-1000XM3

SONYノイズキャンセリングヘッドホンです。
ノイズキャンセリングの製品を買うのが初めてだったので、こんなにも快適なのかと驚きました。
長時間つけていても疲れないのがいいですね。充電はノイキャンONの状態で30時間持つみたいなので、長距離の移動時にはいいかもしれないです。 家やカフェで作業するときに使っていますが、たまに会社でも使っています。

ケーブルオーガナイザー

デスク周りのコードをスッキリさせるために、デスクの天板のに取り付けています。

WF-1000XM3

完全ワイヤレスのノイズキャンセリングイヤホンがSONYから出たので Soundcore Liberty Air から乗り換えました。
最初はとても気に入っていたのですが、微妙な部分が数箇所あり小さなストレスが溜まる感じがありました。
WH-1000XM3 がよかっただけに期待値高めでしたが、少々残念でした。

自作PC

Linux デスクトップのPCが欲しくて買いました。 ベアボーン自作PC初心者でも簡単に組み立てることができるのでオススメです。
5万円台でメモリ32GBのPCができたのは満足しています。
詳細はこちらで紹介しています。

inari111.hatenablog.com

マネークリップ

友人の結婚式でスーツを着る機会があったので、ポケットを膨らませないために買ってみました。
カード5枚 + お札 という最小限なので、ポケットに入れても目立たなくてお気に入りです。 普段は二つ折りの財布を使用していますが、荷物を少なくしたいときに使っています。
マネークリップ、iPhone、イヤホンだけをもって外出することが増えました。 カズさんの動画を見たのが決め手になりました。

www.youtube.com

iPhone11 Pro

iPhone X から乗り換えました。
買い換えるつもりなかったのですが、気づいたら予約していました。
Apple製品ってそういうものですよね。
iPhone X と Pixel3 の2台持ちの生活から開放されました。
カメラの性能がいいのとバッテリー持ちがよくなったなという感じですが、高い買い物だったなと思っています…

AirPods Pro

2019年、買って一番よかったものだと思います。
WF-1000XM3 から乗り換えました。
WF-1000XM3 で気になっていた点が全て解消されていて、とても満足度の高いイヤホンだと思います。

HHKB Professional HYBRID Type-S 墨

2019年の散財はAirPods Pro で終わりだと思っていましたが、Bluetoothで静音タイプで墨という自分にとって求めていた組み合わせが出てしまったので買ってしまいました。
カフェで作業するときは尊師スタイルなのでコードがないのは快適で見た目もスッキリしています。

www.instagram.com

まとめ

2020年は散財を控えたいと思います

ASRock DeskMini A300で初めて自作PCを作った

自作PCをやろうと思った理由

普段はMacBook Proで開発しているのですが、Docker for Macがあまりに遅く、開発機をMacからLinux Desktopに移行できないかと考えていました。
しかし、いきなり移行するのは厳しく、とりあえずLinux Desktopがどんなもんか試してみることにしました。

最初はWindowsのノートPCを買おうと考えていたのですが、メモリ16GBにすると20万くらいになってしまい見送っていました。
そんなとき、会社の方にベアボーンなら安く組めると教えてもらい、今回自作することにしました。

購入したパーツ

f:id:inari111:20190818212615j:plain

  • ベアボーン
    • ASRock DeskMini A300
    • マザボや電源が付いています
    • 14900円
  • CPU
    • Ryzen 5 2400G (4コア8スレッド)
    • 11780円
  • メモリ
    • ノートPC用 メモリ PC4-21300(DDR4-2666) 16GB×2枚
    • 16180円
  • SSD
    • WDの2.5インチ
    • 6460円

組み立て

CPU

向きに注意してつけるだけです
f:id:inari111:20190818212918j:plain

CPUクーラー

爪に引っ掛けて固定するのに少し苦労しました。
CPUに付属しているものではなく、ベアボーンに付属しているものを使います。
CPU付属のものだと取り付けできないはず。
f:id:inari111:20190818213002j:plain

メモリ

けっこう強めで押し込みます。
f:id:inari111:20190818213046j:plain

f:id:inari111:20190818213120j:plain

SSD

取り付けた後にネジで固定します。
f:id:inari111:20190818213151j:plain

配線

f:id:inari111:20190818213232j:plain

完成

ケースに戻してネジを締めたら完成です。
f:id:inari111:20190818213304j:plain

BIOS

無事起動しました。

f:id:inari111:20190818213339j:plain

まとめ

ASRock DeskMini A300で初めて自作PCを作ってみました。
CPU、 CPUクーラー、 メモリ、 SSDを取り付けるだけなので、未経験でも1時間ちょっとで起動までいけました。自作PCの入門には最適だと思います。
メモリ32GBのPCを約5万円で組めたのはかなりコスパいいと思うので、オススメです。
OSはUbuntu19を入れて使っています。 しばらく使ってみて良ければMacから移行する日も来るかもしれないです。

Cコンパイラを作り始めた

タイトルの通り、コンパイラを作り始めました。
先日、 転職のお知らせ にも書いたのですが、低レイヤーを勉強していきたいとここ最近考えていました。
正直、僕が考えていた低レイヤーというのは、AWS上でインフラを構築できるようになることやRDBのチューニングでした(前職ではアプリケーションのコードを書くこと以外、あまり気にしなくてよかったのでこのへんをやりたかった)。
しかし、会社の同僚の方たちと飲んでいるときに、エモい低レイヤーの話を聞き、ちょっとやってみるか!という気持ちになったのでコンパイラを作り始めてみました。

作っているもの

9ccというCコンパイラを作っています。
Cを書いた経験はなく、けっこう苦しいところもあります...

github.com

Cコンパイラとは、C言語で書かれたプログラムをアセンブリ言語に変換するものです。
例えば 5+20-4 の場合、以下のようなアセンブリを出力します(僕の現時点のコードでは)

.intel_syntax noprefix
.global main
main:
  push 5
  push 20
  pop rdi
  pop rax
  add rax, rdi
  push rax
  push 4
  pop rdi
  pop rax
  sub rax, rdi
  push rax
  pop rax
  ret

9ccという名前を聞いて、ピンと来る方もいるかもしれませんが、8cc9cc 作者の Rui Ueyama さんが書かれている 低レイヤを知りたい人のためのCコンパイラ作成入門 を参考にしながら(現時点ではほぼ写経しながら)作っています。

実装が完了しているもの

  • 足し算、引き算
  • 空白を含む足し算、引き算
  • 加減乗算、優先順位のカッコを含む計算
  • 単項プラス、単項マイナス

と、書いてもよくわからないと思うので、テストコードを見てもらうのがわかりやすいです。

tryという関数に期待値と入力値を渡し、実際の結果が期待値と一致するかをチェックしています。
try {期待値} {入力値}

# 整数1個だけコンパイルできる
try 0 0
try 42 42

# 足し算、引き算対応
try 21 '5+20-4'

# 空白対応
try 41 ' 12 + 34 - 5 '

# 加減乗算と優先順位のカッコからなる式に対応
try 47 '5+6*7'
try 15 '5*(9-6)'
try 4 '(3+5)/2'

# 単項プラスと単項マイナス
try 5 '-10+15'
try 15 '14+-(-7)-(+6)'

地道にやっていく感じですね。 できることが増えてくると面白いです。

実装中の箇所

  • 比較演算子 (== != <= >=)
    • ちょっとハマっている...

これから実装すること

  • ファイルを分けて分割コンパイルできるようにする
  • 変数、関数に対応

基本、 低レイヤを知りたい人のためのCコンパイラ作成入門 に沿って実装していく予定です。
挫折しなければ😂

最後に

APIなどのアプリケーションのコード書くのとは全然違いますが、ちょっと楽しいので地道に続けていきたいです。
そして、いつかGoでGoのコンパイラ作ってみたいです

参考文献

www.sigbus.info

nor-isio.hateblo.jp

転職のお知らせ

2019年4月12日でピックアップを退職します。
3月19日が最終出社日で、在籍期間は1年9ヶ月ほどでした。
3年くらい働いたような感じがしますが、実際は2年も働いていませんでした。

誰?

inari111 というIDで活動しています。
オークファン→BASE→ピックアップで働いてきました。
主にサーバーサイドの開発をしてきました。以前はPHPを書いていましたが、今はGoが好きです。
退職エントリ、入社エントリを読むのが好きです。今回は書く側になりました。

何をやってきたか

  • Go
  • Protobuf on HTTP
  • GCP
    • App Engine (以下GAE)
    • Datastore
    • Cloud Build
    • その他いろいろ
  • Firebase
    • Auth
    • Cloud Functions
    • その他いろいろ
  • CircleCI

APIや管理画面はGAEで動かしていたのですが、こんな便利なものがあるのかと感じるくらいGAEは便利でした。
インフラ面の心配をすることなく、アプリケーションのコードを書くことに集中できるので、人数の少ないチームには合っていると思います。
Goを書ける環境は楽しかったですし、レイヤードアーキテクチャやProtobufを使った開発を経験できたのもよかったと感じています。

最初の半年くらいはサーバーサイドエンジニアが足りていない状況で、機能追加時にはだいぶ迷惑をかけてしまいました。
完全に僕のスキル不足、経験不足によるものだと思っています。
1サービスに対しサーバーサイドエンジニアが2人を超えたあたりから、徐々に開発に余裕が生まれるようになったと思います。
入社してくれた方々が新しい風を吹かせてくれるのはとても心地よく、技術的なことだけでなく仕事の進め方や他職種とのコミュニケーションの取り方は勉強になりました。
一緒に働けたことに感謝しています。

なんで辞めるのか

数年後を見据えると、今のスキルセットでエンジニアを続けていくことに不安がありました。
GAEのような抽象度の高いサービスを利用した開発ではなく、今のうちに低レイヤーに触れておくべきだろうというのはここ数ヶ月感じていたことです。
年齢が上がるにつれて未経験の領域に挑戦するのはハードルが上がると思っていて、挑戦しやすい今のうちに思い切って転職することにしました。

どのように転職活動をしたか

下記のサービス経由で話を聞きに行ったり、選考を受けたりしました。

今までの転職活動では2~3社程度しか受けていなかったので、今回は多く受けようと考えていました。
20人くらいの規模の会社からメガベンチャーまで、幅広く受けています。
数人規模のスタートアップは、今の自分とは合わないだろうなと考えていたので、受けていません。
働きながら転職活動するのはしんどいので、もうしたくないですね...

転職活動で重視したこと

  • Goが書けること
  • エンジニアチームの雰囲気、考え方が自分に合っているかどうか
  • 新しいことに挑戦できる
    • インフラ、Webフロントエンド等
  • RDB触れること
  • エンジニアとして働きやすい企業かどうか
  • 経験豊富なエンジニアがいること

次何するの?

  • Goでアプリケーションのコードを書く
  • インフラもやる
  • Webフロントエンドもやる(Goを書くのがメインになる予定)

内定をいただいた企業の中から一番自分に合いそうな企業を選びました。

次働く企業は、入社後にまた改めて書きたいと思います。
聞かれたら答えているのでDMでも送ってください。

最後に

人数が少ないときに入社することができ、カオスな時期から人が増えていくフェーズを経験できたのは自分にとって貴重な経験でした。
日々新しいことを学ぶことができる環境は非常に楽しかったですし、周りの優秀な方から受ける影響も大きかったです。
今まで働いてきた中で一番働きやすい環境だったと思います。

子供の頃から、新しい環境に対してワクワクした気持ちよりも不安な気持ちを抱くことが多く、居心地のいい環境を出てまでやりたいことを優先している自分に少しびっくりしていますが、今後もコツコツとやっていけたらと思います。

では! 

 

 

プロセスをkillする

今までは

$ ps aux | grep dev_appserver | grep -v 'grep'

で返ってきたpidを指定して

$ kill {pid}

していたが、pgrepやpkillを使うと便利ということがわかった。

pgrep

pgrep はpidのリストが返ってくる。

$ pgrep -f dev_appserver
111

その後killする

$ kill 111

または、このようにコマンド1発でkillする。

$ pgrep -f dev_appserver | xargs kill

pkill

コマンド一発でkillできる

$ pkill -f dev_appserver

【メモ】 DockerでMySQLサーバーコンテナを起動する

バージョンを指定してイメージの取得

docker pull mysql:5.7.25

MySQLサーバーコンテナを起動し、DATABASEを作成したりする

  • hoge というDBの作成
  • inari111 というユーザーの作成
  • -eオプションは環境変数を設定
  • -d detachといい、バックグラウンドでコンテナを起動
docker run --name {コンテナ名} -e MYSQL_DATABASE=hoge -e MYSQL_USER=inari111 -e MYSQL_PASSWORD=hogehoge  -e MYSQL_ROOT_PASSWORD={rootユーザーパスワード} -d mysql

コンテナに接続

docker run --link {コンテナ名}:mysql -it --rm mysql bash

-i : ホストの入力をコンテナの標準出力をつなげる
-t : コンテナの標準出力とホストの出力をつなげる

(シェルのような)インタラクティブなプロセスでは、コンテナのプロセスに対して tty を割り当てるために、 -i -t を一緒に使う必要があります。 後の例で出てきますが -i -t は -it と書けます。

Docker run リファレンス

クリーンアップ (--rm)

デフォルトではコンテナを終了しても、コンテナのファイルシステム(の内容)を保持し続けます。これにより、多くのデバッグをより簡単にします(最後の状態を確認できるため)。そして、全てのデータを維持し続けるのがデフォルトです。しかし、短い期間だけ フォアグラウンド で動かしたとしても、これらのコンテナのファイルシステムが溜まり続けます。そうではなく、 コンテナの終了時に、自動的にコンテナをクリーンアップし、ファイルシステムを削除する には --rm フラグを追加します。

コンテナ内でのコマンドの実行が終わったらコンテナを自動で削除するということ。

MySQLに接続

hostはenvコマンドを叩いて表示された MYSQL_PORT_3306_TCP_ADDR を使う

mysql -u inari111 -p hogehoge -h {MYSQL_PORT_3306_TCP_ADDR}