🎄

今年の振り返り2022 -エンジニア編-

2022/12/20に公開

もう年末まであと少し、というところまでやってきました。
今週末はもうクリスマスですね!🎄

振り返りは大事!!
ということで、今年の主に仕事である「iOS/Androidアプリエンジニア」としての振り返りをしていきます。
プライベートの振り返りは自身のブログでしようと思います。(多分、年末までには...)

今年学んだスキル

Flutter(Dart)

https://flutter.dev/

今年一番頑張ったものではないかと思っています。

自社で開発をしているスマホ向けアプリがありまして、現在Kotlin or Swift → Flutter(Dart)への移行を行っています。もともとは、AndroidはKotlin+Viewベース、iOSはSwift+SwiftUIで開発していました。
今年4月の定例で「もっと新しいことにチャレンジしていきたい!」ということでFlutterへの移行を決め、今日まで活動を続けています。

チームとして移行を決断した理由は以下になります。

  • 他の商用サービスと同様にKotlinとSwiftでアプリを開発していたが、もっと新しいことにチャレンジしたい
    • もともと、この自社アプリ開発プロジェクトは、"Playground" アプリとして新しいことにどんどんチャレンジしていこう!という目的のもと動いているが、チャレンジが足りないのではないか、と感じていた
  • このプロジェクトにかけることができる工数に限りがあり(他の商用サービス開発の合間にやっている)、マルチプラットフォームのフレームワークを採用することで効率よく開発ができるのではないか
  • メインはシンプルなリスト型のアプリで、今話題のFlutterへの移行ができそう

最初にFlutterへの移行を決めた際は戸惑っていましたが、まずは1年かけてリリースするために全体スケジュールを引き、そのために何が必要なのか、どんな勉強をすべきなのか、ということから検討しました。
今ではチーム全体としてFlutterの実装スキルもあがり、先月くらいから本格的に実装を始めています。

今年度中に無事リリースができるといいなぁ...

ちなみに、Flutterを勉強する際によく参考にしているサイトを以下に載せておきます。

  • Flutter - Widget catalog
    • 様々なWidgetがある中で、どんな物があるかをよくここから探しています
  • Zenn - Flutter実践入門
    • この情報量を無料で出しているのがありがたすぎます!! 著者に感謝です🙏

Jetpack Compose

https://developer.android.com/jetpack/compose?hl=ja

Flutterを勉強していたこともあり今は少し停滞気味ですが、Jetpack Composeも勉強をしていました。

SwiftUIと比べると単体のライブラリとして切り出されており、また、 minSDKVersion が21〜(Android 5.0以上)とかなり古くから続いているプロジェクトにも導入しやすいところも良いですね。
おそらく、iOSの方がAndroidよりもユーザー全体がバージョンアップをする比率も高いので、SwiftUI自体もあと何年かすればすんなりと入れられるような状況にはなると思いますが。

そんなJetpack Composeですが、どのように学習するのが良いかなと思っていたところ、Google公式から「Pathways」というオンライン学習ツールが提供されており、それを見ながら進めています。

https://developer.android.com/courses/pathways/compose?hl=ja

Jetpack Composeの触りの部分から丁寧に説明があり、また、未完成のサンプルコードを実際に自身で修正して完成させましょう!という部分もあるため、Jetpack Composeの中身を知らない状態でも安心して始められる内容になっています。

まだ私は上記を途中までしかできていないので、来年はこちらを再開&完遂し、そしていずれは商用サービスにも使っていければ良いなと思っています。

Go

https://go.dev/

ここ数年の私のお気に入り言語の1つです。

言語機能のシンプルさ、コンパイル型でビルドするとすぐにバイナリが生成できる手軽さ、クロスプラットフォーム対応の部分に惹かれ、独学で学び始めました。

他の言語と比べると、言語がシンプルなので学習コストが低く覚えやすいです。また、非同期処理を別スレッドで実行させたい時はgoroutineを使い簡単に実装することができるので、その点もメリットだと思います。

今後も他の言語についても勉強していくと思いますが、Go言語も忘れずに学び続けていきたいと思っています。

Rust

https://www.rust-lang.org/ja

最近話題の言語ですね。
LinuxやAndroidの一部にも採用され始めており、Androidでは早速採用した効果が表れているみたいです。

https://japan.zdnet.com/article/35196972/

https://forest.watch.impress.co.jp/docs/news/1462573.html

スマホアプリ開発者ではありますが、Androidのコア部分に採用されたとあって気になっていたため、先月からチュートリアルを始めてみました。
非公式ではありますが、日本語で翻訳されたバージョンも存在しますので、英語が分からない人にも安心です。

https://doc.rust-jp.rs/book-ja/

ちなみに今の進捗としては「2. 数当てゲームのプログラミング」を完了したところです。来年も引き続き学んでいこうかと思います。

仕事を便利にするために作ったもの

少し時間がかかっていた仕事上の定型業務の解消や、新しいフレームワーク・言語を学ぶためにいくつかアプリを作成しました。
仕事の秘密に関わるため詳細を紹介できない部分もありますが、できる限り紹介したいと思います。

日報作成ツール

会社に報告する際の日報をコマンド1つで生成してくれるGolang製CUIツールです。

toggl track」というサービスを使ってタスクのトラッキングをしておき、それをもとに日報を作成する、という感じです。

https://toggl.com/track/

ただ集計して日報としてまとめるだけでなく、秒以下の精度は要らないので切り捨ててAPIを通して更新し、プロジェクト毎の稼働時間や1日の業務開始〜終了までの稼働時間の集計などを行い、決まったフォーマットにまとめる、というふうにしています。

このツールによって、仕事終わりに日報をSlackのチャンネルに報告する際、「このタスクってどのくらい時間をかけたっけ...」みたいなのを思い出し、また、全部で何時間やったんだ?という計算を手動でやらなくても済むようになり、今でも使い続けています。

朝会議事録作成ツール

朝会の議事録を取る前に、関係しているタスク一覧をフォーマットに従って出力してくれるGolang製CUIツールです。

私が関わっている開発チームでは毎朝、朝会を実施しています。そこでは、タスク管理ツールの「Backlog」を見ながら、昨日やったこと/今日やること/現時点の問題点を確認する、ということをしています。
その際、議事録を取っているんですが、これがまためんどくさい。なにせ、7案件も同時に見ているため、どの案件のどのタスクがどのくらい終わっていて、どんな問題があり、レビューは何が残っているのか、etc... 色々書くことがあります。これにより、朝会の内容をたまに聞き逃すこともあったので、これは自動生成するようにしたほうが楽なんじゃないか、と思って作りました。

ここでは、BacklogのAPIを使って実現しています。

https://developer.nulab.com/ja/docs/backlog/#

その中でも「課題一覧の取得」APIを使い、種別が「処理中」「レビュー中」のものを取得し、それを一覧表示する、という流れになっています。

https://developer.nulab.com/ja/docs/backlog/api/2/get-issue-list/#

出退勤時刻一覧アプリ

Flutter製の私個人の出退勤時間一覧が確認できるスマホアプリです。
Flutterの勉強のために作成してみました。

普段はフルリモートワークで自宅から仕事をしているため、出勤/退勤時はSlackの報告用チャンネルで時間を報告します。
しかし、最終的には全社で使用している出退勤を管理しているサービスに時間を入力しなければなりません。その時に「あれ、この日って何時まで勤務したっけ?」ということが多々あり、出退勤時刻を一覧で確認したいなと思いこのアプリを作ってみました。

work_hisotry

仕組みとしては簡単で、Slack APIを使って報告用チャンネルのメッセージ一覧を取得し、そのメッセージから時刻と出勤 or 退勤したのかの情報を抜き出し、一覧表示します。
一度に取得できるメッセージ数に限りがあるため、取得して一覧表示した後、下から3番目の行までスクロールしたら次のまとまったメッセージを取得するようにしています。こうすることで、無限スクロールでどんどん過去のデータにアクセスしていくことができます。

これも非常に重宝しており、今後はもっと改善して便利にしていきたいな、と思っています。

ハンコApp

入力した名字をハンコの印影として表示するだけのFlutter製スマホアプリです。

上記の「出退勤時刻一覧アプリ」を作っている際、一覧表示ではその日に分断(途中で一度仕事を中断して抜け、また復帰して戻ってくる事ができる制度)しているかどうかをパッと見て分かるよう、「◯+断」を組み合わせて記号のようにする表示を実装しました。

この表示の作り方を社内に共有するため、サンプルアプリを作って例を示そうとした際、「これ、ハンコの印影みたいだな...」とふと思い、勢いだけで作ってしまったアプリですw

hanko_flutter

アプリ内の入力欄に名字を入力すると、真ん中に大きくハンコの印影が表示されます。名字はバランスを考えて4文字までしか入力できないようにしています。
フォントもGoogle fontsから持ってきて、ちょっとそれらしく見えるものを採用しました。

サクッとサンプルアプリを30分で作るつもりが、2時間くらいかけて作ってしまいましたw
でも後悔はしていないっ...!

意外と苦戦したところとして、Flutterでは標準では縦書きに対応していないため、文字列を1文字ずつ分解し、縦に文字を配置していく、という実装をしたところです。
縦書き実装するの大変そうかな、と思いましたが、調べてみたら案外標準のWidgetを少し組み合わせるだけでいけました。

以下のページがとても参考になりましたので、載せておきます。

https://qiita.com/sakusaku3939/items/9433f3fcfdad86cc264e

まとめ

最近、新しくプログラミング言語を覚えることに関して、以下の記事を見つけました。

https://www.ntt.com/shines/posts/b-t_20201012.html

(1)四半期毎に技術書を読む
(2)手を動かして学ぶ
(3)毎年少なくとも1つの言語を学習する
(4)身の回りをプログラミング対象にする
(5)アウトプットを行う

1つの言語だけですとその世界だけで閉じてしまうので、様々な言語を覚えることは非常に重要だなと私も感じました。

(1)と(5)の内容は非常に耳が痛い話です...w
幸い、アウトプットする環境に恵まれているので、それをフルで活用して今後は頑張っていこうかな、と思います。

2023年ももっと腕を磨き、そしてインプット・アウトプットをもっと大事にして頑張っていきたいと思います。

Discussion