tech.guitarrapc.cóm

Technical updates

2019年を振り返って

毎年やっている昨年の振り返りをしてみます。

2018年はこれ。

tech.guitarrapc.com

目次

総合

2019年の初めにこう書きました。

会社としては、2019年は作りたいサービスを形にして何本かリリースするため働き方をシフトします。*8 個人は、会社のサービスリリースと収益化です。注力する言語的にはC# / Golang 、ツールはTerraform + Kubernetes + GCP/AWS/Azure + Unityです。

2019年は2018年より、さらに(自他に)求められるレベルが高くなっており、天井知らずを感じつつ楽しみたいと思います。

2019年は想定に基づいて働き方をシフトを進めました。 が、想定よりもクライアントとの密着した動きが必要になってしまって、結果そっちにフルコミットしていました。 つまり、サービスリリースのための余力0でそっちに全振り。 個人の目標からは乖離しておりよくない、けど経営計画で予想していた結果の1つで、途中でこっちに振ったので納得はあります。

今年は夏から完全にサーバーサイドに振っていて、Kubernetes での構築に完全シフトでした。前半はHoloLens、Vue.js に携わっていました。 サーバーサイド/インフラは、C#/Kunernetes が主で、おもにAWSがほとんどでした。2018年とは全然違う動きになったのですが、私のスキルがそっち側に伸びているので、まぁそんなものかと。一年を通して幾つか感じましたが、Kubernetes むずかし、たのしいのでよしとします。

2019年は、わからないことへの挑戦がかなり多く、知ってることの応用はあまり利かず前提に過ぎない状況をよく感じました。 もともと挑戦が多いのですが、結構苦しんだ感覚があります。

経営

会社としては、OSS は1つだけです。 会社としてメンテするもの、というのを公開していく方針なので来年はもう少し増やしていきたいので、増やせるように努力しよう。 サービスは後は実装なので、粛々と書きます、考えます。

一年を過ぎたので、税、会計回りも一通りすぎました。 経理、会計が税理士先生のおかげで負荷小さいので、感謝しかないです。 引き続き法に則って粛々と進めたいところ。

弁護士先生とのやり取りを通して、弁護士って法に基づいてうまく振る舞う方なのだなというのは少し面白かったです。 公正ではなく、利益を追求する側の人間なのは、なるほどそういうものかという気づきがありました。

興味深かったのは、中小企業庁の動きでした。 消費税増税で、転嫁拒否に対する法律上問題ある行動の有無に関して調査票が来たのですが、素直にうれしかったです。 弊社のお客様にそういった動きはなくスムーズに移行したのですが、転嫁拒否に対する是正の姿勢を見せてもらえるのは、経営者としてはうれしいものがありました。

プログラミング

2019年は、C# がかなり多かったです。 また、Terraform を普遍的に広く使うことが多かったものの、後半ではPulumi の調査と投入をしていて、AWS CDK よりいい感触でした。 Pulumi dotnet Advent Calendar やってましたが、Pulumiの利用悪くない感じがあります。

Pulumi dotnet Advent Calendar 2019 - Qiita

GitHub コミットは、ほどほどにこんなものでしょう。GitHub じゃないコミットが見えないので、少なく感じますが。

2019年GitHub コミット

なんか CircleCI 対応や Docker イメージの公開が想像の倍以上行うことになって、ひたすら必要な部品を作っては組み立ててました。

CSharp

お仕事でやっていた HoloLens + Unity でのお仕事が一通り構築してリリースを迎えられたのはよかったです。

C# はUnityを除き .NET Core のみでした。後半は、 .NET Core 2.1/2.2 を .NET Core 3.0/3.1 に対応とかありましたが、幸いコンテナ化していたので何も問題なく進んでよかった。

Serverless から一番遠ざかった年だったかもしれない、というのもたいていのものを ECS Faraget/Kubernetes 側に振ったというのもあります。 デプロイ、監視を含めた全体の流れからすると、Serverless を選択しない選択が結構増えました。 自分の会社では選ぶんですが、お手伝い先では選ばないということが結構多かったです。

C# のビルドは、割り切った結果、あんまり頑張らない方向に倒してうまくいっています。 dotnet CLI 的には頑張りようが小さいので、そこで外から頑張るよりは頑張らないように済む方向に。 UWP から離れたというのが大きい気がしますが、.NET Framework で SDK Style の csproj をハンドルできることに気づいたのがよかったです。

シングルバイナリは来ました、案の定CI/CD、コンテナでいい感じでした。 ただ、リフレクションは結構鬼門でリフレクションするならランタイム込みでビルドしても動作環境にdotnet ランタイムは必要。 リフレクション、明らかに使う機会はちょくちょくあるけどアプリの動作環境的には年々厳しい制約になりつつある気がする。

あとシングルバイナリでも .NET Core のICU はめんどくさいです。Invaliantでない限りは .NET Core は ICU ライブラリに依存してグローバリゼーション対応しているので仕方ないのですが。 これは Microsoft Docs にも載っていますが、実際にコンテナ回りでの動作を組むときに思ったよりツライ。

.NET Core アプリケーション展開 - .NET Core | Microsoft Docs

C# なんか年々難しい度が上がってるので、がんばろ。

CircleCI で感じるんですけど、C# というか dotnet CLI の Linux での操作なんか面倒、というか癖強い。

Golang

書くより読むことが多かった。 1つ必要だったのを書き上げましたが、素直だなという側面と書きにくさも感じるのでもうしばらく慣れまで必要そう。

VSCodeで書いててつらかったので Goland 入れました。

自社の言語は Golang を選んでいます。 しばらく自分の言語は二軸になりそう。

PowerShell

クロスプラットフォームで動く PowerShell Core とは裏腹に、お手伝い先で書く機会はなるべく減らしほぼ0にしていました。 なるべく選択に入らないようにしていたというのもあります。 代わりに Bash、C#を多く選びました。(可能なところなら Golang を選択しました)

これはアプリケーションエンジニアが同じものを触るときに、いかに違和感すくなくするかを考慮した結果です。 正確に言うと、アプリケーションエンジニアというよりPowerShell に興味がない人が、です。 PowerShellで書くだけで、そこに触れたくないという意識が働くケースをこれまでも多く見ていたので、なるべくその意識を起こさせたくなかった。 案の定、予想していた状況に近づいているので、選択はずれてなかったように思います。

個人では書いていて、guitarrapc/ScoopPlaybook や guitarrapc/dotfiles-win/setup.ps1 で使っています。 dotfiles-win のセットアップは、guitarrapc/dotfiles/setup.sh で書いたBash の動作を PowerShell で忠実に再現したものなので、書いてて面白かったです。

PowerShell 実践ガイドブックは、おかげ様で第三版まで重版されました。 次の機会があれば、PowerShell 7対応かな。

海外のコミュニティを見ていても、PowerShellではないコミュニティを見ていても、PowerShell 7になってもWindowsがない環境で標準的に使われることは恐らくないのだろうと感じます。 Windows では標準的な位置づけでいいのですが。 素直に「組み込みにくい」のは最大のハードルであり続けるのでしょう。

ShellScript

思った通り多かった、多くしました。 macOS だけ挙動が違うコマンドがところどころ出てくるのがうざいのですが、シカタナイ? もう少しコマンドのシミュレート、変換がいい感じにできないかなぁと思いつつ、粛々と書いています。

インフラ

お手伝いはこれが多かった。 Kubernetes 回りを組んでいます、ECS ともちょくちょくバトルしていました。

ECS は Mutlti Target Group サポートが来てだいぶんよくなりました。 しかし Code Deploy がひたすらツライ、Code Pipeline もアレですが、Code Deploy やばい、使いたくない、頑張って使ったけど、Kubernetes にたおす過程で使わないようにした。

Kubernetes はClient APIに手を付けていますが、仕様の変更の影響受けやすくて、うーんという感じが。 幸せになる世界はまだ先な感じがすごいある。

Terraform

Terraform は一度組んでおけば、結構使いまわし聞くのでそこはよかったです。 特に Terraform Cloudが来て Atlantis も使わずいい感じで管理できるようになったので、よかったよかった。

0.12 はすぐに対応したのですが、なかなかはじめのバグり方が盛大でさすが HashiCorp、引き続き警戒が必要という感じがあります。 とはいえ、Terraform Cloud の動きを見ていても、0.12 の後半のアップデートを見ていても少しずつ期待する方向に向いてきた気配もあるのかな。

Pragmatic Terraform on AWS がいい本でした。いくつか気になる内容はあるものの、概ね同意。

Pulumi

Terraform 以外の選択肢としてみてた時にちょうど GA してたので、検証から投入までしました。

結論からいうと使える、けどその言語で書かれているからと言って読めても意味は読めないというのは間違いなくあります。 AWS に限らず、GCP やKubernetes でなんでこういうリソースが必要なのか、こういう組み方が必要なのかはコードで読めても、リソースの意味や制約を知らないとできないようにです。

C# は今年GA なので、別State 参照が来たらオススメしてもいいかなぁ。 Provider を複数持ってもいいけど、別State はほしいかな。 チームで使うには高いので、なんかそこがずっとハードルになりそう。

Terraform から移行もしたのですが、移行するかどうかは Pulumi で、その言語で書きたいかに強く依存しそうです。 言語のとっつきにくさが消えるのはめちゃめちゃいいので、価値はあります。

Pulumi、公式ページが最大のリファレンスで特に .NET に関しては全然いないので頑張るしかない。コミュニティの規模はかなり小さいですね。

Kubernetes

ECS との選択、Kubernetesでの運用を考えた時に、実際にKubernetesでいくぞにするためにずっとやってました(ます)。 小さいチームだからこそ選択するという選択をしたのですが、結果は2020年に出るので引き続き正面から取り組みます。(つまり2019年初とは逆の判断をした)

しかし分散は得意だけど、特定の一台への接続を制御しようとすると工夫を凝らす必要があるので、そこはまだ頑張るしかない感触。 Agones を今のコンセプトのまま、ほどほどにいい感じで使えるように組んでいます。

比較的 Helm よりも Kustomize に振っています。

Kubernetes 完全ガイドが本当に良書でよかったです。

記事

78本、久々にちょっとはかけました。 Pulumi dotnet Advent Calendar で盛った感はあります。

C# が意識して多めです。 お手伝い先ではザクザク書いているのですが、手を動かしつつなので記事にするほどまとめてないというのもあり結構ブログに書こうとまでならないのですね。 2020年も同程度を維持したいです。

ライフスタイル

徐々に改善が見えてきましたが道は長そう。

睡眠時間が年間平均3時間14分と4分伸びました。11月、12月は4時間と伸びているのでちょっとずつ調整しています。 6時間寝るとかなり快適なのは前々からわかっていても達成できていないのですが、少しずつ意識的に週の中頃などに8時間程度寝れないか試みています。

ランチは抜くと夕方ごろに集中力が持たなくなってきたので意識して食べるようにしています。 糖質は意識的に少し差し引きつつ、たんぱく質でおなかに入った感じがあるように。

「個人に依存することはエンジンがかかるのが遅い」課題はなかなか解消できてないものの、すぐにやらなくても予め開いておくと手を付けやすいので意識的にそうしています。 個人に依存しないことは、Google Calendar でこまめにスケジュールに組むことでうまく維持できているので、どうやら自分に興味がないっぽい。

集中って私は最も大事なことと考えています。 で、見直した結果、椅子に座っててツライと感じるシーンがあったので先日7年ぐらい使ってたエルゴヒューマンを、アーロンチェアリマスターに変えました。 椅子って結構影響あるんですね、アーロンチェアの座り心地があってて結構集中しやすくなった感じがあります。 座り心地がいいというか、座っててつらくない、しっかり前を向ける。

最近は考え方を短いスパンで変化させることを意識させるようにしています。 結果として、数日前と言ってることが全然違っていたりするのですが、それでもいいとみなすようになったのは少し変わったかもしれません。

ゲーム

たまにはゲームのことも。 2020年のFINAL FANTASY7 REMAKEを楽しみにしています。(振り切るのか、考慮するのかが一番の注目として)

スマホ

モンストが好きで結構ずっとやっているのですが、ドラクエウォークが出てからこっちにシフトしました。 全キャラ全職業のレベルが50を超えたので、55の旅をしていて二週目。 冒険者レベルも50になって、お出かけレベルしか残ってないのでそろそろ何かこないかな。

マリオカートは相変わらずの任天堂な施策で、結構興味深く週一ぐらいで開いてはプレイしています。 任天堂のゲーム設計、運営って素直にすごいと思います。

Nintendo Switch

今年は、Nintendo Switch の利用が多かったです。

ゼルダの伝説夢を見る島は、小さいころにやったゲームでしたがリメイクを楽しみにやりました。2Dをスイッチでどう再構築するかが楽しみで、実際すごかった。 案外覚えててサクッとクリアしてしまったのですが、ハードモードむずかしいのでよいですね。 ただコントローラーのボタン配置は、やはり厳しいものがあって、Yで攻撃はやめてほしい感じがあります。どうしてこうしたんだろう。

Blood Stained が出たのでやってて案の定面白かったです? バランスが相変わらず壊せるので、終盤に行くほど楽になってしまうのも含めてまぁいいのでは。 結局銃最強だった。(終盤しか使わない)

PS4

ドラクエ11をやり忘れていたのでクリアしました。ドラクエは新しいタイトルほど面白いのでいいですね。一番面白かった。

そういえば私はFF15 が好きなんですが、売り上げ、本数が最も少ないのはゲーム性がどんどん変わってて、プレイヤーが置き去りになってるのかもなぁとドラクエをしていて思いました。(ドラクエは根本が変わってない) 私は新しい体験が好きなので、方針に共感はするのですが。

新サクラ大戦は年末やっていたのですが、二の次なのでまだクリアしていません。3D になったのはいいとして、戦闘回りがただの無双になってて本当にこれでいいのか? という感じがあります。

DEATH STRANDING を次にやりたいけど、まずクリアしてから予定。

Steam

Cities: Skylines をちょこちょこやってました。 楽しいけど、やっぱりシムシティ系なので時間をそこまで費やせない(費やす選択をしない) ので、むずかしい。

2020年は?

C# + Golang + Kubernetes + Firebase あたりが注力ポイントです。 サービスリリースと収益化をがんばろう。働き方のシフトよりも頑張りポイントのシフトがよさそう。

分からないことたくさんで人生飽きないな。 できることを1つずつ増やしていきます。