kakakakakku blog

Weekly Tech Blog: Keep on Learning!

ローカル環境で使うオレオレ認証局とオレオレ証明書を簡単に作れる mkcert を試した

ローカル環境で使うオレオレ証明書を簡単に「保護された通信」に切り替えることができるコマンドラインツール「mkcert」を試した.先月に GitHub Trending に入っていて知ったのと,自分のローカル環境でオレオレ証明書を使っているときに,Chrome で警告が出ていたので(この接続ではプライバシーが保護されません),そのあたりを全て解決することができた.とにかく便利!

github.com

インストール

今回は brew で Mac にインストールした.既に brew に対応している.

$ brew install mkcert

最近,リリースタグにバイナリが含まれているので,もし Linux 環境で使う場合は,以下のように取得する.

$ wget -O /usr/local/bin/mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.0.0/mkcert-v1.0.0-linux-amd64

仕組み

詳しくは mkcert の README を読んでもらうとして,ザックリと仕組みを説明すると,単純にオレオレ証明書を作るのではなく,Mac 上にオレオレ認証局を作り,そこで署名をしている.このあたりの面倒な手順を全てコマンドラインツール側でやってくれている点がポイント.Mac で「キーチェーンアクセス」を開くと,確かに「ルート認証局」が追加されていた.

f:id:kakku22:20180727115432p:plain

手順

まず,認証局を作る.-install オプションを見て,個人的にはハイフンが1個なのが少し気になるけど...!

$ mkcert -install
Using the local CA at "/Users/kakakakakku/Library/Application Support/mkcert" ✨
The local CA is now installed in the system trust store! ⚡️

次に,証明書を作る.ドメイン固定でも良いし,サブドメインをワイルドカードにすることもできる.

# ドメイン固定の場合
$ mkcert local.kakakakakku.com
Using the local CA at "/Users/kakakakakku/Library/Application Support/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "local.kakakakakku.com"

The certificate is at "./local.kakakakakku.com.pem" and the key at "./local.kakakakakku.com-key.pem"# ワイルドカードの場合
$ mkcert *.kakakakakku.com
Using the local CA at "/Users/kakakakakku/Library/Application Support/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "*.kakakakakku.com"

The certificate is at "./_wildcard.kakakakakku.com.pem" and the key at "./_wildcard.kakakakakku.com-key.pem"# キーペアが作られる
$ ls -1 *.pem
_wildcard.kakakakakku.com-key.pem
_wildcard.kakakakakku.com.pem
local.kakakakakku.com-key.pem
local.kakakakakku.com.pem

nginx で検証する

Vagrant 上に nginx を構築して,実際にオレオレ証明書(今回はワイルドカード)を試してみた.以下に nginx.conf の一部を載せている.

server {
    listen 443 ssl;
    ssl_certificate _wildcard.kakakakakku.com.pem;
    ssl_certificate_key _wildcard.kakakakakku.com-key.pem;
}

すると「保護された通信」で接続することができた.

f:id:kakku22:20180727115444p:plain

また「証明書」も確認することができた.

f:id:kakku22:20180727115453p:plain

まとめ

  • ローカル環境でオレオレ証明書を使っているけど,Chrome で警告が出ている人は多いと思う
  • mkcert を使えば,簡単にオレオレ認証局とオレオレ証明書を作ることができる

とにかく便利!

たった 19.9MB!mkr の公式 Docker イメージが公開された

今月のアップデートで,Mackerel コマンドラインツール mkr の公式 Docker イメージが公開された.

mackerel.io

mkr monitors { pull / diff / push }

2年前に記事を書いているけど,CircleCI と mkr を組み合わせて Infrastructure as Code にした Mackerel の監視ルールを CI で回している.検証などで,一時的に修正した監視ルールがそのまま残ってしまうことを検知できるので,非常に便利!

kakakakakku.hatenablog.com

ただし,8月末で CircleCI 1.0 のサポートが終了してしまうため,今までの仕組みをコンテナ化して,CircleCI 2.0 に対応させる必要があった.

circleci.com

kakakakakku/mkr

5月時点では,まだ mkr の公式 Docker イメージが公開されていなかったため,自分で Dockerized して,Docker Hub に公開した.

github.com

Dockerfile は非常にシンプルで,Go の Alpine イメージに mkr をインストールしている.

FROM golang:alpine3.7

RUN apk add --no-cache git
RUN go get github.com/mackerelio/mkr

ENTRYPOINT ["mkr"]

CircleCI 2.0 の設定 .circleci/config.yml もシンプルで,Dockerized した mkr を実行している.

version: 2

jobs:
  mkr-monitors-diff:
    docker:
      - image: kakakakakku/mkr
    steps:
      - checkout
      - run: mkr -v
      - run: mkr monitors diff -e -F monitors/monitors.json

workflows:
  version: 2
  ci:
    jobs:
      - mkr-monitors-diff

mackerel/mkr

そこで,今回やっと公式 Docker イメージが公開されたので,自分で Dockerized したイメージを捨てることができる.

github.com

なんと言っても,公式 Docker イメージは「19.9MB」という,圧倒的な軽さになっている.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mackerel/mkr        latest              3ce3d6655439        2 weeks ago         19.9MB
kakakakakku/mkr     latest              74807be95079        7 weeks ago         538MB

その秘密は Docker の「multi-stage builds」を使っているところで,以下の Dockerfile を見るとわかるように FROM が2個ある.簡単に言うと golang:alpine3.7 でバイナリを生成しながら,イメージはバイナリを配置した alpine:3.7 になっている.よって,Go 環境を捨てることができ,Alpine + バイナリだけになる.最高!

FROM golang:alpine3.7
RUN apk add --no-cache make git
WORKDIR /go/src/github.com/mackerelio/mkr/
COPY . .
RUN make build

FROM alpine:3.7
RUN apk add --no-cache ca-certificates
COPY --from=0 /go/src/github.com/mackerelio/mkr/mkr /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/mkr"]

「multi-stage builds」の詳細は,公式ドキュメントに載っている.

docs.docker.com

まとめ

  • CircleCI と mkr を組み合わせて,Mackerel の監視ルールを CI で回すと便利
  • CircleCI 2.0 に対応させるためにコンテナが必要で,今後は公式 Docker イメージが使える
  • mkr monitors 以外にもオペレーションを効率化できる機能がたくさんあるため,公式 Docker イメージの公開は嬉しい!

各社の Redash 運用 Tips を知れた「Redash Meetup 3.0.0」だった

参加してから1週間たってしまったけど「Redash Meetup 3.0.0」のレポートを書く.Redash Meetup のコミュニティ立ち上げを手伝わせてもらったのが去年12月で,早くも6回目のイベント開催を実現できているし,参加者もどんどん増えているし,ああ,大きくなったなぁーとしみじみ感じていた.

redash-meetup.connpass.com

受付

今回も受付を担当させてもらった.コミュニティ運営者なら事前に見込んでいると思うキャンセルだけど,今回もそこそこ多かった.とは言え,過去最大の参加者が集まっていて,Redash の盛り上がりを感じることができた.

  • 一般参加枠 : 60
    • 参加 : 58
    • キャンセル : 40
  • イベント関係者枠 : 8
    • 参加 : 8

Redash の API 活用事例

  • Redash API で様々な操作ができる
    • クエリ情報取得
    • クエリ結果取得
    • などなど
  • エンドポイントの一覧は redash/handlers/api.py を見る
  • クエリの差分管理を GitHub で行う

Redash API のエンドポイント一覧が載ったドキュメントがなく,結局 redash/handlers/api.py を見るというのは,超あるあるで笑ってしまった.Redash のクエリは変更履歴が残らないため,自動抽出して GitHub に残す仕組みは素晴らしいし,会社的に重要なクエリが壊れるとリスクなので,もっと詳細を聞きたかった.とは言え,基本的には他人のクエリを修正できず,フォークを使うので,少人数だからこそ相互編集ができる権限設定にしてる感じかな?

みんなが Redash を気持ちよく使うやり方を考える

  • 社内でハンズオンを実施した
    • 非エンジニアも含めて,もっと気軽に Redash に触れられる雰囲気を作った
    • 自由に質問できる Slack チャンネルを作った
  • クエリ乱立問題を改善した
    • カテゴリを設定した(大カテゴリ/中カテゴリ)
    • Redash の queries テーブルを使って,クエリ一覧を取得するクエリを作成した

Redash を導入したフェーズから,積極的に運用を回していくフェーズに移行するときに,必ず問題になる「クエリ乱立問題」にどう向き合ったのかという運用 Tips を聞くことができた.ある程度の規模になると,カテゴリなど,命名規則で戦うことになるのは必須で,さらにルールの脱線を見逃さないように誰かしら警察👮になると思う.メタテーブルを活用して「クエリ一覧を取得するクエリ」を作っているあたりは,上手な運用だなと思った.導入フェーズでは,僕の「Redash ハンズオン」を活用して頂いたとのことで,あざます!

Hidden gems in Redash

  • Query Results データソース
    • SQLite の構文で,クエリ結果に対して,クエリが実行できる機能
  • Python Results データソース
  • Url Results データソース
    • Redash Style な JSON を返す API にクエリを実行できる
    • Script Results データソース
    • Querying URLs | Redash

マニアックなデータソースの詳細解説で,使ったことがないものもあり,深みがすごかった.Url Results は知っていたけど,実際に仕事で使う場面がなく,もしあれば聞いてみたい.

Redash 運用に付きまとう課題とその解決方法

  • Pairs 管理画面の代替として,Redash が候補に挙がった
  • クエリ増殖期
    • 命名ルールで整理する(しかし,途中で運用が止まった)
    • BI チームが承認すると [公式] マークを付けられる
    • グラフ線の配色ルールを決めた
  • API 多用期
    • Google SpreadSheet を併用して,可視化を進めた
    • Redash のキューが詰まった
    • できる限り,スケールアップをした
  • Tableau 併用期
    • KPI を深掘るときは Tableau を使っている

会社の規模が大きくなると,運用も大変だし,Tableau を併用したりするんだなーと,聞いていて感じた.クエリに [公式] マークを付けるという運用は超良さそうで,その視点は今までなかった!あとグラフ線の配色ルールも,デフォルトのまま使うことが多かったので,これも目から鱗だった.

Speaker Deck

公開された資料,参加レポートなどを見ていて,Speaker Deck の闇がまだ知られていなさそうなので,2記事を貼っておく.タイトルだけじゃなく,Hatena Blog の Embed も最近はうまく動かないので,知っておくと良いと思う!

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

Redash ハンズオン

イベント中に 100 Star 🌟 達成!Redash 導入フェーズで是非活用頂けると!

github.com

関連記事

ariarijp.hatenablog.com

プロジェクトの成功を支える ZenHub と モブプログラミング

今日は「ランサーズ開発ランチ」で登壇をしてきた.依頼を受けたテーマは「プロジェクトリード」だったけど,最近登壇しているものを再演しても,既視感があるかなと思って,今回はあえて「ZenHub」「モブプログラミング」を詳細に深掘るテーマにした.質疑応答も多くて,素晴らしい雰囲気だった!

lancers-engineer.connpass.com

発表資料

関連記事

モブプログラミングの基礎を学べる「Getting Started with Mob Programming」の書評は別の記事にまとめている.今日見たところ,既に Retired になっていて,販売中止になっていた!6月まで買えたのに...!

kakakakakku.hatenablog.com

「プロジェクトリード」に関しては,以下の2記事が参考になると思う.

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

レポート記事

engineer.blog.lancers.jp

syossan.hateblo.jp

楽しく!アウトプットを習慣化しよう

今日は大阪出張で「DevLOVE 関西」のイベントに参加予定だったけど,豪雨の影響でイベントが中止になってしまった.今回イベントに誘って頂いた @yohhatu さん,本当にありがとうございました!

devlove-kansai.doorkeeper.jp

発表する予定だった資料

せっかく作った資料なので,このままお蔵入りにするのではなく,公開することにした.ストーリーの軸は「なぜアウトプットを習慣化するべきなのか?」という点で,特に今回は「ブログ」にフォーカスを当てている.

ブログメンター

去年末から趣味(ボランティア)で取り組んでいる「ブログメンター(アウトプットメンター)」の話もする予定だった.特に「ブログネタ探し」のプロセスは面白いと思っていて,最初にメンティに「最低20個」出してもらって,それをさらにブラッシュアップして「30-50個」まで増やす.重要なのは「これもブログネタになるんだ!」という気付きの部分で,そこに気付いてしまうと,あとは自律的に「ブログネタ探し」ができるようになる.メンタリングでは「ブログネタがないから書けない」という理由(言い訳)を排除していくことからスタートする.

f:id:kakku22:20180706182720j:plain

Requirements 駆動 ネタ探し

メンタリングの中で「Requirements 駆動 ネタ探し」を紹介する場合もあるので,今回の発表で話をする予定だった.詳しくは発表資料に書いてある通りで,興味のある会社の「エンジニア募集ページ」に書いてある Requirements と自分のスキルを比較することで,不足しているな!と感じるスキルがあれば,それこそが「ブログネタ」になる.僕自身も定期的に「Requirements 駆動 ネタ探し」をしている.

f:id:kakku22:20180706182748j:plain

@year_progress をフォローしよう!

twitter.com

僕の大好きな Twitter アカウントに @year_progress がある.これは,名前の通り,1年間の経過を教えてくれるので,例えば「今年ももう 50% 終わったけど,成長実感ある?時間を無駄にしてない?」など,自分自身にプレッシャーを掛けることができる.フォローするだけで,意識が高まるので,本当にオススメ!

f:id:kakku22:20180706182825j:plain

まとめ

「DevLOVE 関西」のイベント中止は残念だったけど,安全第一なので,素晴らしい判断だと思う.僕は新大阪に向かう新幹線の中で緊急停止となり,数時間待っているけど(今もまだ待っている),その時間を無駄にせずブログを書けたから良かった.ブログ,アウトプット全般に悩んでいる人がいれば,去年に発表した資料(今回の資料のベースになっている)も参考になると思うので,是非合わせて見てもらえると!

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com