- 1. GraphQLでスキーマファーストなForm Validation
- 2. GAE/Go 1.12 で Cron と Cloud Tasks を使ってまあまあ時間のかかる定時バッチ処理をする
- 3. 等から定数を Go に引用したい(import “cgo”とか使わんで)
- 4. R言語に負けるのは悔しいので、Go言語でも生存曲線を描いてみた
- 5. うちの本棚のレイアウトの最適化をGopherさんに考えてもらった
- 6. Go勉強(5) kubernetes client-goでPodのwatcher(TUI)を書いてみる2
- 7. Go の Cache package のベンチマークを測ってみた話
- 8. GitLab as an OAuth2 provider: Web application flowを実装する
- 9. Pulumi(golang)でEKS環境を構築する
- 10. UnityとGo言語でAPI通信する
- 11. GDG DevFest Tokyo 2019 観戦記
- 12. MacにGoをインストールする
- 13. 動画ファイルをWeb経由で取得して、そのままCloud Storageにアップロード
- 14. Go langでfwを使わずにcrudのappを作成しました 2
- 15. Go langでfwを使わずにcrudのappを作成しました 1
- 16. Goで経過時間を計算するパッケージを作った
- 17. goでcliツールを作ってみる
- 18. 【爆速】Go入門
- 19. Go、Node.jsのプログラム間でRPC通信をする
- 20. GAEのデプロイが成功したらGopherが飛ぶようにして開発モチベーションを維持しよう!
GraphQLでスキーマファーストなForm Validation
こんにちは、こちらはGraphQL Advent Calendar 16日目です。
タイトルにある「スキーマファーストなForm Validation」とはなんぞやという話ですが、短く説明するとこんな directive を書いたとして
“`graphql
input RegisterAddressInput {
postalCode: String @constraint(minLength: 7, maxLength: 7)
state: String @constraint(maxLength: 4)
city: String @constraint(maxLength: 32)
line1: String @constraint(maxLength: 32)
line2: String @constraint(maxLength: 32)
}
“`サーバサイドはこの `constraint` を満たしていない値が来たら BadRequest で弾くし、フロントでは下記のようなFormの実装に使うバリデーションオブジェクトをこの定義に基づいて生成
GAE/Go 1.12 で Cron と Cloud Tasks を使ってまあまあ時間のかかる定時バッチ処理をする
# はじめに
* GAE のスタンダード環境のタイムアウト時間は 60 秒なので、それ以上時間のかかる処理を GAE 上で行いたい場合は Cloud Tasks を使います
* Cloud Tasks を使うとバックグラウンドで GAE の処理を実行することができて、タイムアウト時間が 10 分以上とスタンダード環境よりも長くなります
* GAE では Cron を使って定時処理を実行することができるので、Cron と Cloud Tasks を組み合わせることで、時間のかかる定時実行処理を Cloud Functions などを使わずに GAE のみで実装することができます
* ということで GAE/Go 1.12 環境で Cron と Cloud Tasks を使って定時バッチ処理をするサンプルを記載していきます# 手順概要
1. Cloud Tasks のタスク用のキューを作成
1. Cloud Tasks のタスクを処理するハンドラの作成
1. Cron の処理を実行するハンドラの作成
1. Cron の設定# Cloud Tasks のタスク用のキューを作成
*
等から定数を Go に引用したい(import “cgo”とか使わんで)
(本記事はGo3 Advent Calendar 15日目の記事になります。穴が空いていたようなので、埋めさせていただきます)
`import “syscall”` 愛用者の皆さん、こんにちは。
Windows の API を使う時、`import “cgo”` ではなく、`import “syscall”` で DLL をロードするようにすると、ビルドの際、C言語のコンパイラが不要になります。ビルド要件が下がると、それだけ開発したライブラリを使ってもらう確率もあがりますし、プルリクとかもしてもらいやすくなります。なので、少々の手間をかけて `import “syscall”` を使う価値は高いと思います。
でも…関数本体の宣言はともかくとして、たくさんの定数をヘッダファイルから書き写すのはたいへんですよね。
そこで、その手間を節約するツール:[go-importconst](http://github.com/zetamatta/go-importconst) を開発しました。
### go-importconst とは
“`const.go
package dos
R言語に負けるのは悔しいので、Go言語でも生存曲線を描いてみた
> R言語もすなる生存分析といふものをGo言語もしてみむとするなり。
R言語やPythonで作ると簡単にできるのですが、Goで作ってるもので統計データを元に自動判定させてなんかゴニョゴニョしてみたいときにどうやるんだろうということでやってみました。
# 設計
[Exploratory](https://ja.exploratory.io/)で作ったものがあるので、これをベースにします。
![スクリーンショット 2019-12-15 20.57.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9094/9fdd5fb1-43d8-50c6-c459-c8633f923ad4.png)
ステップを見ると
1. アクセスログのデータ読み込む
1. 時系列で並べ替える
1. ユーザでグルーピングする
1. 集計する
1. ユーザがもう辞めているかどうかを判定できるようにする
1. 計算するなるほどね…
![understand.jpg](https://qiita-image-stor
うちの本棚のレイアウトの最適化をGopherさんに考えてもらった
本が増えたときに本棚にきちんと入れるためのレイアウトを考えるのが大変なので、Gopherに頑張ってもらうようにした
# イメージ図
![gophercomplex5_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9094/6eb1d7c1-44bc-b0c0-4ddd-f1ddb09a3bf1.png)# 設計
本棚のサイズはIKEAの[BILLY](https://www.ikea.com/jp/ja/catalog/products/10351568/)をベースにしています。
漫画だと1段に2列並べられて、1列22冊合計で44冊を1段に収納できました。以降、1列を`group`、1段を`rack`と称することにします。
## 見送ったこと
出版社やブランドをまとめようと思いましたが、1日で作り上げるレベルではなさそうなのでやめました
# 作ったもの
## データ
CSVで所蔵データを作って、これをベースに本が棚に収まるようにグルーピングします。
以下がCSVの例です`
Go勉強(5) kubernetes client-goでPodのwatcher(TUI)を書いてみる2
# はじめに
この記事は Kubernetes3 Advent Calendar 2019 の16日目の記事です。
Go6のCalendarに投稿した以下の記事の内容を変更してクロスポストさせて頂いています。
[Go勉強(4) kubernetes client-goでPodのwatcher(TUI)を書いてみる](https://qiita.com/oruharo/items/668d708cead0ad261346)Kubernetesを操作した時の挙動を観察したくて、ターミナルからコマンドでNode/Podの状態をリアルタイムに表示するシンプルなツールを書いてみました。
# Source code
https://gist.github.com/oruharo/11abc53c9ad324522fe5b6bdc6620323#file-k8watcher2-go# Demo
下のターミナルでツールを起動すると、現在の実行ノードとPodの配置が表示されます。
上のターミナルからデプロイすると、デプロイしたPodがツール画面にリアルタイムに反映されます。
ターミナルの画
Go の Cache package のベンチマークを測ってみた話
この投稿は、 Go4 Advent Calendar 2019の 15日目のものになります。
こんばんわ!!
だんだん寒くなってきましたね。さて、私たちは普段GCPも多く利用しています。
しばらくすると得体の知れない使用されていないリソースが大量に出来上がっていて、コストを圧迫する問題があったりします。コストコントロール/棚卸し作業で、「Lifecycle設定が出来ていないもの/諸事情で設定しづらいもの且つ、使用されていないdiskを探す」といったことがしたく、 aws cliにはそれを探すコマンドがありますが、goolgle-cloud-sdkのgcloudコマンドにはありません。
そこで、それを作ることにしました。
https://github.com/k-oguma/gce-available-disksその際に option として、 誰が作成したものかわかるように Stackdriver loggingの activity log を検索するようにしました。 (保存期間は短いです)
しかし、業務で使うような大量のactivity logが発生するGCP pro
GitLab as an OAuth2 provider: Web application flowを実装する
この記事は[ユニークビジョン株式会社 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/uniquevision)の15日目の記事です。
## 概要
GitLabによるOAuth認証を、ReactとGolangを使って実装する。
認証が完了した際に、そのユーザの情報をブラウザ表示するアプリを実装する。## Document
[GitLab as an OAuth2 provider](https://docs.gitlab.com/ee/api/oauth2.html#supported-oauth2-flows)## 事前準備
User settings -> Applications内でOAuth認証に使うアプリを作成しておく## 認証の流れ
### 1. https://gitlab.example.com/oauth/authorize へリクエストを送るこの際に幾つかパラメータを付けてリクエストを行う
– client_id
– GitLabアプリのApplication ID
Pulumi(golang)でEKS環境を構築する
# はじめに
AWS環境構築をコード化するためのツールとしてAWS CDK、Terraform、Ansible、Pulumiなどがあります。
今回は記述言語をgolangとしてPulumiでEKS環境を構築します。# Pulumiとは
「Modern Infrastructure as Code」を掲げた、クラウドインフラを構成するためのOSSです。
対応言語はJavaScript、TypeScript、Python、golangなどが挙げられます。
GCP、AWS、Azureに対応しており、Kubernetesリソースをデプロイすることも可能です。まだ新しいこともあり公式ドキュメントや公式サンプルコードはTypeScript中心となっています。
普段バックエンドを触っている人にとってはgolangの方が嬉しいですね。# 環境情報
macOS Mojave 10.14.1
pulumi: 1.7.0
golang: 1.12.4# 実装
golangを使用して実装します。
事前にPulumiやgolangはインストールされていることは前提とします。`$GOPATH/
UnityとGo言語でAPI通信する
# はじめに
ゲーム開発エンジン「Unity」と、Googleにより開発されたプログラミング言語「Go」を用いて、凄くシンプルなREST APIを実装したいと思います。Unityについて:https://unity.com/ja
Goについて:https://golang.org/# 開発環境
– MacBook Pro (15-inch, 2018)
– macOS Catalina
– Unity 2019.1.1f1 Personal
– Go 1.13.5 darwin/amd64# システム構造
Unityをクライアントサイド、APIサーバ(Goで実装)をサーバサイドとして作りました。# 内容
サーバサイドで保存されているデータに対して、Unity側からデータのID(一意なもの)を指定して対象データを取得します。データに関しては、予めいくつか用意しておきます。今回はDBを使わないので、オンメモリのデータストア(リストを使います)に格納しておこうと思います。なので、サーバを停止させるとデータは吹き飛びますw
# 実装
## サーバサイド
まずサーバサイドか
GDG DevFest Tokyo 2019 観戦記
# はじめに
12/14(土)開催の`GDG DevFest Tokyo 2019 `行ってきました。
[公式サイト](https://tokyo.gdgjapan.org/devfest2019)この記事は個人の備忘録になります。
# 参加したセッション
ちょっと大きくて見にくいですが、全体のセッションはこんな感じでした。
![公式ページのガイド](https://tokyo.gdgjapan.org/img/devfest2019/DevFestTokyo2019.png)今回は、普段業務で使うものはもちろん、
普段触れていなくても来年使いそうな技術のキャッチアップ目的で参加してきました。## 11:30~ 遅刻+企業ブース周り
~~前日の忘年会で夜遅くまで飲んでいて、当日朝も油断して~~ 遅刻して参加しました。
開会式は参加したかったんですが、のんびりする時間が出来たのでのんびり企業ブースを周り、
ノベルティグッズを収集しました。
(CircleCI Tシャツ いただきました)LINEの企業ブースでも結構ゆっくり説明を聞くことができて、いくつか自社公開のOSSを
MacにGoをインストールする
とりあえずGoを始めようとして、[A Tour of Go] をやってみました。
が、その事前準備のインストールで躓きました…。
これから同じような経験をする方がいらっしゃるのではないかと思い、備忘録も兼ねて投稿します。
よりよい方法やバグ等ございましたら、アドバイスいただけると光栄です。# 環境
+ macOS
+ Homebrew
+ Go (v1.13.4)# やってみたこと
## インストール
とりあえず、HomebrewでGoをインストールします。
“`bash
$ brew install go
“`## 確認
### バージョン確認
インストールが完了したら、バージョンの確認をします。
“`bash
$ go version
go version go1.13.4 darwin/amd64
“`### 実行環境の確認
次に、[公式のスタートガイド](https://golang.org/doc/install?download=go1.13.5.darwin-amd64.pkg) から、実行環境のテストを進めます。
“`bash
動画ファイルをWeb経由で取得して、そのままCloud Storageにアップロード
# お題
表題の通り。AWSのS3に署名付きURLでアクセスして取得した動画ファイルをそのままCloud Storageにアップロードする要件があったので、事前にちょっとお試しで実装してみる。
今手元に持ってるのがGCPのアカウントだけなので、「S3から署名付きURLで」という部分は端折って、GCPのCloud Storageに別バケット用意してそこに取得対象の動画ファイルを置いて(パーミッション付けて)おくことにする。# 前提
– GCPの何たるかについては説明しない。
– `gcloud`コマンドの使い方やローカルへのクレデンシャル取得方法などは説明しない。# 開発環境
## # OS – Linux(Ubuntu)
“`
$ cat /etc/os-release
NAME=”Ubuntu”
VERSION=”18.04.2 LTS (Bionic Beaver)”
“`## # 言語 – Go
“`
$ go version
go version go1.13.3 linux/amd64
“`## # パッケージマネージャ – Go Modules
#
Go langでfwを使わずにcrudのappを作成しました 2
part 1
https://qiita.com/dossy/items/721db0ab74afd8e78599
さぁ、part 1でhttp requestとdb 接続ができるようになりましたので、本格的にcrudの処理を行いましょう。
main.goにそれぞれのrequestが呼べるように記述しておきましょう。“`main.go
http.HandleFunc(“/new”, handle.New)
http.HandleFunc(“/create”, handle.Create)
http.HandleFunc(“/edit”, handle.Edit)
http.HandleFunc(“/update”, handle.Update)
http.HandleFunc(“/delete”, handle.Delete)
“`# createを定義
createするときは
formが必要なのでformがあるnew.htmlを呼び出します。これは/newのリクエストを送ってhtmlを表示させます。“`handle/handle.go
func New(w htt
Go langでfwを使わずにcrudのappを作成しました 1
go langを勉強し始めて、何かappを作れないかと思っていたので簡単なcrudのapp作成に打ち込みました。
# 下準備
まず、始めるに当たって、go langの基礎を学んでおく必要があるかと思います。
###### go langのinstallはやっておいてください
###### goの構文や概念の理解
slice,struct,型決め,変数の定義などなど。基礎的なところで大丈夫かと思います。(自分もそんなになので)#tree構造
todo/ (root)
├handle
┃ └ handle.go
┣serv
┃ └ data.go
┣database
┃ └ db.go.go
┃
└ main.go
└ index.html
└ new.htmlこんなんです。
handleはhttpのリクエスト処理の役割
servはdbから情報を引っ張ってきたりする役割
databaseはdbと繋げる役割#serverを立ち上げる
“`go:main.go
package mainimport (
“
Goで経過時間を計算するパッケージを作った
# 動機
年月を計算する処理がなかったから。
> X は Y から A 年 B ヶ月 C 日 D 時間 F 分 E 秒 経過しています
というのをやろうとすると、
> C 日 D 時間 F 分 E 秒
はタイムスタンプの差から計算することができますが、それ以降はうるう年などの関係から単純に計算することができません
# 作ったもの
https://github.com/usk81/tiff
## 使い方
“`go
d := New(time.Date(2000, 1, 1, 0, 0, 0, 0, time.Local), time.Date(2001, 12, 10, 11, 10, 20, 0, time.Local))// 時間差の取得
years, months, days, hours, mins, sec := d.Term()
// years: 1
// months: 11
// days: 9
// hours: 11
// mins: 10
// sec: 20// 年単位で計算で経過時間を計測
years = d.Ye
goでcliツールを作ってみる
この記事は[Fusic Advent Calendar](https://qiita.com/advent-calendar/2019/fusic)15日目の記事です。
こばんは。お久しぶりです。まっさんです。
アドベントカレンダー何を書こうか迷っていたら、こんな時間になっていまいました。良い子はちゃんと事前に準備しときましょう。とくに何も閃かなかったので、[弊社](https://fusic.co.jp/)の一部のメンバーで行っている朝の15分輪読会で、絶賛勉強中のgo言語について書いてみようと思います。(golang初学者ですので、誤り等ありました。ご指摘いただければ幸いです)
## 社内のニコニコカレンダーのcliツールを作ってみる
弊社には、@Y_uuu が作成した、nicoleというニコニコカレンダーがあります。
社員の20〜50%が日々投稿する人気ツールです。
そんなニコニコカレンダーのcliツールを作ってみました。リファクタリングとか、してないので、色々ツッコミどころ満載ですが、こんな感じです。“`Go
package mainimport (
“
【爆速】Go入門
この記事は2019新卒 エンジニア Advent Calendar 2019の15日目の記事です。
今回は、爆速でGoに入門していきます。
この記事を読み終えれば、Goの基礎は身についたと言っても過言ではないでしょう。
#Hello World
“`
package mainimport “fmt”
func main() {
fmt.Println(“Hello World”)
}
“`“`
$ go run main.go
Hello World
“`#Packages
Packageは名前空間を分けるための仕組みです。同パッケージ内のメンバは無制限に参照することができますが、他のパッケージのメンバにアクセスするにはimport文が必要になります。
上のHelloWorldのコードでは、以下のようなfmtパッケージをimportしています。
“`
package fmtfunc Println(…) {
…
}
“`#Exported names
最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエク
Go、Node.jsのプログラム間でRPC通信をする
#概要
`gRPC`を使用して、Go、Node.jsのプログラム間でRPC通信をします。
クライアント側をGo、サーバ側をNode.jsが担当します。環境
MacOS Catalina: 10.15.1
Go: 1.13.4
Node.js: 10.15.3#クライアント(Go)の作成
クライアント側のディレクトリを作成します。“`
$ mkdir grpc-test-go
“`
クライアント側のディレクトリ構成は最終的に以下のようになります。“`
$ cd grpc-test-go
$ tree
.
├── bridge
│ ├── bridge.pb.go
│ ├── bridge.proto
│ └── go.mod
├── client.go
└── go.mod
“`
###.protoファイルの作成protoファイルを作成して、仕様を定義します。
型に`repeated`をつけると配列になります。
[公式ページ](https://developers.google.com/protocol-buffers/docs/proto3)を参
GAEのデプロイが成功したらGopherが飛ぶようにして開発モチベーションを維持しよう!
# まとめ
* 趣味開発のモチベーション維持のため、デプロイ時に通知してくれるプログラムを作った。
* ただ通知するだけだと愛想ないので、Gopherを飛ばしてみました。
* Gopher 可愛い! コミットするのが楽しみになった!~~気がする~~# はじめに
開発のモチベーションを維持するのは難しい。はじめは発想と情熱に任せてガリガリコードを書いていても、ある程度進んでくると
次第にモチベーションが低下してしまうものです。
恒常性維持機能の為せる業か、理由はわかりませんが、開発者なら経験したことがあるでしょう。現在、私は趣味で Google App Engine 上で動くバックエンドAPIサーバを作成していますが
モチベーションや集中力の低下を感じていました。____
そこで以前何かの雑誌で読んだ、開発メンバーのモチベーションを高める方法を実践しました。
方法はいたって簡単です。***進捗や変化を大袈裟に見える化する***
記事では、開発チームのモチベーション維持のため、以下のような方法が紹介されていました。
* 不具合発見時にパトライトを光らせる
* リ