プロジェクト概要
私が参画していたプロジェクトは、クライアント先のUX改善チームに入って、開発を担当したり、改善提案を実施したりするものでした。
一緒のチームに協業のベンダーさんも入っていたので、技術サポートなども多く行いました。
今回はこちらのプロジェクトで学んだことをアウトプットして、皆様に紹介するとともに自分の成長録として活用するためにも記載していきます。
成長① 様々な案件・技術の経験
1つ目の成長ポイントは、様々な案件・技術の経験です。
本プロジェクトは、何か1つのプロダクトを作成するのではなく、様々な改善・改修案件をこなしていくため、多くの技術に触れることができました。
プログラミング言語では、C#,SQL,Python,TypeScript(React)などです。
またパブリッククラウドとして主にAzureを利用していましたが、その中のSQL DB,Storage,App Service,Functions,Service Bus,AI Search,OpenAI Serviceなどなど多くのサービスを利用する機会がありました。
その中で特に成長を感じることができた案件を2つご紹介します。
1. 既存の権限設定システムの人事データをAPI連携に変更、APIは新規作成
案件概要
既存でSharePointの権限を設定するシステムが存在していました。
本システムは権限情報で必要となる人事データを他システムから受領した加工済みテキストファイルとして連携していました。
改修内容は、このファイル連携を廃止しようというものでした。
ファイル連携はシステム間を密結合にする原因にもなるため、切り離すためにも改修案件として挙がっていました。
実現方法
既存リソースとして、人事データをCSV連携するAPIが存在していました。
そのAPIを利用して、人事データをAzure SQL DBに格納後、権限設定システムで使用できる形にデータを加工するためのAPIを作成することでファイル連携廃止を実現しました。
まず前段のDBに人事データを格納する部分ですが、こちらはCSVから取り出す人事情報とAzure EntraIDから取り出すセキュリティグループ情報をDBに格納しています。
処理はC#で記述し、日次バッチで実行しました。
EntraIDからのデータは、Graph APIを用いて、フィルターなどクエリパラメータを活用し、パフォーマンスも意識して取得しました。
肝心のAPIですが、こちらもC#を用いて記述しました。
ASP.NET Core ODataというパッケージをAPIの骨格として、DBに格納したデータを権限設定システムで使いやすい形で返却するAPIを作成しました。
複数メンバーで案件対応していたため、権限設定システムを既存のファイル連携からAPIに切り替える実装は他メンバーに担当していただきました。
成長ポイント
案件規模が大きかったこともあり、メンバーは計5人で対応していました。
構成としては、弊社メンバーが私と私の上司で、そのほかに協業の会社の方が3名という形でした。
私のポジションは案件のマネジメントが主でした。私の上司には、私の働きと技術的なサポートを私とともに実施していただいていました。
成長を感じた点としては、今までマネジメントをやったことがなかった身なので、勝手がわからず最初はファシリもタジタジでしたが、日を重ねるごとに進捗や課題に関しての会話をスムーズに展開できるようになりました。
また少し自分の作業時間を削ってでも、メンバーの技術相談や不満点のヒアリングにコールで対応したりすると信頼関係も築くことができ、それも結果として進捗スピードのアップにつながったと思います。(困ったことをすぐに相談できるような雰囲気を作ることができた!)
2. Azure OpenAI Serviceを用いて、社内情報のチャット検索システムを構築
案件概要
元々弊社が導入したシステムで、Azure AI Searchを用いた社内情報の検索システムが存在していましたが、ChatGPTの登場で社内情報をチャットでインタラクティブに検索できるようにしませんか?という提案をしました。
顧客も乗り気で、Azure OpenAIの社内規定などもできていない状態の時からPoCとして案件をスタートさせました。
実現方法
既存で検索システムを作成したおかげでAzure AI Searchにはデータがすでに入っていたので、それをチャット検索でも検索インデックスとしました。
アプリケーションの技術スタックとしては、フロントエンドをReact、バックエンドをPythonで構築し、Azure App Serviceにデプロイしました。
PythonではQuartというフレームワークを使用してAzure OpenAIやAzure AI Searchとやりとりする為のAPIを構築しました。
成長ポイント
Azure OpenAIが技術的に新しいものだったので、ドキュメントなどもWeb上にあまりなく、アーキテクチャの最適構成を考えることが様々なサービスのメリット・デメリットを学ぶ良い機会になりました。
例えば、チャットのログを格納する方法ですが、分析やチャット履歴に使いたかったので、SQL DB, Cosmos DB(NoSQL), Storage Tableなどの候補がありました。
MS側からはCosmos DBがおすすめされていましたが、値段が高く費用対効果を得られないのではと議論があり、本アプリの構成は分析用のログをSQL DB、履歴用のログをStorage Tableに格納することとなりました。
別々にしたのは格納する粒度が違った為です。SQL DBの方は1チャットごとに情報が格納され、Storage Tableの方には1会話ごとに格納するようにしています。
また、Azure OpenAIのチャット結果の妥当性を検証し、リファインしていく作業や、1会話の中でトークン数がオーバーしないように処理を構築する作業などは、別プロジェクトでも応用ができると考え、ワクワクしながら進めた記憶があります。
こういった技術選定や構成の最適化を実施するのが楽しく、とても学びになりました。
QuartでのAPI開発も書きたいですが、書いていると長くなってしまうのでこちらは別記事でまとめたいなと思います。
成長② コミュニケーション力向上
2つ目の成長ポイントは、コミュニケーション力の向上です。
こちらは2つの観点で向上を感じました。
1つ目は、タスクの進め方です。
報連相なんて言葉がビジネスマンの基礎としてありますが、今考えればプロジェクト参画当初は全然できていなかったと思います。
マネージャーという方々は、大体パーシャルアサインで忙しいのが常なので、雑な質問は大体嫌いです。
そのため相談なんかも雑にオープンに聞くのはNGです。
質問や相談の中で、私が気をつけるようになったのは、自分がどこまで理解しているかと何を知りたいかを明確に且つ簡潔に記載することです。(文章を簡潔にすることもかなり重要です!)
また、参画して日が浅い段階だとマネージャーの方も自分がどれくらいの能力なのか不透明なので、作業を正しく実施できているのか不安です。
そういった時には細かく報告をして、自分の作業がマネージャーの方の指示と認識齟齬がないかを確認しながら進めるということを意識しておりました。
参画当初はプロジェクトの暗黙の了解的なものが理解できていなかったりして、変なことをしていまいがちなので、そういった意味でもこまめな報告と連絡は大事だと思います。
当たり前ですが、意外と難しく、特に社会人歴が浅い人はできていなかったりするので、意識してみてください。
成長③ 改善活動を通して自走力・創造力向上
3つ目の成長ポイントは、改善活動を通しての自走力・創造力の向上です。
本プロジェクトはここまで記載してきた通り、自由度が高いため、開発生産性を上げるということもいくつか実施できました。
細々したものからCIの導入など様々実施しました。
そういった日々の中で、改善点を創出する目を鍛えることができたと思います。
開発していれば何かと不満は出てくるものです。
そういった時にそれを工数をかけずに解決出来るのではないかという思考になり、一人で調査から形にするまでを実施してきました。
本当に1つ1つは細かいものです。
例えばコマンドをいちいち打たなくてもいいように、TaskRunnerというVSCodeのExtensionを導入してリポジトリごとによく使うコマンドを登録したり、VoltaというNodeのパッケージ管理ツールを導入して、リポジトリ間のパッケージバージョンを管理させたりと本当に小さいものです。
ただそういった積み重ねで、結果として開発スピードの向上に寄与できたり、周りのエンジニアの方から感謝をいただけたりすることで、とても意欲的に活動できました。
この改善マインドというものはどの職種であっても、通用するものだと思いますし、これからも大事にしていきたいと思います!!
まとめ
私の短い社会人人生の中では最長となったプロジェクトですが、とても学べることが多く、メンバーにも恵まれていたプロジェクトでした。
今後もこのプロジェクトで学んだことを活かして、さらに成長していけるよう日々努力を重ねていきたいと思います!