はてなの金次郎

とあるエンジニアの技術系ブログ

「エンジニアリング組織論への招待」から学んだこと。

概要

  • 著作: 「エンジニアリング組織論への招待」
  • 著者: 広木大地
  • 著者経歴:
    株式会社レクター取締役。2008年に新卒第1期として株式会社ミクシィに入社。同社のアーキテクトとして、技術戦略から組織構築などに携わる。同社メディア開発部長、開発部部長、サービス本部長執行役員を務めた後、2015年退社。現在は、株式会社レクターを創業し、技術と経営をつなぐ技術組織のアドバイザリーとして、多数の会社経営支援を行っている。

要約

未来や他人に対する不安という不確実性を削減することが「エンジニアリング」である。効果的なエンジニアリングには、活用するべきフレームワークが多々存在する。システム思考、メンタリング、アジャイル、OKRなどである。これらを活用したエンジニアリングによって、企業活動における不確実性を削減し続ける必要がある。

面白かった章とその理由

Chapter 1 思考のリファクタリング

「エンジニアリング」は、不確実性を下げ、情報を生み出す過程です。自分自身がどのように本能に囚われるのかを知り、仮説と検証を通じて、未来の不確実性を下げていきながら、同じ目的で働いているはずの人々との間にあるコミュニケーションの不確実性をも減らしていく必要があります。

「不確実なものに向き合う考え方」を身につけるべきという本書の主張には驚かされました。

今まで学校でも会社でも、さらにはどの本でも教えてくれなかった考え方だったからです。

自分にとって新しい考え方だったのにも関わらずすんなりと飲み込めたのは、今までの自らの問題解決の対処が本書ではアンチパターンとして紹介されていたからです。

まさに見透かされているような気分でした。

「なるほど、だからうまくいかなかったのか。」と納得すると同時に、さまざまな問題(不確実性)に立ち向かう方法や考え方を学ぶことができました。

わからないことや不安なことにぶつかったとき、どんな種類の不確実性なのかを見極め、適切な対処や思考ができるように、本書を参考にしながら経験を積み重ねていきたいです。

仕事に活かせそうな知識、活かせそうな状況と活かし方

  • 3つに大別される不確実性を下記の手法を活用して削減する
  • 目的不確実性
    • マーケットに対する不安を低減させる活動をする
  • 方法不確実性
    • スケジュールに対する不安を低減させる活動をする
      • プロジェクトバッファ
      • 多点見積もり
      • 不安なタスクの順に問題解決をする
      • プランニングポーカー
      • ヴェロシティ
  • 通信不確実性
    • 情報の非対称性と限定合理性を低減させる活動をする
      • メンタリング
      • 継続したコミュニケーション
      • アジャイルな方法論(少人数の対話を重視する / 役割で関係性を縛らない)

レポート作成方法

@ledsun blog「新人エンジニアにレポートを書かせて技術書の読み方を伝える。」という記事で紹介されているレポート作成方法を使わせていただきました。

「第1回 はじめてのCircleCIウェビナー」を聴講しました

@CircleCI Japan@kurumaiさん による「第1回 はじめてのCircleCIウェビナー」を聴講しました。

circleci.connpass.com

CI/CDとは何ぞという部分からなぜやる(流行っている)のか、CircleCIではどう実現するのかということが丁寧にまとまっていてとても勉強になりました。

SSHデバッグや並列処理に関しては知らなかったので、これからもっと活用していきたいです。 第1回ということなので2回、3回とあるんだと思いますが、次回以降も楽しみです!

スライド

speakerdeck.com

以降はスライドのメモです。

DevOpsの歴史

  • 1970~: Waterfall
  • 1994~: Automated Testing & Continuous Integration
  • 2001~: Agile Software Development
  • 2010~: Continuous Delivery & Deployment

CI/CDとは

  • CI(Continuous Integration)
  • CD(Continuous Delivery/Deployment)

CIとは

  • What?
    • 全ての開発者が共有リポジトリにコミットを積み重ね、全てのコミットをトリガーにしてビルドとテストを繰り返すこと。
  • Why?
    • チームの生産性・効率・満足度をあげるため。
    • 品質をあげ、スピードをあげ、より安定した製品を生み出すため。

CIでできること(=CircleCIでできること)

CIが解決する問題

  • 全てのコミットに対してCIする
    • 早い段階でバグを発見できる
    • 設定で制御可能
  • 静的解析などで標準化
    • コードの品質UP
  • テスト失敗したコードのマージブロック
    • masterブランチの安全保証
    • 人間によるコードレビューだけでなく機械的にも実施する

CDとは

  • (狭義の)Continuous Delivery
    • 常にリリース可能な状態を維持する
  • Continuous Deployment
    • 自動でステージング・本番環境へデプロイする
    • 必ず本番環境まで自動でデプロイするべきかはプロダクトの制約などにもよる
    • 切り戻しも自動化できる

とは言ってみたものの

  • 色々な定義がありそう
  • 大事なのはCDを考えるときにステップを刻むこと、ステークホルダーを巻き込むこと(一足跳びに本番自動デプロイは難しい)

Puppet: State of DevOps Report 2018

puppet.com

  • Puppet社が30,000人に対する調査結果を公開(内、6-7%が日本)
  • 業績が上がった上位11%を「高」、下位10%を「低」、それ以外を「中」で分類
  • 業績が高い企業の大多数がテストパターンとデプロイパターンを「いつも」または「ほとんど」再利用していると回答

5 Metrics You Should Know to Understand Your Engineering Efficiency

  1. Commit-to-Deploy Time(CDT)
    • コードがコミットされてからデプロイされるまでの時間
  2. Build Time
    • CIビルドに掛かる時間
  3. Queue Time
    • CIビルドが始まるまでに待たされる時間
  4. How often Master is Red
    • masterブランチが壊れている時間
  5. ngineering Overhead
    • ツールのメンテナンスなど開発以外にかかっている時間

PDF: https://www2.circleci.com/rs/485-ZMH-626/images/5-Key-Metrics-Engineering.pdf

CircleCIは・・・

  • Dockerをサポートしていて、高速にビルド環境を立ち上げることができ、
  • .circleci/config.ymlでテスト環境を統一することができ、
  • ワークフローでジョブを連結することができ
  • SSHデバッグ機能などでビルドエラーをすばやく取り除き、
  • 複数のキャッシュ機構でビルドを高速化することができ、
  • Orbsを使って簡単にデプロイできる

Dockerサポート

  • CircleCIはネイティブでDockerをサポートしています。
  • VMによるCIと比べて非常に早く環境を立ち上げることが可能。

.circleci/config.ymlでテスト環境を統一

CircleCIの思想

  • コンフィグはファイルに書かれるべき(コードと同じくレビューとバージョン管理を行う)
  • 明示的であるべき
  • その結果、デメリットも
    • 1から設定を書かないといけない
    • 冗長になる

ワークフロー

  • スケジューリング
  • マニュアル承認
  • ブランチ指定
  • タグ指定

SSHデバッグ

ビルドに失敗した場合など、SSHデバッグをOnにして再実行することで、ビルド終了後2時間、もしくはSSHセッションが終わって10分間まではコンテナを起動した状態で維持する。

ビルドの高速化(キャッシュ)

  • 同一間ジョブのキャッシュ
    • ワークフローが繰り返し実行される中で、同一ジョブで利用される永続データを使い回す
    • ex.)依存ライブラリのキャッシュ
  • 同一ワークフロー内のキャッシュ
    • 同一ワークフロー内の異なるジョブ間でデータを共有する
    • ex.)ビルド結果を渡してテスト・デプロイ

ビルド高速化(並列処理)

https://circleci.com/gh/kurumai/circleci-step-by-step/210

設定のパッケージングと再利用(Orbs)

  • Orbsとは、CircleCIの設定を再利用し、さらにそれを自由に配布する仕組み
  • Orbsを使うと他の人が書いたCircleCIの設定をプロジェクトの.circleci/config.ymlに差し込むことができる
  • Orbs Registry
    • Cetified(CircleCI), Partner(CircleCI認定パートナー), 3rd party(その他)

「DNSをはじめよう」から学んだこと。

概要

要約

ドメインを実際に一つ購入して手を動かしながらDNSの仕組みを解説する。また、各DNSレコードを実際のシチュエーションを交えながら読み解くことで意味や活用方法などを理解する。

面白かった章とその理由

CHAPTER4 digとwhoisを叩いて学ぶDNS

digとwhoisコマンドを叩きながらDNSレコードの意味や活用方法を体感できましたし、よくあるハマりどころやその解決方法もあり実践的な内容でした。また、インプットした内容を直後のドリルで試せて効率よく学習できた気がします。

理解できなかった章とその理由

CHAPTER4 digとwhoisを叩いて学ぶDNS

実際に購入したドメインに各DNSレコードを設定して挙動を確認するということをやるとなお理解が進みそうだなと思いました。(自分でやってみます。)

また、Route53のAliasレコードを活用したCDNの設定に関して仕組みはなんとなく理解できたのですが、実際にどうやるんだろうというのがすごく気になったのでこれも後日自分でやってみたいです。

仕事に活かせそうな知識、活かせそうな状況と活かし方

  • 特にこだわりがなければドメインの購入はお名前.comがよい
  • ドメインに紐づくIPアドレスを調べたいとき、あるいはIPアドレスに紐づくドメインを調べたいときはdigコマンドを使用する
  • hostやnslookupよりdigがいい
  • ドメインの所有者や有効期限を調べるときはwhoisコマンドを使用する
  • 例示やテストで利用してよいドメインは決められており、それ以外を使うとトラブルの元になる

レポート作成方法

@ledsun blog「新人エンジニアにレポートを書かせて技術書の読み方を伝える。」という記事で紹介されているレポート作成方法を使わせていただきました。