Magiskのroot化を維持したままOTAアップデートする

Magiskでroot化するとOTAアップデートが無効化されるため、セキュリティパッチなどのOSのアップデートを行うことができなくなります。 しかし、適切な手順を踏むことでroot化を維持したままOTAアップデートを行うことができます。 検証環境 Pixel3 Android 1…

Magiskでroot化したPixel3のテザリング制限を解除する

民泊系と呼ばれるSIMを使っている場合、制限がかかっていてテザリングをすることができません。 しかしMagiskでroot化していればこの制限を解除でき、民泊系の数百GB/月という容量を使ってテザリングをすることができます。 前提 Pixel3 (XL) Android 10 必…

MacのCLI環境の構築を自動化する

前回、IDEをやめてvim-lspと独自コマンドに移行したことを紹介しましたが、あれだけだと少し問題があります。 akaimo.hatenablog.jp PCを買い替えたときやクリーンインストールをしたときなどに同じ環境を簡単に構築することができないともう一度構築するこ…

IDEをやめてvim-lspに移行したのでCLI環境を整える

先日メインで使っているマシンを修理にださなければいけなくなり、1週間ほど古いスペックの低いマシンを使うことになりました。 その環境では複数個のIDEを起動しておくのが難しく困っていたところLanguage Server Protocolの存在を思い出し使ってみること…

HelmでKubernetesのマニフェストファイルを管理する

Helmを使って公開されているChartをインストール方法はたくさん紹介されていますが、独自のChartを作成する方法が簡潔に紹介されている記事が無かったので紹介します。 Helm自体の紹介やインストール方法などは省略します。 環境 Helm 3.0.0 Kubernetes 1.15…

fastlaneのpilotでThis request is forbidden for security reasons - The API key in use does not allow this requestとエラーになったときの対処法

環境 fastlane 2.131.0 エラー内容 Spaceship::UnexpectedResponse: [!] This request is forbidden for security reasons - The API key in use does not allow this request /Users/travis/build/xxx/xxx/vendor/bundle/ruby/2.4.0/gems/fastlane-2.131.0/…

gRPCサーバーのデバッグとServer Reflection

gRPCはRPCの1つでProtocol Buffersでシリアライズ化することで高速な通信を実現させています。そのため、通常のREST-likeなWEB APIのデバッグでつかうcurlやPostmanのようなGUIツールでデバッグすることができません。 そこで今回はgRPCで開発するときに役…

Digdagのbackfillを無効化する

Digdagでスケジュール実行の設定をしているワークフローを一時停止したあとに停止を解除した場合は、停止していた期間に実行されるはずだったセッションを実行するBackfillという機能があります。 GUIでPAUSEした後にRESUMEしたときや、CLIでのenable/disabl…

Go ModulesなプロジェクトのDockerビルドを高速化する

Go Modulesに対応させたプロジェクトをDocker内でビルドして実行するとします。 単純にDockerfileを書いてしまうとソースコードに変更が入るたびにModulesのダウンロードが走ってしまい、とても時間がかかってしまいます。 そこでDockerのイメージレイヤのキ…

KubernetesのPodでDockerコンテナを実行する

KubernetesのPodでDockerコンテナを実行する方法を紹介します。 Dockerコンテナ内でコンテナを起動する方法のことをDinD (Docker inside Docker)などと言われていますが、同じことをKubernetesのPodで実行するには少し工夫する必要があります。 アプローチと…

QtでMacアプリを作ってみる

QtでMacのアプリをビルドし、.appの形式として書き出します。 環境 MacOS Mojave Xcode 10.2.1 Qt 5.12.3 事前準備 使用するXcodeのCommand Line Toolsを設定します。 $ sudo xcode-select -s /Applications/Xcode10.2.1.app Command Line Toolsが正しく設定…

DockerのCMDでログファイルをtailする

Dockerは標準出力に出力したログなどはlogsコマンドで確認することができますが、Dockerで動かすアプリケーションがファイルにログを出力している場合はlogsコマンドで確認することができません。 このような場合は、CMDでtail -fすることが多いと思います。…

自作したiOSライブラリの更新手順

iOS

自作したiOSのライブラリをCocoaPodsとCarthageで公開する記事はたくさんありますが、新バージョンの公開に関する記事はほとんど無く毎回困るのでまとめます。 Carthage Carthageで公開しているライブラリの新バージョンをリリースするのは簡単で、GitHubで…

複数のPodのログをまとめて表示する

Kubernetesを開発環境として使用しプロダクションと同じような環境で開発すると、複数のアプリケーションが可動することになると思います。 そうするとログも複数の場所に出力されることになります。 複数個のターミナルを立ち上げ1つずつログを表示しても…

GKEでプリエンプティブインスタンスを使いこなす

GCPにあるプリエンプティブ インスタンスをGKEでうまいこと使えないか、試行錯誤した結果をまとめます。 プリエンプティブ インスタンスとは 一言で言ってしまえば、AWSにあるスポットインスタンスのGCP版です。 公式ドキュメントにはこのように書いてありま…

GKEからCloud SQLに接続する

GKEからCloud SQLに接続するやり方としてCloud SQL Proxyを使う方法が推奨されています。 公式ドキュメントで解説されているやり方は、Cloud SQLにアクセスしたいコンテナが入っているPodにサイドカーとしてProxyを入れる方法です。 公式の例だと、wordpress…

Istioで使うTLS証明書をcert-managerで作成する

Istioは0.7まではIstio IngressというIngress Controllerの一種を使用してトラフィックを受け入れていましたが、0.8以降はGatewayを使うようになりました。 Istio Ingressでは他のIngressと同様のやり方でTLS証明書を扱えたのでcert-managerと組み合わせるの…

route53で管理するドメインの証明書をcert-managerで管理しGKEで使用する

GCPでKubernetesを使用する場合、AWSと違いTLS証明書を発行してくれるサービスが存在しません。 有料の証明書を購入すれば良い話ではありますが、機能は同じなので無料でいきたいところです。 そこで、今回はLet's Encryptを利用したいと思います。 しかし、…

Kubernetesのdashboardをingressから表示する

Kubernetesの状態が知りたいなと思い調べたところ、公式のWebUIであるdashboardをみつけました。 README通りにやれば簡単にインストールできますが、proxy経由でしか表示させる方法が書いてなく不便だったので、ingressを使用して表示させる方法を書きます。…

GKEにPrometheusを導入する

GKEにはPrometheusを導入するドキュメントが無いんですよね・・・ IstioやSpinnakerのドキュメントはあるのに、もっと需要がありそうなPrometheusのドキュメントが無いのはつらいです。 そんなわけで、自分が導入したときの手順を記録しておきます。 環境 GK…

GKEでPersitentVolumeを使う

KubernetesでPersitentVolumeを使う方法はドキュメントに書いてありますが、使う環境によって永続ディスクが異なるためにスムーズにいかないことがあります。 そのため、今回はGKEでPersitentVolumeを使う方法を紹介します。 環境 GKE 1.9.7-gke.0 永続ディ…

KubernetesでBlue-Green Deploymentしてみる

今回はサービスを本番で運用していくときに欲しくなるBlue-Green DeploymentをKubernetesでやってみます。 TL;DR Serviceのselectorを更新するやり方だと10分程度BlueとGreenがまざる Istioを使用すれば瞬時に100%のトラフィックを切り分けられるのでBlue-Gr…

Kubernetesに負荷をかけオートスケールを観察する

本番環境でKubernetesを使うためには、Kubernetesがどのように動作するか把握していないと安心して運用することができません。 まずはサービスを運用する上で重要になる、高負荷時の動きを確認してみたいと思います。 KubernetesにはHPAとCluster Autoscaler…

Webpackでビルドするときにflowtypeで型をチェックする

flowを導入して型のチェックがされるようになっても、開発者がエディタで設定していなかったり、 エディタによっては開いていないソースはチェックの対象になっていなかったりします。 これではせっかく導入したflowが活かせません。 そこでWebpackでビルド…

QNAPにTwonky Serverをインストールする

QNAPが公式に提供しているDLNAサーバーはいろいろと貧弱なので、評判の高いTwonky Serverを使えるようにします。 環境 QNAP: TS-431P OS: QTS 4.3.4 Twonky Serverのダウンロード まずは以下のリンクからダウンロードページに移動します。 http://download.t…

JUnit5をmainから実行する

こんにちは。akaimoです。 今回はJUnit5をmain関数内で使用する方法です。 環境 Java9 JUnit5.1.0-M1 Kotlin1.2 ソース これでmainからJUnitを動かせます。詳しい解説は後ほど。 import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder i…

react-reduxにflowtypeを導入しPropsに型を付ける

flowtypeを導入したとき、reactとreduxをつなぐ部分の情報が少なかったのでまとめます。 flowtypeの導入前 比較として導入前のソースを載せておきます。 import React, {PropTypes, Component} from 'react' import {connect} from 'react-redux' import * a…

Travis CIでfastlaneを使用する

こんにちは。akaimoです。 Travis CIを利用しているiOSプロジェクトにfastlaneを導入して、xcodebuildを直接実行する環境から開放されたので、 備忘録としてやったことを残しておきます。 github.com 前提 CI上でfastlaneを使用 複数人で開発 fastlaneのイン…

ScrollViewとStackViewを組み合わせる

iOS

akaimoです。 そろそろiOS8のサポートが終わってきたと思うので、TableViewの変わりにStackViewを使う方法を書きます。 使いにくいScrollView スクロールが必要な複雑な画面の場合、同じ要素が1つも存在しないのにTableViewを使うことがありました。 ScrollV…

VimにRustの環境を構築する

RustのIntroductionをやってみる途中で、補完とかが効かないとツライなと思ったので VimにRustの環境を作ってみた。 前提 OSはMacです(たぶんLinuxでも動くと思います) rustupでRustをインストールしていることを前提とします。 できるようになること コー…