- 1. About Composition as Code
- 2. docker initでDocker環境構築
- 3. SQLBuilderの仕様を考える INSERT仕様検討編
- 4. GCPインスタンスでのheyインストール方法
- 5. サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞!) ②
- 6. SQLBuilderの仕様を考える SELECT仕様検討編
- 7. 依存性逆転の原則(DIP)と依存性注入(DI)についての理解
- 8. 【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった
- 9. Go言語のGinフレームワークで静的ファイルを表示してみた
- 10. Goを利用し、API経由で自分の草の情報を取得したい
- 11. [Go言語]LINE ログイン連携方法 メモ
- 12. 開発環境の整備のためのDelve設定
- 13. Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた
- 14. Go言語におけるマップの使い方
- 15. Jaeger超入門
- 16. Go言語のtestingパッケージを使ってみた
- 17. GoでgRPCサーバーを立ててみる5(client.goの実装、動作確認)
- 18. Go言語でLINE botを使って画像を送信してみた
- 19. Go言語での重複排除処理とカスタムマップ型の利用
- 20. 【Go言語】Katana使ってみた
About Composition as Code
CaC (Composition as Code) について。
https://www.infoq.com/jp/articles/cloud-computing-post-serverless-trends/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global
> Infrastructure as CodeからComposition as Codeへと移行する大きなトレンドがあり、開発者は使い慣れたプログラミング言語を使用して、より直感的なクラウドサービスの設定ができる。
アプリケーションとインフラの責任の境界が曖昧になる中で CaC は次の paradigm になるかもしれない。
Cloud Development Kit for Terraform (CDKTF)[^1] について unlearn する。
## Environment
– Devcontainer で構築。https://github.com/danny-yamamoto/cdktf-gke/blo
docker initでDocker環境構築
`docker init`で`Go`の`dockerfikle`を作って、中身を確認してみよう:eyes:
## docker init
対話形式で設定を決めていくスタイルなので、オプションを覚えなくても使えそう
“`bash
PS C:\Users\xxx\Documents\go-app> docker initWelcome to the Docker Init CLI!
This utility will walk you through creating the following files with sensible defaults for your project:
– .dockerignore
– Dockerfile
– compose.yaml
– README.Docker.mdLet’s get started!
? What application platform does your project use? [Use arrows to move, type to filter]
? What application
SQLBuilderの仕様を考える INSERT仕様検討編
# 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はINSERT文の仕様を考えるが、SELECT+INSERTまで考えると複雑になるので
一旦保留にする# 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、
“`
CREATE TABLE users (
id int,
name varchar(10)
)CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`
を想定する## Insert
パッケージ名は仮でpkとして
“`go
pk.Insert().Into(pk.Table(“users”)).Value(1, “test”)// INSERT INTO users VALUES(1, ‘test’)
“`とすることを考えている。
カラムを限定する場合は
“`go
pk.Insert(“id”).Into(
GCPインスタンスでのheyインストール方法
## 概要
– GCPのインスタンスにheyをインストールする方法です。
– heyとは
– heyは、Go言語で書かれたHTTP負荷テストツールです。## 参考URL
– [hey](https://github.com/rakyll/hey)
– [Goの最新バージョン](https://go.dev/dl/)
– 2024年2月時点での最新バージョンは、go1.22.0です。## 環境
– GCPのComputeEngineなどのVMインスタンス。
– OSはDebian系(Ubuntu, Debian, etc)を想定。## 事前準備
– 事前にGCPのインスタンスを作成しておく。
– インスタンスにSSHでログインしておく。
– マネジメントコンソール > ComputeEngine > VMインスタンス > SSHをクリックすると、SSHでログインできます。## インストール手順
– SSHで接続したターミナルで以下のコマンドを実行します。
– Goのインストール
“`bash
wget https://dl.goo
サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞!) ②
—
サポーターズ主催の技育CAMPに参加しての感想 ②
—**博多華丸・大吉**
_スピーチとスカートは短い方が良い_
などと言われますが
_スライドとフライドも短い方が良い_
と私は思います。
スライドは短くシンプルに、フライドは軽くサクッと。
今回のハッカソンと、その後の打ち上げのソーセージフライドを食べて、そう感じたんですよね。
ま、私は発表の時、あがっていたんですけどね。
フライドだけに。
**目次**
– [1. 実装内容](#1-実装内容)
– [2. 背景・経緯](#2-背景経緯)
– [3. サーバーサイド](#3-サーバーサイド)
– [4. おわりに](#4-おわりに)## 1. 実装内容
[前回](https://qiita.com/come/items/40f778f59081118cd6f0)の続きです。
私たちが今回実装したのは『鍵の観測者(オブザーバー)』というサービスです。
これは「家などの鍵の締め忘れをすぐに通知し、戸締りを見張ってくれる
SQLBuilderの仕様を考える SELECT仕様検討編
## 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はSELECT文の仕様を考えるが、サブクエリまで考えると複雑になるので
一旦保留にする## 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、“`sql
CREATE TABLE users (
id int,
name varchar(10)
)CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`を想定する
## Select
パッケージ名は仮でpkとして
“`go
pk.Select().From(pk.Table(“users”))// SELECT * FROM users;
“`とすることを考えている。
カラムを限定する場合は
“`go
pk.Select(“id”).From(pk.Table(“users”))// SELECT i
依存性逆転の原則(DIP)と依存性注入(DI)についての理解
正しく理解できていなかったと思うので、ちゃんと言語化してみたいと思い書きます。
## 依存性逆転の原則(DIP)とは
> 依存性逆転の原則または依存関係逆転の原則(dependency inversion principle)とは[1]、オブジェクト指向設計の用語であり、ソフトウェアモジュールの疎結合を確立する特別な形態を表現したコンセプトである。SOLIDの五原則の一つとして知られる。
オブジェクト指向における従来の依存関係とは、上位モジュールから下位モジュールへの方向性であり、仕様定義を担う上位モジュールを、詳細実装を担う下位モジュールから独立させて、各下位モジュールを別個保存するというものだったが、それに対して依存性逆転原則は以下二点を提唱している[2]。> 1.上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも抽象(例としてインターフェース)に依存するべきである。
2.抽象は詳細に依存してはならない。詳細(具象的な実装内容)が抽象に依存するべきである。
> wikipediaよりすごいざっくりですが、要は重要なプログラ
【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった
# 注意点
– ポインタ型の話について詳しくは触れません。構造体+ポインタの話は他の記事を参照ください。
– 値渡し、参照渡しという単語を使わずに内容を記述します。# この記事で伝えたいこと
– 構造体について
– オブジェクトに似ているのは見た目だけ!
– 変数としての動きは参照型ではなく値型!そのため、int や bool 等のいわゆるプリミティブな型と同じ動きをする!
– 構造体をポインタ型に変換しない状態で、引数に渡したり range の for で扱う際の動きに注意!# この記事の対象読者
– Java や Ruby 等の他のオブジェクト指向言語の知識をベースに Go の学習に取り組み始めた方
– 構造体という、Go におけるオブジェクトのようなもの操作にまだ慣れていない方
– Go のコードの中で構造体を扱って、「不思議な動きするな…」と感じている方# Go の構造体の操作でハマった
– 筆者は今まで Java や Ruby でコードを書いておりました。Go に関しては最近勉強を始めたばかりの初学者です。Go の勉強を進める中で、「構造体」とい
Go言語のGinフレームワークで静的ファイルを表示してみた
—
Go言語のGinフレームワークで静的ファイルを表示してみた
—**現実味がありすぎると良くないことありますよね**
いやー。空想は空想でいいんですよ?
でも現実を謳っていて、現実味が欠けていると、ちょっとなあ、て思う時があります。
まあいいんですけどね。結局は変わらないものが良いんですよね。
**目次**
– [1. Ginフレームワークとは](#1-ginフレームワークとは)
– [2. コード例](#2-コード例)
– [3. おわりに](#3-おわりに)## 1. Ginフレームワークとは
`Gin`は、`Golang`で書かれたWebフレームワークです。
`martini`に似た`API`を持ちながら、非常に優れたパフォーマンスを発揮し、最大で40倍高速であることが特徴です。
`martini`(マティーニ)は`Go`言語で書かれたWebフレームワークで、モジュラー設計と使いやすさが特徴ですが、パフォーマン
Goを利用し、API経由で自分の草の情報を取得したい
# はじめに
GitHubのコントリビューション、俗にいう「草」の情報をGitHub APIを利用して取得する方法を紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/486da189-dab6-89be-4607-9d848451852f.png)
なお取得するのは自分のコントリビューション情報です。また言語としてはGoを利用します。
“`
$ go version
go version go1.20.3 linux/amd64
“`# 事前準備
事前準備として、アクセストークンの作成を行います。
① アクセストークンの作成ページへ移動します。
https://github.com/settings/tokens
② Generate new token を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/5b43c
[Go言語]LINE ログイン連携方法 メモ
## 概要
* Go言語でLINEログイン連携する方法についてメモする。
## LINEログイン シーケンス
* 以下のようなLINEログイン連携シーケンスをGo言語で実装する。
“`mermaid
sequenceDiagram
participant U/A as U/A
participant WebApp as テスト用Webアプリケーション
participant LINE as LINEログインサーバー
participant ProfileAPI as LINEプロファイルAPIU/A->>WebApp: LINEでログインをクリック
WebApp->>U/A: LINEログインサーバーの認可エンドポイントへリダイレクト
U/A->>LINE: 認可エンドポイントにアクセスし、ログイン情報を入力
LINE->>U/A: 認可コードとともにテスト用WebアプリケーションのリダイレクトURLへリダイレクト
U/A->>WebApp: 認可コード
WebApp->>LINE: 認可コー
開発環境の整備のためのDelve設定
## 概要
EchoのAPI開発環境の整備のためにDelveを導入する。
また、airが導入済みの環境なので共存を目指す。## Delveとは
Goのコードデバックできるようにするライブラリとなっている。
https://github.com/derekparker/delve
使い方に困惑するところがあるのだが、IDEと組み合わせることで実行処理を途中で止めれるようになりので、うまく動作しないときや実装の結果確認といった確認作業がリアルタイムできるようになる。確認のためのログ仕込みとかが不要になるのでGoの開発においては導入しておくと便利だと思っている。
イメージ的には、Railsのbyebugに近いものではある。
IDEと組み合わせないとコンソール上でブレークポイントの設置などをしなくてはならないです。## Delveの導入
利用しているDockerfileに以下のコマンドを追加する
“`
RUN go install github.com/go-delve/delve/cmd/dlv@latest
“`その後、`docker compose build`
Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた
—
Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた
—**Happy set**
「キェェェェェェアァァァァァァシャァベッタァァァァァァァ!!!」
「マタシャベッタァ!!!!」
「ハッピィィデェェウメツクシィィテェェエ!!!」
「レストインピィィィッッスマデイコウゼ!!」
「イツカミタァァァ??!ジゴクモイイトコロッッオォォゥ!!」
「アイォヲヲヲバラマイテェエィィィイエエ!!!!!」
**目次**
– [1. MACアドレスとは](#1-macアドレスとは)
– [2. コード例と実行例](#2-コード例と実行例)
– [3. おわりに](#3-おわりに)## 1. MACアドレスとは
MACアドレス(Media Access Control Address)とは、ネットワーク内のデバイスを一意に識別するために使用される固有の識別子です。
MACアドレスは通常、6つの2桁の16進数がコ
Go言語におけるマップの使い方
### はじめに
こちらを日本語訳してみます。https://go.dev/blog/maps
コンピュータサイエンスにおいて最も便利なデータ構造の一つがハッシュテーブルです。Goでは、このハッシュテーブルを実装した組み込みのマップ型を提供しています。マップは、高速な検索、追加、削除を実現します。
### マップの宣言と初期化
Goでのマップの型は`map[KeyType]ValueType`と表されます。`KeyType`は比較可能な任意の型であり、`ValueType`は任意の型です。“`go
var m map[string]int
“`マップ型は参照型であり、初期化されていないマップは`nil`を指します。`nil`マップは読み取りには空のマップとして振る舞いますが、書き込みを試みるとランタイムパニックを引き起こします。マップを初期化するには`make`関数を使用します。
“`go
m = make(map[string]int)
“`### マップの操作
Goはマップを扱うための馴染み深い構文を提供しています。この文はキー`”route”`に値6
Jaeger超入門
# 概要
この記事は、Jaegerを理解する第一歩目として読むことを目的に書きました。この記事の前半では、Jaegerの概要を説明し、類似OSSといくつかの観点で比較します。後半では、Jaegerを動かしながら理解を深めていきます。
![jaeger-logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43869/78ef9a17-7982-41d7-2245-627753a1a894.png)
:::note info
この記事の執筆時点のJaegerの最新バージョンは、1.5.4です。参照する公式ドキュメントや動作確認するデモアプリケーションのバージョンも1.5.4です。
:::# Jaegerとは
Jaegerは、分散トレーシングを実現するOSSです。分散トレーシングとは、マイクロサービスアーキテクチャーで分散されたサービス間のリクエストのフローを追跡することで、システム全体のパフォーマンスの改善とトラブルシューティングに役立てる機能です。
例えば、以下のような複数のサービスで構
Go言語のtestingパッケージを使ってみた
自分の関わっているWebサービスは、一部をGo言語で実装している。
今回、testingパッケージを導入して、単体テストの一部を自動化したので、そのメモを残します。# 環境
“`
% sw_vers
ProductName: macOS
ProductVersion: 13.5
BuildVersion: 22G74
% go version
go version go1.21.6 darwin/arm64
“`# ソースコード
2つの数値を加算する関数`add`をテスト対象として記述したテストコードを例としています。
### テスト対象
“`example/add.go
package examplefunc add(a, b int) int {
return a + b
}
“`### テストコード
“`example/add_test.go
package exampleimport “testing”
func TestAdd(t *testing.T) {
type Args struct {
a int
b int
GoでgRPCサーバーを立ててみる5(client.goの実装、動作確認)
お疲れ様です。
今日は「client.goの実装、動作確認」について部分いたします。
# client.goの実装
gRPCサーバーとやり取りするclient.goの実装をしていきます。
“`article/client/client.go
package clientimport (
“context”
“io”“github.com/k88t76/GraphQL-gRPC-demo/article/pb”
“github.com/k88t76/GraphQL-gRPC-demo/graph/model”
“google.golang.org/grpc”
)// Clientからサービスを呼び出せるようにする
type Client struct {
conn *grpc.ClientConn
Service pb.ArticleServiceClient
}func NewClient(url string) (*Client, error) {
// client connectionを生成
conn, err := grpc.D
Go言語でLINE botを使って画像を送信してみた
—
Go言語でLINE botを使って画像を送信してみた
—**imagin**
考えるな、感じろ。
感じるな、動け。
動くな、手を上げろ。
強盗だ!
何?理解できない?
考えるな、感じろ。
……。
**目次**
– [1. LINE botとは](#1-line-botとは)
– [2. コード例](#2-コード例)
– [3. おわりに](#3-おわりに)## 1. LINE botとは
LINE botは、LINE Messaging APIを使用してLINEプラットフォーム上で動作する自動応答プログラムです。
ユーザーからのメッセージに対して自動で返信したり、特定のイベントに基づいて情報を提供することができます。
ビジネスでの顧客サポートや、エンターテイメント、教育目的での情報提供など、幅広い用途に使用されています。
## 2. コード例
以下に簡単なコード例を示します。
`YOUR_SECRET_TOKEN`
`YOUR_ACCESS_TOKEN`
Go言語での重複排除処理とカスタムマップ型の利用
## はじめに
配列やスライスから重複する要素を排除したい場面って、意外としばしば出くわしますよね。今回は、そんな時に役立つ`CustomMap`型を使った解決方法をご紹介します。### `CustomMap`型の定義
まずはじめに、重複をスマートに管理し、すっきりと排除するための`CustomMap`型を定義してみましょう。この型は、`map[string]bool`をうまくラップして、文字列のキーに`true`を割り当てます。キーが自動的に一意になるので、これを使えば重複排除の土台がしっかりと築かれます。“`go
type CustomMap map[string]bool
“`### `NewCustomMap`関数の実装
重複排除の鍵となるのは、`NewCustomMap`関数です。この関数が、与えられた文字列リストから新しい`CustomMap`インスタンスを作り上げるんです。文字列をマップのキーとして使うことで、キーの一意性が保証されます。**Goのマップでは、各キーは一意でなければならず、同じキーに対して値を再度設定しようとしても、最初の値が上書きされる
【Go言語】Katana使ってみた
# katanaとは
https://github.com/projectdiscovery/katana
Project Discovery社が開発したOSINTのWebクローラーツール。
OSINTとは、*Open Source Intelligence*の略で、公開されている情報を収集・分析する手法の1つ。意図しない情報が公開されていた場合、サイバー攻撃に用いられる可能性がある。# Katanaでなにができる?
* 高速かつ完全に構成可能な Web クローリング
* 標準モードとヘッドレスモードのサポート
* JavaScriptの解析・クローリング
* カスタマイズ可能な自動フォーム入力
* スコープ制御(正規表現などによるフィルタリング)
* JSON形式やファイル形式の出力
* STDIN、URL、複数URLのリストによる入力# インストール
以下コマンドでインストールする。
“`
go install github.com/projectdiscovery/katana/cmd/katana@latest
“`# 使い方
`-h`をつけるとオ