年始から個人的に大流行のKotlin Multiplatform。開発が楽しい。BFF Server触るエンジニアとネイティブエンジニアの距離感が非常に近くなる。「いや、チームとして当たり前でしょ」みたいなツッコミはあるだろうけど、新しい技術を軸にエンジニア達が「あー…
前回のエントリ「ProwではじめるChatOps on GitHub。」からProwを完全理解した!と言ってはいけない。Prowの真骨頂はTideにあると思う。 Enable kustomize in kubectl by Liujingfang1 · Pull Request #70875 · kubernetes/kubernetes · GitHub 上記のProwが…
Kubernetesのtest-infraレポジトリにあるProwを試す。ProwはKubernates環境を基盤としたCIとCDのシステムである。 モチベーション Kubernatesを追っている人であれば次のようなコメントのやり取りをGitHub上で見かけたことがあるだろう。 Enable kustomize i…
前回のエントリではKnativeの Buildの知見をまとめたが今回は Eventingをまとめる。試したところServerlessを体感できて、これぞKnativeの醍醐味ではという感想である。 モチベーション KnativeのEventingを導入する際にAWS環境ではどのようなAWSサービスを…
この記事はCyberAgent Developers Advent Calendar 2018の22日目の記事です。 Ktor KtorはKotlin純正のWebフレームワークです。APIはラムダ式を使った関数呼び出しでKotlin DSLによりルーティングを宣言的なコードで保守できます。KtorアプリケーションはTom…
KnativeはKubernetesを基盤としたプラットフォームをビルド、デプロイを管理するためフレームワークを提供する。Serving、Build、そしてEventingの3つのコンポーネントで構成されている。これら3つが疎結合に連携する。 cloud.google.com Kubernetesを基盤…
今回のエントリではBazelでビルドしたマルチプロジェクトとCircleCIの連携をまとめていく。マルチプロジェクトとCIを連携する際の実運用の課題を洗い出して解決方法を考えた。 プロジェクト構成 CIと連携させるマルチプロジェクトは次のような構成である。 (…
前回までのエントリに引き続きBazelのビルドをまとめていく。 GoとKotlinのマルチプロジェクトをBazelでビルドする - 平日インプット週末アウトプットぶろぐ BazelでGoプロジェクトのビルド。Gazelleのgo_repositoryで外部ライブラリの依存とBazelのgo_test…
前回までのエントリに引き続きBazelのビルドをまとめていく。 blog.soushi.me blog.soushi.me 今回のエントリではgRPCサーバを含むGoプロジェクトをBazelでビルドする方法をまとめる。 Protocol BufferとgRPCサーバのInterfaceの生成をBazelで行う これまで…
BazelをつかったGoプロジェクトのビルドをまとめている。前回のエントリではバイナリのビルドとDockerイメージのビルドをまとめた。 blog.soushi.me 今回は外部ライブラリをGoプロジェクトに依存させる方法とテストの方法をまとめていく。 Gazelleのgo_repos…
Googleが開発するビルドツールのBazelを試していく。 Bazel - a fast, scalable, multi-language and extensible build system" - Bazel モチベーション GoやKotlinでつくるマイクロサービス開発は1つのサービスに1つのレポジトリで行ってきた経緯がある。…
Serverlessプラットフォームが注目される中、その潮流にJava勢も乗っかりたいので起動速度が速いと注目のGraalVMを試してみた。 モチベーション GraalVMのアプリケーション起動までを理解したい。 GraalVMでSpring Fuを動したい。 GraalVMでHTTP/1.1とgRPCの…
Spring Boot 2.0からWebFlux frameworkが導入された。Reactorが使えてReactive Programmingが可能になったのでPush型のAPIをつくってみた。 どんなAPIをつくるか コンテンツが更新されたら件数を教えてくるAPI Server Sent EventsのContent-typeをサポートす…
Google IO 2018で発表されたJetpackの新しいコンポーネントのNavigationをアプリに導入してみた。 developer.android.com TL;DR Toolbar、Bottom Navigation、onClickイベントに関わる画面遷移をNavigationに置き換えてみた。 試した結果、コード短縮をゲッ…
Android Support LibraryのChipの使い方をまとめていく。ChipはMaterial DesignにあるがSupport Libraryに組み込まれたのは28.0.0.Alpha 1からである。 material.io developer.android.com よってgradle settingを次のように更新する。 ext { compileSdkVers…
ブログエントリで試しているアプリにSwipeRefreshLayoutとRecycleViewをListViewに導入してみたのでまとめていく。 SwipeRefreshLayout SwipeRefreshLayoutはViewGroupの1つで引っ張って更新する機能を導入することができる。 まずはレイアウトからまとめて…
ブログエントリで試しているAndroidアプリにFluxアーキテクチャを導入をしたことでデータの流れがStreamになった。SharedPreferencesも rx-preferencesをつかえば更新状態をSubscribeできるので導入過程をまとめていく。 github.com お試し中のアプリはOpenW…
ブログエントリで試しているAndroidアプリにFluxアーキテクチャを導入してみたのでまとめる。 Fluxアーキテクチャ Fluxアーキテクチャに関する情報は調べるとたくさん見つかるので概要までに留めておく。 github.com Fluxはアプリケーションデータを管理する…
Dagger2(android support module)をつかってFragmentにDIする方法をまとめていく。 HasSupportFragmentInjectorを実装する MainActivityにHasSupportFragmentInjectorを継承させ必要な実装をします。 class MainActivity : AppCompatActivity(), HasSuppor…
掲題のとおりAndroidのListViewを表示してみる。 APIリクエストは retrofitを使い天気情報を取得できるOpenWeatherMapのAPIを利用する。 github.com DIにはDaggerを使い、2.11から有効なandroid support moduleを利用する。 github.com APIをリクエストするS…
plasmaの動作確認のためにローカル環境を構築する機会がありminikube + helmで構築してみようと始めたのがエントリのモチベーション。 github.com plasmaはServer Push型のミドルウェアでFRESH!で使われている。ポーリング撲滅を掲げgRPC/SSEを用いて省コネ…
SpringBoot 2.0.0からサポートされるRouterFunctionのエラーハンドリングをまとめていきたい。 RouterFunctionは従来のアノテーションベースでAPIを作る形ではなくDSLベースでルーティングを定義していく。 @Configuration class TaskRoutes(private val tas…
負荷テストツールのk6を試す機会があったのでアウトプットしていく。 k6.io k6は負荷テストサービスを提供するloadimpact社が開発する負荷テストツールでツール自体はgoでテストケースはES6で書く。 レポート出力はInfluxDB+Grafanaまたはloadimpact Insight…
Server Side Kotlinのアウトプットにつかっているレポジトリにgrpc-gatewayを入れてみたので、セットアップ方法をまとめておく。 github.com grpc-gatewayはHTTP/1.1のAPIの提供する。定義したprotoにoptionを加えることでHTTP/1.1 APIのコードとgrpc-client…
CA.kt #3で登壇しました。テーマは「FRESH!プロジェクト/Server Side Kotlin 活用事例」。スライドはこちら。 speakerdeck.com 約1年前にFRESH!チームにジョインしてKotlinに出会いServer Side Kotlinと向き合ってきた経験を話してきた。 Server Side Kotl…
gRPCのClientで認証ヘッダーなどリクエストHeaderに値をセットしてgRPC Serverへリクエストするにはどうすればよいか?今回のエントリではgrpc-javaのClientでHeaderをセットしてリクエストする方法をまとめていく。 これまでのエントリではgRPC Serverのほ…
開発中のプロジェクトでTLSが有効なGo製 gRPC ServerにAndorid8.0(Oreo)からは接続ができて、Kotlin製(grpc-java) gRPC Serverには接続ができない状況に直面した。 原因はOpenSSLでTLSを有効にしていたがALPN対応ができていなかった。Android8.0(Oreo)では…
SpringFrameworkでAPIドキュメントを準備する手段としてSpringFoxやSpring REST Docsなどが候補にあがる。 SpringFox by springfox Spring REST Docs 両者とも導入敷居が低くSpringFoxはコントローラクラスやレスポンスモデルにアノテーションをつけていきSp…
gRPC ServerのレスポンスにはMetadataを含めることができる。gRPCのレスポンス・ステータス(io.grpc.Status.OKやio.grpc.Status.INVALID_ARGUMENT)やDescription(エラーメッセージ)に加え、例えば400系のエラーでも異なるエラー内容をクライアントに伝え…
iOSアプリで購入したアイテムのレシート検証を実装する過程でレシートに含まれる日付文字列をdata classにデシアライズしてみた。 レシートに含まれる日付は次のような形となっている。 "expires_date": "2016-06-17 01:32:28 Etc/GMT" 見慣れないタイムゾー…