GeekFactory

int128.hatenablog.com

二回目の育休日記(生後8ヶ月)

娘3歳半、息子8ヶ月になりました。 int128.hatenablog.com int128.hatenablog.com 近況 最近は以下のようなスケジュールで生活しています。 7:00 起床 8:40 保育園に送る 9:00-11:30 パパの自由時間 昼食 ママの自由時間 15:40 保育園にお迎え 21:30 就寝 3…

GitHub APIでリポジトリにファイルをコミットするコマンドを作った

GitHub APIを利用してリポジトリにファイルをコミットするコマンド ghcp を作りました。シングルバイナリでgitコマンドに依存しないため、リリースなどでCIからリポジトリのファイルを書き換えたい場合に便利です。 github.com 使い方 GitHub Releasesもしく…

Zaimからスプレッドシートへの転記に使えるChrome Extension

Zaimの履歴をGoogleスプレッドシートやExcelなどに転記するためのChrome Extension「zaimsheet」を作りました。 chrome.google.com zaimsheetをインストールすると、Zaim Web版の履歴画面に「スプレッドシート形式」というボタンが追加されます。このボタン…

uber-go/dig を使う

GoのDIコンテナ実装である uber-go/dig を使ってみました。 github.com 基本的な使い方はGoDocに書いてあります。あえて3行にまとめると以下になります。 c := dig.New() c.Provide(func (/* 生成に必要な型... */) /* 生成される型 */ { /* 生成処理 */ }) …

Cloud Buildで任意のシェルスクリプトを実行する

Google Cloud Buildでは公式のイメージが数多く提供されており、コマンドに対応するイメージを指定する形になっている。例えば、gcloud コマンドを使いたい場合は以下のように gcr.io/cloud-builders/gcloud イメージを指定すればよい。 steps: - name: gcr.…

二回目の育休日記(生後3ヶ月)

娘3歳、息子3ヶ月になりました。 最近は以下のスケジュールで生活しています。 7:00 起床 3人分の朝食を作る 着替え、顔を洗う、歯磨き(自分) 娘を起こす 朝食を食べる 着替え、顔を洗う、歯磨き(娘) 食器を洗う 保育園の荷物をまとめる 8:45 出発 9:00 …

Go Modulesに移行した

GitHubで公開しているツールをGo Modulesに移行したので、やったことをメモしておきます。 ソースコード これまではGOPATHの内側(e.g. ~/go/src/github.com/int128/example)に作業フォルダを置く必要がありましたが、Go Modulesに移行するとGOPATHの外側で…

二回目の育休日記(生後1ヶ月)

第二子が生まれてから1ヶ月が経ったので記録を残しておく。 産前産後 今回は里帰りではなく東京で出産することにしたので、生まれる前から休むことにした。男性の場合は産前産後休業がないため、子どもが生まれてからでないと育休を取得できない制約がある。…

NGINX Ingressで複数ドメインを1つのALBに集約する

AWSでKubernetesを利用する場合、Ingress Controllerの選択肢にはaws-alb-ingress-controllerやkube-ingress-aws-controller、nginx-ingressなどがあります。 aws-alb-ingress-controllerやkube-ingress-aws-controllerではKubernetesのレイヤでALBを管理で…

HackMDでGitLab認証を利用する

HackMDは同時編集が便利なコラボレーションツールです。HackMDは認証なしでも十分に使えますが、外部認証を利用するとさらに便利に使えます。公式リポジトリのドキュメントによると、HackMDは以下の認証方式に対応しています。 GitHub Twitter GitLab (self …

WZR-HP-AG300Hのファームウェアを書き換える (macOS)

macOSでWZR-HP-AG300Hのファームウェアを書き換える方法を説明します。DD-WRTの書き込みや純正ファームへの書き戻しに使えます。 まず、WZR-HP-AG300HのLAN側ポートを有線LANでMacBookに接続します。IPアドレスは以下を設定します。 IPアドレス: 192.168.11.…

TerraformでプライベートサブネットとNATゲートウェイを管理する

AWSのNATゲートウェイ構成をTerraformで管理する方法を調べたのでまとめます。 NATゲートウェイ構成とは下記のような構成を指します。 次の図は、NAT ゲートウェイを使用した VPC のアーキテクチャを示しています。メインルートテーブルは、プライベートサブ…

Googleフォトに写真をアップロードするツールを作った

Googleフォトに写真をアップロードするコマンドラインツールを作りました。 github.com このツールは先月に公開されたGoogle Photos Library APIを利用しています。 Getting Started APIにアクセスできるように初期設定が必要です。 https://console.cloud.g…

Google Photos Library APIで写真をアップロードする

Google Photos Library APIが使えるようになったので、写真のアップロードを試してみました。 アクセストークンの取得 https://console.cloud.google.com/apis/credentials から新しいOAuth Clientを追加します。Client IDとClient Secretが表示されるのでメ…

Debian and Kubernetes optimized Kernel in kops

kopsが利用するAMIについて調べたのでまとめておく。 kopsでサポートされているOSは https://github.com/kubernetes/kops/blob/master/docs/images.md に書かれている。デフォルトではDebianが選択される。他にCoreOS、Ubuntu、CentOS、RHELがサポートされて…

Slack公式のJIRA連携機能を試した

Slackが公式に公開しているJIRA連携機能を試してみました。 get.slack.help JIRA連携機能はJIRA CloudとJIRA Serverに対応しています。今回は個人で運用しているJIRA Serverを利用しました。 以下の手順でSlackとJIRAを連携できます。詳しくは公式ページを参…

開発基盤ツールのHelm charts

開発基盤ツールをKubernetesで運用する時に使えるHelm chartsを調べたのでまとめました。開発支援ツールやDevOpsツールという言い方もあるかもしれません。 Atlassian JIRA Software オフィシャルのHelm chartやDockerイメージはありません。検索したところ…

Helmfile supports inlined values in YAML

HelmfileはKubernetesクラスタのHelm releasesを管理するツールです。 helmfile.yaml にデプロイしたいHelm chartを書いて helmfile sync を実行するだけでインストールやアップグレードを冪等にやってくれるので便利です。 例えば、Kubernetes DashboardとH…

Read dynamic type values from YAML in Golang

GolangでYAMLを読み込む際、要素の型が実行時に決まる場合を考えます。例えば、以下のYAMLでは values で数値、文字列、マップの値が列挙されています。 values: - 100 - foo - key: value このようなYAMLを読み込む場合、型宣言を interface{} にすると実行…

kubectl getでカスタムカラムを表示する

kubectl getはデフォルトでは以下のカラムを表示するが、どのカラムを表示するかはオプションで変更できる。 % kubectl get po --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE 特定のカラムを表示するには -o custom-columns オプションを渡せ…

Upgrade to Kubernetes 1.9 using kops

個人用のKubernetesクラスタを1.9.3に更新したのでログを残します。 % kops version Version 1.9.0 kops upgrade cluster コマンドでS3の構成情報を更新します。 % kops upgrade cluster Using cluster from kubectl context: hello.k8s.local ITEM PROPERTY…

AWS CodeBuildとJenkinsの連携

TL;DR AWS CodeBuildとJenkinsを連携させると、これまでJenkins Agentで実行していたビルド処理をAWS CodeBuildに置き換えることができます。以下のメリットがあります。 AWS CodeBuildは無限に*1スケールするので、ビルドキューの待ち行列がなくなる ビルド…

AWS CodeBuildとGitBucketの連携

TL;DR GitBucketはGitHub API互換なので、GitHub Enterpriseとして振る舞うことができる。 AWS CodeBuildはGitHub Enterpriseに対応している。 CodeBuildからGitBucketにgit cloneしてビルドを実行できる。 今のところWebhookは使えない。 Getting Started G…

新しい技術を学ぶ時のアプローチ

新しい技術を学ぶ時にどのようなアプローチを踏むことが多いのか書き出してみました。具体的には、新しい言語、フレームワーク、インフラ、アーキテクチャ、プロセス、考え方などを学ぶことを考えます。 名前を知る(ポータル、SNS、Podcast等) 特徴を知る…

GradleからNexusに成果物を公開する

TL;DR Gradle 4, Nexus 3を前提とする。 Gradleに標準で含まれる maven-publish プラグインを利用してNexusに成果物を公開できる。追加のプラグインは必要ない。 Gradleの repositories ブロックでNexusのリポジトリURLを指定する。成果物の公開、取得ともに…

特定URLへのアクセスを契機としたHTTPサーバのGraceful Shutdown

Goで特定のURLへのアクセス(例:GET /shutdown)を受けたらHTTPサーバを停止するにはどうすればよいか考えてみました。 HTTPサーバを停止する http.Server にはGraceful Shutdownを行う Shutdown メソッドがあります。/shutdown へのリクエストを受けた契機…

Visual Studio Code on Windows Subsystem for Linux

wsl

TL;DR Windows 10 build 17120から、Visual Studio Code for Linux(vscode)がWindows Subsystem for Linux(WSL)で動くようになります。 Windows 10 Build 17120のWSL (Debian)でVisual Studio Codeが動いた!うれしい!— int128 (@int128) 2018年3月20日…

kubeloginコマンドを利用してOpenID ConnectでKubernetesにアクセスする

TL;DR Kubernetesの認証はクライアント証明書やID/パスワードだけでなく、OpenID Connectに対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定が必要になる。 Keycloak(OpenID Connect IdP) kube-apiserver(…

KeycloakのOpenID ConnectでKubernetes Dashboardにアクセスする

TL;DR Keycloakはオープンソースの統合ID管理ツールでOpenID ConnectやSAMLに対応している。 Kubernetes DashboardはOpenID ConnectのIDトークンによる認証に対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定…

Gradle Swagger Generator PluginがSwagger UI 3に対応

Gradle Swagger Generator Plugin 2.10.0をリリースしました。 github.com 新しいリリースではSwagger UI 3に対応しました。Swagger UI 3になってから使い勝手が大きく改善されています。 このプラグインを利用すると、下記のようなビルドスクリプトを書くだ…