はじめに Go言語で開発時にライブリロード機能がないと毎回コンテナを落としてあげてが面倒だった。調べてみるとAirを導入するとライブリロードが使えるみたいなのでその導入方法をメモとして残しておきます。 FROM golang:1.18-alpine RUN apk update && apk add git RUN go install github.com/cosmtrek/air@v1.29.0 WORKDIR /app CMD ["air", "-c", ".air.toml"]
こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレガシーな実装においては顕著) そこで PerlXS を利用することで Perl から Go を直接呼び出せるようにできないかと考え検証を進めることにしました Goの -buildmode=c-shar
はじめにシステムの状態を的確に捉え、運用に必要なインサイトを継続的に得るための特性は「オブザーバビリティ」と呼ばれます。オブザーバビリティを実現することで、パフォーマンスのモニタリングやトラブルシューティングを効果的に行い、システムの信頼性を高めることができます。 この重要な特性を実現する上で、eBPFやbpftraceは強力なツールとなります。 本記事では、Goアプリケーションにおけるオブザーバビリティを実現するための一つの方法として、bpftraceを用いたトレースの手法を紹介します。 内容が多いため、目次を活用して段階的に読み進めることをお勧めします。 eBPFとbpftraceはじめに、eBPFとbpftraceについて簡単に説明します。 eBPFとはeBPF(Extended Berkeley Packet Filter)はLinuxカーネル内で動作する柔軟なプログラミングフレー
HTML/CSS や JavaScript など、 Web フロントエンドにおいては配信時にファイルを minify することが一般的です。 ファイルを minify する = ファイルサイズを小さくすることでネットワークの通信量を削減し、結果として Web ページの読み込み速度を向上させることができます。 <!-- 例えばこれが --> <!DOCTYPE html> <html> <head> <title>Hello World Sample</title> </head> <body> <h1>Hello, World!</h1> <button id="button">Click</button> </body> <script> const button = document.getElementById("button"); button.addEventListener("
GKE (Google Kubernetes Engine) とは Kubernetes (k8sと略す) という、Dockerコンテナのオーケストレーションツールが広く使われ始めています。 k8sをGCPのマネージドサービスとして提供されているものがGKEです。 当社では、GKEを2年以上本番運用しています。 当社の技術基盤に興味がある方は、詳しくはまず下記 Tech Blog の記事を参照いただければ幸いです。 https://allabout-tech.hatenablog.com/entry/2017/12/08/080800 Skaffoldとは CI/CDワークフローを高速に回すk8s用のツールです。 ローカルで開発したアプリケーション用コードを、k8sクラスタにデプロイするまでの、 いずれの段階においても自動化を行ってくれるものです。 今はアルファからベータ版になったところで
Go1.18は2022年3月にリリースされました。このリリースはGo言語へのジェネリクスの実装を含んでいます。 この記事ではできるだけ最新の仕様と用語法にもとづいてジェネリクスの言語仕様について解説していきます。 更新履歴 2024/01/03: Go1.21(2023-08-08)でcmpパッケージが標準ライブラリに追加されたことに対応しました。 2023/02/23: Go1.20(2023-02-01)のcomparableの仕様変更に対応しました。 次の関連資料があります: The Go Blog - All your comparable types Griesemer氏によるGo公式ブログです。 Go言語のBasic Interfaceはcomparableを満たすようになる(でも実装するようにはならない) 上記の内容に対する筆者の解説記事です。Go1.20リリース前に書いたの
json.RawMessage を使うと,一部のフィールドを見てから payload の型を決定することができます 問題WebSocket でやりとりするサーバを書いていて,一つのコネクション上でいくつかの種類のコマンドを JSON として受け付けるような仕組みが欲しくなりました. { "action": "increment", "payload": { "value": 3 } }と { "action": "greet", "payload": { "name": "World" "language": "English" } }のように, action フィールドに応じて payload の構造が変わるという構成です. golang でふつうに JSON を受け取って構造体にマップする際には,下のようにします. type Message struct { Action string
カラビナテクノロジーでは、zennでのテックブログをはじめました。 今回はそんな技術ブログの一発目の記事を、バックエンド開発をメインに担当していますブラボー(bravo)が書いていきます。 モノレポという、1つのリポジトリに複数のアプリを1つのリポジトリに保存するというパターンがあるということを知ったので、 実際にその構成での開発環境を作ってみます。 今回考えるのは、APIサーバとしてgolangで作られたものがあり、reactではそのフロントエンドを実装するようなアーキテクチャにします。 図で言えばこんな感じです。 この記事で達成すること golangでAPIの開発環境を作る reactの開発環境を作る 1つのリポジトリで↑2つのアプリが保存されている再現できる(モノレポ構成にする) reactとgolangをモノレポで構成 言語、ミドルウェアのバージョン 言語、ミドルウェア バージョン
こんにちは、はてなでアプリケーションエンジニアをしている id:lufiabb です。 2024年1月31日(水)に、 hatena.go#1 を東京オフィスで開催しました。当初想定していた以上の方に登録・参加いただけました。ありがとうございました。 このエントリーでは、当日の様子をご紹介します。 hatena.go#1について 「hatena.go」は、Go言語を普段から使っているエンジニアやWebアプリケーションを開発しているエンジニアのみなさまを対象に、Goにまつわる情報発信と情報交換を目的としたイベントです。 今回のhatena.goは、はてなのエンジニア2名による15分トークと、connpassにて公募LT枠にご応募頂いた方3名によるLTが行われました。 発表概要と資料 はてなのサービスを支えるGo はてなにおけるGo利用のこれまでとこれから speakerdeck.com 一人
Hello Actor 細かい機能の解説はあとの回として、 まずはアクターシステムを使ったプログラミングを体験してみましょう。 Goではアクターシステムが商用でも十分利用できるものは、 下記のProto Actorとergoがあります。 github.com github.com Proto.Actorは、Akka.NET のオリジナル作成者 Roger Johansson によって開発されているもので、 Akka/Pekko と基本の部分がある程度似た形になっています。 あくまで似ている程度で、現在のAkka/Pekkoほど強力なツールが揃っているわけではありませんが、 Proto Actorで概念や作り方を覚えると、少ない労力でAkk/Pekkoにも移行などもができるようになります。 細部は異なりますが、概念などはかなり似ていますのですんなり理解できるはずです。 ergoは Erlan
Go 1.22のトピックとしては以下のようなものがあります。だいぶ安定版になってきたからか、言語もライブラリもこつぶなものが多くなってきたかな、という印象です。 ループ変数の挙動の変化 ツール系 GO111MODULE=offオプションの廃止 トレースツールのUI改善 net/httpのServeMuxでパス変数が扱えるように go vet強化 コンパイラでGCが1-3%高速化。PGOで2-14%改善 リンカーの生成するバイナリがよりデバッガフレンドリーに ライブラリ math/rand/v2追加 database/sql.NUllの追加 net/httpのルーターがパスパラメータをとれるように その他 個人的に注目しているHTTP/3やQUICへの対応は、準標準ライブラリのgolang.org/x/net/internal/quicの中で進行中。将来的にはinternalが外れたgola
FrankenPHP 1.0には、Symphony、Laravel、WordPressなどのネイティブサポートが含まれるほか、Caddyを搭載したプロダクショングレードのPHPサーバであり、PHPアプリのスタンドアロンで実行可能なバイナリとしてのパッケージ化が可能となっている。 さらに、PHP-FPMとNgnixを個別に実行する必要がなく、1つのサービスのみでPHPサーバを提供できるようになるとともに、PHP 8.2以降のほとんどのPHP機能拡張、およびすべてのCaddyモジュールと互換性がある。 ほかにも、アプリケーション起動してメモリに保持するワーカーモード、JavaScriptイベントとしてWebブラウザへ送信されるリアルタイムイベント、ZstandardおよびGzip圧縮、構造化されたログ、Prometheusメトリクスを使用したCaddyの監視、HTTPS・HTTP/2・HTTP
はじめまして、グッドパッチでサーバーサイドエンジニアをやってる荒木です。 この記事は Goodpatch Advent Calendar 2023 の 24日目の記事になります。 はじめに 現在golangで開発に使ってるフレームワークはginですが、そろそろ切り替えも検討したいので調べてみました。 対象になるフレームワーク Webアプリ開発に利用できるもので、スターの多いものをピックアップしています。 gin-gonic/gin (⭐️73.2k) 私も業務で利用していますが、一番最初に候補に上がるかと思います。 利用していてポイントとなる部分。 高速:他のフレームワークはginよりベンチマークが高かったりしますが、実用性として十分な速度です。 ミドルウェアサポート:ミドルウェアを使うことで認証系とかはシンプルに作りやすいです。 JSONバリデーション:普通に利用できます、フィールドが空
SRE チームの市川恭佑です。 先日、CloudNative Days Tokyo 2023 のプロポーザルを提出したのですが、残念ながら採択に至らなかったので、今回は宇宙最速の(?)供養エントリになります。 シェア・投票など、ご応援をくださった皆様にはこの場でお礼を申し上げます。ありがとうございました。 event.cloudnativedays.jp 背景とか、経緯とか 筆者は、カヤックの SRE チームにちょうど2年ほど在籍しています。とは言っても半年ぐらいは学生アルバイトだったので、正社員としては1年半ほどです。カヤックに入る前も、いくつかの会社で IT エンジニアとしてインターンやアルバイトをしていました。 という訳で、何だかんだ仕事で使うプログラムを書き始めてトータル4年半ほどになりますが、そのうち3年半ほどは全て Amazon Web Services(AWS)でホストされる
はじめに こんにちは。ブランドソリューション開発本部FAANSバックエンドブロックの佐野です。普段はサーバーサイドエンジニアとして、FAANSのバックエンドシステムを開発しています。 FAANSとは、弊社が2022年8月に正式ローンチした、アパレル店舗で働くショップスタッフの販売サポートツールです。例えば、コーディネート投稿機能や成果確認機能などを備えています。投稿されたコーディネートはZOZOTOWNやWEAR、Yahoo!ショッピング、ブランド様のECサイトへの連携が可能です。成果確認機能では、投稿されたコーディネート経由のEC売上やコーディネート閲覧数などの成果を可視化しています。 本記事では、成果データの集計処理におけるBigQueryのクエリ実行処理のユニットテストをGoで実装した取り組みと、その際の工夫についてご紹介します。 目次 はじめに 目次 成果データの集計処理とは 抱え
David Chase and Russ Cox 19 September 2023 Go 1.21 includes a preview of a change to for loop scoping that we plan to ship in Go 1.22, removing one of the most common Go mistakes. The Problem If you’ve written any amount of Go code, you’ve probably made the mistake of keeping a reference to a loop variable past the end of its iteration, at which point it takes on a new value that you didn’t want.
Crafting a Language Server in Golang: A VSCode LSP for Lama2 Dive into our journey at Hexmos, where we bridged Lama2 with VSCode using Golang's LSP. From challenges to insights, we're excited to share it all! 🦙🚀. This post narrates our journey to developing advanced functions in our VSCode extension for Lama2, a plain-text API manager built at Hexmos. We will see how our thinking and implementat
Go言語でsliceの重複排除について書きます。Go 1.21前提です。 slices パッケージを使っての重複排除 Go 1.21から slices パッケージが増えました。ここに生えている関数を利用して重複削除のコードが書けます。 pkg.go.dev 例えば int の slice の重複排除は以下のように書けます。 integers := []int{1, 2, 2, 1} slices.Sort(integers) // [1 1 2 2] uniqValues := slices.Compact(integers) // [1 2] slices.Compact は連続する値を1つにまとめる関数なので、重複排除したい場合は slices.Sort で先にソートする必要があります。 User という struct の slice を id で重複排除したい場合はどうすればいいかと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く