APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Golang

[Dagger] コードでDockerイメージをBuildする

はじめに Dockerfileを用いてBuild Dockerfileを使用せずにコードでBuild Dockerfileを用いないMulti-Stage Build さいごに ACS事業部のご紹介 はじめに こんにちはACS事業部の谷合です。 みなさんDaggerなるツールをご存じでしょうか? Daggerとは、数か月前…

App ServiceでGolangのネイティブ対応がプレビューになりました

はじめに こんにちは、コンテナソリューショングループの髙井です。 Azureの更新フィードを見ていたらApp ServiceでGolangのネイティブ対応がPublic previewになっていました。 azure.microsoft.com せっかくなのでちょっと試してみます。 Golangをインスト…

Goで重み付き乱択アルゴリズムを書く

はじめに 先進サービス開発事業部の山岡です。 重み付き乱択アルゴリズムとは結果に偏りのある抽選の事で、身近な例でいえばソシャゲのガチャでしょうか。ガチャはアイテムの抽選結果に偏りがあり、一般にそのアイテムの有用性が高いほど入手確率が低く設定…

kubernetesソースコードリーディング 第4回

今回はちょっと趣向を変えて、テーマはDockerです! kubernetesのソースコードからは少々離れてしまいますが、 コンテナランタイムもkubernetesの重要なコンポーネントの1つなので知っておいて損はないはず…! アジェンダは以下になります。 コンテナ仮想化…

GolangのgrpcwebでCORSエラーが出る時はOriginFuncを確認しよう

はじめに 先進サービス開発事業部の山岡です。 小ネタですがgrpcweb *1 の検証をしている時にCORSエラーでハマったので対処法をメモしておきます。 *1:https://github.com/improbable-eng/grpc-web/tree/master/go/grpcweb

GolangでgRPCを試してみる

はじめに 先進サービス開発事業部の山岡です。 仕事で使う機会がありそうなのでgRPC *1 に入門しました。まずは定番のHello, Worldからやってみたのでその内容を共有したいと思います。 *1:https://grpc.io/

GoPacketでネットワークと直接お喋りしよう

はじめに 先進サービス開発事業部の山岡です。 Go言語は標準でかなり強力なネットワーク用のライブラリーがありますが、GoPacket *1 を使うと更に細かいところをイジれるようになります。 仕事でパケットをごにょごにょしたところ結構面白かったのでここで紹…

kubernetesソースコードリーディング 第3回

前回、前々回に引き続き、社内kubernetes勉強会が開催されました。 今回のテーマはkube-scheduler! アジェンダはこちらです。 kube-schedulerの概要 kube-schedulerの実装 Predicateの実装 Prioritizeの実装 Scheduler Extender 「要件に合った自分好みのSc…

社内でkubernetes勉強会を始めて、kubernetesのソースコードリーディングに入門しました

はじめに 第1回のざっくりまとめ 第2回のまとめ client goでCLIツールを作ろう kube-budilerでCustomController入門 リファレンス実装で学ぶInformer Framework 聞いた感想 はじめに コンテナグループの安藤 @chataro0です。 5月から隔週で有志とコンテナ/Ku…

goenvとdirenvでGo Modules有無両対応な開発環境を作る

はじめに 先進サービス開発事業部の山岡です。 Go ModulesはGo1.11から実験的にサポートされ1.13から正式ツール(デフォルトで有効)となる予定である依存関係管理機能です *1 。これは export GO111MODULE=on することで使えるようになり、詳細は省きますが…

Google App Engineの2nd Generationとは?

はじめに 先進サービス開発事業部の山岡です。 Google App Engine(GAE)は所謂PaaSでサーバーやネットワークの管理を気にせずアプリの開発に集中することができます。 最近これに関するホットな話題として2nd Generationへの移行がありますが、色々と情報が飛…

GAE/Go1.9から1.11にマイグレーションしようとして躓いたところ

はじめに 先進サービス開発事業部の山岡です。 GAE/Goは1.6, 1,8, 1.9, 1.11, 1.12(beta)と随時新しいGolangバージョンに対応してきていますが、1.11からはGAEのバックエンドがgVisorベースの2nd Generationとなり大きな変更点が複数ありました。 *1 1.11で…

mercari.go #6 参加レポート

はじめに 先進サービス開発事業部の山岡です。 今日はいつもと趣向を変え、先日参加させて頂いたmercari.go #6のレポートを書きたいと思います。 ※資料は後日公開されるとのことなので公開されたらそちらへもリンクを貼ります JavaとGo言語を比較した話 @ken…

GAE/GoのテストでDatastoreの状態を確認できるようにする

始めに 先進サービス開発事業部の山岡です。 GAE/Goでは goapp test を使うことでローカル環境に仮のGAEを再現しDatastoreのアクセスや非同期処理の挙動を確認することができますが、テスト終了後にその環境は自動で破棄されてしまいDatastoreがどのような状…

Golangの独自型を使い引数の順番ミスを減らす

先進サービス開発事業部の山岡です。 Golangには他のプログラミング言語と同様関数があり、これに引数として値を渡すことで見通し良く様々な機能を作ることができます。しかし関数に複数の引数を渡す場合、時折順番間違いが問題となることがあります。 例え…

testeratorで高速にGAE/Golangのテストをしよう

始めに 先進サービス開発事業部の山岡です。 GAEにはローカルでクラウドの環境をそこそこ再現できるSDKが用意されており、疑似的にDB(Datastore)等が再現され動作確認を行うことができます。実環境へのアップには1,2分はかかり、ちょくちょくアップしながら…

Datastore Import/Exportの結果をレポートする

先進サービス開発事業部の山岡です。 GCP DatastoreのバックアップにはImport/Exportというサービスを使いますが、これには結果をレポートする機能が無く運用する上で不便です。今回APIをポーリングしSlackにレポートする仕組みを作りましたのでその知見を共…

if文を読みやすくしよう

先進サービス開発事業部の山岡です。 例えばGAEでバッチ処理を行う際に、商用環境では必ず実行・それ以外の検証環境等では手動起動でのみ実行したいという要件があった時のことを考えてみましょう。 どの環境であるかは appengine.AppID(ctx) でProjectのID…