hiraike32

我輩はエンジニアである、技術はまだない。

2020年の目標

2020年が始まった。せっかくなので、2020年の目標について書いておきたい。

2019年は「適応」の1年で、いろんなことの土台が整ったように感じるので、今年はそれを生かして自分の力を高めていきたいなと思う。

hiraike32.hatenablog.com

2020年の目標

2020年の目標は以下の3つ。

  • 技術力を高めること
  • 知見を貯めること
  • 健康に過ごすこと

具体的な目標を立てるのに1年というスコープは長すぎるので、ある程度の抽象度を持たせる。

これらの目標というか方針に沿って、今年も1年頑張っていきたい。

技術力を高めること

ソフトウェアを開発する仕事をしているので、技術力をつけてチームに貢献できるようになっていきたい。

WebもAndroidも、昨年までは実装に必要な知識を必要なときに調べるだけで終わっていた感じがあるので、今年はもっと深い部分まで理解できるようになりたい。

特定の言語に限らず、開発手法だったり、各社の技術傾向を追ったり、チームの開発力の強化なども行っていけたら良いなと思う。

技術広報までできたら満点!とりあえずは役に立ちそうなことを個人で発信していきたい。

知見を貯めること

ざっくりしているけれど、内容的には「幸福に生きるため」に必要な知見を貯めていきたいということ。

仕事は技術力があれば何とかなるかもしれないけれど、幸福に生きるためには人間関係を円滑に進めたり、人類の歴史を知ったり、思考の方法を学ぶ必要があると思う。

色々と本を読んだり、記事を読んでみて、それを実践したり知識をまとめることで知見を貯めていきたい。

健康に過ごすこと

これ大事。

昨年も何回か身体を壊したし、治療費も厳しかったので、健康には気を遣っていかなければならない。

1ヶ月を100%でやって1週間倒れるよりも、1ヶ月を80%でやって倒れないほうが大事だと思う。

今まで発生したことについては対処を行っているので、これからもそれを続けつつ、少しでも疲れとか病気の前兆を感じたら、勇気ある撤退を心がけていく。


これらが2020年末にどうなっているのかを楽しみにしつつ、この1年も頑張っていきたい。

2019年のまとめ

2019年は、個人的に「適応」の1年だった。

短期留学の生活に適応し、新入社員の生活に適応し、Android開発に適応した。

仕事納めも無事に終わり、時間ができたのでこの1年の活動をまとめておく。

主なできごと

アメリカ短期留学

2月半ばから6週間に渡ってサンフランシスコへ留学したのは貴重な経験だった。

世界トップクラスのエンジニアが集まっているサンフランシスコの街で、いろんなイベントに参加したり、シリコンバレーのIT企業を訪れたりして、世界を少しだけ知れた時間だった。

hiraike32.hatenablog.com

社会人になった

今までアルバイトでたくさんの企業を転々としてきたけれど、大学を卒業してようやく正社員として就職することができた。

月給制と有給の存在がとてもありがたく感じている。

hiraike32.hatenablog.com

Android開発者になった

今まではWebのフロントエンドを開発していたけれど、6月の部署配属でAndroidを開発していくことになった。

どんな言語でもやっぱりUIに影響する開発はとても楽しいし、Android特有のコードに慣れつつ充実した日々を過ごせている。

Webで得た経験が生きていることも多く、逆に今後Androidを書かなくなったとしても、この経験は生きていくんだろうなと思う。

応用情報技術者試験に合格した

けっこう嬉しかった。

でも試験勉強はコスパが悪い(それよりもコードを書きたい)と感じたので、もう他の試験は受けないと思う。

書いたもの

Qiitaで書いた技術記事は以下の9本

three.jsのOrbitControlsをTypescriptで使う方法 - Qiita
コミット時にtslintとstylelintを回してコードの品質を保証する - Qiita
私たちはどうして公式ドキュメントが読めないのか? - Qiita
NEXT.jsとReact Hooksを使ってTodoアプリを10分で作る - Qiita
新しく言語を学ぶときに心がけていること - Qiita
Android Studioをもっと便利に使うためのショートカット設定 - Qiita
AndroidのWebViewでキーボードが入力欄にかぶってしまうとき - Qiita
Androidを開発する上で参考にしているもの - Qiita
Androidで新機能を実装するときに考慮すること - Qiita

Androidに配属になってからは自学習が多くてなかなかアウトプットできなかったなと思う。

特にAndroidは日本語の参考資料が少ないので、来年は少しずつアウトプットを増やしていきたい。

2019/12/29時点のQiitaのcontributionは4500を超えていて、この1年で3,000くらい増えたので良かったなと思う。

f:id:hiraike32:20191229164139p:plain

Qiitaマイページより

また、このブログに書いた記事は、この記事を除いて13本。

hiraike32.hatenablog.com

留学の記事が多かった。

来年も技術以外で感じたことを月1くらいで書いていきたい。

今年の目標の達成度

年初に立てた今年の目標は以下の通り。

hiraike32.hatenablog.com

体調管理について

今年は6月と11月に大きく体調を崩した。

6月は新卒の技術研修が終わったとき、11月は応用情報技術者試験が終わったときで、どちらも「季節の変わり目」と「努力したきたことが終わったとき」が重なった。

それ以外はけっこう元気に過ごせていたので、来年は「季節の変わり目」と「努力したきたことが終わったとき」には特に身体を休めて健康に気を付けたい。

エンジニアとして

まさかAndroid開発になるとは思っていなかったので、計画が大きく変わったと言うしかない。

それでも、コードを読む力はついてきたと思うし、技術書は11冊読んだのでそれなりに達成はできたかなと思う。

プロダクトの発信については、今年は留学先で会ったErickのサイトを作ったくらい。

erickwendel.com

自分で言うのもなんだけれど、けっこうイケてるサイトが作れたので良かった。

英語でコミュニケーションを取って開発できた貴重な経験になった。

年初の目標は7割くらい達成できたかな。

まとめ

いろんな環境に適応できた1年だったので、来年はそこに自分らしさを打ち立てていきたい。

自分の開発スタイルについて

新しい人が入ってきた時とか、自分が新しいチームに入った時とかに、自分の開発スタイルを共有しておいたほうが良いと思うので、スッと渡せるようにここにまとめておく。

ぼくの開発スタイルは以下のようなものである。

  • PRを小さくシンプルにすること
  • スピードで質を担保すること
  • レビューが3往復以上になったらペアプロすること
  • ドキュメントは極力書かないこと
  • PRを盛り上げること

PRを小さくシンプルにすること

PR(プルリクエスト)はできるだけ小さくシンプルにする。
そのほうがレビュワーの負担も減るし、コンフリクトのリスクも減るし、進捗率がわかりやすくなる。

具体的にはPRは大きくても7ファイル100行以内の差分に抑える。
それを超えるようであれば分割するし、なんなら1ファイルとか1行だけの差分でPRを作ることもよくある。

ただ、import先の修正とか、単純作業による一括変換で差分が大きくなっている場合は例外とする。
そのへんはレビュワーの負担も抑えられるのでよし。

逆にクソでかPRを出してくる人には積極的に分割を勧めるので、そこはご容赦ください。
PRは大きくなればなるほどレビュー漏れが発生するので、コードの品質を保つためにも必要なことだと思ってる。

スピードで質を担保すること

個人的にスピードを上げて試行回数をあげることで、不具合や考慮もれに気づいて質を高めていくスタイルが好きだ。
自分の性格が大雑把でせっかちなことも影響してると思う。

PRを小さくして、細かく何度もレビューを繰り返すことで気づくことは意外と多い。
もちろんスピードをあげることで時間が余って、そこでコードの見直しやリファクタに時間を当てることもできる。

スピードの基準の定義は環境によって異なるので一概には言えないけれど、1人あたり2PRが毎日マージされて、週1でリリースできていれば良いかなと思う。

もちろんスピードを求めるにはCIが整っていたり、不具合を検知できるテストが整っている必要があるので、スピードが出ていないと感じるときはそこから手をつけると良いかもしれない。
ぼくは常にスピードで品質を担保していきたい。

レビューが3往復以上になったらペアプロすること

特に新しい人が入ってきたときや、逆に自分が新しいチームに入ったときは、知見が足りなくてPRのレビューが3往復以上になることがある。
そういうときは、更にレビューを重ねるよりも実際に横でペアプロしてもらったほうがお互いに楽になることが多いので、積極的にペアプロを提案するようにしている。
自分が出したPRでも、シニアエンジニアが出したPRでもペアプロをお願いするように心がけている。

ペアプロをすることによる知見は意外と大きくて、

  • コードを書くときに何を考え、何を気をつけているのかがわかる
  • どんなツールやコマンド、ショートカットを使って作業しているのかがわかる
  • 困ったときに何をどんな検索ワードで調べて、参照しているのかがわかる

など、コードを見るだけではわからない大事なことを共有できる。

一緒にコードを書いていけば、レビューをする手間も省けるので一挙両得だ。
毎回ペアプロをすることはできないが、レビューが3往復を超えるという一種のアラートが発生していたら、ペアプロによって対処していきたい。

ちなみに、ペアプロの細かいやり方については以下を参考にしてる。

uasano.hatenablog.com

その他の参考にしてる記事はこのへん
ペアプロ懐疑派だった僕が、実務でペアプロ導入して180度考えが変わった話
ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習

ドキュメントは極力書かないこと

開発に伴う設計書やクラス図、モデル図などは極力書かないようにしている。
なぜなら、そういった知見はコードに全て含めるべきだと思っているからだ。

ドキュメントは、作成したその瞬間からメンテナンスの必要性が発生する。
開発における仕様変更は日常茶飯事なので、先週作成したドキュメントの情報が参考にならない、酷いときには間違った情報に誘導する可能性がある。

それよりも、そういった設計は直接コードで実装するべきだし、仕様はテストで担保していくべきだと思う。
逆に言えば、コード以外のものをメンテナンスしたくない。

各チームで共有するAPI仕様書や、フロントで実装する画面デザイン資料などはもちろん必要だし、見積もり書なども作るが、それいがのドキュメントは極力書かないでいきたい。

PRを盛り上げること

PRでのやりとりは文字による人間味のないものになりがちなので、時に表現のすれ違いから険悪なムードになってしまうことがある。
チーム開発の心理的安全性を確保するためにも、PRは楽しいものでありたい。

そのために、ぼくはレビューしたらLGTM画像を貼るようにしてる。

f:id:hiraike32:20191213143630p:plain (画像はleakcanaryをプロジェクトに入れてもらったときのapprove)

ちなみにLGTM画像は以下サービスにいつもお世話になっています。

LGTM画像を驚くほど簡単に作れるWebサービス with Scala
LGTMoon

あとは、commitにはEmoji Prefixをなるべく使うようにしたり、PRのコメントにも絵文字で感情を表すようにしたり。

Emoji Prefixはこんな感じで運用している。

gist.github.com

世間で言われるように、チームにおける心理的安全性はとても大事なので、こういった表現で少しでも確保していければなと。
こういう記事を過去に書いているので、まずは自分自身がしっかりしていかないと。。。

新人プログラマをレビューで殺さない方法

PRをなるべく盛り上げることでレビューを活発にして、より強いチームを実現していきたい。


これらのスタイルは、ぼくがチームの生産性を最大にできると思っているものだ。
チームの生産性が高まる他の方法があれば、それも活用したいし、自分のスタイルも変えていきたいと思う。

チームとして強くなっていきたい。

新しいMacbookを手に入れたときにやること

f:id:hiraike32:20190413100623j:plain

Macbookを新しく会社で支給されたり、買い替えたりしたときに設定することのメモ。 毎回色々と調べるのは大変なのでまとめておく(随時更新)。

PCの設定

色々な操作がしやすいように、Macbook自体の設定を行う。

  • 一般→外観をダーク
  • Dock→自動的に非表示
  • ディスプレイ→NightShiftをオン
  • キーボード→ユーザ辞書→アドレスの登録&文頭を大文字にしない
  • キーボード→入力ソース→ライブ変換なし、バックスラッシュ
  • トラックパッド→タップでクリック
  • 日付と時刻→時計の設定

ブラウザの設定

Google Chromeをインストールして、デフォルトに設定する。

拡張機能のインストール

開発ソフトのインストール

作業に必要なソフトウェアを一通り入れておく。

サイトから

app storeから

エディタの設定

以下の記事に沿ってAndroid Studioの設定をする

qiita.com

vscodeの設定をして、いつでもコードが書けるようにする。

拡張機能を入れる

  • Bracket Pair Colorizer
  • GitHub Pull Requests
  • Japanese Language Pack for Visual Studio Code
  • Material Icon Theme
  • Prettier

ユーザー設定をする

{
  "workbench.startupEditor": "newUntitledFile",
  "editor.wordWrap": "on",
  "window.openFoldersInNewWindow": "on",
  "editor.formatOnSave": true,
  "search.smartCase": true,
  "explorer.confirmDragAndDrop": false,
  "explorer.confirmDelete": false,
  "editor.tabSize": 2,
  "typescript.updateImportsOnFileMove.enabled": "always",
  "javascript.updateImportsOnFileMove.enabled": "always",
  "workbench.iconTheme": "material-icon-theme",
  "git.autofetch": true,
  "breadcrumbs.enabled": true,
  "editor.minimap.enabled": false,
  "typescript.referencesCodeLens.enabled": true
}

$code を有効にする

vscodeCommand + Shift + Pshell を検索してインストール

シェルの設定

以下の記事をもとに、シェルをbashからfishに変更する

【初心者歓迎】bashからfishに切り替えて快適なターミナル環境を構築しよう

言語の設定

  • homebrew

    $/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  • node

  • yarn $brew install yarn

これで最低限の準備はできたはず。

社会人になった

f:id:hiraike32:20190407221631j:plain

留学から帰ってきた翌日に入社式を行い、24歳の春に晴れて社会人となった。

そもそも留学前まで同じ職場で働いてきたので、あんまり社会人になった実感はなかったけれど、同期に会えたことはとても嬉しい。

大学時代の半分以上をインターンというかアルバイトに費やしてきて、同世代との関わりがほとんどなかったので、喜びも人一倍大きいと思う。

同期の人たちと仲良くなりたいし、面白いものを作りたいし、いろんな時間を共有していきたいなと思う。

社会人の最初の1週間を無事に終えたので、思っていることをまとめておきたい。

失敗しつづけたい

f:id:hiraike32:20190407221646j:plain

社会人になったので、失敗は避けるべきだし、避けられるだけの能力もある程度は身につけてきた。

でもだからこそ、いろんなことに挑戦して失敗をしつづけていきたいと思っている。

なんとなく、今の自分に物足りなくなってきた。

去年の自分は、プライベートでいろいろとあり、悔しさと劣等感に満ちて必死に毎日を進んでいた。体力が欲しかったし、技術力が欲しかったし、承認が欲しかった。2度とあんな思いはしたくないけれど、必死で過ごした日々がどこか懐かしく思われる。

それに比べれば、今の自分はいろんなものを得ることができて、それなりにうまく立ち回れるようにもなった。なってしまった。でもこのままだとダメな気がする。

留学中はたくさん失敗した。だから必死だった。たぶん社会人になったことで色々と失敗することもあると思う。それがなかったときが問題だ。取り越し苦労かもしれないけれど。

社会人になった今だからこそ、改めて失敗に臆病にならずに、最低限のリスク管理をしながら挑戦して失敗していきたい。そして失敗した時にも、適切に問題の対処と感情の処理をしながら、悔しさをバネに大きくなっていきたい。

1年前の日記を読み返しながら、そんなことを思った。

技術力の課題

f:id:hiraike32:20190407221738j:plain やっぱりまだまだ設計力が弱い。仕様を見通せずに、後から設計を変更したり、作り直したりすることが多々ある。

設計については経験を積むことで解決されることが多いと思うので、0から10までを作り上げることを繰り返していきたい。アウトプットに力を注いでいく。

作りたいものはいくつかあるので、それらを最後まで作り上げること、そして作った後にその工程を振り返って、改善点を見つけることをやっていきたい。

あとは、技術力を高めていくためのモチベーションの確保。仕事を終えて帰ってからコードを書くにはそれなりの気力が必要になっているので、コーディングのハードルを下げるか、高い気力を保つかの方法を考えていきたい。まずは体力を完全に戻す方が先かもしれないな。

あと、コンピュータサイエンス全体の基礎力は底辺レベルなので、体系的にまとまった書籍で学ぶこともやっていこう。このへんの優先度が難しくて遠回しにしがちだけれど、夜に時間を決めて習慣にしていこう。あと、気力の最大値を上げるために瞑想も習慣にしていきたい。

技術力の向上と言いつつ、それを支える生活習慣も大事なので、そのへんもうまくまとめていきたいな。色々書いてみて、生活習慣がふわふわしていることがわかったので、少しずつ生活を作っていこう。このへんも失敗しながら挑戦かな。

まとめ

社会人になったからといって、何かが受動的に変わるわけではなく、むしろ自分から変えていかないと取り残されてしまう。これは留学でも感じたこと。

「変わり続けることを変えず、作り続けることをやめないこと」

この言葉を大事にしつつ、自分から社会人へと変化していきたいと思った。