2023年を振り返って
昨日をもってようやく仕事がおさまりました。1年間働いてきた私の身体にひとまずお疲れ様といいたいと思います!お疲れ様でした!
でも実は、数日前にコロナにかかっちゃいまして熱と悪寒で死にそうでした・・・笑
最後の最後で気を抜いたのが悪かったかなと思ってます。
さて、今年もあと2日となったので今年の締めくくりとして2023年の振り返りをしようと思います。
今年目標にあげていた以下の3つについて書きます
- モダン開発の技術取得
- 資格取得
- 健康
モダン開発の技術取得
今年も恵まれた環境で仕事をさせていただき、いい経験がつめていると思っています。 技術スタックとしてAWS、Terraform、Docker、Spring、Java、DDDをベースにクラウドネイティブ、マイクロサービス を使って開発できているのが大きいと思います。 クラウドサービスを使い開発する場合は、特にUnitテストをするときどうするのかmockitoを使ってクラウドサービスをモック化するのか、利用したいサービスのコンテナイメージを探して起動して使うのか、LocalStackを使ってクラウドを再現するのか これだけでも色々なやり方があり学びが大きいです。
私はこれまでREST機構を使ったAPIバックエンドの構築、フロントエンドではSPA(Vue)を中心とした開発、Azureサービス利用ということで結構イケてるエンジニアだと思っていました。 しかし、世の中の技術、開発はもっと進んでいることを今の現場を通じて感じることができています。 来年は、もっと手を動かしてOUTPUTする時間を多めにしていこうと思います。
資格試験
今年は大きく2つ取ろうと思っていた資格がありました。以下の2つです。
- Certified Developer - Associate
- Certified SysOps Administrator - Associate
結果からお話すると1勝1敗でSysOpsの方は落としてしまいました。 勉強時間もスマホ見てしまってダラダラやってしまって記憶の曖昧さが生まれてしまったことが原因です。 小テストで間違った箇所は集中してBlack Belt、解説を読み込んで次に備えようと思います。
健康
なんといっても仕事ができるのは健康な体があってからこそです。昨年の健康診断で脂肪肝と診断されました。 余裕で健康だろうと思っていても体は正直でして、肝臓に脂肪がうっすら覆いかぶさっているとのこと。画像でみても他の臓器と 比べて白くなっていました。 そこで、1年間糖質制限とランニングを週に2回約50分を実施してきました。 その成果が報われ、今年は所見なし!とのことでした。
努力は必ずしも報われるわけではないですが、行動しなければ前に進まない。ということを改めて学んだいい機会でした。
最後に
今年のブログ投稿数は、この記事を含めて6本となりました。 OUTPUTすることを意識しようと年初に決めていたので少しは守れたかなと思います。まだ全然少ないですが・・・笑 来年はこの辺も多くして習慣化をものにできるようにしたいと思います。
みなさまよいお年を。
開発者から見るスクラムマスターのチームへの関わり方
現在、私は開発者としてアジャイル開発でモブを使って開発をすすめているプロジェクトに参画しています。 チームはスプリントを重ねるにつれプロジェクトメンバーがチームとして何をやるべきかを考え、協力して、答えを導き出すという行動が日常から行われるようになりました。 そんなある日、外部からスクラムマスターが新たにチームにジョインしました。 そして、そこからスプリントレビューが迫った前日にスクラムマスターがこう言いました。
「次は何するんだっけ?何するか決まってますか?今日の目標は?」と。 その場を仕切りだして、プロジェクト進行をし始めたのです。
チームメンバーは「え?」となり一時的に固まりました。
明日スプリントレビューってのもわかっているし、デイリースクラムで進捗の内容も確認して明日には間に合いそうな状況です。
プロジェクト進行を凍らせるほどの役割がスクラムマスターなのか そもそもスクラムマスターってどういう風にチームと関わるのか良いのかを考えるようになりました。
スクラムマスターの役割
スクラムマスターは何をするのか、すべきなのかをまずは知る必要があるなと思い調べてみました。 以下に代表的なものをあげてみます。
- スクラムイベント、各ロールの役割を浸透させること
- スプリントゴールへの障壁を取り除くこと
- PO、開発メンバーのサポート
まとめるとチームの状態を把握しながらも、成長させゴールに導くといったところでしょうか。
チームの状態を把握して関わる
前述の役割を考慮すると、チームの状態を把握することが必要になってきそうです。 これは、個人の特性や性格はもちろんのこと、チームの成長度合いを図る必要があるのかなと思います。
チームの成長状況を把握する1つの指標に、タックマンモデルが 使えそうだったので、それぞれのフェーズがどのような状態かを記載したのち 考えを入れていきたいと思います。
フェーズ | 説明 |
---|---|
形成期 | メンバーが集まったばかりで、お互いのことを理解できていない。不安が続く状態。 |
混乱期 | 各メンバーの本音や意見が活発になる状態が続く。対立や衝突が発生する。 |
統一期 | お互いを理解し、違いを認めあえている状態。共通のルールや役割が明確になりはじめている。 |
機能期 | チームに結束力がうまれ、ゴールに向かっている状態。チームメンバー同士のフォローも生まれる。 |
閑散期 | プロジェクトが終了する段階 |
特に、形成期、混乱期ではチーム内でのトラブル、チームとしての考えが簡単にまとまらないことが多くでます。そんなときに進め方が安定するまでスクラムマスターに入り込んでもらい道を切り開く手助けをしてほしいと思います。
そして成長してメンバーがリーダシップやタスクのオーナシップを発揮して進めることができれば、迷ったときにスクラムマスターにコーチングして助けてもらうことで自分たちのできることが徐々に増えると思います。
つまり、形成期、混乱期はスクラムマスターがティーチングを中心に進め、積極的に関わり 逆に統一期、機能期では積極的に関わる必要はなく必要になった段階で関わるのが良いと感じています。
【引用元:https://slmt.co.jp/team_building/】
あくまで支援をしてほしい
最後にチームと関わる場合について一言いいたいのは、あくまで支援であってほしいということです。
冒頭の例のように、チームの状態を把握していないままスクラムマスターが起点で物事をはじめてしまうと 「やる気」がなくなったり、スクラムマスター中心に物事が進む状況が出来上がってしまいます。
アジャイルソフトウェア開発宣言には、「包括的なドキュメントよりも動くソフトウェアを」「計画に従うよりも変化への対応を」とあります。
できるだけ顧客に価値を提供するにはこれらを実践していく必要があります。 そのためには、自己組織化も必要です。
チームの状況を把握し、あくまでチーム起点で物事が進むようにスクラムマスターはコーチングすることが重要だと思います。
そのために、あえて答えを言わず開発者が困ったとき、求められたときに支援の手を差し伸べてほしいし、また頼りたいと思える存在であってほしいと思います。
ChatGPTsでコーディング単語を出力するBotを作った話
はじめに
2023年11月06日にOpenAI DevDayが開催されてChatGPT Plusユーザであれば 自作でBotが作れるようになりました。 そこで、実際にどのようにしてBotを作るのか、どんなBotができたのか紹介します!
どんなBotを作ったのか?
結論からいくと、プログラミングのコーディングをする際に必要な英単語の候補を出してくれる Botを作ってみました。 変数名を決めるときって迷いますよね。
そういったときにちょっと入力して候補だしてくれたら 検索して探し出す手間が省けるじゃないかと。
で実際に作ったBotがこちらです! ※ChatGPTアカウントのアカウントが必要です
例えば、次のように単語を日本語で入力すると表形式で英単語の候補を出してくれます でなかったら根気よく入力の仕方を変えてください!笑
・顧客の名前 ・商品一覧 ・決済方法 etc...
作成の所要時間は?
おおよそ、10分くらい。 表形式で出してとかチューニングしてテストするとなるともう少し時間がかかると思います。
実際にどのような感じで作ったか
手順は簡単で基本的に、プロンプトでどのようなものを作ろうとしているか指示を出すだけ
手順1: 何を作るか教える
ChatCPTの左タブから「Explore」を選択。「Create a GPT」があるのでそちら押します。 以下のように「どんなものを作りたいですか?」と聞かれるので入力します。
手順2: ChatGPTがロゴを勝手に作り始める
手順1の作りたいものを考慮して、自動でロゴを作ってくれます。 まじで便利だ。想像と違ったらやり直すように指示すればOKと思います! 私は適当に「良いですね」といいました。笑
手順3:出力ルールを明確にする
ChatGPTから出力する際の制約であるとかどうしてほしいといった注意点を聞かれたので以下の内容を入力しました。 ルールを作成しました。
※結局一つ目プログラミング言語のルールは、毎回どの言語にするか聞かれるようになったため、「プログラミング言語の指定はなしで」とチューニングしました。
一つ目のルールは、プログラミング言語は以下を対象としてください ・Java ・Kotlin ・Javascript ・TypeScript ・C言語 ・C# ・Ruby ・Perl ・Python ・Swift
2つ目のルールは、以下の点に注意して名前の候補を出してください ・名詞を使う ・できるだけ具体的な名前にする ・必要な情報を組み入れる ・日本語(ローマ字)を避ける ・意味のない単語を入れない
以上で作成完了です!!
動作確認
「会計」という単語を入力して確認してみましたが、単語が文中に埋もれて見づらい状況となりました。
そのため表形式で出力するように指示をだします。
「会計」だと広すぎてもう少し、どのような場面か、限定してほしい旨がきたので「管理会計」にしました。 表形式で出力されましたが、管理会計に関する用語が並んだ感じになっちゃいまいた・・・。 入力したものも表に含めてくれという指示が必要かもしれません。 まぁでも何とか作れたので良かったということにします。
まとめ
今回やってみて簡単につくれる!ということはわかったもののやはり、使い手がどうやったら直感的に使えるのか、どうやったら見やすいか、そういうものを感じることができました。 また、出力の精度をあげるためにどのような条件を与えるか入力の方法も考えてやることが重要だとわかりました。
以上! 終了です!読んでくださった方ありがとうございます!
Spring Boot (java.lang.IllegalArgumentException: argument type mismatch)でのエラー
はじめに
Spring Boot + DDD + MyBatis +H2 という構成でDDDサンプルアプリケーションを書いていたのですが 以下のエラーでドハマリしたのでメモ
エラー内容
java.lang.IllegalArgumentException: argument type mismatch at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:73) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:53) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyConstructorAutomapping(DefaultResultSetHandler.java:774) ~[mybatis-3.5.13
結論
ドメイン層のエンティティを作る際のアノテーションの設定不備でした。 具体的には、以下3つのクラスを作っていますが、今回問題があったのはUserクラス ・EmailをもつvalueObjectクラス ・NameをもつvaluObjectクラス ・Email,NameオブジェクトをもつUserクラス
以下にUserクラスのよくないパターンを記載します。 【修正前】
package com.user.userapi.domain; import lombok.Value; @Value public class User { Email email; Name name; }
【修正後】
import lombok.Data; @Data public class User { Email email; Name name; }
@ValueアノテーションではSetterが存在しないため、このUserクラスへ処理でデータが入る場合には要注意です。 私の場合は、mybatisでselect文を発行したあとにこのUserクラスに戻りデータをSetするところがあったため上記のエラーが発生していました。
だいたい、こういったエラーは凡ミスですね・・・
同じような境遇の方の参考になれば幸いです。
ありがとうございました。
Space Xの打ち上げとアジャイル文化
テスト飛行
4月20日に2段型ロケットの大型宇宙船の発射実験が行われましたね。 結果は、打ち上げ4分後に1段目と2段目の分離がうまくいかず機体を爆破しました。
一見失敗に見えるけど、Elon MaskやSpaceXの捉え方は学ぶことが多かったので紹介します。
・Elon Maskって誰? 実業家でありエンジニアであり、投資家でもある方です。エンジニアと実業家をこなせるって最強じゃん。 ・何をしてきた人? PayPalの前進のX.comっていうオンラインの銀行を作り 電気自動車のテスラ(Tesla) 宇宙事業開発のスペースX(SpaceX) の創設者でもあります。
Elon MaskとSpaceXのコメント
「おめでとうございます。スペースXは、Starshipのテストローンチに参画しました! 数ヶ月後に控えた次回のテストローンチに向け、多くのことを学びました。」
「このようなテストでは、成功は学んだことからもたらされます。今日のテストは、SpaceX社が多惑星生活を実現するために、Starshipの信頼性を高めるのに役立つことでしょう。」
まとめ
うまくはいかなかったけど、とてもポジティブに捉えていますね。 私たちソフトウェア開発よりスプリント期間は長いかもしれないですが、未知のものに立ち向かい失敗を享受して次に繋げる。 アジャイル文化そのものだなと思ったし、失敗を恐れずやっていくことの大事さを学びました。
エンジニアを成長させるきっかけ
成長の必要性
エンジニアで部署を管理する立場やグループリーダ、OJT担当の方々は日々の業務に加え、チームや部下の底上げも行わないといけないと思います。 そこで必ずぶち当たる壁が、個々の成長ですね。チームとして連携することはもちろん大事。しかし、その前に各個人がやらないといけないとことをやって成長することも1つのチームを作りあげるきっかけになります。
2014年のW杯の前に当時の日本代表の本田圭佑選手が「"個の成長" "個の質を上げること"」に言及していたことを鮮明に覚えています。
データから見る成長のきっかけ
今年(2023年)の2月9日にIPAから「DX白書2023」※1が公開されました。これを見ていて面白いデータがあったので紹介します。 「DX白書2023 第4部 デジタル時代の人材」の63ページ目です。
[DX白書2023引用]
このデータによれば、自身のスキルを自発的に見直すきっかけになったのは「現業務の社会的意義・社会貢献性を感じた」という点。 ここでわかることは、配置転換や上司からの言葉ではなく「社会から求められている」と感じたときの方が人間は意欲的に学習するということ。
まとめ
10個のスキルを部下に教えるよりも「1つでも多く社会や顧客との接点を作り上げてあげれるか」を考えて仕事をしよう。
PS. このDX白書 面白いデータがいっぱい入っているのでぜひ読んでみてください!おすすめです!