為さねば成らぬ

retia.verno@gmail.com

マルチモジュール勉強会に出て学んだこと

少し遅くなったが。マルチモジュール勉強会にでたので個人的に参考になったポイント。

詳細設計レビューで新規開発時にルールを徹底させる

普段詳細設計レビューすることがない。というのもそこのレビューのコストを重く見てしまっているのだろうと思う。 レビューしないことによる手戻りも考えられるため、1つ検討しても良いかも知れない。 選択肢として持っておけば、場合に応じて使えるようになる。

クイズ

クイズでこういうケースでモジュールするか?みたいなのがあり、発表者の方はモジュール化導入したほうがよいのでは、と言ったケースでも参加者からは割とどれも導入しないなーとなっていた。 これは発表者・参加者の実際の経験からくるマルチモジュールの評価の違いかな、と感じた。 発表者の方は既にマルチモジュール化しているのでメリットのほうを高く評価していて、参加者からは(おそらく)マルチモジュールしていないのでコストの部分を高く評価しているのかも。

僕もよっぽどじゃないとマルチモジュール化はしないかな・・・(今は進めてるけど)

legacyモジュールの解体作業を進めるよりも新しい機能を別モジュールで作りやすくするという部分に注力

僕も解体作業を進めているところだが、心の底でlegacyモジュールを完全に解体しなきゃいけないんか?という気にはなっていたのでこう言われて心が楽になった。 リファクタリングでやらなきゃいけないものって結構しかかりの物が多く(Kotlin化とかCoroutine化とか) 、同時並行で進んでるものが溜まっていく印象で、なるべく早くやりきりたい気持ちもある。

やりきることにより、古い実装がまるっとコード・アプリ内・頭の中から削除出来る。 ただそこまですることによるメリットをあまり感じられないとあんかなk進められない。

例えば殆ど触っていないようなクラスをKotlin化したからといって、うれしくなるわけではない。

モジュール構成や思想をドキュメントにしておく

ドキュメントを書く時になぜそうなのか?は残すべきところだなーと感じる。コードのコメントに何残すか?と似ている。 結局やったことはそのまま残るから、意図を残しとこうねってやつ。

デモアプリ

良い。その画面に至るまでの色々をすっとばせる。この色々には画面もあるが、ログインまでのフローも含まれるのでそこをすっとばせると非常にありがたい。更にいうとUIテストやるとき。

クックパッド Android アプリのマルチモジュール化とデモアプリの活用 - Speaker Deck デモアプリのStub Injection について、発表時は理解できてなかったけど後から理解した。

BindsOptionalsOfをつけた宣言にはOptional がInjectできるようになる。リリースビルドだとこれが空、デバッグだとStubが渡るようになるので、それをつかって切り替えるということ。 BindsOptionalOf

習慣継続の停滞期

年始以来しばらく順調に続いていた習慣だが、今週に入って途絶えてきている。

フィットボクシング

一番続けていたのがこれだった。が、先週ジムで筋肉痛がひどく、フィットボクシングができない。 「朝着替える」という最小の目標にしていたが割と当たり前過ぎてやる意味もなぁ・・・と考えてしまっていた。 「着替えてFB起動」くらいがいいのかも。

ブログ書く系

実は毎日投稿、と言わず毎日なにがしか書く(下書きでも) やっていたがしばらくあいてしまった。 仕事が少し忙しくなってしまったのがある。 こちらも雌伏の時と考え、「最低のハードルを超える」ことに集中するほうがよさそう。 余裕のできた時にまた増やせばいい。とはいえしばらくは確定申告したりで余裕がなさそうだが・・・

悪い習慣をやめる

年末年始で自分の習慣づくりに取り組んでいたが、良い習慣を続けるより悪い習慣をなくす方がずっと難しい気がする。

以前知り合いになにかやっている習慣はある?と聞いたことがあった。 悪い習慣の答えが多かったので、そちらを直す方が需要がありそうだと感じた。

悪い習慣をやめるためには、良い習慣を続けるためのコツの逆をやればよい。

つまり

  • 悪い習慣のきっかけを環境から取り除く
  • 悪い習慣を避けることで得られる利益を強調する
  • 悪い習慣にたどり着くまでのステップを増やす
  • 誰かに行動を見張ってもらう

あたり。

難しいのは、悪い習慣はふいにやってしまうものなので、いくら意識していてもそのタイミングで忘れているor意志が弱いと簡単にやってしまう点。

個人的に具体的に無くしたいのがネットサーフィン。対象にするサイトは結構色々あるが、まぁネットには誘惑が多い。

twitterはパスワードをわからなくする(必要あれば再発行)することでいい感じに離れることができたが、他は難しい。

難しい要因として、

  • twitterのようにログインが必要な場合はパスワードをわからなくすればよいが、ログインが必要ない場合はurl叩けば見えてしまうのでダメ。
  • さらにurl叩けば見える、だと色々なブラウザから開けてしまう。例えばPCとスマホ、それぞれのユーザーごと。chrome拡張機能でサイトブロッカーとかもあるけどブラウザのユーザーを使い分けてるとすべてにブロッカー入れないと行けないのでダルい。

基本的に無くしたいが、時々は見てもよいと思うのだが、そうするとブロックの設定を入れたり消したりしなければいけず、更に難しい。

準備をするという習慣

verno3632.hatenablog.com

とも関連して。

習慣にするぞ!といっても結構いとも簡単に忘れがちである。 例えば朝起きたら運動する、と決めていても、朝は頭が働かない・バタバタして忘れてしまったりする。

また悪い習慣を断つことを考えるときも、よく引っかかりがちである。 悪い習慣の経ち方には、それをしそうになったときに別の行動をとる、という習慣を立てるのがよいが、しそうになるときは大概突発的なので、反射的に悪い習慣をやってしまうことが多い。

これらに対して、準備するという習慣をいれておく、のがよいなーと思っている。

朝起きたら運動するという習慣のために、夜寝る前に運動着を枕元に置く、という習慣を作っておく。 あるいは仕事初めにブログを書くという習慣のために、仕事終わりにブログのエディタを開いておく、という習慣を作っておく。

タバコを吸いたくなったらガムを噛むという習慣のために、家を出る時にポケットにガムを入れるという習慣を作っておく。

もちろん準備の習慣も忘れると思うが、準備は割といつでもできるので自分の好きに設定しやすいし、習慣の終わりに次の習慣の準備をするようにしておくのでも自動でやることになりやすい。

習慣の手順書作成・自動化

習慣を明確にする

習慣にするとき、やることを明確にするのは非常に大事である。

研究者が「実行意図」と呼ぶもので、いつ、どこで行うか、予め立てておく計画である。

...

多くの研究により、実行意図は目標達成に効果的だとわかっている。

ジェームズ・クリアー式福利で伸びる1つの習慣 第5章

いつどこで何をやるのかを明確に決める。

タスクの分割

ここで習慣から離れて仕事術てきなところになるが、大きいタスクは細かく分割せよ、というものがある。 大きなタスクのままだと何をやればわからず 不安 が発生するので、細かく分割し、1つずつこなしていけばよいというものである。

更にいうと、定期的に実行してルーチン化するようなタスクは、誰でも出来るように手順書を書く・自動化するのが効率化につながる。

習慣の手順書・自動化

これを習慣にも繋げられないだろうか。つまり習慣の際の手順書を作ってみる。

例えば 毎日腕立てを50回する のであれば

  • 運動着に着替える
  • 水をコップに入れる
  • 腕立てを1回やる
  • 腕立てを5回やる
  • 腕立てを10回やる
  • 腕立てを50回やる

これにより、やることがより明確になり、目の前のステップをこなすことで自然と大きな習慣を達成できる。

またこの手順が自動で実行できるように工夫する。ここでいう自動化とは、機械やコンピュータが勝手にやるようにする、というよりも 自分の体が自動的に動くようにする ということである。

先程の例だと、運動着や水の準備がすぐできるよう、前日の段階でこれらを目につく場所に置いておく等である。 置いてある運動着やコップを見た瞬間、自分自身のスイッチが勝手に入り、習慣を自動的に行う。

習慣のハードルを下げる

手順書を書いたことで、習慣の一番最初に行うことが見えてくる。 これを最低のハードルに設定し、それを1日1回行えば習慣が達成できたことにする。 運動着に着替えるだけならばどんなに時間がなくても毎日続けられるし、また手順書を作っているので、次の手順まではやろう、とモチベーションも上がりやすい。

ハードルを下げる - 為さねば成らぬ

このあたりがうまく出来るようなアプリ作りたいな〜と考えている。

ハードルを下げる

ハードルを下げる

激短時間でできることを習慣とする。5分でできることとか1分でできること、とかも耳にするが、個人的には 10秒 で良いと思う。

その日の習慣を達成するまでなにか続けなければいけないではなく、本当にやれば終わるもの。

毎日したいことを頭に浮かべて、実際にやることを洗い出してみる。そして一番最初にやることを習慣としてやることにする。

  • 運動をする、という習慣であれば運動着に着替える
  • 勉強する、であればペンを持つ
  • ブログを書く、のであればエディタを開く
  • 部屋の片付け、であれば物を1つ移動する・捨てる

どれくらい効果あるの?

根底にあるのはとにかく やる のを 続ける ということ。

やる気・モチベーションは実際に行動していると自然に出てくるものなので、やる気が出てきた時にしか出来ないようなものは習慣にすべきではない。

やる気が出てこなくても出来るものを習慣にして、それにより弾みがついてやる気が出て、最終的に多くのことができるようになる。

やる のを 続ける ためにも、ハードルを激低に設定するべし。

習慣化に必要なこと: 頭を使わなくする

しばらく習慣化というものについて色々考えてきて、 頭を使わない ことが重要ではないかと思っている。 つまり毎日やることを予め決めておき、決まったタイミングでただやるだけにしておく。

頭を使ったり考えたりすることはコストが高い。まず 考えなければ というだけで億劫になりその行動を無意識に避けようとすることがある。これが めんどくさ とやらなくなってしまう原因だ。 また一日で人間ができる判断の量には制限があり、そのリソースを使い切ってしまうと休んで回復するまで判断ができなくなるという話がある。いざ習慣を行う際に判断が必要となると、そのときのHP次第では習慣達成まで至らなくなってしまう。

また頭を使う必要があるということは習慣達成までの不確定要素が多く、見積もりが行いにくいということである。達成完了までの時間が見えないので 時間なさそう・・・今はやめとこ となってしまいがちだ。 漫然と 〇〇について考える ブログを1本書く のような習慣が続かないのはこれも原因であると思う。

具体的に修正すべき習慣の例を考えてみる。

運動する

やることが曖昧すぎる例。毎日何をどのくらいやるかを考える必要がある。そこであらかじめなにをやるか決めておく。

運動する -> 10分歩く

10分歩くにしても実際に歩く際にはどこを回るか考える必要が出てくる。この際あらかじめ決めておかないと、本当に家の近くを歩いて5分程度で戻ってきてしまう可能性がある。 徒歩で往復10分はかかる公園を目標にして、 どこまで行ってくるかを決定する。

10分歩く -> 公園まで行って返ってくる

やろうと思っても、タイミングによってはできないことがある。例えば仕事まであと20分のタイミングでは、やる時間があるといっても ちょっと忙しいしいいか となってしまう。 余裕がある時間に行えるように、いつやるかを決めておく。

公園まで行って返ってくる -> 朝起きたら公園まで行って返ってくる

イレギュラーの場合を考慮する。例えば雨が降っていたら散歩に行きたくなるだろう。 プランBを用意しておき、どんな状況でも習慣を行えるようにする。

朝起きたら公園まで行って返ってくる -> 朝起きたら公園まで行って返ってくる 。雨が降っていたら家でFitBoxingを10分やる。

ここまでやれたら習慣にできそうである。

例えば朝起きた直後は頭が働いておらず、 この習慣をやる という判断さえできないこともある。 前日の夜の段階でランニングシューズと運動着を起きて一番に目につく場所に置いておくのもよいだろう。 夜寝る前にリビングにシューズと運動着を置く というのを習慣にしておくのもよい。