Yamashouは田舎に行きたい

ある田舎県の田舎の町で大学生やってた僕が、思ったこと、やったこと、勉強したこと、などをつらつら書いて行く

GraphQLのGoクライアントを作ってみた

普段GAE/Goでgqlgenを使ってAPIサーバーを開発をしていて、WebクライアントはApolloGraphQL Code Generatorを使用して開発をしています。 そこで、APIサーバー側のE2Eテストを実現するために、Go言語のGraphQLクライアントが必要になりました。その時の選択肢は以下のような選択肢があります。

この二つのクライアントは非常にシンプルな作りで、GraphQLのAPIを呼び出す分には十分な作りでした。しかし、GraphQLを使ったことある方ならわかるとは思いますが、インプットの型とレスポンスの型が非常に多くなるのと、ネストが深くなります。そうなると、クライアントのQuery毎にレスポンスの型を用意する必要があります。そして、サーバーの開発はgqlgenを使っているので、resolverまでが自動生成される気持ちよさを覚えてしまっているので、GraphQL Code Generatorと同じように定義したQuery毎に型を生成して欲しいという欲望に駆られてしまいました。そして自社のプロダクト開発では、そのクライアント生成を自作して半年ほど使っております。 しかし、今回個人的に、GoでGraphQLのAPIを叩きたい時がきたので、gqlgenのサーバーに大してのみ生成していたものをIntrospection QueryでクライアントのSchema定義から型を生成するようにしたものを公開いたしました。

github.com

Annict GraphQL APIでクライアントを生成

今回叩きたかったAPIAnnict GraphQL APIです。 そして、こちらの使い方を説明されている(Qiitaの記事)https://qiita.com/shimbaco/items/e3f2f8650b08e1e060bdのクライアントを生成してみたいと思います。

まず、gqlgencを入れます。

go get -u github.com/Yamashou/gqlgenc

次に、以下の記事よりAnnictアカウントの設定やアクセストークンを取得してください

qiita.com

取得したアクセストークンを環境変数として設定します。

export ANNICT_KEY=<アクセストークン>

今回こちらのクライアントは基本的にgqlgenのPlugin機構を使っているので、設定もyaml方式を取っているので、.gqlgenc.yamlを用意します。

model:
  filename: ./gen/models_gen.go # Schema定義から各オブジェクトを生成するファイルを指定
client:
  filename: ./gen/client.go # クライアントの実装を生成するファイルを指定
models: # Schema側で指定している型をGoではどの型にするかなどを指定できます
  Int:
    model: github.com/99designs/gqlgen/graphql.Int64
  Date:
    model: github.com/99designs/gqlgen/graphql.Time
endpoint:
  url: https://api.annict.com/graphql # APIエンドポイントを指定します
  headers: # Introspection Queryを投げるのにヘッダーが必要な場合は設定します。
    Authorization: "Bearer ${ANNICT_KEY}"  # 今回はAnnictのアクセストークンが必要なので、環境変数として、セットしたものをそのままこのように記述して使うことができます
query:
  - "./query/*.graphql" # リクエストで使うqueryの定義ファイルを指定します

それでは/query以下に今回使うqueryを定義していきます。

mkdir query

query/query.grahql

query GetUserName {
    viewer {
        username
        name
    }
}


query SearchWorksBySeasons($seasons: [String!], $first: Int!) {
    searchWorks(seasons: $seasons, first: $first) {
        edges {
            node {
                title
                watchersCount
            }
        }
    }
}

そうしたら、.gqlgenc.yamlのあるディレクトリで、gqlgencを実行します。すると指定した通り/genに型定義とクライアント、リクエストのインプットとアウトプットの型が生成されます。

それでは、そのクライアントを使ってリクエストを送ってみたいと思います。

main.go

func NewAnnictClient(c *client.Client) *gen.Client {
    return &gen.Client{Client: c}
}


func main() {
    key := os.Getenv("ANNICT_KEY")
    authHeader := func(req *http.Request) {
        req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", key))
    }

    ctx := context.Background()

    annictClient := NewAnnictClient(client.NewClient(http.DefaultClient, "https://api.annict.com/graphql", authHeader))
    userName, err := annictClient.GetUserName(ctx)
    if err != nil {
        fmt.Fprintf(os.Stderr, err.Error())
        os.Exit(1)
    }

    fmt.Println(userName.Viewer.Name, userName.Viewer.Username)


    works, err := annictClient.SearchWorksBySeasons(ctx, []string{"2017-spring"}, 3)
    if err != nil {
        fmt.Fprintf(os.Stderr, err.Error())
        os.Exit(1)
    }

    for _, work := range works.SearchWorks.Edges {
        fmt.Println(work.Node.Title, work.Node.WatchersCount)
    }

}

gqlgenのpluginとして使う

またこのクライアントの実装はgqlgenのPluginのConfigMutatorを実装しているため, github.com/Yamashou/gqlgenc/clientgenのパッケージをgqlgenのこちらの記事にしたがってインポートすることで、そのサーバーに対応したものを使うことができます。

その他機能について、

GraphQLのスペックについて

GraphQLのQuery, Mutation, Fragmentなど、最低限必要なものは使うことが可能ですが、Subscriptionやdirectiveには追従できていない部分もありますし、何がバグで動かないなどの修正が必要ならissueを投げてもらえると嬉しいです。

Schemaのロード方法について

現在はエンドポイントに大して、Introspection Queryを叩いて、そこからロードしているので、もしSchema.jsonやSchemaファイルからロードする方法を用意してはいません。ので、もし必要ならIssueをお願いします。

最後に

最初にも言いましたが、gqlgenを使用して普段は開発をしています。もっとこのツールを使って開発してくれる人が増えてくれると嬉しいので、ぜひこの記事を読んでいただいた方にはgqlgenを一度使ってみてもらえると嬉しいです。そして、そこでクライアントの悩みが出たら、こちらのgqlgencを使ってみてください。

参考

gqlgen.com

graphql-code-generator.com

github.com

github.com

annict.com

docs.annict.com

今年読んだ本まとめ

はじめに

Aizu Advent Calendar 2019 12日目の記事です!

今年は社会人一年目で、春先はバタバタしていましたが、夏あたりからちょくちょく時間を見つけては学生の頃に読めなかった本を読んでいました。 そこでその中で個人的によかったものを数冊話していこうと思います。 (基本的に超絶有名な本ばかりなので、読みあさっている人にとっては対してためにならないかもです!)

新装版 リファクタリング 既存のコードを安全に改善する

この本は、言わずもしれたリファクタ本です! 1990年代のソフトウェア開発の経験から、ソフトウェアの負債を解消する手法である「リファクタリング」の手法をjavaでの実装コードと手順で細かく説明してくれる名著です

なぜ読みはじめたのか?

この本を読もうと思ったきっかけが、昨年オブジェクト指向やソフトウェアの設計にハマって、DDDやらクリーンアーキテクチャやらを読んでいるときに、出典として出てきた本だったので、いずれは読んでおきたいなと思っていて、学校の売店で買って持ってはいたんですが、なかなか時間がなく積み本になっていますた。 夏ぐらいに自分のコードの汚さやどうしようもなくいいコードがかけないと感じでいるときに、思い出して読みはじめました! (元々、買ったときにさくっと読んだんですが、意識が違ったので全く頭に入っていませんでした🙇‍♂️)

どうだった?

実際リファクタリング手法としても、古い本なので現代使えるor使われている手法かというと、そうではないとは思います。

でも、その方法やリファクタリングした結果というものは、これまでに多くみてきたソースコードの至る所でみてきたものに似ていたり、書いたことのあるものが出てきたり、これまで意識していなかったことなどもありとても面白く勉強になりました。

特に、僕は大学の授業ぐらいでしかJavaを触ってないですが、Java1.1のコードで書かれていて古いんですがシンプルに書かれているので、個人的には読みやすかったです!

リファクタリングの本なんだから当たり前だろ!と言われたらそれまでですが、、、、)

あとは、オブジェクト指向の設計の考え方だったりも見えて、「あのアーキテクチャでも同じ説明あったな〜」「あのアーキテクチャの説明では省かれていたな〜」みたいな内容があってとても気づきになったし、また最近第二版の日本語訳も出て、そちらは全てJavascriptで書き直されてAPI設計などの話も出てきたりと、モダンなものもあるようなのでそちらも読みたいと思います!

bookwalker.jp

https://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-%E7%AC%AC2%E7%89%88-%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%89%E5%85%A8%E3%81%AB%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B-OBJECT-TECHNOLOGY/dp/4274224546/ref=asc_df_4274224546/?tag=jpgo-22&linkCode=df0&hvadid=342458612368&hvpos=1o3&hvnetw=g&hvrand=8769093249918098339&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1028853&hvtargid=pla-845891054614&psc=1&th=1&psc=1www.amazon.co.jp

増補改訂版Java言語で学ぶデザインパターン入門

こちらも言わずもしれた名著、デザパタ本ですね! この本も1990年代から2000年代のころにこれまでのソフトウェアの開発経験から、オブジェクト指向でこういう風にかくと拡張性があり保守性の高いコードがかけるというパターンを23個紹介している本です。

なぜ読みはじめたのか?

これも元々、いろんなアーキテクチャの話だったり、他の記事だったりでよく出てくる出典の一つで、リファクタリング本にもかなり出てきます。 なので、「デザインパターンオブジェクト指向やソフトウェアの関係性って一体なんなんだ」というのを知りたくて、読みはじめました!

どうだった?

まず、この本はリファクタ本の後に読んだのがまたよかったですね。 「このデザパタはあのリファクタに出てきたな!」ってのがあったり、逆に「これ先にやっとけばリファクタをしなくて良さそう」とか考えながら読めたのが一番よかったですね!

あとは、デザパタは今ある流行りのアーキテクチャの部品となっていたり、元になる考え方を産んでいるんだな〜っているのがよくわかりました。PCのGUIソフトウェアの時代の話なので、当然APIやwebフレームワークの話はないですし、ましてや、スマホのス文字すら出てきません。しかし、23のデザパタは確実に現代の技術に足跡を残していて、かつ、その歴史を作っているので、学んでおくと今の技術を学ぶ手助けになるのは間違い無いと感じさせてくれた一冊でした

https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=asc_df_4797327030/?tag=jpgo-22&linkCode=df0&hvadid=295723231663&hvpos=1o1&hvnetw=g&hvrand=16034287059798744257&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1028853&hvtargid=pla-524447502226&psc=1&th=1&psc=1

プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則

この本は著者さんのブログから厳選された内容のようやく内容が書かれた本で、ソフトウェアエンジニアになるにあたって、重要となる用語や考え方が簡潔にまとめられた本です

なぜ読みはじめたのか?

年上のエンジニアの方と話す機会があるときに、わからない用語や知識不足で内容と用語が合致していないものなどで、頭がこんがらがることが多々ありました。しかし、この本ベースで、「この本に簡潔にまとまってるよ」と言われて、手に取ったのが最初でした。 そこから、一回全部目を通してみるかという感じで読みはじめました。

どうだった?

知っていることもたくさん載ってましたが、逆に「この自称や考え方に、こんな名前がついていたのか」とか、今まで曖昧だったものがクリアになった部分もありました。 逆に、この本を読んでから、ブログや記事を読むときにその言葉の意味合いや使われ方が正しいかどうかに注意して読むようになり、そういう視点を持たせてくれた本でした! (ブログを読んでいた人からすると物足りないようですが、僕はアーカイブしか読んだことがなかったので、だいぶためになりました)

https://www.amazon.co.jp/dp/B071V7MY82/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

(おまけ) クリエイティブと日課 KEEP GOING 浮き沈みから身を守り進みつづけるために

技術本では無いですが、エンジニアをするにあたって、無駄なものを作りたくなっるときや、意図的では無いにしろ無駄になってしまったことをやるときに落ち込んでしまいがちです(自分がそう)そんな人には読んで欲しい本です。

著者がやっているクリエイティブなものを作り上げるための日課や考え方が書かれていて、中身の構成も書き方や構成も面白く、クリエイティビティをあげてくれそうな日課や無駄だと思っていたことにも意味があると思えるようになる本なので是非読んでみてください

Amazon CAPTCHA

まとめ

このほかにもちまちま読んでいますが、個人的にためになったものはこの四冊かなと思っています。まだまだ、最近友達に勧められている本や読みたいものがたくさんあるので、年末年始で読んで行けたらいいなと思ってます!

半年ぶりだな

はじめに

読んでくれている皆さん、お久しぶりです。 最近全く書けていませんでしたが、この書けていなかった半年で大変色々なことがあり、たくさん書きたいことがあります。だから、いくつかの記事に分けて書いていこうと思います。以下のようなタイトルで書いていきます。

  • 僕が目指したいと思った理想的な状態
  • 僕が選択した来年からの居場所
  • 僕があと半年でやること
  • 僕の弱点はここだ
  • 僕が考える自分の役割と特性
  • 僕が思う大学生という立場

今考えているのはこの4つを書こうと思っています。 この記事ではそれぞれどのような役割の記事でどんなことを書こうと思っているのかを書いておきます。

僕が目指したいと思った理想的な状態

この記事では自分の就職とかそういう面ではなく、精神的にどんな状態になりたいのか、というものがこの半年で少し具体化された部分があったので、それを書いていきたいど考えています。ちょいと過激なことも書くかもなので、見たい人だけ見てください。

僕が選択した来年からの居場所

この記事で、就職について書いていこうと思います。どうしてその選択を取ったのかだったり、自分が卒業後にどうしたいのかを書こうと思います。

僕があと半年でやること

この記事では、単純にあと残り半年の大学生活、自分が何をしたいのかを書いておきます。割とゆるふわに書くつもりです。

僕の弱点はここだ

この記事では、最近よく自分の弱点だったり、弱いなと思うところが結構露骨に出るときがあり、そのことについて書いていきます。割とネガティブちっくになりそうな気がしてます。

僕が考える自分の役割と特性

この記事では、上でネガティブなことを書くのでその逆で、ポジティブに自分を捉えた、根拠のない自身のようなものを書いていきます。ここに残すことで、自信をつける意味も含めています。

僕が思う大学生という立場

この記事では、自分も残り半年となった大学生活、何を思って入学して、今どう思っていてみたいなことベースに、個人的に思う大学生のあり方を書いていきます。

最後に

これらは自分の考えを、きっぱり整理する意味も含めて書きます。だから、もしかしたら増えたり減ったりするかもしれませんが、もし、興味なおある方はぜひよんで意見をいただけると嬉しいです。

GoCon2018springに参加・LTして来た話

これで、2回目の参加となりましたが、前回は自腹切って高速バスに揺られること5時間かけて行ったのですが、今回はメルカリさんにスカラーシップに採用していただき、交通費と前泊を用意していただくことができて気楽に参加することができました!ありがとうございました!!

tech.mercari.com

どうだったか?

控えめに言って、最高でした!!!!!!!!

はじめにDaveさんのお話から、始まりましたが、mapの実装の話は非常に面白かったです。runtimeの中を読まなきゃいけない気持ちになりました。

次に、スポンサーセッションがあった後に、二つのセッションに分けてやっていたので全部は聴けなかったのですが、非常に勉強になりかつ、面白かったです。

自分はルーム2の方にいたのでそっちの方を聞いていました。

How to write Go code

speakerdeck.com

@kaneshin0120さん

確かに!と思う内容でしたし、自分はwikiを見ていなかったので、非常に勉強になりましたし、wiki読んでいこうと思わせていただける内容でした!

GoらしいAPIを求める旅路

www.slideshare.net

@lestrratさん

個人的に一番面白くかつためになる発表でした。 どんどんコードがいい感じになっていくのを見て、すごくスッキリした気持ちになりましたし、こういうフローで考えていくのか!というふうに知見を得られることができました。ありがとうございました!

コードジェネレートとの付き合い方

www.slideshare.net

(@pei0804)https://twitter.com/pei0804さん

自分はコードジェネレートをやったことがないので、いつもこの手の発表は新鮮で面白いのですが、pet0804さんの発表はコードがたくさん出てきて、かつ、それに説明が書かれていて非常にわかりやすく、内容が頭に入ってきました!コードジェネレートやろうと思いました。

Gormの気持ちになってGormを使う

speakerdeck.com

(@linyows)https://twitter.com/linyowsさん

自分も前回apiを書いた時にGorm使ったのですが、最近またそのapiを触ろうとしたら動かなくなっていて、戦っている最中だったので、この発表は非常にタイムリーでした。active recordに引っ張られてるという部分の図解は、確かにと自分も思いましたし、わかりやすかったです。

Performance Optimization on Google AppEngine

speakerdeck.com

(@_timakin_)[https://twitter.com/timakin]さん 最近アルバイトで、gaeを触る機会があったので、知っている機能もありましたが、知らないものが多かったので勉強になりましたし、次に自分で何か作る時に使って見たいなと思いました。

Stackdriver Profiler at Mercari

gist.github.com

(@deeeet)https://twitter.com/deeeetさん

飛び入りで、お話をしてくださって、自分が今まであまり考えてこなかった事ばかりだったので、今ここに乗っているリンクを順番に見ていっているところですが、非常に勉強になります!Stack driver Profilerも導入が簡単そうだったので、これから作るものには入れていこうと思います!

LT

みなさん色々な発表されていたのですが、非常にトークがうまくて聞きやすかったです。自分も技術的なことではないですが、発表したのですが、まだまだだなと感じさせられました。

speakerdeck.com

最後に

個人的に、前回よりも面白かったのと、勉強になったなと感じた一日でしたし、もっとGoを学ばなければならないと思いました。次は技術的なことを発表したいなとも思ったのでネタを出せるように、日々書いていこうと思います!

マイクロサービス間のポーリングをなくすために奮闘した話 in サーバーエージェントインターン

f:id:shota-df-412:20180228145529p:plain

またインターン

「何社目だよ!!」とツッコミ入れていただいた方ありがとうございます。8社目ですね。 このインターン自体は昨年の7月から決まっていたので、決まってから随分たったなという感じですね。

どこでインターンしたの?

Freshでサーバーサイドとして、インターンをさせていただきました! 期間は2/1~2/28です

freshlive.tv

何をしたのか

マイクロサービス間のポーリングを無くす、ミドルウェアを作成することが、僕の一ヶ月のタスクでした。 (このタスクも個人的にはすごい抽象的な振られ方をして、内心『まじか!終わるか?』と思いつつ、やりました)

どんなものを作ったか

neoplasma というものを作りました。 もともとFreshにはイベント配信基盤のplasmaというものがありまして、それを応用活用して作りました。

plasmaの説明は以下をご覧ください、plasmaについて知っている前提で以下では話す部分もあるので読んでください

(大学の先輩でもありますが、あまり関わったことがないのに失礼します) upamune.hatenablog.com

ここで疑問が生まれます。plasamaでマイクロサービス間のポーリングも消えんじゃないの? と、 しかし、plasmaはイベントすうに対してスケールすることができない仕組みをしているため、高頻度でポーリングを行うイベント通信(動画のキャッシュ部分など)では使いづらいという問題点がありました。

スケールするplasmaを作りたい!!!

まず要件を考える中二つの問題点がありまして、

  • clientが複数接続を張る必要がある。
  • 全plasmaに接続を張れている状態の担保、全イベントが届く状態の担保が必要

以上二つを解決するには以下の動きをすると解決できる!! という今回の構成と動きを紹介します

今回は、Freshでは最近kubernetes(以下k8s)を使っているので、k8sの用語で説明していきますm( )m、インターフェースを作ってあるので、実装すれば他のプラットフォームでも動くと思いますが、今回はごめんなさい、、、

Deployments(neoplasma群)内(最小構成)の動き

最小構成で必要な部分の図のみが貼られています

⑴ neoplasmaがイベント通知を行える状態にない場合

f:id:shota-df-412:20180228183353p:plain

イベントを受け取れる状態にないときは、ロードバランサからイベントが飛んできてしまった場合ロードバランサに送り返します。

⑵ 新規neoplasma-client立ち上がるとき

f:id:shota-df-412:20180228184252p:plain

  1. k8sマスターにneoplasamのdeploymentsの接続先リストをもらう
  2. もらって来た接続先に接続をはる(grpc)

実装的には、①はk8sに依存しているのでインターフェースとしては②のみを作っています。

⑶ スケールアウトしたneoplasmaに接続する

f:id:shota-df-412:20180228183833p:plain

  1. 新規neoplasmaの所属するdeploymentsに対して自分の状態を送る
  2. 別のneoplasmaに送られる
  3. 送られて来たイベントをneoplasma-clientに対して送る
  4. 状態を送った先にコネクションをはります

neoplasmaは常に数秒おきに自分のDeploymentsに対して、自分の接続情報を送っています。無限ループの可能性は0ではないですが、確率的に低いので許容範囲としています。

状態イベントには接続先情報があるのでそこにneoplasma-clientは接続していきます。

⑷ スケールアウトしたneoplasmaがイベント処理が行えるようになるとき

f:id:shota-df-412:20180228213841p:plain

  1. 新規neoplasmaの所属するdeploymentsに対して自分の状態を送る
  2. 別のneoplasmaに送られる。
  3. 受け取ったneoplasmaは送って来た先にneoplasmaに対して、自身の接続状態を送ります。
  4. 送られて来たものと同等の状態の場合、正常のイベント処理を始めます。

④の時、送られてきた接続状態と自分の接続状態を比較して、大丈夫そうならイベント処理を行いますが、ダメなら、①のように送り返します。

⑸palsma-clientとの接続が一つ切れた場合

f:id:shota-df-412:20180228214253p:plain

  1. 新規neoplasmaの所属するdeploymentsに対して自分の状態を送る
  2. 別のneoplasmaに送られる
  3. 送られて来たイベントをneoplasma-clientに対して送る 
  4. 足りない接続を検知し、そこに繋ぎに行きます。

これで、行けた!!!と思いますが、そうではありません、これはまだ、クラスタ内の話なので、次に外部との接続の話です。

クラスタから外部クライアント

podでスケールアウトできるようになったけどまだパブリックに入っていないのでそうしたいのですがい問題があります。

k8s外のパブリックな環境からはポート固定

なぜ欲しいのかというと、 - k8s内は仮装環境なので、ポートはなんとかなるが、外部との接続はポート限られているので、pod一個ずつ開けることはできまっせん、そこでk8sのserviceを使って、NodePortを開けたとしても、grpcの接続はNodeportに繋がっているどれかのpod一つにしか繋がりません。

ここで、 neoplasmaのproxyを設置してできそうな予感がしたので、 考えたのが先ほどから出て来ているneoplasma-clientです こいつは何かと言いますと、proxyの役割を持っています。

  • neoplasam-client群(deployments)でポートを持てば、外部クライアントは接続先を特にきにする必要はない
  • plasma-client群で全てのneoplasmaへの接続を持つ
  • neoplasma-client自体もスケールアウトする
  • 振り分け判定がないので、負荷は低い
  • node数依存になっても管理しきれる想定

なのでこうなります。

f:id:shota-df-412:20180228182851p:plain

少し簡略さした図でイベントの流れを以下のようになります f:id:shota-df-412:20180228225544p:plain

  1. ロードバランサがイベントを振り分ける
  2. 振り分けられた先のdeploymentsの中のどれかのneoplasmaにへ振り分けられる
  3. 別のdeploymentsにもデータを流す
  4. neoplasma-cliet群へ投げる
  5. Nodeportを通って外部へ
  6. クラアントへ飛ばします。

これによって、neoplasmaのpodのスケールをして、一つのdeploymentでは接続数が耐えられなくなったら、接続を分散するために、deploymentsを増やすことと、neoplasma-clientを増やして対応します。

これで、ポーリングをまたさらに減らして平和な世界へと近づくことができました!(多分)

まとめると

だらだらと動きを説明しましたが、二段階のスケールし、イベント処理をするneoplasma群と外部と繋げてよしなにやってくれるneoplasma-clientを作ったということです!!!

感想

k8sは、ほぼほぼ初見で、社内の資料や、公式ドキュメントもめちゃくちゃあさりましたし、Deploymentsの概念の理解と、service,ingressの理解などが割と手間取りました。あとは設計もあーでもないこーでもないと、一人ホワイトボードと向き合いながら考える日々で、ほとんどコードは書いていないのですが、初めてこんなに時間をかけて真剣に設計をして、設計の重要性と大変であることが学べました。

最後に

関わってくれた、Freshの皆さん、ランチや飲みに連れてってくれたサイバーの方々ありがとうございました!またおはないしできることを楽しみにしています!!!

3/1からは、DMMのネクストカレンシーシーでお世話になるので、会社での業務以外のことなどは、4月にまとめて書きたいと思います。

2018年の始まりだ!!!!!

2017年は終わった!こんな一年でした!!!というのはここに乗っているのでよかったらどうぞ!!

shota-df-412.hatenablog.com

2018年のやりたいここ・目標

さて、平成30年幕が開けたので目標を書いて行く

大学を卒業する

当たり前ですが、大学を卒業できるように、残り、4単位と卒業研究はしっかりやりきっていきたい

進路を決める

自分の中では学部を卒業して、就職するつもりなので、就職先を決めることですね。すでに受けている会社さんがいくつかありまして、いきたかった会社のうち残念ながらご縁がなかったとの連絡をいただいたところもありましたが、選考が続いていたり、いい報告をくださったところもあるので、これからだと思っています。 もう一つ、様々な方から提案されたり、向いていると言われるのが、起業することで、自分もなしではないし、やりたいこともあるので、その辺も視野にいれて進路は考えて行けたらと思います。

AizuGoの発展

昨年に発足して、二回企業さんのエンジニアとコラボして、大きくやらせてもらいましたが、会津大学==Go といイメージをつけて行きたいと考えているのでバンバン頑張ってやって行きたい

StudentGoを加速しGo Conference for Students

昨年AizuGo#2の流れからできたチームで、学生の中で、Go言語に関する話だったりをしたり、現役のエンジニアの方もいるので、質問ができたり、インターン・アルバイト・就職の選考の話などもできます。目標としては、Go Conference for Studentsを開催して、日本の学生の中でGo言語をはやらせていきたいと考えています。是非学生の方も、Go言語を使っている会社の方も入っていただけたらありがたいです。何卒よろしくお願いします。

StudentGo Slack 招待フォーム

ZLiの発足

昨年までは、ACL(Aizu Circle Learner)というチームで、勉強会やLTをやっていたのですが、一年間やってみて、反省点と新入生獲得のためにサークルにすることにし、企業さん方とのLT大会が昨年はおおかったので、LTを僕らのサークルの名前を使ってやって行けたらなと考え、名前を新たにZLi(ジライ)とい名前でやっていこうと思っています。由来はAizuのZとLightning talkのLiをとってZLiとしました。 会津大学の方是非入ってください!それと、企業、他大学の学生の方、是非合同でLT大会をやれたらと思うので、僕まで連絡をください!!!そして、みているかわかりませんが、来年度の新入生として入る方、受験予定の方、興味がある方、是非入ってください!!!

地元でプログラミング教室

自分の地元(愛知県碧南市)なのですが、ITとは無縁な地域で、市も全くその辺に手を出そうとしている動きが見られないのにも関わらず2020には中学校でプログラミング教育が始まる中、プログラミングが現在のいわゆるお勉強と同じものになろうとしてしまっているので、その前に、自分の地元だけでも、プログラミングってこんなに面白いんだってことを教えれる場を作って行きたいです。

本を読む量を増やす

昨年はものを作ったり、インターンに行ったりと実践的経験によった勉強に偏っていたので、本をもっと読んで知見向上に精進したいです。

まとめ

ということでこの辺が主な現在考える目標です。大まかにいえば、会津大学を盛り上げたい!Go言語界隈を学生視点で盛り上げたい!地元にITを!自分の知見をあげたい!こんな感じです。 また、この目標に進むにつれ、多くの方の協力が必要になると思います。何卒今年もよろしくお願いします。

2017年の振り返り

2017ももうすぐおしまい

今年の振り返りをして行きます。

初めてのユニバーサルカウントダウンでスタート

初めてユニバーサルスタジオジャパンのカウントダウンに行って、今年は幕をあけました。 正直超絶しんどかったのでもう二度としたくはないです。

成人式

昨年二十歳になったので、成人式がありました。小中で一緒だった友達と久しぶりにあって話すとなかなか思いロイものですね。 また、みんなでサッカーしたいです。

春のインターン

カヤックさんとメルカリさんのインターンに行きました。 初めての実務インターンで、実際に働くことのイメージをできたカヤックさん、初めての海外でしたが、他では確実に体験できないような体験をさせていただけたメルカリさんのインターンどちらも最高にいい経験でした。 詳しくは以下の記事に書いてありますのでよかったらどうぞ

shota-df-412.hatenablog.com

初めての台湾旅行

メルカリさんのインターンでアメリカから返ってきた次の日から、台湾に旅行に行きました。かなりハードで、1日目はダウンしましたが、アメリカとはまた違った意味で異国文化に触れられて楽しかったですね。

新学期 学部3年に

新学期になり、学部3年になったので色々新しいことを始めようと、練りに練って、考えた末、勉強会のチームを作成したり、これまで関わりが少なかった人たちと話して見たりして、人のわを広げました。

勉強会のチームに関しては来年度から、サークルにできるように申請書を書いているので、サークルになったら別ブログ書きます。

初めての逆求人

昨年は様々な勉強会で東京にはちょくちょく行ってはいましたが、インターンの採用のためにということで、スライドを準備して、自分をアピールするために頑張りましたね、 この時は三回ぐらい参加して、様々な企業さんとお話ししましたが、逆に面白そうな話や、自分へのフィードバックをもらえていい経験にはなりましたが、大変ですし、正直いい気分ではないことを行ってきたり、だらだらと企業説明をされてシンドイところもありましたが、これはこれで自分はどう見られているのかわかってよかったです。

shota-df-412.hatenablog.com

tenntennさん X AizuGo

メルカリのtenntennさんがGo言語について会津でお話をしてくださいました。その時にやはり学生側からのアウトプットをお見せしたいというある特定の友達の公言により、AizuGoと題して、学生LT大会を行いました。7人もの人が発表してくれてとても楽しい会になりましたし、後でお話ししますが、この会が一つのきっかけになったので、忘れられないです。

夏のインターン

夏はmixiさんとリブセンスさんにインターンに行きました。 mixiさんは自分はwebを担当して、主にチーム開発で生きるコーディングについて学べましたし、リブセンスさんではSREチームとはどういうものなのかと、Go言語を実務ではどう使われているのかを見ることができて、よかったですね。 以下に詳しく書いてあるのでよかったらどうぞ。

shota-df-412.hatenablog.com

shota-df-412.hatenablog.com

野口英世青春館に動画再生ようスイッチの設置

自分が授業の空いた時間でコツコツ作っていた raspberry pi でできた、動画再生システムが、ついに人に触っていただける形で設置されました!!!!!!! 修学旅行生の学生さんや、ふらっときた旅行のお客さんに触っていただけているとのことだでしたので、最高に嬉しいです。

是非興味のある方、会津に来られる際にはよって一度押して見てください。

野口英世青春館・会津壹番館|観光スポット|会津若松観光ナビ

イベントの開催

先ほどのAizuGoのところでも書きましたが、あのイベントをきっかけに、インターンで東京にいる間に多くの企業さんと会う機会があったので、そこで「会津でイベントをやってください!!」と交渉を重ねて、多くのイベントを開催することができました!!

いい生活

Python講座(仮) with いい生活 CTO 松崎氏

いい生活さんにはシステムの中身だったり業界の話、持っているデータの有用性についてお話いただきました。pythonを選んだ理由や、システムの構成がどういう風に移り変わってきたかという話は大変興味深かったです。

三社合同LT大会

会津大学 × ウェブベンチャー! エンジニア LTバトル in 会津大学

この三社の企業さんと会津大学の学生でLTを披露し空いました! それぞれの会社さんのLTも大変面白かったのですが、やはり先輩方のLTは最高に面白かったですし、技術的にもすごいことをしている方々で大変勉強にもなりました。 自分は徹夜でやったせいか全く頭が回らずボロボロでしたが、KLabさんにKLab賞と題して、選んでいただけてとても嬉しかったです。

三社合同Go言語 x ブロクチェーン

会津大×企業!Go言語+仮想通貨 L Tイベント

夏のAizuGoつながりで、AizuGo 第二回を盛大に開きました!!!

  • メルカリさん
  • DMM ネクストカレンシーさん
  • グノシーさん

と二日間にかけて初日に学生LT 二日目に企業側LTという形でLTさせていただきました。この会はテストの次の週ということもありなかなか人も集まりませんでしたが、質の高い会になって二日間が本当に濃い二日間になって楽しかったです。

そして、StudentGoというSlackのチームができたので、よかったら入ってください!!!

StudentGo Slack 招待フォーム

初めての落単

イベントを開催や、授業を色々あって詰め詰めにした結果一つ単位を落としてちまって、軽くショックでしたが、単位数的には後片手で数える程しかないので頑張りたいです。

選考

色々な会社さんから選考を受けてくださいみたいな話や、勝手にエントリーしたことになっているところなどがあったりしてその対応などでかなり疲弊しますね、メールで来ると見逃したり、忘れるのでできればメッセンジャーに連絡していただきたい、、、、(届け人事に)

そんなこんなで一年

そんなこんなで一年がたちました。 細かいところを見ていけばまだまだたくさんありますが、大まかなところはこんなものですね。激動といえば激動でいろんなことに精神と労力をついやした一年でした。

まとめ

来年の抱負などはまた別で書きますが、すでに決まっているイベントがあるので、会津開催のものには是非学生のみなさん参加していただきたいです。色々悩んでいることもありますが(特に進路というか進路)来年もよろしくお願いします。では良いお年を!!!