12日目の記事です!今年は社会人一年目で、春先はバタバタしていましたが、夏あたりからちょくちょく時間を見つけては学生の頃に読めなかった本を読んでいました。そこでその中で個人的によかったものを数冊話していこうと思います。1990年代のソフトウェア開発の経験から、ソフトウェアの負債を解消する手法である「リファクタリング」の手法をjavaでの実装コードと手順で細かく説明してくれる名著ですなぜ読みはじめたのか?この本を読もうと思ったきっかけが、昨年オブジェクト指向やソフトウェアの設計にハマって、DDDやらクリーンアーキテクチャやらを読んでいるときに、出典として出てきた本だったので、いずれは読んでおきたいなと思っていて、学校の売店で買って持ってはいたんですが、なかなか時間がなく積み本になっていますた。(元々、買ったときにさくっと読んだんですが、意識が違ったので全く頭に入っていませんでした🙇‍♂️)どうだった?実際リファクタリング手法としても、古い本なので現代使えるor使われている手法かというと、そうではないとは思います。その方法やリファクタリングした結果というものは、これまでに多くみてきたソースコードの至る所でみてきたものに似ていたり、書いたことのあるものが出てきたり、これまで意識していなかったことなどもありとても面白く勉強になりました。この本も1990年代から2000年代のころにこれまでのソフトウェアの開発経験から、オブジェクト指向でこういう風にかくと拡張性があり保守性の高いコードがかけるというパターンを23個紹介している本です。読みはじめたのか?これも元々、いろんなアーキテクチャの話だったり、他の記事だったりでよく出てくる出典の一つで、リファクタリング本にもかなり出てきます。「デザインパターンとオブジェクト指向やソフトウェアの関係性って一体なんなんだ」というのを知りたくて、読みはじめました!どうだった?まず、この本はリファクタ本の後に読んだのがまたよかったですね。「このデザパタはあのリファクタに出てきたな!」ってのがあったり、逆に「これ先にやっとけばリファクタをしなくて良さそう」とか考えながら読めたのが一番よかったですね!あとは、デザパタは今ある流行りのアーキテクチャの部品となっていたり、元になる考え方を産んでいるんだな〜っているのがよくわかりました。PCのGUIソフトウェアの時代の話なので、当然APIやwebフレームワークの話はないですし、ましてや、スマホのス文字すら出てきません。一生役立つ101の原理原則この本は著者さんのブログから厳選された内容のようやく内容が書かれた本で、ソフトウェアエンジニアになるにあたって、重要となる用語や考え方が簡潔にまとめられた本ですなぜ読みはじめたのか?年上のエンジニアの方と話す機会があるときに、わからない用語や知識不足で内容と用語が合致していないものなどで、頭がこんがらがることが多々ありました。この本ベースで、「この本に簡潔にまとまってるよ」と言われて、手に取ったのが最初でした。そこから、一回全部目を通してみるかという感じで読みはじめました。?知っていることもたくさん載ってましたが、逆に「この自称や考え方に、こんな名前がついていたのか」とか、今まで曖昧だったものがクリアになった部分もありました。浮き沈みから身を守り進みつづけるために技術本では無いですが、エンジニアをするにあたって、無駄なものを作りたくなっるときや、意図的では無いにしろ無駄になってしまったことをやるときに落ち込んでしまいがちです(自分がそう)そんな人には読んで欲しい本です。CAPTCHAまとめこのほかにもちまちま読んでいますが、個人的にためになったものはこの四冊かなと思っています。02:36今年読んだ本まとめ広告を非表示にするもっと読むコメントを書く2018-10-01半年ぶりだなはじめに読んでくれている皆さん、お久しぶりです。最近全く書けていませんでしたが、この書けていなかった半年で大変色々なことがあり、たくさん書きたいことがあります。いくつかの記事に分けて書いていこうと思います。以下のようなタイトルで書いていきます。今考えているのはこの4つを書こうと思っています。この記事ではそれぞれどのような役割の記事でどんなことを書こうと思っているのかを書いておきます。僕が目指したいと思った理想的な状態この記事では自分の就職とかそういう面ではなく、精神的にどんな状態になりたいのか、というものがこの半年で少し具体化された部分があったので、それを書いていきたいど考えています。過激なことも書くかもなので、見たい人だけ見てください。僕が選択した来年からの居場所この記事で、就職について書いていこうと思います。してその選択を取ったのかだったり、自分が卒業後にどうしたいのかを書こうと思います。僕があと半年でやることこの記事では、単純にあと残り半年の大学生活、自分が何をしたいのかを書いておきます。ゆるふわに書くつもりです。僕の弱点はここだこの記事では、最近よく自分の弱点だったり、弱いなと思うところが結構露骨に出るときがあり、そのことについて書いていきます。ネガティブちっくになりそうな気がしてます。僕が考える自分の役割と特性この記事では、上でネガティブなことを書くのでその逆で、ポジティブに自分を捉えた、根拠のない自身のようなものを書いていきます。ここに残すことで、自信をつける意味も含めています。僕が思う大学生という立場この記事では、自分も残り半年となった大学生活、何を思って入学して、今どう思っていてみたいなことベースに、個人的に思う大学生のあり方を書いていきます。最後にこれらは自分の考えを、きっぱり整理する意味も含めて書きます。したら増えたり減ったりするかもしれませんが、もし、興味なおある方はぜひよんで意見をいただけると嬉しいです。01:56半年ぶりだな広告を非表示にするもっと読むコメントを書く2018-04-17GoCon2018springに参加・LTして来た話これで、2回目の参加となりましたが、前回は自腹切って高速バスに揺られること5時間かけて行ったのですが、今回はメルカリさんにスカラーシップに採用していただき、交通費と前泊を用意していただくことができて気楽に参加することができました!ありがとうございました!!tech.mercari.comどうだったか?控えめに言って、最高でした!!!!!!!!はじめにDaveさんのお話から、始まりましたが、mapの実装の話は非常に面白かったです。runtimeの中を読まなきゃいけない気持ちになりました。次に、スポンサーセッションがあった後に、二つのセッションに分けてやっていたので全部は聴けなかったのですが、非常に勉強になりかつ、面白かったです。自分はルーム2の方にいたのでそっちの方を聞いていました。lestrratwww.slideshare.net@lestrratさん個人的に一番面白くかつためになる発表でした。コードがいい感じになっていくのを見て、すごくスッキリした気持ちになりましたし、こういうフローで考えていくのか!というふうに知見を得られることができました。chikamoriwww.slideshare.net(@pei0804)https://twitter.com/pei0804さん自分はコードジェネレートをやったことがないので、いつもこの手の発表は新鮮で面白いのですが、pet0804さんの発表はコードがたくさん出てきて、かつ、それに説明が書かれていて非常にわかりやすく、内容が頭に入ってきました!コードジェネレートやろうと思いました。Gormの気持ちになってGormを使うspeakerdeck.com(@linyows)https://twitter.com/linyowsさん自分も前回apiを書いた時にGorm使ったのですが、最近またそのapiを触ろうとしたら動かなくなっていて、戦っている最中だったので、この発表は非常にタイムリーでした。recordに引っ張られてるという部分の図解は、確かにと自分も思いましたし、わかりやすかったです。最近アルバイトで、gaeを触る機会があったので、知っている機能もありましたが、知らないものが多かったので勉強になりましたし、次に自分で何か作る時に使って見たいなと思いました。Profilerも導入が簡単そうだったので、これから作るものには入れていこうと思います!LTみなさん色々な発表されていたのですが、非常にトークがうまくて聞きやすかったです。自分も技術的なことではないですが、発表したのですが、まだまだだなと感じさせられました。speakerdeck.com最後に個人的に、前回よりも面白かったのと、勉強になったなと感じた一日でしたし、もっとGoを学ばなければならないと思いました。サーバーエージェントインターンまたインターン「何社目だよ!!」とツッコミ入れていただいた方ありがとうございます。このインターン自体は昨年の7月から決まっていたので、決まってから随分たったなという感じですね。期間は2/1~2/28ですfreshlive.tv何をしたのかマイクロサービス間のポーリングを無くす、ミドルウェアを作成することが、僕の一ヶ月のタスクでした。いうものを作りました。Freshにはイベント配信基盤のplasmaというものがありまして、それを応用活用して作りました。upamune.hatenablog.comここで疑問が生まれます。plasmaはイベントすうに対してスケールすることができない仕組みをしているため、高頻度でポーリングを行うイベント通信(動画のキャッシュ部分など)では使いづらいという問題点がありました。スケールするplasmaを作りたい!!!まず要件を考える中二つの問題点がありまして、clientが複数接続を張る必要がある。neoplasmaがイベント通知を行える状態にない場合イベントを受け取れる状態にないときは、ロードバランサからイベントが飛んできてしまった場合ロードバランサに送り返します。新規neoplasma-client立ち上がるときk8sマスターにneoplasamのdeploymentsの接続先リストをもらうもらって来た接続先に接続をはる(grpc)実装的には、1はk8sに依存しているのでインターフェースとしては2のみを作っています。スケールアウトしたneoplasmaに接続する新規neoplasmaの所属するdeploymentsに対して自分の状態を送る別のneoplasmaに送られる送られて来たイベントをneoplasma-clientに対して送る状態を送った先にコネクションをはりますneoplasmaは常に数秒おきに自分のDeploymentsに対して、自分の接続情報を送っています。無限ループの可能性は0ではないですが、確率的に低いので許容範囲としています。状態イベントには接続先情報があるのでそこにneoplasma-clientは接続していきます。スケールアウトしたneoplasmaがイベント処理が行えるようになるとき新規neoplasmaの所属するdeploymentsに対して自分の状態を送る別のneoplasmaに送られる。受け取ったneoplasmaは送って来た先にneoplasmaに対して、自身の接続状態を送ります。送られて来たものと同等の状態の場合、正常のイベント処理を始めます。4の時、送られてきた接続状態と自分の接続状態を比較して、大丈夫そうならイベント処理を行いますが、ダメなら、1のように送り返します。足りない接続を検知し、そこに繋ぎに行きます。これで、行けた!!!と思いますが、そうではありません、これはまだ、クラスタ内の話なので、次に外部との接続の話です。クラスタから外部クライアントpodでスケールアウトできるようになったけどまだパブリックに入っていないのでそうしたいのですがい問題があります。k8s内は仮装環境なので、ポートはなんとかなるが、外部との接続はポート限られているので、pod一個ずつ開けることはできまっせん、そこでk8sのserviceを使って、NodePortを開けたとしても、grpcの接続はNodeportに繋がっているどれかのpod一つにしか繋がりません。こいつは何かと言いますと、proxyの役割を持っています。neoplasam-client群(deployments)でポートを持てば、外部クライアントは接続先を特にきにする必要はないplasma-client群で全てのneoplasmaへの接続を持つneoplasma-client自体もスケールアウトする振り分け判定がないので、負荷は低いnode数依存になっても管理しきれる想定なのでこうなります。簡略さした図でイベントの流れを以下のようになりますロードバランサがイベントを振り分ける振り分けられた先のdeploymentsの中のどれかのneoplasmaにへ振り分けられる別のdeploymentsにもデータを流すneoplasma-cliet群へ投げるNodeportを通って外部へクラアントへ飛ばします。これによって、neoplasmaのpodのスケールをして、一つのdeploymentでは接続数が耐えられなくなったら、接続を分散するために、deploymentsを増やすことと、neoplasma-clientを増やして対応します。これで、ポーリングをまたさらに減らして平和な世界へと近づくことができました!(多分)まとめるとだらだらと動きを説明しましたが、二段階のスケールし、イベント処理をするneoplasma群と外部と繋げてよしなにやってくれるneoplasma-clientを作ったということです!!!感想k8sは、ほぼほぼ初見で、社内の資料や、公式ドキュメントもめちゃくちゃあさりましたし、Deploymentsの概念の理解と、service,ingressの理解などが割と手間取りました。あとは設計もあーでもないこーでもないと、一人ホワイトボードと向き合いながら考える日々で、ほとんどコードは書いていないのですが、初めてこんなに時間をかけて真剣に設計をして、設計の重要性と大変であることが学べました。最後に関わってくれた、Freshの皆さん、ランチや飲みに連れてってくれたサイバーの方々ありがとうございました!またおはないしできることを楽しみにしています!!!3/1からは、DMMのネクストカレンシーシーでお世話になるので、会社での業務以外のことなどは、4月にまとめて書きたいと思います。本を読む量を増やすまとめ2018年のやりたいここ・目標さて、平成30年幕が開けたので目標を書いて行く大学を卒業する当たり前ですが、大学を卒業できるように、残り、4単位と卒業研究はしっかりやりきっていきたい進路を決める自分の中では学部を卒業して、就職するつもりなので、就職先を決めることですね。受けている会社さんがいくつかありまして、いきたかった会社のうち残念ながらご縁がなかったとの連絡をいただいたところもありましたが、選考が続いていたり、いい報告をくださったところもあるので、これからだと思っています。一つ、様々な方から提案されたり、向いていると言われるのが、起業することで、自分もなしではないし、やりたいこともあるので、その辺も視野にいれて進路は考えて行けたらと思います。Students昨年AizuGo#2の流れからできたチームで、学生の中で、Go言語に関する話だったりをしたり、現役のエンジニアの方もいるので、質問ができたり、インターン・アルバイト・就職の選考の話などもできます。Studentsを開催して、日本の学生の中でGo言語をはやらせていきたいと考えています。学生の方も、Go言語を使っている会社の方も入っていただけたらありがたいです。Learner)というチームで、勉強会やLTをやっていたのですが、一年間やってみて、反省点と新入生獲得のためにサークルにすることにし、企業さん方とのLT大会が昨年はおおかったので、LTを僕らのサークルの名前を使ってやって行けたらなと考え、名前を新たにZLi(ジライ)とい名前でやっていこうと思っています。talkのLiをとってZLiとしました。自分の地元(愛知県碧南市)なのですが、ITとは無縁な地域で、市も全くその辺に手を出そうとしている動きが見られないのにも関わらず2020には中学校でプログラミング教育が始まる中、プログラミングが現在のいわゆるお勉強と同じものになろうとしてしまっているので、その前に、自分の地元だけでも、プログラミングってこんなに面白いんだってことを教えれる場を作って行きたいです。本を読む量を増やす昨年はものを作ったり、インターンに行ったりと実践的経験によった勉強に偏っていたので、本をもっと読んで知見向上に精進したいです。まとめということでこの辺が主な現在考える目標です。大まかにいえば、会津大学を盛り上げたい!Go言語界隈を学生視点で盛り上げたい!地元にITを!自分の知見をあげたい!こんな感じです。この目標に進むにつれ、多くの方の協力が必要になると思います。今年もよろしくお願いします。10:092018年の始まりだ!!!!!広告を非表示にするもっと読むコメントを書く2017-12-202017年の振り返り2017ももうすぐおしまい今年の振り返りをして行きます。ユニバーサルカウントダウンでスタート初めてユニバーサルスタジオジャパンのカウントダウンに行って、今年は幕をあけました。なったので、成人式がありました。小中で一緒だった友達と久しぶりにあって話すとなかなか思いロイものですね。みんなでサッカーしたいです。春のインターンカヤックさんとメルカリさんのインターンに行きました。実務インターンで、実際に働くことのイメージをできたカヤックさん、初めての海外でしたが、他では確実に体験できないような体験をさせていただけたメルカリさんのインターンどちらも最高にいい経験でした。詳しくは以下の記事に書いてありますのでよかったらどうぞshota-df-412.hatenablog.com初めての台湾旅行メルカリさんのインターンでアメリカから返ってきた次の日から、台湾に旅行に行きました。ハードで、1日目はダウンしましたが、アメリカとはまた違った意味で異国文化に触れられて楽しかったですね。学部3年に新学期になり、学部3年になったので色々新しいことを始めようと、練りに練って、考えた末、勉強会のチームを作成したり、これまで関わりが少なかった人たちと話して見たりして、人のわを広げました。勉強会のチームに関しては来年度から、サークルにできるように申請書を書いているので、サークルになったら別ブログ書きます。この時は三回ぐらい参加して、様々な企業さんとお話ししましたが、逆に面白そうな話や、自分へのフィードバックをもらえていい経験にはなりましたが、大変ですし、正直いい気分ではないことを行ってきたり、だらだらと企業説明をされてシンドイところもありましたが、これはこれで自分はどう見られているのかわかってよかったです。AizuGoメルカリのtenntennさんがGo言語について会津でお話をしてくださいました。その時にやはり学生側からのアウトプットをお見せしたいというある特定の友達の公言により、AizuGoと題して、学生LT大会を行いました。7人もの人が発表してくれてとても楽しい会になりましたし、後でお話ししますが、この会が一つのきっかけになったので、忘れられないです。夏のインターン夏はmixiさんとリブセンスさんにインターンに行きました。mixiさんは自分はwebを担当して、主にチーム開発で生きるコーディングについて学べましたし、リブセンスさんではSREチームとはどういうものなのかと、Go言語を実務ではどう使われているのかを見ることができて、よかったですね。以下に詳しく書いてあるのでよかったらどうぞ。修学旅行生の学生さんや、ふらっときた旅行のお客さんに触っていただけているとのことだでしたので、最高に嬉しいです。松崎氏いい生活さんにはシステムの中身だったり業界の話、持っているデータの有用性についてお話いただきました。pythonを選んだ理由や、システムの構成がどういう風に移り変わってきたかという話は大変興味深かったです。それぞれの会社さんのLTも大変面白かったのですが、やはり先輩方のLTは最高に面白かったですし、技術的にもすごいことをしている方々で大変勉強にもなりました。自分は徹夜でやったせいか全く頭が回らずボロボロでしたが、KLabさんにKLab賞と題して、選んでいただけてとても嬉しかったです。二日目に企業側LTという形でLTさせていただきました。この会はテストの次の週ということもありなかなか人も集まりませんでしたが、質の高い会になって二日間が本当に濃い二日間になって楽しかったです。招待フォーム初めての落単イベントを開催や、授業を色々あって詰め詰めにした結果一つ単位を落としてちまって、軽くショックでしたが、単位数的には後片手で数える程しかないので頑張りたいです。色々な会社さんから選考を受けてくださいみたいな話や、勝手にエントリーしたことになっているところなどがあったりしてその対応などでかなり疲弊しますね、メールで来ると見逃したり、忘れるのでできればメッセンジャーに連絡していただきたい、、、、(届け人事に)そんなこんなで一年そんなこんなで一年がたちました。細かいところを見ていけばまだまだたくさんありますが、大まかなところはこんなものですね。激動といえば激動でいろんなことに精神と労力をついやした一年でした。まとめ来年の抱負などはまた別で書きますが、すでに決まっているイベントがあるので、会津開催のものには是非学生のみなさん参加していただきたいです。悩んでいることもありますが(特に進路というか進路)来年もよろしくお願いします。frameworkについて紹介します。serverlessについてserverlessは何がいいのかと言いますと。サーバーを保有しないのでサーバーの管理コストを大幅にカットし、さらには、serverlessfraeworkで、開発環境にも依存性が低く、チーム開発にも向いていると考えられます。フレームワークで使っています。他のbotを作ったりする時は、pythonを使うときもあります。最近というかここ一年ほど、Go言語を趣味書いています。awsにはgolangは採用されていないため。frameworkを使用することもそのままでは難しいです。そんな人のために紹介したいと思います。やって?それ用のライブラリはいくつか存在します。apexeawsyこの二つはとても有名で、serverlessでGoを使う方法のうちの一つですが、僕が両方使ってみて思ったことは以下になります。apexCLIだから作成・デプロイ・実行が簡単apigatewayが手動?接続方法がわからん!eawsylogが出せる!・書くだけ!・フレームワーク対応zipの後手動?厳しい、、、という点で自分はしんどいなと思っています。そこで、serverless-golangを使っています。serverless-golanggithub.comこれはeawsyを拡張してできたフレームワークで、makeでコマンドが用意されていてとても使いやすいです。どのようになっているかと言いますと、はじめにGoを使ってapiを書きます。cgo環境上でコンパイルします。最後にそれをpythonにC言語として読み込ませてdeployをします。この流れをserverless-golangはやってくれます。速度はやファイルサイズは以下の表にまとめました。frameworekと遜色なく動きます。(まぁCのライブラリとして読み込んでいるので当然かもしれないですが、)ただ、Goを触ったことある方はわかるかもしれないですが、バイナリサイズが大きいので、lambdaにのっせてもそれは変わらないため、サイズだけは大きくなってしまいます。普通のserverlessと同様にserverless.ymlを使用するので細かな設定なども行えるので、とても便利です。今年の夏に調べたことがここまでで、この記事を作ということで久しぶりに触ってみたところ、開発もちゃんと行われていて、exampleも増えていましたし、serverlessのバージョンアップにも対応しているのでありがたいです。何と言っても、Gopherの画像が追加されていたので、これはいいと思います。Iron-functionsとかで記事を書かれている方をみて、遅いとか見ることもありますが、自分はこっちの方がserverlessを使っている身としては扱いやすいのでおすすめです。github.com最後に急遽書くことになったので、特になにか新しいこととか自分が作ったものの話でなくて申し訳ないです。awsを全面的に採用されていてGoを使いたいけど、awsだからec2やecsでしか使えないな〜とおっしゃっている方に少しでも届けばいいなと思ったので書きました。小ネタで申し訳ないですが、これで終わります。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。