hiraike32

Android アプリの開発を生業としています。

2021年の目標

1月も半分過ぎてしまったけれど、改めて2021年の目標、力を入れたいことをまとめる。

とはいえ、2021年はとても予測がつきにくい1年だ。コロナ感染が急拡大するリスク、不況で企業が次々に倒産するリスク、現実経済とかけ離れた株式市場が爆発するリスク、東京オリンピックの開催・中止それぞれのリスクなど、 何が起こるかわからない要因が多すぎる。

それを踏まえた上での、2021年の目標設定にする。

2021年の目標

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

  • 技術力を高めること
  • 知見を貯めること
  • 生き延びること

ほとんど2020年の目標と変わらないが、3つ目を「健康に過ごすこと」から「生き延びること」に変えた。この3つの目標を目指して、毎月の振り返りをしていきたい。

技術力を高めること

Androidの開発にも順応してきているが、まだまだ触れたことがない技術が多い。この1年で、以下の技術に触れる機会を増やしていきたい。

  • DI(Dagger Hilt, Koin, Kodein, ext...)
  • Json Parser(moshi, Kotlin serialization, ext...)
  • Room
  • Kotlin Coroutine, Flow

あとは、チーム開発力の強化と、会社ブログへの寄稿、Qiitaに雑にAndroidの記事を投稿するなども続けていきたい。Material Design Guidelineに沿ったアプリデザインにもしていきたい。

昨年でKotlin化をはじめとした技術負債の返済ができたので、今年は前に進む1年にしたい。

知見を貯めること

今年も読書や日々の情報収集を通して、たくさんの生きる知恵や広い視野を身につけていきたい。

昨年読んだ本は36冊。今年も技術書・実用書・小説を幅広く読んでいきたい。昨年末にKindleを買ったので、電子書籍でいつでも読む習慣をつけていこう。

生き残ること

1番大事。

身体的に健康でいること、経済的に収入を確保すること、精神的に安定していること。今年はこれらを守っていく難易度が高そう。

手洗いうがい、外出自粛、部屋の湿度管理などを気を付ける。しっかりと働く。心が苦しくなる前に誰かに相談する。そうして、何が起こるかわからない2021年をしっかり生き延びたい。


2021年もどうぞよろしくお願いします。

2020年のまとめ

いろんな予定外のことが起こったけれど、なんとか生き延びられた2020年。

なかなか会えない状況が続くので、かわりにここでこの1年の近況報告をします。

主な出来事

23区から引っ越した

コロナの感染拡大防止のために、会社では日本でもいち早く2月中旬から在宅勤務が始まった。

そのままずっと在宅勤務が続いて、7月からは在宅勤務が恒久化されることになった。

これによって、会社の近くに住む必要性は低くなったので、感染症が落ち着いてきた夏ごろにエイヤと23区を離れて、少し広めにお家に引っ越した。

30㎡を少し超えるくらいだけれど、やっぱり広めの部屋って良い。

ICL手術をした

引越が落ち着いた秋ごろに、ずっと前からやりたかったICL(視力矯正)手術をした。

これで、両目の視力が0.1前後だったのが、1.5くらいになった。

何もしなくても目が見える恩恵はけっこう大きい。

マスクでメガネが曇ることもないし、鼻にメガネの跡がつくこともないし、温泉で効能が読めないこともないし、1Dayコンタクトを買うお金もかからない。

いろんなストレスから解放されて、生きるのがいくらか楽になった。

書いたもの

会社のブログとQiitaにそれぞれ記事を書いた。

AndroidアプリのKotlin化をやり切るための腕力 - 会社ブログ
AndroidチームのPullRequestを小さくする開発方針について - 会社ブログ
Androidで使用するMockライブラリをmockito-kotlinに移行しました - 会社ブログ
RxBinding4でよく使うメソッドと注意点 - Qiita
コミットメッセージにブランチ名を自動入力する - Qiita

特に「Kotlin化をやり切る」記事は、思ったよりも良い反応があって嬉しかった。今年はKotlin化に多くの時間を割いた1年だったので、その知見が共有できていれば嬉しい。

Android関連の記事はまだまだ少ないので、来年はもっと雑にQiitaにメモを残していきたいと思う。

あと、アドベントカレンダーに3年連続で参加できていてえらい。

2020年の目標の達成度

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

hiraike32.hatenablog.com

技術力を高めること

深い部分までの理解にはなかなか至らず、ひたすら手を動かして課題を倒していく1年だった。もう少しドキュメントを読む時間が取れればいいんだけどな。

新しいメンバーのサポートや、チームの方針決めなどができたのは良かった。あとはもう少しチームの勉強会を充実させていきたい。

技術広報については、そこそこ会社ブログに記事が書けたし、求人も開始できたので良かった。コードも少しずつモダンな感じになってきたので、新しく入られる方が困惑することも減ったかなと思う。

コロナによって生活が変わる中でも、変わらずにチームに貢献できた1年だった。

知見を貯めること

この1年で読んだ本は以下の通り。

エンジニアリングに関する本

  • 『エンジニアリング組織論への招待』広木 大地
  • 『エンジニアのためのマネジメントキャリアパス』カミラ・フォーニアー
  • 『レガシーコードからの脱却』デイビット・スコット・バーンスタイン
  • 『SOFT SKILLS』ジョン・ソンメズ

主な実用書

  • 『SIMPLE RULES』ドナルド・サル
  • 『Think Clearly』ロルフ・ドベリ
  • 『サピエンス全史(下)』ユヴァル・ノア・ハラリ
  • 『SKIN IN THE GAME』ナシーブ・タレブ
  • 『1兆ドルコーチ』エリック・シミュット
  • スタンフォードのストレスを力に変える教科書』ケリー・マクゴニガル
  • 『ディズニーCEOが実践する10の原則』ロバート・アイガー
  • 『ホモ・デウス(上)』ユヴァル・ノア・ハラリ

主な小説

毎月約3冊、幅広くいろんな本を読めたと思う。数年後、また必要になったときに読み返したい。

十二国記』は全部で15冊の小説があるけれど、一気に読んでしまうくらい面白かったのでおすすめ。

健康に過ごすこと

今年は特に健康が大事だった。

在宅勤務によって身体的な健康は維持することができたけれど、精神的な健康を害することがあった。先の見えない不安は精神を蝕む。

とはいえ、最近はスポーツジムに通い始めたり、人と適度にコミュニケーションを取れるようになったことで安定してきた。

来年もまたいろいろあると思うけれど、身体的な健康に気をつけつつ、精神的にも健康でいられるようにしたい。

今年は生きてこれただけでえらい!

まとめ

イレギュラーが多かった1年でしたが、なんとかやってこられました。私は元気です。

2021年もよろしくお願いします、良いお年を。

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をなるべく盛り上げることでレビューを活発にして、より強いチームを実現していきたい。


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

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