hitode909の日記

趣味はマリンスポーツですの日記です

すさまじい二日酔いで,用事を早く済ませてからは家でおとなしくしていて,Netflixでコルトレーンの映画を観た.

英語の字幕を出せることが分かったので英語字幕で見ていたのだけど,字幕読んでしまって聞き取り能力はとくに上がってない気がする.料理しながら聞くと字幕読めなくなるのでそのときは聞けてる.聞いてるだけで聞き取り力が上がるのだとしたらふだん日本語字幕が出ながらも英語聞いてるのでそれで上がってるはずで,やはりこの前提はおかしいのではないか.

Netflixついに契約したのでおもしろ作品情報ください.

www.netflix.com

インターン生と夢日記について話していた。僕のブログを夢日記で知って、その後プログラミングについて調べてたら夢日記で見たブログがまた出てきたとこのこと。ブログやっててよかったなと思うことが年に数回くらいある。
夢を覚えてられないって話で、練習すれば、起きた瞬間なら覚えてられるようになるので、その瞬間にスマホにメモをとったりしてる。朝起きたら、今日は何の夢を見ましたかって話をしている。
あとは、最近やってるのが、Google Homeに「今日の夢は〇〇でした」って言うとツイートしてもらえるという技で、IFTTTを使うと簡単にできる。分かち書きされてスペースが入るので不気味な仕上がりではある。


夢,トイレに入るとBGMが流れる.人がいてもいなくてもBGMは流れているようだった.建物に様々なトイレがあり,それぞれに固有のBGMがある.ジャズが流れるトイレが一番気に入った.これはめっちゃいいなと思い,家でもやろうという気持ちになった.

お疲れ様セット

お好み焼き屋に行った.3人でお疲れ様セット3つ注文して,飲み物2杯,枝豆もしくは冷奴,そして下足焼きもしくはハツ焼きがついてくる.こちらも疲れているので,注文が難しくて,何があるんでしたっけって3回くらい聞き返して,下足焼きを3つ頼もうとして,それはやめましょうとかやってた.冷奴が大量に来た!!とか言ってて,よく考えると飲み物2杯ついてくるのは1人2杯ずつじゃなくて,2人で1つ注文してシェアするためなのではないか.

開発中の機能を小分けにして本番環境にどんどん出すためには

ふだんの開発では,稼働中のシステムに影響を与えないように開発中の新機能や新システムを共存させながらちょっとずつデプロイして進めている.どんな事を考えてやっているか記しておきます.

フィーチャートグルを使う

  • すべてのコードが本番環境に入っているけど無効化されている状態で開発を進める
  • ブランチをたくさん作るのに対する考え方で,フラグを有効にすると開発中の機能を使える
  • 完成したらフィーチャートグルに関係なく全員に有効状態にして完成
  • フロントエンドの施策で,実際のデータやインフラ構成でどれくらいスピードが出るかわからないときに,ひとまずフラグをオンにすると動く形でデプロイしたりとか

レイヤの下の方から作っていって最後に外部から呼べるようにする

  • データベースの設計,モデルの実装,アプリケーション層の実装,と進めて,最後に表から呼べるようにするためWebkAPIを作る,という形で下から順番に作っていき,小分けにマージしていく
  • 最後につながるまでは,本番環境では動いてないが,実装が置いてあったり,CIが通っていたり,という状態で進む

画面はフィーチャートグルで隠しておき,それとは別に下のレイヤから作っていく

  • 前2つの合わせ技で,トンネルを両端から掘っていくようなイメージ

なにが起きるかわからないのでtry catchしておく

  • 開発中のリリース前のコードが他の箇所に影響を与えると困るので,とりあえず呼び出し部分をtry catchしてエラーを記録しておくという技
  • 雑に作っているわけではなくて,リスクを下げたいという話で,開発中でユーザーの役にも立たない機能のために巻き込まれて使いたい機能が使えなくなると誰も得していない
  • 全体が止まるよりは影響が小さな箇所にとどまるほうが便利

新しいモデルに徐々に載せ替えていく

  • 理想的な綺麗なモデルオブジェクトを作り,簡単なところから新しいモデルを呼ぶように変えていく
  • 同じ問題を解くためのコードが一時的に2つ存在することになるが,新しい方に移し替えると,新たな問題を解けるようになっている
  • マイクロサービスアーキテクチャにも似た話があったと思う.締め殺しパターン

ペース感

  • 1日1個進められるくらいの規模に問題を分割して,1日1個か2個くらいpull resuestを投げている
  • 計画を立てたり,コードレビューを通す時間も含めて1日なので,一度の実装にかかる時間は多くても1〜2時間くらい
  • チームで開発してるとまとまったコードを書ける時間を確保するのが難しいので,なるべく小分けにして,早くコードレビューに出して他人に処理を渡してしまったほうが得,という話もある
  • レビューしてもらってる間に別のところを進められるような手順を考えておけるとよりよい

ビッグバンリリースをしない

  • いろんなテクニックを書いたけど,一言で言うと,ビッグバンリリースをしないという話
  • いきなり本番環境にでかいコードを出すと緊張し,動作実績のない大量のコードをいきなり動かすと不具合も出やすく,メリットがないので,絶対にちょっとずつ進めるようにしている

気持ち

  • いまいち伝わらないと思うけど,走ってる車にとびついてタイヤと一緒に回転しながらタイヤを入れ替えるような気持ちでやっている

車のタイヤを入れ替えたかったら、止まればいいけど、走ったまま入れ替えようとすると、タイヤに飛びついて、タイヤと一緒に高速回転しながらタイヤ入れ替えることになると思う。そういう雰囲気が出てきてる。

タイヤ - hitode909の日記

VSCode用のauto-programmingを作った

auto-programmingはgit grepして続きを補完してくれるやつ.Emacs版を3年前に作り,Atom版を2年前に作り,最近はVSCodeを使っているので,今回作ったという流れ.クラス名とか化メソッド名とか覚えてないので,これがないと仕事にならない.

だいたい動くけどインデントが動いていなくて悲しい.sub new {とかやって,改行すると,その瞬間にはインデントできてるのだけど,次のコマンドパレットを開くと,行末のスペースを抹殺されてしまう.
あとは,IntelliSenseに候補を送り込むことができなくて,QuickPickを使って候補を出しているので,候補が画面の前面にバンと出てきて邪魔.今どんなコードが入力されてるのかわからない.

f:id:hitode909:20180903003640g:plain

marketplace.visualstudio.com