ようへいの日々精進XP

よかろうもん

2018 年 12 月 27 日 (木)

ジョギング

  • お休み
  • 足の痛みは相変わらず..., 慌てずに治すことした

日課

  • お休み

オルターブースさんの納会に

お誘い頂いたので, オルターブースさんの納会に参加した. オルターブースさんには JAWS-UG 福岡のもくもく会で場所を提供頂いて, 今年は本当にお世話になった.

納会の中で Rancher の新藤さんとお会いして色々とお話をさせて頂いて, Rancher に非常に興味を持った.

www.rancher.co.jp

初老丸を支えた技術 2018 〜 アイレットにさよならするのは辛いけど 〜

これは

qiita.com

初老丸アドベントカレンダー 2018 の最終日, 25 日目の記事でございます. 初老丸アドベントカレンダー, だいぶん歯抜け状態になっていてコンプリート出来ていないんですが, とりあえず, 時間を見つけて年内には全ての記事を書ければなーと考えております.

さて

ここ数年, アドベントカレンダーを書くようになり, 最終日の 25 日の記事は「初老丸を支えた技術」と題して, その一年の振り返り等を書いてきましたが, 今年は年末でアイレットを退職にすることになりましたので, アイレットの思い出とこれからの初老丸について少しだけ書いてみたいと思います.

アイレットに「さよならするのは辛いけど」ということで.

www.youtube.com

愛・愛・アイレット

リモートワークがしたい

こんなつぶやきを SNS でしたら, @yoshidashingo に拾って頂いたのが, 愛・愛・アイレットに入社するきっかけでした. @yoshidashingo さんには, 入社後も色々とお気遣い頂いて本当に感謝していますし, 奥さんの次くらいに愛しています.

そして, 初出社の日に会社に誰も会社に居なくて, 一番乗りだったというのが印象に残っています. また, クロスという犬社員が先輩に居て, 事あるごとに吠えられ, 仕事でミスると噛まれたりしたことはとても良い思い出です. そのクロスパイセンですが, すでに他界されていますが, パイセンのキリッとした顔と甲高い雄叫びは今も忘れません. 本当に有難うございました.

挫折

2014 年の 9 月から福岡でリモートワーク始めましたが, 自分のスキルの低さと降り掛かってくるタスクのバランスを保つことが出来ずに心と体のバランスまで崩してしまい, 三ヶ月間休職を頂いておりました. 休職に伴い, 当時のチームメンバーには多大な迷惑を掛けてしまったことを今でも反省しています. ただ, 三ヶ月も休職を頂いていながら, 復職の際には何事もなかったように迎えてもらえたことに本当に感謝しています.

年末の国民的なイベントとの関わり

アイレットでは AWS を使ったインフラ構築や運用, 保守の仕事に携わっていました. その中でも特に印象に残っているのが, 年末の某国民的なイベントに関わらせて頂いたことです. ただ, このイベントにおいては, アクセスログを集計するシステムの実装から構築, 運用までをワンストップで行っていました. 年末の国民的なイベントの裏側で, ある程度設計されていたシステムだったとは言え, アプリケーションを設計して実装し, そのアプリケーションを動かすインフラを構築し, 運用するという仕事を任せてもらえるのは本当にエキサイティングでした.

この仕事を任せてもらった後, 少しずつですが, 仕事に対する自信も持てるようになってくると共に, 目の前の課題をある程度の設計とともにコードを以て解決することの喜びを感じるようになりました.

チームメンバーと家族に支えられたリモートワーク

約 4 年間, リモートワークを行って感じたのは, 二点. 一点目は, ベースとなるオフィス (アイレットだと東京虎ノ門オフィス) のチームメンバーの支え無くしてリモートワークは成し得なかったということ, もう一点は家族の理解が必要ということです.

これだけインターネット環境が整い, リモートワーク (テレワーク) という言葉が当たり前のように飛び交うようなご時世でも, 実際にリモートワークしてみると, ベースとのタイムラグや意思疎通が取りづらい状況はあると考えています (実際にそういうことは多々有りました). そんな時にリモートワーカーの助けになるのは, ベースとなるオフィスに常駐しているメンバーの理解とサポートだと考えています. 例えば, 特に用事がなくても Slack で声をかけてもらったり, 仕事の情報は早めに共有してもらったり等, きっとメンバーの皆さんのストレスは大きかったのではと考えています.

また, 自宅で仕事をしていると, 家族と過ごす時間と仕事の時間をうまく区切ることが出来ない状況が多くありました. サーバーの障害が復旧しても, その裏で家庭内の障害が発生してしまい, そちらの障害復旧の方が大変だったことが良くありました. 今では笑い話になっていますが.

産業革命

ここ最近では, インフラの仕事よりも, アプリケーションを作るような仕事をさせて頂いて, PythonPHP, Vue.js をなんとか切り貼りしながらアウトプットしてきました. その中でどの言語, どのアプリケーションにおいても, テストコードを書いて, アウトプットの品質を担保する必要があるということを学べたことが貴重でした. また, 他のメンバーとともにアプリケーションを実装する際の作法等も学ぶことが出来ました. 体育大学を出て, なんか良くわからないまま IT ベンチャーにジョインして, なんちゃってインフラエンジニアとしてプログラミングとはほぼ無縁だった自分にとってこれらを学べたことは俺的産業革命に匹敵する出来事でした.

また, awspec との出会いも, 俺的産業革命でした. 当然, awspec のコンセプトや実装についても目がさめるような衝撃を与えてくれましたが, awspec の開発自体に携われたことが, 大きな自信になり, Ruby をちゃんと勉強しなければと強く感じさせてくれた出来事でした. awspec の作者である, @k1low さんには, 手取り足取り awspec の実装について教えて頂いて本当に感謝しています.

ユーザーをもうちょっとだけ身近に感じたい

俺的産業革命のうねりの中で, アイレットに対して, 実家のようなすごく居心地の良い雰囲気を感じていました. 自分の場合, リモートという環境でベースのメンバーよりもある程度自由度の高い仕事のやり方が出来ていたからかもしれません. そのような居心地の良い環境の中で, これからの自分がエンジニアとしてどの程度成長出来るのか考えていました. また, お客様の環境をお預かりして構築, 運用している中で, その環境の先にいるエンドユーザーに近い環境で仕事をしたいという思いがありました. そんな時に, 福岡の地場で登山者向けのアプリを提供している YAMAP さんからお声がけ頂きお話をさせて頂きました. YAMAP は登山者向けアプリのパイオニアであること, エンドユーザーとの交流イベント等を定期的に開催していること, システムが Ruby で動いている!!等, ここらでイッチョという思いに至り, アイレットを卒業して YAMAP に入学することを決めました.

Hello YAMAP

自社サービスを支える技術

YAMAP は電波が届かない山中でも, スマフォの GPS で現在地と登山ルートを提供する登山アプリで, 登山の記録や写真が活動記録として日々投稿されるので, 山の情報収集や全国の登山好きと交流することも出来る, 日本最大の登山・アウトドアプラットフォームです. そのプラットフォームを運用するインフラの構築や運用保守がメインのミッションとなりますが, インフラの構築運用に留まらず, インフラの上で稼働する様々のアプリケーション (サービス) に対して良い意味でお節介を焼けるようなエンジニアを目指していきたいと思います. また, サービスがより多くのユーザーに使われる為に何をすべきかについて, 技術的な観点から包括的に考えて実装出来るように, 既存のメンバーの協力を頂きながら推し進めたいと考えています.

以上

上記の通りの通り, YAMAP さんでこれまで通り頑張ろうと思います. 駅伝で言うところの, 次の走者にタスキが渡されて, 眼の前に続く未知 (道) に向かって走り出すタイミングなだけで, 自分という人間は何も変わらず, ただひたすらに走るだけだと考えていますので, 今後共, 生暖かい目で見守っていただけると幸いです.

まずは, この 4 年半, お世話になりましたアイレットの皆さん, お客様, 大変お世話になりました. 色々と至らない部分が多々ありましたが, 皆さんのおかげでここまでやってこれたと考えています. これからも走りつづけることで少しずつでも恩返ししたいと思います.

そして, JAWS-UG 福岡の皆さんや, 各種コミュニティメンバーの皆さん, 引きこもりな自分をいつもやさしく受け入れてくれて本当に有難うございました. 今後共, 宜しくお願い致します.

最後に奥さん, なんか小学生がそのまま大きくなったような自分をいつも支えてくれて本当に有難う. これからも小学生のままかもしれないけど, 宜しく頼む. ありがとう.

次の回まで, ごきげんよう.

2018 年 12 月 24 日 (月)

ジョギング

  • 岩国市内を 35 分くらい
  • ホテルから岩国錦帯橋空港までぐるっと周った
  • 左足の踝周りは相変わらずの痛み, ただ, 昨晩, 林田くんに施術してもらった影響か, 筋肉の使い方少し変わったような気がする

日課

  • お休み

錦帯橋

岩国名所として名高い, 錦帯橋, 岩国城を林田家と共に巡る.

錦帯橋。アーチの部分の実装が精巧で震えた。

岩国城。

岩国城の後は名物瓦そばを食べる. 熱々の瓦の上で少し焦げたパリパリの部分を甘辛いタレにつけて食べる. とても美味しかった.

往復 500 キロ以上

だいぶん走ったよなあ. MINI さん, お疲れ様でした.

2018 年 12 月 23 日 (日)

ジョギング

  • 移動の為, お休み

日課

  • お休み

岩国旅行

幕末の #ひょっこりはん

  • 奥さんの友人夫婦, 浪速の林田夫婦とともに岩国旅行をする為, ミニさんを走らせて山口県岩国市までの小旅行
  • 夏場はすごく賑わったであろう, 誰もいない滝壺や川等をドライブした後, 山賊料理を食べに行く
  • 岩国市内のホテルにチェックインして, 岩国市内の夜を満喫からの部屋飲み
  • とても楽しい一日だった

2018 年 12 月 22 日 (土)

ジョギング

  • 山王公園往復
  • 懸垂 5 回
  • やっぱり, 左足踝, 左足の甲の外側...長引くな...

日課

  • お休み

睡魔

  • 遅い朝ごはんを食べた後, 急激な眠気でお昼寝を 2 時間ほど...
  • 睡魔せん

豚ステーキ

  • 自宅近くの看板が出ていないお店で豚ステーキを食べた
  • メニューも豚ステーキとビールの 2 品のみという, こだわりを感じるお店
  • ジューシーでとても美味しかった, 1000 円也

AWS CodeBuild のビ・ビ・ビルドを実行したり, ビルドのステータスを確認出来るコマンドラインツールを作ってみたので, 何卒, ご容赦下さい

tl;dr

手元の端末で Docker ビルドするのって, Docker の環境を手元の端末に用意したりする必要があります. その環境を用意するにあたって, MacWindows 等の環境依存が発生することがあり, 結局, Docker という基盤の上に乗っけてしまえば環境に依存しないという Docker のメリットを殺してしまうよなーと思う機会がありました.

いっそのこと手元の端末での Docker ビルドは止めて, AWS の CodeBuild や CircleCI 等の CI/CD 環境にお任せすればいいんやないかな...その場合, 出来るだけ簡単に (コマンド一発か二発で) ビルド出来るようにしたいよなーと思ったので, AWS CodeBuild に特化しちゃうけどコマンドラインツールを作ってみました.

bibuild

これ

github.com

bibuild という名前です. 名前は星野源さんのシングル「ドラえもん」の初回特典 DVD に収録されていたらしい「ViVi Video」からインスピレーションを得ました.

www.hoshinogen.com

尚, bibuild はソースコードは S3 に放り込むことを前提としていて, GithubAWS CodeCommit には対応していません. すいません.

bibuild で出来ること

  • 指定したディレクトリに入っているソースコードを zip で固めます
  • zip で固めたソースコードを S3 にアップロードします
  • 指定した CodeBuild プロジェクトのビルドを実行します
  • 指定したビルドの状態を確認します

使い方

インストール

インストールはリリースページがダウンロードして頂いて, パスの通ったディレクトリにバイナリを放置して下さい. 強いて言えば, 念の為, 実行権限を付与して下さい.

chmod +x ~/bin/bibuild

尚, CodeBuild にアクセスするにあたって, 適切な権限が付与されたクレデンシャルを用意する必要がありますので, 合わせて用意しましょう. この記事では, direnv を利用して, AWS の Profile 名を環境変数にセットしています.

export AWS_PROFILE=washino-profile
export AWS_REGION=ap-northeast-1

例えば

以下のようなディレクトリ構成を用意します.

$ tree -L 1 .
.
├── config.yml
├── docker
└── terraform

2 directories, 1 file

terraform ディレクトリは気にしないで下さい. config.yml は bibuild で利用します. config.yml の内容は以下の通りです.

default:
  source_bucket: "codebuild-docker-build-project-sources"
  project_name: "codebuild-docker-build-project"
  source_key: "source.zip"
  directory: "docker"

尚, 今回は Docker イメージをビルドして ECR に push するようなプロジェクトをすでに CodeBuild に作成しているという体 (てい) でいきます. docker ディレクトリ以下に Dockerfile と buildspec.yml を用意しています.

$ tree -L 1 ./docker
./docker
├── Dockerfile
└── buildspec.yml

0 directories, 2 files

ちなみに, Dockerfile は以下のような内容です.

$ cat docker/Dockerfile
FROM ruby:latest
RN echo "Hello World"

あえて, エラーを発生させたいので, 構文エラーをしちゃっています.

docker ディレクトリ以下のファイルを source.zip というファイル名で圧縮して S3 バケットにアップロードし, CodeBuild プロジェクトにてビルドを実行するところまでを bibuild がやってくれることになります.

実際にやってみる

実際に bibuild を使って Docker イメージをビルドしてみたいと思います.

$ bibuild -version
0.0.2

以下のように -zip-put-build フラグを付与することで source.zip を生成, S3 バケットにアップロード, CodeBuild プロジェクトにてビルドをキックという処理を行います. フラグを個別に指定することで, 指定した処理のみを行わせることが出来ます.

$ bibuild -zip -put -build

以下のように出力されます.

✅  ソースファイルの zip 圧縮に成功しました.
✅  ソースファイルの S3 へのアップロードに成功しました.
✅  ビルドを開始しました. Project Name: codebuild-docker-build-project, Build ID: codebuild-docker-build-project:bc9be7f1-e9a7-4397-a5c5-3c9405cb1ccb

次に, ビルドの状態を確認してみます. bibuild に -stat=ビルド ID を指定すると, 以下のようにビルドの状態を確認することが出来ます.

$ bibuild -stat=codebuild-docker-build-project:bc9be7f1-e9a7-4397-a5c5-3c9405cb1ccb
Build ID: codebuild-docker-build-project:bc9be7f1-e9a7-4397-a5c5-3c9405cb1ccb
Build Status: FAILED
+------------------+---------------+---------------------+---------------------+
|       名前       |  ステータス   |      開始時刻       |      終了時刻       |
+------------------+---------------+---------------------+---------------------+
| SUBMITTED        | ✅  SUCCEEDED | 2018-12-22 09:56:02 | 2018-12-22 09:56:03 |
| QUEUED           | ✅  SUCCEEDED | 2018-12-22 09:56:03 | 2018-12-22 09:56:04 |
| PROVISIONING     | ✅  SUCCEEDED | 2018-12-22 09:56:04 | 2018-12-22 09:56:25 |
| DOWNLOAD_SOURCE  | ✅  SUCCEEDED | 2018-12-22 09:56:25 | 2018-12-22 09:56:26 |
| INSTALL          | ✅  SUCCEEDED | 2018-12-22 09:56:26 | 2018-12-22 09:56:26 |
| PRE_BUILD        | ✅  SUCCEEDED | 2018-12-22 09:56:26 | 2018-12-22 09:56:31 |
| BUILD            | ‼️   FAILED    | 2018-12-22 09:56:31 | 2018-12-22 09:56:32 |
| POST_BUILD       | ‼️   FAILED    | 2018-12-22 09:56:32 | 2018-12-22 09:56:32 |
| UPLOAD_ARTIFACTS | ✅  SUCCEEDED | 2018-12-22 09:56:32 | 2018-12-22 09:56:32 |
| FINALIZING       | ✅  SUCCEEDED | 2018-12-22 09:56:32 | 2018-12-22 09:56:34 |
| COMPLETED        | N/A           | 2018-12-22 09:56:34 | N/A                 |
+------------------+---------------+---------------------+---------------------+

あらー, 見事に BUILD フェーズで FAILED になっていることが判ります. 正常にビルドが終了するように Dockerfile を修正して, 再度, ビルドしてみたいと思います.

$ bibuild -zip -put -build
✅  ソースファイルの zip 圧縮に成功しました.
✅  ソースファイルの S3 へのアップロードに成功しました.
✅  ビルドを開始しました. Project Name: codebuild-docker-build-project, Build ID: codebuild-docker-build-project:aa626cb1-7395-4e9a-8910-aa85091853af

ステータスを確認してみます.

$ bibuild -stat=codebuild-docker-build-project:aa626cb1-7395-4e9a-8910-aa85091853af
Build ID: codebuild-docker-build-project:aa626cb1-7395-4e9a-8910-aa85091853af
Build Status: IN_PROGRESS
+--------------+---------------+---------------------+---------------------+
|     名前     |  ステータス   |      開始時刻       |      終了時刻       |
+--------------+---------------+---------------------+---------------------+
| SUBMITTED    | ✅  SUCCEEDED | 2018-12-22 10:00:13 | 2018-12-22 10:00:13 |
| QUEUED       | ✅  SUCCEEDED | 2018-12-22 10:00:13 | 2018-12-22 10:00:15 |
| PROVISIONING | N/A           | 2018-12-22 10:00:15 | N/A                 |
+--------------+---------------+---------------------+---------------------+

まだ, ビルド中のようですね.

$ bibuild -stat=codebuild-docker-build-project:aa626cb1-7395-4e9a-8910-aa85091853af
Build ID: codebuild-docker-build-project:aa626cb1-7395-4e9a-8910-aa85091853af
Build Status: SUCCEEDED
+------------------+---------------+---------------------+---------------------+
|       名前       |  ステータス   |      開始時刻       |      終了時刻       |
+------------------+---------------+---------------------+---------------------+
| SUBMITTED        | ✅  SUCCEEDED | 2018-12-22 10:00:13 | 2018-12-22 10:00:13 |
| QUEUED           | ✅  SUCCEEDED | 2018-12-22 10:00:13 | 2018-12-22 10:00:15 |
| PROVISIONING     | ✅  SUCCEEDED | 2018-12-22 10:00:15 | 2018-12-22 10:00:35 |
| DOWNLOAD_SOURCE  | ✅  SUCCEEDED | 2018-12-22 10:00:35 | 2018-12-22 10:00:36 |
| INSTALL          | ✅  SUCCEEDED | 2018-12-22 10:00:36 | 2018-12-22 10:00:36 |
| PRE_BUILD        | ✅  SUCCEEDED | 2018-12-22 10:00:36 | 2018-12-22 10:00:41 |
| BUILD            | ✅  SUCCEEDED | 2018-12-22 10:00:41 | 2018-12-22 10:01:15 |
| POST_BUILD       | ✅  SUCCEEDED | 2018-12-22 10:01:15 | 2018-12-22 10:01:16 |
| UPLOAD_ARTIFACTS | ✅  SUCCEEDED | 2018-12-22 10:01:16 | 2018-12-22 10:01:17 |
| FINALIZING       | ✅  SUCCEEDED | 2018-12-22 10:01:17 | 2018-12-22 10:01:19 |
| COMPLETED        | N/A           | 2018-12-22 10:01:19 | N/A                 |
+------------------+---------------+---------------------+---------------------+

おおー, 正常にビルドが完了したようです.

以上

俺のクソコードシリーズ, 第 N 弾である, bibuild をご紹介しました. 完全に俺得でしかないツールですが, コマンド一発で zip で圧縮して S3 にアップロードしてビルドまで実行してくれるので, docker build を叩くのとそれほど変わらない気軽さはあるかなあと思っています.

もし, よろしければ, お手元にダウンロード頂きましてお試し頂ければ幸いです.

2018 年 12 月 21 日 (金)

ジョギング

  • 山王公園往復
  • 懸垂 5 回
  • やっぱり, 左足踝周りが...

日課

  • お休み

今年も...

あと, 残すところ 10 日を切ったぞ...おい.

来週は

  • 火曜日, 水曜日とお休みを頂いて, 溜まっている手続きとかを済ませたい

2018 年 12 月 20 日 (木)

ジョギング

  • 左足のくるぶしの周りもだけど, 右足の甲にも強い痛みがあるのでお休み

日課

  • お休み

今年最後の JAWS-UG 福岡もくもく会

jaws-ug-kyushu.doorkeeper.jp

クラスメソッドさんの会議室をお借りしての開催. コアメンバーだけの参加だったけど, ワイワイ色々と話しが出来て楽しかった. 来年も宜しくお願いいたします.

夕飯

遅い夕飯は美人居酒屋にて.

おでんについて研究している。