KyashのKMMにおけるテストのこれまでとこれから
はじめに
これは Kyash Advent Calendar 2022 の12日目の記事です、こんにちは あるいは こんばんは。
10月にAndroidエンジニアとしてKyashに入社し2ヶ月が立ちました、@_rmakiyamaです。楽しく開発しています!
Kyashのモバイルアプリ開発ではKMM (Kotlin Multiplatform Mobile) を採用しています。Kyashの場合、ロジックの共通化と各OSがUIを最適化しUXを最大化することを方針とし、UI以外はすべてKMMで共通化する選択をとっています。
本記事では、KMMにおけるテストについて、「実装当時と前提である課題が変わったことで、方針を変えていこうとしている」という話をします。
これまで
まずはこれまでのKMMにおけるテストの方針について簡単に紹介します。
アーキテクチャ外観
- 各OSのUI層はSwiftUI/Jetpack Composeを採用
- UIからはStateHolderとしてKMMで実装するMVIベースのReactorを利用
より詳しい背景などは Kyash Tech Talk #3 で発表されたMobileアプリのアーキテクチャ設計法をご覧ください。
テストの方針
おおきく下記の観点からReactorからApiClient層までの統合テストを行う選択をしていました。
- 各OSでロジックが異なったことによるインシデントを避けたい
- multi-thread問題を含むKotlin/Native起因のクラッシュを避けたい
統合テストでは、HttpClientにおけるレスポンスのみをMockする方法を取っています。KyashではHttpClientにKtorを採用しているため、Ktor ClientのMockEngine
を活用しています。
これにより、expect/actualでの各プラットフォームにおけるコードの差異がある場合もワンソースでテストを行うことができ、Kotlin/Native起因のクラッシュにも気づきやすい状態を実現しています。
くわしい説明は割愛しますが、Kyashでは統合テストを実装しやすくするためのヘルパーメソッドを用意し、面倒なセットアップとレスポンスのMockを容易に書ける仕組みを整え、下記のように手軽に統合テストを記述することができます。
class HogeReactorTest { @Test fun executeAction_hoge_then_piyp() = reactorSuspendTest( reactorFactory = ::HogeReactorFactory, // 必要なAPIレスポンスのMockを指定 responses = { every { "/testing/api/path" } returns SUCCESS_RESPONSE_JSON } ) { reactor -> // implement your testing } }
課題の変化
これまでの課題のひとつであるmulti-thread問題はNew memory managementに移行することで解決しました。さらに、expect/actualでの各プラットフォームの実装差異の課題について見たときに、expect/actualで実装された処理は少なく、課題感としては小さくなっていると判断できそうでした。
また、これまでの方針はうまく機能していましたが、KMM化が進むにつれて下記のような新たな課題も生まれてきました。
- data層でのキャッシュの仕組みを導入したことでテストが複雑化する
- APIのレスポンスが暗号化されていることがありレスポンスのMockコストが高い
これから
課題が変化すれば、解決策も変化していきます。
Kyashでも改めてテストの方針をチームで考え直しました。これまでの課題と新たな課題をもとに、下記の方針とすることにしました。
- Reactorのユニットテストを必須とする
- UseCase層からMockする
- expect/actualでプラットフォーム間に差異のある実装は別途テストをする
- 必要に応じてこれまでの統合テストも行っていく
- 既存の仕組みを活かせる
実装としては、愚直に依存するクラスを抽象化し、具象に依存しない作りにすることでMockに置き換えられるようにしています。
Reactorの場合はUseCaseに依存するため、UseCaseをインタフェースで実装し、テストのときはMockに差し替えるようにしています。(※ 擬似コード)
interface GetPiyoUseCase { suspend operator fun invoke(): Piyo } class GetPiyo(...) : GetPiyoUseCase { override suspend operator fun invoke(): Piyo { return ... } } class GetPiyoMock : GetPiyoUseCase { lateinit var mock: () -> Piyo override suspend fun invoke(): Piyo = mock() }
これを使い、Reactorのテストは下記のようにシンプルなユニットテストとして実装します。HasTestRules
についてはKMMのテストのtips / KMM testing tipsを参考にさせていただいています。
class HogeReactorTest : HasTestRules { // BeforeTest/AfterTestを隠蔽 override val testRules: TestRules = TestRules(MainDispatcherRule()) // 依存するUseCase群 private lateinit var getPiyo: GetPiyoUseCase private fun createReactor(): HogeReactor { return HogeReactor(getPiyo = getPiyo) } @BeforeTest fun setup() { // default mocks getPiyo = GetPiyoMock().apply { mock = { Piyo.mock() } } } @Test fun executeAction_hoge_then_piyp() = runTest { // override mock instance getPiyo = GetPiyoMock().apply { mock = { Piyo.mock2() } } val reactor = createReactor() // implement yout testing } }
この方針にすることで、下記の効果が得られることを期待しています。
- Reactor単体のテストに集中できる
- data層のキャッシュの実装に引っ張られること無くテスト可能
- Reactorが抽象に依存するようになりテスタブルな実装になる
- 一般に言われるテストピラミッドに沿ってテストが増える
もちろん統合テストが悪いということではありません。テストの範囲を意識してどのようなテストをするかについて、チームで改めて認識を合わせる良い機会になりました。
さらにこれから
あくまでも新たな方針は、現時点での方針に過ぎません。すでにKyashでは下記のようなトピックも上がっています。
- モックのクラスの実装/管理が大変になる未来が見えるのでライブラリも検討できそう
- Kotlin/Nativeの問題が少ないなか
iosTest
を常に回す必要はないのではないか
もっとよくできる部分は引き続きブラッシュアップしていくぞ!という気持ちで引き続きチームで取り組んでいく予定です。
おわりに
アーキテクチャは一度決めて終わりではなく、イテレーティブに改善していく必要のあるものです。今回のように「"なぜ"その決定を下したかが明らかである」ことは、その"なぜ"が変わったタイミングで次の改善を推進しやすくすることにつながります。
まだKMMもベータになったばかりです。KMMやそれを取り巻くエコシステムもどんどん進化していくことでしょう。我々のプロダクトも、KyashのValueである"動いて風を知る"にもあるように、イテレーティブにどんどん進化させていきます!
そんなKyashではAndroidチームをはじめ、様々な職種で仲間を募集しております。一緒にKyashを育てていきましょう!
Kyashをもっと知りたい、すでに応募したい!という方々はこちらから!
セルフワーキングアグリーメントを育てたい
こちらのPodcastを聴いたことがきっかけで、セルフワーキングアグリーメントについて考えてみた。
ワーキングアグリーメントの話以外にも、非常におもしろい話なのでぜひ聴いてみて欲しい。
anchor.fm
ワーキングアグリーメントについての説明には割愛するが、セルフワーキングアグリーメントはざっくりと「仕事をする上で自分が意識したいこと、大事にしたいこと」のようなニュアンスとして自分は捉えている。
意味合いの正確さはさておき、「仕事をする上で自分が意識したいこと、大事にしたいこと」を整理して言語化しておくことは自分にあっていそう。意識しようとしても忘れてしまっていたり、忙しさやその時の感情によっておろそかにしてしまうことがある。
頭にシュッと浮かんだ段階で走り書きしてみたものだとこんな感じになった。
- たのしく開発をしよう
- 原点を忘れない。モノづくりは楽しい。
- 笑顔でいよう
- 笑顔はいいことの序章です。
- 素直でいよう
- 自分自身に正直であろう。
- 常にあいての新しい側面を見つけよう
- 決めつけると新しい側面を見せてもらえない
- 自分の停滞も始まる
- ルーズボールは全力で拾いに行こう
- 人生にアウトオブバウンズはないよ
- だれに、なにを、どのように、を意識する
- コミュニケーションも、設計も、なんでも
- 分からないこと、知らないことは、積極的に聞こう
- お互いの成長機会につながる
- 適度な自信と充分な謙虚さを持とう
- どちらも大事
- 期待値のすり合わせをしよう
- もやもや・不満はここが原因のことが多い
- 良いループが回ることを意識しよう
- やっておわりではない、フィードバックを得よう
- 健康第一
- 無理しない
- 最後は人柄
- なにはともあれ自分の思う良い人たれ
言葉として整ってなかったり粒度がバラバラだったりとまだまだ稚拙だけど、シュッと浮かんだものはそれなりに自分の中で意識していることでもあると思うので大事にしたいと思ったし、育てていきたいなと思う。いつか振り返られるように、種の状態として残しておこうついでにブログにしてみた。
最後に、元ネタがあるものを簡単にいくつか紹介したい。
笑顔でいよう
僕はMr.Childrenが大好き。これはPADDLEという曲の歌詞が好きでいつも意識している。 ちなみにブログのタイトルもこの歌詞から取っていたりする。いい曲。
常にあいての新しい側面を見つけよう
これは僕のバイブル的な小説、金城一紀さん作品の『映画篇』という小説から参考にしている。 この小説の中のセリフで、以下のようなものがある。
「まぁ、人であれ映画であれなんであれ、知った気になって接した瞬間に相手は新しい顔を見せてくれなくなるし、君の停滞も始まるもんだよ。(中略)」
出典: 金城一紀『映画篇』
これがめちゃくちゃ好きで、人生レベルで意識していることでもあるが、仕事であれ組織であれ技術であれ大事だなと思っている。
ルーズボールは全力で拾いに行こう
これは完全に部活でバスケをやっていた影響である。ルーズボールを拾わないとそれはそれは怒られるのである。
仕事では、誰がボールを持っているかわからない状態のものが意外と結構あったりする。仕事もバスケも、自分ができないことをできるメンバーがたくさんいる。積極的に拾ってシュートを打つもよし、パスをするもよし、試合を前にどんどん進めていくスタンスを常に持っていたいと思う。
最後は人柄
これはなにかのブログで見たワードなんだけど、今となっては見つけられなくなってしまった… 1回この言葉を見つけてから、すごく自分の中に残っていて、今では座右の銘を書くとき言うときはこれを言うようになっている。捉え方によってはあまり良くない印象を与えるかもしれないけど、自分の中ではかなりしっくり来ている。ここももっと言語化をしていきたい。
おわりに
みんなも大なり小なりセルフワーキングアグリーメントにあたる意識している、あるいは意識したいことがあるかもしれない。 ぜひとも聞かせて欲しいし、良いものは積極的に取り入れたい✌🏻
ポジティブでありたい話
とくにこれといったきっかけはないけど、過去に妻と話したPodcastを聞き直してみた。
ストレングスファインダーの1位が「ポジティブ」だった僕が、ポジティブについてあーだこーだ話しているんだけど、自分で話しているので当然といえば当然だが、めちゃめちゃ頷きながら聞いた。
ここで話している「仕事でもスポーツでも、楽しんでいるほうが実力が出る」という持論(自分に当てはまるだけで万人がそうとは思っていない)は、いろんなタイミングで話すことがあって、それだけ自分の中では、無意識に様々なことを楽しむ方向に倒しているんだなと改めて感じる。これは自覚していることでもあるので、意識的にやっていることでもあって、大抵のSNSのプロフィールには「楽しく開発しています」なんて書いていたりする。
少し違う角度で「楽しい」について考えていることを言語化すると、自分の中での「楽しい」は、「楽をする」や「好きなことだけをする」といったこととは少し違いそう。
自分の中の「楽しい」は、スラムダンクの湘北vs豊玉で、南が言う「勝ったほうが100倍楽しいもんな」に近いんだと思う。すべてが勝ち負けではなくって、何かを達成するために、成果が出るために、誰かを喜ばせるために、そういう類いのことのために、ときには大変なことをするというのもまた、良いものじゃあないかとボカァ思うわけである。
「ポジティブは意思」の話は、自分でしておきながら忘れていたが、やはり良い話だった。
ここで言う「ポジティブ」は「なにごとも前向きに考えよう」といったことではなく、悲観的に捉えなくても良いよねくらいのニュアンスなんだけど、うまく言語化ができていない。言語化したい〜。語弊が生まれそうではあるがやはり「楽観的」のほうに近いのかもしれない。
小さいところからで良い、意識して意思を持ちたいものである。
Podcast内でも自分で言っているが、意識的にポジティブであろうとするのは、案外きついものでもあったりする。それでも僕は、ポジティブな自分でありたいし、周りもポジティブになればなお良いと思う。正のループを回していこうな。
よく話に頷いたり、よく笑ったり、言葉に出して褒めたり、そんなんでよい。ポジティブは細部に宿る。(言いたいだけ)
流川の「今日もあれやりましょーよ、オレたちはってやつ」ってセリフを思い出す。ポジティブなチームは強い。
「ポジティブは意思」の話をしようと思ったキッカケの投稿はこちら。↓
いやはや、スラムダンクの映画が楽しみで仕方ない。
書くことに対するハードルを下げる話
呼吸するようにブログを書く自分なりのスタイルを確立するぞ2022
— まきやま3.1 (@_rmakiyama) 2022年6月15日
スタイルは確立できてないけどラフに書く練習をする。スマホでポチポチ書いてるので今風(?)である。
15分以上時間をかけないぞ、と決めたのでトライアタックで挑む。
なんでブログを書くハードルが自分の中で高いんだろうと考えてみると、真っ先に「書くネタがないな…」という理由が浮かんでくる。たぶんこれは建前で、本音は「誰かが読みたいであろう内容をカッコつけて書けるほど煮詰まったネタがないな」なんだなと思う。恥ずかしながら…。
ここを取っ払うとガツンとハードルは下がりそう。
もともと書き物をすると、文字数が多くなりがちなタイプなので、書くことはどちらかと言えばと言わずに好きなタイプだと思う。ただ、インターネット上でのみ自分を知っている人からすると、書いた内容によって少なからず自分の人柄などを脳内で補完されると考えると、やはりカッコつけたくなるものである。
大義名分があれば意外とこういうのを乗り越えられるタイプだと自己分析しているので、自分ハックは可能そう。自分ハック大事だよね。
今日、たまたま仕事の実装で同僚に壁打ちを頼んで話してると、話しながら自分で自己解決する部分があり、話すのって大事だなと再認識するとともに、「思考するには脳みそは狭すぎるな?」という気持ちになった。そしてこの「思考するには脳みそは狭すぎる」という考え、めっちゃ自分ハックとしては刺さるのであった。
きっとここの感覚は人それぞれな気がするが、ブログを壁打ち相手のように使い、脳内の思考を整理するのをやるのは合ってそう。やっていくぞ!
カッコつけたくなる、というのだけは、頭をきっとよぎるけど、整理したいことはたくさんあるので気にせずにやっていきたい。もちろんあわよくば、なにかしらフィードバックが返ってくると最高そうだがそれは考えないようにする。
書いてから15分は過ぎててスタートからアレだがこういうのも気にしないのである。書いてるからエライのである。
最後に言語化したい脳内で溜まってる話を置いておき、次回以降に繋げる。
- scrapboxが自分の脳内整理に合ってる話
- 私の中の、やるべきこと、やりたいこと、できること、の捉え方
- チームで価値を出すということの私の感じ方
- モデリングとイラストが似てるって感じた話
- なぜと課題とドキュメント
- だれに、なにを、どのように、は使える
- 雑談レベルで話す新卒に読んで欲しい3冊
実はお風呂で書いていて、のぼせてしまいそうなので、以上、はてなブログのスマホアプリの書き心地が良くてビックリしている私からでした。
ツイートで振り返る2021年
まめに振り返りを記録するタイプではないのでツイートを見返しながらザーッと1年を振り返る。 もうちょっとまとめたのは気が向いたらきっとたぶん別途書くぞ📝
1月
今年の目標は、思考の解像度を上げるです。とても解像度の低い目標です。今年で30歳になります。がんばります!
— まきやま (@_rmakiyama) 2021年1月2日
解像度が低かったので達成度は謎である。反省。来年は解像度の高い目標をたてるぞ!
突然だけど30歳までにバンジージャンプを経験したいなと思ったので突然だけどバンジージャンプしにいきたい
— まきやま (@_rmakiyama) 2021年1月2日
忘れてたし達成してない、これ本当にしたいのでメモ 📝
今週はテストをたくさん書いて自己肯定感を高めたとチームに共有してさらに自己肯定感を高めたので2021元気にやっていけそう!
— まきやま (@_rmakiyama) 2021年1月8日
今年は1年を通してテストに入門した1年だった、年始からやっとるな?
あまり時間とれないけど幅を広げるためにちょっと副業してみたいというわがままを思ってる
— まきやま (@_rmakiyama) 2021年1月12日
夏に伏線を回収した 👍🏻
Dagger Hiltがどういうコードを生成してどうやってDIをしているか気になったので基本の部分を紐解いてみました🕵️🏻
— まきやま (@_rmakiyama) 2021年1月23日
Hilt完全に理解した!https://t.co/RVZvvAdYH7
Hiltの記事書いた。Daggerと仲良くなった。
2月
Radiotalkではそれぞれが得意を活かしつつサービスを前に進むることを全部やる気概でやっています!🙌🏻 https://t.co/KRq5TIton0
— まきやま (@_rmakiyama) 2021年2月5日
DroidKaigiでも同じようなこと言ったし、思想としてずっと変わってないな。
🚀 / たった今、@Kickstarter_JP で Moon Adventure, In a Grove and Dokojong | 月面探険・藪の中・ドコジャン のバッカーになりました https://t.co/MV5cDHVl1y
— まきやま (@_rmakiyama) 2021年2月22日
オインクが好きですぐバッカーになったやつ。どれもよかた!
3月
今日のMDG勉強会ではMaterial FoundationのEnvironmentの項について話したんですが、Elevationを使って高さ・奥行きを表現していることについてデザイナーさんが、影で平面に立体を生む手法としては美術と同じで全てに通ずる感じがあると言っていて、すごくいい話が聞けて最高です!
— まきやま (@_rmakiyama) 2021年3月11日
グループ会社の人も巻き込んでMDG勉強会を始めだしたのがこのころ。たくさん話聞けて言い出しっぺの自分が1番楽しんだ気がする 😂
スーパーエンジニアですこんにちは😂
— まきやま (@_rmakiyama) 2021年3月18日
同僚が似顔絵アイコンにしたいと言っていたのでダイレクトなソリューションを提供しました!!w今年から始めた趣味が活きて嬉しい!!🥳 https://t.co/VuMu71LX53
2月3月あたりはiPadでイラスト(写真のトレースメイン)にハマってて楽しかったのでまた再開したい!
4月
ストレングスファインダーでの資質トップが"ポジティブ"だったので前向きな気持ちになった!!!やるぞ!!!
— まきやま (@_rmakiyama) 2021年4月2日
ストレングスファインダーやったのはなんかよかった!
イスだけ持って川辺でNo密でビールで優勝させてもらっているわね…チェアリング最高💃🏻 pic.twitter.com/nUYFE4AP7e
— まきやま (@_rmakiyama) 2021年4月25日
チェアリングに入門した、このビールうまかった 🍺
今日の発表資料です!! #ラジテクhttps://t.co/Cld76Yt5GE
— まきやま (@_rmakiyama) 2021年4月28日
今年の年末層大掃除でだいぶこのモジュール構成に近づいてきた。
5月
30歳になりました!🥳おめでとうございます!ありがとうございます!ネクストステージ感あるけど変わらず楽しくやっていくぞ!🦸🏻
— まきやま (@_rmakiyama) 2021年5月8日
🎉
昨日アプデした個人アプリ、ライブラリ使わずグラフを作ってみたい駆動な機能を追加しました!99%できてたけど3ヶ月ほど寝かせてしまってたのでえいやあでリリース😂Canvas周りと戯れられていい感じだった! https://t.co/DuSQ2TjplO
— まきやま (@_rmakiyama) 2021年5月9日
個人アプリのアプデ、ここで止まっているので来年は手を加えたい気持ちがある。
ニコニコしてます!私です!🥳
— まきやま (@_rmakiyama) 2021年5月21日
Radiotalk Androidエンジニアの牧山の「More Talk!」https://t.co/6zTUWeQyAs
わたしです!たのしそう。
6月
だいたい1年たったけど自分の資料に助けられたので作っててよかった✌🏻https://t.co/PkyXXBco5G
— まきやま (@_rmakiyama) 2021年6月1日
定期的に自分で見返してるのでお気に入り。Compose時代には必要ないんだけれどもw
長らく積読してたけどやっと読破、とってもよかった!
— まきやま (@_rmakiyama) 2021年6月2日
ストーリーマッピングをはじめよう https://t.co/xii5cI5ISs
この本よかったけど振り返り何も書いてないな〜もったいない!
わくわくわくわく😊 / たった今、@Kickstarter_JP で Oink Games + のバッカーになりました https://t.co/O6rMhWeoIz
— まきやま (@_rmakiyama) 2021年6月4日
すぐバッカーになったやつパート2。最近発売されましたね!最高です!!
Jetpack ComposeでTODOアプリを作ってみたけど知らないことだらけの扉が開いてしまった楽しい🦭やっぱりとりあえず手を動かしてみるのは自分にあってるな、いい書き方どんどん模索していきたい👨🏻💻https://t.co/IGSVVoWzP8
— まきやま (@_rmakiyama) 2021年6月5日
Composeの雰囲気をつかめたやつ。やっぱり手を動かすのが好きみたい。
本日の資料です! #potatotipshttps://t.co/mNB7Uj9h2q
— まきやま (@_rmakiyama) 2021年6月23日
ComposeのCanvasも楽しかった!
7月
👏🏻👏🏻 "私自身は、組織を良くするのもあくまでより大きな価値をより早く提供するためというスタンスを持っていますが、同時に健全なプロダクトは健全な組織からしか生まれないという信念も持っています。" https://t.co/D5SkCRTPvx
— まきやま (@_rmakiyama) 2021年7月26日
いい記事そう、また見返そう 📝
DroidKaigiのCfS1つ出したので寝れる…あした出せたらもうひとつ書いてみよ。意外とない気がする、Androidエンジニア1人での開発的なサムシンを…中身は未定…( ˘ω˘)スヤァ
— まきやま (@_rmakiyama) 2021年7月27日
まさか翌日に出したCfSが通るとはこのときの私は知らなかったのであった 👏🏻
小さい組織で自律的な振る舞いが求められる場合においても大事そうだし自然と鍛えられる気がしている。言語化されるとより納得感があって良い👏🏻
— まきやま (@_rmakiyama) 2021年7月28日
抽象的な期待を自分ですり合わせるスキル - Konifar's ZATSU https://t.co/95Hgeo9fjj
今でも様々なところで大事だなと感じるので良い話!
8月
脳内を言語化していきたいねということで妻氏とそんなラジオを始めました!🧠📻#Radiotalk #1LDKラジオ https://t.co/eVdArJwPFf
— まきやま (@_rmakiyama) 2021年8月16日
何回かとったけど更新が止まっちゃったけど楽しかったのでふとしたときにまた話すのも良さそうだな〜
#DroidKaigi 初採択、!🥳
— まきやま (@_rmakiyama) 2021年8月18日
やっていきます!!よろしくお願いします!!!意外とある、組織にAndroidエンジニアが1人という状況での学習方法、そして特有の不安とどう向き合うかについて話します!楽しくエンジニアリングしよう!🙌🏻 pic.twitter.com/7NRUb5pMux
初採択!泣いた(泣いてない) 👏🏻めちゃ嬉しかった!
部活はバスケットボールをやっててルーズボールは全力で取りに行けと教え込まれて育ったのでプロダクト開発も同じだな〜って思ってる。取ったらドリブルしたりパスしたりシュートしたりやり方はたくさんあるね。楽しいね。
— まきやま (@_rmakiyama) 2021年8月31日
わかる。(自分で書いているのでそれはそう)
9月
マネージャーではないけど、組織としての出力を最大化するために自分が今どう動くべきかは最近とても考えるが答えはない。問題解決の化身になりたい🤡
— まきやま (@_rmakiyama) 2021年9月7日
エンジニアリングマネージャーは「問題解決ブルドーザー」の夢を見るのか|Jumbo #note #私の仕事 https://t.co/NDXmeIU44n
永遠に考えているが難しいけど楽しい部分でもある。
進捗です🍺 pic.twitter.com/W6mSajDzmD
— まきやま (@_rmakiyama) 2021年9月21日
キャンプデビューした!!!!来年はたくさんいきたい!!!
10月
購入しました! 設計を知る、パターンを知る、導入する「iOSアプリ設計パターン入門」が一般販売開始! https://t.co/9w02Brdty2 #iOS_architecture
— まきやま (@_rmakiyama) 2021年10月12日
クライアント(iOS/Android)リードのポジションになったのでiOSをキャッチアップし始めたころ。この本とても良かった。
今日はグループ会社の総会でBEST Creator Awardを頂きました🙏🏻!フォロワーシップの高いチームだからこその賞だと思っております!これからもチームみんなでRadiotalkをどんどん前に進めていきます!!!🚀 pic.twitter.com/8PkSjTpMfk
— まきやま (@_rmakiyama) 2021年10月18日
グループ会社で表彰してもらった 🏆
セッション・オフィスアワーまでありがとうございました!!!自分にとっても非常に良い経験でした!!!少しでも不安と向き合うきっかけになったり楽しく働く手助けになれていれば幸いです!!! #DroidKaigihttps://t.co/oL2y15zWBb
— まきやま (@_rmakiyama) 2021年10月19日
最高の体験でした!DroidKaigiありがとう!!
11月
今日はiOSのテストを書く実績を解除したので褒めて下さい!えらい!すごい!!
— まきやま (@_rmakiyama) 2021年11月18日
えらい 👏🏻
高い山を作るためには裾野を広げるのも大事だよねって自分で言って自分でしっくりきてるので良い山脈を築いていきたい🏔🏔
— まきやま (@_rmakiyama) 2021年11月19日
12月
iOSのテストのためにMockoloを導入したので来世は宝くじが当たるぞ!
— まきやま (@_rmakiyama) 2021年12月21日
積極的に自分を褒め始めた 👏🏻
ライブラリ管理をVersion Catalogへの移行が完了したので優勝です!ありがとうございます!🏆
— まきやま (@_rmakiyama) 2021年12月22日
優勝しがち。
「Androidのテストをはじめよう🧪」と「iOSのテストをはじめよう🧪」の記事をKibelaに簡単にまとめたので一富士二鷹三茄子確定🗻🦅🍆
— まきやま (@_rmakiyama) 2021年12月28日
来年も安泰です!
まとめ
Twitter検索でfrom:_rmakiyama until:2021-4-1
みたいにしてザッと振り返ってみた。
良いなと思ったものは積極的にツイートしたりしているので、それを改めて思い出せたのも良かった 👍🏻
いろんな変化もありながら相変わらず楽しくやっていけていて、今年もハッピーでした!来年はもっと楽しくなるよねハム太郎!!!