修行編 - 11日目
やったこと
1. Rustチュートリアル
こちらのチュートリアルの4~6章に目を通しました。
2. Apollo入門
GraphQLのクライアントであるApolloに入門しました。
先日の@vvakame氏と@gfx氏による勉強会に参加したことなどがきっかけでサーバーサイド目線でのGraphQLは少し調べていましたが、おそらく自分が実装に関わるであろうクライアントサイドについてはまだノータッチでした。
後述の面談の際にRedux Storeの代替としてのApolloの可能性について伺う機会があったため、面白そうだなと思いドキュメントに目を通すところから初めています。
Django -> Kotlin -> Rustと来てこのタイミングでGraphQLに目移りするのは流石にマズいのでもう少しだけRustメインで進めます。
勉強しなきゃいけないことがありすぎて焦るんだよなー
3. Rustプロジェクトのスケジューリング
Todoistで管理しています。ラベリング機能が便利です。
4. 面接
例の会社の三次面接で、実際にフロントエンドの担当者の方と2時間ほどおしゃべりしました。
フロントエンドが弱い業界なのかと勝手に先入観を抱いていましたが良い意味で想像以上に「強い」構成だったのでビックリ。Clean Architectureで設計されているようで非常に参考になるお話でした。
先に挙げたGraphQLの件も含めてこの会社で働くことになればたくさんの未経験な領域に取り組めそうでワクワクします。
余談ですが初めてコーディングテストというもの行いました。隣の席から画面を覗かれて一挙手一投足を評価されるので死ぬほど緊張しますね笑
5. ウォーキング
一昨日、愛用していたイヤホンが壊れてしまったため新しくJaybird RUNを購入しました。
携帯性もデザインも音質も全てがバランスが良いためJaybirdの製品は4年ほど愛用しています。今回も当たりです。
心配していた天気も夜には快復していつものようにランニングに出かけましたが、なんかめっちゃヒザ痛い・・・
一昨日から痛みはあったのですが今日は全く走れないレベルでした。「こりゃ炎症おこしてるなー」と思いつつも5kmほど競歩を実施。
完全に運動不足の弊害ですね。今の体重を支えられるほどヒザの状態が良くなかったようです。まずは体重を落とさねば・・・
明日からはしばらく走るのを控えて室内での筋トレに専念します。
明日やること
走れなくなったのは辛いですが、引き続きアタマを鍛えていきます。Rustで実際にWebアプリケーションを作っていきたいのですがどうやらフレームワークが乱立しているようですね。
簡単に調べたところIRONというやつが良さそうなのですが、もう少し調査が必要・・・
Iron - Rust web application framework
というわけで明日やること。
- Rust Web Framework調査
- Rustチュートリアル続き
- Rustアプリケーションの立ち上げ
- 会食
それではみなさん良い火曜日を!
修行編 - 10日目
やったこと
1. Gradleの勉強
MavenもMakefileも全然分かっていませんが、Spring Bootに必要なようなのでGradleおよびGroovyの使い方を勉強しました。
主に上記の記事を参考にしましたが、また前職の同僚が書いていました。流石です・・・
テック系の技術記事におけるメル社の人間のヒット率は異常ですね笑
2. Spring Boot入門
@maeharinさんの記事を参考にSpring Bootで簡単なKotlin APIサーバーを作ろうとしました。
ですが無限にエラーで怒られガン萎え・・・
IDEの設定やら使い方を調べるのに膨大な時間が取られてしまい、肝心のKotlinのコードが全然書けていません。つらぽよ
3. Rust入門
Kotlin諦めてないよ!ただの気分転換だよ!!
シュッと環境構築もできるRustを触ってみました。Cargoはシンプルで使いやすいですね。
こちらのチュートリアルの3章までの内容を手元で試し、型システムの基本、標準入力の扱い方、スレッドプログラミング等に触れました。
書き心地も大変良く、スマートな言語だなという印象です。明日からKotlinとどっちをやろうかなー
4. ランニング
雨につきおやすみ(罪悪感)
5. 映画鑑賞
二子玉の109シネマズでようやくDeadpool 2が観れました。久々のIMAX。
やっぱ最高に面白いですね。監督が変わったので心配してましたが、相変わらずジョークがキレキレです。
トレイラーで推されていたX-Forceのメンバーがまさかあんな扱いになるとは予想もしていませんでした。そしてなによりあのポストクレジット映像。個人的にMarvel史上最高なんじゃないかと思ってます笑
終始映画館では笑いが起きていたのですが、正直なところ字幕が邪魔で仕方なかったです。本音声と字幕ではそもそもニュアンスが全然違うしオチのタイミングも違うので、字幕がなければさらに面白かったのではないかなと思います。
日本でも字幕無し上映やってるところないのかな。
6. カラオケ
こちらも久々でした。
最近の邦楽も仕入れてレパートリー増やさないとです。(危機感)
明日やること
明日からまた会食 & 面談ラッシュです。勉強はできそうですが悪天候でランニングができないのが残念。筋トレもやってカロリー消費するしかないですね。
最近夜更かしをしがちなので、徐々に生活リズムも取り戻していきたいです。
それでは良い一週間を!
修行編 - 9日目
やったこと
1. Kotlin入門 (その2)
昨日の続き & IDEの設定 & Frameworkの調査。
Spring BootとDoma2というやつを組み合わせれば良い感じにAPIサーバーが作れそうです。明日から実装に入ります。
2. Kotlinプロジェクトのスケジューリング
ざっくりと工数の見積もりを行なってマイルストーンの設定を完了しました。
GitHub issuesでのタスク管理と並行してTodoistでのタスク管理も試してみます。とりあえず有料版のトライアルを開始して、ラベル機能でマイルストーン管理を行うことにしました。
3. みなとみらい探訪
せっかく海沿いのホテルを取ったので、早起きして臨海パークを散歩しました。休日の午前中なのでランニングする人やペットと戯れる人が多かったです。
モーニングはちょっと贅沢をしてインターコンチネンタルホテルでビュッフェ😋
ミックスオムレツが至高の味でした。
4. NBA観戦 & テレビゲーム
幼馴染の自宅でコーラとピザを頬張りながらFinals最終戦を観戦しました。思えば10年前にも学校帰りに札幌の彼の家でBOS vs LA戦を観てたなー
大方の予想通り、今年は4-0のスウィープでした。
3Qあたりからグダグダだったりレブロンも完全に意気消沈してたりと、近年稀に見るヒドさだったのは異論の余地がないでしょう。WCFが実質の決勝戦でしたね。
後出し的に「実はレブロンはGame 1の日に手を怪我をしてた」という情報が流れてきましたが、僕の中で彼の評価が変わることは特にないです。
プレイスキルはMJ以上に完璧だけどリーダーとしては3流、という感じ。彼の周りに碌なコーチやサポートメンバーが集まらないのは当然のことなのであまり同情できないのが正直なところです。
来シーズンはおそらく76ersに移籍かな?
もう数年してレブロンがチームの2番手・3番手くらいになったらまたFinalsで勇姿を観たいですね。
試合の後は久々にPS2でバスケのゲームをしました。
お互い良い年なのに完全に中学生のテンションではしゃぎまくって、ひたすら楽しかったです。
5. ランニング
3日前に続いて昨日もサボってしまいました。
睡眠時間が3時間くらいしか取れてなかったのでガッツリお昼寝してからランニングへ。
いつもランニング時に着用しているJaybirdのワイヤレスイヤホンが壊れてしまったので残念です。明日には新しいJaybird Runが届くはず。
6. 弟とSkype
お互いあまり筆マメではないのですが、こうしてたまに顔を見て近況報告するのも悪くないですね。
向こうの学友と競い合って彼が世界で活躍する人材になるのが楽しみです。
明日やること
Kotlinをしばらくやってみます。明日こそ映画行くやで
- Spring Boot入門
- Gradleをマスターする
- IntelliJ IDEA入門
それではみなさん良い日曜日を!
修行編 - 8日目
1日遊んでました
やったこと
1. Kotlin入門
環境構築と基本的な文法の確認
ジェネリクスがあるのは嬉しいですね
2. ランニング
サボり
3. スケジューリング
サボり
4. 横浜観光
神奈川にくるのは1年半ぶりです。
横浜駅周辺をブラついたり、元町中華街を歩いたり、夜のみなとみらいを散策したりしました。
今日は気分転換のためにホテルビスタプレミオ横浜に宿泊しています。
窓から観覧車のライトアップが見えるのが素敵です。
なんとなくですが、雨の夜の横浜はサイバーパンク感がありますよね。
5. 幼馴染と食事
生まれた街どころか病室まで同じな幼馴染としばらくぶりに再会しました。(誕生日は1日違い)
少し合わないうちに向こうは嫁ができていたり、僕はエンジニアになって会社5個くらい経験してたりとお互い人生の進捗が大きかったです。
どれだけ環境が違っていても会えばすぐに小学生のころのテンションに戻れる友人は宝物ですね。
明日も朝から向こうの家に押しかけて一緒にNBA Finalsを観戦する予定です。
明日やること
すっかり1日遊んでしまったなー。明日も碌に進捗が生めなさそうなので、移動時間等を活用して学習を継続していきたいと思います。
- NBA Finals観戦
- 神奈川探訪
- サーバーサイドKotlinの構成を調べる
- アプリケーションの立ち上げ
- Kotlinアプリケーションのスケジューリング(明日こそ!)
生憎の天気ですが、みなさん良い週末を!
修行編 - 7日目
やったこと
1. Python環境構築
年末にMLをやった関係でpyenvとか一通り設定していたため、シュッと3.6系の最新版がインストールできました。他には一通りpipやEditorの設定をしたり。
コマンド入力してた時間より処理待ちしてた時間の方が長そうです笑
2. Django入門
Docsやチュートリアル記事を見てざっくりとディレクトリ構造やルーティングやORMの仕組み等を把握。初めてDjangoを触るので当然知らないことばかりなのですがなぜか強烈な既視感が・・・
デザインパターンに新鮮味が無いのが問題なのかスクリプト言語特有の問題なのかよく分かりませんが、なぜか全然やる気が出ないです笑笑
「Rails勉強した時みたいにDjangoでもWebアプリ作るぞ!!」というやる気が数日前にはあった筈なんですけどね。
もう少しだけAPIサーバーの実装パターンや認証の仕組みを調べたらお終いにしようと思います。仕事で必要になったらまた勉強して、今月は別の事に時間を使った方が良さそうかな
3. Scala入門
Djangoのやっていきが失われたのでScalaに入門しました。
環境構築をして簡単な関数を実行するところまでです。次回はファイルシステムやフレームワークについて調べたいと思います。
とはいえこちらも「Scalaで〇〇を作るぞ!」みたいな欲求が乏しく、モチベーションが継続するか心配・・・
JVM言語に触れることが目的なので先にKotlinでモバイルアプリを作るのも良いかもしれませんね。迷い中。
4. DTNの勉強
例のアレのためのお勉強です。
https://www.jstage.jst.go.jp/article/bplus/2011/16/2011_16_16_57/_pdf
目を通したのはこの辺。まだまだ基礎の基礎です。
5. 面談
例のところの一次選考をパスしたので二次選考へ。
緊張してあまり眠れなかったり、面談中に心拍数が爆上がりしたりと不安材料でいっぱいでしたが先ほどこちらも通過の連絡をもらいました。
あと2つほど選考が残っているので気を抜かず臨みたいと思います。
6. UIT #3
LINEさんで開催されたUITの第三回へ。今回のテーマはBFF(Backend for Frontend)ということで豪華な面々が勢ぞろいするイベントでした。
やはり既にMicroservicesが動いているような会社の方が導入ニーズが高いのかな。
自分はUITは皆勤賞なのですが、運営で参加した前回の打ち上げで「LINEさんとメ○ペイ社でBFF勉強会しましょうよー」と話していた内容が実現して、本当に嬉しかったです。
生憎と某社はすこし前に退職してしまったのですが元同僚が素晴らしい発表をしてくれました。
BFFは短い在職期間の中でも自分から積極的にバックエンドチームやSREチームに話を持ちかけて実現した思い入れのある部分なので、日の目が見られて想いもひとしおです。
チームの仲間と作ったものが名だたるTech企業や尊敬するエンジニアの発表と並んで紹介される経験は、自分のエンジニアリングキャリアの中でも一つマイルストーンになった気がします。
今回のUITの内容は世界的に見てもとても貴重な知見で溢れていたなと思うので次回のイベントも楽しみです!
7. NBA Finals Game 3
3大スターのうちの2人が絶不調だったので流石に厳しいかなと思いましたが、勝ちましたね。
これで今年も3勝0敗。ほぼ優勝は確定でしょう。
今日のゲームではLeBronがあまりアグレッシブでないのが気になりました。ホーム初戦なのでゲームメイクに専念してチーム全体のコンディションアップを狙ってたんですかね?実際にHoodやLoveは大活躍だったしJ.R. Smithも今までよりはマシだったかなという感じです。
その全てをかき消すようなDurantのパフォーマンス。歴史に残るバケモノ級の活躍でした。
孤軍奮闘で43点を取る働きもイカれてますが最後の3ポイントがやばかったですね。Game 3のラスト1分はもうずっとKDにボール持たせとけば良いんじゃないでしょうか笑
LeBronというもう一人のバケモノがいるのでまだ分かりませんが、この調子ならもしかしたら4連勝もあるかもです。おそらくGame 4ではStephもKlayも調整してくるでしょう。
できればスポーツバーで幼馴染と観戦したい!
8. ランニング
1日休んだだけで身体が重いです笑
それとやはり酒を飲むとダメですね。しばらく会食も控えようと思います。
今日も25時ごろから走ったのですが、駒沢通りにかかる高架橋の下でバスケをしたりダンスをしたりする若者がいて、なかなかヒップでホップな感じでした。
明日やること
Djangoに1週間ほど使う予定でしたが早くも暗雲が立ち込めています。正直ReduxもやりたいしNodeのライブラリも触りたいしdenoも触りたいしWeb Componentsも触りたいし、とJS熱が沸々と煮えたぎっているのですが心を鬼にして新しい技術に取り組みたいと思います。
とりあえず明日はリサーチ中心でこんな感じ
週末は気分を変えて神奈川で過ごす予定です。みなさん、良い金曜日を!
修行編 - 6日目
やったこと
1. ロマンシング佐賀
redux-sagaについて引き続きお勉強 & 実装。
昨日から使い始めたtypescript-fsaで作成したAsync Actionをtypescript-fsa-redux-sagaでbindしてあげれば良い感じにsagaからリソースfetch処理を call
してあげられそうです。
Flux Storeの実装をする時はドメイン単位でactionsやreducerを纏めるDucks Pattersが好きなのですが、sagaを利用する時はどのようにファイルを配置してあげるのが良いかかなり悩みました。
とりあえず上のissueで紹介されているような SagaManager class
をRootレベルに配置して、各moduleからpushしてあげる方法を試そうと思います。
2. モックサーバーの作成
「Swaggerの運用つらい」みたいな感情が5分に一度込み上げてくるので雑にNode.jsでAPI Serverを書いてみました。
Expressだと秒速で完了してつまらなかったので初めてKoaも触ってみました。とは言っても1エンドポイント&ダミーレスポンスなので大した事はしていません。
その後Reduxについて調べるためにネットを回遊してたらこんな物を見つけました。
Yosuke Furukawaさんが紹介していたリクテク謹製のJSONモックサーバー作成ツールです。
以下のようなファイルを用意するだけでAPIサーバーが起動します。
// ./agreed.js module.exports = [ { request: { path: '/user/:id', method: 'GET', query: { q: '{:someQueryStrings}', }, values: { id: 'yosuke', someQueryStrings: 'foo' }, }, response: { headers: { 'x-csrf-token': 'csrf-token', }, body: { message: '{:greeting} {:id} {:someQueryStrings}', images: '{:images}', themes: '{:themes}', }, values: { greeting: 'hello', images: [ 'http://example.com/foo.jpg', 'http://example.com/bar.jpg', ], themes: { name: 'green', }, } }, }, ]
起動コマンドはこちら
$ agreed-server --path ./agreed.js --port 3010
ちなみにドキュメントUIまで作成されます
「オレたちが求めていたのはこれだよ!」と叫びたくなるくらい手軽なツールだったので、早速利用させていただきました。
どんどん使っていこう
3. Redux Side Effectsの管理について調べる
ここ数日ずっとReduxのことばかり考えている気がします。
TSでAction Creatorを書いたりReducerを書いたりする方法は正解が見えてきた気がしますが、副作用のハンドリングについては今だに答えが出ず・・・
今は練習のためにredux-sagaを書いていますがこれは明かにオーバーキルな代物です。
かと言ってredux-thunkでは自由度が高すぎるのでこちらも却下。
というわけで新たな候補が以下の2つ。
型安全かつ非同期でReduceがステップ実行さえできれば満足なのでどちらも機能としては必要十分な匂いがします。
実際にコードを書くところまでは行けなかったので次回Reduxを仕事で触るときは上記の2つでプロトタイピングするところからやってみたいです。
4. API疎通テスト
成功
5. ランニング
おやすみ
6. オフィス見学
創業前から憧れていた会社にお邪魔しました。
フロントエンドチームのみなさんと技術やカルチャーについてお話しできて最高でした。
あらゆることのレベルが高いし、チームのサイズ感も理想的でひたすらカッコ良かったです。
7. 会食
初めて大門のエリアに行きました。
新橋よりちょっと静かな感じです。
お肉しゅき💕💕💕
明日やること
Reduxについて考えるのが楽しくなって来たのですが、残念ながらスケジュールの関係で今日で一旦お終いです。
当初の目標であった業務Readyなレベルにはなったかな?後は実務で使ってみて足りないところは死ぬ気でキャッチアップします。
明日からは久々にPythonの環境を作ってDjangoに入門するぞい!
良い木曜日を!
修行編 - 5日目
やったこと
1. Next.jsやめました
ReduxとReactの接続でいろいろと試しているときに、詰まってる問題がReac由来なのかNext由来なのかが分からず思い切ってやめました。
getInitialProps
の挙動とか、専用のプラグインの挙動がかなりのブラックボックスで自分には早すぎたようです。もう少しReactスキルがアップしてから再挑戦したいと思います。
アプリは $ npx create-react-app
で再度作り直しました。
2. redux-sagaについてひたすら考える
ひたすら考えてました。
そもそもSagaが提唱された経緯から thunk
との比較、 observable epic
との比較、型安全な書き方、フォルダ構成、テストの書き方、Generator構文の復習などをやっていたらあっという間に1日が過ぎてしまいました。
正直今やっているプロダクト程度ならThunkで十分なのですが、Sagaの書き心地が知りたいのでもう少し粘ってみます。
明日こそは実装に移りたい・・・
(*余談ですがSagaの紹介記事でやたらと「Thunkはコールバック地獄が厳しい」みたいな記述を見たけど、 async/await
で書いたら大して変わらへんやんけというお気持ちになりました)
3. Reducerの書き方を変えました
一度はtypesafe-actionsで記述してみましたが、 actionCreator内での型定義やReducerの書き心地などの理由でtypescript-fsaおよびtypescript-fsa-reducersに乗り換えました
こんな感じで書けます
// actions.ts import actionCreatorFactory from 'typescript-fsa' export const receiveTodos = actionCreator<ReceiveTodosActionPayload>(Types.RECEIVE_TODOS) // reducer.ts import { reducerWithInitialState } from "typescript-fsa-reducers" import * as actions from './actions' import { TodoState } from './types' const initialState: TodoState = { items: [] } const reducer = reducerWithInitialState(initialState) .case(actions.receiveTodos, (state, {items}) => { return { ...state, items } }) export default reducer
VSCode上での補完もバッチリ効いてナイスです。Async Actionsの書き方は要検証。
4. API疎通テスト(失敗)
Reactアプリケーションを localhost:3000
で動かしているのに対してSwaggerで生成したモックサーバーは localhost:8080
で動いているため、当然のごとくCORSで怒られました。React Nativeの開発をしている時は全然気がつかなかった・・・
改めてSwagger Specを読んで当該レスポンスに headers
-> Access-Control-Allow-Origin: *
を追記したのですが何故か適用されず🤔
Swagger Editor上では構文エラー等出ていないのですがなんでなんでしょうか。
明日もう一度試してだめならExpressからハードコーディングしたダミーレスポンスを返してみます
5. おひす訪問
恵比寿の某社にお邪魔してピカピカのおひすを案内していただきました。気になっていたチョコレートもついでに頂戴。
肝心のミーティングはというと、「デザイナーさんとかエンジニアさんと話してみたいっすwww」と舐めたお願いをしたことをひたすら反省するアレでした。
無防備でお邪魔したせいでこっちが面接してるのかあっちが面接してるのかよく分からない感じになっちゃいましたね。本当に申し訳ないです。
お忙しいなか時間をいただき、本当にありがとうございます。
6. 恵比寿探索
普段あまり足を運ぶ機会がない恵比寿なのでいくつかカフェ巡りをしました。
3つほど訪れましたが、本日のベストはessence cafe
表向きは花屋と見紛う可愛らしさですが(実際にお花も売っていた)、B1フロアには電源とWi-Fiが完備されており作業スペースに持ってこいでした。
間食でいただいたミートパイも美味しかったです。
7. 会食
Vueコミュニティがきっかけで仲良くなった友人たちとご飯に行きました。
600円のスペアリブがめちゃめちゃ美味しかったです。
とてもワクワクする野望が聞けたので僕も気を引き締めて頑張らなきゃなと思いました。また近いうちにご飯しましょう!
8. ランニング
雨の上がった12:30ごろから深夜ランへ。
1kmを5分フラットで走ってみたくていつもより速めのペースで飛ばしたら、2km付近で見事にバテました...orz
徐々にペースを上げていって、ある程度のスピードに乗ったら均一の速度をキープするのが大事だなという学びです。
まあ今日は恵比寿から渋谷まで歩いたり、お酒も飲んだ後でのランなので疲れていて当然という気もします(言い訳)
明日はずっと雨のようなので休息日にするのもアリかもしれません。
明日やること
明日も本日と同じくオフィス訪問 & 会食の予定が入っています。そろそろ梅雨本番といった感じで天気もイマイチですが、粛々と進捗を生めたらなと思います。
- オフィス訪問 & 会食
- Redux Sagaの実装
- API疎通テスト
- Render List View
そういえばまだDead Poolを観に行けてない・・・
明日も良い1日になりますように