ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

入社して一ヶ月

blog.chaspy.me

blog.chaspy.me

これまでと同じくシュっとかく。しっかりは書かない。

9末に向けて、1ヶ月を振り返りつつ、目標設定もしたので感情をつらっと書いておく。

できることが少し増えて、できないことがこんなにある、ということが現実味を帯びて迫ってきている感じで、なかなかしんどい。

一方で、(想像はしてたにせよ)扱うシステム・インフラの(まだ知らないが故だが)膨大さに、理解のスピードが追いつくかは不安である。自分自身のコーディング/インフラスキルに対する不安もある。 とはいえ、そもそもソフトウェアエンジニアリングそのものが不安との戦いだとすら僕は思っているので、そういうものだと思ってやるしかないのはわかっている。


変わらない不安は、やっぱり自分ができること、自分ができるスピード、自分が知ってること、自分のことばかりだ。チームにはどうやって勝つねんみたいな強いひとばかりだが、焦らずやっていこうと言い聞かせる他ない。

このへんの不安が確信になった感じ。

まぁやるしかないのは変わらない。日々自己否定を頑張って無視している。

目下の課題はこのへん

  • 英語
    • 仕事の大半は英語なので、読み書きのスピードが仕事のスピードとほぼイコールになる。読んだ結果が間違ってれば誤認識になるし、書いたものが伝わらなければチームメンバーに対して余計なオーバーヘッドをかける。話す聞くの前にまず読む書くをトレーニングしないとまずい。
  • キーボード
    • これまでサボってきたのが悪いが、キーボード、ターミナル操作が遅い。毎日1つずつスピードアップのために何か覚える、とかやったほうが良さそう。pecoが超絶便利なのでなるべく組み合わせて、aliesにコマンド化していれる、などしている。vimとかtmuxとかショートカットキーとか、テクさがまだ足りない。
  • 新しいことの学び方
    • 永遠のテーマみたいなテーマだが、未知へのハックの仕方が悪い。何年エンジニアやってんだって話だけど(いやたった4年か。。。とか言って励ますけど)わからないことをわかる能力というか。何言ってんだ。今やっているのはとにかく言語化。何がわかったのか、何がわかってないのか、問いは何か、その問いの答えは何か。これを愚直に繰り返す。あとは図にする。のろまでもこれを繰り返すしかない。このへんは改善のアクションが自分で浮かんでない。見つめ直しが足りないのかも。

目標は、自分で見つけ出して改善を週に2つできるようになろう、ということになった。改善そのものは好きだし、大切だし、得意だと思うけど、改善をするためには現状を「わかって」いないとできない。なかなかいい目標設定をするなぁ、とボスに感心。

あとは、仕事をコントロールしている感がない。散らかっているというか。このへんは抜け出したい。

  • 業務依頼
    • やったあと復習
  • 中期的にやる業務
  • 新しく何かを覚える
  • わからないことの整理

このあたりがぐちゃぐちゃ。週報、月報、振り返りをうまくやって足場を固めたい。

次は「入社して三ヶ月」に書く。そのときに上記の課題や、今回立てた目標がどうなっているかをまた振り返りたい。

勉強会行くのやめる

勉強会は(少なくとも参加者である限りは)得られることは「知ること」であり、「できること」ではない。「できること」が一切ない今、「知ること」を優先させるのは時間の使い方として得策ではない、というだけ。

主催のクローズド勉強会以外はしばらくおやすみしようと思う。

自分自身のタイミングの問題であり、言うまでもないけど勉強会文化を否定するわけでもないし、むしろ感謝ばかり。

直近は(半分仕事だけど)明日のStudySapuri Product Meetup、あとは個人的に思い入れのあるJTF2018は行く。9月のbuilderscon tokyo 2018、チケット勢いで買っちゃってたけど平日だしいかないかも。5000円寄付。

techplay.jp

2018.techfesta.jp

builderscon.io

さ、特のり弁分走ろ。

NginxをAWS上で作って壊す「Nginx Up and Running」0.2.0をリリースした

趣味インフラ趣味プロジェクトなので勝手にリリースごっこをしているだけであります。

初回リリース時の記事はこちら。

blog.chaspy.me

何が変わったか

issue & PR

0.1.0まではガシガシmasterに向けてcommit & pushしてましたが、そのあとはissue & PRで、ちゃんとcommitやPRにはrefでissue情報を加えています。現職での仕事の仕方に習っています。

で、今回の変更をPRベースで振り返ります。

Testing on CircleCI

github.com

github.com

このリポジトリ、TerraformでAWS上にインフラ(EC2)を作ったあと、ansibleでNginxを作って、InfratasterでL7のテストをするというものです。CIでは何をするか悩みました。悩んだ結果、AWS上には実際にリリースせず、テストに絞ることにしました。

テストをするにしても、実際にAWS上にインフラを作るわけではないので、TerraformとAnsible/Infratasterの2つにわけました。

Terraformは単純にplanをしているだけなので、テストとしては少し甘いかもしれません。TerraformもCI時はlocal(?)に実行できる(?)とかあればいいんですが、わけがわからないので諦め。

次にNginxをinstallするansibleと、構築後のNginxに対してL7のテストを行うInfratasterですが、CircleCIで立ち上がるコンテナに対して、local実行することにしました。

もともと、AWSに対して実行するときも、作成したEC2インスタンスのpublic IPアドレスをhosts、spec/spec_hosts.rbに出力していたので、CI実行時はlocalhostに書き換えることで対応できました。

使うDocker Imageもどうしようか悩んだのですが、Ansibleが入ったイメージをFROMとし、rbenvをいれる部分はDockerfileを書きました。

https://hub.docker.com/r/chaspy/nginx-up-and-running/

あとはAWSのcredentialですが、環境変数に持たせることでCIでもAWSに対してデプロイするときでも動くようにしました。

CIも、テストもとても大事なので、今回ちゃんとできてよかった。

Embedding build status badges

github.com

バッジつけましたー。

CircleCI

Build nginx from source with ngx_mruby module

github.com

ngx_mrubyを使うには、Nginxをbuildするときに指定しないといけません。以前軽くvagnratで動かした時にinstallのshellは書いていたので、それをplaybookにかきおこすダルい作業をしていました。

Ansible、loginしないから/etc/profileとかにexport書いても読んでくれなくてPATHとおらねー!とか、shell moduleとcommand moduleで謎の挙動違いがあってNo such file or directoryになったりとかで無駄にハマったりしました。

あとngx_mrubyのお試しで無駄にfizzbuzzを返すようにしていて、そのテストをInfratasterで書きました。

今後Nginx / ngx_mrubyのconfigとテストをメインにどんどん書いていきたいので、その基盤ができてよかった。

Add Japanese Document

github.com

結局ほぼほぼREADMEに書いている内容と同じになってしまったが、今後増えて行くといいと思う。そんな思いでまずは簡単に書いた。

いつまで続くかわかんないですが、薄い本というか、NginxをAWS上で、CI/CDこみで動かしたい、そういう職場で働いている、キャッチアップしたいひとが、git cloneしてすぐに動かして試せる、学習用の技術書。。。のサポートリポジトリ、みたいなイメージで今回取り組んでいます。

まだまだ道半ばですが、v1.0.0の頃にはそれなりのボリュームのものになればいいなと思います。まだまだ中身もよくないところたくさんあるし、少しずつ直しつつ、ようやくCI/CDまわりの基盤となる部分や、必要ソフトウェアの導入まで終わったので、今後はようやく中身!って感じですね。

今後

さっきも言ったけどNginxでできること、ngx_mrubyでできることをconfigを書きつつ、Infratasterでテストも書きつつ、ドキュメントも書きつつ、っていうのを少しずつ進めて、コンテンツを増やしていきます。

おわりに

Vagrant版もつくろうかなーって思っている。というか以前作ったのがあるので移行する感じで。。。

github.com

Amazon-Linux "ami-cbf90ecb"でrakeが使えない

nginx + mrubyを動かそうとしたとき、CentOSではyumで入るrubyで動くが、EC2のamazon-linux "ami-cbf90ecb"ではrakeが動かない。ngx_mrubyをbuildしようとしたときのことだ。

[ec2-user@ip-10-1-1-67 ngx_mruby]$ ruby --version
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
[ec2-user@ip-10-1-1-23 ~]$ rake
-bash: rake: command not found

なんでないんや

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake
lrwxrwxrwx 1 root root 22 Jul 15 09:55 /usr/bin/rake -> /etc/alternatives/rake

おっあるやん

[ec2-user@ip-10-1-1-23 ~]$ ls -la /etc/alternatives/rake
lrwxrwxrwx 1 root root 16 Jul 15 09:55 /etc/alternatives/rake -> /usr/bin/rake2.0

ほう

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake2.0
ls: cannot access /usr/bin/rake2.0: No such file or directory

なるほど

で、なんか2.4はあるのね

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake2.4
-rwxr-xr-x 1 root root 1185 Aug 18  2017 /usr/bin/rake2.4

結論

symlinkはりなおそ

[ec2-user@ip-10-1-1-23 ~]$ sudo rm /etc/alternatives/rake
[ec2-user@ip-10-1-1-23 ~]$ sudo ln -s /usr/bin/rake2.4 /etc/alternatives/rake
[ec2-user@ip-10-1-1-23 ~]$ rake --version
rake, version 12.0.0

/etc/alternative/rakeって何

せっかくなので軽くググる

なるほどー、symlinkでバージョンを切り替えるのをサポートするalternativeというのがあって、なんことやらrakeは2.0の実態がなくなって2.4しかない状態になっていた感じね。

じゃalternative使って2.4向けてやればよかったのね

(再)結論

rubyを2.4に切り替えてやればいい

alternativesコマンドで確認したところ、rakeはない。

[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --display rake

rubyはなんやかんやでて、2.0と2.4をサポートしてそうな雰囲気。

[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --display ruby | grep ruby
ruby - status is auto.
 link currently points to /usr/bin/ruby2.0
/usr/bin/ruby2.0 - priority 2000
 slave ruby.pc: /usr/lib64/pkgconfig/ruby-2.0.pc
 slave ruby.1: /usr/share/man/man1/ruby2.0.1.gz
/usr/bin/ruby2.4 - priority 243
 slave ruby.pc: /usr/lib64/pkgconfig/ruby-2.4.pc
 slave ruby.1: /usr/share/man/man1/ruby2.4.1.gz
Current `best' version is /usr/bin/ruby2.0.

切り替える。

[ec2-user@ip-10-1-1-227 ~]$ ruby -v
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --config ruby

There are 2 programs which provide 'ruby'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/bin/ruby2.0
   2           /usr/bin/ruby2.4

Enter to keep the current selection[+], or type selection number: 2
[ec2-user@ip-10-1-1-227 ~]$ ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux-gnu]

[ec2-user@ip-10-1-1-227 ~]$ rake --version
rake, version 12.0.0

おしまい。

開発合宿にいってきます

友人と一泊でもくもく開発をやることにした。最高か。

f:id:take_she12:20180714224834p:plain

f:id:take_she12:20180714224836p:plain

なぜかとりあえずプロジェクターを買う元同期氏。最高か。

f:id:take_she12:20180714225046p:plain

シュっと決まった。泊まる先も選んでくれた。最高か。ってことで湯河原にいってきま!

f:id:take_she12:20180714225156p:plain

何をやっていき

Nginx Up and Running v0.2 Release

blog.chaspy.me

  • nginxのソースコードビルド&ngx_mrubyのインストール
  • CircleCIによるインフラテスト
  • nginxの代表的なconfigとテスト
  • ドキュメント作成

たぶんこれはそこまで時間かけずにできると思う、3,4h?

Deis Up and Running

Up and Running言いたいだけか。

現職、Deisで動いてて、さすがに最低限のCLIと、アーキテクチャの理解ぐらいはしておかないと現状把握に困るのでシュっとキャッチアップすることにする。

とりあえずオフィシャルのドキュメント眺めてチュートリアルをやる。

deis.com

いまいまの理解はオンプレというか、自分で入れるHeroku。であればAWS上に作って、前段nginx + deis(rails + unicorn + DB)を動かす、ぐらいまでできれば御の字か。

まだあんまりよくわかってないが、Kubernetes上に動かせるとなおのこと現状に近い気がするので、できればやってみる。

deisに関してはhakoberaさんが記事を書いているので参考にしつつ。

qiita.com

Sidekiq and Resque

「なるほどUNIXプロセス」の付録を流して、非同期処理をプロセスという視点でどのように実現しているのかを理解する。

tatsu-zine.com

で、いまざっとググった感じ、いずれもRailsと一緒に使われるパターンが多そうなので、Railsと合わせて動きを理解する。

アウトプット

それぞれブログ書きます。

まとまったら月末なんらかの勉強会で LT発表します。

おわりに

たのしみだー

NginxをAWS上に作って壊すリポジトリ「nginx-up-and-running」リポジトリを作った

はじめに

作った。

github.com

とりあえず適当に0.1.0のタグをつけてリリースらしきことをしてみた。

これは何

雑な図がREADMEにありますが、NginxをAWS(EC2 instanceとして)上に作って、挙動をテストするリポジトリです。

モチベーションは何

社内ではNginxを結構派手に使っています。で、自前でもNginxを好きにできる庭が欲しい。しかし、Web application(ex. rails...)とのセットだと敷居が高い。ならば!terraform + ansible + infratasterでインフラCIを実現する学習用リポジトリを作ろう!といった感じです。

心がけてること

誰もがCloneして、すぐにドシャーって作って、ドシャーって壊せる。そしてForkしてアレンジして自分にあったものをすぐに試せる。そんな学習用リポジトリを目指したい。Nginx on AWS with CI/CDをシュっと試せる、そういう書籍で実際に動かすリポジトリ、といったイメージです。なので、ドキュメントもちゃんと作って、同人誌として出したいぐらいの気持ちもあります。

v0.1.0でできること

本当にシンプルで、最低限のところまでです。

  • terraformでVPC上にEC2 instanceをdeploy
  • ansibleでEC2 instanceにnginxをinstall
  • infratasterでGETできることをテスト

こんなもんです。最低限。

今後

で、v0.2.0に向けて何すっかなーってのを考えるために今ここでブログを書いている、という次第です。

  • nginxのソースコードビルド&ngx_mrubyのインストール
  • CircleCIによるインフラテスト
  • nginxの代表的なconfigとテスト
  • ドキュメント作成

こんなもんかな。悩んでるのはCircleCIで何をやるか、といったところで、実際にdeployまでできればいいけど、それ以外でも普通に壊して作ったりしたい。毎回壊して作ってするか、それともテスト目的にするか、を悩んでる。テストだとしても、terraform部分のテストはやっぱり実際のAWSに対して打つしかできないと思うし、ansible/terraformのところもCircleCIコンテナでやるの、若干めんどくさいなーって感じ。targetをCIとそうでないときでわけないとできない気がする。

おわりに

Nginx Up and Runningというイキったリポジトリ名にしたからには使い倒せるような学習用リポジトリを目指したい。

シュっと試す。本を読みながらシュッと実行できるって、キャッチアップする人間にとってありがたいと思うんです。今時クラウド上で、CI/CDまでできて当たり前なので、誰かに役にたつリポジトリになればいいな、という思いで、少しずつ育てていこうと思います。

2018年7月の目標

やるぞー。

技術

今回からはテーマを決めて、そのテーマをじっくりやることにする。

技術書を読んで、なんとなくなぞる、じゃなくて、テーマを実現するために参考にする書籍、という風に使う。すっげー当たり前だよな、しにたい。

非同期処理を行うsidekiqとresqueの挙動を実現する技術を理解する

現職で(確か)使われてるのもあるが、最近読んだ「なるほどUNIXプロセス」の付録で取り扱う内容でもある。UNIXプロセスの理解の延長にもなるはずだ。プロセスという観点でどのように非同期処理が実現されているのか、内部の仕組みを見て、実際に動かしてみて理解したい。

blog.chaspy.me

UNIXプロセスとは何で、何ができるものなのか?をまとめる

前述した書籍で一通りなぞったが、もう一段まとめをしておきたい。できるならコンテナ実装とも絡めて理解したい。

hello! AWS

AWS、趣味でほーーーーんの軽く触ってただけだったので、自動化基盤含めて自分自身の趣味サービスならぬ、趣味インフラを作る。含める技術スタックは以下。

  • AWS
    • S3
    • EC2
    • ECS
    • Route53
    • and AWS-CLI
  • nginx
  • CircleCI
  • Terraform
  • Docker
  • Ansible
  • Infrataster

CIを含めたインフラのデプロイを一通り触って、練習用リポジトリを作る。

副読書としてこれ読もうかなーと思ったけど高いな。どうしよ。

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

実際に動くアプリケーションまでは作れないと思うので、nginxで静的なWebサイトを返すところぐらいまではやる。

全部現職で触る技術なので、自分でも触って強化しとくってのが目的。

登壇

技術と登壇が並んでるの、MECEじゃない気がするがまぁいいです。

おそらく上記技術内容のUNIXプロセスについて、主催のクローズド勉強会のLTでしゃべります。

たぶん間に合わないけど、前職が会場でGitLabのMeetUpがあるので、LTネタ浮かんで間に合えば登壇したいです。

gitlab-jp.connpass.com

とはいえ今ぱっと浮かぶのは。。。

  • GitLab + Document CI(mkdocs, sphinx, etc...)
  • GitLab + Mermaid.jsで設計書管理
  • GitLab + Kubernetes
  • GitLab11.0新機能試しみる

ぐらいですかね。現職ではGitLab使わないので、優先度はやや低め。(現職に役立つ学習を優先したい)

勉強会

参加するときって脊髄反射で申し込むから気づいたらかなり多いって月があって、7月はかなり多いです、正直今は勉強会に登壇じゃなく参加でいくような時期じゃない(自分の技術をしっかり高める)ので迷いますが、かといってキャンセルも躊躇するのよね。

cloudnative.connpass.com

運営手伝ってます。

engineers-x-designers.connpass.com

k8sjp.connpass.com

正直Railsエンジニアってわけじゃないんですが、弊社のひとも登壇するので、設営ボランティア枠で申し込んでいます。

techplay.jp

弊社イベント!お手伝いもしますし、何より自分も聞きたいセッションばかりです。

techplay.jp

去年も行った、好きなイベントです。憧れの方もたくさん登壇されます。(CfPをはじめて出したけど、ちゃんと落ちました)

2018.techfesta.jp

多すぎるので反省しつつ、一度手を挙げたものはちゃんと行って吸収したい。

音楽

やってるバンドで2nd albumを7/11(Wed)にリリースしまーす!

あとは特にここで宣言しなくてもスタジオに合わせてやれてるな。。。

そっちではPM的なことやっててうまくまわってるから個人ブログに書かなくてもよくなってきた。ので次回から減らす。

英語

Seeking SREはもういいかなって感じなので、次はCloud Native Infrastructure読んでみる。

Cloud Native Infrastructure: Patterns for Scalable Infrastructure and Applications in a Dynamic Environment

Cloud Native Infrastructure: Patterns for Scalable Infrastructure and Applications in a Dynamic Environment

全部で9章ある。全部はこれまでの感じだと無理そう。。。1/3なのか1/2なのか。頑張ります。

AWSのくだりでTerraformは触るし、Terraform Up and runningもあるなーどうしようかなー多分やんねーなー詰まったら気になる章読みます。

Terraform: Up and Running: Writing Infrastructure as Code

Terraform: Up and Running: Writing Infrastructure as Code

あとはアウトプット、これも変わらず月4本にする。日記的なやつはmedium、技術ネタはdev.toへ。

自分の中のしょぼい英語をアウトプットし続けてもしゃーないのできちんとインプットする。

瞬間英作文1冊終わらせる。

どんどん話すための瞬間英作文トレーニング (CD BOOK)

どんどん話すための瞬間英作文トレーニング (CD BOOK)

ついでに目に入ったからこれも一通り目を通して消化する。

ITエンジニアが覚えておきたい英語動詞30

ITエンジニアが覚えておきたい英語動詞30

kyannyさんも読んでたし。

blog.kyanny.me

健康

ジムにいってお金をかけて少しでも意識をあげる作戦でいく。

安定した60kg台と19%台が欲しい。

お金

海外旅行で派手に使ったものの(20万+渡航費)それ以外でだいたいの支出がわかったので、改善を試みる。

  • 食費 合計 38,662円 → 25,000円

。。。いやそんだけかって感じだけど他は削る気がない。。。

  • 交際費 合計 43,664円

これ3万ぐらい目指すだけ目指してもいいけど、会いたいひとに会うためなら惜しまないしなぁ。一応記録して目指してみます。

仕事

まぁこれは職場でやりゃいい話なんだけど、今んところすぐ活躍するにはほど遠い感じなのでちゃんと個人のほうでも書いておく。

  • AWS、および周辺技術の理解(これは技術のところに盛り込んだ)
  • reverse proxy(nginx)の設定内容理解
  • CircleCI 2.0化
  • プロダクトブログ
  • Microservices および Kubernetesの理解
  • 監視内容の理解
  • 定期ジョブの理解

SREって、新しい分野を、キャッチアップしながら取り入れながらっていう領域と、古くなって負債を返していくような領域(改善?)と、通常運用と呼ばれる領域(WebDevからの依頼)に分かれる気がしている。せめて通常運用ぐらいは任してもいいぐらいになって、負債も少しずつ手を出せるようになりたい。新領域はそれからだ。

おわり

いい職場で働けています。がんばるぞ。

blog.chaspy.me

blog.chaspy.me